{ "version": 3, "sources": ["node_modules/promise-critical-section/index.js", "node_modules/jquery/dist/jquery.js", "node_modules/toastr/toastr.js", "node_modules/tributejs/src/utils.js", "node_modules/tributejs/src/TributeEvents.js", "node_modules/tributejs/src/TributeMenuEvents.js", "node_modules/tributejs/src/TributeRange.js", "node_modules/tributejs/src/TributeSearch.js", "node_modules/tributejs/src/Tribute.js", "node_modules/flickity/node_modules/ev-emitter/ev-emitter.js", "node_modules/flickity/node_modules/get-size/get-size.js", "node_modules/flickity/node_modules/fizzy-ui-utils/utils.js", "node_modules/flickity/js/cell.js", "node_modules/flickity/js/slide.js", "node_modules/flickity/js/animate.js", "node_modules/flickity/js/core.js", "node_modules/unidragger/node_modules/ev-emitter/ev-emitter.js", "node_modules/unidragger/unidragger.js", "node_modules/flickity/js/drag.js", "node_modules/flickity/js/prev-next-button.js", "node_modules/flickity/js/page-dots.js", "node_modules/flickity/js/player.js", "node_modules/flickity/js/add-remove-cell.js", "node_modules/flickity/js/lazyload.js", "node_modules/imagesloaded/node_modules/ev-emitter/ev-emitter.js", "node_modules/imagesloaded/imagesloaded.js", "node_modules/flickity/js/imagesloaded.js", "node_modules/flickity/js/index.js", "node_modules/flickity-as-nav-for/node_modules/fizzy-ui-utils/utils.js", "node_modules/flickity-as-nav-for/as-nav-for.js", "node_modules/infinite-scroll/node_modules/ev-emitter/ev-emitter.js", "node_modules/infinite-scroll/node_modules/fizzy-ui-utils/utils.js", "node_modules/infinite-scroll/js/core.js", "node_modules/infinite-scroll/js/page-load.js", "node_modules/infinite-scroll/js/scroll-watch.js", "node_modules/infinite-scroll/js/history.js", "node_modules/infinite-scroll/js/button.js", "node_modules/infinite-scroll/js/status.js", "node_modules/infinite-scroll/js/index.js", "node_modules/scratchcard-js/build/scratchcard.min.js", "node_modules/intl-tel-input/build/js/intlTelInput.js", "node_modules/intl-tel-input/index.js", "node_modules/qrcode-generator/qrcode.js", "node_modules/@hotwired/stimulus/dist/stimulus.js", "assets/js/controllers/AjaxPopoverController.js", "assets/js/controllers/AtLeastOneCheckedController.js", "assets/js/controllers/BadgeCollectedController.js", "assets/js/controllers/CheckoutAddressEntryController.js", "assets/js/controllers/ClaimsQualifyingProductsController.js", "assets/js/controllers/CodeEntryController.js", "assets/js/controllers/CredentialsController.js", "assets/js/controllers/FavouriteController.js", "assets/js/controllers/FeedController.js", "assets/js/controllers/FeedItemController.js", "assets/js/controllers/FeedLikeButtonController.js", "assets/js/controllers/FeedPostCreateController.js", "assets/js/controllers/GifPauseController.js", "assets/js/controllers/FormController.js", "assets/js/controllers/HelpController.js", "assets/js/controllers/LayoutAccountDropdownController.js", "assets/js/controllers/LayoutController.js", "assets/js/controllers/IntercomController.js", "assets/js/controllers/LayoutSearchSuggestController.js", "assets/js/controllers/LogUserActionController.js", "assets/js/controllers/MembershipRequestController.js", "node_modules/preact/src/util.js", "node_modules/preact/src/options.js", "node_modules/preact/src/create-element.js", "node_modules/preact/src/diff/props.js", "node_modules/preact/src/component.js", "node_modules/preact/src/create-context.js", "node_modules/preact/src/constants.js", "node_modules/preact/src/diff/children.js", "node_modules/preact/src/diff/index.js", "node_modules/preact/src/render.js", "node_modules/preact/src/clone-element.js", "node_modules/preact/src/diff/catch-error.js", "node_modules/preact/hooks/src/index.js", "node_modules/preact/compat/src/util.js", "node_modules/preact/compat/src/PureComponent.js", "node_modules/preact/compat/src/memo.js", "node_modules/preact/compat/src/forwardRef.js", "node_modules/preact/compat/src/Children.js", "node_modules/preact/compat/src/suspense.js", "node_modules/preact/compat/src/suspense-list.js", "node_modules/preact/compat/src/portals.js", "node_modules/preact/compat/src/render.js", "node_modules/preact/compat/src/index.js", "node_modules/@fullcalendar/core/internal-common.js", "node_modules/@fullcalendar/core/index.js", "node_modules/@fullcalendar/daygrid/internal.js", "node_modules/@fullcalendar/daygrid/index.js", "node_modules/@fullcalendar/timegrid/internal.js", "node_modules/@fullcalendar/timegrid/index.js", "assets/js/controllers/MyEventsCalendarController.js", "assets/js/controllers/MyEventsDetailController.js", "assets/js/controllers/NominationCreateController.js", "assets/js/controllers/PrizeController.js", "assets/js/controllers/ProfileController.js", "assets/js/controllers/ProfileEditPictureController.js", "assets/js/controllers/ReferAFriendController.js", "assets/js/controllers/RegistrationProfileController.js", "assets/js/controllers/RewardController.js", "node_modules/p-debounce/index.js", "assets/js/controllers/RewardsController.js", "assets/js/controllers/SalesTargetVisualisation.js", "assets/js/controllers/ScratchcardController.js", "assets/js/controllers/SignInVerifySmsController.js", "node_modules/spin-wheel/src/util.js", "node_modules/spin-wheel/src/constants.js", "node_modules/spin-wheel/src/events.js", "node_modules/spin-wheel/src/item.js", "node_modules/spin-wheel/src/wheel.js", "assets/js/controllers/SpinTheWheelController.js", "node_modules/spin.js/spin.js", "assets/js/controllers/SpinnerController.js", "assets/js/controllers/ConfirmController.js", "assets/js/controllers/SpendRequestController.js", "assets/js/controllers/TelephoneNumberController.js", "node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js", "node_modules/@babel/runtime/helpers/esm/extends.js", "node_modules/qrcanvas/lib/qrcanvas.esm.js", "assets/js/controllers/TwoFASettingsController.js", "assets/js/controllers/UserNotificationsController.js", "assets/js/plugins.js", "assets/js/application.js"], "sourcesContent": ["'use strict';\r\n\r\nclass CriticalSection {\r\n constructor(options = { Promise: Promise }) {\r\n this._busy = false;\r\n this._options = options;\r\n this._queue = [];\r\n }\r\n\r\n enter() {\r\n return new (this._options.Promise)(resolve => {\r\n this._queue.push(resolve);\r\n\r\n if (!this._busy) {\r\n this._busy = true;\r\n this._queue.shift()();\r\n }\r\n });\r\n }\r\n\r\n leave() {\r\n if (this._queue.length) {\r\n this._queue.shift()();\r\n } else {\r\n this._busy = false;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CriticalSection;\r\n", "/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "/*\n * Toastr\n * Copyright 2012-2015\n * Authors: John Papa, Hans Fj\u00E4llemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n/* global define */\n(function (define) {\n define(['jquery'], function ($) {\n return (function () {\n var $container;\n var listener;\n var toastId = 0;\n var toastType = {\n error: 'error',\n info: 'info',\n success: 'success',\n warning: 'warning'\n };\n\n var toastr = {\n clear: clear,\n remove: remove,\n error: error,\n getContainer: getContainer,\n info: info,\n options: {},\n subscribe: subscribe,\n success: success,\n version: '2.1.4',\n warning: warning\n };\n\n var previousToast;\n\n return toastr;\n\n ////////////////\n\n function error(message, title, optionsOverride) {\n return notify({\n type: toastType.error,\n iconClass: getOptions().iconClasses.error,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function getContainer(options, create) {\n if (!options) { options = getOptions(); }\n $container = $('#' + options.containerId);\n if ($container.length) {\n return $container;\n }\n if (create) {\n $container = createContainer(options);\n }\n return $container;\n }\n\n function info(message, title, optionsOverride) {\n return notify({\n type: toastType.info,\n iconClass: getOptions().iconClasses.info,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function subscribe(callback) {\n listener = callback;\n }\n\n function success(message, title, optionsOverride) {\n return notify({\n type: toastType.success,\n iconClass: getOptions().iconClasses.success,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function warning(message, title, optionsOverride) {\n return notify({\n type: toastType.warning,\n iconClass: getOptions().iconClasses.warning,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function clear($toastElement, clearOptions) {\n var options = getOptions();\n if (!$container) { getContainer(options); }\n if (!clearToast($toastElement, options, clearOptions)) {\n clearContainer(options);\n }\n }\n\n function remove($toastElement) {\n var options = getOptions();\n if (!$container) { getContainer(options); }\n if ($toastElement && $(':focus', $toastElement).length === 0) {\n removeToast($toastElement);\n return;\n }\n if ($container.children().length) {\n $container.remove();\n }\n }\n\n // internal functions\n\n function clearContainer (options) {\n var toastsToClear = $container.children();\n for (var i = toastsToClear.length - 1; i >= 0; i--) {\n clearToast($(toastsToClear[i]), options);\n }\n }\n\n function clearToast ($toastElement, options, clearOptions) {\n var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n $toastElement[options.hideMethod]({\n duration: options.hideDuration,\n easing: options.hideEasing,\n complete: function () { removeToast($toastElement); }\n });\n return true;\n }\n return false;\n }\n\n function createContainer(options) {\n $container = $('<div/>')\n .attr('id', options.containerId)\n .addClass(options.positionClass);\n\n $container.appendTo($(options.target));\n return $container;\n }\n\n function getDefaults() {\n return {\n tapToDismiss: true,\n toastClass: 'toast',\n containerId: 'toast-container',\n debug: false,\n\n showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\n showDuration: 300,\n showEasing: 'swing', //swing and linear are built into jQuery\n onShown: undefined,\n hideMethod: 'fadeOut',\n hideDuration: 1000,\n hideEasing: 'swing',\n onHidden: undefined,\n closeMethod: false,\n closeDuration: false,\n closeEasing: false,\n closeOnHover: true,\n\n extendedTimeOut: 1000,\n iconClasses: {\n error: 'toast-error',\n info: 'toast-info',\n success: 'toast-success',\n warning: 'toast-warning'\n },\n iconClass: 'toast-info',\n positionClass: 'toast-top-right',\n timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\n titleClass: 'toast-title',\n messageClass: 'toast-message',\n escapeHtml: false,\n target: 'body',\n closeHtml: '<button type=\"button\">×</button>',\n closeClass: 'toast-close-button',\n newestOnTop: true,\n preventDuplicates: false,\n progressBar: false,\n progressClass: 'toast-progress',\n rtl: false\n };\n }\n\n function publish(args) {\n if (!listener) { return; }\n listener(args);\n }\n\n function notify(map) {\n var options = getOptions();\n var iconClass = map.iconClass || options.iconClass;\n\n if (typeof (map.optionsOverride) !== 'undefined') {\n options = $.extend(options, map.optionsOverride);\n iconClass = map.optionsOverride.iconClass || iconClass;\n }\n\n if (shouldExit(options, map)) { return; }\n\n toastId++;\n\n $container = getContainer(options, true);\n\n var intervalId = null;\n var $toastElement = $('<div/>');\n var $titleElement = $('<div/>');\n var $messageElement = $('<div/>');\n var $progressElement = $('<div/>');\n var $closeElement = $(options.closeHtml);\n var progressBar = {\n intervalId: null,\n hideEta: null,\n maxHideTime: null\n };\n var response = {\n toastId: toastId,\n state: 'visible',\n startTime: new Date(),\n options: options,\n map: map\n };\n\n personalizeToast();\n\n displayToast();\n\n handleEvents();\n\n publish(response);\n\n if (options.debug && console) {\n console.log(response);\n }\n\n return $toastElement;\n\n function escapeHtml(source) {\n if (source == null) {\n source = '';\n }\n\n return source\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n }\n\n function personalizeToast() {\n setIcon();\n setTitle();\n setMessage();\n setCloseButton();\n setProgressBar();\n setRTL();\n setSequence();\n setAria();\n }\n\n function setAria() {\n var ariaValue = '';\n switch (map.iconClass) {\n case 'toast-success':\n case 'toast-info':\n ariaValue = 'polite';\n break;\n default:\n ariaValue = 'assertive';\n }\n $toastElement.attr('aria-live', ariaValue);\n }\n\n function handleEvents() {\n if (options.closeOnHover) {\n $toastElement.hover(stickAround, delayedHideToast);\n }\n\n if (!options.onclick && options.tapToDismiss) {\n $toastElement.click(hideToast);\n }\n\n if (options.closeButton && $closeElement) {\n $closeElement.click(function (event) {\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n event.cancelBubble = true;\n }\n\n if (options.onCloseClick) {\n options.onCloseClick(event);\n }\n\n hideToast(true);\n });\n }\n\n if (options.onclick) {\n $toastElement.click(function (event) {\n options.onclick(event);\n hideToast();\n });\n }\n }\n\n function displayToast() {\n $toastElement.hide();\n\n $toastElement[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n );\n\n if (options.timeOut > 0) {\n intervalId = setTimeout(hideToast, options.timeOut);\n progressBar.maxHideTime = parseFloat(options.timeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n if (options.progressBar) {\n progressBar.intervalId = setInterval(updateProgress, 10);\n }\n }\n }\n\n function setIcon() {\n if (map.iconClass) {\n $toastElement.addClass(options.toastClass).addClass(iconClass);\n }\n }\n\n function setSequence() {\n if (options.newestOnTop) {\n $container.prepend($toastElement);\n } else {\n $container.append($toastElement);\n }\n }\n\n function setTitle() {\n if (map.title) {\n var suffix = map.title;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.title);\n }\n $titleElement.append(suffix).addClass(options.titleClass);\n $toastElement.append($titleElement);\n }\n }\n\n function setMessage() {\n if (map.message) {\n var suffix = map.message;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.message);\n }\n $messageElement.append(suffix).addClass(options.messageClass);\n $toastElement.append($messageElement);\n }\n }\n\n function setCloseButton() {\n if (options.closeButton) {\n $closeElement.addClass(options.closeClass).attr('role', 'button');\n $toastElement.prepend($closeElement);\n }\n }\n\n function setProgressBar() {\n if (options.progressBar) {\n $progressElement.addClass(options.progressClass);\n $toastElement.prepend($progressElement);\n }\n }\n\n function setRTL() {\n if (options.rtl) {\n $toastElement.addClass('rtl');\n }\n }\n\n function shouldExit(options, map) {\n if (options.preventDuplicates) {\n if (map.message === previousToast) {\n return true;\n } else {\n previousToast = map.message;\n }\n }\n return false;\n }\n\n function hideToast(override) {\n var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n var duration = override && options.closeDuration !== false ?\n options.closeDuration : options.hideDuration;\n var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n if ($(':focus', $toastElement).length && !override) {\n return;\n }\n clearTimeout(progressBar.intervalId);\n return $toastElement[method]({\n duration: duration,\n easing: easing,\n complete: function () {\n removeToast($toastElement);\n clearTimeout(intervalId);\n if (options.onHidden && response.state !== 'hidden') {\n options.onHidden();\n }\n response.state = 'hidden';\n response.endTime = new Date();\n publish(response);\n }\n });\n }\n\n function delayedHideToast() {\n if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n intervalId = setTimeout(hideToast, options.extendedTimeOut);\n progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n }\n }\n\n function stickAround() {\n clearTimeout(intervalId);\n progressBar.hideEta = 0;\n $toastElement.stop(true, true)[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing}\n );\n }\n\n function updateProgress() {\n var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n $progressElement.width(percentage + '%');\n }\n }\n\n function getOptions() {\n return $.extend({}, getDefaults(), toastr.options);\n }\n\n function removeToast($toastElement) {\n if (!$container) { $container = getContainer(); }\n if ($toastElement.is(':visible')) {\n return;\n }\n $toastElement.remove();\n $toastElement = null;\n if ($container.children().length === 0) {\n $container.remove();\n previousToast = undefined;\n }\n }\n\n })();\n });\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n if (typeof module !== 'undefined' && module.exports) { //Node\n module.exports = factory(require('jquery'));\n } else {\n window.toastr = factory(window.jQuery);\n }\n}));\n", "if (!Array.prototype.find) {\n Array.prototype.find = function(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined')\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function')\n }\n var list = Object(this)\n var length = list.length >>> 0\n var thisArg = arguments[1]\n var value\n\n for (var i = 0; i < length; i++) {\n value = list[i]\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n }\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent.prototype = window.Event.prototype\n }\n\n window.CustomEvent = CustomEvent\n}", "class TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the <li> container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let char;\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nexport default TributeEvents;\n", "class TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\nexport default TributeMenuEvents;\n", "// Thanks to https://github.com/jeff-collins/ment.io\nimport \"./utils\";\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute\n this.tribute.range = this\n }\n\n getDocument() {\n let iframe\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition)\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition)\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto'\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto'\n }\n\n if (scrollTo) this.scrollIntoView()\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n }\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right)\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom)\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none'\n this.positionMenuAtCaret(scrollTo)\n }\n }, 0)\n\n } else {\n this.tribute.menu.style.cssText = 'display: none'\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range\n let elem = targetElement\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]]\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length\n elem = elem.nextSibling\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling\n }\n }\n }\n let sel = this.getWindowSelection()\n\n range = this.getDocument().createRange()\n range.setStart(elem, offset)\n range.setEnd(elem, offset)\n range.collapse(true)\n\n try {\n sel.removeAllRanges()\n } catch (error) {}\n\n sel.addRange(range)\n targetElement.focus()\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n if (info !== undefined) {\n let context = this.tribute.current\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n })\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' '\n text += textSuffix\n let startPos = info.mentionPosition\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length)\n myField.selectionStart = startPos + text.length\n myField.selectionEnd = startPos + text.length\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0'\n text += textSuffix\n let endPos = info.mentionPosition + info.mentionText.length\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length\n }\n this.pasteHtml(text, info.mentionPosition, endPos)\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }))\n context.element.dispatchEvent(replaceEvent)\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel\n sel = this.getWindowSelection()\n range = this.getDocument().createRange()\n range.setStart(sel.anchorNode, startPos)\n range.setEnd(sel.anchorNode, endPos)\n range.deleteContents()\n\n let el = this.getDocument().createElement('div')\n el.innerHTML = html\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node)\n }\n range.insertNode(frag)\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange()\n range.setStartAfter(lastNode)\n range.collapse(true)\n sel.removeAllRanges()\n sel.addRange(range)\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i]\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection()\n let selected = sel.anchorNode\n let path = []\n let offset\n\n if (selected != null) {\n let i\n let ce = selected.contentEditable\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected)\n path.push(i)\n selected = selected.parentNode\n if (selected !== null) {\n ce = selected.contentEditable\n }\n }\n path.reverse()\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = ''\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos)\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset)\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n let wordsArray = text.split(/\\s+/);\n let worldsCount = wordsArray.length - 1\n return wordsArray[worldsCount].trim()\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current\n let selected, path, offset\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx)\n\n if (selectionInfo) {\n selected = selectionInfo.selected\n path = selectionInfo.path\n offset = selectionInfo.offset\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection()\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange)\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1\n let triggerChar\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c)\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx\n triggerChar = c\n requireLeadingSpace = config.requireLeadingSpace\n }\n })\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length)\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length)\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1)\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n )\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim()\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('')\n let index = -1\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1])\n\n let match = true\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n }\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`\n dimensions.width = this.tribute.menu.offsetWidth\n dimensions.height = this.tribute.menu.offsetHeight\n\n this.tribute.menu.style.cssText = `display: none;`\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ]\n\n let isFirefox = (window.mozInnerScreenX !== null)\n\n let div = this.getDocument().createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n this.getDocument().body.appendChild(div)\n\n let style = div.style\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle\n\n style.whiteSpace = 'pre-wrap'\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word'\n }\n\n // position off-screen\n style.position = 'absolute'\n style.visibility = 'hidden'\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop]\n })\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll'\n } else {\n style.overflow = 'hidden'\n }\n\n div.textContent = element.value.substring(0, position)\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, 'Â ')\n }\n\n let span = this.getDocument().createElement('span')\n span.textContent = element.value.substring(position) || '.'\n div.appendChild(span)\n\n let rect = element.getBoundingClientRect()\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n }\n\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n\n let menuDimensions = this.getMenuDimensions()\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left\n coordinates.left = 'auto'\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect()\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop)\n coordinates.top = 'auto'\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft\n delete coordinates.right\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop\n delete coordinates.bottom\n }\n\n this.getDocument().body.removeChild(div)\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range\n let sel = this.getWindowSelection()\n\n range = this.getDocument().createRange()\n range.setStart(sel.anchorNode, selectedNodePosition)\n range.setEnd(sel.anchorNode, selectedNodePosition)\n\n range.collapse(false)\n\n let rect = range.getBoundingClientRect()\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let left = rect.left\n let top = rect.top\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n }\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n\n let menuDimensions = this.getMenuDimensions()\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto'\n coordinates.right = windowWidth - rect.left - windowLeft\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect()\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n coordinates.top = 'auto'\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top)\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft\n delete coordinates.right\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop\n delete coordinates.bottom\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect\n let maxScrollDisplacement = 100\n let e = this.menu\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect()\n\n if (clientRect.height === 0) {\n e = e.childNodes[0]\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top\n let elemBottom = elemTop + clientRect.height\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer)\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom)\n\n if (targetY > maxY) {\n targetY = maxY\n }\n\n window.scrollTo(0, targetY)\n }\n }\n}\n\n\nexport default TributeRange;\n", "// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute\n this.tribute.search = this\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {}\n let patternIdx = 0,\n result = [],\n len = string.length,\n totalScore = 0,\n currScore = 0,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase(),\n ch, compareChar\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase()\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, [])\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n // if the pattern search at end\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex]\n let index = string.indexOf(c, stringIndex)\n let best, temp\n\n while (index > -1) {\n patternCache.push(index)\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache)\n patternCache.pop()\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp\n }\n\n index = string.indexOf(c, index + 1)\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0\n let temp = 1\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1\n }\n else {\n temp = 1\n }\n }\n\n score += temp\n })\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0])\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length)\n })\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {}\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element\n\n if (opts.extract) {\n str = opts.extract(element)\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = ''\n }\n }\n\n let rendered = this.match(pattern, str, opts)\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n }\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nexport default TributeSearch;\n", "import \"./utils\";\nimport TributeEvents from \"./TributeEvents\";\nimport TributeMenuEvents from \"./TributeMenuEvents\";\nimport TributeRange from \"./TributeRange\";\nimport TributeSearch from \"./TributeSearch\";\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"<li>No Match Found!</li>\";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"<li>No Match Found!</li>\";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '<span class=\"tribute-mention\">' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"</span>\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"<span>\",\n post: this.current.collection.searchOpts.post || \"</span>\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range, html;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\nexport default Tribute;\n", "/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n", "/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n\n( function( window, factory ) {\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n} )( window, function factory() {\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n let num = parseFloat( value );\n // not a percent like '100%', and a number\n let isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\n// -------------------------- measurements -------------------------- //\n\nlet measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth',\n];\n\nlet measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n let size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0,\n };\n measurements.forEach( ( measurement ) => {\n size[ measurement ] = 0;\n } );\n return size;\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) elem = document.querySelector( elem );\n\n // do not proceed on non-objects\n let isElement = elem && typeof elem == 'object' && elem.nodeType;\n if ( !isElement ) return;\n\n let style = getComputedStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) return getZeroSize();\n\n let size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n measurements.forEach( ( measurement ) => {\n let value = style[ measurement ];\n let num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n } );\n\n let paddingWidth = size.paddingLeft + size.paddingRight;\n let paddingHeight = size.paddingTop + size.paddingBottom;\n let marginWidth = size.marginLeft + size.marginRight;\n let marginHeight = size.marginTop + size.marginBottom;\n let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n let borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n // overwrite width and height if we can get it from style\n let styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingWidth + borderWidth );\n }\n\n let styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n} );\n", "/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n", "// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('get-size') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory( window.getSize );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( getSize ) {\n\nconst cellClassName = 'flickity-cell';\n\nfunction Cell( elem ) {\n this.element = elem;\n this.element.classList.add( cellClassName );\n\n this.x = 0;\n this.unselect();\n}\n\nlet proto = Cell.prototype;\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.classList.remove( cellClassName );\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\nproto.remove = function() {\n this.element.remove();\n};\n\nreturn Cell;\n\n} ) );\n", "// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function factory() {\n\nfunction Slide( beginMargin, endMargin, cellAlign ) {\n this.beginMargin = beginMargin;\n this.endMargin = endMargin;\n this.cellAlign = cellAlign;\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nlet proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length === 1 ) {\n this.x = cell.x; // x comes from first cell\n this.firstMargin = cell.size[ this.beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n let lastCell = this.getLastCell();\n let lastMargin = lastCell ? lastCell.size[ this.endMargin ] : 0;\n let slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( ( cell ) => cell.select() );\n};\n\nproto.unselect = function() {\n this.cells.forEach( ( cell ) => cell.unselect() );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\nreturn Slide;\n\n} ) );\n", "// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('fizzy-ui-utils') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory( window.fizzyUIUtils );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( utils ) {\n\n// -------------------------- animate -------------------------- //\n\nlet proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) return;\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n let previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) requestAnimationFrame( () => this.animate() );\n};\n\nproto.positionSlider = function() {\n let x = this.x;\n // wrap position around\n if ( this.isWrapping ) {\n x = utils.modulo( x, this.slideableWidth ) - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n if ( this.options.rightToLeft ) x = -x;\n let translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n `translate3d(${translateX},0,0)` : `translateX(${translateX})`;\n};\n\nproto.dispatchScrollEvent = function() {\n let firstSlide = this.slides[0];\n if ( !firstSlide ) return;\n\n let positionX = -this.x - firstSlide.target;\n let progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) return;\n\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n let isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) === Math.round( previousX * 100 );\n if ( isResting ) this.restingFrames++;\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n let beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n let afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n cells.forEach( ( cell ) => {\n let cellShift = gap > 0 ? shift : 0;\n this._wrapShiftCell( cell, cellShift );\n gap -= cell.size.outerWidth;\n } );\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) return;\n\n cells.forEach( ( cell ) => this._wrapShiftCell( cell, 0 ) );\n};\n\n// @param {Integer} shift - 0, 1, or -1\nproto._wrapShiftCell = function( cell, shift ) {\n this._renderCellPosition( cell, cell.x + this.slideableWidth * shift );\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) return;\n\n // change the position to drag position by applying force\n let dragVelocity = this.dragX - this.x;\n let dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n let dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) return;\n\n let distance = this.selectedSlide.target * -1 - this.x;\n let force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n", "// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate'),\n );\n } else {\n // browser global\n let _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n/* eslint-enable max-params */\n\n// vars\nconst { getComputedStyle, console } = window;\nlet { jQuery } = window;\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all Flickity intances\nlet instances = {};\n\nfunction Flickity( element, options ) {\n let queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) console.error(`Bad element for Flickity: ${queryElement || element}`);\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n let instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = { ...this.constructor.defaults };\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.create = {};\n\nlet proto = Flickity.prototype;\n// inherit EventEmitter\nObject.assign( proto, EvEmitter.prototype );\n\nproto._create = function() {\n let { resize, watchCSS, rightToLeft } = this.options;\n // add id for Flickity.data\n let id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n // used for keyboard navigation\n this.focusableElems = [ this.element ];\n\n if ( resize || watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( let eventName in this.options.on ) {\n let listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n for ( let method in Flickity.create ) {\n Flickity.create[ method ].call( this );\n }\n\n if ( watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n Object.assign( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) return;\n\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n let cellElems = this._filterFindCellElements( this.element.children );\n this.slider.append( ...cellElems );\n this.viewport.append( this.slider );\n this.element.append( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'flickity-slider';\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n let cellElems = this._filterFindCellElements( elems );\n\n // create new Cells for collection\n return cellElems.map( ( cellElem ) => new Cell( cellElem ) );\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n let cellX = 0;\n // get cellX\n if ( index > 0 ) {\n let startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n\n this.cells.slice( index ).forEach( ( cell ) => {\n cell.x = cellX;\n this._renderCellPosition( cell, cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n } );\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = this.cells.length ?\n this.getLastSlide().target - this.slides[0].target : 0;\n};\n\nproto._renderCellPosition = function( cell, x ) {\n // render position of cell with in slider\n let sideOffset = this.options.rightToLeft ? -1 : 1;\n let renderX = x * sideOffset;\n if ( this.options.percentPosition ) renderX *= this.size.innerWidth / cell.size.width;\n let positionValue = this.getPositionValue( renderX );\n cell.element.style.transform = `translateX( ${positionValue} )`;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( ( cell ) => cell.getSize() );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) return;\n\n let { beginMargin, endMargin } = this;\n let slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n\n let canCellFit = this._getCanCellFit();\n\n this.cells.forEach( ( cell, i ) => {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n let slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ endMargin ] );\n\n if ( canCellFit( i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n } );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n let { groupCells } = this.options;\n if ( !groupCells ) return () => false;\n\n if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n let number = parseInt( groupCells, 10 );\n return ( i ) => ( i % number ) !== 0;\n }\n // default, group by width of slide\n let percent = 1;\n // parse '75%\n let percentMatch = typeof groupCells == 'string' && groupCells.match( /^(\\d+)%$/ );\n if ( percentMatch ) percent = parseInt( percentMatch[1], 10 ) / 100;\n let groupWidth = ( this.size.innerWidth + 1 ) * percent;\n return ( i, slideWidth ) => slideWidth <= groupWidth;\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nlet cellAlignShorthands = {\n left: 0,\n center: 0.5,\n right: 1,\n};\n\nproto.setCellAlign = function() {\n let { cellAlign, rightToLeft } = this.options;\n let shorthand = cellAlignShorthands[ cellAlign ];\n this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n if ( rightToLeft ) this.cellAlign = 1 - this.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) return;\n\n let height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = `${height}px`;\n};\n\nproto._updateWrapShiftCells = function() {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n // only for wrap-around\n if ( !this.isWrapping ) return;\n\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n let beforeGapX = this.cursorPosition;\n let lastIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( beforeGapX, lastIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n let afterGapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( afterGapX, 0, 1 );\n};\n\nproto.getIsWrapping = function() {\n let { wrapAround } = this.options;\n if ( !wrapAround || this.slides.length < 2 ) return false;\n\n if ( wrapAround !== 'fill' ) return true;\n // check that slides can fit\n\n let gapWidth = this.slideableWidth - this.size.innerWidth;\n if ( gapWidth > this.size.innerWidth ) return true; // gap * 2x big, all good\n // check that content width - shifting cell is bigger than viewport width\n for ( let cell of this.cells ) {\n if ( cell.size.outerWidth > gapWidth ) return false;\n }\n return true;\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n let cells = [];\n while ( gapX > 0 ) {\n let cell = this.cells[ cellIndex ];\n if ( !cell ) break;\n\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain & wrap ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n let isContaining = this.options.contain && !this.isWrapping &&\n this.cells.length;\n if ( !isContaining ) return;\n\n let contentWidth = this.slideableWidth - this.getLastCell().size[ this.endMargin ];\n // content is less than gallery size\n let isContentSmaller = contentWidth < this.size.innerWidth;\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n this.slides.forEach( ( slide ) => {\n slide.target = contentWidth * this.cellAlign;\n } );\n } else {\n // contain to bounds\n let beginBound = this.cursorPosition + this.cells[0].size[ this.beginMargin ];\n let endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n this.slides.forEach( ( slide ) => {\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n } );\n }\n};\n\n// ----- events ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n let emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let $event = type;\n if ( event ) {\n // create jQuery event\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\nconst unidraggerEvents = [\n 'dragStart',\n 'dragMove',\n 'dragEnd',\n 'pointerDown',\n 'pointerMove',\n 'pointerEnd',\n 'staticClick',\n];\n\nlet _emitEvent = proto.emitEvent;\nproto.emitEvent = function( eventName, args ) {\n if ( eventName === 'staticClick' ) {\n // add cellElem and cellIndex args to staticClick\n let clickedCell = this.getParentCell( args[0].target );\n let cellElem = clickedCell && clickedCell.element;\n let cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n args = args.concat( cellElem, cellIndex );\n }\n // do regular thing\n _emitEvent.call( this, eventName, args );\n // duck-punch in jQuery events for Unidragger events\n let isUnidraggerEvent = unidraggerEvents.includes( eventName );\n if ( !isUnidraggerEvent || !jQuery || !this.$element ) return;\n\n eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let event = args.shift( 0 );\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = eventName;\n this.$element.trigger( jQEvent, args );\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) return;\n\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.isWrapping || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) return;\n\n let prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index !== prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n if ( !this.isWrapping ) return;\n\n const { selectedIndex, slideableWidth, slides: { length } } = this;\n // shift index for wrap, do not wrap dragSelect\n if ( !this.isDragSelect ) {\n let wrapIndex = utils.modulo( index, length );\n // go to shortest\n let delta = Math.abs( wrapIndex - selectedIndex );\n let backWrapDelta = Math.abs( ( wrapIndex + length ) - selectedIndex );\n let forewardWrapDelta = Math.abs( ( wrapIndex - length ) - selectedIndex );\n if ( backWrapDelta < delta ) {\n index += length;\n } else if ( forewardWrapDelta < delta ) {\n index -= length;\n }\n }\n\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= slideableWidth;\n } else if ( index >= length ) {\n this.x += slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n let slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) return;\n\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) this.selectedSlide.unselect();\n};\n\nproto.selectInitialIndex = function() {\n let initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n let cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n let index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n let cell = this.queryCell( value );\n if ( !cell ) return;\n\n let index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slide that has cell\n let cellSlide = this.slides.find( ( slide ) => slide.cells.includes( cell ) );\n return this.slides.indexOf( cellSlide );\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( let cell of this.cells ) {\n if ( cell.element === elem ) return cell;\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n return elems.map( ( elem ) => this.getCell( elem ) ).filter( Boolean );\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n let cell = this.getCell( elem );\n if ( cell ) return cell;\n\n // try to get parent cell elem\n let closest = elem.closest('.flickity-slider > *');\n return this.getCell( closest );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) return this.selectedSlide.getCellElements();\n\n index = index === undefined ? this.selectedIndex : index;\n\n let len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements(); // get all\n }\n\n let cellElems = [];\n for ( let i = index - adjCount; i <= index + adjCount; i++ ) {\n let slideIndex = this.isWrapping ? utils.modulo( i, len ) : i;\n let slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n // do not select invalid selectors from hash: #123, #/. #791\n let isSelectorString = typeof selector == 'string' && !selector.match( /^[#.]?[\\d/]/ );\n if ( isSelectorString ) {\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) return;\n this.getSize();\n // wrap values\n if ( this.isWrapping ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n let selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n if ( !this.options.watchCSS ) return;\n\n let afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.includes('flickity') ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n let { activeElement } = document;\n let handler = Flickity.keyboardHandlers[ event.key ];\n // only work if element is in focus\n if ( !this.options.accessibility || !activeElement || !handler ) return;\n\n let isFocused = this.focusableElems.some( ( elem ) => activeElement === elem );\n if ( isFocused ) handler.call( this );\n};\n\nFlickity.keyboardHandlers = {\n ArrowLeft: function() {\n this.uiChange();\n let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this[ leftMethod ]();\n },\n ArrowRight: function() {\n this.uiChange();\n let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n this.element.focus({ preventScroll: true });\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) return;\n\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( ( cell ) => cell.destroy() );\n this.viewport.remove();\n // move child elements back into element\n this.element.append( ...this.slider.children );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nObject.assign( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n if ( elem ) return instances[ elem.flickityGUID ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n jQueryBridget( 'flickity', Flickity, jQuery );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n", "/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n", "/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.EvEmitter,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( window, EvEmitter ) {\n\nfunction Unidragger() {}\n\n// inherit EvEmitter\nlet proto = Unidragger.prototype = Object.create( EvEmitter.prototype );\n\n// ----- bind start ----- //\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nlet startEvent, activeEvents;\nif ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n activeEvents = [ 'touchmove', 'touchend', 'touchcancel' ];\n} else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n activeEvents = [ 'pointermove', 'pointerup', 'pointercancel' ];\n} else {\n // mouse events\n startEvent = 'mousedown';\n activeEvents = [ 'mousemove', 'mouseup' ];\n}\n\n// prototype so it can be overwriteable by Flickity\nproto.touchActionValue = 'none';\n\nproto.bindHandles = function() {\n this._bindHandles( 'addEventListener', this.touchActionValue );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( 'removeEventListener', '' );\n};\n\n/**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\nproto._bindHandles = function( bindMethod, touchAction ) {\n this.handles.forEach( ( handle ) => {\n handle[ bindMethod ]( startEvent, this );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) handle.style.touchAction = touchAction;\n } );\n};\n\nproto.bindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.addEventListener( eventName, this );\n } );\n};\n\nproto.unbindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.removeEventListener( eventName, this );\n } );\n};\n\n// ----- event handler helpers ----- //\n\n// trigger method with matching pointer\nproto.withPointer = function( methodName, event ) {\n if ( event.pointerId === this.pointerIdentifier ) {\n this[ methodName ]( event, event );\n }\n};\n\n// trigger method with matching touch\nproto.withTouch = function( methodName, event ) {\n let touch;\n for ( let changedTouch of event.changedTouches ) {\n if ( changedTouch.identifier === this.pointerIdentifier ) {\n touch = changedTouch;\n }\n }\n if ( touch ) this[ methodName ]( event, touch );\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n this.pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this.pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this.pointerDown( event, event );\n};\n\n// nodes that have text fields\nconst cursorNodes = [ 'TEXTAREA', 'INPUT', 'SELECT', 'OPTION' ];\n// input types that do not have text fields\nconst clickTypes = [ 'radio', 'checkbox', 'button', 'submit', 'image', 'file' ];\n\n/**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n // dismiss multi-touch taps, right clicks, and clicks on text fields\n let isCursorNode = cursorNodes.includes( event.target.nodeName );\n let isClickType = clickTypes.includes( event.target.type );\n let isOkayElement = !isCursorNode || isClickType;\n let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n if ( !isOkay ) return;\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n // track position for move\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n this.bindActivePointerEvents();\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// ----- move ----- //\n\nproto.onmousemove = function( event ) {\n this.pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n this.withPointer( 'pointerMove', event );\n};\n\nproto.ontouchmove = function( event ) {\n this.withTouch( 'pointerMove', event );\n};\n\nproto.pointerMove = function( event, pointer ) {\n let moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY,\n };\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n // start drag if pointer has moved far enough to start drag\n let isDragStarting = !this.isDragging && this.hasDragStarted( moveVector );\n if ( isDragStarting ) this.dragStart( event, pointer );\n if ( this.isDragging ) this.dragMove( event, pointer, moveVector );\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- drag ----- //\n\nproto.dragStart = function( event, pointer ) {\n this.isDragging = true;\n this.isPreventingClicks = true; // set flag to prevent clicks\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// ----- end ----- //\n\nproto.onmouseup = function( event ) {\n this.pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n this.withPointer( 'pointerUp', event );\n};\n\nproto.ontouchend = function( event ) {\n this.withTouch( 'pointerUp', event );\n};\n\nproto.pointerUp = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n\n if ( this.isDragging ) {\n this.dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this.staticClick( event, pointer );\n }\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.isDragging = false; // reset flag\n // re-enable clicking async\n setTimeout( () => delete this.isPreventingClicks );\n\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// triggered on pointer up & pointer cancel\nproto.pointerDone = function() {\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n this.unbindActivePointerEvents();\n this.emitEvent('pointerDone');\n};\n\n// ----- cancel ----- //\n\nproto.onpointercancel = function( event ) {\n this.withPointer( 'pointerCancel', event );\n};\n\nproto.ontouchcancel = function( event ) {\n this.withTouch( 'pointerCancel', event );\n};\n\nproto.pointerCancel = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- click ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) event.preventDefault();\n};\n\n// triggered after pointer down & up with no/tiny movement\nproto.staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n let isMouseup = event.type === 'mouseup';\n if ( isMouseup && this.isIgnoringMouseUp ) return;\n\n this.emitEvent( 'staticClick', [ event, pointer ] );\n\n // set flag for emulated clicks 300ms after touchend\n if ( isMouseup ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 400ms\n setTimeout( () => {\n delete this.isIgnoringMouseUp;\n }, 400 );\n }\n};\n\n// ----- ----- //\n\nreturn Unidragger;\n\n} ) );\n", "// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('unidragger'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, Flickity, Unidragger, utils ) {\n\n// ----- defaults ----- //\n\nObject.assign( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// -------------------------- drag prototype -------------------------- //\n\nlet proto = Flickity.prototype;\nObject.assign( proto, Unidragger.prototype ); // inherit Unidragger\nproto.touchActionValue = '';\n\n// -------------------------- -------------------------- //\n\nFlickity.create.drag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n this.on( 'pointerDown', this.handlePointerDown );\n this.on( 'pointerUp', this.handlePointerUp );\n this.on( 'pointerDown', this.handlePointerDone );\n this.on( 'dragStart', this.handleDragStart );\n this.on( 'dragMove', this.handleDragMove );\n this.on( 'dragEnd', this.handleDragEnd );\n this.on( 'staticClick', this.handleStaticClick );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable === '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n this.element.classList.toggle( 'is-draggable', this.isDraggable );\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.handlePointerDown = function( event ) {\n if ( !this.isDraggable ) {\n // proceed for staticClick\n this.bindActivePointerEvents( event );\n return;\n }\n\n let isTouchStart = event.type === 'touchstart';\n let isTouchPointer = event.pointerType === 'touch';\n let isFocusNode = event.target.matches('input, textarea, select');\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) event.preventDefault();\n if ( !isFocusNode ) this.focus();\n // blur\n if ( document.activeElement !== this.element ) document.activeElement.blur();\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n this.bindActivePointerEvents( event );\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.handlePointerUp = function() {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n};\n\nproto.handlePointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.handleDragStart = function() {\n if ( !this.isDraggable ) return;\n\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n};\n\nproto.handleDragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) return;\n\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n let direction = this.options.rightToLeft ? -1 : 1;\n // wrap around move. #589\n if ( this.isWrapping ) moveVector.x %= this.slideableWidth;\n let dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.isWrapping ) {\n // slow drag\n let originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n let endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n this.dragMoveTime = new Date();\n};\n\nproto.handleDragEnd = function() {\n if ( !this.isDraggable ) return;\n\n let { freeScroll } = this.options;\n if ( freeScroll ) this.isFreeScrolling = true;\n // set selectedIndex based on where flick will end up\n let index = this.dragEndRestingSelect();\n\n if ( freeScroll && !this.isWrapping ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n let restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !freeScroll && index === this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.isWrapping;\n this.select( index );\n delete this.isDragSelect;\n};\n\nproto.dragEndRestingSelect = function() {\n let restingX = this.getRestingPosition();\n // how far away from selected slide\n let distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n let positiveResting = this._getClosestResting( restingX, distance, 1 );\n let negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n return positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n let index = this.selectedIndex;\n let minDistance = Infinity;\n let condition = this.options.contain && !this.isWrapping ?\n // if containing, keep going if distance is equal to minDistance\n ( dist, minDist ) => dist <= minDist :\n ( dist, minDist ) => dist < minDist;\n\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) break;\n\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n let len = this.slides.length;\n // wrap around if at least 2 slides\n let isWrapAround = this.options.wrapAround && len > 1;\n let slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n let slide = this.slides[ slideIndex ];\n if ( !slide ) return null;\n\n // add distance for wrap-around slides\n let wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n let distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n let delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n let scroll = getScrollPosition();\n let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n let scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this.pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n", "// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\nconst svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( increment, direction, arrowShape ) {\n this.increment = increment;\n this.direction = direction;\n this.isPrevious = increment === 'previous';\n this.isLeft = direction === 'left';\n this._create( arrowShape );\n}\n\nPrevNextButton.prototype._create = function( arrowShape ) {\n // properties\n let element = this.element = document.createElement('button');\n element.className = `flickity-button flickity-prev-next-button ${this.increment}`;\n let label = this.isPrevious ? 'Previous' : 'Next';\n // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n element.setAttribute( 'aria-label', label );\n // init as disabled\n this.disable();\n // create arrow\n let svg = this.createSVG( label, arrowShape );\n element.append( svg );\n};\n\nPrevNextButton.prototype.createSVG = function( label, arrowShape ) {\n let svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n // add title #1189\n let title = document.createElementNS( svgURI, 'title' );\n title.append( label );\n // add path\n let path = document.createElementNS( svgURI, 'path' );\n let pathMovements = getArrowMovements( arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180)' );\n }\n svg.append( title, path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) return shape;\n\n let { x0, x1, x2, x3, y1, y2 } = shape;\n\n // create movement string\n return `M ${x0}, 50\n L ${x1}, ${y1 + 50}\n L ${x2}, ${y2 + 50}\n L ${x3}, 50\n L ${x2}, ${50 - y2}\n L ${x1}, ${50 - y1}\n Z`;\n}\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n this.element.removeAttribute('disabled');\n};\n\nPrevNextButton.prototype.disable = function() {\n this.element.setAttribute( 'disabled', true );\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nObject.assign( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.create.prevNextButtons = function() {\n if ( !this.options.prevNextButtons ) return;\n\n let { rightToLeft, arrowShape } = this.options;\n let prevDirection = rightToLeft ? 'right' : 'left';\n let nextDirection = rightToLeft ? 'left' : 'right';\n this.prevButton = new PrevNextButton( 'previous', prevDirection, arrowShape );\n this.nextButton = new PrevNextButton( 'next', nextDirection, arrowShape );\n this.focusableElems.push( this.prevButton.element );\n this.focusableElems.push( this.nextButton.element );\n\n this.handlePrevButtonClick = () => {\n this.uiChange();\n this.previous();\n };\n\n this.handleNextButtonClick = () => {\n this.uiChange();\n this.next();\n };\n\n this.on( 'activate', this.activatePrevNextButtons );\n this.on( 'select', this.updatePrevNextButtons );\n};\n\nlet proto = Flickity.prototype;\n\nproto.updatePrevNextButtons = function() {\n let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n this.updatePrevNextButton( this.prevButton, 0 );\n this.updatePrevNextButton( this.nextButton, lastIndex );\n};\n\nproto.updatePrevNextButton = function( button, disabledIndex ) {\n // enable is wrapAround and at least 2 slides\n if ( this.isWrapping && this.slides.length > 1 ) {\n button.enable();\n return;\n }\n\n let isEnabled = this.selectedIndex !== disabledIndex;\n button[ isEnabled ? 'enable' : 'disable' ]();\n // if disabling button that is focused,\n // shift focus to element to maintain keyboard accessibility\n let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n if ( isDisabledFocused ) this.focus();\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.element.addEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.addEventListener( 'click', this.handleNextButtonClick );\n this.element.append( this.prevButton.element, this.nextButton.element );\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.element.remove();\n this.nextButton.element.remove();\n this.prevButton.element.removeEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.removeEventListener( 'click', this.handleNextButtonClick );\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n", "// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\nfunction PageDots() {\n // create holder element\n this.holder = document.createElement('div');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n}\n\nPageDots.prototype.setDots = function( slidesLength ) {\n // get difference between number of slides and number of dots\n let delta = slidesLength - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n let newDots = new Array( count ).fill()\n .map( ( item, i ) => {\n let dot = document.createElement('button');\n dot.setAttribute( 'type', 'button' );\n let num = i + 1 + this.dots.length;\n dot.className = 'flickity-page-dot';\n dot.textContent = `View slide ${num}`;\n return dot;\n } );\n\n this.holder.append( ...newDots );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n let removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( ( dot ) => dot.remove() );\n};\n\nPageDots.prototype.updateSelected = function( index ) {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.classList.remove('is-selected');\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) return;\n\n this.selectedDot = this.dots[ index ];\n this.selectedDot.classList.add('is-selected');\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.create.pageDots = function() {\n if ( !this.options.pageDots ) return;\n\n this.pageDots = new PageDots();\n this.handlePageDotsClick = this.onPageDotsClick.bind( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePageDots = function() {\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n this.pageDots.holder.addEventListener( 'click', this.handlePageDotsClick );\n this.element.append( this.pageDots.holder );\n};\n\nproto.onPageDotsClick = function( event ) {\n let index = this.pageDots.dots.indexOf( event.target );\n if ( index === -1 ) return; // only dot clicks\n\n this.uiChange();\n this.select( index );\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected( this.selectedIndex );\n};\n\nproto.updatePageDots = function() {\n this.pageDots.dots.forEach( ( dot ) => {\n utils.removeFrom( this.focusableElems, dot );\n } );\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.holder.remove();\n this.pageDots.holder.removeEventListener( 'click', this.handlePageDotsClick );\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n", "// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( autoPlay, onTick ) {\n this.autoPlay = autoPlay;\n this.onTick = onTick;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state === 'playing' ) return;\n\n // do not play if page is hidden, start playing when page is visible\n let isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state !== 'playing' ) return;\n\n // default to 3 seconds\n let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( () => {\n this.onTick();\n this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state === 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state === 'paused' ) this.play();\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n let isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.create.player = function() {\n this.player = new Player( this.options.autoPlay, () => {\n this.next( true );\n } );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) return;\n\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) return;\n\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n", "// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n let fragment = document.createDocumentFragment();\n cells.forEach( ( cell ) => fragment.appendChild( cell.element ) );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nlet proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n let cells = this._makeCells( elems );\n if ( !cells || !cells.length ) return;\n\n let len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n let fragment = getCellsFragment( cells );\n // append to slider\n let isAppend = index === len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n let insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n let endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index );\n this.positionSliderAtSelected();\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n let cells = this.getCells( elems );\n if ( !cells || !cells.length ) return;\n\n let minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( ( cell ) => {\n cell.remove();\n let index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n } );\n\n this.cellChange( minCellIndex );\n this.positionSliderAtSelected();\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n let cell = this.getCell( elem );\n if ( !cell ) return;\n\n cell.getSize();\n\n let index = this.cells.indexOf( cell );\n this.cellChange( index );\n // do not position slider after lazy load\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex ) {\n let prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._updateWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex, try to maintain position & select previous selected element\n let cell = this.getCell( prevSelectedElem );\n if ( cell ) this.selectedIndex = this.getCellSlideIndex( cell );\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n", "// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\nconst lazyAttr = 'data-flickity-lazyload';\nconst lazySrcAttr = `${lazyAttr}-src`;\nconst lazySrcsetAttr = `${lazyAttr}-srcset`;\nconst imgSelector = `img[${lazyAttr}], img[${lazySrcAttr}], ` +\n `img[${lazySrcsetAttr}], source[${lazySrcsetAttr}]`;\n\nFlickity.create.lazyLoad = function() {\n this.on( 'select', this.lazyLoad );\n\n this.handleLazyLoadComplete = this.onLazyLoadComplete.bind( this );\n};\n\nlet proto = Flickity.prototype;\n\nproto.lazyLoad = function() {\n let { lazyLoad } = this.options;\n if ( !lazyLoad ) return;\n\n // get adjacent cells, use lazyLoad option for adjacent count\n let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n // lazy load images\n this.getAdjacentCellElements( adjCount )\n .map( getCellLazyImages )\n .flat()\n .forEach( ( img ) => new LazyLoader( img, this.handleLazyLoadComplete ) );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.matches('img') ) {\n let cellAttr = cellElem.getAttribute( lazyAttr );\n let cellSrcAttr = cellElem.getAttribute( lazySrcAttr );\n let cellSrcsetAttr = cellElem.getAttribute( lazySrcsetAttr );\n if ( cellAttr || cellSrcAttr || cellSrcsetAttr ) {\n return cellElem;\n }\n }\n // select lazy images in cell\n return [ ...cellElem.querySelectorAll( imgSelector ) ];\n}\n\nproto.onLazyLoadComplete = function( img, event ) {\n let cell = this.getParentCell( img );\n let cellElem = cell && cell.element;\n this.cellSizeChange( cellElem );\n\n this.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\nfunction LazyLoader( img, onComplete ) {\n this.img = img;\n this.onComplete = onComplete;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n let src = this.img.getAttribute( lazyAttr ) ||\n this.img.getAttribute( lazySrcAttr );\n let srcset = this.img.getAttribute( lazySrcsetAttr );\n // set src & serset\n this.img.src = src;\n if ( srcset ) this.img.setAttribute( 'srcset', srcset );\n // remove attr\n this.img.removeAttribute( lazyAttr );\n this.img.removeAttribute( lazySrcAttr );\n this.img.removeAttribute( lazySrcsetAttr );\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n mediaElem.classList.add( className );\n\n this.onComplete( this.img, event );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n", "/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n", "/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n let queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName === 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\n this.progress( image, elem, message );\n } );\n };\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount === this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( `progress: ${message}`, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent <picture> or self <img>\n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n", "// imagesloaded\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('imagesloaded'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.imagesLoaded,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( Flickity, imagesLoaded ) {\n\nFlickity.create.imagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nFlickity.prototype.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) return;\n\n let onImagesLoadedProgress = ( instance, image ) => {\n let cell = this.getParentCell( image.img );\n this.cellSizeChange( cell && cell.element );\n if ( !this.options.freeScroll ) this.positionSliderAtSelected();\n };\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n} ) );\n", "/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\n\nif ( typeof module == 'object' && module.exports ) {\n const Flickity = require('./core');\n require('./drag');\n require('./prev-next-button');\n require('./page-dots');\n require('./player');\n require('./add-remove-cell');\n require('./lazyload');\n require('./imagesloaded');\n\n module.exports = Flickity;\n}\n", "/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n", "/*!\n * Flickity asNavFor v3.0.0\n * enable asNavFor for Flickity\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.create.asNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n let asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) return;\n\n // HACK do async, give time for other flickity to be initalized\n setTimeout( () => {\n this.setNavCompanion( asNavForOption );\n } );\n};\n\nlet proto = Flickity.prototype;\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n let companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion === this ) return;\n\n this.navCompanion = companion;\n // companion select\n this.onNavCompanionSelect = () => {\n this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n // wait for companion & selectedCells first. #8\n let companionCells = this.navCompanion && this.navCompanion.selectedCells;\n if ( !companionCells ) return;\n\n // select slide that matches first cell of slide\n let selectedCell = companionCells[0];\n let firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n let lastIndex = firstIndex + companionCells.length - 1;\n let selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) return;\n\n let selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( ( cell ) => cell.element );\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n } );\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) return;\n\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) return;\n\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n", "/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n", "/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n", "// core\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.InfiniteScroll = factory(\n window,\n window.EvEmitter,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( window, EvEmitter, utils ) {\n\nlet jQuery = window.jQuery;\n// internal store of all InfiniteScroll intances\nlet instances = {};\n\nfunction InfiniteScroll( element, options ) {\n let queryElem = utils.getQueryElement( element );\n\n if ( !queryElem ) {\n console.error( 'Bad element for InfiniteScroll: ' + ( queryElem || element ) );\n return;\n }\n element = queryElem;\n // do not initialize twice on same element\n if ( element.infiniteScrollGUID ) {\n let instance = instances[ element.infiniteScrollGUID ];\n instance.option( options );\n return instance;\n }\n\n this.element = element;\n // options\n this.options = { ...InfiniteScroll.defaults };\n this.option( options );\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n this.create();\n}\n\n// defaults\nInfiniteScroll.defaults = {\n // path: null,\n // hideNav: null,\n // debug: false,\n};\n\n// create & destroy methods\nInfiniteScroll.create = {};\nInfiniteScroll.destroy = {};\n\nlet proto = InfiniteScroll.prototype;\n// inherit EvEmitter\nObject.assign( proto, EvEmitter.prototype );\n\n// -------------------------- -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n\nproto.create = function() {\n // create core\n // add id for InfiniteScroll.data\n let id = this.guid = ++GUID;\n this.element.infiniteScrollGUID = id; // expando\n instances[ id ] = this; // associate via id\n // properties\n this.pageIndex = 1; // default to first page\n this.loadCount = 0;\n this.updateGetPath();\n // bail if getPath not set, or returns falsey #776\n let hasPath = this.getPath && this.getPath();\n if ( !hasPath ) {\n console.error('Disabling InfiniteScroll');\n return;\n }\n this.updateGetAbsolutePath();\n this.log( 'initialized', [ this.element.className ] );\n this.callOnInit();\n // create features\n for ( let method in InfiniteScroll.create ) {\n InfiniteScroll.create[ method ].call( this );\n }\n};\n\nproto.option = function( opts ) {\n Object.assign( this.options, opts );\n};\n\n// call onInit option, used for binding events on init\nproto.callOnInit = function() {\n let onInit = this.options.onInit;\n if ( onInit ) {\n onInit.call( this, this );\n }\n};\n\n// ----- events ----- //\n\nproto.dispatchEvent = function( type, event, args ) {\n this.log( type, args );\n let emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n // trigger jQuery event\n if ( !jQuery || !this.$element ) {\n return;\n }\n // namespace jQuery event\n type += '.infiniteScroll';\n let $event = type;\n if ( event ) {\n // create jQuery event\n /* eslint-disable-next-line new-cap */\n let jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n};\n\nlet loggers = {\n initialized: ( className ) => `on ${className}`,\n request: ( path ) => `URL: ${path}`,\n load: ( response, path ) => `${response.title || ''}. URL: ${path}`,\n error: ( error, path ) => `${error}. URL: ${path}`,\n append: ( response, path, items ) => `${items.length} items. URL: ${path}`,\n last: ( response, path ) => `URL: ${path}`,\n history: ( title, path ) => `URL: ${path}`,\n pageIndex: function( index, origin ) {\n return `current page determined to be: ${index} from ${origin}`;\n },\n};\n\n// log events\nproto.log = function( type, args ) {\n if ( !this.options.debug ) return;\n\n let message = `[InfiniteScroll] ${type}`;\n let logger = loggers[ type ];\n if ( logger ) message += '. ' + logger.apply( this, args );\n console.log( message );\n};\n\n// -------------------------- methods used amoung features -------------------------- //\n\nproto.updateMeasurements = function() {\n this.windowHeight = window.innerHeight;\n let rect = this.element.getBoundingClientRect();\n this.top = rect.top + window.scrollY;\n};\n\nproto.updateScroller = function() {\n let elementScroll = this.options.elementScroll;\n if ( !elementScroll ) {\n // default, use window\n this.scroller = window;\n return;\n }\n // if true, set to element, otherwise use option\n this.scroller = elementScroll === true ? this.element :\n utils.getQueryElement( elementScroll );\n if ( !this.scroller ) {\n throw new Error(`Unable to find elementScroll: ${elementScroll}`);\n }\n};\n\n// -------------------------- page path -------------------------- //\n\nproto.updateGetPath = function() {\n let optPath = this.options.path;\n if ( !optPath ) {\n console.error(`InfiniteScroll path option required. Set as: ${optPath}`);\n return;\n }\n // function\n let type = typeof optPath;\n if ( type == 'function' ) {\n this.getPath = optPath;\n return;\n }\n // template string: '/pages/{{#}}.html'\n let templateMatch = type == 'string' && optPath.match('{{#}}');\n if ( templateMatch ) {\n this.updateGetPathTemplate( optPath );\n return;\n }\n // selector: '.next-page-selector'\n this.updateGetPathSelector( optPath );\n};\n\nproto.updateGetPathTemplate = function( optPath ) {\n // set getPath with template string\n this.getPath = () => {\n let nextIndex = this.pageIndex + 1;\n return optPath.replace( '{{#}}', nextIndex );\n };\n // get pageIndex from location\n // convert path option into regex to look for pattern in location\n // escape query (?) in url, allows for parsing GET parameters\n let regexString = optPath\n .replace( /(\\\\\\?|\\?)/, '\\\\?' )\n .replace( '{{#}}', '(\\\\d\\\\d?\\\\d?)' );\n let templateRe = new RegExp( regexString );\n let match = location.href.match( templateRe );\n\n if ( match ) {\n this.pageIndex = parseInt( match[1], 10 );\n this.log( 'pageIndex', [ this.pageIndex, 'template string' ] );\n }\n};\n\nlet pathRegexes = [\n // WordPress & Tumblr - example.com/page/2\n // Jekyll - example.com/page2\n /^(.*?\\/?page\\/?)(\\d\\d?\\d?)(.*?$)/,\n // Drupal - example.com/?page=1\n /^(.*?\\/?\\?page=)(\\d\\d?\\d?)(.*?$)/,\n // catch all, last occurence of a number\n /(.*?)(\\d\\d?\\d?)(?!.*\\d)(.*?$)/,\n];\n\n// try matching href to pathRegexes patterns\nlet getPathParts = InfiniteScroll.getPathParts = function( href ) {\n if ( !href ) return;\n for ( let regex of pathRegexes ) {\n let match = href.match( regex );\n if ( match ) {\n let [ , begin, index, end ] = match;\n return { begin, index, end };\n }\n }\n};\n\nproto.updateGetPathSelector = function( optPath ) {\n // parse href of link: '.next-page-link'\n let hrefElem = document.querySelector( optPath );\n if ( !hrefElem ) {\n console.error(`Bad InfiniteScroll path option. Next link not found: ${optPath}`);\n return;\n }\n\n let href = hrefElem.getAttribute('href');\n let pathParts = getPathParts( href );\n if ( !pathParts ) {\n console.error(`InfiniteScroll unable to parse next link href: ${href}`);\n return;\n }\n\n let { begin, index, end } = pathParts;\n this.isPathSelector = true; // flag for checkLastPage()\n this.getPath = () => begin + ( this.pageIndex + 1 ) + end;\n // get pageIndex from href\n this.pageIndex = parseInt( index, 10 ) - 1;\n this.log( 'pageIndex', [ this.pageIndex, 'next link' ] );\n};\n\nproto.updateGetAbsolutePath = function() {\n let path = this.getPath();\n // path doesn't start with http or /\n let isAbsolute = path.match( /^http/ ) || path.match( /^\\// );\n if ( isAbsolute ) {\n this.getAbsolutePath = this.getPath;\n return;\n }\n\n let { pathname } = location;\n // query parameter #829. example.com/?pg=2\n let isQuery = path.match( /^\\?/ );\n // /foo/bar/index.html => /foo/bar\n let directory = pathname.substring( 0, pathname.lastIndexOf('/') );\n let pathStart = isQuery ? pathname : directory + '/';\n\n this.getAbsolutePath = () => pathStart + this.getPath();\n};\n\n// -------------------------- nav -------------------------- //\n\n// hide navigation\nInfiniteScroll.create.hideNav = function() {\n let nav = utils.getQueryElement( this.options.hideNav );\n if ( !nav ) return;\n\n nav.style.display = 'none';\n this.nav = nav;\n};\n\nInfiniteScroll.destroy.hideNav = function() {\n if ( this.nav ) this.nav.style.display = '';\n};\n\n// -------------------------- destroy -------------------------- //\n\nproto.destroy = function() {\n this.allOff(); // remove all event listeners\n // call destroy methods\n for ( let method in InfiniteScroll.destroy ) {\n InfiniteScroll.destroy[ method ].call( this );\n }\n\n delete this.element.infiniteScrollGUID;\n delete instances[ this.guid ];\n // remove jQuery data. #807\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'infiniteScroll' );\n }\n};\n\n// -------------------------- utilities -------------------------- //\n\n// https://remysharp.com/2010/07/21/throttling-function-calls\nInfiniteScroll.throttle = function( fn, threshold ) {\n threshold = threshold || 200;\n let last, timeout;\n\n return function() {\n let now = +new Date();\n let args = arguments;\n let trigger = () => {\n last = now;\n fn.apply( this, args );\n };\n if ( last && now < last + threshold ) {\n // hold on to it\n clearTimeout( timeout );\n timeout = setTimeout( trigger, threshold );\n } else {\n trigger();\n }\n };\n};\n\nInfiniteScroll.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n let id = elem && elem.infiniteScrollGUID;\n return id && instances[ id ];\n};\n\n// set internal jQuery, for Webpack + jQuery v3\nInfiniteScroll.setJQuery = function( jqry ) {\n jQuery = jqry;\n};\n\n// -------------------------- setup -------------------------- //\n\nutils.htmlInit( InfiniteScroll, 'infinite-scroll' );\n\n// add noop _init method for jQuery Bridget. #768\nproto._init = function() {};\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n jQueryBridget( 'infiniteScroll', InfiniteScroll, jQuery );\n}\n\n// -------------------------- -------------------------- //\n\nreturn InfiniteScroll;\n\n} ) );\n", "// page-load\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n );\n } else {\n // browser global\n factory(\n window,\n window.InfiniteScroll,\n );\n }\n\n}( window, function factory( window, InfiniteScroll ) {\n\nlet proto = InfiniteScroll.prototype;\n\nObject.assign( InfiniteScroll.defaults, {\n // append: false,\n loadOnScroll: true,\n checkLastPage: true,\n responseBody: 'text',\n domParseResponse: true,\n // prefill: false,\n // outlayer: null,\n} );\n\nInfiniteScroll.create.pageLoad = function() {\n this.canLoad = true;\n this.on( 'scrollThreshold', this.onScrollThresholdLoad );\n this.on( 'load', this.checkLastPage );\n if ( this.options.outlayer ) {\n this.on( 'append', this.onAppendOutlayer );\n }\n};\n\nproto.onScrollThresholdLoad = function() {\n if ( this.options.loadOnScroll ) this.loadNextPage();\n};\n\nlet domParser = new DOMParser();\n\nproto.loadNextPage = function() {\n if ( this.isLoading || !this.canLoad ) return;\n\n let { responseBody, domParseResponse, fetchOptions } = this.options;\n let path = this.getAbsolutePath();\n this.isLoading = true;\n if ( typeof fetchOptions == 'function' ) fetchOptions = fetchOptions();\n\n let fetchPromise = fetch( path, fetchOptions )\n .then( ( response ) => {\n if ( !response.ok ) {\n let error = new Error( response.statusText );\n this.onPageError( error, path, response );\n return { response };\n }\n\n return response[ responseBody ]().then( ( body ) => {\n let canDomParse = responseBody == 'text' && domParseResponse;\n if ( canDomParse ) {\n body = domParser.parseFromString( body, 'text/html' );\n }\n if ( response.status == 204 ) {\n this.lastPageReached( body, path );\n return { body, response };\n } else {\n return this.onPageLoad( body, path, response );\n }\n } );\n } )\n .catch( ( error ) => {\n this.onPageError( error, path );\n } );\n\n this.dispatchEvent( 'request', null, [ path, fetchPromise ] );\n\n return fetchPromise;\n};\n\nproto.onPageLoad = function( body, path, response ) {\n // done loading if not appending\n if ( !this.options.append ) {\n this.isLoading = false;\n }\n this.pageIndex++;\n this.loadCount++;\n this.dispatchEvent( 'load', null, [ body, path, response ] );\n return this.appendNextPage( body, path, response );\n};\n\nproto.appendNextPage = function( body, path, response ) {\n let { append, responseBody, domParseResponse } = this.options;\n // do not append json\n let isDocument = responseBody == 'text' && domParseResponse;\n if ( !isDocument || !append ) return { body, response };\n\n let items = body.querySelectorAll( append );\n let promiseValue = { body, response, items };\n // last page hit if no items. #840\n if ( !items || !items.length ) {\n this.lastPageReached( body, path );\n return promiseValue;\n }\n\n let fragment = getItemsFragment( items );\n let appendReady = () => {\n this.appendItems( items, fragment );\n this.isLoading = false;\n this.dispatchEvent( 'append', null, [ body, path, items, response ] );\n return promiseValue;\n };\n\n // TODO add hook for option to trigger appendReady\n if ( this.options.outlayer ) {\n return this.appendOutlayerItems( fragment, appendReady );\n } else {\n return appendReady();\n }\n};\n\nproto.appendItems = function( items, fragment ) {\n if ( !items || !items.length ) return;\n\n // get fragment if not provided\n fragment = fragment || getItemsFragment( items );\n refreshScripts( fragment );\n this.element.appendChild( fragment );\n};\n\nfunction getItemsFragment( items ) {\n // add items to fragment\n let fragment = document.createDocumentFragment();\n if ( items ) fragment.append( ...items );\n return fragment;\n}\n\n// replace <script>s with copies so they load\n// <script>s added by InfiniteScroll will not load\n// similar to https://stackoverflow.com/questions/610995\nfunction refreshScripts( fragment ) {\n let scripts = fragment.querySelectorAll('script');\n for ( let script of scripts ) {\n let freshScript = document.createElement('script');\n // copy attributes\n let attrs = script.attributes;\n for ( let attr of attrs ) {\n freshScript.setAttribute( attr.name, attr.value );\n }\n // copy inner script code. #718, #782\n freshScript.innerHTML = script.innerHTML;\n script.parentNode.replaceChild( freshScript, script );\n }\n}\n\n// ----- outlayer ----- //\n\nproto.appendOutlayerItems = function( fragment, appendReady ) {\n let imagesLoaded = InfiniteScroll.imagesLoaded || window.imagesLoaded;\n if ( !imagesLoaded ) {\n console.error('[InfiniteScroll] imagesLoaded required for outlayer option');\n this.isLoading = false;\n return;\n }\n // append once images loaded\n return new Promise( function( resolve ) {\n imagesLoaded( fragment, function() {\n let bodyResponse = appendReady();\n resolve( bodyResponse );\n } );\n } );\n};\n\nproto.onAppendOutlayer = function( response, path, items ) {\n this.options.outlayer.appended( items );\n};\n\n// ----- checkLastPage ----- //\n\n// check response for next element\nproto.checkLastPage = function( body, path ) {\n let { checkLastPage, path: pathOpt } = this.options;\n if ( !checkLastPage ) return;\n\n // if path is function, check if next path is truthy\n if ( typeof pathOpt == 'function' ) {\n let nextPath = this.getPath();\n if ( !nextPath ) {\n this.lastPageReached( body, path );\n return;\n }\n }\n // get selector from checkLastPage or path option\n let selector;\n if ( typeof checkLastPage == 'string' ) {\n selector = checkLastPage;\n } else if ( this.isPathSelector ) {\n // path option is selector string\n selector = pathOpt;\n }\n // check last page for selector\n // bail if no selector or not document response\n if ( !selector || !body.querySelector ) return;\n\n // check if response has selector\n let nextElem = body.querySelector( selector );\n if ( !nextElem ) this.lastPageReached( body, path );\n};\n\nproto.lastPageReached = function( body, path ) {\n this.canLoad = false;\n this.dispatchEvent( 'last', null, [ body, path ] );\n};\n\n// ----- error ----- //\n\nproto.onPageError = function( error, path, response ) {\n this.isLoading = false;\n this.canLoad = false;\n this.dispatchEvent( 'error', null, [ error, path, response ] );\n return error;\n};\n\n// -------------------------- prefill -------------------------- //\n\nInfiniteScroll.create.prefill = function() {\n if ( !this.options.prefill ) return;\n\n let append = this.options.append;\n if ( !append ) {\n console.error(`append option required for prefill. Set as :${append}`);\n return;\n }\n this.updateMeasurements();\n this.updateScroller();\n this.isPrefilling = true;\n this.on( 'append', this.prefill );\n this.once( 'error', this.stopPrefill );\n this.once( 'last', this.stopPrefill );\n this.prefill();\n};\n\nproto.prefill = function() {\n let distance = this.getPrefillDistance();\n this.isPrefilling = distance >= 0;\n if ( this.isPrefilling ) {\n this.log('prefill');\n this.loadNextPage();\n } else {\n this.stopPrefill();\n }\n};\n\nproto.getPrefillDistance = function() {\n // element scroll\n if ( this.options.elementScroll ) {\n return this.scroller.clientHeight - this.scroller.scrollHeight;\n }\n // window\n return this.windowHeight - this.element.clientHeight;\n};\n\nproto.stopPrefill = function() {\n this.log('stopPrefill');\n this.off( 'append', this.prefill );\n};\n\n// -------------------------- -------------------------- //\n\nreturn InfiniteScroll;\n\n} ) );\n", "// scroll-watch\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window,\n window.InfiniteScroll,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( window, InfiniteScroll, utils ) {\n\nlet proto = InfiniteScroll.prototype;\n\n// default options\nObject.assign( InfiniteScroll.defaults, {\n scrollThreshold: 400,\n // elementScroll: null,\n} );\n\nInfiniteScroll.create.scrollWatch = function() {\n // events\n this.pageScrollHandler = this.onPageScroll.bind( this );\n this.resizeHandler = this.onResize.bind( this );\n\n let scrollThreshold = this.options.scrollThreshold;\n let isEnable = scrollThreshold || scrollThreshold === 0;\n if ( isEnable ) this.enableScrollWatch();\n};\n\nInfiniteScroll.destroy.scrollWatch = function() {\n this.disableScrollWatch();\n};\n\nproto.enableScrollWatch = function() {\n if ( this.isScrollWatching ) return;\n\n this.isScrollWatching = true;\n this.updateMeasurements();\n this.updateScroller();\n // TODO disable after error?\n this.on( 'last', this.disableScrollWatch );\n this.bindScrollWatchEvents( true );\n};\n\nproto.disableScrollWatch = function() {\n if ( !this.isScrollWatching ) return;\n\n this.bindScrollWatchEvents( false );\n delete this.isScrollWatching;\n};\n\nproto.bindScrollWatchEvents = function( isBind ) {\n let addRemove = isBind ? 'addEventListener' : 'removeEventListener';\n this.scroller[ addRemove ]( 'scroll', this.pageScrollHandler );\n window[ addRemove ]( 'resize', this.resizeHandler );\n};\n\nproto.onPageScroll = InfiniteScroll.throttle( function() {\n let distance = this.getBottomDistance();\n if ( distance <= this.options.scrollThreshold ) {\n this.dispatchEvent('scrollThreshold');\n }\n} );\n\nproto.getBottomDistance = function() {\n let bottom, scrollY;\n if ( this.options.elementScroll ) {\n bottom = this.scroller.scrollHeight;\n scrollY = this.scroller.scrollTop + this.scroller.clientHeight;\n } else {\n bottom = this.top + this.element.clientHeight;\n scrollY = window.scrollY + this.windowHeight;\n }\n return bottom - scrollY;\n};\n\nproto.onResize = function() {\n this.updateMeasurements();\n};\n\nutils.debounceMethod( InfiniteScroll, 'onResize', 150 );\n\n// -------------------------- -------------------------- //\n\nreturn InfiniteScroll;\n\n} ) );\n", "// history\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window,\n window.InfiniteScroll,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( window, InfiniteScroll, utils ) {\n\nlet proto = InfiniteScroll.prototype;\n\nObject.assign( InfiniteScroll.defaults, {\n history: 'replace',\n // historyTitle: false,\n} );\n\nlet link = document.createElement('a');\n\n// ----- create/destroy ----- //\n\nInfiniteScroll.create.history = function() {\n if ( !this.options.history ) return;\n\n // check for same origin\n link.href = this.getAbsolutePath();\n // MS Edge does not have origin on link\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12236493/\n let linkOrigin = link.origin || link.protocol + '//' + link.host;\n let isSameOrigin = linkOrigin == location.origin;\n if ( !isSameOrigin ) {\n console.error( '[InfiniteScroll] cannot set history with different origin: ' +\n `${link.origin} on ${location.origin} . History behavior disabled.` );\n return;\n }\n\n // two ways to handle changing history\n if ( this.options.append ) {\n this.createHistoryAppend();\n } else {\n this.createHistoryPageLoad();\n }\n};\n\nproto.createHistoryAppend = function() {\n this.updateMeasurements();\n this.updateScroller();\n // array of scroll positions of appended pages\n this.scrollPages = [\n // first page\n {\n top: 0,\n path: location.href,\n title: document.title,\n },\n ];\n this.scrollPage = this.scrollPages[0];\n // events\n this.scrollHistoryHandler = this.onScrollHistory.bind( this );\n this.unloadHandler = this.onUnload.bind( this );\n this.scroller.addEventListener( 'scroll', this.scrollHistoryHandler );\n this.on( 'append', this.onAppendHistory );\n this.bindHistoryAppendEvents( true );\n};\n\nproto.bindHistoryAppendEvents = function( isBind ) {\n let addRemove = isBind ? 'addEventListener' : 'removeEventListener';\n this.scroller[ addRemove ]( 'scroll', this.scrollHistoryHandler );\n window[ addRemove ]( 'unload', this.unloadHandler );\n};\n\nproto.createHistoryPageLoad = function() {\n this.on( 'load', this.onPageLoadHistory );\n};\n\nInfiniteScroll.destroy.history =\nproto.destroyHistory = function() {\n let isHistoryAppend = this.options.history && this.options.append;\n if ( isHistoryAppend ) {\n this.bindHistoryAppendEvents( false );\n }\n};\n\n// ----- append history ----- //\n\nproto.onAppendHistory = function( response, path, items ) {\n // do not proceed if no items. #779\n if ( !items || !items.length ) return;\n\n let firstItem = items[0];\n let elemScrollY = this.getElementScrollY( firstItem );\n // resolve path\n link.href = path;\n // add page data to hash\n this.scrollPages.push({\n top: elemScrollY,\n path: link.href,\n title: response.title,\n });\n};\n\nproto.getElementScrollY = function( elem ) {\n if ( this.options.elementScroll ) {\n return elem.offsetTop - this.top;\n } else {\n let rect = elem.getBoundingClientRect();\n return rect.top + window.scrollY;\n }\n};\n\nproto.onScrollHistory = function() {\n // cycle through positions, find biggest without going over\n let scrollPage = this.getClosestScrollPage();\n // set history if changed\n if ( scrollPage != this.scrollPage ) {\n this.scrollPage = scrollPage;\n this.setHistory( scrollPage.title, scrollPage.path );\n }\n};\n\nutils.debounceMethod( InfiniteScroll, 'onScrollHistory', 150 );\n\nproto.getClosestScrollPage = function() {\n let scrollViewY;\n if ( this.options.elementScroll ) {\n scrollViewY = this.scroller.scrollTop + this.scroller.clientHeight / 2;\n } else {\n scrollViewY = window.scrollY + this.windowHeight / 2;\n }\n\n let scrollPage;\n for ( let page of this.scrollPages ) {\n if ( page.top >= scrollViewY ) break;\n\n scrollPage = page;\n }\n return scrollPage;\n};\n\nproto.setHistory = function( title, path ) {\n let optHistory = this.options.history;\n let historyMethod = optHistory && history[ optHistory + 'State' ];\n if ( !historyMethod ) return;\n\n history[ optHistory + 'State' ]( null, title, path );\n if ( this.options.historyTitle ) document.title = title;\n this.dispatchEvent( 'history', null, [ title, path ] );\n};\n\n// scroll to top to prevent initial scroll-reset after page refresh\n// https://stackoverflow.com/a/18633915/182183\nproto.onUnload = function() {\n if ( this.scrollPage.top === 0 ) return;\n\n // calculate where scroll position would be on refresh\n let scrollY = window.scrollY - this.scrollPage.top + this.top;\n // disable scroll event before setting scroll #679\n this.destroyHistory();\n scrollTo( 0, scrollY );\n};\n\n// ----- load history ----- //\n\n// update URL\nproto.onPageLoadHistory = function( response, path ) {\n this.setHistory( response.title, path );\n};\n\n// -------------------------- -------------------------- //\n\nreturn InfiniteScroll;\n\n} ) );\n", "// button\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window,\n window.InfiniteScroll,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( window, InfiniteScroll, utils ) {\n\n// -------------------------- InfiniteScrollButton -------------------------- //\n\nclass InfiniteScrollButton {\n constructor( element, infScroll ) {\n this.element = element;\n this.infScroll = infScroll;\n // events\n this.clickHandler = this.onClick.bind( this );\n this.element.addEventListener( 'click', this.clickHandler );\n infScroll.on( 'request', this.disable.bind( this ) );\n infScroll.on( 'load', this.enable.bind( this ) );\n infScroll.on( 'error', this.hide.bind( this ) );\n infScroll.on( 'last', this.hide.bind( this ) );\n }\n\n onClick( event ) {\n event.preventDefault();\n this.infScroll.loadNextPage();\n }\n\n enable() {\n this.element.removeAttribute('disabled');\n }\n\n disable() {\n this.element.disabled = 'disabled';\n }\n\n hide() {\n this.element.style.display = 'none';\n }\n\n destroy() {\n this.element.removeEventListener( 'click', this.clickHandler );\n }\n\n}\n\n// -------------------------- InfiniteScroll methods -------------------------- //\n\n// InfiniteScroll.defaults.button = null;\n\nInfiniteScroll.create.button = function() {\n let buttonElem = utils.getQueryElement( this.options.button );\n if ( buttonElem ) {\n this.button = new InfiniteScrollButton( buttonElem, this );\n }\n};\n\nInfiniteScroll.destroy.button = function() {\n if ( this.button ) this.button.destroy();\n};\n\n// -------------------------- -------------------------- //\n\nInfiniteScroll.Button = InfiniteScrollButton;\n\nreturn InfiniteScroll;\n\n} ) );\n", "// status\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window,\n window.InfiniteScroll,\n window.fizzyUIUtils,\n );\n }\n\n}( window, function factory( window, InfiniteScroll, utils ) {\n\nlet proto = InfiniteScroll.prototype;\n\n// InfiniteScroll.defaults.status = null;\n\nInfiniteScroll.create.status = function() {\n let statusElem = utils.getQueryElement( this.options.status );\n if ( !statusElem ) return;\n\n // elements\n this.statusElement = statusElem;\n this.statusEventElements = {\n request: statusElem.querySelector('.infinite-scroll-request'),\n error: statusElem.querySelector('.infinite-scroll-error'),\n last: statusElem.querySelector('.infinite-scroll-last'),\n };\n // events\n this.on( 'request', this.showRequestStatus );\n this.on( 'error', this.showErrorStatus );\n this.on( 'last', this.showLastStatus );\n this.bindHideStatus('on');\n};\n\nproto.bindHideStatus = function( bindMethod ) {\n let hideEvent = this.options.append ? 'append' : 'load';\n this[ bindMethod ]( hideEvent, this.hideAllStatus );\n};\n\nproto.showRequestStatus = function() {\n this.showStatus('request');\n};\n\nproto.showErrorStatus = function() {\n this.showStatus('error');\n};\n\nproto.showLastStatus = function() {\n this.showStatus('last');\n // prevent last then append event race condition from showing last status #706\n this.bindHideStatus('off');\n};\n\nproto.showStatus = function( eventName ) {\n show( this.statusElement );\n this.hideStatusEventElements();\n let eventElem = this.statusEventElements[ eventName ];\n show( eventElem );\n};\n\nproto.hideAllStatus = function() {\n hide( this.statusElement );\n this.hideStatusEventElements();\n};\n\nproto.hideStatusEventElements = function() {\n for ( let type in this.statusEventElements ) {\n let eventElem = this.statusEventElements[ type ];\n hide( eventElem );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction hide( elem ) {\n setDisplay( elem, 'none' );\n}\n\nfunction show( elem ) {\n setDisplay( elem, 'block' );\n}\n\nfunction setDisplay( elem, value ) {\n if ( elem ) {\n elem.style.display = value;\n }\n}\n\n// -------------------------- -------------------------- //\n\nreturn InfiniteScroll;\n\n} ) );\n", "/*!\n * Infinite Scroll v4.0.1\n * Automatically add next page\n *\n * Licensed GPLv3 for open source use\n * or Infinite Scroll Commercial License for commercial use\n *\n * https://infinite-scroll.com\n * Copyright 2018-2020 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('./page-load'),\n require('./scroll-watch'),\n require('./history'),\n require('./button'),\n require('./status'),\n );\n }\n\n} )( window, function factory( InfiniteScroll ) {\n return InfiniteScroll;\n} );\n", "!function(t,n){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=n();else if(\"function\"==typeof define&&define.amd)define([],n);else{var e=n();for(var r in e)(\"object\"==typeof exports?exports:t)[r]=e[r]}}(window,(function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&n&&\"string\"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p=\"\",e(e.s=66)}([function(t,n){var e=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=e)},function(t,n,e){var r=e(12)(\"wks\"),o=e(13),i=e(0).Symbol,c=\"function\"==typeof i;(t.exports=function(t){return r[t]||(r[t]=c&&i[t]||(c?i:o)(\"Symbol.\"+t))}).store=r},function(t,n){var e=t.exports={version:\"2.6.11\"};\"number\"==typeof __e&&(__e=e)},function(t,n,e){var r=e(4);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,n){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,n,e){t.exports=!e(17)((function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}))},function(t,n,e){var r=e(7);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},function(t,n){t.exports=function(t,n){if(!(t instanceof n))throw new TypeError(\"Cannot call a class as a function\")}},function(t,n){function e(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}t.exports=function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}},function(t,n,e){var r=e(8),o=e(1)(\"toStringTag\"),i=\"Arguments\"==r(function(){return arguments}());t.exports=function(t){var n,e,c;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(e=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),o))?e:i?r(n):\"Object\"==(c=r(n))&&\"function\"==typeof n.callee?\"Arguments\":c}},function(t,n,e){var r=e(2),o=e(0),i=o[\"__core-js_shared__\"]||(o[\"__core-js_shared__\"]={});(t.exports=function(t,n){return i[t]||(i[t]=void 0!==n?n:{})})(\"versions\",[]).push({version:r.version,mode:e(22)?\"pure\":\"global\",copyright:\"\u00A9 2019 Denis Pushkarev (zloirock.ru)\"})},function(t,n){var e=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++e+r).toString(36))}},function(t,n,e){var r=e(0),o=e(2),i=e(15),c=e(18),s=e(6),a=function(t,n,e){var u,f,h,l,v=t&a.F,p=t&a.G,d=t&a.S,m=t&a.P,g=t&a.B,y=p?r:d?r[n]||(r[n]={}):(r[n]||{}).prototype,b=p?o:o[n]||(o[n]={}),x=b.prototype||(b.prototype={});for(u in p&&(e=n),e)h=((f=!v&&y&&void 0!==y[u])?y:e)[u],l=g&&f?s(h,r):m&&\"function\"==typeof h?s(Function.call,h):h,y&&c(y,u,h,t&a.U),b[u]!=h&&i(b,u,l),m&&x[u]!=h&&(x[u]=h)};r.core=o,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,n,e){var r=e(16),o=e(36);t.exports=e(5)?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n,e){var r=e(3),o=e(34),i=e(35),c=Object.defineProperty;n.f=e(5)?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return c(t,n,e)}catch(t){}if(\"get\"in e||\"set\"in e)throw TypeError(\"Accessors not supported!\");return\"value\"in e&&(t[n]=e.value),t}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n,e){var r=e(0),o=e(15),i=e(19),c=e(13)(\"src\"),s=e(37),a=(\"\"+s).split(\"toString\");e(2).inspectSource=function(t){return s.call(t)},(t.exports=function(t,n,e,s){var u=\"function\"==typeof e;u&&(i(e,\"name\")||o(e,\"name\",n)),t[n]!==e&&(u&&(i(e,c)||o(e,c,t[n]?\"\"+t[n]:a.join(String(n)))),t===r?t[n]=e:s?t[n]?t[n]=e:o(t,n,e):(delete t[n],o(t,n,e)))})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&this[c]||s.call(this)}))},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){var r=e(25),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,n,e){\"use strict\";var r,o,i,c,s=e(22),a=e(0),u=e(6),f=e(11),h=e(14),l=e(4),v=e(7),p=e(38),d=e(39),m=e(43),g=e(26).set,y=e(46)(),b=e(27),x=e(47),w=e(48),_=e(49),P=a.TypeError,S=a.process,E=S&&S.versions,j=E&&E.v8||\"\",k=a.Promise,T=\"process\"==f(S),O=function(){},M=o=b.f,L=!!function(){try{var t=k.resolve(1),n=(t.constructor={})[e(1)(\"species\")]=function(t){t(O,O)};return(T||\"function\"==typeof PromiseRejectionEvent)&&t.then(O)instanceof n&&0!==j.indexOf(\"6.6\")&&-1===w.indexOf(\"Chrome/66\")}catch(t){}}(),C=function(t){var n;return!(!l(t)||\"function\"!=typeof(n=t.then))&&n},R=function(t,n){if(!t._n){t._n=!0;var e=t._c;y((function(){for(var r=t._v,o=1==t._s,i=0,c=function(n){var e,i,c,s=o?n.ok:n.fail,a=n.resolve,u=n.reject,f=n.domain;try{s?(o||(2==t._h&&F(t),t._h=1),!0===s?e=r:(f&&f.enter(),e=s(r),f&&(f.exit(),c=!0)),e===n.promise?u(P(\"Promise-chain cycle\")):(i=C(e))?i.call(e,a,u):a(e)):u(r)}catch(t){f&&!c&&f.exit(),u(t)}};e.length>i;)c(e[i++]);t._c=[],t._n=!1,n&&!t._h&&I(t)}))}},I=function(t){g.call(a,(function(){var n,e,r,o=t._v,i=B(t);if(i&&(n=x((function(){T?S.emit(\"unhandledRejection\",o,t):(e=a.onunhandledrejection)?e({promise:t,reason:o}):(r=a.console)&&r.error&&r.error(\"Unhandled promise rejection\",o)})),t._h=T||B(t)?2:1),t._a=void 0,i&&n.e)throw n.v}))},B=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){g.call(a,(function(){var n;T?S.emit(\"rejectionHandled\",t):(n=a.onrejectionhandled)&&n({promise:t,reason:t._v})}))},A=function(t){var n=this;n._d||(n._d=!0,(n=n._w||n)._v=t,n._s=2,n._a||(n._a=n._c.slice()),R(n,!0))},Y=function(t){var n,e=this;if(!e._d){e._d=!0,e=e._w||e;try{if(e===t)throw P(\"Promise can't be resolved itself\");(n=C(t))?y((function(){var r={_w:e,_d:!1};try{n.call(t,u(Y,r,1),u(A,r,1))}catch(t){A.call(r,t)}})):(e._v=t,e._s=1,R(e,!1))}catch(t){A.call({_w:e,_d:!1},t)}}};L||(k=function(t){p(this,k,\"Promise\",\"_h\"),v(t),r.call(this);try{t(u(Y,this,1),u(A,this,1))}catch(t){A.call(this,t)}},(r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=e(50)(k.prototype,{then:function(t,n){var e=M(m(this,k));return e.ok=\"function\"!=typeof t||t,e.fail=\"function\"==typeof n&&n,e.domain=T?S.domain:void 0,this._c.push(e),this._a&&this._a.push(e),this._s&&R(this,!1),e.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new r;this.promise=t,this.resolve=u(Y,t,1),this.reject=u(A,t,1)},b.f=M=function(t){return t===k||t===c?new i(t):o(t)}),h(h.G+h.W+h.F*!L,{Promise:k}),e(51)(k,\"Promise\"),e(52)(\"Promise\"),c=e(2).Promise,h(h.S+h.F*!L,\"Promise\",{reject:function(t){var n=M(this);return(0,n.reject)(t),n.promise}}),h(h.S+h.F*(s||!L),\"Promise\",{resolve:function(t){return _(s&&this===c?k:this,t)}}),h(h.S+h.F*!(L&&e(53)((function(t){k.all(t).catch(O)}))),\"Promise\",{all:function(t){var n=this,e=M(n),r=e.resolve,o=e.reject,i=x((function(){var e=[],i=0,c=1;d(t,!1,(function(t){var s=i++,a=!1;e.push(void 0),c++,n.resolve(t).then((function(t){a||(a=!0,e[s]=t,--c||r(e))}),o)})),--c||r(e)}));return i.e&&o(i.v),e.promise},race:function(t){var n=this,e=M(n),r=e.reject,o=x((function(){d(t,!1,(function(t){n.resolve(t).then(e.resolve,r)}))}));return o.e&&r(o.v),e.promise}})},function(t,n){t.exports=!1},function(t,n,e){var r=e(4),o=e(0).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n){t.exports={}},function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},function(t,n,e){var r,o,i,c=e(6),s=e(44),a=e(45),u=e(23),f=e(0),h=f.process,l=f.setImmediate,v=f.clearImmediate,p=f.MessageChannel,d=f.Dispatch,m=0,g={},y=function(){var t=+this;if(g.hasOwnProperty(t)){var n=g[t];delete g[t],n()}},b=function(t){y.call(t.data)};l&&v||(l=function(t){for(var n=[],e=1;arguments.length>e;)n.push(arguments[e++]);return g[++m]=function(){s(\"function\"==typeof t?t:Function(t),n)},r(m),m},v=function(t){delete g[t]},\"process\"==e(8)(h)?r=function(t){h.nextTick(c(y,t,1))}:d&&d.now?r=function(t){d.now(c(y,t,1))}:p?(i=(o=new p).port2,o.port1.onmessage=b,r=c(i.postMessage,i,1)):f.addEventListener&&\"function\"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+\"\",\"*\")},f.addEventListener(\"message\",b,!1)):r=\"onreadystatechange\"in u(\"script\")?function(t){a.appendChild(u(\"script\")).onreadystatechange=function(){a.removeChild(this),y.call(t)}}:function(t){setTimeout(c(y,t,1),0)}),t.exports={set:l,clear:v}},function(t,n,e){\"use strict\";var r=e(7);function o(t){var n,e;this.promise=new t((function(t,r){if(void 0!==n||void 0!==e)throw TypeError(\"Bad Promise constructor\");n=t,e=r})),this.resolve=r(n),this.reject=r(e)}t.exports.f=function(t){return new o(t)}},function(t,n,e){\"use strict\";var r=e(11),o={};o[e(1)(\"toStringTag\")]=\"z\",o+\"\"!=\"[object z]\"&&e(18)(Object.prototype,\"toString\",(function(){return\"[object \"+r(this)+\"]\"}),!0)},function(t,n,e){var r=e(30),o=e(31);t.exports=function(t){return r(o(t))}},function(t,n,e){var r=e(8);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,n){t.exports=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,n,e){var r=e(25),o=Math.max,i=Math.min;t.exports=function(t,n){return(t=r(t))<0?o(t+n,0):i(t,n)}},function(t,n,e){var r=e(31);t.exports=function(t){return Object(r(t))}},function(t,n,e){t.exports=!e(5)&&!e(17)((function(){return 7!=Object.defineProperty(e(23)(\"div\"),\"a\",{get:function(){return 7}}).a}))},function(t,n,e){var r=e(4);t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if(\"function\"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&\"function\"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,e){t.exports=e(12)(\"native-function-to-string\",Function.toString)},function(t,n){t.exports=function(t,n,e,r){if(!(t instanceof n)||void 0!==r&&r in t)throw TypeError(e+\": incorrect invocation!\");return t}},function(t,n,e){var r=e(6),o=e(40),i=e(41),c=e(3),s=e(20),a=e(42),u={},f={};(n=t.exports=function(t,n,e,h,l){var v,p,d,m,g=l?function(){return t}:a(t),y=r(e,h,n?2:1),b=0;if(\"function\"!=typeof g)throw TypeError(t+\" is not iterable!\");if(i(g)){for(v=s(t.length);v>b;b++)if((m=n?y(c(p=t[b])[0],p[1]):y(t[b]))===u||m===f)return m}else for(d=g.call(t);!(p=d.next()).done;)if((m=o(d,y,p.value,n))===u||m===f)return m}).BREAK=u,n.RETURN=f},function(t,n,e){var r=e(3);t.exports=function(t,n,e,o){try{return o?n(r(e)[0],e[1]):n(e)}catch(n){var i=t.return;throw void 0!==i&&r(i.call(t)),n}}},function(t,n,e){var r=e(24),o=e(1)(\"iterator\"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,n,e){var r=e(11),o=e(1)(\"iterator\"),i=e(24);t.exports=e(2).getIteratorMethod=function(t){if(null!=t)return t[o]||t[\"@@iterator\"]||i[r(t)]}},function(t,n,e){var r=e(3),o=e(7),i=e(1)(\"species\");t.exports=function(t,n){var e,c=r(t).constructor;return void 0===c||null==(e=r(c)[i])?n:o(e)}},function(t,n){t.exports=function(t,n,e){var r=void 0===e;switch(n.length){case 0:return r?t():t.call(e);case 1:return r?t(n[0]):t.call(e,n[0]);case 2:return r?t(n[0],n[1]):t.call(e,n[0],n[1]);case 3:return r?t(n[0],n[1],n[2]):t.call(e,n[0],n[1],n[2]);case 4:return r?t(n[0],n[1],n[2],n[3]):t.call(e,n[0],n[1],n[2],n[3])}return t.apply(e,n)}},function(t,n,e){var r=e(0).document;t.exports=r&&r.documentElement},function(t,n,e){var r=e(0),o=e(26).set,i=r.MutationObserver||r.WebKitMutationObserver,c=r.process,s=r.Promise,a=\"process\"==e(8)(c);t.exports=function(){var t,n,e,u=function(){var r,o;for(a&&(r=c.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?e():n=void 0,r}}n=void 0,r&&r.enter()};if(a)e=function(){c.nextTick(u)};else if(!i||r.navigator&&r.navigator.standalone)if(s&&s.resolve){var f=s.resolve(void 0);e=function(){f.then(u)}}else e=function(){o.call(r,u)};else{var h=!0,l=document.createTextNode(\"\");new i(u).observe(l,{characterData:!0}),e=function(){l.data=h=!h}}return function(r){var o={fn:r,next:void 0};n&&(n.next=o),t||(t=o,e()),n=o}}},function(t,n){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,n,e){var r=e(0).navigator;t.exports=r&&r.userAgent||\"\"},function(t,n,e){var r=e(3),o=e(4),i=e(27);t.exports=function(t,n){if(r(t),o(n)&&n.constructor===t)return n;var e=i.f(t);return(0,e.resolve)(n),e.promise}},function(t,n,e){var r=e(18);t.exports=function(t,n,e){for(var o in n)r(t,o,n[o],e);return t}},function(t,n,e){var r=e(16).f,o=e(19),i=e(1)(\"toStringTag\");t.exports=function(t,n,e){t&&!o(t=e?t:t.prototype,i)&&r(t,i,{configurable:!0,value:n})}},function(t,n,e){\"use strict\";var r=e(0),o=e(16),i=e(5),c=e(1)(\"species\");t.exports=function(t){var n=r[t];i&&n&&!n[c]&&o.f(n,c,{configurable:!0,get:function(){return this}})}},function(t,n,e){var r=e(1)(\"iterator\"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,(function(){throw 2}))}catch(t){}t.exports=function(t,n){if(!n&&!o)return!1;var e=!1;try{var i=[7],c=i[r]();c.next=function(){return{done:e=!0}},i[r]=function(){return c},t(i)}catch(t){}return e}},function(t,n,e){var r=e(14);r(r.S+r.F,\"Object\",{assign:e(55)})},function(t,n,e){\"use strict\";var r=e(5),o=e(56),i=e(61),c=e(62),s=e(33),a=e(30),u=Object.assign;t.exports=!u||e(17)((function(){var t={},n={},e=Symbol(),r=\"abcdefghijklmnopqrst\";return t[e]=7,r.split(\"\").forEach((function(t){n[t]=t})),7!=u({},t)[e]||Object.keys(u({},n)).join(\"\")!=r}))?function(t,n){for(var e=s(t),u=arguments.length,f=1,h=i.f,l=c.f;u>f;)for(var v,p=a(arguments[f++]),d=h?o(p).concat(h(p)):o(p),m=d.length,g=0;m>g;)v=d[g++],r&&!l.call(p,v)||(e[v]=p[v]);return e}:u},function(t,n,e){var r=e(57),o=e(60);t.exports=Object.keys||function(t){return r(t,o)}},function(t,n,e){var r=e(19),o=e(29),i=e(58)(!1),c=e(59)(\"IE_PROTO\");t.exports=function(t,n){var e,s=o(t),a=0,u=[];for(e in s)e!=c&&r(s,e)&&u.push(e);for(;n.length>a;)r(s,e=n[a++])&&(~i(u,e)||u.push(e));return u}},function(t,n,e){var r=e(29),o=e(20),i=e(32);t.exports=function(t){return function(n,e,c){var s,a=r(n),u=o(a.length),f=i(c,u);if(t&&e!=e){for(;u>f;)if((s=a[f++])!=s)return!0}else for(;u>f;f++)if((t||f in a)&&a[f]===e)return t||f||0;return!t&&-1}}},function(t,n,e){var r=e(12)(\"keys\"),o=e(13);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,n){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,e){var r=e(14);r(r.P,\"Array\",{fill:e(64)}),e(65)(\"fill\")},function(t,n,e){\"use strict\";var r=e(33),o=e(32),i=e(20);t.exports=function(t){for(var n=r(this),e=i(n.length),c=arguments.length,s=o(c>1?arguments[1]:void 0,e),a=c>2?arguments[2]:void 0,u=void 0===a?e:o(a,e);u>s;)n[s++]=t;return n}},function(t,n,e){var r=e(1)(\"unscopables\"),o=Array.prototype;null==o[r]&&e(15)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,n,e){\"use strict\";e.r(n),e.d(n,\"ScratchCard\",(function(){return h})),e.d(n,\"SCRATCH_TYPE\",(function(){return r}));e(21),e(28),e(54);var r,o=e(9),i=e.n(o),c=e(10),s=e.n(c),a=(e(63),function(){function t(n,e,r){i()(this,t),this.ctx=n,this.mouseX=e,this.mouseY=r}return s()(t,[{key:\"updateMousePosition\",value:function(t,n){this.mouseX=t,this.mouseY=n}},{key:\"circle\",value:function(t){this.ctx.beginPath(),this.ctx.arc(this.mouseX+t,this.mouseY+t,t,0,2*Math.PI,!1),this.ctx.fillStyle=\"#000000\",this.ctx.fill(),this.ctx.closePath()}},{key:\"clearPoint\",value:function(t){var n=t,e=2*Math.random()*n-n,r=Math.sqrt(n*n-e*e),o=2*Math.random()*r-r;return e+=n,o+=n,[e+=this.mouseX,o+=this.mouseY]}},{key:\"spray\",value:function(t,n,e){for(var r=0;r<e;r++){var o=this.clearPoint(t/2);this.ctx.beginPath(),this.ctx.arc(o[0]+t/2,o[1]+t/2,n/2,0,2*Math.PI,!1),this.ctx.fillStyle=\"#000000\",this.ctx.fill(),this.ctx.closePath()}}},{key:\"brush\",value:function(t){if(null!==t){var n=Math.atan2(this.mouseY,this.mouseX);this.ctx.save(),this.ctx.translate(this.mouseX,this.mouseY),this.ctx.rotate(n),this.ctx.drawImage(t,-t.width/2,-t.height/2)}else{var e=new Error(\"argument img is not a node IMG\");console.log(e.message)}}},{key:\"startLine\",value:function(t){this.ctx.beginPath(),this.ctx.strokeStyle=\"black\",this.ctx.lineWidth=t,this.ctx.lineJoin=this.ctx.lineCap=\"round\",this.ctx.moveTo(this.mouseX+t,this.mouseY+t)}},{key:\"drawLine\",value:function(t){this.ctx.filter=\"blur(1px)\",this.ctx.lineTo(this.mouseX+t,this.mouseY+t),this.ctx.stroke()}}]),t}());function u(t){return new Promise((function(n,e){var r=new Image;r.crossOrigin=\"Anonymous\",r.onload=function(){n(r)},r.src=t,r.onerror=function(n){var r=new Error(\"Image \".concat(t,\" is not loaded.\"));e(r)}}))}function f(t,n){var e,r;return function(){var o=this,i=+new Date,c=arguments;e&&i<e+n?(clearTimeout(r),r=window.setTimeout((function(){e=i,t.apply(o,c)}),n)):(e=i,t.apply(o,c))}}!function(t){t[t.BRUSH=0]=\"BRUSH\",t[t.SPRAY=1]=\"SPRAY\",t[t.CIRCLE=2]=\"CIRCLE\",t[t.LINE=3]=\"LINE\"}(r||(r={})),function(){if(\"function\"==typeof window.CustomEvent)return!1;function t(t,n){n=n||{bubbles:!1,cancelable:!1,detail:void 0};var e=document.createEvent(\"CustomEvent\");return e.initCustomEvent(t,n.bubbles,n.cancelable,n.detail),e}t.prototype=window.Event.prototype,window.CustomEvent=t}();var h=function(){function t(n,e){var o=this;i()(this,t);var c=this,s={scratchType:r.LINE,containerWidth:100,containerHeight:100,percentToFinish:50,nPoints:0,pointSize:[0,0],callback:function(){alert(\"done.\")},brushSrc:\"\",imageForwardSrc:\"./images/scratchcard.png\",imageBackgroundSrc:\"./images/scratchcard-background.svg\",htmlBackground:\"\",clearZoneRadius:0,enabledPercentUpdate:!0};this.config=Object.assign(Object.assign({},s),e),this.scratchType=this.config.scratchType,this.container=this.isString(n)?document.querySelector(String(n)):n,this.position=[0,0],this.readyToClear=!1,this.percent=0,this.callbackDone=!1,this.generateCanvas(),this.ctx=this.canvas.getContext(\"2d\"),this.brush=new a(this.ctx,this.position[0],this.position[1]),this.config.scratchType===r.BRUSH&&u(this.config.brushSrc).then((function(t){o.brushImage=t}));var h=f((function(t){t.preventDefault(),c.dispatchEvent(\"scratch\",\"move\"),c.position=c.mousePosition(t),c.brush.updateMousePosition(c.position[0],c.position[1]),c.scratch(),o.config.enabledPercentUpdate&&(c.percent=c.updatePercent())}),16);this.canvas.addEventListener(\"mousedown\",(function(t){t.preventDefault(),c._setScratchPosition(),c.scratchType===r.LINE&&(c.position=c.mousePosition(t),c.brush.updateMousePosition(c.position[0],c.position[1]),c.brush.startLine(c.config.clearZoneRadius)),c.canvas.addEventListener(\"mousemove\",h),document.body.addEventListener(\"mouseup\",(function t(n){c.canvas.removeEventListener(\"mousemove\",h),c.finish(),this.removeEventListener(\"mouseup\",t)}))})),this.canvas.addEventListener(\"touchstart\",(function(t){t.preventDefault(),c._setScratchPosition(),c.scratchType===r.LINE&&(c.position=c.mousePosition(t),c.brush.updateMousePosition(c.position[0],c.position[1]),c.brush.startLine(c.config.clearZoneRadius)),c.canvas.addEventListener(\"touchmove\",h),document.body.addEventListener(\"touchend\",(function t(){c.canvas.removeEventListener(\"touchmove\",h),c.finish(),this.removeEventListener(\"touchend\",t)}))})),window.addEventListener(\"resize\",f((function(){o._setScratchPosition()}),100)),window.addEventListener(\"scroll\",f((function(){o._setScratchPosition()}),16))}return s()(t,[{key:\"isString\",value:function(t){return\"string\"==typeof t||t instanceof String}},{key:\"getPercent\",value:function(){return this.percent}},{key:\"_setScratchPosition\",value:function(){this.zone=function(t){for(var n={left:0,top:0},e=t.getBoundingClientRect();t;)n.top+=t.offsetTop,n.left+=t.offsetLeft,t=t.offsetParent;var r=n.left-e.left,o=n.top-e.top;return{left:r<0?n.left+Math.abs(r):n.left-Math.abs(r),top:o<0?n.top+Math.abs(o):n.top-Math.abs(o)}}(this.canvas)}},{key:\"finish\",value:function(){!this.callbackDone&&this.percent>this.config.percentToFinish&&(this.clear(),this.canvas.style.pointerEvents=\"none\",void 0!==this.config.callback&&(this.callbackDone=!0,this.config.callback()))}},{key:\"dispatchEvent\",value:function(t,n){!function(t,n,e){var r=new CustomEvent(n,{bubbles:!0,cancelable:!0,detail:e});t.dispatchEvent(r)}(this.canvas,\"\".concat(t,\".\").concat(n),{})}},{key:\"init\",value:function(){var t=this;return new Promise((function(n,e){u(t.config.imageForwardSrc).then((function(e){t.scratchImage=e,t.ctx.drawImage(t.scratchImage,0,0,t.canvas.width,t.canvas.height),t.setBackground(),n()}),(function(n){return e(n),new TypeError(\"\".concat(t.config.imageForwardSrc,\" is not loaded.\"))}))}))}},{key:\"generateCanvas\",value:function(){this.canvas=document.createElement(\"canvas\"),this.canvas.classList.add(\"sc__canvas\"),this.canvas.width=this.config.containerWidth,this.canvas.height=this.config.containerHeight,this.container.appendChild(this.canvas)}},{key:\"setBackground\",value:function(){var t=this;if(0!==this.config.htmlBackground.length)!function(t,n){var e=new DOMParser,r=document.createElement(\"div\");r.classList.add(\"sc__inner\");var o=e.parseFromString(t,\"text/html\");r.innerHTML=o.body.innerHTML,n.insertBefore(r,n.firstElementChild)}(this.config.htmlBackground,this.container);else{var n=document.createElement(\"img\");u(this.config.imageBackgroundSrc).then((function(e){n.src=e.src,t.container.insertBefore(n,t.canvas)}),(function(t){console.log(t.message)}))}}},{key:\"mousePosition\",value:function(t){var n,e;switch(t.type){case\"touchmove\":n=t.touches[0].clientX-this.config.clearZoneRadius-this.zone.left,e=t.touches[0].clientY-this.config.clearZoneRadius-this.zone.top;break;case\"mousemove\":n=t.clientX-this.config.clearZoneRadius-this.zone.left,e=t.clientY-this.config.clearZoneRadius-this.zone.top}return[n,e]}},{key:\"scratch\",value:function(){this.position[0],this.position[1];switch(this.ctx.globalCompositeOperation=\"destination-out\",this.ctx.save(),this.config.scratchType){case r.BRUSH:this.brush.brush(this.brushImage);break;case r.CIRCLE:this.brush.circle(this.config.clearZoneRadius);break;case r.SPRAY:this.brush.spray(this.config.clearZoneRadius,this.config.pointSize,this.config.nPoints);break;case r.LINE:this.brush.drawLine(this.config.clearZoneRadius)}this.ctx.restore()}},{key:\"updatePercent\",value:function(){for(var t=0,n=this.ctx.getImageData(0,0,this.canvas.width,this.canvas.height),e=n.data.length,r=0;r<e;r+=4)0===n.data[r]&&0===n.data[r+1]&&0===n.data[r+2]&&0===n.data[r+3]&&t++;return t>=1?t/(this.canvas.width*this.canvas.height)*100:0}},{key:\"clear\",value:function(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}}]),t}();window.ScratchCard=h,window.SCRATCH_TYPE=r}])}));", "/*\n * International Telephone Input v18.1.6\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n// wrap in UMD\n(function(factory) {\n if (typeof module === \"object\" && module.exports) module.exports = factory(); else window.intlTelInput = factory();\n})(function(undefined) {\n \"use strict\";\n return function() {\n // Array of country objects for the flag dropdown.\n // Here is the criteria for the plugin to support a given country/territory\n // - It has an iso2 code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n // - It has it's own country calling code (it is not a sub-region of another country): https://en.wikipedia.org/wiki/List_of_country_calling_codes\n // - It has a flag in the region-flags project: https://github.com/behdad/region-flags/tree/gh-pages/png\n // - It is supported by libphonenumber (it must be listed on this page): https://github.com/googlei18n/libphonenumber/blob/master/resources/ShortNumberMetadata.xml\n // Each country array has the following information:\n // [\n // Country name,\n // iso2 code,\n // International dial code,\n // Order (if >1 country with same dial code),\n // Area codes\n // ]\n var allCountries = [ [ \"Afghanistan (\u202B\u0627\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646\u202C\u200E)\", \"af\", \"93\" ], [ \"Albania (Shqip\u00EBri)\", \"al\", \"355\" ], [ \"Algeria (\u202B\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u202C\u200E)\", \"dz\", \"213\" ], [ \"American Samoa\", \"as\", \"1\", 5, [ \"684\" ] ], [ \"Andorra\", \"ad\", \"376\" ], [ \"Angola\", \"ao\", \"244\" ], [ \"Anguilla\", \"ai\", \"1\", 6, [ \"264\" ] ], [ \"Antigua and Barbuda\", \"ag\", \"1\", 7, [ \"268\" ] ], [ \"Argentina\", \"ar\", \"54\" ], [ \"Armenia (\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576)\", \"am\", \"374\" ], [ \"Aruba\", \"aw\", \"297\" ], [ \"Ascension Island\", \"ac\", \"247\" ], [ \"Australia\", \"au\", \"61\", 0 ], [ \"Austria (\u00D6sterreich)\", \"at\", \"43\" ], [ \"Azerbaijan (Az\u0259rbaycan)\", \"az\", \"994\" ], [ \"Bahamas\", \"bs\", \"1\", 8, [ \"242\" ] ], [ \"Bahrain (\u202B\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u202C\u200E)\", \"bh\", \"973\" ], [ \"Bangladesh (\u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6)\", \"bd\", \"880\" ], [ \"Barbados\", \"bb\", \"1\", 9, [ \"246\" ] ], [ \"Belarus (\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C)\", \"by\", \"375\" ], [ \"Belgium (Belgi\u00EB)\", \"be\", \"32\" ], [ \"Belize\", \"bz\", \"501\" ], [ \"Benin (B\u00E9nin)\", \"bj\", \"229\" ], [ \"Bermuda\", \"bm\", \"1\", 10, [ \"441\" ] ], [ \"Bhutan (\u0F60\u0F56\u0FB2\u0F74\u0F42)\", \"bt\", \"975\" ], [ \"Bolivia\", \"bo\", \"591\" ], [ \"Bosnia and Herzegovina (\u0411\u043E\u0441\u043D\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430)\", \"ba\", \"387\" ], [ \"Botswana\", \"bw\", \"267\" ], [ \"Brazil (Brasil)\", \"br\", \"55\" ], [ \"British Indian Ocean Territory\", \"io\", \"246\" ], [ \"British Virgin Islands\", \"vg\", \"1\", 11, [ \"284\" ] ], [ \"Brunei\", \"bn\", \"673\" ], [ \"Bulgaria (\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F)\", \"bg\", \"359\" ], [ \"Burkina Faso\", \"bf\", \"226\" ], [ \"Burundi (Uburundi)\", \"bi\", \"257\" ], [ \"Cambodia (\u1780\u1798\u17D2\u1796\u17BB\u1787\u17B6)\", \"kh\", \"855\" ], [ \"Cameroon (Cameroun)\", \"cm\", \"237\" ], [ \"Canada\", \"ca\", \"1\", 1, [ \"204\", \"226\", \"236\", \"249\", \"250\", \"263\", \"289\", \"306\", \"343\", \"354\", \"365\", \"367\", \"368\", \"382\", \"387\", \"403\", \"416\", \"418\", \"428\", \"431\", \"437\", \"438\", \"450\", \"584\", \"468\", \"474\", \"506\", \"514\", \"519\", \"548\", \"579\", \"581\", \"584\", \"587\", \"604\", \"613\", \"639\", \"647\", \"672\", \"683\", \"705\", \"709\", \"742\", \"753\", \"778\", \"780\", \"782\", \"807\", \"819\", \"825\", \"867\", \"873\", \"902\", \"905\" ] ], [ \"Cape Verde (Kabu Verdi)\", \"cv\", \"238\" ], [ \"Caribbean Netherlands\", \"bq\", \"599\", 1, [ \"3\", \"4\", \"7\" ] ], [ \"Cayman Islands\", \"ky\", \"1\", 12, [ \"345\" ] ], [ \"Central African Republic (R\u00E9publique centrafricaine)\", \"cf\", \"236\" ], [ \"Chad (Tchad)\", \"td\", \"235\" ], [ \"Chile\", \"cl\", \"56\" ], [ \"China (\u4E2D\u56FD)\", \"cn\", \"86\" ], [ \"Christmas Island\", \"cx\", \"61\", 2, [ \"89164\" ] ], [ \"Cocos (Keeling) Islands\", \"cc\", \"61\", 1, [ \"89162\" ] ], [ \"Colombia\", \"co\", \"57\" ], [ \"Comoros (\u202B\u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631\u202C\u200E)\", \"km\", \"269\" ], [ \"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)\", \"cd\", \"243\" ], [ \"Congo (Republic) (Congo-Brazzaville)\", \"cg\", \"242\" ], [ \"Cook Islands\", \"ck\", \"682\" ], [ \"Costa Rica\", \"cr\", \"506\" ], [ \"C\u00F4te d\u2019Ivoire\", \"ci\", \"225\" ], [ \"Croatia (Hrvatska)\", \"hr\", \"385\" ], [ \"Cuba\", \"cu\", \"53\" ], [ \"Cura\u00E7ao\", \"cw\", \"599\", 0 ], [ \"Cyprus (\u039A\u03CD\u03C0\u03C1\u03BF\u03C2)\", \"cy\", \"357\" ], [ \"Czech Republic (\u010Cesk\u00E1 republika)\", \"cz\", \"420\" ], [ \"Denmark (Danmark)\", \"dk\", \"45\" ], [ \"Djibouti\", \"dj\", \"253\" ], [ \"Dominica\", \"dm\", \"1\", 13, [ \"767\" ] ], [ \"Dominican Republic (Rep\u00FAblica Dominicana)\", \"do\", \"1\", 2, [ \"809\", \"829\", \"849\" ] ], [ \"Ecuador\", \"ec\", \"593\" ], [ \"Egypt (\u202B\u0645\u0635\u0631\u202C\u200E)\", \"eg\", \"20\" ], [ \"El Salvador\", \"sv\", \"503\" ], [ \"Equatorial Guinea (Guinea Ecuatorial)\", \"gq\", \"240\" ], [ \"Eritrea\", \"er\", \"291\" ], [ \"Estonia (Eesti)\", \"ee\", \"372\" ], [ \"Eswatini\", \"sz\", \"268\" ], [ \"Ethiopia\", \"et\", \"251\" ], [ \"Falkland Islands (Islas Malvinas)\", \"fk\", \"500\" ], [ \"Faroe Islands (F\u00F8royar)\", \"fo\", \"298\" ], [ \"Fiji\", \"fj\", \"679\" ], [ \"Finland (Suomi)\", \"fi\", \"358\", 0 ], [ \"France\", \"fr\", \"33\" ], [ \"French Guiana (Guyane fran\u00E7aise)\", \"gf\", \"594\" ], [ \"French Polynesia (Polyn\u00E9sie fran\u00E7aise)\", \"pf\", \"689\" ], [ \"Gabon\", \"ga\", \"241\" ], [ \"Gambia\", \"gm\", \"220\" ], [ \"Georgia (\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD)\", \"ge\", \"995\" ], [ \"Germany (Deutschland)\", \"de\", \"49\" ], [ \"Ghana (Gaana)\", \"gh\", \"233\" ], [ \"Gibraltar\", \"gi\", \"350\" ], [ \"Greece (\u0395\u03BB\u03BB\u03AC\u03B4\u03B1)\", \"gr\", \"30\" ], [ \"Greenland (Kalaallit Nunaat)\", \"gl\", \"299\" ], [ \"Grenada\", \"gd\", \"1\", 14, [ \"473\" ] ], [ \"Guadeloupe\", \"gp\", \"590\", 0 ], [ \"Guam\", \"gu\", \"1\", 15, [ \"671\" ] ], [ \"Guatemala\", \"gt\", \"502\" ], [ \"Guernsey\", \"gg\", \"44\", 1, [ \"1481\", \"7781\", \"7839\", \"7911\" ] ], [ \"Guinea (Guin\u00E9e)\", \"gn\", \"224\" ], [ \"Guinea-Bissau (Guin\u00E9 Bissau)\", \"gw\", \"245\" ], [ \"Guyana\", \"gy\", \"592\" ], [ \"Haiti\", \"ht\", \"509\" ], [ \"Honduras\", \"hn\", \"504\" ], [ \"Hong Kong (\u9999\u6E2F)\", \"hk\", \"852\" ], [ \"Hungary (Magyarorsz\u00E1g)\", \"hu\", \"36\" ], [ \"Iceland (\u00CDsland)\", \"is\", \"354\" ], [ \"India (\u092D\u093E\u0930\u0924)\", \"in\", \"91\" ], [ \"Indonesia\", \"id\", \"62\" ], [ \"Iran (\u202B\u0627\u06CC\u0631\u0627\u0646\u202C\u200E)\", \"ir\", \"98\" ], [ \"Iraq (\u202B\u0627\u0644\u0639\u0631\u0627\u0642\u202C\u200E)\", \"iq\", \"964\" ], [ \"Ireland\", \"ie\", \"353\" ], [ \"Isle of Man\", \"im\", \"44\", 2, [ \"1624\", \"74576\", \"7524\", \"7924\", \"7624\" ] ], [ \"Israel (\u202B\u05D9\u05E9\u05E8\u05D0\u05DC\u202C\u200E)\", \"il\", \"972\" ], [ \"Italy (Italia)\", \"it\", \"39\", 0 ], [ \"Jamaica\", \"jm\", \"1\", 4, [ \"876\", \"658\" ] ], [ \"Japan (\u65E5\u672C)\", \"jp\", \"81\" ], [ \"Jersey\", \"je\", \"44\", 3, [ \"1534\", \"7509\", \"7700\", \"7797\", \"7829\", \"7937\" ] ], [ \"Jordan (\u202B\u0627\u0644\u0623\u0631\u062F\u0646\u202C\u200E)\", \"jo\", \"962\" ], [ \"Kazakhstan (\u041A\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043D)\", \"kz\", \"7\", 1, [ \"33\", \"7\" ] ], [ \"Kenya\", \"ke\", \"254\" ], [ \"Kiribati\", \"ki\", \"686\" ], [ \"Kosovo\", \"xk\", \"383\" ], [ \"Kuwait (\u202B\u0627\u0644\u0643\u0648\u064A\u062A\u202C\u200E)\", \"kw\", \"965\" ], [ \"Kyrgyzstan (\u041A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D)\", \"kg\", \"996\" ], [ \"Laos (\u0EA5\u0EB2\u0EA7)\", \"la\", \"856\" ], [ \"Latvia (Latvija)\", \"lv\", \"371\" ], [ \"Lebanon (\u202B\u0644\u0628\u0646\u0627\u0646\u202C\u200E)\", \"lb\", \"961\" ], [ \"Lesotho\", \"ls\", \"266\" ], [ \"Liberia\", \"lr\", \"231\" ], [ \"Libya (\u202B\u0644\u064A\u0628\u064A\u0627\u202C\u200E)\", \"ly\", \"218\" ], [ \"Liechtenstein\", \"li\", \"423\" ], [ \"Lithuania (Lietuva)\", \"lt\", \"370\" ], [ \"Luxembourg\", \"lu\", \"352\" ], [ \"Macau (\u6FB3\u9580)\", \"mo\", \"853\" ], [ \"Madagascar (Madagasikara)\", \"mg\", \"261\" ], [ \"Malawi\", \"mw\", \"265\" ], [ \"Malaysia\", \"my\", \"60\" ], [ \"Maldives\", \"mv\", \"960\" ], [ \"Mali\", \"ml\", \"223\" ], [ \"Malta\", \"mt\", \"356\" ], [ \"Marshall Islands\", \"mh\", \"692\" ], [ \"Martinique\", \"mq\", \"596\" ], [ \"Mauritania (\u202B\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u202C\u200E)\", \"mr\", \"222\" ], [ \"Mauritius (Moris)\", \"mu\", \"230\" ], [ \"Mayotte\", \"yt\", \"262\", 1, [ \"269\", \"639\" ] ], [ \"Mexico (M\u00E9xico)\", \"mx\", \"52\" ], [ \"Micronesia\", \"fm\", \"691\" ], [ \"Moldova (Republica Moldova)\", \"md\", \"373\" ], [ \"Monaco\", \"mc\", \"377\" ], [ \"Mongolia (\u041C\u043E\u043D\u0433\u043E\u043B)\", \"mn\", \"976\" ], [ \"Montenegro (Crna Gora)\", \"me\", \"382\" ], [ \"Montserrat\", \"ms\", \"1\", 16, [ \"664\" ] ], [ \"Morocco (\u202B\u0627\u0644\u0645\u063A\u0631\u0628\u202C\u200E)\", \"ma\", \"212\", 0 ], [ \"Mozambique (Mo\u00E7ambique)\", \"mz\", \"258\" ], [ \"Myanmar (Burma) (\u1019\u103C\u1014\u103A\u1019\u102C)\", \"mm\", \"95\" ], [ \"Namibia (Namibi\u00EB)\", \"na\", \"264\" ], [ \"Nauru\", \"nr\", \"674\" ], [ \"Nepal (\u0928\u0947\u092A\u093E\u0932)\", \"np\", \"977\" ], [ \"Netherlands (Nederland)\", \"nl\", \"31\" ], [ \"New Caledonia (Nouvelle-Cal\u00E9donie)\", \"nc\", \"687\" ], [ \"New Zealand\", \"nz\", \"64\" ], [ \"Nicaragua\", \"ni\", \"505\" ], [ \"Niger (Nijar)\", \"ne\", \"227\" ], [ \"Nigeria\", \"ng\", \"234\" ], [ \"Niue\", \"nu\", \"683\" ], [ \"Norfolk Island\", \"nf\", \"672\" ], [ \"North Korea (\uC870\uC120 \uBBFC\uC8FC\uC8FC\uC758 \uC778\uBBFC \uACF5\uD654\uAD6D)\", \"kp\", \"850\" ], [ \"North Macedonia (\u0421\u0435\u0432\u0435\u0440\u043D\u0430 \u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430)\", \"mk\", \"389\" ], [ \"Northern Mariana Islands\", \"mp\", \"1\", 17, [ \"670\" ] ], [ \"Norway (Norge)\", \"no\", \"47\", 0 ], [ \"Oman (\u202B\u0639\u064F\u0645\u0627\u0646\u202C\u200E)\", \"om\", \"968\" ], [ \"Pakistan (\u202B\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u202C\u200E)\", \"pk\", \"92\" ], [ \"Palau\", \"pw\", \"680\" ], [ \"Palestine (\u202B\u0641\u0644\u0633\u0637\u064A\u0646\u202C\u200E)\", \"ps\", \"970\" ], [ \"Panama (Panam\u00E1)\", \"pa\", \"507\" ], [ \"Papua New Guinea\", \"pg\", \"675\" ], [ \"Paraguay\", \"py\", \"595\" ], [ \"Peru (Per\u00FA)\", \"pe\", \"51\" ], [ \"Philippines\", \"ph\", \"63\" ], [ \"Poland (Polska)\", \"pl\", \"48\" ], [ \"Portugal\", \"pt\", \"351\" ], [ \"Puerto Rico\", \"pr\", \"1\", 3, [ \"787\", \"939\" ] ], [ \"Qatar (\u202B\u0642\u0637\u0631\u202C\u200E)\", \"qa\", \"974\" ], [ \"R\u00E9union (La R\u00E9union)\", \"re\", \"262\", 0 ], [ \"Romania (Rom\u00E2nia)\", \"ro\", \"40\" ], [ \"Russia (\u0420\u043E\u0441\u0441\u0438\u044F)\", \"ru\", \"7\", 0 ], [ \"Rwanda\", \"rw\", \"250\" ], [ \"Saint Barth\u00E9lemy\", \"bl\", \"590\", 1 ], [ \"Saint Helena\", \"sh\", \"290\" ], [ \"Saint Kitts and Nevis\", \"kn\", \"1\", 18, [ \"869\" ] ], [ \"Saint Lucia\", \"lc\", \"1\", 19, [ \"758\" ] ], [ \"Saint Martin (Saint-Martin (partie fran\u00E7aise))\", \"mf\", \"590\", 2 ], [ \"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)\", \"pm\", \"508\" ], [ \"Saint Vincent and the Grenadines\", \"vc\", \"1\", 20, [ \"784\" ] ], [ \"Samoa\", \"ws\", \"685\" ], [ \"San Marino\", \"sm\", \"378\" ], [ \"S\u00E3o Tom\u00E9 and Pr\u00EDncipe (S\u00E3o Tom\u00E9 e Pr\u00EDncipe)\", \"st\", \"239\" ], [ \"Saudi Arabia (\u202B\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u202C\u200E)\", \"sa\", \"966\" ], [ \"Senegal (S\u00E9n\u00E9gal)\", \"sn\", \"221\" ], [ \"Serbia (\u0421\u0440\u0431\u0438\u0458\u0430)\", \"rs\", \"381\" ], [ \"Seychelles\", \"sc\", \"248\" ], [ \"Sierra Leone\", \"sl\", \"232\" ], [ \"Singapore\", \"sg\", \"65\" ], [ \"Sint Maarten\", \"sx\", \"1\", 21, [ \"721\" ] ], [ \"Slovakia (Slovensko)\", \"sk\", \"421\" ], [ \"Slovenia (Slovenija)\", \"si\", \"386\" ], [ \"Solomon Islands\", \"sb\", \"677\" ], [ \"Somalia (Soomaaliya)\", \"so\", \"252\" ], [ \"South Africa\", \"za\", \"27\" ], [ \"South Korea (\uB300\uD55C\uBBFC\uAD6D)\", \"kr\", \"82\" ], [ \"South Sudan (\u202B\u062C\u0646\u0648\u0628 \u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)\", \"ss\", \"211\" ], [ \"Spain (Espa\u00F1a)\", \"es\", \"34\" ], [ \"Sri Lanka (\u0DC1\u0DCA\u200D\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF\u0DC0)\", \"lk\", \"94\" ], [ \"Sudan (\u202B\u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)\", \"sd\", \"249\" ], [ \"Suriname\", \"sr\", \"597\" ], [ \"Svalbard and Jan Mayen\", \"sj\", \"47\", 1, [ \"79\" ] ], [ \"Sweden (Sverige)\", \"se\", \"46\" ], [ \"Switzerland (Schweiz)\", \"ch\", \"41\" ], [ \"Syria (\u202B\u0633\u0648\u0631\u064A\u0627\u202C\u200E)\", \"sy\", \"963\" ], [ \"Taiwan (\u53F0\u7063)\", \"tw\", \"886\" ], [ \"Tajikistan\", \"tj\", \"992\" ], [ \"Tanzania\", \"tz\", \"255\" ], [ \"Thailand (\u0E44\u0E17\u0E22)\", \"th\", \"66\" ], [ \"Timor-Leste\", \"tl\", \"670\" ], [ \"Togo\", \"tg\", \"228\" ], [ \"Tokelau\", \"tk\", \"690\" ], [ \"Tonga\", \"to\", \"676\" ], [ \"Trinidad and Tobago\", \"tt\", \"1\", 22, [ \"868\" ] ], [ \"Tunisia (\u202B\u062A\u0648\u0646\u0633\u202C\u200E)\", \"tn\", \"216\" ], [ \"Turkey (T\u00FCrkiye)\", \"tr\", \"90\" ], [ \"Turkmenistan\", \"tm\", \"993\" ], [ \"Turks and Caicos Islands\", \"tc\", \"1\", 23, [ \"649\" ] ], [ \"Tuvalu\", \"tv\", \"688\" ], [ \"U.S. Virgin Islands\", \"vi\", \"1\", 24, [ \"340\" ] ], [ \"Uganda\", \"ug\", \"256\" ], [ \"Ukraine (\u0423\u043A\u0440\u0430\u0457\u043D\u0430)\", \"ua\", \"380\" ], [ \"United Arab Emirates (\u202B\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629\u202C\u200E)\", \"ae\", \"971\" ], [ \"United Kingdom\", \"gb\", \"44\", 0 ], [ \"United States\", \"us\", \"1\", 0 ], [ \"Uruguay\", \"uy\", \"598\" ], [ \"Uzbekistan (O\u02BBzbekiston)\", \"uz\", \"998\" ], [ \"Vanuatu\", \"vu\", \"678\" ], [ \"Vatican City (Citt\u00E0 del Vaticano)\", \"va\", \"39\", 1, [ \"06698\" ] ], [ \"Venezuela\", \"ve\", \"58\" ], [ \"Vietnam (Vi\u1EC7t Nam)\", \"vn\", \"84\" ], [ \"Wallis and Futuna (Wallis-et-Futuna)\", \"wf\", \"681\" ], [ \"Western Sahara (\u202B\u0627\u0644\u0635\u062D\u0631\u0627\u0621 \u0627\u0644\u063A\u0631\u0628\u064A\u0629\u202C\u200E)\", \"eh\", \"212\", 1, [ \"5288\", \"5289\" ] ], [ \"Yemen (\u202B\u0627\u0644\u064A\u0645\u0646\u202C\u200E)\", \"ye\", \"967\" ], [ \"Zambia\", \"zm\", \"260\" ], [ \"Zimbabwe\", \"zw\", \"263\" ], [ \"\u00C5land Islands\", \"ax\", \"358\", 1, [ \"18\" ] ] ];\n // loop over all of the countries above, restructuring the data to be objects with named keys\n for (var i = 0; i < allCountries.length; i++) {\n var c = allCountries[i];\n allCountries[i] = {\n name: c[0],\n iso2: c[1],\n dialCode: c[2],\n priority: c[3] || 0,\n areaCodes: c[4] || null\n };\n }\n \"use strict\";\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? Object(arguments[i]) : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n return target;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n var intlTelInputGlobals = {\n getInstance: function getInstance(input) {\n var id = input.getAttribute(\"data-intl-tel-input-id\");\n return window.intlTelInputGlobals.instances[id];\n },\n instances: {},\n // using a global like this allows us to mock it in the tests\n documentReady: function documentReady() {\n return document.readyState === \"complete\";\n }\n };\n if (typeof window === \"object\") {\n window.intlTelInputGlobals = intlTelInputGlobals;\n }\n // these vars persist through all instances of the plugin\n var id = 0;\n var defaults = {\n // whether or not to allow the dropdown\n allowDropdown: true,\n // auto insert dial code (A) on init, (B) on user selecting a country, (C) on calling setCountry\n // also listen for blur/submit and auto remove dial code if that's all there is\n autoInsertDialCode: false,\n // add a placeholder in the input with an example number for the selected country\n autoPlaceholder: \"polite\",\n // modify the parentClass\n customContainer: \"\",\n // modify the auto placeholder\n customPlaceholder: null,\n // append menu to specified element\n dropdownContainer: null,\n // don't display these countries\n excludeCountries: [],\n // format the input value during initialisation and on setNumber\n formatOnDisplay: true,\n // geoIp lookup function\n geoIpLookup: null,\n // inject a hidden input with this name, and on submit, populate it with the result of getNumber\n hiddenInput: \"\",\n // initial country\n initialCountry: \"\",\n // localized country names e.g. { 'de': 'Deutschland' }\n localizedCountries: null,\n // national vs international formatting for numbers e.g. placeholders and displaying existing numbers\n nationalMode: true,\n // display only these countries\n onlyCountries: [],\n // number type to use for placeholders\n placeholderNumberType: \"MOBILE\",\n // the countries at the top of the list. defaults to united states and united kingdom\n preferredCountries: [ \"us\", \"gb\" ],\n // display the country dial code next to the selected flag\n separateDialCode: false,\n // option to hide the flags - must be used with separateDialCode, or allowDropdown=false\n showFlags: true,\n // specify the path to the libphonenumber script to enable validation/formatting\n utilsScript: \"\"\n };\n // https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes#Non-geographic_area_codes\n var regionlessNanpNumbers = [ \"800\", \"822\", \"833\", \"844\", \"855\", \"866\", \"877\", \"880\", \"881\", \"882\", \"883\", \"884\", \"885\", \"886\", \"887\", \"888\", \"889\" ];\n // utility function to iterate over an object. can't use Object.entries or native forEach because\n // of IE11\n var forEachProp = function forEachProp(obj, callback) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n callback(keys[i], obj[keys[i]]);\n }\n };\n // run a method on each instance of the plugin\n var forEachInstance = function forEachInstance(method) {\n forEachProp(window.intlTelInputGlobals.instances, function(key) {\n window.intlTelInputGlobals.instances[key][method]();\n });\n };\n // this is our plugin class that we will create an instance of\n // eslint-disable-next-line no-unused-vars\n var Iti = /*#__PURE__*/ function() {\n function Iti(input, options) {\n var _this = this;\n _classCallCheck(this, Iti);\n this.id = id++;\n this.telInput = input;\n this.activeItem = null;\n this.highlightedItem = null;\n // process specified options / defaults\n // alternative to Object.assign, which isn't supported by IE11\n var customOptions = options || {};\n this.options = {};\n forEachProp(defaults, function(key, value) {\n _this.options[key] = customOptions.hasOwnProperty(key) ? customOptions[key] : value;\n });\n this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n }\n _createClass(Iti, [ {\n key: \"_init\",\n value: function _init() {\n var _this2 = this;\n // if in nationalMode, do not insert dial codes\n if (this.options.nationalMode) {\n this.options.autoInsertDialCode = false;\n }\n // if separateDialCode enabled, do not insert dial codes\n if (this.options.separateDialCode) {\n this.options.autoInsertDialCode = false;\n }\n // force showFlags=true if there's a dropdown and we're not displaying the dial code,\n // as otherwise you just have a down arrow on it's own which doesn't make sense\n var forceShowFlags = this.options.allowDropdown && !this.options.separateDialCode;\n if (!this.options.showFlags && forceShowFlags) {\n this.options.showFlags = true;\n }\n // we cannot just test screen size as some smartphones/website meta tags will report desktop\n // resolutions\n // Note: for some reason jasmine breaks if you put this in the main Plugin function with the\n // rest of these declarations\n // Note: to target Android Mobiles (and not Tablets), we must find 'Android' and 'Mobile'\n this.isMobile = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n if (this.isMobile) {\n // trigger the mobile dropdown css\n document.body.classList.add(\"iti-mobile\");\n // on mobile, we want a full screen dropdown, so we must append it to the body\n if (!this.options.dropdownContainer) {\n this.options.dropdownContainer = document.body;\n }\n }\n // these promises get resolved when their individual requests complete\n // this way the dev can do something like iti.promise.then(...) to know when all requests are\n // complete\n if (typeof Promise !== \"undefined\") {\n var autoCountryPromise = new Promise(function(resolve, reject) {\n _this2.resolveAutoCountryPromise = resolve;\n _this2.rejectAutoCountryPromise = reject;\n });\n var utilsScriptPromise = new Promise(function(resolve, reject) {\n _this2.resolveUtilsScriptPromise = resolve;\n _this2.rejectUtilsScriptPromise = reject;\n });\n this.promise = Promise.all([ autoCountryPromise, utilsScriptPromise ]);\n } else {\n // prevent errors when Promise doesn't exist\n this.resolveAutoCountryPromise = this.rejectAutoCountryPromise = function() {};\n this.resolveUtilsScriptPromise = this.rejectUtilsScriptPromise = function() {};\n }\n // in various situations there could be no country selected initially, but we need to be able\n // to assume this variable exists\n this.selectedCountryData = {};\n // process all the data: onlyCountries, excludeCountries, preferredCountries etc\n this._processCountryData();\n // generate the markup\n this._generateMarkup();\n // set the initial state of the input value and the selected flag\n this._setInitialState();\n // start all of the event listeners: autoInsertDialCode, input keydown, selectedFlag click\n this._initListeners();\n // utils script, and auto country\n this._initRequests();\n }\n }, {\n key: \"_processCountryData\",\n value: function _processCountryData() {\n // process onlyCountries or excludeCountries array if present\n this._processAllCountries();\n // process the countryCodes map\n this._processCountryCodes();\n // process the preferredCountries\n this._processPreferredCountries();\n // translate countries according to localizedCountries option\n if (this.options.localizedCountries) {\n this._translateCountriesByLocale();\n }\n // sort countries by name\n if (this.options.onlyCountries.length || this.options.localizedCountries) {\n this.countries.sort(this._countryNameSort);\n }\n }\n }, {\n key: \"_addCountryCode\",\n value: function _addCountryCode(iso2, countryCode, priority) {\n if (countryCode.length > this.countryCodeMaxLen) {\n this.countryCodeMaxLen = countryCode.length;\n }\n if (!this.countryCodes.hasOwnProperty(countryCode)) {\n this.countryCodes[countryCode] = [];\n }\n // bail if we already have this country for this countryCode\n for (var i = 0; i < this.countryCodes[countryCode].length; i++) {\n if (this.countryCodes[countryCode][i] === iso2) {\n return;\n }\n }\n // check for undefined as 0 is falsy\n var index = priority !== undefined ? priority : this.countryCodes[countryCode].length;\n this.countryCodes[countryCode][index] = iso2;\n }\n }, {\n key: \"_processAllCountries\",\n value: function _processAllCountries() {\n if (this.options.onlyCountries.length) {\n var lowerCaseOnlyCountries = this.options.onlyCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseOnlyCountries.indexOf(country.iso2) > -1;\n });\n } else if (this.options.excludeCountries.length) {\n var lowerCaseExcludeCountries = this.options.excludeCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseExcludeCountries.indexOf(country.iso2) === -1;\n });\n } else {\n this.countries = allCountries;\n }\n }\n }, {\n key: \"_translateCountriesByLocale\",\n value: function _translateCountriesByLocale() {\n for (var i = 0; i < this.countries.length; i++) {\n var iso = this.countries[i].iso2.toLowerCase();\n if (this.options.localizedCountries.hasOwnProperty(iso)) {\n this.countries[i].name = this.options.localizedCountries[iso];\n }\n }\n }\n }, {\n key: \"_countryNameSort\",\n value: function _countryNameSort(a, b) {\n if (a.name < b.name) {\n return -1;\n }\n if (a.name > b.name) {\n return 1;\n }\n return 0;\n }\n }, {\n key: \"_processCountryCodes\",\n value: function _processCountryCodes() {\n this.countryCodeMaxLen = 0;\n // here we store just dial codes\n this.dialCodes = {};\n // here we store \"country codes\" (both dial codes and their area codes)\n this.countryCodes = {};\n // first: add dial codes\n for (var i = 0; i < this.countries.length; i++) {\n var c = this.countries[i];\n if (!this.dialCodes[c.dialCode]) {\n this.dialCodes[c.dialCode] = true;\n }\n this._addCountryCode(c.iso2, c.dialCode, c.priority);\n }\n // next: add area codes\n // this is a second loop over countries, to make sure we have all of the \"root\" countries\n // already in the map, so that we can access them, as each time we add an area code substring\n // to the map, we also need to include the \"root\" country's code, as that also matches\n for (var _i = 0; _i < this.countries.length; _i++) {\n var _c = this.countries[_i];\n // area codes\n if (_c.areaCodes) {\n var rootCountryCode = this.countryCodes[_c.dialCode][0];\n // for each area code\n for (var j = 0; j < _c.areaCodes.length; j++) {\n var areaCode = _c.areaCodes[j];\n // for each digit in the area code to add all partial matches as well\n for (var k = 1; k < areaCode.length; k++) {\n var partialDialCode = _c.dialCode + areaCode.substr(0, k);\n // start with the root country, as that also matches this dial code\n this._addCountryCode(rootCountryCode, partialDialCode);\n this._addCountryCode(_c.iso2, partialDialCode);\n }\n // add the full area code\n this._addCountryCode(_c.iso2, _c.dialCode + areaCode);\n }\n }\n }\n }\n }, {\n key: \"_processPreferredCountries\",\n value: function _processPreferredCountries() {\n this.preferredCountries = [];\n for (var i = 0; i < this.options.preferredCountries.length; i++) {\n var countryCode = this.options.preferredCountries[i].toLowerCase();\n var countryData = this._getCountryData(countryCode, false, true);\n if (countryData) {\n this.preferredCountries.push(countryData);\n }\n }\n }\n }, {\n key: \"_createEl\",\n value: function _createEl(name, attrs, container) {\n var el = document.createElement(name);\n if (attrs) {\n forEachProp(attrs, function(key, value) {\n return el.setAttribute(key, value);\n });\n }\n if (container) {\n container.appendChild(el);\n }\n return el;\n }\n }, {\n key: \"_generateMarkup\",\n value: function _generateMarkup() {\n // if autocomplete does not exist on the element and its form, then\n // prevent autocomplete as there's no safe, cross-browser event we can react to, so it can\n // easily put the plugin in an inconsistent state e.g. the wrong flag selected for the\n // autocompleted number, which on submit could mean wrong number is saved\n if (!this.telInput.hasAttribute(\"autocomplete\") && !(this.telInput.form && this.telInput.form.hasAttribute(\"autocomplete\"))) {\n this.telInput.setAttribute(\"autocomplete\", \"off\");\n }\n var _this$options = this.options, allowDropdown = _this$options.allowDropdown, separateDialCode = _this$options.separateDialCode, showFlags = _this$options.showFlags, customContainer = _this$options.customContainer, hiddenInput = _this$options.hiddenInput, dropdownContainer = _this$options.dropdownContainer;\n // containers (mostly for positioning)\n var parentClass = \"iti\";\n if (allowDropdown) {\n parentClass += \" iti--allow-dropdown\";\n }\n if (separateDialCode) {\n parentClass += \" iti--separate-dial-code\";\n }\n if (showFlags) {\n parentClass += \" iti--show-flags\";\n }\n if (customContainer) {\n parentClass += \" \".concat(customContainer);\n }\n var wrapper = this._createEl(\"div\", {\n \"class\": parentClass\n });\n this.telInput.parentNode.insertBefore(wrapper, this.telInput);\n // only hide the flagsContainer if allowDropdown, showFlags and separateDialCode are all false\n var showFlagsContainer = allowDropdown || showFlags || separateDialCode;\n if (showFlagsContainer) {\n this.flagsContainer = this._createEl(\"div\", {\n \"class\": \"iti__flag-container\"\n }, wrapper);\n }\n wrapper.appendChild(this.telInput);\n // selected flag (displayed to left of input)\n // using Aria tags for \"Select-Only Combobox Example\"\n // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n if (showFlagsContainer) {\n this.selectedFlag = this._createEl(\"div\", _objectSpread({\n \"class\": \"iti__selected-flag\"\n }, allowDropdown && {\n role: \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": \"iti-\".concat(this.id, \"__country-listbox\"),\n \"aria-expanded\": \"false\",\n \"aria-label\": \"Telephone country code\"\n }), this.flagsContainer);\n }\n if (showFlags) {\n this.selectedFlagInner = this._createEl(\"div\", {\n \"class\": \"iti__flag\"\n }, this.selectedFlag);\n }\n if (this.selectedFlag && this.telInput.disabled) {\n this.selectedFlag.setAttribute(\"aria-disabled\", \"true\");\n }\n if (separateDialCode) {\n this.selectedDialCode = this._createEl(\"div\", {\n \"class\": \"iti__selected-dial-code\"\n }, this.selectedFlag);\n }\n if (allowDropdown) {\n if (!this.telInput.disabled) {\n // make element focusable and tab navigable\n this.selectedFlag.setAttribute(\"tabindex\", \"0\");\n }\n this.dropdownArrow = this._createEl(\"div\", {\n \"class\": \"iti__arrow\"\n }, this.selectedFlag);\n // country dropdown: preferred countries, then divider, then all countries\n this.countryList = this._createEl(\"ul\", {\n \"class\": \"iti__country-list iti__hide\",\n id: \"iti-\".concat(this.id, \"__country-listbox\"),\n role: \"listbox\",\n \"aria-label\": \"List of countries\"\n });\n if (this.preferredCountries.length) {\n this._appendListItems(this.preferredCountries, \"iti__preferred\", true);\n this._createEl(\"li\", {\n \"class\": \"iti__divider\",\n role: \"separator\",\n \"aria-disabled\": \"true\"\n }, this.countryList);\n }\n this._appendListItems(this.countries, \"iti__standard\");\n // create dropdownContainer markup\n if (dropdownContainer) {\n this.dropdown = this._createEl(\"div\", {\n \"class\": \"iti iti--container\"\n });\n this.dropdown.appendChild(this.countryList);\n } else {\n this.flagsContainer.appendChild(this.countryList);\n }\n }\n if (hiddenInput) {\n var hiddenInputName = hiddenInput;\n var name = this.telInput.getAttribute(\"name\");\n if (name) {\n var i = name.lastIndexOf(\"[\");\n // if input name contains square brackets, then give the hidden input the same name,\n // replacing the contents of the last set of brackets with the given hiddenInput name\n if (i !== -1) {\n hiddenInputName = \"\".concat(name.substr(0, i), \"[\").concat(hiddenInputName, \"]\");\n }\n }\n this.hiddenInput = this._createEl(\"input\", {\n type: \"hidden\",\n name: hiddenInputName\n });\n wrapper.appendChild(this.hiddenInput);\n }\n }\n }, {\n key: \"_appendListItems\",\n value: function _appendListItems(countries, className, preferred) {\n // we create so many DOM elements, it is faster to build a temp string\n // and then add everything to the DOM in one go at the end\n var tmp = \"\";\n // for each country\n for (var i = 0; i < countries.length; i++) {\n var c = countries[i];\n var idSuffix = preferred ? \"-preferred\" : \"\";\n // open the list item\n tmp += \"<li class='iti__country \".concat(className, \"' tabIndex='-1' id='iti-\").concat(this.id, \"__item-\").concat(c.iso2).concat(idSuffix, \"' role='option' data-dial-code='\").concat(c.dialCode, \"' data-country-code='\").concat(c.iso2, \"' aria-selected='false'>\");\n // add the flag\n if (this.options.showFlags) {\n tmp += \"<div class='iti__flag-box'><div class='iti__flag iti__\".concat(c.iso2, \"'></div></div>\");\n }\n // and the country name and dial code\n tmp += \"<span class='iti__country-name'>\".concat(c.name, \"</span>\");\n tmp += \"<span class='iti__dial-code'>+\".concat(c.dialCode, \"</span>\");\n // close the list item\n tmp += \"</li>\";\n }\n this.countryList.insertAdjacentHTML(\"beforeend\", tmp);\n }\n }, {\n key: \"_setInitialState\",\n value: function _setInitialState() {\n // fix firefox bug: when first load page (with input with value set to number with intl dial\n // code) and initialising plugin removes the dial code from the input, then refresh page,\n // and we try to init plugin again but this time on number without dial code so get grey flag\n var attributeValue = this.telInput.getAttribute(\"value\");\n var inputValue = this.telInput.value;\n var useAttribute = attributeValue && attributeValue.charAt(0) === \"+\" && (!inputValue || inputValue.charAt(0) !== \"+\");\n var val = useAttribute ? attributeValue : inputValue;\n var dialCode = this._getDialCode(val);\n var isRegionlessNanp = this._isRegionlessNanp(val);\n var _this$options2 = this.options, initialCountry = _this$options2.initialCountry, autoInsertDialCode = _this$options2.autoInsertDialCode;\n // if we already have a dial code, and it's not a regionlessNanp, we can go ahead and set the\n // flag, else fall back to the default country\n if (dialCode && !isRegionlessNanp) {\n this._updateFlagFromNumber(val);\n } else if (initialCountry !== \"auto\") {\n // see if we should select a flag\n if (initialCountry) {\n this._setFlag(initialCountry.toLowerCase());\n } else {\n if (dialCode && isRegionlessNanp) {\n // has intl dial code, is regionless nanp, and no initialCountry, so default to US\n this._setFlag(\"us\");\n } else {\n // no dial code and no initialCountry, so default to first in list\n this.defaultCountry = this.preferredCountries.length ? this.preferredCountries[0].iso2 : this.countries[0].iso2;\n if (!val) {\n this._setFlag(this.defaultCountry);\n }\n }\n }\n // if empty and autoInsertDialCode then insert the dial code\n if (!val && autoInsertDialCode) {\n this.telInput.value = \"+\".concat(this.selectedCountryData.dialCode);\n }\n }\n // NOTE: if initialCountry is set to auto, that will be handled separately\n // format - note this wont be run after _updateDialCode as that's only called if no val\n if (val) {\n this._updateValFromNumber(val);\n }\n }\n }, {\n key: \"_initListeners\",\n value: function _initListeners() {\n this._initKeyListeners();\n if (this.options.autoInsertDialCode) {\n this._initBlurListeners();\n }\n if (this.options.allowDropdown) {\n this._initDropdownListeners();\n }\n if (this.hiddenInput) {\n this._initHiddenInputListener();\n }\n }\n }, {\n key: \"_initHiddenInputListener\",\n value: function _initHiddenInputListener() {\n var _this3 = this;\n this._handleHiddenInputSubmit = function() {\n _this3.hiddenInput.value = _this3.getNumber();\n };\n if (this.telInput.form) {\n this.telInput.form.addEventListener(\"submit\", this._handleHiddenInputSubmit);\n }\n }\n }, {\n key: \"_getClosestLabel\",\n value: function _getClosestLabel() {\n var el = this.telInput;\n while (el && el.tagName !== \"LABEL\") {\n el = el.parentNode;\n }\n return el;\n }\n }, {\n key: \"_initDropdownListeners\",\n value: function _initDropdownListeners() {\n var _this4 = this;\n // hack for input nested inside label (which is valid markup): clicking the selected-flag to\n // open the dropdown would then automatically trigger a 2nd click on the input which would\n // close it again\n this._handleLabelClick = function(e) {\n // if the dropdown is closed, then focus the input, else ignore the click\n if (_this4.countryList.classList.contains(\"iti__hide\")) {\n _this4.telInput.focus();\n } else {\n e.preventDefault();\n }\n };\n var label = this._getClosestLabel();\n if (label) {\n label.addEventListener(\"click\", this._handleLabelClick);\n }\n // toggle country dropdown on click\n this._handleClickSelectedFlag = function() {\n // only intercept this event if we're opening the dropdown\n // else let it bubble up to the top (\"click-off-to-close\" listener)\n // we cannot just stopPropagation as it may be needed to close another instance\n if (_this4.countryList.classList.contains(\"iti__hide\") && !_this4.telInput.disabled && !_this4.telInput.readOnly) {\n _this4._showDropdown();\n }\n };\n this.selectedFlag.addEventListener(\"click\", this._handleClickSelectedFlag);\n // open dropdown list if currently focused\n this._handleFlagsContainerKeydown = function(e) {\n var isDropdownHidden = _this4.countryList.classList.contains(\"iti__hide\");\n if (isDropdownHidden && [ \"ArrowUp\", \"Up\", \"ArrowDown\", \"Down\", \" \", \"Enter\" ].indexOf(e.key) !== -1) {\n // prevent form from being submitted if \"ENTER\" was pressed\n e.preventDefault();\n // prevent event from being handled again by document\n e.stopPropagation();\n _this4._showDropdown();\n }\n // allow navigation from dropdown to input on TAB\n if (e.key === \"Tab\") {\n _this4._closeDropdown();\n }\n };\n this.flagsContainer.addEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n }\n }, {\n key: \"_initRequests\",\n value: function _initRequests() {\n var _this5 = this;\n // if the user has specified the path to the utils script, fetch it on window.load, else resolve\n if (this.options.utilsScript && !window.intlTelInputUtils) {\n // if the plugin is being initialised after the window.load event has already been fired\n if (window.intlTelInputGlobals.documentReady()) {\n window.intlTelInputGlobals.loadUtils(this.options.utilsScript);\n } else {\n // wait until the load event so we don't block any other requests e.g. the flags image\n window.addEventListener(\"load\", function() {\n window.intlTelInputGlobals.loadUtils(_this5.options.utilsScript);\n });\n }\n } else {\n this.resolveUtilsScriptPromise();\n }\n if (this.options.initialCountry === \"auto\") {\n this._loadAutoCountry();\n } else {\n this.resolveAutoCountryPromise();\n }\n }\n }, {\n key: \"_loadAutoCountry\",\n value: function _loadAutoCountry() {\n // 3 options:\n // 1) already loaded (we're done)\n // 2) not already started loading (start)\n // 3) already started loading (do nothing - just wait for loading callback to fire)\n if (window.intlTelInputGlobals.autoCountry) {\n this.handleAutoCountry();\n } else if (!window.intlTelInputGlobals.startedLoadingAutoCountry) {\n // don't do this twice!\n window.intlTelInputGlobals.startedLoadingAutoCountry = true;\n if (typeof this.options.geoIpLookup === \"function\") {\n this.options.geoIpLookup(function(countryCode) {\n window.intlTelInputGlobals.autoCountry = countryCode.toLowerCase();\n // tell all instances the auto country is ready\n // TODO: this should just be the current instances\n // UPDATE: use setTimeout in case their geoIpLookup function calls this callback straight\n // away (e.g. if they have already done the geo ip lookup somewhere else). Using\n // setTimeout means that the current thread of execution will finish before executing\n // this, which allows the plugin to finish initialising.\n setTimeout(function() {\n return forEachInstance(\"handleAutoCountry\");\n });\n }, function() {\n return forEachInstance(\"rejectAutoCountryPromise\");\n });\n }\n }\n }\n }, {\n key: \"_initKeyListeners\",\n value: function _initKeyListeners() {\n var _this6 = this;\n // update flag on keyup\n this._handleKeyupEvent = function() {\n if (_this6._updateFlagFromNumber(_this6.telInput.value)) {\n _this6._triggerCountryChange();\n }\n };\n this.telInput.addEventListener(\"keyup\", this._handleKeyupEvent);\n // update flag on cut/paste events (now supported in all major browsers)\n this._handleClipboardEvent = function() {\n // hack because \"paste\" event is fired before input is updated\n setTimeout(_this6._handleKeyupEvent);\n };\n this.telInput.addEventListener(\"cut\", this._handleClipboardEvent);\n this.telInput.addEventListener(\"paste\", this._handleClipboardEvent);\n }\n }, {\n key: \"_cap\",\n value: function _cap(number) {\n var max = this.telInput.getAttribute(\"maxlength\");\n return max && number.length > max ? number.substr(0, max) : number;\n }\n }, {\n key: \"_initBlurListeners\",\n value: function _initBlurListeners() {\n var _this7 = this;\n // on blur or form submit: if just a dial code then remove it\n this._handleSubmitOrBlurEvent = function() {\n _this7._removeEmptyDialCode();\n };\n if (this.telInput.form) {\n this.telInput.form.addEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n }\n this.telInput.addEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n }\n }, {\n key: \"_removeEmptyDialCode\",\n value: function _removeEmptyDialCode() {\n if (this.telInput.value.charAt(0) === \"+\") {\n var numeric = this._getNumeric(this.telInput.value);\n // if just a plus, or if just a dial code\n if (!numeric || this.selectedCountryData.dialCode === numeric) {\n this.telInput.value = \"\";\n }\n }\n }\n }, {\n key: \"_getNumeric\",\n value: function _getNumeric(s) {\n return s.replace(/\\D/g, \"\");\n }\n }, {\n key: \"_trigger\",\n value: function _trigger(name) {\n // have to use old school document.createEvent as IE11 doesn't support `new Event()` syntax\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n // can bubble, and is cancellable\n this.telInput.dispatchEvent(e);\n }\n }, {\n key: \"_showDropdown\",\n value: function _showDropdown() {\n this.countryList.classList.remove(\"iti__hide\");\n this.selectedFlag.setAttribute(\"aria-expanded\", \"true\");\n this._setDropdownPosition();\n // update highlighting and scroll to active list item\n if (this.activeItem) {\n this._highlightListItem(this.activeItem, false);\n this._scrollTo(this.activeItem, true);\n }\n // bind all the dropdown-related listeners: mouseover, click, click-off, keydown\n this._bindDropdownListeners();\n // update the arrow\n this.dropdownArrow.classList.add(\"iti__arrow--up\");\n this._trigger(\"open:countrydropdown\");\n }\n }, {\n key: \"_toggleClass\",\n value: function _toggleClass(el, className, shouldHaveClass) {\n if (shouldHaveClass && !el.classList.contains(className)) {\n el.classList.add(className);\n } else if (!shouldHaveClass && el.classList.contains(className)) {\n el.classList.remove(className);\n }\n }\n }, {\n key: \"_setDropdownPosition\",\n value: function _setDropdownPosition() {\n var _this8 = this;\n if (this.options.dropdownContainer) {\n this.options.dropdownContainer.appendChild(this.dropdown);\n }\n if (!this.isMobile) {\n var pos = this.telInput.getBoundingClientRect();\n // windowTop from https://stackoverflow.com/a/14384091/217866\n var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n var inputTop = pos.top + windowTop;\n var dropdownHeight = this.countryList.offsetHeight;\n // dropdownFitsBelow = (dropdownBottom < windowBottom)\n var dropdownFitsBelow = inputTop + this.telInput.offsetHeight + dropdownHeight < windowTop + window.innerHeight;\n var dropdownFitsAbove = inputTop - dropdownHeight > windowTop;\n // by default, the dropdown will be below the input. If we want to position it above the\n // input, we add the dropup class.\n this._toggleClass(this.countryList, \"iti__country-list--dropup\", !dropdownFitsBelow && dropdownFitsAbove);\n // if dropdownContainer is enabled, calculate postion\n if (this.options.dropdownContainer) {\n // by default the dropdown will be directly over the input because it's not in the flow.\n // If we want to position it below, we need to add some extra top value.\n var extraTop = !dropdownFitsBelow && dropdownFitsAbove ? 0 : this.telInput.offsetHeight;\n // calculate placement\n this.dropdown.style.top = \"\".concat(inputTop + extraTop, \"px\");\n this.dropdown.style.left = \"\".concat(pos.left + document.body.scrollLeft, \"px\");\n // close menu on window scroll\n this._handleWindowScroll = function() {\n return _this8._closeDropdown();\n };\n window.addEventListener(\"scroll\", this._handleWindowScroll);\n }\n }\n }\n }, {\n key: \"_getClosestListItem\",\n value: function _getClosestListItem(target) {\n var el = target;\n while (el && el !== this.countryList && !el.classList.contains(\"iti__country\")) {\n el = el.parentNode;\n }\n // if we reached the countryList element, then return null\n return el === this.countryList ? null : el;\n }\n }, {\n key: \"_bindDropdownListeners\",\n value: function _bindDropdownListeners() {\n var _this9 = this;\n // when mouse over a list item, just highlight that one\n // we add the class \"highlight\", so if they hit \"enter\" we know which one to select\n this._handleMouseoverCountryList = function(e) {\n // handle event delegation, as we're listening for this event on the countryList\n var listItem = _this9._getClosestListItem(e.target);\n if (listItem) {\n _this9._highlightListItem(listItem, false);\n }\n };\n this.countryList.addEventListener(\"mouseover\", this._handleMouseoverCountryList);\n // listen for country selection\n this._handleClickCountryList = function(e) {\n var listItem = _this9._getClosestListItem(e.target);\n if (listItem) {\n _this9._selectListItem(listItem);\n }\n };\n this.countryList.addEventListener(\"click\", this._handleClickCountryList);\n // click off to close\n // (except when this initial opening click is bubbling up)\n // we cannot just stopPropagation as it may be needed to close another instance\n var isOpening = true;\n this._handleClickOffToClose = function() {\n if (!isOpening) {\n _this9._closeDropdown();\n }\n isOpening = false;\n };\n document.documentElement.addEventListener(\"click\", this._handleClickOffToClose);\n // listen for up/down scrolling, enter to select, or letters to jump to country name.\n // use keydown as keypress doesn't fire for non-char keys and we want to catch if they\n // just hit down and hold it to scroll down (no keyup event).\n // listen on the document because that's where key events are triggered if no input has focus\n var query = \"\";\n var queryTimer = null;\n this._handleKeydownOnDropdown = function(e) {\n // prevent down key from scrolling the whole page,\n // and enter key from submitting a form etc\n e.preventDefault();\n // up and down to navigate\n if (e.key === \"ArrowUp\" || e.key === \"Up\" || e.key === \"ArrowDown\" || e.key === \"Down\") {\n _this9._handleUpDownKey(e.key);\n } else if (e.key === \"Enter\") {\n _this9._handleEnterKey();\n } else if (e.key === \"Escape\") {\n _this9._closeDropdown();\n } else if (/^[a-zA-Z\u00C0-\u00FF\u0430-\u044F\u0410-\u042F ]$/.test(e.key)) {\n // jump to countries that start with the query string\n if (queryTimer) {\n clearTimeout(queryTimer);\n }\n query += e.key.toLowerCase();\n _this9._searchForCountry(query);\n // if the timer hits 1 second, reset the query\n queryTimer = setTimeout(function() {\n query = \"\";\n }, 1e3);\n }\n };\n document.addEventListener(\"keydown\", this._handleKeydownOnDropdown);\n }\n }, {\n key: \"_handleUpDownKey\",\n value: function _handleUpDownKey(key) {\n var next = key === \"ArrowUp\" || key === \"Up\" ? this.highlightedItem.previousElementSibling : this.highlightedItem.nextElementSibling;\n if (next) {\n // skip the divider\n if (next.classList.contains(\"iti__divider\")) {\n next = key === \"ArrowUp\" || key === \"Up\" ? next.previousElementSibling : next.nextElementSibling;\n }\n this._highlightListItem(next, true);\n }\n }\n }, {\n key: \"_handleEnterKey\",\n value: function _handleEnterKey() {\n if (this.highlightedItem) {\n this._selectListItem(this.highlightedItem);\n }\n }\n }, {\n key: \"_searchForCountry\",\n value: function _searchForCountry(query) {\n for (var i = 0; i < this.countries.length; i++) {\n if (this._startsWith(this.countries[i].name, query)) {\n var listItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(this.countries[i].iso2));\n // update highlighting and scroll\n this._highlightListItem(listItem, false);\n this._scrollTo(listItem, true);\n break;\n }\n }\n }\n }, {\n key: \"_startsWith\",\n value: function _startsWith(a, b) {\n return a.substr(0, b.length).toLowerCase() === b;\n }\n }, {\n key: \"_updateValFromNumber\",\n value: function _updateValFromNumber(originalNumber) {\n var number = originalNumber;\n if (this.options.formatOnDisplay && window.intlTelInputUtils && this.selectedCountryData) {\n var useNational = this.options.nationalMode || number.charAt(0) !== \"+\" && !this.options.separateDialCode;\n var _intlTelInputUtils$nu = intlTelInputUtils.numberFormat, NATIONAL = _intlTelInputUtils$nu.NATIONAL, INTERNATIONAL = _intlTelInputUtils$nu.INTERNATIONAL;\n var format = useNational ? NATIONAL : INTERNATIONAL;\n number = intlTelInputUtils.formatNumber(number, this.selectedCountryData.iso2, format);\n }\n number = this._beforeSetNumber(number);\n this.telInput.value = number;\n }\n }, {\n key: \"_updateFlagFromNumber\",\n value: function _updateFlagFromNumber(originalNumber) {\n // if we already have US/Canada selected, make sure the number starts\n // with a +1 so _getDialCode will be able to extract the area code\n // update: if we dont yet have selectedCountryData, but we're here (trying to update the flag\n // from the number), that means we're initialising the plugin with a number that already has a\n // dial code, so fine to ignore this bit\n var number = originalNumber;\n var selectedDialCode = this.selectedCountryData.dialCode;\n var isNanp = selectedDialCode === \"1\";\n if (number && isNanp && number.charAt(0) !== \"+\") {\n if (number.charAt(0) !== \"1\") {\n number = \"1\".concat(number);\n }\n number = \"+\".concat(number);\n }\n // if separateDialCode enabled, then consider the selected dial code to be part of the number\n if (this.options.separateDialCode && selectedDialCode && number.charAt(0) !== \"+\") {\n number = \"+\".concat(selectedDialCode).concat(number);\n }\n // try and extract valid dial code from input\n var dialCode = this._getDialCode(number, true);\n var numeric = this._getNumeric(number);\n var countryCode = null;\n if (dialCode) {\n var countryCodes = this.countryCodes[this._getNumeric(dialCode)];\n // check if the right country is already selected. this should be false if the number is\n // longer than the matched dial code because in this case we need to make sure that if\n // there are multiple country matches, that the first one is selected (note: we could\n // just check that here, but it requires the same loop that we already have later)\n var alreadySelected = countryCodes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n var isRegionlessNanpNumber = selectedDialCode === \"1\" && this._isRegionlessNanp(numeric);\n // only update the flag if:\n // A) NOT (we currently have a NANP flag selected, and the number is a regionlessNanp)\n // AND\n // B) the right country is not already selected\n if (!isRegionlessNanpNumber && !alreadySelected) {\n // if using onlyCountries option, countryCodes[0] may be empty, so we must find the first\n // non-empty index\n for (var j = 0; j < countryCodes.length; j++) {\n if (countryCodes[j]) {\n countryCode = countryCodes[j];\n break;\n }\n }\n }\n } else if (number.charAt(0) === \"+\" && numeric.length) {\n // invalid dial code, so empty\n // Note: use getNumeric here because the number has not been formatted yet, so could contain\n // bad chars\n countryCode = \"\";\n } else if (!number || number === \"+\") {\n // empty, or just a plus, so default\n countryCode = this.defaultCountry;\n }\n if (countryCode !== null) {\n return this._setFlag(countryCode);\n }\n return false;\n }\n }, {\n key: \"_isRegionlessNanp\",\n value: function _isRegionlessNanp(number) {\n var numeric = this._getNumeric(number);\n if (numeric.charAt(0) === \"1\") {\n var areaCode = numeric.substr(1, 3);\n return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n }\n return false;\n }\n }, {\n key: \"_highlightListItem\",\n value: function _highlightListItem(listItem, shouldFocus) {\n var prevItem = this.highlightedItem;\n if (prevItem) {\n prevItem.classList.remove(\"iti__highlight\");\n }\n this.highlightedItem = listItem;\n this.highlightedItem.classList.add(\"iti__highlight\");\n this.selectedFlag.setAttribute(\"aria-activedescendant\", listItem.getAttribute(\"id\"));\n if (shouldFocus) {\n this.highlightedItem.focus();\n }\n }\n }, {\n key: \"_getCountryData\",\n value: function _getCountryData(countryCode, ignoreOnlyCountriesOption, allowFail) {\n var countryList = ignoreOnlyCountriesOption ? allCountries : this.countries;\n for (var i = 0; i < countryList.length; i++) {\n if (countryList[i].iso2 === countryCode) {\n return countryList[i];\n }\n }\n if (allowFail) {\n return null;\n }\n throw new Error(\"No country data for '\".concat(countryCode, \"'\"));\n }\n }, {\n key: \"_setFlag\",\n value: function _setFlag(countryCode) {\n var _this$options3 = this.options, allowDropdown = _this$options3.allowDropdown, separateDialCode = _this$options3.separateDialCode, showFlags = _this$options3.showFlags;\n var prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n // do this first as it will throw an error and stop if countryCode is invalid\n this.selectedCountryData = countryCode ? this._getCountryData(countryCode, false, false) : {};\n // update the defaultCountry - we only need the iso2 from now on, so just store that\n if (this.selectedCountryData.iso2) {\n this.defaultCountry = this.selectedCountryData.iso2;\n }\n if (showFlags) {\n this.selectedFlagInner.setAttribute(\"class\", \"iti__flag iti__\".concat(countryCode));\n }\n this._setSelectedCountryFlagTitleAttribute(countryCode, separateDialCode);\n if (separateDialCode) {\n var dialCode = this.selectedCountryData.dialCode ? \"+\".concat(this.selectedCountryData.dialCode) : \"\";\n this.selectedDialCode.innerHTML = dialCode;\n // offsetWidth is zero if input is in a hidden container during initialisation\n var selectedFlagWidth = this.selectedFlag.offsetWidth || this._getHiddenSelectedFlagWidth();\n // add 6px of padding after the grey selected-dial-code box, as this is what we use in the css\n this.telInput.style.paddingLeft = \"\".concat(selectedFlagWidth + 6, \"px\");\n }\n // and the input's placeholder\n this._updatePlaceholder();\n // update the active list item\n if (allowDropdown) {\n var prevItem = this.activeItem;\n if (prevItem) {\n prevItem.classList.remove(\"iti__active\");\n prevItem.setAttribute(\"aria-selected\", \"false\");\n }\n if (countryCode) {\n // check if there is a preferred item first, else fall back to standard\n var nextItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode, \"-preferred\")) || this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode));\n nextItem.setAttribute(\"aria-selected\", \"true\");\n nextItem.classList.add(\"iti__active\");\n this.activeItem = nextItem;\n }\n }\n // return if the flag has changed or not\n return prevCountry.iso2 !== countryCode;\n }\n }, {\n key: \"_setSelectedCountryFlagTitleAttribute\",\n value: function _setSelectedCountryFlagTitleAttribute(countryCode, separateDialCode) {\n if (!this.selectedFlag) {\n return;\n }\n var title;\n if (countryCode && !separateDialCode) {\n title = \"\".concat(this.selectedCountryData.name, \": +\").concat(this.selectedCountryData.dialCode);\n } else if (countryCode) {\n // For screen reader output, we don't want to include the dial code in the reader output twice\n // so just use the selected country name here:\n title = this.selectedCountryData.name;\n } else {\n title = \"Unknown\";\n }\n this.selectedFlag.setAttribute(\"title\", title);\n }\n }, {\n key: \"_getHiddenSelectedFlagWidth\",\n value: function _getHiddenSelectedFlagWidth() {\n // to get the right styling to apply, all we need is a shallow clone of the container,\n // and then to inject a deep clone of the selectedFlag element\n var containerClone = this.telInput.parentNode.cloneNode();\n containerClone.style.visibility = \"hidden\";\n document.body.appendChild(containerClone);\n var flagsContainerClone = this.flagsContainer.cloneNode();\n containerClone.appendChild(flagsContainerClone);\n var selectedFlagClone = this.selectedFlag.cloneNode(true);\n flagsContainerClone.appendChild(selectedFlagClone);\n var width = selectedFlagClone.offsetWidth;\n containerClone.parentNode.removeChild(containerClone);\n return width;\n }\n }, {\n key: \"_updatePlaceholder\",\n value: function _updatePlaceholder() {\n var shouldSetPlaceholder = this.options.autoPlaceholder === \"aggressive\" || !this.hadInitialPlaceholder && this.options.autoPlaceholder === \"polite\";\n if (window.intlTelInputUtils && shouldSetPlaceholder) {\n var numberType = intlTelInputUtils.numberType[this.options.placeholderNumberType];\n var placeholder = this.selectedCountryData.iso2 ? intlTelInputUtils.getExampleNumber(this.selectedCountryData.iso2, this.options.nationalMode, numberType) : \"\";\n placeholder = this._beforeSetNumber(placeholder);\n if (typeof this.options.customPlaceholder === \"function\") {\n placeholder = this.options.customPlaceholder(placeholder, this.selectedCountryData);\n }\n this.telInput.setAttribute(\"placeholder\", placeholder);\n }\n }\n }, {\n key: \"_selectListItem\",\n value: function _selectListItem(listItem) {\n // update selected flag and active list item\n var flagChanged = this._setFlag(listItem.getAttribute(\"data-country-code\"));\n this._closeDropdown();\n this._updateDialCode(listItem.getAttribute(\"data-dial-code\"));\n // focus the input\n this.telInput.focus();\n // put cursor at end - this fix is required for FF and IE11 (with auto inserting dial code),\n // who try to put the cursor at the beginning the first time\n var len = this.telInput.value.length;\n this.telInput.setSelectionRange(len, len);\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"_closeDropdown\",\n value: function _closeDropdown() {\n this.countryList.classList.add(\"iti__hide\");\n this.selectedFlag.setAttribute(\"aria-expanded\", \"false\");\n this.selectedFlag.removeAttribute(\"aria-activedescendant\");\n // update the arrow\n this.dropdownArrow.classList.remove(\"iti__arrow--up\");\n // unbind key events\n document.removeEventListener(\"keydown\", this._handleKeydownOnDropdown);\n document.documentElement.removeEventListener(\"click\", this._handleClickOffToClose);\n this.countryList.removeEventListener(\"mouseover\", this._handleMouseoverCountryList);\n this.countryList.removeEventListener(\"click\", this._handleClickCountryList);\n // remove menu from container\n if (this.options.dropdownContainer) {\n if (!this.isMobile) {\n window.removeEventListener(\"scroll\", this._handleWindowScroll);\n }\n if (this.dropdown.parentNode) {\n this.dropdown.parentNode.removeChild(this.dropdown);\n }\n }\n this._trigger(\"close:countrydropdown\");\n }\n }, {\n key: \"_scrollTo\",\n value: function _scrollTo(element, middle) {\n var container = this.countryList;\n // windowTop from https://stackoverflow.com/a/14384091/217866\n var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n var containerHeight = container.offsetHeight;\n var containerTop = container.getBoundingClientRect().top + windowTop;\n var containerBottom = containerTop + containerHeight;\n var elementHeight = element.offsetHeight;\n var elementTop = element.getBoundingClientRect().top + windowTop;\n var elementBottom = elementTop + elementHeight;\n var newScrollTop = elementTop - containerTop + container.scrollTop;\n var middleOffset = containerHeight / 2 - elementHeight / 2;\n if (elementTop < containerTop) {\n // scroll up\n if (middle) {\n newScrollTop -= middleOffset;\n }\n container.scrollTop = newScrollTop;\n } else if (elementBottom > containerBottom) {\n // scroll down\n if (middle) {\n newScrollTop += middleOffset;\n }\n var heightDifference = containerHeight - elementHeight;\n container.scrollTop = newScrollTop - heightDifference;\n }\n }\n }, {\n key: \"_updateDialCode\",\n value: function _updateDialCode(newDialCodeBare) {\n var inputVal = this.telInput.value;\n // save having to pass this every time\n var newDialCode = \"+\".concat(newDialCodeBare);\n var newNumber;\n if (inputVal.charAt(0) === \"+\") {\n // there's a plus so we're dealing with a replacement\n var prevDialCode = this._getDialCode(inputVal);\n if (prevDialCode) {\n // current number contains a valid dial code, so replace it\n newNumber = inputVal.replace(prevDialCode, newDialCode);\n } else {\n // current number contains an invalid dial code, so ditch it\n // (no way to determine where the invalid dial code ends and the rest of the number begins)\n newNumber = newDialCode;\n }\n this.telInput.value = newNumber;\n } else if (this.options.autoInsertDialCode) {\n if (inputVal) {\n // there is an existing value with no dial code: prefix the new dial code\n newNumber = newDialCode + inputVal;\n } else {\n newNumber = newDialCode;\n }\n this.telInput.value = newNumber;\n }\n }\n }, {\n key: \"_getDialCode\",\n value: function _getDialCode(number, includeAreaCode) {\n var dialCode = \"\";\n // only interested in international numbers (starting with a plus)\n if (number.charAt(0) === \"+\") {\n var numericChars = \"\";\n // iterate over chars\n for (var i = 0; i < number.length; i++) {\n var c = number.charAt(i);\n // if char is number (https://stackoverflow.com/a/8935649/217866)\n if (!isNaN(parseInt(c, 10))) {\n numericChars += c;\n // if current numericChars make a valid dial code\n if (includeAreaCode) {\n if (this.countryCodes[numericChars]) {\n // store the actual raw string (useful for matching later)\n dialCode = number.substr(0, i + 1);\n }\n } else {\n if (this.dialCodes[numericChars]) {\n dialCode = number.substr(0, i + 1);\n // if we're just looking for a dial code, we can break as soon as we find one\n break;\n }\n }\n // stop searching as soon as we can - in this case when we hit max len\n if (numericChars.length === this.countryCodeMaxLen) {\n break;\n }\n }\n }\n }\n return dialCode;\n }\n }, {\n key: \"_getFullNumber\",\n value: function _getFullNumber() {\n var val = this.telInput.value.trim();\n var dialCode = this.selectedCountryData.dialCode;\n var prefix;\n var numericVal = this._getNumeric(val);\n if (this.options.separateDialCode && val.charAt(0) !== \"+\" && dialCode && numericVal) {\n // when using separateDialCode, it is visible so is effectively part of the typed number\n prefix = \"+\".concat(dialCode);\n } else {\n prefix = \"\";\n }\n return prefix + val;\n }\n }, {\n key: \"_beforeSetNumber\",\n value: function _beforeSetNumber(originalNumber) {\n var number = originalNumber;\n if (this.options.separateDialCode) {\n var dialCode = this._getDialCode(number);\n // if there is a valid dial code\n if (dialCode) {\n // in case _getDialCode returned an area code as well\n dialCode = \"+\".concat(this.selectedCountryData.dialCode);\n // a lot of numbers will have a space separating the dial code and the main number, and\n // some NANP numbers will have a hyphen e.g. +1 684-733-1234 - in both cases we want to get\n // rid of it\n // NOTE: don't just trim all non-numerics as may want to preserve an open parenthesis etc\n var start = number[dialCode.length] === \" \" || number[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n number = number.substr(start);\n }\n }\n return this._cap(number);\n }\n }, {\n key: \"_triggerCountryChange\",\n value: function _triggerCountryChange() {\n this._trigger(\"countrychange\");\n }\n }, {\n key: \"handleAutoCountry\",\n value: function handleAutoCountry() {\n if (this.options.initialCountry === \"auto\") {\n // we must set this even if there is an initial val in the input: in case the initial val is\n // invalid and they delete it - they should see their auto country\n this.defaultCountry = window.intlTelInputGlobals.autoCountry;\n // if there's no initial value in the input, then update the flag\n if (!this.telInput.value) {\n this.setCountry(this.defaultCountry);\n }\n this.resolveAutoCountryPromise();\n }\n }\n }, {\n key: \"handleUtils\",\n value: function handleUtils() {\n // if the request was successful\n if (window.intlTelInputUtils) {\n // if there's an initial value in the input, then format it\n if (this.telInput.value) {\n this._updateValFromNumber(this.telInput.value);\n }\n this._updatePlaceholder();\n }\n this.resolveUtilsScriptPromise();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var form = this.telInput.form;\n if (this.options.allowDropdown) {\n // make sure the dropdown is closed (and unbind listeners)\n this._closeDropdown();\n this.selectedFlag.removeEventListener(\"click\", this._handleClickSelectedFlag);\n this.flagsContainer.removeEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n // label click hack\n var label = this._getClosestLabel();\n if (label) {\n label.removeEventListener(\"click\", this._handleLabelClick);\n }\n }\n // unbind hiddenInput listeners\n if (this.hiddenInput && form) {\n form.removeEventListener(\"submit\", this._handleHiddenInputSubmit);\n }\n // unbind autoInsertDialCode listeners\n if (this.options.autoInsertDialCode) {\n if (form) {\n form.removeEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n }\n this.telInput.removeEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n }\n // unbind key events, and cut/paste events\n this.telInput.removeEventListener(\"keyup\", this._handleKeyupEvent);\n this.telInput.removeEventListener(\"cut\", this._handleClipboardEvent);\n this.telInput.removeEventListener(\"paste\", this._handleClipboardEvent);\n // remove attribute of id instance: data-intl-tel-input-id\n this.telInput.removeAttribute(\"data-intl-tel-input-id\");\n // remove markup (but leave the original input)\n var wrapper = this.telInput.parentNode;\n wrapper.parentNode.insertBefore(this.telInput, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n delete window.intlTelInputGlobals.instances[this.id];\n }\n }, {\n key: \"getExtension\",\n value: function getExtension() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getExtension(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return \"\";\n }\n }, {\n key: \"getNumber\",\n value: function getNumber(format) {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.formatNumber(this._getFullNumber(), iso2, format);\n }\n return \"\";\n }\n }, {\n key: \"getNumberType\",\n value: function getNumberType() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getNumberType(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return -99;\n }\n }, {\n key: \"getSelectedCountryData\",\n value: function getSelectedCountryData() {\n return this.selectedCountryData;\n }\n }, {\n key: \"getValidationError\",\n value: function getValidationError() {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.getValidationError(this._getFullNumber(), iso2);\n }\n return -99;\n }\n }, {\n key: \"isValidNumber\",\n value: function isValidNumber() {\n var val = this._getFullNumber().trim();\n return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, this.selectedCountryData.iso2) : null;\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(originalCountryCode) {\n var countryCode = originalCountryCode.toLowerCase();\n // check if already selected\n if (this.selectedCountryData.iso2 !== countryCode) {\n this._setFlag(countryCode);\n this._updateDialCode(this.selectedCountryData.dialCode);\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"setNumber\",\n value: function setNumber(number) {\n // we must update the flag first, which updates this.selectedCountryData, which is used for\n // formatting the number before displaying it\n var flagChanged = this._updateFlagFromNumber(number);\n this._updateValFromNumber(number);\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"setPlaceholderNumberType\",\n value: function setPlaceholderNumberType(type) {\n this.options.placeholderNumberType = type;\n this._updatePlaceholder();\n }\n } ]);\n return Iti;\n }();\n /********************\n * STATIC METHODS\n ********************/\n // get the country data object\n intlTelInputGlobals.getCountryData = function() {\n return allCountries;\n };\n // inject a <script> element to load utils.js\n var injectScript = function injectScript(path, handleSuccess, handleFailure) {\n // inject a new script element into the page\n var script = document.createElement(\"script\");\n script.onload = function() {\n forEachInstance(\"handleUtils\");\n if (handleSuccess) {\n handleSuccess();\n }\n };\n script.onerror = function() {\n forEachInstance(\"rejectUtilsScriptPromise\");\n if (handleFailure) {\n handleFailure();\n }\n };\n script.className = \"iti-load-utils\";\n script.async = true;\n script.src = path;\n document.body.appendChild(script);\n };\n // load the utils script\n intlTelInputGlobals.loadUtils = function(path) {\n // 2 options:\n // 1) not already started loading (start)\n // 2) already started loading (do nothing - just wait for the onload callback to fire, which will\n // trigger handleUtils on all instances, invoking their resolveUtilsScriptPromise functions)\n if (!window.intlTelInputUtils && !window.intlTelInputGlobals.startedLoadingUtilsScript) {\n // only do this once\n window.intlTelInputGlobals.startedLoadingUtilsScript = true;\n // if we have promises, then return a promise\n if (typeof Promise !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n return injectScript(path, resolve, reject);\n });\n }\n injectScript(path);\n }\n return null;\n };\n // default options\n intlTelInputGlobals.defaults = defaults;\n // version\n intlTelInputGlobals.version = \"18.1.6\";\n // convenience wrapper\n return function(input, options) {\n var iti = new Iti(input, options);\n iti._init();\n input.setAttribute(\"data-intl-tel-input-id\", iti.id);\n window.intlTelInputGlobals.instances[iti.id] = iti;\n return iti;\n };\n }();\n});", "/**\n * Exposing intl-tel-input as a component\n */\nmodule.exports = require(\"./build/js/intlTelInput\");\n", "//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '\u2588\u2588': '\u2588',\n '\u2588 ': '\u2580',\n ' \u2588': '\u2584',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '\u2588\u2588': '\u2580',\n '\u2588 ': '\u2580',\n ' \u2588': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '\u2588';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '\u2588';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('\u2580');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('\u2588\u2588');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport CriticalSection from \"promise-critical-section\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n url: String\r\n }\r\n }\r\n\r\n get isHoveredOrFocussed() {\r\n return this.isHovered || this.isFocussed;\r\n }\r\n\r\n constructor(context) {\r\n super(context);\r\n this.popoverVisibilityCriticalSection = new CriticalSection();\r\n }\r\n\r\n connect() {\r\n this.popover = new bootstrap.Popover(\r\n this.element,\r\n {\r\n content: \"Loading...\",\r\n customClass: \"c-profile-popout\",\r\n html: true,\r\n placement: \"right\",\r\n trigger: \"manual\"\r\n }\r\n );\r\n this.element.addEventListener(\"mouseenter\", _ => this.setHovered());\r\n this.element.addEventListener(\"mouseleave\", _ => this.unsetHovered());\r\n this.element.addEventListener(\"focus\", _ => this.setFocussed());\r\n this.element.addEventListener(\"blur\", _ => this.unsetFocussed());\r\n }\r\n\r\n disconnect() {\r\n if (this.popover) {\r\n this.popover.dispose();\r\n this.popover = null;\r\n }\r\n }\r\n\r\n async setHovered() {\r\n this.isHovered = true;\r\n await this.updatePopoverVisibility();\r\n }\r\n\r\n async unsetHovered() {\r\n this.isHovered = false;\r\n await this.updatePopoverVisibility();\r\n }\r\n\r\n async setFocussed() {\r\n this.isFocussed = true;\r\n await this.updatePopoverVisibility();\r\n }\r\n\r\n async unsetFocussed() {\r\n this.isFocussed = false;\r\n await this.updatePopoverVisibility();\r\n }\r\n\r\n async updatePopoverVisibility() {\r\n await this.popoverVisibilityCriticalSection.enter();\r\n\r\n if (this.popover) {\r\n if (this.isHoveredOrFocussed) {\r\n if (!this.popover.tip?.classList.contains(\"show\")) {\r\n await new Promise(r => { setTimeout(r, 500) });\r\n\r\n if (this.popover && this.isHoveredOrFocussed) {\r\n this.popover.show();\r\n this.popover.tip.addEventListener(\r\n \"mouseenter\",\r\n () => {\r\n if (this.popover.tip.classList.contains(\"show\")) {\r\n this.setHovered();\r\n }\r\n }\r\n );\r\n this.popover.tip.addEventListener(\r\n \"mouseleave\",\r\n () => {\r\n if (this.popover.tip.classList.contains(\"show\")) {\r\n this.unsetHovered();\r\n }\r\n }\r\n );\r\n\r\n if (!this.content) {\r\n this.content = await fetch(this.urlValue).then(r => r.text());\r\n }\r\n\r\n if (this.popover) {\r\n this.popover.tip.querySelector(`.popover-body`).innerHTML = this.content;\r\n }\r\n }\r\n }\r\n } else if (this.popover.tip?.classList.contains(\"show\")) {\r\n await new Promise(r => { setTimeout(r, 250) });\r\n\r\n if (this.popover && !this.isHoveredOrFocussed) {\r\n this.popover.hide();\r\n }\r\n }\r\n }\r\n\r\n this.popoverVisibilityCriticalSection.leave();\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"checkbox\"];\r\n }\r\n\r\n connect() {\r\n this.ensureOneChecked();\r\n }\r\n\r\n ensureOneChecked() {\r\n const checkedCheckboxTargets = this.checkboxTargets.filter(ct => ct.checked);\r\n\r\n if (checkedCheckboxTargets.length === 1) {\r\n const checkedCheckboxTarget = checkedCheckboxTargets[0];\r\n checkedCheckboxTarget.disabled = true;\r\n const hiddenInput = document.createElement(\"input\");\r\n hiddenInput.type = \"hidden\";\r\n hiddenInput.name = checkedCheckboxTarget.name;\r\n hiddenInput.value = checkedCheckboxTarget.value;\r\n checkedCheckboxTarget.parentNode.insertBefore(hiddenInput, checkedCheckboxTarget);\r\n checkedCheckboxTarget.hiddenInput = hiddenInput;\r\n } else {\r\n for (const checkedCheckboxTarget of checkedCheckboxTargets) {\r\n checkedCheckboxTarget.disabled = false;\r\n checkedCheckboxTarget.hiddenInput?.remove();\r\n }\r\n }\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n userNotificationIds: Array\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"badge\"];\r\n }\r\n\r\n static get outlets() {\r\n return [\"user-notifications\"]\r\n }\r\n\r\n connect() {\r\n this.badgeTargets.forEach(bt => bt.style.transform = \"\");\r\n }\r\n\r\n acknowledged(e) {\r\n e.preventDefault();\r\n this.element.remove();\r\n\r\n this.userNotificationIdsValue.forEach(uni => {\r\n this.userNotificationsOutlet.markAsReadFromExternalSource(uni);\r\n });\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n \"availableCountryCodes\": String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"search\", \"companyName\", \"companyNameAlert\", \"addressLine1\", \"addressLine2\", \"city\", \"postcode\", \"country\"];\r\n }\r\n\r\n async connect() {\r\n const { Address } = await import(\"imports/address\");\r\n const address = new Address(\r\n [\r\n { element: this.searchTarget, field: \"\" },\r\n { element: this.companyNameTarget, field: \"Company\", mode: pca.fieldMode.POPULATE },\r\n { element: this.addressLine1Target, field: \"Line1\", mode: pca.fieldMode.POPULATE },\r\n { element: this.addressLine2Target, field: \"Line2\", mode: pca.fieldMode.POPULATE },\r\n { element: this.cityTarget, field: \"City\", mode: pca.fieldMode.POPULATE },\r\n { element: this.postcodeTarget, field: \"PostalCode\", mode: pca.fieldMode.POPULATE },\r\n { element: this.countryTarget, field: \"CountryName\", mode: pca.fieldMode.COUNTRY }\r\n ],\r\n {\r\n countries: { codesList: this.availableCountryCodesValue },\r\n setCountryByIP: false\r\n }\r\n );\r\n address.listen(\"populate\", () => {\r\n this.companyNameAlertTarget.classList.add(\"d-none\");\r\n });\r\n }\r\n\r\n populateAddressFromMyProfile() {\r\n this.companyNameTarget.value = this.companyNameTarget.dataset.profileValue;\r\n this.companyNameAlertTarget.classList.remove(\"d-none\");\r\n this.addressLine1Target.value = this.addressLine1Target.dataset.profileValue;\r\n this.addressLine2Target.value = this.addressLine2Target.dataset.profileValue;\r\n this.cityTarget.value = this.cityTarget.dataset.profileValue;\r\n this.postcodeTarget.value = this.postcodeTarget.dataset.profileValue;\r\n this.countryTarget.value = this.countryTarget.dataset.profileValue;\r\n\r\n if (this.countryTarget.selectedIndex < 0) {\r\n this.countryTarget.selectedIndex = 0;\r\n }\r\n }\r\n}\r\n\r\ndocument.addEventListener(\r\n \"keydown\",\r\n e => {\r\n if (e.target.closest(\".pca\") && (e.code === \"ArrowUp\" || e.code === \"ArrowDown\")) {\r\n e.preventDefault();\r\n }\r\n }\r\n);", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n\r\n static get targets() {\r\n return [\"category\",\"keyword\",\"table\"];\r\n }\r\n\r\n static get values() {\r\n return {\r\n \"dataUrl\": String\r\n }\r\n }\r\n\r\n categoryChangedHandler({ currentTarget, params: { columnIndex } }) {\r\n var selectedValue = currentTarget.options[currentTarget.selectedIndex].value;\r\n this.tableTarget.datatable.columns(columnIndex).search(selectedValue).draw();\r\n }\r\n\r\n keywordChangedHandler({ target }) {\r\n this.tableTarget.datatable.search(target.value).draw();\r\n }\r\n\r\n async connect() {\r\n if (!this.tableTarget.datatable) {\r\n const { DataTable } = await import(\"imports/datatables\");\r\n this.tableTarget.datatable = new DataTable(this.tableTarget, {\r\n dom: \"<'row dt-row'<'col-sm-12'tr>><'row'<'col-sm-12 d-flex justify-content-center'p>>\",\r\n pageLength: 25,\r\n ordering: false,\r\n retrieve: true,\r\n ajax: {\r\n url: this.dataUrlValue\r\n },\r\n processing: false,\r\n serverSide: true,\r\n columnDefs: [\r\n {\r\n targets: 0,\r\n data: \"sku\",\r\n },\r\n {\r\n targets: 1,\r\n data: \"category\",\r\n },\r\n {\r\n targets: 2,\r\n data: \"name\",\r\n },\r\n {\r\n targets: 3,\r\n data: \"points\",\r\n }\r\n ]\r\n });\r\n }\r\n // if (!this.tableTarget.datatable) {\r\n // const { DataTable } = await import(\"imports/datatables\");\r\n // this.tableTarget.datatable = new DataTable(this.tableTarget, {\r\n // dom: \"<'row dt-row'<'col-sm-12'tr>><'row'<'col-sm-12 d-flex justify-content-center'p>>\",\r\n // pageLength: 50,\r\n // columnDefs: [\r\n // {type: 'natural', targets: 0}\r\n // ]\r\n // });\r\n // }\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n connect() {\r\n this.element.addEventListener(\"paste\", e => this.pasteCode(e));\r\n this.element.addEventListener(\"input\", e => this.moveToNextTextInput(e));\r\n }\r\n\r\n async pasteCode(e) {\r\n const textInputs = Array.from(this.element.querySelectorAll(\"input[type=text]\"));\r\n\r\n if (textInputs.indexOf(e.target) === 0 && e.target.value === \"\") {\r\n e.preventDefault();\r\n const codeParts = e.clipboardData.getData(\"text/plain\")\r\n .replace(/-/g, \"\")\r\n .match(/.{1,4}/g);\r\n\r\n for (let i = 0; i < textInputs.length; i++) {\r\n if (textInputs[i].value === \"\") {\r\n textInputs[i].value = codeParts[i];\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n moveToNextTextInput(e) {\r\n if (e.target.value.length === e.target.maxLength) {\r\n const textInputs = Array.from(this.element.querySelectorAll(\"input[type=text]\"));\r\n const nextTextInput = textInputs[textInputs.indexOf(e.target) + 1];\r\n\r\n if (nextTextInput) {\r\n nextTextInput.focus();\r\n }\r\n }\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n passwordsDoNotMatchErrorMessage: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\r\n \"passwordInput\",\r\n \"passwordConfirmationInput\",\r\n \"passwordsDoNotMatchErrorMessage\",\r\n \"hasLowerAndUpperCaseCharactersIcon\",\r\n \"hasNumericCharactersIcon\",\r\n \"hasSpecialCharactersIcon\",\r\n \"hasSufficientCharactersIcon\",\r\n \"nextButton\"\r\n ];\r\n }\r\n\r\n checkPasswordStrength() {\r\n [\r\n [this.hasLowerAndUpperCaseCharactersIconTarget, /[A-Z]/.test(this.passwordInputTarget.value) && /[a-z]/.test(this.passwordInputTarget.value)],\r\n [this.hasNumericCharactersIconTarget, /[0-9]/.test(this.passwordInputTarget.value)],\r\n [this.hasSpecialCharactersIconTarget, /[!,%,&,@,#,$,^,*,?,_,~]/.test(this.passwordInputTarget.value)],\r\n [this.hasSufficientCharactersIconTarget, this.passwordInputTarget.value.length >= 8]\r\n ].forEach(([iconTarget, isValid]) => {\r\n iconTarget.textContent = isValid ? \"check_circle\" : \"cancel\";\r\n iconTarget.classList.toggle(\"text-success\", isValid);\r\n });\r\n this.enableNextButton();\r\n }\r\n\r\n checkPasswordsMatch() {\r\n const hasMatchingPasswords = this.passwordInputTarget.value.length > 0 && this.passwordInputTarget.value !== this.passwordConfirmationInputTarget.value;\r\n this.passwordsDoNotMatchErrorMessageTarget.textContent = hasMatchingPasswords ? this.passwordsDoNotMatchErrorMessageValue : \"\";\r\n this.passwordsDoNotMatchErrorMessageTarget.classList.toggle(\"field-validation-error\", hasMatchingPasswords);\r\n this.enableNextButton();\r\n }\r\n\r\n enableNextButton() {\r\n this.nextButtonTarget.disabled =\r\n ![\r\n this.hasLowerAndUpperCaseCharactersIconTarget,\r\n this.hasNumericCharactersIconTarget,\r\n this.hasSpecialCharactersIconTarget,\r\n this.hasSufficientCharactersIconTarget\r\n ].every(it => it.classList.contains(\"text-success\")) || this.passwordsDoNotMatchErrorMessageTarget.classList.contains(\"field-validation-error\");\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n addUrl: String,\r\n removeUrl: String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"add\", \"remove\"];\r\n }\r\n\r\n async add(e) {\r\n e.preventDefault();\r\n await fetch(this.addUrlValue, { method: \"post\" });\r\n this.addTarget.classList.remove(\"js-favourite-current\");\r\n this.removeTarget.classList.add(\"js-favourite-current\");\r\n }\r\n\r\n async remove(e) {\r\n e.preventDefault();\r\n await fetch(this.removeUrlValue, { method: \"post\" });\r\n this.addTarget.classList.add(\"js-favourite-current\");\r\n this.removeTarget.classList.remove(\"js-favourite-current\");\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"showAllButton\", \"filterButton\", \"filterForm\", \"allTypesFilterCheckbox\", \"typeFilterCheckbox\", \"teamFilterCheckbox\"];\r\n }\r\n\r\n connect() {\r\n this.updateButtons();\r\n }\r\n\r\n showAll(e) {\r\n e.preventDefault();\r\n this.allTypesFilterCheckboxTarget.checked = true;\r\n this.allTypesFilterCheckboxTarget.disabled = true;\r\n [...this.typeFilterCheckboxTargets, ...this.teamFilterCheckboxTargets].forEach(fct => {\r\n fct.checked = false;\r\n });\r\n this.updateButtons();\r\n this.filterFormTarget.dispatchEvent(new CustomEvent(\"feed:filter-changed\"));\r\n }\r\n\r\n filterChanged(e) {\r\n if (e.target === this.allTypesFilterCheckboxTarget || this.typeFilterCheckboxTargets.some(tfct => tfct === e.target)) {\r\n if (e.target === this.allTypesFilterCheckboxTarget) {\r\n this.typeFilterCheckboxTargets.forEach(tfct => {\r\n tfct.checked = false;\r\n });\r\n } else {\r\n this.allTypesFilterCheckboxTarget.checked = this.typeFilterCheckboxTargets.every(tfct => !tfct.checked);\r\n }\r\n\r\n this.allTypesFilterCheckboxTarget.disabled = this.allTypesFilterCheckboxTarget.checked;\r\n }\r\n\r\n this.updateButtons();\r\n this.filterFormTarget.dispatchEvent(new CustomEvent(\"feed:filter-changed\"));\r\n }\r\n\r\n updateButtons() {\r\n const isFiltered = this.typeFilterCheckboxTargets.some(tfct => tfct.checked) || this.teamFilterCheckboxTargets.some(tfct => tfct.checked);\r\n this.showAllButtonTarget.classList.toggle(\"filter-selected\", !isFiltered);\r\n this.filterButtonTarget.classList.toggle(\"filter-selected\", isFiltered);\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport \"toastr\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n copiedLinkToClipboardText: String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"shareMenuItem\"];\r\n }\r\n\r\n connect() {\r\n if (navigator.canShare) {\r\n this.shareMenuItemTarget.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n async copyLink(e) {\r\n e.preventDefault();\r\n await navigator.clipboard.writeText(e.target.href);\r\n toastr.success(this.copiedLinkToClipboardTextValue);\r\n }\r\n\r\n async shareLink(e) {\r\n e.preventDefault();\r\n await navigator.share({ url: e.target.href });\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\nimport CriticalSection from \"promise-critical-section\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n \"likesUrl\": String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"tooltipContent\"];\r\n }\r\n\r\n get isHoveredOrFocussed() {\r\n return this.isHovered || this.isFocussed;\r\n }\r\n\r\n constructor(context) {\r\n super(context);\r\n this.tooltipVisibilityCriticalSection = new CriticalSection();\r\n }\r\n\r\n connect() {\r\n if (this.hasTooltipContentTarget) {\r\n this.tooltip = new bootstrap.Tooltip(\r\n this.element,\r\n {\r\n customClass: \"c-feed__likes-tooltip\",\r\n html: true,\r\n title: () => this.tooltipContentTarget.content.cloneNode(true),\r\n trigger: \"manual\"\r\n }\r\n );\r\n }\r\n }\r\n\r\n disconnect() {\r\n if (this.tooltip) {\r\n this.tooltip.dispose();\r\n this.tooltip = null;\r\n }\r\n }\r\n\r\n async setHovered() {\r\n this.isHovered = true;\r\n await this.updateTooltipVisibility();\r\n }\r\n\r\n async unsetHovered() {\r\n this.isHovered = false;\r\n await this.updateTooltipVisibility();\r\n }\r\n\r\n async setFocussed() {\r\n this.isFocussed = true;\r\n await this.updateTooltipVisibility();\r\n }\r\n\r\n async unsetFocussed() {\r\n this.isFocussed = false;\r\n await this.updateTooltipVisibility();\r\n }\r\n\r\n async updateTooltipVisibility() {\r\n await this.tooltipVisibilityCriticalSection.enter();\r\n\r\n if (this.tooltip) {\r\n if (this.isHoveredOrFocussed) {\r\n if (!this.tooltip.tip?.classList.contains(\"show\")) {\r\n await new Promise(r => { setTimeout(r, 500) });\r\n\r\n if (this.tooltip && this.isHoveredOrFocussed) {\r\n this.tooltip.show();\r\n this.tooltip.tip.addEventListener(\r\n \"mouseenter\",\r\n () => {\r\n if (this.tooltip.tip.classList.contains(\"show\")) {\r\n this.setHovered();\r\n }\r\n }\r\n );\r\n this.tooltip.tip.addEventListener(\r\n \"mouseleave\",\r\n () => {\r\n if (this.tooltip.tip.classList.contains(\"show\")) {\r\n this.unsetHovered();\r\n }\r\n }\r\n );\r\n\r\n if (!this.likesHtml) {\r\n this.likesHtml = await fetch(this.likesUrlValue).then(r => r.text());\r\n }\r\n\r\n if (this.tooltip) {\r\n this.tooltip.tip.querySelector(`.loading`).outerHTML = this.likesHtml;\r\n }\r\n }\r\n }\r\n } else if (this.tooltip.tip?.classList.contains(\"show\")) {\r\n await new Promise(r => { setTimeout(r, 250) });\r\n\r\n if (this.tooltip && !this.isHoveredOrFocussed) {\r\n this.tooltip.hide();\r\n }\r\n }\r\n }\r\n\r\n this.tooltipVisibilityCriticalSection.leave();\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\nimport Tribute from \"tributejs\";\r\n\r\nfunction debounce(func, wait) {\r\n let timeout;\r\n return function (...args) {\r\n const context = this;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func.apply(context, args), wait);\r\n };\r\n}\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n searchMentionablesUrl: String,\r\n values: Array,\r\n searchTagsUrl: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"newImageFile\", \"form\", \"message\", \"messageHtml\", \"mentionedTeamIds\", \"mentionedUserIds\", \"valueIds\", \"tags\", \"imageUrl\", \"staticImageUrl\", \"imageFile\", \"isPoll\", \"messageEditor\", \"imageContainer\", \"image\", \"pollContainer\", \"toolbarButton\", \"addAnEmojiButton\", \"emojiPicker\", \"addAGifButton\", \"gifDisplayContainer\", \"removeGifContainer\", \"gifSearch\", \"gifResults\", \"addAnImageButton\", \"addAPollButton\"];\r\n }\r\n\r\n async connect() {\r\n this.toolbarButtonTargets.forEach(tbt => new bootstrap.Tooltip(tbt));\r\n const { data, Picker } = await import(\"imports/emoji-mart\");\r\n const picker = new Picker({\r\n data,\r\n onEmojiSelect: (e) => {\r\n this.insertEmoji(e.native);\r\n }\r\n });\r\n this.emojiPickerTarget.appendChild(picker);\r\n this.searchGifs = debounce(this.searchGifs.bind(this), 300);\r\n }\r\n\r\n async messageEditorTargetConnected(target) {\r\n const tributeCollection = [];\r\n\r\n if (this.hasSearchMentionablesUrlValue) {\r\n tributeCollection.push({\r\n trigger: \"@\",\r\n values: async (text, callback) => {\r\n const urlSearchParams = new URLSearchParams();\r\n urlSearchParams.append(\"searchText\", text);\r\n urlSearchParams.append(\"page\", 1)\r\n urlSearchParams.append(\"pageSize\", 10);\r\n const response = await fetch(`${this.searchMentionablesUrlValue}?${urlSearchParams}`);\r\n callback(await response.json());\r\n },\r\n lookup: \"text\",\r\n menuItemTemplate: function (item) {\r\n return `<img src=\"${item.original.imageUrl}\" alt=\"\">${item.original.text}`;\r\n },\r\n selectTemplate: function (item) {\r\n return `<span class=\"badge\" contenteditable=\"false\" data-mentioned-${item.original.type}-id=\"${item.original.id}\" data-value=\"@(${item.original.type[0]}:${item.original.id}:${item.original.text})\">\r\n @${item.original.text}\r\n </span>`;\r\n },\r\n searchOpts: {\r\n skip: true\r\n }\r\n });\r\n }\r\n\r\n if (this.hasValuesValue && this.valuesValue.length > 0) {\r\n tributeCollection.push({\r\n trigger: \"*\",\r\n values: this.valuesValue.map(v => ({value: v.Value, text: v.Text})),\r\n lookup: \"text\",\r\n menuItemLimit: 10,\r\n menuItemTemplate: function (item) {\r\n return item.original.text;\r\n },\r\n selectTemplate: function (item) {\r\n return `<span class=\"badge\" contenteditable=\"false\" data-value-id=\"${item.original.value}\" data-value=\"*(${item.original.value}:${item.original.text})\">\r\n \u2606${item.original.text}\r\n </span>`;\r\n }\r\n });\r\n }\r\n\r\n if (this.hasSearchTagsUrlValue) {\r\n tributeCollection.push({\r\n trigger: \"#\",\r\n values: async (text, callback) => {\r\n const urlSearchParams = new URLSearchParams();\r\n urlSearchParams.append(\"searchText\", text);\r\n const response = await fetch(`${this.searchTagsUrlValue}?${urlSearchParams}`);\r\n callback(await response.json());\r\n },\r\n lookup: \"text\",\r\n menuItemTemplate: function (item) {\r\n return item.original.text;\r\n },\r\n selectTemplate: function (item) {\r\n return `<span class=\"badge\" contenteditable=\"false\" data-tag=\"${item.original.text}\" data-value=\"#(${item.original.text})\">\r\n #${item.original.text}\r\n </span>`;\r\n },\r\n searchOpts: {\r\n skip: true\r\n }\r\n });\r\n }\r\n\r\n if (tributeCollection.length > 0) {\r\n this.messageEditorTarget.tribute = new Tribute({\r\n collection: tributeCollection,\r\n containerClass: \"c-feed-post-dropdown-menu\",\r\n itemClass: \"c-feed-post-dropdown-menu__item\",\r\n allowSpaces: true\r\n });\r\n this.messageEditorTarget.tribute.attach(target);\r\n }\r\n }\r\n\r\n preventMultilineEntry(e) {\r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n togglePlaceholder(e) {\r\n e.target.classList.toggle(\"has-content\", e.target.textContent);\r\n }\r\n\r\n updateMessageValue() {\r\n let message = this.messageEditorTarget.cloneNode(true);\r\n message.querySelectorAll(\".badge\")?.forEach(b => b.replaceWith(b.dataset.value));\r\n this.messageTarget.value = message.textContent;\r\n this.messageHtmlTarget.value = this.messageEditorTarget.innerHTML;\r\n\r\n if (this.hasMentionedTeamIdsTarget) {\r\n this.mentionedTeamIdsTarget.value = [...new Set([...this.messageEditorTarget.querySelectorAll(\"[data-mentioned-team-id]\")].map(b => b.dataset.mentionedTeamId))].join(\",\");\r\n }\r\n\r\n if (this.hasMentionedUserIdsTarget) {\r\n this.mentionedUserIdsTarget.value = [...new Set([...this.messageEditorTarget.querySelectorAll(\"[data-mentioned-user-id]\")].map(b => b.dataset.mentionedUserId))].join(\",\");\r\n }\r\n\r\n if (this.hasValueIdsTarget) {\r\n this.valueIdsTarget.value = [...new Set([...this.messageEditorTarget.querySelectorAll(\"[data-value-id]\")].map(b => b.dataset.valueId))].join(\",\");\r\n }\r\n\r\n if (this.hasTagsTarget) {\r\n this.tagsTarget.value = [...new Set([...this.messageEditorTarget.querySelectorAll(\"[data-tag]\")].map(b => b.dataset.tag))].join(\",\");\r\n }\r\n }\r\n\r\n pasteText(e) {\r\n e.preventDefault();\r\n const text = e.clipboardData.getData(\"text\");\r\n const selection = window.getSelection();\r\n if (!selection.rangeCount) return;\r\n selection.deleteFromDocument();\r\n selection.getRangeAt(0).insertNode(document.createTextNode(text));\r\n selection.collapseToEnd();\r\n this.updateMessageValue();\r\n this.messageEditorTarget.classList.add(\"has-content\");\r\n }\r\n\r\n preventDragOver(e) {\r\n e.preventDefault();\r\n }\r\n\r\n preventDrop(e) {\r\n e.preventDefault();\r\n }\r\n\r\n mentionSomeone(e) {\r\n e.preventDefault();\r\n this.showMenuForCollection(\"@\");\r\n }\r\n\r\n addAValue(e) {\r\n e.preventDefault();\r\n this.showMenuForCollection(\"*\");\r\n }\r\n\r\n addATag(e) {\r\n e.preventDefault();\r\n this.showMenuForCollection(\"#\");\r\n }\r\n\r\n addAGif(e) {\r\n\r\n const API_KEY = 'g3pi3jckPqURR1zVYe74UfEJvI5sUfMH';\r\n fetch(`https://api.giphy.com/v1/gifs/trending?api_key=${API_KEY}&limit=50&rating=pg-13`)\r\n .then(response => response.json())\r\n .then(data => {\r\n const gifResults = this.gifResultsTarget;\r\n gifResults.innerHTML = '';\r\n data.data.forEach(gif => {\r\n const img = document.createElement('img');\r\n img.src = gif.images.fixed_height.url;\r\n img.alt = gif.title;\r\n img.setAttribute('data-still', gif.images.fixed_height_still.url);\r\n img.setAttribute('data-gif', gif.images.fixed_height.url);\r\n img.setAttribute('loading', 'lazy');\r\n img.onclick = () => this.selectGif(gif.images.fixed_height.url, gif.images.fixed_height_still.url);\r\n gifResults.appendChild(img);\r\n });\r\n })\r\n .catch(error => console.error('Error fetching GIFs:', error));\r\n }\r\n\r\n searchGifs() {\r\n const API_KEY = 'g3pi3jckPqURR1zVYe74UfEJvI5sUfMH';\r\n let query = this.gifSearchTarget.value;\r\n\r\n if (query === '') {\r\n // If no text in the search box fetch the trending call\r\n fetch(`https://api.giphy.com/v1/gifs/trending?api_key=${API_KEY}&limit=50&rating=pg-13`)\r\n .then(response => response.json())\r\n .then(data => {\r\n const gifResults = this.gifResultsTarget;\r\n gifResults.innerHTML = '';\r\n data.data.forEach(gif => {\r\n const img = document.createElement('img');\r\n img.src = gif.images.fixed_height.url;\r\n img.alt = gif.title;\r\n img.setAttribute('data-still', gif.images.fixed_height_still.url);\r\n img.setAttribute('data-gif', gif.images.fixed_height.url);\r\n img.setAttribute('loading', 'lazy');\r\n img.onclick = () => this.selectGif(gif.images.fixed_height.url, gif.images.fixed_height_still.url);\r\n gifResults.appendChild(img);\r\n });\r\n })\r\n .catch(error => console.error('Error fetching GIFs:', error));\r\n } else {\r\n // Else fetch whatever is searched for\r\n fetch(`https://api.giphy.com/v1/gifs/search?api_key=${API_KEY}&q=${query}&limit=50&rating=pg-13`)\r\n .then(response => response.json())\r\n .then(data => {\r\n const gifResults = this.gifResultsTarget;\r\n gifResults.innerHTML = '';\r\n data.data.forEach(gif => {\r\n const img = document.createElement('img');\r\n img.src = gif.images.fixed_height.url;\r\n img.alt = gif.title;\r\n img.setAttribute('data-still', gif.images.fixed_height_still.url);\r\n img.setAttribute('data-gif', gif.images.fixed_height.url);\r\n img.setAttribute('loading', 'lazy');\r\n img.onclick = () => this.selectGif(gif.images.fixed_height.url, gif.images.fixed_height_still.url);\r\n gifResults.appendChild(img);\r\n });\r\n })\r\n .catch(error => console.error('Error fetching GIFs:', error));\r\n\r\n }\r\n }\r\n\r\n searchGifsEnter(e) {\r\n e.preventDefault();\r\n }\r\n\r\n selectGif(url, staticURl) {\r\n this.clearImage();\r\n const selectedGifInput = this.imageUrlTarget;\r\n const selectedGifInputStatic = this.staticImageUrlTarget;\r\n selectedGifInput.value = url;\r\n selectedGifInputStatic.value = staticURl;\r\n\r\n const detailsEditorDiv = this.element.querySelector('.c-feed-post__details-gif');\r\n const existingGif = detailsEditorDiv.querySelector('.gif');\r\n\r\n if (existingGif) {\r\n existingGif.src = url;\r\n } else {\r\n detailsEditorDiv.insertAdjacentHTML('beforeend', `<img src=\"${url}\" data-still=\"${staticURl}\" alt=\"Selected GIF\" class=\"gif\">`);\r\n }\r\n\r\n this.gifDisplayContainerTarget.classList.remove(\"d-none\");\r\n this.removeGifContainerTarget.classList.remove(\"d-none\");\r\n bootstrap.Dropdown.getOrCreateInstance(this.addAGifButtonTarget).hide();\r\n }\r\n\r\n removeGif(e) {\r\n e.preventDefault();\r\n this.clearGif();\r\n }\r\n\r\n saveMessageEditorSelectionRange() {\r\n const selection = getSelection();\r\n\r\n if (this.messageEditorTarget.contains(selection.anchorNode)) {\r\n this.detailsEditorSelectionRange = selection.getRangeAt(0);\r\n } else {\r\n this.detailsEditorSelectionRange = document.createRange();\r\n this.detailsEditorSelectionRange.selectNodeContents(this.messageEditorTarget);\r\n this.detailsEditorSelectionRange.collapse();\r\n }\r\n }\r\n\r\n insertEmoji(emoji) {\r\n const selection = window.getSelection();\r\n selection.removeAllRanges();\r\n selection.addRange(this.detailsEditorSelectionRange);\r\n this.detailsEditorSelectionRange.deleteContents();\r\n this.detailsEditorSelectionRange.insertNode(document.createTextNode(emoji + \"\\u00A0\"));\r\n this.detailsEditorSelectionRange.collapse();\r\n this.updateMessageValue();\r\n this.messageEditorTarget.classList.add(\"has-content\");\r\n bootstrap.Dropdown.getOrCreateInstance(this.addAnEmojiButtonTarget).hide();\r\n }\r\n\r\n showMenuForCollection(trigger) {\r\n // fix for not being able to delete un-editable tribute badge when it's the first element in the message editor target\r\n if (!this.messageEditorTarget.classList.contains(\"has-content\")) {\r\n this.messageEditorTarget.innerHTML = \"<span></span>\";\r\n }\r\n\r\n this.messageEditorTarget.tribute.showMenuForCollection(this.messageEditorTarget, this.messageEditorTarget.tribute.collection.findIndex(c => c.trigger === trigger));\r\n this.messageEditorTarget.classList.add(\"has-content\");\r\n }\r\n\r\n imageFileChanged() {\r\n if (this.newImageFileTarget.files.length > 0) {\r\n this.clearGif();\r\n }\r\n\r\n this.renderImage();\r\n bootstrap.Tooltip.getInstance(this.addAnImageButtonTarget).hide();\r\n }\r\n\r\n formTargetConnected(target) {\r\n if (!this.hasNewImageFileTarget) {\r\n return;\r\n }\r\n\r\n if (!this.newImageFileTarget.form) {\r\n this.newImageFileTarget.value = null;\r\n this.newImageFileTarget.setAttribute(\"form\", target.id);\r\n return;\r\n }\r\n\r\n this.renderImage();\r\n }\r\n\r\n removeImage(e) {\r\n e.preventDefault();\r\n this.clearImage();\r\n }\r\n\r\n addAnImage(e) {\r\n e.preventDefault();\r\n this.newImageFileTarget.click();\r\n }\r\n\r\n clearGif() {\r\n if (!this.hasImageUrlTarget) {\r\n return;\r\n }\r\n\r\n const selectedGifInput = this.imageUrlTarget;\r\n selectedGifInput.value = '';\r\n\r\n const detailsEditorDiv = this.element.querySelector('.c-feed-post__details-gif');\r\n const existingGif = detailsEditorDiv.querySelector('.gif');\r\n\r\n if (existingGif) {\r\n existingGif.remove();\r\n }\r\n\r\n this.gifDisplayContainerTarget.classList.add(\"d-none\");\r\n this.removeGifContainerTarget.classList.add(\"d-none\");\r\n }\r\n\r\n renderImage() {\r\n if (this.newImageFileTarget.files.length > 0) {\r\n const file = this.newImageFileTarget.files[0];\r\n const fileReader = new FileReader();\r\n fileReader.addEventListener(\r\n \"load\",\r\n _ => {\r\n this.imageTarget.src = fileReader.result;\r\n this.imageContainerTarget.classList.remove(\"d-none\");\r\n }\r\n );\r\n fileReader.readAsDataURL(file);\r\n } else if (!this.hasImageFileTarget || this.imageFileTarget.value === \"\") {\r\n this.imageContainerTarget.classList.add(\"d-none\");\r\n this.imageTarget.src = \"\";\r\n }\r\n }\r\n\r\n clearImage() {\r\n if (!this.hasNewImageFileTarget) {\r\n return;\r\n }\r\n\r\n this.newImageFileTarget.value = null;\r\n\r\n if (this.hasImageFileTarget) {\r\n this.imageFileTarget.value = null;\r\n }\r\n\r\n this.renderImage();\r\n }\r\n\r\n addAPoll(e) {\r\n e.preventDefault();\r\n this.clearGif();\r\n this.clearImage();\r\n this.addAGifButtonTarget.disabled = true;\r\n this.addAnImageButtonTarget.disabled = true;\r\n this.addAPollButtonTarget.disabled = true;\r\n this.isPollTarget.value = \"True\";\r\n this.pollContainerTarget.classList.remove(\"d-none\");\r\n }\r\n\r\n removePoll(e) {\r\n e.preventDefault();\r\n this.pollContainerTarget.classList.add(\"d-none\");\r\n this.isPollTarget.value = \"False\";\r\n this.addAPollButtonTarget.disabled = false;\r\n this.addAnImageButtonTarget.disabled = false;\r\n this.addAGifButtonTarget.disabled = false;\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"gifPause\", \"status\"];\r\n }\r\n\r\n togglePause(event) {\r\n event.preventDefault();\r\n\r\n const img = this.gifPauseTarget;\r\n const status = this.statusTarget;\r\n\r\n const currentSrc = img.getAttribute(\"src\");\r\n const stillSrc = img.getAttribute(\"data-still\");\r\n const gifSrc = img.getAttribute(\"data-gif\");\r\n\r\n if (currentSrc === gifSrc) {\r\n img.setAttribute(\"src\", stillSrc);\r\n status.textContent = \"play_circle\";\r\n } else {\r\n img.setAttribute(\"src\", gifSrc);\r\n status.textContent = \"pause_circle\";\r\n }\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n autofocus: {\r\n type: String,\r\n default : \"on\"\r\n }\r\n }\r\n }\r\n\r\n connect() {\r\n this.element.addEventListener(\"submit\", () => this.disableSubmitButtons());\r\n this.focusAutofocusInput();\r\n }\r\n\r\n disableSubmitButtons() {\r\n this.element.querySelectorAll(\"input[submit],button:not([type=button]):not([type=reset])\").forEach(sb => {\r\n sb.disabled = true;\r\n });\r\n }\r\n\r\n focusAutofocusInput() {\r\n if (this.autofocusValue !== \"off\") {\r\n const autofocusInput =\r\n this.element.querySelector(\".input-validation-error:not([type=hidden]):not([disabled])\") ||\r\n (\r\n this.autofocusValue === \"on\" &&\r\n this.element.querySelector(\"input:not([type=hidden]):not([disabled]),select:not([disabled])\")\r\n );\r\n\r\n if (autofocusInput) {\r\n if (autofocusInput.classList.contains('input-validation-error')) {\r\n this.element.scrollIntoView(true);\r\n }\r\n \r\n autofocusInput.focus();\r\n }\r\n }\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n searchUrl: String,\r\n searchResultUrl: String,\r\n upVoteUrl: String,\r\n downVoteUrl: String,\r\n thanksForTheFeedbackMessage: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"search\", \"searchResultSection\", \"searchResult\"];\r\n }\r\n\r\n async dispatchChatWithUsRequestedEvent() {\r\n this.dispatch(\"chatWithUsRequested\", { bubbles: true });\r\n }\r\n\r\n searchTargetConnected(target) {\r\n jQuery(target)\r\n .typeahead(\r\n {\r\n minLength: 3\r\n },\r\n {\r\n source: async (query, _, asyncResults) => {\r\n const response = await fetch(`${this.searchUrlValue}?${new URLSearchParams([[\"term\", query]])}`);\r\n const json = await response.json();\r\n asyncResults(json);\r\n },\r\n valueKey: \"id\",\r\n displayKey: \"question\"\r\n }\r\n )\r\n .on(\"typeahead:autocompleted typeahead:selected\", async (_, { id }) => {\r\n const response = await fetch(`${this.searchResultUrlValue}?${new URLSearchParams([[\"faqItemId\", id]])}`);\r\n\r\n if (response.ok) {\r\n this.searchResultSectionTarget.classList.remove(\"d-none\");\r\n this.searchResultTarget.innerHTML = await response.text();\r\n this.searchResultTarget.querySelector(\".accordion-body\").classList.add(\"show\");\r\n }\r\n });\r\n }\r\n\r\n async upVote({ currentTarget, params: { faqItemId } }) {\r\n if ((await fetch(`${this.upVoteUrlValue}?faqItemId=${faqItemId}`, { method: \"post\" })).ok) {\r\n currentTarget.parentNode.textContent = this.thanksForTheFeedbackMessageValue;\r\n }\r\n }\r\n\r\n async downVote({ currentTarget, params: { faqItemId } }) {\r\n if ((await fetch(`${this.downVoteUrlValue}?faqItemId=${faqItemId}`, { method: \"post\" })).ok) {\r\n currentTarget.parentNode.textContent = this.thanksForTheFeedbackMessageValue;\r\n }\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n profilePictureUrl: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"profilePicture\"];\r\n }\r\n\r\n refreshProfilePicture() {\r\n this.profilePictureTargets.forEach(ppt => {\r\n ppt.src = `${this.profilePictureUrlValue}?width=${ppt.getAttribute(\"width\")}&height=${ppt.getAttribute(\"height\")}&${new Date().getTime()}`;\r\n });\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport \"toastr\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n intercomSettings: Object,\r\n checkForModalNotificationsUrl: String,\r\n checkForPrizesUrl: String,\r\n checkForPopupQuizzesUrl: String,\r\n checkForToastNotificationsUrl: String,\r\n markNotificationAsReadUrl: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"headerMobileToggle\", \"helpCenterButton\", \"helpCenter\"];\r\n }\r\n\r\n async connect() {\r\n this.setAppHeight();\r\n this.element.addEventListener(\"click\", e => this.launchHelp(e));\r\n await this.checkForModalNotifications();\r\n await this.checkForPrizes();\r\n await this.checkForPopupQuizzes();\r\n await this.checkForToastNotifications();\r\n }\r\n\r\n setAppHeight() {\r\n // document.documentElement.style.setProperty('--app-height', `${window.innerHeight}px`);\r\n }\r\n\r\n toggleMenu(e) {\r\n this.headerMobileToggleTarget.classList.toggle(\"is-open\");\r\n this.element.classList.toggle(\"menu-open\");\r\n e.preventDefault();\r\n }\r\n\r\n closeMenu(e) {\r\n this.headerMobileToggleTarget.classList.remove(\"is-open\");\r\n this.element.classList.remove(\"menu-open\");\r\n e.preventDefault();\r\n }\r\n\r\n launchHelp(e) {\r\n if (e.target.tagName === \"A\" && (e.target.id === \"launch-help\" || e.target.classList.contains(\"launch-help\"))) {\r\n bootstrap.Offcanvas.getOrCreateInstance(this.helpCenterTarget).show();\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n async hideHelpCenter() {\r\n const hiddenPromise = new Promise(resolve => {\r\n this.helpCenterTarget.addEventListener(\r\n \"hidden.bs.offcanvas\",\r\n () => {\r\n resolve();\r\n },\r\n { once: true }\r\n );\r\n });\r\n bootstrap.Offcanvas.getInstance(this.helpCenterTarget).hide();\r\n return hiddenPromise;\r\n }\r\n\r\n async initialiseIntercom() {\r\n return new Promise(resolve => {\r\n window.intercomSettings = this.intercomSettingsValue;\r\n const script = document.createElement(\"script\");\r\n script.src = `https://widget.intercom.io/widget/${this.intercomSettingsValue.app_id}`;\r\n script.addEventListener(\"load\", () => {\r\n resolve();\r\n });\r\n document.body.appendChild(script);\r\n });\r\n }\r\n\r\n async launchIntercom() {\r\n this.helpCenterButtonTarget.classList.add(\"d-none\");\r\n const promises = [this.hideHelpCenter()];\r\n\r\n if (!window.Intercom) {\r\n promises.push(this.initialiseIntercom());\r\n }\r\n\r\n await Promise.allSettled(promises);\r\n window.Intercom(\"show\");\r\n window.Intercom(\"onHide\", () => {\r\n this.helpCenterButtonTarget.classList.remove(\"d-none\");\r\n this.helpCenterButtonTarget.focus();\r\n });\r\n }\r\n\r\n async checkForAndShowModal(checkForUrl) {\r\n const preventKey = `layout:prevent-modal-with-check-for-url:${checkForUrl}`;\r\n\r\n if (sessionStorage[preventKey]) {\r\n return;\r\n }\r\n\r\n const response = await fetch(checkForUrl);\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = await response.text();\r\n\r\n if (!template.content.firstElementChild) {\r\n return;\r\n }\r\n\r\n const modalElement = this.element.appendChild(template.content.firstElementChild.cloneNode(true));\r\n htmx.process(modalElement);\r\n const modal = new bootstrap.Modal(modalElement);\r\n let isCancel;\r\n modalElement.querySelector(\"[data-is-cancel]\")?.addEventListener(\r\n \"click\",\r\n _ => {\r\n isCancel = true;\r\n modal.hide();\r\n },\r\n { once: true }\r\n );\r\n const hiddenPromise = new Promise(r => {\r\n modalElement.addEventListener(\"hidden.bs.modal\", r, { once: true });\r\n });\r\n modal.show();\r\n await hiddenPromise;\r\n\r\n if (isCancel) {\r\n sessionStorage[preventKey] = true;\r\n }\r\n\r\n return !isCancel;\r\n }\r\n\r\n async checkForModalNotifications() {\r\n while (await this.checkForAndShowModal(this.checkForModalNotificationsUrlValue)) {}\r\n }\r\n\r\n checkForPrizes() {\r\n return this.checkForAndShowModal(this.checkForPrizesUrlValue);\r\n }\r\n\r\n async checkForPopupQuizzes() {\r\n while (await this.checkForAndShowModal(this.checkForPopupQuizzesUrlValue)) {}\r\n }\r\n\r\n async markNotificationAsRead(id) {\r\n const body = new URLSearchParams();\r\n body.set(\"id\", id);\r\n await fetch(\r\n this.markNotificationAsReadUrlValue,\r\n {\r\n method: \"post\",\r\n body: body\r\n }\r\n );\r\n }\r\n\r\n async checkForToastNotifications() {\r\n const response = await fetch(this.checkForToastNotificationsUrlValue);\r\n const notifications = await response.json();\r\n notifications.forEach(n => {\r\n let options = {\r\n onclick: () => this.markNotificationAsRead(n.id),\r\n onCloseClick: () => this.markNotificationAsRead(n.id)\r\n };\r\n\r\n if (n.requireDismissal) {\r\n options = {\r\n ...options,\r\n closeButton: true,\r\n timeOut: 0,\r\n extendedTimeOut: 0\r\n };\r\n }\r\n\r\n toastr[n.type](n.body, n.title, options);\r\n });\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n settings: Object\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"helpCenterButton\"];\r\n }\r\n\r\n async initialiseIntercom() {\r\n return new Promise(resolve => {\r\n window.intercomSettings = this.settingsValue;\r\n const script = document.createElement(\"script\");\r\n script.src = `https://widget.intercom.io/widget/${this.settingsValue.app_id}`;\r\n script.addEventListener(\"load\", () => {\r\n resolve();\r\n });\r\n document.body.appendChild(script);\r\n });\r\n }\r\n\r\n async launchIntercom() {\r\n this.helpCenterButtonTarget.classList.add(\"d-none\");\r\n const promises = [];\r\n\r\n if (!window.Intercom) {\r\n promises.push(this.initialiseIntercom());\r\n }\r\n\r\n await Promise.allSettled(promises);\r\n window.Intercom(\"show\");\r\n window.Intercom(\"onHide\", () => {\r\n this.helpCenterButtonTarget.classList.remove(\"d-none\");\r\n this.helpCenterButtonTarget.focus();\r\n });\r\n }\r\n\r\n async connect() {\r\n await new Promise(resolve => setTimeout(resolve, 20000));\r\n this.helpCenterButtonTarget.addEventListener(\"click\", e => this.launchHelp(e));\r\n this.helpCenterButtonTarget.style.transform = \"\";\r\n }\r\n\r\n launchHelp(e) {\r\n this.launchIntercom();\r\n e.preventDefault();\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"search\"];\r\n }\r\n\r\n static get values() {\r\n return {\r\n url: String\r\n };\r\n }\r\n\r\n searchTargetConnected(target) {\r\n var url = this.urlValue;\r\n\r\n jQuery(target).typeahead({\r\n hint: true,\r\n highlight: true,\r\n minLength: 3\r\n }, {\r\n displayKey: 'name',\r\n valueKey: 'id',\r\n templates: {\r\n suggestion: function (data) {\r\n // category.\r\n if (data.type === 'c') {\r\n // perk category.\r\n if (data.t === 'p') {\r\n return '<div><span class=\"material-symbols-outlined\" data-icon=\"grid_view\"></span> ' + data.name + '<span class=\"badge text-secondary\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n // reward category.\r\n else {\r\n return '<div><span class=\"material-symbols-outlined\" data-icon=\"grid_view\"></span> ' + data.name + '<span class=\"badge text-secondary\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n \r\n }\r\n // affiliate.\r\n else if (data.t === \"a\") {\r\n return '<div><span class=\"material-symbols-outlined text-primary\" data-icon=\"local_mall\"></span> ' + data.name + '<span class=\"badge text-primary\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n // digital gift card.\r\n else if (data.t === \"ev\" && data.pt === \"c\") {\r\n return '<div><span class=\"material-symbols-outlined text-info\" data-icon=\"redeem\"></span> ' + data.name + '<span class=\"badge text-info\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n // digital cinema voucher.\r\n else if (data.t === \"evc\" && data.pt === \"c\") {\r\n return '<div><span class=\"material-symbols-outlined text-info\" data-icon=\"local_activity\"></span> ' + data.name + '<span class=\"badge text-info\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n // product.\r\n else {\r\n return '<div><span class=\"material-symbols-outlined text-success\" data-icon=\"featured_seasonal_and_gifts\"></span> ' + data.name + '<span class=\"badge text-success\">' + data.h.toUpperCase() + '</span>' + '</div>';\r\n }\r\n }\r\n //header: function (data) {\r\n // if (data.t === \"a\" || data.pt === \"c\") {\r\n // return '<h3>Perks</h3>';\r\n // }\r\n // else {\r\n // return '<h3>Rewards</h3>';\r\n // }\r\n //}\r\n },\r\n limit: 20, source: function (query, syncResults, asyncResults) {\r\n fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({ term: query })\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n asyncResults(data);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error:\", error);\r\n });\r\n }\r\n }).on(\"typeahead:selected typeahead:autocompleted\", function (e, datum) {\r\n window.location.href = datum.url;\r\n });\r\n\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n entityType: String,\r\n entityId: String,\r\n targetUrl: String\r\n };\r\n }\r\n\r\n connect() {\r\n this.element.addEventListener(\"click\", e => this.logUserAction(e));\r\n }\r\n\r\n async logUserAction(e) {\r\n await fetch(\r\n \"/UserAction/Log\",\r\n {\r\n method: \"post\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({\r\n entityType: this.entityTypeValue,\r\n entityId: this.entityIdValue,\r\n targetUrl: this.targetUrlValue\r\n })\r\n }\r\n );\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"schemeId\", \"differentCountryAlertContainer\"];\r\n }\r\n\r\n displayDifferentCountryAlertContainer({ target }) {\r\n const schemeId = parseInt(this.schemeIdTarget.value);\r\n const selectedCountry = target.options[target.selectedIndex].value;\r\n this.differentCountryAlertContainerTarget.classList.toggle(\r\n \"d-none\",\r\n !selectedCountry || ((schemeId !== 182 || selectedCountry === \"DE\") && (schemeId !== 156 || selectedCountry === \"GB\"))\r\n );\r\n }\r\n}", "import { EMPTY_ARR } from \"./constants\";\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-ignore We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {Node} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * constructor for this virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is import('./internal').VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor === undefined;\n", "import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n/**\n * Diff the old and new properties of a VNode and apply changes to the DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to apply\n * changes to\n * @param {object} newProps The new props\n * @param {object} oldProps The old props\n * @param {boolean} isSvg Whether or not this node is an SVG node\n * @param {boolean} hydrate Whether or not we are in hydration mode\n */\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\n\tlet i;\n\n\tfor (i in oldProps) {\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\n\t\t}\n\t}\n\n\tfor (i in newProps) {\n\t\tif (\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\n\t\t\ti !== 'children' &&\n\t\t\ti !== 'key' &&\n\t\t\ti !== 'value' &&\n\t\t\ti !== 'checked' &&\n\t\t\toldProps[i] !== newProps[i]\n\t\t) {\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\n\t\t}\n\t}\n}\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value == null ? '' : value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, isSvg) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\n\t\t\t}\n\t\t} else {\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\tdom.removeEventListener(name, handler, useCapture);\n\t\t}\n\t} else if (name !== 'dangerouslySetInnerHTML') {\n\t\tif (isSvg) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname !== 'width' &&\n\t\t\tname !== 'height' &&\n\t\t\tname !== 'href' &&\n\t\t\tname !== 'list' &&\n\t\t\tname !== 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname !== 'tabIndex' &&\n\t\t\tname !== 'download' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// ARIA-attributes have a different notion of boolean values.\n\t\t// The value `false` is different from the attribute not\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\n\t\t// ARIA-attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost us too many bytes. On top of\n\t\t// that other VDOM frameworks also always stringify `false`.\n\n\t\tif (typeof value === 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name.indexOf('-') != -1)) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\nexport let inEvent = false;\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\tinEvent = true;\n\ttry {\n\t\treturn this._listeners[e.type + false](\n\t\t\toptions.event ? options.event(e) : e\n\t\t);\n\t} finally {\n\t\tinEvent = false;\n\t}\n}\n\nfunction eventProxyCapture(e) {\n\tinEvent = true;\n\ttry {\n\t\treturn this._listeners[e.type + true](options.event ? options.event(e) : e);\n\t} finally {\n\t\tinEvent = false;\n\t}\n}\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { inEvent } from './diff/props';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function Component(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nComponent.prototype.setState = function(update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nComponent.prototype.forceUpdate = function(callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {import('./index').ComponentChildren | void}\n */\nComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet vnode = component._vnode,\n\t\toldDom = vnode._dom,\n\t\tparentDom = component._parentDom;\n\n\tif (parentDom) {\n\t\tlet commitQueue = [];\n\t\tconst oldVNode = assign({}, vnode);\n\t\toldVNode._original = vnode._original + 1;\n\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tvnode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tparentDom.ownerSVGElement !== undefined,\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\n\t\t\tvnode._hydrating\n\t\t);\n\t\tcommitRoot(commitQueue, vnode);\n\n\t\tif (vnode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(vnode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst microTick =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\nfunction defer(cb) {\n\tif (inEvent) {\n\t\tsetTimeout(cb);\n\t} else {\n\t\tmicroTick(cb);\n\t}\n}\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c;\n\trerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile ((c = rerenderQueue.shift())) {\n\t\tif (c._dirty) {\n\t\t\tlet renderQueueLength = rerenderQueue.length;\n\t\t\trenderComponent(c);\n\t\t\tif (rerenderQueue.length > renderQueueLength) {\n\t\t\t\t// When i.e. rerendering a provider additional new items can be injected, we want to\n\t\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t\t// single pass\n\t\t\t\trerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t\t\t}\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n", "import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\t/** @type {import('./internal').Component[]} */\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(c => {\n\t\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\n}\n", "export const EMPTY_OBJ = {};\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\n * children are being diffed\n * @param {import('../internal').ComponentChildren[]} renderResult\n * @param {import('../internal').VNode} newParentVNode The new virtual\n * node whose children should be diff'ed against oldParentVNode\n * @param {import('../internal').VNode} oldParentVNode The old virtual\n * node whose children should be diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by getChildContext\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet oldChildrenLength = oldChildren.length;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < renderResult.length; i++) {\n\t\tchildVNode = renderResult[i];\n\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t} else if (Array.isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t// const reuse = <div />\n\t\t\t// <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\t// Terser removes the `continue` here and wraps the loop body\n\t\t// in a `if (childVNode) { ... } condition\n\t\tif (childVNode == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Check if we find a corresponding element in oldChildren.\n\t\t// If found, delete the array item by setting to `undefined`.\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\n\t\t// (holes).\n\t\toldVNode = oldChildren[i];\n\n\t\tif (\n\t\t\toldVNode === null ||\n\t\t\t(oldVNode &&\n\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\tchildVNode.type === oldVNode.type)\n\t\t) {\n\t\t\toldChildren[i] = undefined;\n\t\t} else {\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\n\t\t\t\toldVNode = oldChildren[j];\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\n\t\t\t\t// We always match by type (in either case).\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\t\tchildVNode.type === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\toldChildren[j] = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toldVNode = null;\n\t\t\t}\n\t\t}\n\n\t\toldVNode = oldVNode || EMPTY_OBJ;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tisSvg,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating\n\t\t);\n\n\t\tnewDom = childVNode._dom;\n\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\n\t\t\tif (!refs) refs = [];\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\n\t\t}\n\n\t\tif (newDom != null) {\n\t\t\tif (firstChildDom == null) {\n\t\t\t\tfirstChildDom = newDom;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\t\tchildVNode._children === oldVNode._children\n\t\t\t) {\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldDom,\n\t\t\t\t\tparentDom\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldVNode,\n\t\t\t\t\toldChildren,\n\t\t\t\t\tnewDom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof newParentVNode.type == 'function') {\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\n\t\t\t\t//\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t\t\t\t// node's nextSibling.\n\t\t\t\tnewParentVNode._nextDom = oldDom;\n\t\t\t}\n\t\t} else if (\n\t\t\toldDom &&\n\t\t\toldVNode._dom == oldDom &&\n\t\t\toldDom.parentNode != parentDom\n\t\t) {\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\n\t\t\toldDom = getDomSibling(oldVNode);\n\t\t}\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\t// Remove remaining oldChildren if there are any.\n\tfor (i = oldChildrenLength; i--; ) {\n\t\tif (oldChildren[i] != null) {\n\t\t\tif (\n\t\t\t\ttypeof newParentVNode.type == 'function' &&\n\t\t\t\toldChildren[i]._dom != null &&\n\t\t\t\toldChildren[i]._dom == newParentVNode._nextDom\n\t\t\t) {\n\t\t\t\t// If the newParentVNode.__nextDom points to a dom node that is about to\n\t\t\t\t// be unmounted, then get the next sibling of that vnode and set\n\t\t\t\t// _nextDom to it\n\t\t\t\tnewParentVNode._nextDom = getLastDom(oldParentVNode).nextSibling;\n\t\t\t}\n\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\n\t\t}\n\t}\n\n\t// Set refs only after unmount\n\tif (refs) {\n\t\tfor (i = 0; i < refs.length; i++) {\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\n\t\t}\n\t}\n}\n\nfunction reorderChildren(childVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\tlet c = childVNode._children;\n\tlet tmp = 0;\n\tfor (; c && tmp < c.length; tmp++) {\n\t\tlet vnode = c[tmp];\n\t\tif (vnode) {\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\n\t\t\t// (childVNode here).\n\t\t\tvnode._parent = childVNode;\n\n\t\t\tif (typeof vnode.type == 'function') {\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(parentDom, vnode, vnode, c, vnode._dom, oldDom);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {import('../index').ComponentChildren} children The unflattened\n * children of a virtual node\n * @returns {import('../internal').VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (Array.isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\nfunction placeChild(\n\tparentDom,\n\tchildVNode,\n\toldVNode,\n\toldChildren,\n\tnewDom,\n\toldDom\n) {\n\tlet nextDom;\n\tif (childVNode._nextDom !== undefined) {\n\t\t// Only Fragments or components that return Fragment like VNodes will\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\n\t\t// of last DOM child of this child VNode\n\t\tnextDom = childVNode._nextDom;\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\n\t\t// can clean up the property\n\t\tchildVNode._nextDom = undefined;\n\t} else if (\n\t\toldVNode == null ||\n\t\tnewDom != oldDom ||\n\t\tnewDom.parentNode == null\n\t) {\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\n\t\t\tparentDom.appendChild(newDom);\n\t\t\tnextDom = null;\n\t\t} else {\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\n\t\t\tfor (\n\t\t\t\tlet sibDom = oldDom, j = 0;\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\n\t\t\t\tj += 1\n\t\t\t) {\n\t\t\t\tif (sibDom == newDom) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparentDom.insertBefore(newDom, oldDom);\n\t\t\tnextDom = oldDom;\n\t\t}\n\t}\n\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\n\t// See more detail in create-element.js:createVNode\n\tif (nextDom !== undefined) {\n\t\toldDom = nextDom;\n\t} else {\n\t\toldDom = newDom.nextSibling;\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * @param {import('../internal').VNode} vnode\n */\nfunction getLastDom(vnode) {\n\tif (vnode.type == null || typeof vnode.type === 'string') {\n\t\treturn vnode._dom;\n\t}\n\n\tif (vnode._children) {\n\t\tfor (let i = vnode._children.length - 1; i >= 0; i--) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child) {\n\t\t\t\tlet lastDom = getLastDom(child);\n\t\t\t\tif (lastDom) {\n\t\t\t\t\treturn lastDom;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n", "import { EMPTY_OBJ } from '../constants';\nimport { Component, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { diffProps, setProperty } from './props';\nimport { assign, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by getChildContext\n * @param {boolean} isSvg Whether or not this element is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} [isHydrating] Whether or not we are in hydration\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._hydrating != null) {\n\t\tisHydrating = oldVNode._hydrating;\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\t// if we resume, we want the tree to be \"unlocked\"\n\t\tnewVNode._hydrating = null;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\ttry {\n\t\touter: if (typeof newType == 'function') {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original === oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._hydrating = null;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\n\t\t\tc._force = false;\n\t\t} else if (\n\t\t\texcessDomChildren == null &&\n\t\t\tnewVNode._original === oldVNode._original\n\t\t) {\n\t\t\tnewVNode._children = oldVNode._children;\n\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t} else {\n\t\t\tnewVNode._dom = diffElementNodes(\n\t\t\t\toldVNode._dom,\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\tisHydrating\n\t\t\t);\n\t\t}\n\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\n\t} catch (e) {\n\t\tnewVNode._original = null;\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\tnewVNode._dom = oldDom;\n\t\t\tnewVNode._hydrating = !!isHydrating;\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t// ^ could possibly be simplified to:\n\t\t\t// excessDomChildren.length = 0;\n\t\t}\n\t\toptions._catchError(e, newVNode, oldVNode);\n\t}\n}\n\n/**\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').VNode} root\n */\nexport function commitRoot(commitQueue, root) {\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {import('../internal').PreactElement} dom The DOM element representing\n * the virtual nodes being diffed\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {*} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @returns {import('../internal').PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = newVNode.type;\n\tlet i = 0;\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tif (nodeType === 'svg') isSvg = true;\n\n\tif (excessDomChildren != null) {\n\t\tfor (; i < excessDomChildren.length; i++) {\n\t\t\tconst child = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tchild &&\n\t\t\t\t'setAttribute' in child === !!nodeType &&\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = child;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tif (isSvg) {\n\t\t\tdom = document.createElementNS(\n\t\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType\n\t\t\t);\n\t\t} else {\n\t\t\tdom = document.createElement(\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType,\n\t\t\t\tnewProps.is && newProps\n\t\t\t);\n\t\t}\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tif (!isHydrating) {\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\n\t\t\t// we should read the existing DOM attributes to diff them\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\toldProps = {};\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHtml || oldHtml) {\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\t\tif (\n\t\t\t\t\t!newHtml ||\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\n\t\t\t\t) {\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\ti = newVNode.props.children;\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tArray.isArray(i) ? i : [i],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (as above, don't diff props during hydration)\n\t\tif (!isHydrating) {\n\t\t\tif (\n\t\t\t\t'value' in newProps &&\n\t\t\t\t(i = newProps.value) !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(i !== dom.value ||\n\t\t\t\t\t(nodeType === 'progress' && !i) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && i !== oldProps.value))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t\tvnode._component = undefined;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type !== 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode === 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = (\n\t\t(!isHydrating && replaceNode) ||\n\t\tparentDom\n\t)._children = createElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.ownerSVGElement !== undefined,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n", "/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "import { options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\treturn hooks._list[index];\n}\n\n/**\n * @param {import('./index').StateUpdater<any>} [initialState]\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @param {import('./index').Reducer<any, any>} reducer\n * @param {import('./index').StateUpdater<any>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ any, (state: any) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tconst prevScu = currentComponent.shouldComponentUpdate;\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\tcurrentComponent.shouldComponentUpdate = function(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\tconst stateHooks = hookState._component.__hooks._list.filter(\n\t\t\t\t\tx => x._component\n\t\t\t\t);\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t};\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {any[]} args\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @param {() => any} factory\n * @param {any[]} args\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {any[]} args\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\n\t}\n}\n\n/**\n * @param {(error: any, errorInfo: import('preact').ErrorInfo) => void} cb\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\nexport function useId() {\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {any[]} oldArgs\n * @param {any[]} newArgs\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n", "/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/**\n * Check if two values are the same value\n * @param {*} x\n * @param {*} y\n * @returns {boolean}\n */\nexport function is(x, y) {\n\treturn (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\n", "import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p) {\n\tthis.props = p;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n", "import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tlet updateRef = ref == nextProps.ref;\n\t\tif (!updateRef && ref) {\n\t\t\tref.call ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\tif (!comparer) {\n\t\t\treturn shallowDiffers(this.props, nextProps);\n\t\t}\n\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed.prototype.isReactComponent = true;\n\tMemoed._forwarded = true;\n\treturn Memoed;\n}\n", "import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\tfunction Forwarded(props) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\treturn fn(clone, props.ref || null);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = Forwarded;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n", "import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n", "import { Component, createElement, options, Fragment } from 'preact';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function(error, newVNode, oldVNode, errorInfo) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode, errorInfo);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function(vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._hydrating === true) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tconst wasHydrating = suspendingVNode._hydrating === true;\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function() {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function(props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._hydrating = null;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\t/** @type {import('./internal').Component} */\n\tlet component = vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component;\n\tlet error;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!component) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn createElement(component, props);\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n", "import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function(child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function(props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\n\t// Iterate through all children after mounting for two reasons:\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t// each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t// The nodes can now be completely consumed from the linked list.\n\t// 2. Handle nodes that might have gotten resolved between render and\n\t// componentDidMount.\n\tthis._map.forEach((node, child) => {\n\t\tresolve(this, child, node);\n\t});\n};\n", "import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function() {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\n\t// conditional vnode. This should not trigger a render.\n\tif (props._vnode) {\n\t\tif (!_this._temp) {\n\t\t\t_this._container = container;\n\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t\t_this._temp = {\n\t\t\t\tnodeType: 1,\n\t\t\t\tparentNode: container,\n\t\t\t\tchildNodes: [],\n\t\t\t\tappendChild(child) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tinsertBefore(child, before) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tremoveChild(child) {\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t\t_this._container.removeChild(child);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// Render our wrapping element into temp.\n\t\trender(\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t\t_this._temp\n\t\t);\n\t}\n\t// When we come from a conditional render, on a mounted\n\t// portal we should clear the DOM.\n\telse if (_this._temp) {\n\t\t_this.componentWillUnmount();\n\t}\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\tconst el = createElement(Portal, { _vnode: vnode, _container: container });\n\tel.containerInfo = container;\n\treturn el;\n}\n", "import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\n\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/i\n\t\t: /fil|che|ra/i\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = {};\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\te.persist = empty;\n\te.isPropagationStopped = isPropagationStopped;\n\te.isDefaultPrevented = isDefaultPrevented;\n\treturn (e.nativeEvent = e);\n};\n\nfunction empty() {}\n\nfunction isPropagationStopped() {\n\treturn this.cancelBubble;\n}\n\nfunction isDefaultPrevented() {\n\treturn this.defaultPrevented;\n}\n\nlet classNameDescriptor = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\tlet type = vnode.type;\n\tlet props = vnode.props;\n\tlet normalizedProps = props;\n\n\t// only normalize props on Element nodes\n\tif (typeof type === 'string') {\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\n\t\tnormalizedProps = {};\n\n\t\tfor (let i in props) {\n\t\t\tlet value = props[i];\n\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t\tcontinue;\n\t\t\t} else if (i === 'value' && 'defaultValue' in props && value == null) {\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t\t// a default value\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\ti === 'defaultValue' &&\n\t\t\t\t'value' in props &&\n\t\t\t\tprops.value == null\n\t\t\t) {\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\t\ti = 'value';\n\t\t\t} else if (i === 'download' && value === true) {\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t\t// value will be used as the file name and the file will be called\n\t\t\t\t// \"true\" upon downloading it.\n\t\t\t\tvalue = '';\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\ti = 'oninput';\n\t\t\t} else if (/^onfocus$/i.test(i)) {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (/^onblur$/i.test(i)) {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\n\t\t\t\ti = i.replace(/[A-Z0-9]/g, '-$&').toLowerCase();\n\t\t\t} else if (value === null) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\n\t\t\t// Add support for onInput and onChange, see #3561\n\t\t\t// if we have an oninput prop already change it to oninputCapture\n\t\t\tif (/^oninput$/i.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t\tif (normalizedProps[i]) {\n\t\t\t\t\ti = 'oninputCapture';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnormalizedProps[i] = value;\n\t\t}\n\n\t\t// Add support for array select values: <select multiple value={[]} />\n\t\tif (\n\t\t\ttype == 'select' &&\n\t\t\tnormalizedProps.multiple &&\n\t\t\tArray.isArray(normalizedProps.value)\n\t\t) {\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tchild.props.selected =\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\n\t\t\t});\n\t\t}\n\n\t\t// Adding support for defaultValue in select tag\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tif (normalizedProps.multiple) {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\n\t\t\t\t} else {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvnode.props = normalizedProps;\n\n\t\tif (props.class != props.className) {\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\n\t\t}\n\t}\n\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\n\n\tif (oldVNodeHook) oldVNodeHook(vnode);\n};\n\n// Only needed for react-relay\nlet currentComponent;\nconst oldBeforeRender = options._render;\noptions._render = function(vnode) {\n\tif (oldBeforeRender) {\n\t\toldBeforeRender(vnode);\n\t}\n\tcurrentComponent = vnode._component;\n};\n\n// This is a very very private internal function for React it\n// is used to sort-of do runtime dependency injection. So far\n// only `react-relay` makes use of it. It uses it to read the\n// context value.\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n\tReactCurrentDispatcher: {\n\t\tcurrent: {\n\t\t\treadContext(context) {\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\n\t\t\t}\n\t\t}\n\t}\n};\n", "import {\n\tcreateElement,\n\trender as preactRender,\n\tcloneElement as preactCloneElement,\n\tcreateRef,\n\tComponent,\n\tcreateContext,\n\tFragment\n} from 'preact';\nimport {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue\n} from 'preact/hooks';\nimport { PureComponent } from './PureComponent';\nimport { memo } from './memo';\nimport { forwardRef } from './forwardRef';\nimport { Children } from './Children';\nimport { Suspense, lazy } from './suspense';\nimport { SuspenseList } from './suspense-list';\nimport { createPortal } from './portals';\nimport { is } from './util';\nimport {\n\thydrate,\n\trender,\n\tREACT_ELEMENT_TYPE,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n} from './render';\n\nconst version = '17.0.2'; // trick libraries to think we are react\n\n/**\n * Legacy version of createElement.\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\n */\nfunction createFactory(type) {\n\treturn createElement.bind(null, type);\n}\n\n/**\n * Check if the passed element is a valid (p)react node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isValidElement(element) {\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\n}\n\n/**\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\n * all vnode normalizations.\n * @param {import('./internal').VNode} element The vnode to clone\n * @param {object} props Props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\n */\nfunction cloneElement(element) {\n\tif (!isValidElement(element)) return element;\n\treturn preactCloneElement.apply(null, arguments);\n}\n\n/**\n * Remove a component tree from the DOM, including state and event handlers.\n * @param {import('./internal').PreactElement} container\n * @returns {boolean}\n */\nfunction unmountComponentAtNode(container) {\n\tif (container._children) {\n\t\tpreactRender(null, container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Get the matching DOM node for a component\n * @param {import('./internal').Component} component\n * @returns {import('./internal').PreactElement | null}\n */\nfunction findDOMNode(component) {\n\treturn (\n\t\t(component &&\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\n\t\tnull\n\t);\n}\n\n/**\n * Deprecated way to control batched rendering inside the reconciler, but we\n * already schedule in batches inside our rendering code\n * @template Arg\n * @param {(arg: Arg) => void} callback function that triggers the updated\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n */\n// eslint-disable-next-line camelcase\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\n\n/**\n * In React, `flushSync` flushes the entire tree and forces a rerender. It's\n * implmented here as a no-op.\n * @template Arg\n * @template Result\n * @param {(arg: Arg) => Result} callback function that runs before the flush\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n * @returns\n */\nconst flushSync = (callback, arg) => callback(arg);\n\n/**\n * Strict Mode is not implemented in Preact, so we provide a stand-in for it\n * that just renders its children without imposing any restrictions.\n */\nconst StrictMode = Fragment;\n\nexport function startTransition(cb) {\n\tcb();\n}\n\nexport function useDeferredValue(val) {\n\treturn val;\n}\n\nexport function useTransition() {\n\treturn [false, startTransition];\n}\n\n// TODO: in theory this should be done after a VNode is diffed as we want to insert\n// styles/... before it attaches\nexport const useInsertionEffect = useLayoutEffect;\n\n/**\n * This is taken from https://github.com/facebook/react/blob/main/packages/use-sync-external-store/src/useSyncExternalStoreShimClient.js#L84\n * on a high level this cuts out the warnings, ... and attempts a smaller implementation\n */\nexport function useSyncExternalStore(subscribe, getSnapshot) {\n\tconst value = getSnapshot();\n\n\tconst [{ _instance }, forceUpdate] = useState({\n\t\t_instance: { _value: value, _getSnapshot: getSnapshot }\n\t});\n\n\tuseLayoutEffect(() => {\n\t\t_instance._value = value;\n\t\t_instance._getSnapshot = getSnapshot;\n\n\t\tif (!is(_instance._value, getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\t}, [subscribe, value, getSnapshot]);\n\n\tuseEffect(() => {\n\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\n\t\treturn subscribe(() => {\n\t\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\t\tforceUpdate({ _instance });\n\t\t\t}\n\t\t});\n\t}, [subscribe]);\n\n\treturn value;\n}\n\nexport * from 'preact/hooks';\nexport {\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\t// eslint-disable-next-line camelcase\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n\n// React copies the named exports to the default one.\nexport default {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseInsertionEffect,\n\tuseTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tstartTransition,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n", "import * as preact from 'preact';\nimport { Component, createElement, isValidElement, Fragment } from 'preact';\nimport { createPortal } from 'preact/compat';\n\nconst styleTexts = [];\nconst styleEls = new Map();\nfunction injectStyles(styleText) {\n styleTexts.push(styleText);\n styleEls.forEach((styleEl) => {\n appendStylesTo(styleEl, styleText);\n });\n}\nfunction ensureElHasStyles(el) {\n if (el.isConnected && // sometimes true if SSR system simulates DOM\n el.getRootNode // sometimes undefined if SSR system simulates DOM\n ) {\n registerStylesRoot(el.getRootNode());\n }\n}\nfunction registerStylesRoot(rootNode) {\n let styleEl = styleEls.get(rootNode);\n if (!styleEl || !styleEl.isConnected) {\n styleEl = rootNode.querySelector('style[data-fullcalendar]');\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.setAttribute('data-fullcalendar', '');\n const nonce = getNonceValue();\n if (nonce) {\n styleEl.nonce = nonce;\n }\n const parentEl = rootNode === document ? document.head : rootNode;\n const insertBefore = rootNode === document\n ? parentEl.querySelector('script,link[rel=stylesheet],link[as=style],style')\n : parentEl.firstChild;\n parentEl.insertBefore(styleEl, insertBefore);\n }\n styleEls.set(rootNode, styleEl);\n hydrateStylesRoot(styleEl);\n }\n}\nfunction hydrateStylesRoot(styleEl) {\n for (const styleText of styleTexts) {\n appendStylesTo(styleEl, styleText);\n }\n}\nfunction appendStylesTo(styleEl, styleText) {\n const { sheet } = styleEl;\n const ruleCnt = sheet.cssRules.length;\n styleText.split('}').forEach((styleStr, i) => {\n styleStr = styleStr.trim();\n if (styleStr) {\n sheet.insertRule(styleStr + '}', ruleCnt + i);\n }\n });\n}\n// nonce\n// -------------------------------------------------------------------------------------------------\nlet queriedNonceValue;\nfunction getNonceValue() {\n if (queriedNonceValue === undefined) {\n queriedNonceValue = queryNonceValue();\n }\n return queriedNonceValue;\n}\n/*\nTODO: discourage meta tag and instead put nonce attribute on placeholder <style> tag\n*/\nfunction queryNonceValue() {\n const metaWithNonce = document.querySelector('meta[name=\"csp-nonce\"]');\n if (metaWithNonce && metaWithNonce.hasAttribute('content')) {\n return metaWithNonce.getAttribute('content');\n }\n const elWithNonce = document.querySelector('script[nonce]');\n if (elWithNonce) {\n return elWithNonce.nonce || '';\n }\n return '';\n}\n// main\n// -------------------------------------------------------------------------------------------------\nif (typeof document !== 'undefined') {\n registerStylesRoot(document);\n}\n\nvar css_248z = \":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\\\"data:application/x-font-ttf;charset=utf-8;base64,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\\\") format(\\\"truetype\\\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\\\"\\\\e900\\\"}.fc-icon-chevron-right:before{content:\\\"\\\\e901\\\"}.fc-icon-chevrons-left:before{content:\\\"\\\\e902\\\"}.fc-icon-chevrons-right:before{content:\\\"\\\\e903\\\"}.fc-icon-minus-square:before{content:\\\"\\\\e904\\\"}.fc-icon-plus-square:before{content:\\\"\\\\e905\\\"}.fc-icon-x:before{content:\\\"\\\\e906\\\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\\\"\\\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\\\"\\\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\\\"\\\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}\";\ninjectStyles(css_248z);\n\nclass DelayedRunner {\n constructor(drainedOption) {\n this.drainedOption = drainedOption;\n this.isRunning = false;\n this.isDirty = false;\n this.pauseDepths = {};\n this.timeoutId = 0;\n }\n request(delay) {\n this.isDirty = true;\n if (!this.isPaused()) {\n this.clearTimeout();\n if (delay == null) {\n this.tryDrain();\n }\n else {\n this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce\n this.tryDrain.bind(this), delay);\n }\n }\n }\n pause(scope = '') {\n let { pauseDepths } = this;\n pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;\n this.clearTimeout();\n }\n resume(scope = '', force) {\n let { pauseDepths } = this;\n if (scope in pauseDepths) {\n if (force) {\n delete pauseDepths[scope];\n }\n else {\n pauseDepths[scope] -= 1;\n let depth = pauseDepths[scope];\n if (depth <= 0) {\n delete pauseDepths[scope];\n }\n }\n this.tryDrain();\n }\n }\n isPaused() {\n return Object.keys(this.pauseDepths).length;\n }\n tryDrain() {\n if (!this.isRunning && !this.isPaused()) {\n this.isRunning = true;\n while (this.isDirty) {\n this.isDirty = false;\n this.drained(); // might set isDirty to true again\n }\n this.isRunning = false;\n }\n }\n clear() {\n this.clearTimeout();\n this.isDirty = false;\n this.pauseDepths = {};\n }\n clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = 0;\n }\n }\n drained() {\n if (this.drainedOption) {\n this.drainedOption();\n }\n }\n}\n\nfunction removeElement(el) {\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n}\n// Querying\n// ----------------------------------------------------------------------------------------------------------------\nfunction elementClosest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n // really bad fallback for IE\n // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n }\n if (!document.documentElement.contains(el)) {\n return null;\n }\n do {\n if (elementMatches(el, selector)) {\n return el;\n }\n el = (el.parentElement || el.parentNode);\n } while (el !== null && el.nodeType === 1);\n return null;\n}\nfunction elementMatches(el, selector) {\n let method = el.matches || el.matchesSelector || el.msMatchesSelector;\n return method.call(el, selector);\n}\n// accepts multiple subject els\n// returns a real array. good for methods like forEach\n// TODO: accept the document\nfunction findElements(container, selector) {\n let containers = container instanceof HTMLElement ? [container] : container;\n let allMatches = [];\n for (let i = 0; i < containers.length; i += 1) {\n let matches = containers[i].querySelectorAll(selector);\n for (let j = 0; j < matches.length; j += 1) {\n allMatches.push(matches[j]);\n }\n }\n return allMatches;\n}\n// accepts multiple subject els\n// only queries direct child elements // TODO: rename to findDirectChildren!\nfunction findDirectChildren(parent, selector) {\n let parents = parent instanceof HTMLElement ? [parent] : parent;\n let allMatches = [];\n for (let i = 0; i < parents.length; i += 1) {\n let childNodes = parents[i].children; // only ever elements\n for (let j = 0; j < childNodes.length; j += 1) {\n let childNode = childNodes[j];\n if (!selector || elementMatches(childNode, selector)) {\n allMatches.push(childNode);\n }\n }\n }\n return allMatches;\n}\n// Style\n// ----------------------------------------------------------------------------------------------------------------\nconst PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;\nfunction applyStyle(el, props) {\n for (let propName in props) {\n applyStyleProp(el, propName, props[propName]);\n }\n}\nfunction applyStyleProp(el, name, val) {\n if (val == null) {\n el.style[name] = '';\n }\n else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n el.style[name] = `${val}px`;\n }\n else {\n el.style[name] = val;\n }\n}\n// Event Handling\n// ----------------------------------------------------------------------------------------------------------------\n// if intercepting bubbled events at the document/window/body level,\n// and want to see originating element (the 'target'), use this util instead\n// of `ev.target` because it goes within web-component boundaries.\nfunction getEventTargetViaRoot(ev) {\n var _a, _b;\n return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;\n}\n// Unique ID for DOM attribute\nlet guid$1 = 0;\nfunction getUniqueDomId() {\n guid$1 += 1;\n return 'fc-dom-' + guid$1;\n}\n\n// Stops a mouse/touch event from doing it's native browser action\nfunction preventDefault(ev) {\n ev.preventDefault();\n}\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\nfunction buildDelegationHandler(selector, handler) {\n return (ev) => {\n let matchedChild = elementClosest(ev.target, selector);\n if (matchedChild) {\n handler.call(matchedChild, ev, matchedChild);\n }\n };\n}\nfunction listenBySelector(container, eventType, selector, handler) {\n let attachedHandler = buildDelegationHandler(selector, handler);\n container.addEventListener(eventType, attachedHandler);\n return () => {\n container.removeEventListener(eventType, attachedHandler);\n };\n}\nfunction listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {\n let currentMatchedChild;\n return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {\n if (matchedChild !== currentMatchedChild) {\n currentMatchedChild = matchedChild;\n onMouseEnter(mouseOverEv, matchedChild);\n let realOnMouseLeave = (mouseLeaveEv) => {\n currentMatchedChild = null;\n onMouseLeave(mouseLeaveEv, matchedChild);\n matchedChild.removeEventListener('mouseleave', realOnMouseLeave);\n };\n // listen to the next mouseleave, and then unattach\n matchedChild.addEventListener('mouseleave', realOnMouseLeave);\n }\n });\n}\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\nconst transitionEventNames = [\n 'webkitTransitionEnd',\n 'otransitionend',\n 'oTransitionEnd',\n 'msTransitionEnd',\n 'transitionend',\n];\n// triggered only when the next single subsequent transition finishes\nfunction whenTransitionDone(el, callback) {\n let realCallback = (ev) => {\n callback(ev);\n transitionEventNames.forEach((eventName) => {\n el.removeEventListener(eventName, realCallback);\n });\n };\n transitionEventNames.forEach((eventName) => {\n el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes\n });\n}\n// ARIA workarounds\n// ----------------------------------------------------------------------------------------------------------------\nfunction createAriaClickAttrs(handler) {\n return Object.assign({ onClick: handler }, createAriaKeyboardAttrs(handler));\n}\nfunction createAriaKeyboardAttrs(handler) {\n return {\n tabIndex: 0,\n onKeyDown(ev) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n handler(ev);\n ev.preventDefault(); // if space, don't scroll down page\n }\n },\n };\n}\n\nlet guidNumber = 0;\nfunction guid() {\n guidNumber += 1;\n return String(guidNumber);\n}\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n// Make the mouse cursor express that an event is not allowed in the current area\nfunction disableCursor() {\n document.body.classList.add('fc-not-allowed');\n}\n// Returns the mouse cursor to its original look\nfunction enableCursor() {\n document.body.classList.remove('fc-not-allowed');\n}\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\nfunction preventSelection(el) {\n el.style.userSelect = 'none';\n el.style.webkitUserSelect = 'none';\n el.addEventListener('selectstart', preventDefault);\n}\nfunction allowSelection(el) {\n el.style.userSelect = '';\n el.style.webkitUserSelect = '';\n el.removeEventListener('selectstart', preventDefault);\n}\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\nfunction preventContextMenu(el) {\n el.addEventListener('contextmenu', preventDefault);\n}\nfunction allowContextMenu(el) {\n el.removeEventListener('contextmenu', preventDefault);\n}\nfunction parseFieldSpecs(input) {\n let specs = [];\n let tokens = [];\n let i;\n let token;\n if (typeof input === 'string') {\n tokens = input.split(/\\s*,\\s*/);\n }\n else if (typeof input === 'function') {\n tokens = [input];\n }\n else if (Array.isArray(input)) {\n tokens = input;\n }\n for (i = 0; i < tokens.length; i += 1) {\n token = tokens[i];\n if (typeof token === 'string') {\n specs.push(token.charAt(0) === '-' ?\n { field: token.substring(1), order: -1 } :\n { field: token, order: 1 });\n }\n else if (typeof token === 'function') {\n specs.push({ func: token });\n }\n }\n return specs;\n}\nfunction compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n let i;\n let cmp;\n for (i = 0; i < fieldSpecs.length; i += 1) {\n cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);\n if (cmp) {\n return cmp;\n }\n }\n return 0;\n}\nfunction compareByFieldSpec(obj0, obj1, fieldSpec) {\n if (fieldSpec.func) {\n return fieldSpec.func(obj0, obj1);\n }\n return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n * (fieldSpec.order || 1);\n}\nfunction flexibleCompare(a, b) {\n if (!a && !b) {\n return 0;\n }\n if (b == null) {\n return -1;\n }\n if (a == null) {\n return 1;\n }\n if (typeof a === 'string' || typeof b === 'string') {\n return String(a).localeCompare(String(b));\n }\n return a - b;\n}\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nfunction padStart(val, len) {\n let s = String(val);\n return '000'.substr(0, len - s.length) + s;\n}\nfunction formatWithOrdinals(formatter, args, fallbackText) {\n if (typeof formatter === 'function') {\n return formatter(...args);\n }\n if (typeof formatter === 'string') { // non-blank string\n return args.reduce((str, arg, index) => (str.replace('$' + index, arg || '')), formatter);\n }\n return fallbackText;\n}\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\nfunction compareNumbers(a, b) {\n return a - b;\n}\nfunction isInt(n) {\n return n % 1 === 0;\n}\n/* FC-specific DOM dimension stuff\n----------------------------------------------------------------------------------------------------------------------*/\nfunction computeSmallestCellWidth(cellEl) {\n let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');\n let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');\n if (!allWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const\n }\n if (!contentWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-cushion className');\n }\n return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border\n contentWidthEl.getBoundingClientRect().width;\n}\n\nconst INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];\nconst PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/;\n// Parsing and Creation\nfunction createDuration(input, unit) {\n if (typeof input === 'string') {\n return parseString(input);\n }\n if (typeof input === 'object' && input) { // non-null object\n return parseObject(input);\n }\n if (typeof input === 'number') {\n return parseObject({ [unit || 'milliseconds']: input });\n }\n return null;\n}\nfunction parseString(s) {\n let m = PARSE_RE.exec(s);\n if (m) {\n let sign = m[1] ? -1 : 1;\n return {\n years: 0,\n months: 0,\n days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n (m[6] ? parseInt(m[6], 10) : 0) // ms\n ),\n };\n }\n return null;\n}\nfunction parseObject(obj) {\n let duration = {\n years: obj.years || obj.year || 0,\n months: obj.months || obj.month || 0,\n days: obj.days || obj.day || 0,\n milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n (obj.seconds || obj.second || 0) * 1000 + // seconds\n (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms\n };\n let weeks = obj.weeks || obj.week;\n if (weeks) {\n duration.days += weeks * 7;\n duration.specifiedWeeks = true;\n }\n return duration;\n}\n// Equality\nfunction durationsEqual(d0, d1) {\n return d0.years === d1.years &&\n d0.months === d1.months &&\n d0.days === d1.days &&\n d0.milliseconds === d1.milliseconds;\n}\nfunction asCleanDays(dur) {\n if (!dur.years && !dur.months && !dur.milliseconds) {\n return dur.days;\n }\n return 0;\n}\n// Simple Math\nfunction addDurations(d0, d1) {\n return {\n years: d0.years + d1.years,\n months: d0.months + d1.months,\n days: d0.days + d1.days,\n milliseconds: d0.milliseconds + d1.milliseconds,\n };\n}\nfunction subtractDurations(d1, d0) {\n return {\n years: d1.years - d0.years,\n months: d1.months - d0.months,\n days: d1.days - d0.days,\n milliseconds: d1.milliseconds - d0.milliseconds,\n };\n}\nfunction multiplyDuration(d, n) {\n return {\n years: d.years * n,\n months: d.months * n,\n days: d.days * n,\n milliseconds: d.milliseconds * n,\n };\n}\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\nfunction asRoughYears(dur) {\n return asRoughDays(dur) / 365;\n}\nfunction asRoughMonths(dur) {\n return asRoughDays(dur) / 30;\n}\nfunction asRoughDays(dur) {\n return asRoughMs(dur) / 864e5;\n}\nfunction asRoughMinutes(dur) {\n return asRoughMs(dur) / (1000 * 60);\n}\nfunction asRoughSeconds(dur) {\n return asRoughMs(dur) / 1000;\n}\nfunction asRoughMs(dur) {\n return dur.years * (365 * 864e5) +\n dur.months * (30 * 864e5) +\n dur.days * 864e5 +\n dur.milliseconds;\n}\n// Advanced Math\nfunction wholeDivideDurations(numerator, denominator) {\n let res = null;\n for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {\n let unit = INTERNAL_UNITS[i];\n if (denominator[unit]) {\n let localRes = numerator[unit] / denominator[unit];\n if (!isInt(localRes) || (res !== null && res !== localRes)) {\n return null;\n }\n res = localRes;\n }\n else if (numerator[unit]) {\n // needs to divide by something but can't!\n return null;\n }\n }\n return res;\n}\nfunction greatestDurationDenominator(dur) {\n let ms = dur.milliseconds;\n if (ms) {\n if (ms % 1000 !== 0) {\n return { unit: 'millisecond', value: ms };\n }\n if (ms % (1000 * 60) !== 0) {\n return { unit: 'second', value: ms / 1000 };\n }\n if (ms % (1000 * 60 * 60) !== 0) {\n return { unit: 'minute', value: ms / (1000 * 60) };\n }\n if (ms) {\n return { unit: 'hour', value: ms / (1000 * 60 * 60) };\n }\n }\n if (dur.days) {\n if (dur.specifiedWeeks && dur.days % 7 === 0) {\n return { unit: 'week', value: dur.days / 7 };\n }\n return { unit: 'day', value: dur.days };\n }\n if (dur.months) {\n return { unit: 'month', value: dur.months };\n }\n if (dur.years) {\n return { unit: 'year', value: dur.years };\n }\n return { unit: 'millisecond', value: 0 };\n}\n\n// TODO: new util arrayify?\nfunction removeExact(array, exactVal) {\n let removeCnt = 0;\n let i = 0;\n while (i < array.length) {\n if (array[i] === exactVal) {\n array.splice(i, 1);\n removeCnt += 1;\n }\n else {\n i += 1;\n }\n }\n return removeCnt;\n}\nfunction isArraysEqual(a0, a1, equalityFunc) {\n if (a0 === a1) {\n return true;\n }\n let len = a0.length;\n let i;\n if (len !== a1.length) { // not array? or not same length?\n return false;\n }\n for (i = 0; i < len; i += 1) {\n if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {\n return false;\n }\n }\n return true;\n}\n\nconst DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\n// Adding\nfunction addWeeks(m, n) {\n let a = dateToUtcArray(m);\n a[2] += n * 7;\n return arrayToUtcDate(a);\n}\nfunction addDays(m, n) {\n let a = dateToUtcArray(m);\n a[2] += n;\n return arrayToUtcDate(a);\n}\nfunction addMs(m, n) {\n let a = dateToUtcArray(m);\n a[6] += n;\n return arrayToUtcDate(a);\n}\n// Diffing (all return floats)\n// TODO: why not use ranges?\nfunction diffWeeks(m0, m1) {\n return diffDays(m0, m1) / 7;\n}\nfunction diffDays(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);\n}\nfunction diffHours(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);\n}\nfunction diffMinutes(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60);\n}\nfunction diffSeconds(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / 1000;\n}\nfunction diffDayAndTime(m0, m1) {\n let m0day = startOfDay(m0);\n let m1day = startOfDay(m1);\n return {\n years: 0,\n months: 0,\n days: Math.round(diffDays(m0day, m1day)),\n milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),\n };\n}\n// Diffing Whole Units\nfunction diffWholeWeeks(m0, m1) {\n let d = diffWholeDays(m0, m1);\n if (d !== null && d % 7 === 0) {\n return d / 7;\n }\n return null;\n}\nfunction diffWholeDays(m0, m1) {\n if (timeAsMs(m0) === timeAsMs(m1)) {\n return Math.round(diffDays(m0, m1));\n }\n return null;\n}\n// Start-Of\nfunction startOfDay(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n ]);\n}\nfunction startOfHour(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n ]);\n}\nfunction startOfMinute(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n ]);\n}\nfunction startOfSecond(m) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n m.getUTCSeconds(),\n ]);\n}\n// Week Computation\nfunction weekOfYear(marker, dow, doy) {\n let y = marker.getUTCFullYear();\n let w = weekOfGivenYear(marker, y, dow, doy);\n if (w < 1) {\n return weekOfGivenYear(marker, y - 1, dow, doy);\n }\n let nextW = weekOfGivenYear(marker, y + 1, dow, doy);\n if (nextW >= 1) {\n return Math.min(w, nextW);\n }\n return w;\n}\nfunction weekOfGivenYear(marker, year, dow, doy) {\n let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);\n let dayStart = startOfDay(marker);\n let days = Math.round(diffDays(firstWeekStart, dayStart));\n return Math.floor(days / 7) + 1; // zero-indexed\n}\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n let fwd = 7 + dow - doy;\n // first-week day local weekday -- which local weekday is fwd\n let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n}\n// Array Conversion\nfunction dateToLocalArray(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ];\n}\nfunction arrayToLocalDate(a) {\n return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month\n a[3] || 0, a[4] || 0, a[5] || 0);\n}\nfunction dateToUtcArray(date) {\n return [\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds(),\n ];\n}\nfunction arrayToUtcDate(a) {\n // according to web standards (and Safari), a month index is required.\n // massage if only given a year.\n if (a.length === 1) {\n a = a.concat([0]);\n }\n return new Date(Date.UTC(...a));\n}\n// Other Utils\nfunction isValidDate(m) {\n return !isNaN(m.valueOf());\n}\nfunction timeAsMs(m) {\n return m.getUTCHours() * 1000 * 60 * 60 +\n m.getUTCMinutes() * 1000 * 60 +\n m.getUTCSeconds() * 1000 +\n m.getUTCMilliseconds();\n}\n\n// timeZoneOffset is in minutes\nfunction buildIsoString(marker, timeZoneOffset, stripZeroTime = false) {\n let s = marker.toISOString();\n s = s.replace('.000', '');\n if (stripZeroTime) {\n s = s.replace('T00:00:00Z', '');\n }\n if (s.length > 10) { // time part wasn't stripped, can add timezone info\n if (timeZoneOffset == null) {\n s = s.replace('Z', '');\n }\n else if (timeZoneOffset !== 0) {\n s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));\n }\n // otherwise, its UTC-0 and we want to keep the Z\n }\n return s;\n}\n// formats the date, but with no time part\n// TODO: somehow merge with buildIsoString and stripZeroTime\n// TODO: rename. omit \"string\"\nfunction formatDayString(marker) {\n return marker.toISOString().replace(/T.*$/, '');\n}\nfunction formatIsoMonthStr(marker) {\n return marker.toISOString().match(/^\\d{4}-\\d{2}/)[0];\n}\n// TODO: use Date::toISOString and use everything after the T?\nfunction formatIsoTimeString(marker) {\n return padStart(marker.getUTCHours(), 2) + ':' +\n padStart(marker.getUTCMinutes(), 2) + ':' +\n padStart(marker.getUTCSeconds(), 2);\n}\nfunction formatTimeZoneOffset(minutes, doIso = false) {\n let sign = minutes < 0 ? '-' : '+';\n let abs = Math.abs(minutes);\n let hours = Math.floor(abs / 60);\n let mins = Math.round(abs % 60);\n if (doIso) {\n return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`;\n }\n return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`;\n}\n\nfunction memoize(workerFunc, resEquality, teardownFunc) {\n let currentArgs;\n let currentRes;\n return function (...newArgs) {\n if (!currentArgs) {\n currentRes = workerFunc.apply(this, newArgs);\n }\n else if (!isArraysEqual(currentArgs, newArgs)) {\n if (teardownFunc) {\n teardownFunc(currentRes);\n }\n let res = workerFunc.apply(this, newArgs);\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res;\n }\n }\n currentArgs = newArgs;\n return currentRes;\n };\n}\nfunction memoizeObjArg(workerFunc, resEquality, teardownFunc) {\n let currentArg;\n let currentRes;\n return (newArg) => {\n if (!currentArg) {\n currentRes = workerFunc.call(this, newArg);\n }\n else if (!isPropsEqual(currentArg, newArg)) {\n if (teardownFunc) {\n teardownFunc(currentRes);\n }\n let res = workerFunc.call(this, newArg);\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res;\n }\n }\n currentArg = newArg;\n return currentRes;\n };\n}\nfunction memoizeArraylike(// used at all?\nworkerFunc, resEquality, teardownFunc) {\n let currentArgSets = [];\n let currentResults = [];\n return (newArgSets) => {\n let currentLen = currentArgSets.length;\n let newLen = newArgSets.length;\n let i = 0;\n for (; i < currentLen; i += 1) {\n if (!newArgSets[i]) { // one of the old sets no longer exists\n if (teardownFunc) {\n teardownFunc(currentResults[i]);\n }\n }\n else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {\n if (teardownFunc) {\n teardownFunc(currentResults[i]);\n }\n let res = workerFunc.apply(this, newArgSets[i]);\n if (!resEquality || !resEquality(res, currentResults[i])) {\n currentResults[i] = res;\n }\n }\n }\n for (; i < newLen; i += 1) {\n currentResults[i] = workerFunc.apply(this, newArgSets[i]);\n }\n currentArgSets = newArgSets;\n currentResults.splice(newLen); // remove excess\n return currentResults;\n };\n}\nfunction memoizeHashlike(workerFunc, resEquality, teardownFunc) {\n let currentArgHash = {};\n let currentResHash = {};\n return (newArgHash) => {\n let newResHash = {};\n for (let key in newArgHash) {\n if (!currentResHash[key]) {\n newResHash[key] = workerFunc.apply(this, newArgHash[key]);\n }\n else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {\n if (teardownFunc) {\n teardownFunc(currentResHash[key]);\n }\n let res = workerFunc.apply(this, newArgHash[key]);\n newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))\n ? currentResHash[key]\n : res;\n }\n else {\n newResHash[key] = currentResHash[key];\n }\n }\n currentArgHash = newArgHash;\n currentResHash = newResHash;\n return newResHash;\n };\n}\n\nconst EXTENDED_SETTINGS_AND_SEVERITIES = {\n week: 3,\n separator: 0,\n omitZeroMinute: 0,\n meridiem: 0,\n omitCommas: 0,\n};\nconst STANDARD_DATE_PROP_SEVERITIES = {\n timeZoneName: 7,\n era: 6,\n year: 5,\n month: 4,\n day: 2,\n weekday: 2,\n hour: 1,\n minute: 1,\n second: 1,\n};\nconst MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i; // eats up leading spaces too\nconst COMMA_RE = /,/g; // we need re for globalness\nconst MULTI_SPACE_RE = /\\s+/g;\nconst LTR_RE = /\\u200e/g; // control character\nconst UTC_RE = /UTC|GMT/;\nclass NativeFormatter {\n constructor(formatSettings) {\n let standardDateProps = {};\n let extendedSettings = {};\n let severity = 0;\n for (let name in formatSettings) {\n if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n extendedSettings[name] = formatSettings[name];\n severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity);\n }\n else {\n standardDateProps[name] = formatSettings[name];\n if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity\n severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity);\n }\n }\n }\n this.standardDateProps = standardDateProps;\n this.extendedSettings = extendedSettings;\n this.severity = severity;\n this.buildFormattingFunc = memoize(buildFormattingFunc);\n }\n format(date, context) {\n return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);\n }\n formatRange(start, end, context, betterDefaultSeparator) {\n let { standardDateProps, extendedSettings } = this;\n let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);\n if (!diffSeverity) {\n return this.format(start, context);\n }\n let biggestUnitForPartial = diffSeverity;\n if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {\n biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time\n }\n let full0 = this.format(start, context);\n let full1 = this.format(end, context);\n if (full0 === full1) {\n return full0;\n }\n let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);\n let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);\n let partial0 = partialFormattingFunc(start);\n let partial1 = partialFormattingFunc(end);\n let insertion = findCommonInsertion(full0, partial0, full1, partial1);\n let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';\n if (insertion) {\n return insertion.before + partial0 + separator + partial1 + insertion.after;\n }\n return full0 + separator + full1;\n }\n getLargestUnit() {\n switch (this.severity) {\n case 7:\n case 6:\n case 5:\n return 'year';\n case 4:\n return 'month';\n case 3:\n return 'week';\n case 2:\n return 'day';\n default:\n return 'time'; // really?\n }\n }\n}\nfunction buildFormattingFunc(standardDateProps, extendedSettings, context) {\n let standardDatePropCnt = Object.keys(standardDateProps).length;\n if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n return (date) => (formatTimeZoneOffset(date.timeZoneOffset));\n }\n if (standardDatePropCnt === 0 && extendedSettings.week) {\n return (date) => (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week));\n }\n return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);\n}\nfunction buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {\n standardDateProps = Object.assign({}, standardDateProps); // copy\n extendedSettings = Object.assign({}, extendedSettings); // copy\n sanitizeSettings(standardDateProps, extendedSettings);\n standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers\n let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);\n let zeroFormat; // needed?\n if (extendedSettings.omitZeroMinute) {\n let zeroProps = Object.assign({}, standardDateProps);\n delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings\n zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);\n }\n return (date) => {\n let { marker } = date;\n let format;\n if (zeroFormat && !marker.getUTCMinutes()) {\n format = zeroFormat;\n }\n else {\n format = normalFormat;\n }\n let s = format.format(marker);\n return postProcess(s, date, standardDateProps, extendedSettings, context);\n };\n}\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n // deal with a browser inconsistency where formatting the timezone\n // requires that the hour/minute be present.\n if (standardDateProps.timeZoneName) {\n if (!standardDateProps.hour) {\n standardDateProps.hour = '2-digit';\n }\n if (!standardDateProps.minute) {\n standardDateProps.minute = '2-digit';\n }\n }\n // only support short timezone names\n if (standardDateProps.timeZoneName === 'long') {\n standardDateProps.timeZoneName = 'short';\n }\n // if requesting to display seconds, MUST display minutes\n if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n delete extendedSettings.omitZeroMinute;\n }\n}\nfunction postProcess(s, date, standardDateProps, extendedSettings, context) {\n s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes\n if (standardDateProps.timeZoneName === 'short') {\n s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n 'UTC' : // important to normalize for IE, which does \"GMT\"\n formatTimeZoneOffset(date.timeZoneOffset));\n }\n if (extendedSettings.omitCommas) {\n s = s.replace(COMMA_RE, '').trim();\n }\n if (extendedSettings.omitZeroMinute) {\n s = s.replace(':00', ''); // zeroFormat doesn't always achieve this\n }\n // ^ do anything that might create adjacent spaces before this point,\n // because MERIDIEM_RE likes to eat up loading spaces\n if (extendedSettings.meridiem === false) {\n s = s.replace(MERIDIEM_RE, '').trim();\n }\n else if (extendedSettings.meridiem === 'narrow') { // a/p\n s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase());\n }\n else if (extendedSettings.meridiem === 'short') { // am/pm\n s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`);\n }\n else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase());\n }\n s = s.replace(MULTI_SPACE_RE, ' ');\n s = s.trim();\n return s;\n}\nfunction injectTzoStr(s, tzoStr) {\n let replaced = false;\n s = s.replace(UTC_RE, () => {\n replaced = true;\n return tzoStr;\n });\n // IE11 doesn't include UTC/GMT in the original string, so append to end\n if (!replaced) {\n s += ` ${tzoStr}`;\n }\n return s;\n}\nfunction formatWeekNumber(num, weekText, weekTextLong, locale, display) {\n let parts = [];\n if (display === 'long') {\n parts.push(weekTextLong);\n }\n else if (display === 'short' || display === 'narrow') {\n parts.push(weekText);\n }\n if (display === 'long' || display === 'short') {\n parts.push(' ');\n }\n parts.push(locale.simpleNumberFormat.format(num));\n if (locale.options.direction === 'rtl') { // TODO: use control characters instead?\n parts.reverse();\n }\n return parts.join('');\n}\n// Range Formatting Utils\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0, d1, ca) {\n if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n return 5;\n }\n if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n return 4;\n }\n if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n return 2;\n }\n if (timeAsMs(d0) !== timeAsMs(d1)) {\n return 1;\n }\n return 0;\n}\nfunction computePartialFormattingOptions(options, biggestUnit) {\n let partialOptions = {};\n for (let name in options) {\n if (!(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {\n partialOptions[name] = options[name];\n }\n }\n return partialOptions;\n}\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n let i0 = 0;\n while (i0 < full0.length) {\n let found0 = full0.indexOf(partial0, i0);\n if (found0 === -1) {\n break;\n }\n let before0 = full0.substr(0, found0);\n i0 = found0 + partial0.length;\n let after0 = full0.substr(i0);\n let i1 = 0;\n while (i1 < full1.length) {\n let found1 = full1.indexOf(partial1, i1);\n if (found1 === -1) {\n break;\n }\n let before1 = full1.substr(0, found1);\n i1 = found1 + partial1.length;\n let after1 = full1.substr(i1);\n if (before0 === before1 && after0 === after1) {\n return {\n before: before0,\n after: after0,\n };\n }\n }\n }\n return null;\n}\n\nfunction expandZonedMarker(dateInfo, calendarSystem) {\n let a = calendarSystem.markerToArray(dateInfo.marker);\n return {\n marker: dateInfo.marker,\n timeZoneOffset: dateInfo.timeZoneOffset,\n array: a,\n year: a[0],\n month: a[1],\n day: a[2],\n hour: a[3],\n minute: a[4],\n second: a[5],\n millisecond: a[6],\n };\n}\n\nfunction createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {\n let startInfo = expandZonedMarker(start, context.calendarSystem);\n let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;\n return {\n date: startInfo,\n start: startInfo,\n end: endInfo,\n timeZone: context.timeZone,\n localeCodes: context.locale.codes,\n defaultSeparator: betterDefaultSeparator || context.defaultSeparator,\n };\n}\n\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nclass CmdFormatter {\n constructor(cmdStr) {\n this.cmdStr = cmdStr;\n }\n format(date, context, betterDefaultSeparator) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n }\n formatRange(start, end, context, betterDefaultSeparator) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n }\n}\n\nclass FuncFormatter {\n constructor(func) {\n this.func = func;\n }\n format(date, context, betterDefaultSeparator) {\n return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n }\n formatRange(start, end, context, betterDefaultSeparator) {\n return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n }\n}\n\nfunction createFormatter(input) {\n if (typeof input === 'object' && input) { // non-null object\n return new NativeFormatter(input);\n }\n if (typeof input === 'string') {\n return new CmdFormatter(input);\n }\n if (typeof input === 'function') {\n return new FuncFormatter(input);\n }\n return null;\n}\n\n// base options\n// ------------\nconst BASE_OPTION_REFINERS = {\n navLinkDayClick: identity,\n navLinkWeekClick: identity,\n duration: createDuration,\n bootstrapFontAwesome: identity,\n buttonIcons: identity,\n customButtons: identity,\n defaultAllDayEventDuration: createDuration,\n defaultTimedEventDuration: createDuration,\n nextDayThreshold: createDuration,\n scrollTime: createDuration,\n scrollTimeReset: Boolean,\n slotMinTime: createDuration,\n slotMaxTime: createDuration,\n dayPopoverFormat: createFormatter,\n slotDuration: createDuration,\n snapDuration: createDuration,\n headerToolbar: identity,\n footerToolbar: identity,\n defaultRangeSeparator: String,\n titleRangeSeparator: String,\n forceEventDuration: Boolean,\n dayHeaders: Boolean,\n dayHeaderFormat: createFormatter,\n dayHeaderClassNames: identity,\n dayHeaderContent: identity,\n dayHeaderDidMount: identity,\n dayHeaderWillUnmount: identity,\n dayCellClassNames: identity,\n dayCellContent: identity,\n dayCellDidMount: identity,\n dayCellWillUnmount: identity,\n initialView: String,\n aspectRatio: Number,\n weekends: Boolean,\n weekNumberCalculation: identity,\n weekNumbers: Boolean,\n weekNumberClassNames: identity,\n weekNumberContent: identity,\n weekNumberDidMount: identity,\n weekNumberWillUnmount: identity,\n editable: Boolean,\n viewClassNames: identity,\n viewDidMount: identity,\n viewWillUnmount: identity,\n nowIndicator: Boolean,\n nowIndicatorClassNames: identity,\n nowIndicatorContent: identity,\n nowIndicatorDidMount: identity,\n nowIndicatorWillUnmount: identity,\n showNonCurrentDates: Boolean,\n lazyFetching: Boolean,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n timeZone: String,\n locales: identity,\n locale: identity,\n themeSystem: String,\n dragRevertDuration: Number,\n dragScroll: Boolean,\n allDayMaintainDuration: Boolean,\n unselectAuto: Boolean,\n dropAccept: identity,\n eventOrder: parseFieldSpecs,\n eventOrderStrict: Boolean,\n handleWindowResize: Boolean,\n windowResizeDelay: Number,\n longPressDelay: Number,\n eventDragMinDistance: Number,\n expandRows: Boolean,\n height: identity,\n contentHeight: identity,\n direction: String,\n weekNumberFormat: createFormatter,\n eventResizableFromStart: Boolean,\n displayEventTime: Boolean,\n displayEventEnd: Boolean,\n weekText: String,\n weekTextLong: String,\n progressiveEventRendering: Boolean,\n businessHours: identity,\n initialDate: identity,\n now: identity,\n eventDataTransform: identity,\n stickyHeaderDates: identity,\n stickyFooterScrollbar: identity,\n viewHeight: identity,\n defaultAllDay: Boolean,\n eventSourceFailure: identity,\n eventSourceSuccess: identity,\n eventDisplay: String,\n eventStartEditable: Boolean,\n eventDurationEditable: Boolean,\n eventOverlap: identity,\n eventConstraint: identity,\n eventAllow: identity,\n eventBackgroundColor: String,\n eventBorderColor: String,\n eventTextColor: String,\n eventColor: String,\n eventClassNames: identity,\n eventContent: identity,\n eventDidMount: identity,\n eventWillUnmount: identity,\n selectConstraint: identity,\n selectOverlap: identity,\n selectAllow: identity,\n droppable: Boolean,\n unselectCancel: String,\n slotLabelFormat: identity,\n slotLaneClassNames: identity,\n slotLaneContent: identity,\n slotLaneDidMount: identity,\n slotLaneWillUnmount: identity,\n slotLabelClassNames: identity,\n slotLabelContent: identity,\n slotLabelDidMount: identity,\n slotLabelWillUnmount: identity,\n dayMaxEvents: identity,\n dayMaxEventRows: identity,\n dayMinWidth: Number,\n slotLabelInterval: createDuration,\n allDayText: String,\n allDayClassNames: identity,\n allDayContent: identity,\n allDayDidMount: identity,\n allDayWillUnmount: identity,\n slotMinWidth: Number,\n navLinks: Boolean,\n eventTimeFormat: createFormatter,\n rerenderDelay: Number,\n moreLinkText: identity,\n moreLinkHint: identity,\n selectMinDistance: Number,\n selectable: Boolean,\n selectLongPressDelay: Number,\n eventLongPressDelay: Number,\n selectMirror: Boolean,\n eventMaxStack: Number,\n eventMinHeight: Number,\n eventMinWidth: Number,\n eventShortHeight: Number,\n slotEventOverlap: Boolean,\n plugins: identity,\n firstDay: Number,\n dayCount: Number,\n dateAlignment: String,\n dateIncrement: createDuration,\n hiddenDays: identity,\n fixedWeekCount: Boolean,\n validRange: identity,\n visibleRange: identity,\n titleFormat: identity,\n eventInteractive: Boolean,\n // only used by list-view, but languages define the value, so we need it in base options\n noEventsText: String,\n viewHint: identity,\n navLinkHint: identity,\n closeHint: String,\n timeHint: String,\n eventHint: String,\n moreLinkClick: identity,\n moreLinkClassNames: identity,\n moreLinkContent: identity,\n moreLinkDidMount: identity,\n moreLinkWillUnmount: identity,\n monthStartFormat: createFormatter,\n // for connectors\n // (can't be part of plugin system b/c must be provided at runtime)\n handleCustomRendering: identity,\n customRenderingMetaMap: identity,\n customRenderingReplaces: Boolean,\n};\n// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.\n// raw values.\nconst BASE_OPTION_DEFAULTS = {\n eventDisplay: 'auto',\n defaultRangeSeparator: ' - ',\n titleRangeSeparator: ' \\u2013 ',\n defaultTimedEventDuration: '01:00:00',\n defaultAllDayEventDuration: { day: 1 },\n forceEventDuration: false,\n nextDayThreshold: '00:00:00',\n dayHeaders: true,\n initialView: '',\n aspectRatio: 1.35,\n headerToolbar: {\n start: 'title',\n center: '',\n end: 'today prev,next',\n },\n weekends: true,\n weekNumbers: false,\n weekNumberCalculation: 'local',\n editable: false,\n nowIndicator: false,\n scrollTime: '06:00:00',\n scrollTimeReset: true,\n slotMinTime: '00:00:00',\n slotMaxTime: '24:00:00',\n showNonCurrentDates: true,\n lazyFetching: true,\n startParam: 'start',\n endParam: 'end',\n timeZoneParam: 'timeZone',\n timeZone: 'local',\n locales: [],\n locale: '',\n themeSystem: 'standard',\n dragRevertDuration: 500,\n dragScroll: true,\n allDayMaintainDuration: false,\n unselectAuto: true,\n dropAccept: '*',\n eventOrder: 'start,-duration,allDay,title',\n dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n handleWindowResize: true,\n windowResizeDelay: 100,\n longPressDelay: 1000,\n eventDragMinDistance: 5,\n expandRows: false,\n navLinks: false,\n selectable: false,\n eventMinHeight: 15,\n eventMinWidth: 30,\n eventShortHeight: 30,\n monthStartFormat: { month: 'long', day: 'numeric' },\n};\n// calendar listeners\n// ------------------\nconst CALENDAR_LISTENER_REFINERS = {\n datesSet: identity,\n eventsSet: identity,\n eventAdd: identity,\n eventChange: identity,\n eventRemove: identity,\n windowResize: identity,\n eventClick: identity,\n eventMouseEnter: identity,\n eventMouseLeave: identity,\n select: identity,\n unselect: identity,\n loading: identity,\n // internal\n _unmount: identity,\n _beforeprint: identity,\n _afterprint: identity,\n _noEventDrop: identity,\n _noEventResize: identity,\n _resize: identity,\n _scrollRequest: identity,\n};\n// calendar-specific options\n// -------------------------\nconst CALENDAR_OPTION_REFINERS = {\n buttonText: identity,\n buttonHints: identity,\n views: identity,\n plugins: identity,\n initialEvents: identity,\n events: identity,\n eventSources: identity,\n};\nconst COMPLEX_OPTION_COMPARATORS = {\n headerToolbar: isMaybeObjectsEqual,\n footerToolbar: isMaybeObjectsEqual,\n buttonText: isMaybeObjectsEqual,\n buttonHints: isMaybeObjectsEqual,\n buttonIcons: isMaybeObjectsEqual,\n dateIncrement: isMaybeObjectsEqual,\n plugins: isMaybeArraysEqual,\n events: isMaybeArraysEqual,\n eventSources: isMaybeArraysEqual,\n ['resources']: isMaybeArraysEqual,\n};\nfunction isMaybeObjectsEqual(a, b) {\n if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects\n return isPropsEqual(a, b);\n }\n return a === b;\n}\nfunction isMaybeArraysEqual(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return isArraysEqual(a, b);\n }\n return a === b;\n}\n// view-specific options\n// ---------------------\nconst VIEW_OPTION_REFINERS = {\n type: String,\n component: identity,\n buttonText: String,\n buttonTextKey: String,\n dateProfileGeneratorClass: identity,\n usesMinMaxTime: Boolean,\n classNames: identity,\n content: identity,\n didMount: identity,\n willUnmount: identity,\n};\n// util funcs\n// ----------------------------------------------------------------------------------------------------\nfunction mergeRawOptions(optionSets) {\n return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);\n}\nfunction refineProps(input, refiners) {\n let refined = {};\n let extra = {};\n for (let propName in refiners) {\n if (propName in input) {\n refined[propName] = refiners[propName](input[propName]);\n }\n }\n for (let propName in input) {\n if (!(propName in refiners)) {\n extra[propName] = input[propName];\n }\n }\n return { refined, extra };\n}\nfunction identity(raw) {\n return raw;\n}\n\nconst { hasOwnProperty } = Object.prototype;\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nfunction mergeProps(propObjs, complexPropsMap) {\n let dest = {};\n if (complexPropsMap) {\n for (let name in complexPropsMap) {\n if (complexPropsMap[name] === isMaybeObjectsEqual) { // implies that it's object-mergeable\n let complexObjs = [];\n // collect the trailing object values, stopping when a non-object is discovered\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let val = propObjs[i][name];\n if (typeof val === 'object' && val) { // non-null object\n complexObjs.unshift(val);\n }\n else if (val !== undefined) {\n dest[name] = val; // if there were no objects, this value will be used\n break;\n }\n }\n // if the trailing values were objects, use the merged value\n if (complexObjs.length) {\n dest[name] = mergeProps(complexObjs);\n }\n }\n }\n }\n // copy values into the destination, going from last to first\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let props = propObjs[i];\n for (let name in props) {\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n dest[name] = props[name];\n }\n }\n }\n return dest;\n}\nfunction filterHash(hash, func) {\n let filtered = {};\n for (let key in hash) {\n if (func(hash[key], key)) {\n filtered[key] = hash[key];\n }\n }\n return filtered;\n}\nfunction mapHash(hash, func) {\n let newHash = {};\n for (let key in hash) {\n newHash[key] = func(hash[key], key);\n }\n return newHash;\n}\nfunction arrayToHash(a) {\n let hash = {};\n for (let item of a) {\n hash[item] = true;\n }\n return hash;\n}\n// TODO: reassess browser support\n// https://caniuse.com/?search=object.values\nfunction hashValuesToArray(obj) {\n let a = [];\n for (let key in obj) {\n a.push(obj[key]);\n }\n return a;\n}\nfunction isPropsEqual(obj0, obj1) {\n if (obj0 === obj1) {\n return true;\n }\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n return false;\n }\n }\n }\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n return false;\n }\n }\n }\n return true;\n}\nconst HANDLER_RE = /^on[A-Z]/;\nfunction isNonHandlerPropsEqual(obj0, obj1) {\n const keys = getUnequalProps(obj0, obj1);\n for (let key of keys) {\n if (!HANDLER_RE.test(key)) {\n return false;\n }\n }\n return true;\n}\nfunction getUnequalProps(obj0, obj1) {\n let keys = [];\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n keys.push(key);\n }\n }\n }\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n keys.push(key);\n }\n }\n }\n return keys;\n}\nfunction compareObjs(oldProps, newProps, equalityFuncs = {}) {\n if (oldProps === newProps) {\n return true;\n }\n for (let key in newProps) {\n if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;\n else {\n return false;\n }\n }\n // check for props that were omitted in the new\n for (let key in oldProps) {\n if (!(key in newProps)) {\n return false;\n }\n }\n return true;\n}\n/*\nassumed \"true\" equality for handler names like \"onReceiveSomething\"\n*/\nfunction isObjValsEqual(val0, val1, comparator) {\n if (val0 === val1 || comparator === true) {\n return true;\n }\n if (comparator) {\n return comparator(val0, val1);\n }\n return false;\n}\nfunction collectFromHash(hash, startIndex = 0, endIndex, step = 1) {\n let res = [];\n if (endIndex == null) {\n endIndex = Object.keys(hash).length;\n }\n for (let i = startIndex; i < endIndex; i += step) {\n let val = hash[i];\n if (val !== undefined) { // will disregard undefined for sparse arrays\n res.push(val);\n }\n }\n return res;\n}\n\nlet calendarSystemClassMap = {};\nfunction registerCalendarSystem(name, theClass) {\n calendarSystemClassMap[name] = theClass;\n}\nfunction createCalendarSystem(name) {\n return new calendarSystemClassMap[name]();\n}\nclass GregorianCalendarSystem {\n getMarkerYear(d) {\n return d.getUTCFullYear();\n }\n getMarkerMonth(d) {\n return d.getUTCMonth();\n }\n getMarkerDay(d) {\n return d.getUTCDate();\n }\n arrayToMarker(arr) {\n return arrayToUtcDate(arr);\n }\n markerToArray(marker) {\n return dateToUtcArray(marker);\n }\n}\nregisterCalendarSystem('gregory', GregorianCalendarSystem);\n\nconst ISO_RE = /^\\s*(\\d{4})(-?(\\d{2})(-?(\\d{2})([T ](\\d{2}):?(\\d{2})(:?(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/;\nfunction parse(str) {\n let m = ISO_RE.exec(str);\n if (m) {\n let marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number(`0.${m[12]}`) * 1000 : 0));\n if (isValidDate(marker)) {\n let timeZoneOffset = null;\n if (m[13]) {\n timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +\n Number(m[18] || 0));\n }\n return {\n marker,\n isTimeUnspecified: !m[6],\n timeZoneOffset,\n };\n }\n }\n return null;\n}\n\nclass DateEnv {\n constructor(settings) {\n let timeZone = this.timeZone = settings.timeZone;\n let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';\n if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);\n }\n this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);\n this.calendarSystem = createCalendarSystem(settings.calendarSystem);\n this.locale = settings.locale;\n this.weekDow = settings.locale.week.dow;\n this.weekDoy = settings.locale.week.doy;\n if (settings.weekNumberCalculation === 'ISO') {\n this.weekDow = 1;\n this.weekDoy = 4;\n }\n if (typeof settings.firstDay === 'number') {\n this.weekDow = settings.firstDay;\n }\n if (typeof settings.weekNumberCalculation === 'function') {\n this.weekNumberFunc = settings.weekNumberCalculation;\n }\n this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;\n this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;\n this.cmdFormatter = settings.cmdFormatter;\n this.defaultSeparator = settings.defaultSeparator;\n }\n // Creating / Parsing\n createMarker(input) {\n let meta = this.createMarkerMeta(input);\n if (meta === null) {\n return null;\n }\n return meta.marker;\n }\n createNowMarker() {\n if (this.canComputeOffset) {\n return this.timestampToMarker(new Date().valueOf());\n }\n // if we can't compute the current date val for a timezone,\n // better to give the current local date vals than UTC\n return arrayToUtcDate(dateToLocalArray(new Date()));\n }\n createMarkerMeta(input) {\n if (typeof input === 'string') {\n return this.parse(input);\n }\n let marker = null;\n if (typeof input === 'number') {\n marker = this.timestampToMarker(input);\n }\n else if (input instanceof Date) {\n input = input.valueOf();\n if (!isNaN(input)) {\n marker = this.timestampToMarker(input);\n }\n }\n else if (Array.isArray(input)) {\n marker = arrayToUtcDate(input);\n }\n if (marker === null || !isValidDate(marker)) {\n return null;\n }\n return { marker, isTimeUnspecified: false, forcedTzo: null };\n }\n parse(s) {\n let parts = parse(s);\n if (parts === null) {\n return null;\n }\n let { marker } = parts;\n let forcedTzo = null;\n if (parts.timeZoneOffset !== null) {\n if (this.canComputeOffset) {\n marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);\n }\n else {\n forcedTzo = parts.timeZoneOffset;\n }\n }\n return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo };\n }\n // Accessors\n getYear(marker) {\n return this.calendarSystem.getMarkerYear(marker);\n }\n getMonth(marker) {\n return this.calendarSystem.getMarkerMonth(marker);\n }\n getDay(marker) {\n return this.calendarSystem.getMarkerDay(marker);\n }\n // Adding / Subtracting\n add(marker, dur) {\n let a = this.calendarSystem.markerToArray(marker);\n a[0] += dur.years;\n a[1] += dur.months;\n a[2] += dur.days;\n a[6] += dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n }\n subtract(marker, dur) {\n let a = this.calendarSystem.markerToArray(marker);\n a[0] -= dur.years;\n a[1] -= dur.months;\n a[2] -= dur.days;\n a[6] -= dur.milliseconds;\n return this.calendarSystem.arrayToMarker(a);\n }\n addYears(marker, n) {\n let a = this.calendarSystem.markerToArray(marker);\n a[0] += n;\n return this.calendarSystem.arrayToMarker(a);\n }\n addMonths(marker, n) {\n let a = this.calendarSystem.markerToArray(marker);\n a[1] += n;\n return this.calendarSystem.arrayToMarker(a);\n }\n // Diffing Whole Units\n diffWholeYears(m0, m1) {\n let { calendarSystem } = this;\n if (timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {\n return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);\n }\n return null;\n }\n diffWholeMonths(m0, m1) {\n let { calendarSystem } = this;\n if (timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {\n return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;\n }\n return null;\n }\n // Range / Duration\n greatestWholeUnit(m0, m1) {\n let n = this.diffWholeYears(m0, m1);\n if (n !== null) {\n return { unit: 'year', value: n };\n }\n n = this.diffWholeMonths(m0, m1);\n if (n !== null) {\n return { unit: 'month', value: n };\n }\n n = diffWholeWeeks(m0, m1);\n if (n !== null) {\n return { unit: 'week', value: n };\n }\n n = diffWholeDays(m0, m1);\n if (n !== null) {\n return { unit: 'day', value: n };\n }\n n = diffHours(m0, m1);\n if (isInt(n)) {\n return { unit: 'hour', value: n };\n }\n n = diffMinutes(m0, m1);\n if (isInt(n)) {\n return { unit: 'minute', value: n };\n }\n n = diffSeconds(m0, m1);\n if (isInt(n)) {\n return { unit: 'second', value: n };\n }\n return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };\n }\n countDurationsBetween(m0, m1, d) {\n // TODO: can use greatestWholeUnit\n let diff;\n if (d.years) {\n diff = this.diffWholeYears(m0, m1);\n if (diff !== null) {\n return diff / asRoughYears(d);\n }\n }\n if (d.months) {\n diff = this.diffWholeMonths(m0, m1);\n if (diff !== null) {\n return diff / asRoughMonths(d);\n }\n }\n if (d.days) {\n diff = diffWholeDays(m0, m1);\n if (diff !== null) {\n return diff / asRoughDays(d);\n }\n }\n return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);\n }\n // Start-Of\n // these DON'T return zoned-dates. only UTC start-of dates\n startOf(m, unit) {\n if (unit === 'year') {\n return this.startOfYear(m);\n }\n if (unit === 'month') {\n return this.startOfMonth(m);\n }\n if (unit === 'week') {\n return this.startOfWeek(m);\n }\n if (unit === 'day') {\n return startOfDay(m);\n }\n if (unit === 'hour') {\n return startOfHour(m);\n }\n if (unit === 'minute') {\n return startOfMinute(m);\n }\n if (unit === 'second') {\n return startOfSecond(m);\n }\n return null;\n }\n startOfYear(m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n ]);\n }\n startOfMonth(m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n ]);\n }\n startOfWeek(m) {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),\n ]);\n }\n // Week Number\n computeWeekNumber(marker) {\n if (this.weekNumberFunc) {\n return this.weekNumberFunc(this.toDate(marker));\n }\n return weekOfYear(marker, this.weekDow, this.weekDoy);\n }\n // TODO: choke on timeZoneName: long\n format(marker, formatter, dateOptions = {}) {\n return formatter.format({\n marker,\n timeZoneOffset: dateOptions.forcedTzo != null ?\n dateOptions.forcedTzo :\n this.offsetForMarker(marker),\n }, this);\n }\n formatRange(start, end, formatter, dateOptions = {}) {\n if (dateOptions.isEndExclusive) {\n end = addMs(end, -1);\n }\n return formatter.formatRange({\n marker: start,\n timeZoneOffset: dateOptions.forcedStartTzo != null ?\n dateOptions.forcedStartTzo :\n this.offsetForMarker(start),\n }, {\n marker: end,\n timeZoneOffset: dateOptions.forcedEndTzo != null ?\n dateOptions.forcedEndTzo :\n this.offsetForMarker(end),\n }, this, dateOptions.defaultSeparator);\n }\n /*\n DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,\n might as well use buildIsoString or some other util directly\n */\n formatIso(marker, extraOptions = {}) {\n let timeZoneOffset = null;\n if (!extraOptions.omitTimeZoneOffset) {\n if (extraOptions.forcedTzo != null) {\n timeZoneOffset = extraOptions.forcedTzo;\n }\n else {\n timeZoneOffset = this.offsetForMarker(marker);\n }\n }\n return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);\n }\n // TimeZone\n timestampToMarker(ms) {\n if (this.timeZone === 'local') {\n return arrayToUtcDate(dateToLocalArray(new Date(ms)));\n }\n if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n return new Date(ms);\n }\n return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));\n }\n offsetForMarker(m) {\n if (this.timeZone === 'local') {\n return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert \"inverse\" offset to \"normal\" offset\n }\n if (this.timeZone === 'UTC') {\n return 0;\n }\n if (this.namedTimeZoneImpl) {\n return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));\n }\n return null;\n }\n // Conversion\n toDate(m, forcedTzo) {\n if (this.timeZone === 'local') {\n return arrayToLocalDate(dateToUtcArray(m));\n }\n if (this.timeZone === 'UTC') {\n return new Date(m.valueOf()); // make sure it's a copy\n }\n if (!this.namedTimeZoneImpl) {\n return new Date(m.valueOf() - (forcedTzo || 0));\n }\n return new Date(m.valueOf() -\n this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);\n }\n}\n\nclass Theme {\n constructor(calendarOptions) {\n if (this.iconOverrideOption) {\n this.setIconOverride(calendarOptions[this.iconOverrideOption]);\n }\n }\n setIconOverride(iconOverrideHash) {\n let iconClassesCopy;\n let buttonName;\n if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n iconClassesCopy = Object.assign({}, this.iconClasses);\n for (buttonName in iconOverrideHash) {\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n }\n this.iconClasses = iconClassesCopy;\n }\n else if (iconOverrideHash === false) {\n this.iconClasses = {};\n }\n }\n applyIconOverridePrefix(className) {\n let prefix = this.iconOverridePrefix;\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n className = prefix + className;\n }\n return className;\n }\n getClass(key) {\n return this.classes[key] || '';\n }\n getIconClass(buttonName, isRtl) {\n let className;\n if (isRtl && this.rtlIconClasses) {\n className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];\n }\n else {\n className = this.iconClasses[buttonName];\n }\n if (className) {\n return `${this.baseIconClass} ${className}`;\n }\n return '';\n }\n getCustomButtonIconClass(customButtonProps) {\n let className;\n if (this.iconOverrideCustomButtonOption) {\n className = customButtonProps[this.iconOverrideCustomButtonOption];\n if (className) {\n return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`;\n }\n }\n return '';\n }\n}\nTheme.prototype.classes = {};\nTheme.prototype.iconClasses = {};\nTheme.prototype.baseIconClass = '';\nTheme.prototype.iconOverridePrefix = '';\n\n/*\nNOTE: this can be a public API, especially createElement for hooks.\nSee examples/typescript-scheduler/src/index.ts\n*/\nfunction flushSync(runBeforeFlush) {\n runBeforeFlush();\n let oldDebounceRendering = preact.options.debounceRendering; // orig\n let callbackQ = [];\n function execCallbackSync(callback) {\n callbackQ.push(callback);\n }\n preact.options.debounceRendering = execCallbackSync;\n preact.render(preact.createElement(FakeComponent, {}), document.createElement('div'));\n while (callbackQ.length) {\n callbackQ.shift()();\n }\n preact.options.debounceRendering = oldDebounceRendering;\n}\nclass FakeComponent extends preact.Component {\n render() { return preact.createElement('div', {}); }\n componentDidMount() { this.setState({}); }\n}\n// TODO: use preact/compat instead?\nfunction createContext(defaultValue) {\n let ContextType = preact.createContext(defaultValue);\n let origProvider = ContextType.Provider;\n ContextType.Provider = function () {\n let isNew = !this.getChildContext;\n let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params\n if (isNew) {\n let subs = [];\n this.shouldComponentUpdate = (_props) => {\n if (this.props.value !== _props.value) {\n subs.forEach((c) => {\n c.context = _props.value;\n c.forceUpdate();\n });\n }\n };\n this.sub = (c) => {\n subs.push(c);\n let old = c.componentWillUnmount;\n c.componentWillUnmount = () => {\n subs.splice(subs.indexOf(c), 1);\n old && old.call(c);\n };\n };\n }\n return children;\n };\n return ContextType;\n}\n\nclass ScrollResponder {\n constructor(execFunc, emitter, scrollTime, scrollTimeReset) {\n this.execFunc = execFunc;\n this.emitter = emitter;\n this.scrollTime = scrollTime;\n this.scrollTimeReset = scrollTimeReset;\n this.handleScrollRequest = (request) => {\n this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request);\n this.drain();\n };\n emitter.on('_scrollRequest', this.handleScrollRequest);\n this.fireInitialScroll();\n }\n detach() {\n this.emitter.off('_scrollRequest', this.handleScrollRequest);\n }\n update(isDatesNew) {\n if (isDatesNew && this.scrollTimeReset) {\n this.fireInitialScroll(); // will drain\n }\n else {\n this.drain();\n }\n }\n fireInitialScroll() {\n this.handleScrollRequest({\n time: this.scrollTime,\n });\n }\n drain() {\n if (this.queuedRequest && this.execFunc(this.queuedRequest)) {\n this.queuedRequest = null;\n }\n }\n}\n\nconst ViewContextType = createContext({}); // for Components\nfunction buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {\n return {\n dateEnv,\n options: viewOptions,\n pluginHooks,\n emitter,\n dispatch,\n getCurrentData,\n calendarApi,\n viewSpec,\n viewApi,\n dateProfileGenerator,\n theme,\n isRtl: viewOptions.direction === 'rtl',\n addResizeHandler(handler) {\n emitter.on('_resize', handler);\n },\n removeResizeHandler(handler) {\n emitter.off('_resize', handler);\n },\n createScrollResponder(execFunc) {\n return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);\n },\n registerInteractiveComponent,\n unregisterInteractiveComponent,\n };\n}\n\n/* eslint max-classes-per-file: off */\nclass PureComponent extends Component {\n shouldComponentUpdate(nextProps, nextState) {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));\n }\n return !compareObjs(this.props, nextProps, this.propEquality) ||\n !compareObjs(this.state, nextState, this.stateEquality);\n }\n // HACK for freakin' React StrictMode\n safeSetState(newState) {\n if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {\n this.setState(newState);\n }\n }\n}\nPureComponent.addPropsEquality = addPropsEquality;\nPureComponent.addStateEquality = addStateEquality;\nPureComponent.contextType = ViewContextType;\nPureComponent.prototype.propEquality = {};\nPureComponent.prototype.stateEquality = {};\nclass BaseComponent extends PureComponent {\n}\nBaseComponent.contextType = ViewContextType;\nfunction addPropsEquality(propEquality) {\n let hash = Object.create(this.prototype.propEquality);\n Object.assign(hash, propEquality);\n this.prototype.propEquality = hash;\n}\nfunction addStateEquality(stateEquality) {\n let hash = Object.create(this.prototype.stateEquality);\n Object.assign(hash, stateEquality);\n this.prototype.stateEquality = hash;\n}\n// use other one\nfunction setRef(ref, current) {\n if (typeof ref === 'function') {\n ref(current);\n }\n else if (ref) {\n // see https://github.com/facebook/react/issues/13029\n ref.current = current;\n }\n}\n\nclass ContentInjector extends BaseComponent {\n constructor() {\n super(...arguments);\n this.id = guid();\n this.queuedDomNodes = [];\n this.currentDomNodes = [];\n this.handleEl = (el) => {\n const { options } = this.context;\n const { generatorName } = this.props;\n if (!options.customRenderingReplaces || !hasCustomRenderingHandler(generatorName, options)) {\n this.updateElRef(el);\n }\n };\n this.updateElRef = (el) => {\n if (this.props.elRef) {\n setRef(this.props.elRef, el);\n }\n };\n }\n render() {\n const { props, context } = this;\n const { options } = context;\n const { customGenerator, defaultGenerator, renderProps } = props;\n const attrs = buildElAttrs(props, [], this.handleEl);\n let useDefault = false;\n let innerContent;\n let queuedDomNodes = [];\n let currentGeneratorMeta;\n if (customGenerator != null) {\n const customGeneratorRes = typeof customGenerator === 'function' ?\n customGenerator(renderProps, createElement) :\n customGenerator;\n if (customGeneratorRes === true) {\n useDefault = true;\n }\n else {\n const isObject = customGeneratorRes && typeof customGeneratorRes === 'object'; // non-null\n if (isObject && ('html' in customGeneratorRes)) {\n attrs.dangerouslySetInnerHTML = { __html: customGeneratorRes.html };\n }\n else if (isObject && ('domNodes' in customGeneratorRes)) {\n queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes);\n }\n else if (isObject\n ? isValidElement(customGeneratorRes) // vdom node\n : typeof customGeneratorRes !== 'function' // primitive value (like string or number)\n ) {\n // use in vdom\n innerContent = customGeneratorRes;\n }\n else {\n // an exotic object for handleCustomRendering\n currentGeneratorMeta = customGeneratorRes;\n }\n }\n }\n else {\n useDefault = !hasCustomRenderingHandler(props.generatorName, options);\n }\n if (useDefault && defaultGenerator) {\n innerContent = defaultGenerator(renderProps);\n }\n this.queuedDomNodes = queuedDomNodes;\n this.currentGeneratorMeta = currentGeneratorMeta;\n return createElement(props.elTag, attrs, innerContent);\n }\n componentDidMount() {\n this.applyQueueudDomNodes();\n this.triggerCustomRendering(true);\n }\n componentDidUpdate() {\n this.applyQueueudDomNodes();\n this.triggerCustomRendering(true);\n }\n componentWillUnmount() {\n this.triggerCustomRendering(false); // TODO: different API for removal?\n }\n triggerCustomRendering(isActive) {\n var _a;\n const { props, context } = this;\n const { handleCustomRendering, customRenderingMetaMap } = context.options;\n if (handleCustomRendering) {\n const generatorMeta = (_a = this.currentGeneratorMeta) !== null && _a !== void 0 ? _a : customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];\n if (generatorMeta) {\n handleCustomRendering(Object.assign(Object.assign({ id: this.id, isActive, containerEl: this.base, reportNewContainerEl: this.updateElRef, // front-end framework tells us about new container els\n generatorMeta }, props), { elClasses: (props.elClasses || []).filter(isTruthy) }));\n }\n }\n }\n applyQueueudDomNodes() {\n const { queuedDomNodes, currentDomNodes } = this;\n const el = this.base;\n if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {\n currentDomNodes.forEach(removeElement);\n for (let newNode of queuedDomNodes) {\n el.appendChild(newNode);\n }\n this.currentDomNodes = queuedDomNodes;\n }\n }\n}\nContentInjector.addPropsEquality({\n elClasses: isArraysEqual,\n elStyle: isPropsEqual,\n elAttrs: isNonHandlerPropsEqual,\n renderProps: isPropsEqual,\n});\n// Util\n/*\nDoes UI-framework provide custom way of rendering that does not use Preact VDOM\nAND does the calendar's options define custom rendering?\nAKA. Should we NOT render the default content?\n*/\nfunction hasCustomRenderingHandler(generatorName, options) {\n var _a;\n return Boolean(options.handleCustomRendering &&\n generatorName &&\n ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));\n}\nfunction buildElAttrs(props, extraClassNames, elRef) {\n const attrs = Object.assign(Object.assign({}, props.elAttrs), { ref: elRef });\n if (props.elClasses || extraClassNames) {\n attrs.className = (props.elClasses || [])\n .concat(extraClassNames || [])\n .concat(attrs.className || [])\n .filter(Boolean)\n .join(' ');\n }\n if (props.elStyle) {\n attrs.style = props.elStyle;\n }\n return attrs;\n}\nfunction isTruthy(val) {\n return Boolean(val);\n}\n\nconst RenderId = createContext(0);\n\nclass ContentContainer extends Component {\n constructor() {\n super(...arguments);\n this.InnerContent = InnerContentInjector.bind(undefined, this);\n this.handleEl = (el) => {\n this.el = el;\n if (this.props.elRef) {\n setRef(this.props.elRef, el);\n if (el && this.didMountMisfire) {\n this.componentDidMount();\n }\n }\n };\n }\n render() {\n const { props } = this;\n const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);\n if (props.children) {\n const elAttrs = buildElAttrs(props, generatedClassNames, this.handleEl);\n const children = props.children(this.InnerContent, props.renderProps, elAttrs);\n if (props.elTag) {\n return createElement(props.elTag, elAttrs, children);\n }\n else {\n return children;\n }\n }\n else {\n return createElement((ContentInjector), Object.assign(Object.assign({}, props), { elRef: this.handleEl, elTag: props.elTag || 'div', elClasses: (props.elClasses || []).concat(generatedClassNames), renderId: this.context }));\n }\n }\n componentDidMount() {\n var _a, _b;\n if (this.el) {\n (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));\n }\n else {\n this.didMountMisfire = true;\n }\n }\n componentWillUnmount() {\n var _a, _b;\n (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));\n }\n}\nContentContainer.contextType = RenderId;\nfunction InnerContentInjector(containerComponent, props) {\n const parentProps = containerComponent.props;\n return createElement((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, customGenerator: parentProps.customGenerator, defaultGenerator: parentProps.defaultGenerator, renderId: containerComponent.context }, props));\n}\n// Utils\nfunction generateClassNames(classNameGenerator, renderProps) {\n const classNames = typeof classNameGenerator === 'function' ?\n classNameGenerator(renderProps) :\n classNameGenerator || [];\n return typeof classNames === 'string' ? [classNames] : classNames;\n}\n\nclass ViewContainer extends BaseComponent {\n render() {\n let { props, context } = this;\n let { options } = context;\n let renderProps = { view: context.viewApi };\n return (createElement(ContentContainer, Object.assign({}, props, { elTag: props.elTag || 'div', elClasses: [\n ...buildViewClassNames(props.viewSpec),\n ...(props.elClasses || []),\n ], renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));\n }\n}\nfunction buildViewClassNames(viewSpec) {\n return [\n `fc-${viewSpec.type}-view`,\n 'fc-view',\n ];\n}\n\nfunction parseRange(input, dateEnv) {\n let start = null;\n let end = null;\n if (input.start) {\n start = dateEnv.createMarker(input.start);\n }\n if (input.end) {\n end = dateEnv.createMarker(input.end);\n }\n if (!start && !end) {\n return null;\n }\n if (start && end && end < start) {\n return null;\n }\n return { start, end };\n}\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nfunction invertRanges(ranges, constraintRange) {\n let invertedRanges = [];\n let { start } = constraintRange; // the end of the previous range. the start of the new range\n let i;\n let dateRange;\n // ranges need to be in order. required for our date-walking algorithm\n ranges.sort(compareRanges);\n for (i = 0; i < ranges.length; i += 1) {\n dateRange = ranges[i];\n // add the span of time before the event (if there is any)\n if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: dateRange.start });\n }\n if (dateRange.end > start) {\n start = dateRange.end;\n }\n }\n // add the span of time after the last event (if there is any)\n if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: constraintRange.end });\n }\n return invertedRanges;\n}\nfunction compareRanges(range0, range1) {\n return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first\n}\nfunction intersectRanges(range0, range1) {\n let { start, end } = range0;\n let newRange = null;\n if (range1.start !== null) {\n if (start === null) {\n start = range1.start;\n }\n else {\n start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));\n }\n }\n if (range1.end != null) {\n if (end === null) {\n end = range1.end;\n }\n else {\n end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));\n }\n }\n if (start === null || end === null || start < end) {\n newRange = { start, end };\n }\n return newRange;\n}\nfunction rangesEqual(range0, range1) {\n return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());\n}\nfunction rangesIntersect(range0, range1) {\n return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n (range0.start === null || range1.end === null || range0.start < range1.end);\n}\nfunction rangeContainsRange(outerRange, innerRange) {\n return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));\n}\nfunction rangeContainsMarker(range, date) {\n return (range.start === null || date >= range.start) &&\n (range.end === null || date < range.end);\n}\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nfunction constrainMarkerToRange(date, range) {\n if (range.start != null && date < range.start) {\n return range.start;\n }\n if (range.end != null && date >= range.end) {\n return new Date(range.end.valueOf() - 1);\n }\n return date;\n}\n\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nfunction computeAlignedDayRange(timedRange) {\n let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;\n let start = startOfDay(timedRange.start);\n let end = addDays(start, dayCnt);\n return { start, end };\n}\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nfunction computeVisibleDayRange(timedRange, nextDayThreshold = createDuration(0)) {\n let startDay = null;\n let endDay = null;\n if (timedRange.end) {\n endDay = startOfDay(timedRange.end);\n let endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`\n // If the end time is actually inclusively part of the next day and is equal to or\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n endDay = addDays(endDay, 1);\n }\n }\n if (timedRange.start) {\n startDay = startOfDay(timedRange.start); // the beginning of the day the range starts\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n if (endDay && endDay <= startDay) {\n endDay = addDays(startDay, 1);\n }\n }\n return { start: startDay, end: endDay };\n}\n// spans from one day into another?\nfunction isMultiDayRange(range) {\n let visibleRange = computeVisibleDayRange(range);\n return diffDays(visibleRange.start, visibleRange.end) > 1;\n}\nfunction diffDates(date0, date1, dateEnv, largeUnit) {\n if (largeUnit === 'year') {\n return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');\n }\n if (largeUnit === 'month') {\n return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');\n }\n return diffDayAndTime(date0, date1); // returns a duration\n}\n\nfunction reduceCurrentDate(currentDate, action) {\n switch (action.type) {\n case 'CHANGE_DATE':\n return action.dateMarker;\n default:\n return currentDate;\n }\n}\nfunction getInitialDate(options, dateEnv) {\n let initialDateInput = options.initialDate;\n // compute the initial ambig-timezone date\n if (initialDateInput != null) {\n return dateEnv.createMarker(initialDateInput);\n }\n return getNow(options.now, dateEnv); // getNow already returns unzoned\n}\nfunction getNow(nowInput, dateEnv) {\n if (typeof nowInput === 'function') {\n nowInput = nowInput();\n }\n if (nowInput == null) {\n return dateEnv.createNowMarker();\n }\n return dateEnv.createMarker(nowInput);\n}\n\nclass DateProfileGenerator {\n constructor(props) {\n this.props = props;\n this.nowDate = getNow(props.nowInput, props.dateEnv);\n this.initHiddenDays();\n }\n /* Date Range Computation\n ------------------------------------------------------------------------------------------------------------------*/\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n buildPrev(currentDateProfile, currentDate, forceToValid) {\n let { dateEnv } = this.props;\n let prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(prevDate, -1, forceToValid);\n }\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n buildNext(currentDateProfile, currentDate, forceToValid) {\n let { dateEnv } = this.props;\n let nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement);\n return this.build(nextDate, 1, forceToValid);\n }\n // Builds a structure holding dates/ranges for rendering around the given date.\n // Optional direction param indicates whether the date is being incremented/decremented\n // from its previous value. decremented = -1, incremented = 1 (default).\n build(currentDate, direction, forceToValid = true) {\n let { props } = this;\n let validRange;\n let currentInfo;\n let isRangeAllDay;\n let renderRange;\n let activeRange;\n let isValid;\n validRange = this.buildValidRange();\n validRange = this.trimHiddenDays(validRange);\n if (forceToValid) {\n currentDate = constrainMarkerToRange(currentDate, validRange);\n }\n currentInfo = this.buildCurrentRangeInfo(currentDate, direction);\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);\n renderRange = this.trimHiddenDays(renderRange);\n activeRange = renderRange;\n if (!props.showNonCurrentDates) {\n activeRange = intersectRanges(activeRange, currentInfo.range);\n }\n activeRange = this.adjustActiveRange(activeRange);\n activeRange = intersectRanges(activeRange, validRange); // might return null\n // it's invalid if the originally requested date is not contained,\n // or if the range is completely outside of the valid range.\n isValid = rangesIntersect(currentInfo.range, validRange);\n // HACK: constrain to render-range so `currentDate` is more useful to view rendering\n if (!rangeContainsMarker(renderRange, currentDate)) {\n currentDate = renderRange.start;\n }\n return {\n currentDate,\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\n // an object with optional start and end properties.\n validRange,\n // range the view is formally responsible for.\n // for example, a month view might have 1st-31st, excluding padded dates\n currentRange: currentInfo.range,\n // name of largest unit being displayed, like \"month\" or \"week\"\n currentRangeUnit: currentInfo.unit,\n isRangeAllDay,\n // dates that display events and accept drag-n-drop\n // will be `null` if no dates accept events\n activeRange,\n // date range with a rendered skeleton\n // includes not-active days that need some sort of DOM\n renderRange,\n // Duration object that denotes the first visible time of any given day\n slotMinTime: props.slotMinTime,\n // Duration object that denotes the exclusive visible end time of any given day\n slotMaxTime: props.slotMaxTime,\n isValid,\n // how far the current date will move for a prev/next operation\n dateIncrement: this.buildDateIncrement(currentInfo.duration),\n // pass a fallback (might be null) ^\n };\n }\n // Builds an object with optional start/end properties.\n // Indicates the minimum/maximum dates to display.\n // not responsible for trimming hidden days.\n buildValidRange() {\n let input = this.props.validRangeInput;\n let simpleInput = typeof input === 'function'\n ? input.call(this.props.calendarApi, this.nowDate)\n : input;\n return this.refineRange(simpleInput) ||\n { start: null, end: null }; // completely open-ended\n }\n // Builds a structure with info about the \"current\" range, the range that is\n // highlighted as being the current month for example.\n // See build() for a description of `direction`.\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n buildCurrentRangeInfo(date, direction) {\n let { props } = this;\n let duration = null;\n let unit = null;\n let range = null;\n let dayCount;\n if (props.duration) {\n duration = props.duration;\n unit = props.durationUnit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n }\n else if ((dayCount = this.props.dayCount)) {\n unit = 'day';\n range = this.buildRangeFromDayCount(date, direction, dayCount);\n }\n else if ((range = this.buildCustomVisibleRange(date))) {\n unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;\n }\n else {\n duration = this.getFallbackDuration();\n unit = greatestDurationDenominator(duration).unit;\n range = this.buildRangeFromDuration(date, direction, duration, unit);\n }\n return { duration, unit, range };\n }\n getFallbackDuration() {\n return createDuration({ day: 1 });\n }\n // Returns a new activeRange to have time values (un-ambiguate)\n // slotMinTime or slotMaxTime causes the range to expand.\n adjustActiveRange(range) {\n let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props;\n let { start, end } = range;\n if (usesMinMaxTime) {\n // expand active range if slotMinTime is negative (why not when positive?)\n if (asRoughDays(slotMinTime) < 0) {\n start = startOfDay(start); // necessary?\n start = dateEnv.add(start, slotMinTime);\n }\n // expand active range if slotMaxTime is beyond one day (why not when negative?)\n if (asRoughDays(slotMaxTime) > 1) {\n end = startOfDay(end); // necessary?\n end = addDays(end, -1);\n end = dateEnv.add(end, slotMaxTime);\n }\n }\n return { start, end };\n }\n // Builds the \"current\" range when it is specified as an explicit duration.\n // `unit` is the already-computed greatestDurationDenominator unit of duration.\n buildRangeFromDuration(date, direction, duration, unit) {\n let { dateEnv, dateAlignment } = this.props;\n let start;\n let end;\n let res;\n // compute what the alignment should be\n if (!dateAlignment) {\n let { dateIncrement } = this.props;\n if (dateIncrement) {\n // use the smaller of the two units\n if (asRoughMs(dateIncrement) < asRoughMs(duration)) {\n dateAlignment = greatestDurationDenominator(dateIncrement).unit;\n }\n else {\n dateAlignment = unit;\n }\n }\n else {\n dateAlignment = unit;\n }\n }\n // if the view displays a single day or smaller\n if (asRoughDays(duration) <= 1) {\n if (this.isHiddenDay(start)) {\n start = this.skipHiddenDays(start, direction);\n start = startOfDay(start);\n }\n }\n function computeRes() {\n start = dateEnv.startOf(date, dateAlignment);\n end = dateEnv.add(start, duration);\n res = { start, end };\n }\n computeRes();\n // if range is completely enveloped by hidden days, go past the hidden days\n if (!this.trimHiddenDays(res)) {\n date = this.skipHiddenDays(date, direction);\n computeRes();\n }\n return res;\n }\n // Builds the \"current\" range when a dayCount is specified.\n buildRangeFromDayCount(date, direction, dayCount) {\n let { dateEnv, dateAlignment } = this.props;\n let runningCount = 0;\n let start = date;\n let end;\n if (dateAlignment) {\n start = dateEnv.startOf(start, dateAlignment);\n }\n start = startOfDay(start);\n start = this.skipHiddenDays(start, direction);\n end = start;\n do {\n end = addDays(end, 1);\n if (!this.isHiddenDay(end)) {\n runningCount += 1;\n }\n } while (runningCount < dayCount);\n return { start, end };\n }\n // Builds a normalized range object for the \"visible\" range,\n // which is a way to define the currentRange and activeRange at the same time.\n buildCustomVisibleRange(date) {\n let { props } = this;\n let input = props.visibleRangeInput;\n let simpleInput = typeof input === 'function'\n ? input.call(props.calendarApi, props.dateEnv.toDate(date))\n : input;\n let range = this.refineRange(simpleInput);\n if (range && (range.start == null || range.end == null)) {\n return null;\n }\n return range;\n }\n // Computes the range that will represent the element/cells for *rendering*,\n // but which may have voided days/times.\n // not responsible for trimming hidden days.\n buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n return currentRange;\n }\n // Compute the duration value that should be added/substracted to the current date\n // when a prev/next operation happens.\n buildDateIncrement(fallback) {\n let { dateIncrement } = this.props;\n let customAlignment;\n if (dateIncrement) {\n return dateIncrement;\n }\n if ((customAlignment = this.props.dateAlignment)) {\n return createDuration(1, customAlignment);\n }\n if (fallback) {\n return fallback;\n }\n return createDuration({ days: 1 });\n }\n refineRange(rangeInput) {\n if (rangeInput) {\n let range = parseRange(rangeInput, this.props.dateEnv);\n if (range) {\n range = computeVisibleDayRange(range);\n }\n return range;\n }\n return null;\n }\n /* Hidden Days\n ------------------------------------------------------------------------------------------------------------------*/\n // Initializes internal variables related to calculating hidden days-of-week\n initHiddenDays() {\n let hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden\n let isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n let dayCnt = 0;\n let i;\n if (this.props.weekends === false) {\n hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n }\n for (i = 0; i < 7; i += 1) {\n if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {\n dayCnt += 1;\n }\n }\n if (!dayCnt) {\n throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n }\n this.isHiddenDayHash = isHiddenDayHash;\n }\n // Remove days from the beginning and end of the range that are computed as hidden.\n // If the whole range is trimmed off, returns null\n trimHiddenDays(range) {\n let { start, end } = range;\n if (start) {\n start = this.skipHiddenDays(start);\n }\n if (end) {\n end = this.skipHiddenDays(end, -1, true);\n }\n if (start == null || end == null || start < end) {\n return { start, end };\n }\n return null;\n }\n // Is the current day hidden?\n // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n isHiddenDay(day) {\n if (day instanceof Date) {\n day = day.getUTCDay();\n }\n return this.isHiddenDayHash[day];\n }\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\n // DOES NOT CONSIDER validRange!\n // If the initial value of `date` is not a hidden day, don't do anything.\n // Pass `isExclusive` as `true` if you are dealing with an end date.\n // `inc` defaults to `1` (increment one day forward each time)\n skipHiddenDays(date, inc = 1, isExclusive = false) {\n while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {\n date = addDays(date, inc);\n }\n return date;\n }\n}\n\nfunction createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {\n return {\n instanceId: guid(),\n defId,\n range,\n forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,\n };\n}\n\nfunction parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {\n for (let i = 0; i < recurringTypes.length; i += 1) {\n let parsed = recurringTypes[i].parse(refined, dateEnv);\n if (parsed) {\n let { allDay } = refined;\n if (allDay == null) {\n allDay = defaultAllDay;\n if (allDay == null) {\n allDay = parsed.allDayGuess;\n if (allDay == null) {\n allDay = false;\n }\n }\n }\n return {\n allDay,\n duration: parsed.duration,\n typeData: parsed.typeData,\n typeId: i,\n };\n }\n }\n return null;\n}\nfunction expandRecurring(eventStore, framingRange, context) {\n let { dateEnv, pluginHooks, options } = context;\n let { defs, instances } = eventStore;\n // remove existing recurring instances\n // TODO: bad. always expand events as a second step\n instances = filterHash(instances, (instance) => !defs[instance.defId].recurringDef);\n for (let defId in defs) {\n let def = defs[defId];\n if (def.recurringDef) {\n let { duration } = def.recurringDef;\n if (!duration) {\n duration = def.allDay ?\n options.defaultAllDayEventDuration :\n options.defaultTimedEventDuration;\n }\n let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);\n for (let start of starts) {\n let instance = createEventInstance(defId, {\n start,\n end: dateEnv.add(start, duration),\n });\n instances[instance.instanceId] = instance;\n }\n }\n }\n return { defs, instances };\n}\n/*\nEvent MUST have a recurringDef\n*/\nfunction expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {\n let typeDef = recurringTypes[eventDef.recurringDef.typeId];\n let markers = typeDef.expand(eventDef.recurringDef.typeData, {\n start: dateEnv.subtract(framingRange.start, duration),\n end: framingRange.end,\n }, dateEnv);\n // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n if (eventDef.allDay) {\n markers = markers.map(startOfDay);\n }\n return markers;\n}\n\nconst EVENT_NON_DATE_REFINERS = {\n id: String,\n groupId: String,\n title: String,\n url: String,\n interactive: Boolean,\n};\nconst EVENT_DATE_REFINERS = {\n start: identity,\n end: identity,\n date: identity,\n allDay: Boolean,\n};\nconst EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });\nfunction parseEvent(raw, eventSource, context, allowOpenRange, refiners = buildEventRefiners(context), defIdMap, instanceIdMap) {\n let { refined, extra } = refineEventDef(raw, context, refiners);\n let defaultAllDay = computeIsDefaultAllDay(eventSource, context);\n let recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);\n if (recurringRes) {\n let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context, defIdMap);\n def.recurringDef = {\n typeId: recurringRes.typeId,\n typeData: recurringRes.typeData,\n duration: recurringRes.duration,\n };\n return { def, instance: null };\n }\n let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);\n if (singleRes) {\n let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context, defIdMap);\n let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);\n if (instanceIdMap && def.publicId && instanceIdMap[def.publicId]) {\n instance.instanceId = instanceIdMap[def.publicId];\n }\n return { def, instance };\n }\n return null;\n}\nfunction refineEventDef(raw, context, refiners = buildEventRefiners(context)) {\n return refineProps(raw, refiners);\n}\nfunction buildEventRefiners(context) {\n return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);\n}\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\n*/\nfunction parseEventDef(refined, extra, sourceId, allDay, hasEnd, context, defIdMap) {\n let def = {\n title: refined.title || '',\n groupId: refined.groupId || '',\n publicId: refined.id || '',\n url: refined.url || '',\n recurringDef: null,\n defId: ((defIdMap && refined.id) ? defIdMap[refined.id] : '') || guid(),\n sourceId,\n allDay,\n hasEnd,\n interactive: refined.interactive,\n ui: createEventUi(refined, context),\n extendedProps: Object.assign(Object.assign({}, (refined.extendedProps || {})), extra),\n };\n for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {\n Object.assign(def, memberAdder(refined));\n }\n // help out EventImpl from having user modify props\n Object.freeze(def.ui.classNames);\n Object.freeze(def.extendedProps);\n return def;\n}\nfunction parseSingle(refined, defaultAllDay, context, allowOpenRange) {\n let { allDay } = refined;\n let startMeta;\n let startMarker = null;\n let hasEnd = false;\n let endMeta;\n let endMarker = null;\n let startInput = refined.start != null ? refined.start : refined.date;\n startMeta = context.dateEnv.createMarkerMeta(startInput);\n if (startMeta) {\n startMarker = startMeta.marker;\n }\n else if (!allowOpenRange) {\n return null;\n }\n if (refined.end != null) {\n endMeta = context.dateEnv.createMarkerMeta(refined.end);\n }\n if (allDay == null) {\n if (defaultAllDay != null) {\n allDay = defaultAllDay;\n }\n else {\n // fall back to the date props LAST\n allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified);\n }\n }\n if (allDay && startMarker) {\n startMarker = startOfDay(startMarker);\n }\n if (endMeta) {\n endMarker = endMeta.marker;\n if (allDay) {\n endMarker = startOfDay(endMarker);\n }\n if (startMarker && endMarker <= startMarker) {\n endMarker = null;\n }\n }\n if (endMarker) {\n hasEnd = true;\n }\n else if (!allowOpenRange) {\n hasEnd = context.options.forceEventDuration || false;\n endMarker = context.dateEnv.add(startMarker, allDay ?\n context.options.defaultAllDayEventDuration :\n context.options.defaultTimedEventDuration);\n }\n return {\n allDay,\n hasEnd,\n range: { start: startMarker, end: endMarker },\n forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n forcedEndTzo: endMeta ? endMeta.forcedTzo : null,\n };\n}\nfunction computeIsDefaultAllDay(eventSource, context) {\n let res = null;\n if (eventSource) {\n res = eventSource.defaultAllDay;\n }\n if (res == null) {\n res = context.options.defaultAllDay;\n }\n return res;\n}\n\nfunction parseEvents(rawEvents, eventSource, context, allowOpenRange, defIdMap, instanceIdMap) {\n let eventStore = createEmptyEventStore();\n let eventRefiners = buildEventRefiners(context);\n for (let rawEvent of rawEvents) {\n let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners, defIdMap, instanceIdMap);\n if (tuple) {\n eventTupleToStore(tuple, eventStore);\n }\n }\n return eventStore;\n}\nfunction eventTupleToStore(tuple, eventStore = createEmptyEventStore()) {\n eventStore.defs[tuple.def.defId] = tuple.def;\n if (tuple.instance) {\n eventStore.instances[tuple.instance.instanceId] = tuple.instance;\n }\n return eventStore;\n}\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nfunction getRelevantEvents(eventStore, instanceId) {\n let instance = eventStore.instances[instanceId];\n if (instance) {\n let def = eventStore.defs[instance.defId];\n // get events/instances with same group\n let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef));\n // add the original\n // TODO: wish we could use eventTupleToStore or something like it\n newStore.defs[def.defId] = def;\n newStore.instances[instance.instanceId] = instance;\n return newStore;\n }\n return createEmptyEventStore();\n}\nfunction isEventDefsGrouped(def0, def1) {\n return Boolean(def0.groupId && def0.groupId === def1.groupId);\n}\nfunction createEmptyEventStore() {\n return { defs: {}, instances: {} };\n}\nfunction mergeEventStores(store0, store1) {\n return {\n defs: Object.assign(Object.assign({}, store0.defs), store1.defs),\n instances: Object.assign(Object.assign({}, store0.instances), store1.instances),\n };\n}\nfunction filterEventStoreDefs(eventStore, filterFunc) {\n let defs = filterHash(eventStore.defs, filterFunc);\n let instances = filterHash(eventStore.instances, (instance) => (defs[instance.defId] // still exists?\n ));\n return { defs, instances };\n}\nfunction excludeSubEventStore(master, sub) {\n let { defs, instances } = master;\n let filteredDefs = {};\n let filteredInstances = {};\n for (let defId in defs) {\n if (!sub.defs[defId]) { // not explicitly excluded\n filteredDefs[defId] = defs[defId];\n }\n }\n for (let instanceId in instances) {\n if (!sub.instances[instanceId] && // not explicitly excluded\n filteredDefs[instances[instanceId].defId] // def wasn't filtered away\n ) {\n filteredInstances[instanceId] = instances[instanceId];\n }\n }\n return {\n defs: filteredDefs,\n instances: filteredInstances,\n };\n}\n\nfunction normalizeConstraint(input, context) {\n if (Array.isArray(input)) {\n return parseEvents(input, null, context, true); // allowOpenRange=true\n }\n if (typeof input === 'object' && input) { // non-null object\n return parseEvents([input], null, context, true); // allowOpenRange=true\n }\n if (input != null) {\n return String(input);\n }\n return null;\n}\n\nfunction parseClassNames(raw) {\n if (Array.isArray(raw)) {\n return raw;\n }\n if (typeof raw === 'string') {\n return raw.split(/\\s+/);\n }\n return [];\n}\n\n// TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\nconst EVENT_UI_REFINERS = {\n display: String,\n editable: Boolean,\n startEditable: Boolean,\n durationEditable: Boolean,\n constraint: identity,\n overlap: identity,\n allow: identity,\n className: parseClassNames,\n classNames: parseClassNames,\n color: String,\n backgroundColor: String,\n borderColor: String,\n textColor: String,\n};\nconst EMPTY_EVENT_UI = {\n display: null,\n startEditable: null,\n durationEditable: null,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n};\nfunction createEventUi(refined, context) {\n let constraint = normalizeConstraint(refined.constraint, context);\n return {\n display: refined.display || null,\n startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,\n durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,\n constraints: constraint != null ? [constraint] : [],\n overlap: refined.overlap != null ? refined.overlap : null,\n allows: refined.allow != null ? [refined.allow] : [],\n backgroundColor: refined.backgroundColor || refined.color || '',\n borderColor: refined.borderColor || refined.color || '',\n textColor: refined.textColor || '',\n classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural\n };\n}\n// TODO: prevent against problems with <2 args!\nfunction combineEventUis(uis) {\n return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);\n}\nfunction combineTwoEventUis(item0, item1) {\n return {\n display: item1.display != null ? item1.display : item0.display,\n startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n constraints: item0.constraints.concat(item1.constraints),\n overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n allows: item0.allows.concat(item1.allows),\n backgroundColor: item1.backgroundColor || item0.backgroundColor,\n borderColor: item1.borderColor || item0.borderColor,\n textColor: item1.textColor || item0.textColor,\n classNames: item0.classNames.concat(item1.classNames),\n };\n}\n\nconst EVENT_SOURCE_REFINERS = {\n id: String,\n defaultAllDay: Boolean,\n url: String,\n format: String,\n events: identity,\n eventDataTransform: identity,\n // for any network-related sources\n success: identity,\n failure: identity,\n};\nfunction parseEventSource(raw, context, refiners = buildEventSourceRefiners(context)) {\n let rawObj;\n if (typeof raw === 'string') {\n rawObj = { url: raw };\n }\n else if (typeof raw === 'function' || Array.isArray(raw)) {\n rawObj = { events: raw };\n }\n else if (typeof raw === 'object' && raw) { // not null\n rawObj = raw;\n }\n if (rawObj) {\n let { refined, extra } = refineProps(rawObj, refiners);\n let metaRes = buildEventSourceMeta(refined, context);\n if (metaRes) {\n return {\n _raw: raw,\n isFetching: false,\n latestFetchId: '',\n fetchRange: null,\n defaultAllDay: refined.defaultAllDay,\n eventDataTransform: refined.eventDataTransform,\n success: refined.success,\n failure: refined.failure,\n publicId: refined.id || '',\n sourceId: guid(),\n sourceDefId: metaRes.sourceDefId,\n meta: metaRes.meta,\n ui: createEventUi(refined, context),\n extendedProps: extra,\n };\n }\n }\n return null;\n}\nfunction buildEventSourceRefiners(context) {\n return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);\n}\nfunction buildEventSourceMeta(raw, context) {\n let defs = context.pluginHooks.eventSourceDefs;\n for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence\n let def = defs[i];\n let meta = def.parseMeta(raw);\n if (meta) {\n return { sourceDefId: i, meta };\n }\n }\n return null;\n}\n\nfunction reduceEventStore(eventStore, action, eventSources, dateProfile, context) {\n switch (action.type) {\n case 'RECEIVE_EVENTS': // raw\n return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);\n case 'RESET_RAW_EVENTS':\n return resetRawEvents(eventStore, eventSources[action.sourceId], action.rawEvents, dateProfile.activeRange, context);\n case 'ADD_EVENTS': // already parsed, but not expanded\n return addEvent(eventStore, action.eventStore, // new ones\n dateProfile ? dateProfile.activeRange : null, context);\n case 'RESET_EVENTS':\n return action.eventStore;\n case 'MERGE_EVENTS': // already parsed and expanded\n return mergeEventStores(eventStore, action.eventStore);\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'CHANGE_DATE':\n case 'CHANGE_VIEW_TYPE':\n if (dateProfile) {\n return expandRecurring(eventStore, dateProfile.activeRange, context);\n }\n return eventStore;\n case 'REMOVE_EVENTS':\n return excludeSubEventStore(eventStore, action.eventStore);\n case 'REMOVE_EVENT_SOURCE':\n return excludeEventsBySourceId(eventStore, action.sourceId);\n case 'REMOVE_ALL_EVENT_SOURCES':\n return filterEventStoreDefs(eventStore, (eventDef) => (!eventDef.sourceId // only keep events with no source id\n ));\n case 'REMOVE_ALL_EVENTS':\n return createEmptyEventStore();\n default:\n return eventStore;\n }\n}\nfunction receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n ) {\n let subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);\n if (fetchRange) {\n subset = expandRecurring(subset, fetchRange, context);\n }\n return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);\n }\n return eventStore;\n}\nfunction resetRawEvents(existingEventStore, eventSource, rawEvents, activeRange, context) {\n const { defIdMap, instanceIdMap } = buildPublicIdMaps(existingEventStore);\n let newEventStore = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context, false, defIdMap, instanceIdMap);\n return expandRecurring(newEventStore, activeRange, context);\n}\nfunction transformRawEvents(rawEvents, eventSource, context) {\n let calEachTransform = context.options.eventDataTransform;\n let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;\n if (sourceEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);\n }\n if (calEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, calEachTransform);\n }\n return rawEvents;\n}\nfunction transformEachRawEvent(rawEvents, func) {\n let refinedEvents;\n if (!func) {\n refinedEvents = rawEvents;\n }\n else {\n refinedEvents = [];\n for (let rawEvent of rawEvents) {\n let refinedEvent = func(rawEvent);\n if (refinedEvent) {\n refinedEvents.push(refinedEvent);\n }\n else if (refinedEvent == null) {\n refinedEvents.push(rawEvent);\n } // if a different falsy value, do nothing\n }\n }\n return refinedEvents;\n}\nfunction addEvent(eventStore, subset, expandRange, context) {\n if (expandRange) {\n subset = expandRecurring(subset, expandRange, context);\n }\n return mergeEventStores(eventStore, subset);\n}\nfunction rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {\n let { defs } = eventStore;\n let instances = mapHash(eventStore.instances, (instance) => {\n let def = defs[instance.defId];\n if (def.allDay) {\n return instance; // isn't dependent on timezone\n }\n return Object.assign(Object.assign({}, instance), { range: {\n start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),\n }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });\n });\n return { defs, instances };\n}\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n return filterEventStoreDefs(eventStore, (eventDef) => eventDef.sourceId !== sourceId);\n}\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nfunction excludeInstances(eventStore, removals) {\n return {\n defs: eventStore.defs,\n instances: filterHash(eventStore.instances, (instance) => !removals[instance.instanceId]),\n };\n}\nfunction buildPublicIdMaps(eventStore) {\n const { defs, instances } = eventStore;\n const defIdMap = {};\n const instanceIdMap = {};\n for (let defId in defs) {\n const def = defs[defId];\n const { publicId } = def;\n if (publicId) {\n defIdMap[publicId] = defId;\n }\n }\n for (let instanceId in instances) {\n const instance = instances[instanceId];\n const def = defs[instance.defId];\n const { publicId } = def;\n if (publicId) {\n instanceIdMap[publicId] = instanceId;\n }\n }\n return { defIdMap, instanceIdMap };\n}\n\nclass Emitter {\n constructor() {\n this.handlers = {};\n this.thisContext = null;\n }\n setThisContext(thisContext) {\n this.thisContext = thisContext;\n }\n setOptions(options) {\n this.options = options;\n }\n on(type, handler) {\n addToHash(this.handlers, type, handler);\n }\n off(type, handler) {\n removeFromHash(this.handlers, type, handler);\n }\n trigger(type, ...args) {\n let attachedHandlers = this.handlers[type] || [];\n let optionHandler = this.options && this.options[type];\n let handlers = [].concat(optionHandler || [], attachedHandlers);\n for (let handler of handlers) {\n handler.apply(this.thisContext, args);\n }\n }\n hasHandlers(type) {\n return Boolean((this.handlers[type] && this.handlers[type].length) ||\n (this.options && this.options[type]));\n }\n}\nfunction addToHash(hash, type, handler) {\n (hash[type] || (hash[type] = []))\n .push(handler);\n}\nfunction removeFromHash(hash, type, handler) {\n if (handler) {\n if (hash[type]) {\n hash[type] = hash[type].filter((func) => func !== handler);\n }\n }\n else {\n delete hash[type]; // remove all handler funcs for this type\n }\n}\n\nconst DEF_DEFAULTS = {\n startTime: '09:00',\n endTime: '17:00',\n daysOfWeek: [1, 2, 3, 4, 5],\n display: 'inverse-background',\n classNames: 'fc-non-business',\n groupId: '_businessHours', // so multiple defs get grouped\n};\n/*\nTODO: pass around as EventDefHash!!!\n*/\nfunction parseBusinessHours(input, context) {\n return parseEvents(refineInputs(input), null, context);\n}\nfunction refineInputs(input) {\n let rawDefs;\n if (input === true) {\n rawDefs = [{}]; // will get DEF_DEFAULTS verbatim\n }\n else if (Array.isArray(input)) {\n // if specifying an array, every sub-definition NEEDS a day-of-week\n rawDefs = input.filter((rawDef) => rawDef.daysOfWeek);\n }\n else if (typeof input === 'object' && input) { // non-null object\n rawDefs = [input];\n }\n else { // is probably false\n rawDefs = [];\n }\n rawDefs = rawDefs.map((rawDef) => (Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef)));\n return rawDefs;\n}\n\nfunction triggerDateSelect(selection, pev, context) {\n context.emitter.trigger('select', Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));\n}\nfunction triggerDateUnselect(pev, context) {\n context.emitter.trigger('unselect', {\n jsEvent: pev ? pev.origEvent : null,\n view: context.viewApi || context.calendarApi.view,\n });\n}\nfunction buildDateSpanApiWithContext(dateSpan, context) {\n let props = {};\n for (let transform of context.pluginHooks.dateSpanTransforms) {\n Object.assign(props, transform(dateSpan, context));\n }\n Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));\n return props;\n}\n// Given an event's allDay status and start date, return what its fallback end date should be.\n// TODO: rename to computeDefaultEventEnd\nfunction getDefaultEventEnd(allDay, marker, context) {\n let { dateEnv, options } = context;\n let end = marker;\n if (allDay) {\n end = startOfDay(end);\n end = dateEnv.add(end, options.defaultAllDayEventDuration);\n }\n else {\n end = dateEnv.add(end, options.defaultTimedEventDuration);\n }\n return end;\n}\n\n// applies the mutation to ALL defs/instances within the event store\nfunction applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {\n let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);\n let dest = createEmptyEventStore();\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId];\n dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);\n }\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId];\n let def = dest.defs[instance.defId]; // important to grab the newly modified def\n dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);\n }\n return dest;\n}\nfunction applyMutationToEventDef(eventDef, eventConfig, mutation, context) {\n let standardProps = mutation.standardProps || {};\n // if hasEnd has not been specified, guess a good value based on deltas.\n // if duration will change, there's no way the default duration will persist,\n // and thus, we need to mark the event as having a real end\n if (standardProps.hasEnd == null &&\n eventConfig.durationEditable &&\n (mutation.startDelta || mutation.endDelta)) {\n standardProps.hasEnd = true; // TODO: is this mutation okay?\n }\n let copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), { ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui) });\n if (mutation.extendedProps) {\n copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);\n }\n for (let applier of context.pluginHooks.eventDefMutationAppliers) {\n applier(copy, mutation, context);\n }\n if (!copy.hasEnd && context.options.forceEventDuration) {\n copy.hasEnd = true;\n }\n return copy;\n}\nfunction applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef\neventConfig, mutation, context) {\n let { dateEnv } = context;\n let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;\n let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;\n let copy = Object.assign({}, eventInstance);\n if (forceAllDay) {\n copy.range = computeAlignedDayRange(copy.range);\n }\n if (mutation.datesDelta && eventConfig.startEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.datesDelta),\n end: dateEnv.add(copy.range.end, mutation.datesDelta),\n };\n }\n if (mutation.startDelta && eventConfig.durationEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.startDelta),\n end: copy.range.end,\n };\n }\n if (mutation.endDelta && eventConfig.durationEditable) {\n copy.range = {\n start: copy.range.start,\n end: dateEnv.add(copy.range.end, mutation.endDelta),\n };\n }\n if (clearEnd) {\n copy.range = {\n start: copy.range.start,\n end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),\n };\n }\n // in case event was all-day but the supplied deltas were not\n // better util for this?\n if (eventDef.allDay) {\n copy.range = {\n start: startOfDay(copy.range.start),\n end: startOfDay(copy.range.end),\n };\n }\n // handle invalid durations\n if (copy.range.end < copy.range.start) {\n copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);\n }\n return copy;\n}\n\nclass EventSourceImpl {\n constructor(context, internalEventSource) {\n this.context = context;\n this.internalEventSource = internalEventSource;\n }\n remove() {\n this.context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: this.internalEventSource.sourceId,\n });\n }\n refetch() {\n this.context.dispatch({\n type: 'FETCH_EVENT_SOURCES',\n sourceIds: [this.internalEventSource.sourceId],\n isRefetch: true,\n });\n }\n get id() {\n return this.internalEventSource.publicId;\n }\n get url() {\n return this.internalEventSource.meta.url;\n }\n get format() {\n return this.internalEventSource.meta.format; // TODO: bad. not guaranteed\n }\n}\n\nclass EventImpl {\n // instance will be null if expressing a recurring event that has no current instances,\n // OR if trying to validate an incoming external event that has no dates assigned\n constructor(context, def, instance) {\n this._context = context;\n this._def = def;\n this._instance = instance || null;\n }\n /*\n TODO: make event struct more responsible for this\n */\n setProp(name, val) {\n if (name in EVENT_DATE_REFINERS) {\n console.warn('Could not set date-related prop \\'name\\'. Use one of the date-related methods instead.');\n // TODO: make proper aliasing system?\n }\n else if (name === 'id') {\n val = EVENT_NON_DATE_REFINERS[name](val);\n this.mutate({\n standardProps: { publicId: val }, // hardcoded internal name\n });\n }\n else if (name in EVENT_NON_DATE_REFINERS) {\n val = EVENT_NON_DATE_REFINERS[name](val);\n this.mutate({\n standardProps: { [name]: val },\n });\n }\n else if (name in EVENT_UI_REFINERS) {\n let ui = EVENT_UI_REFINERS[name](val);\n if (name === 'color') {\n ui = { backgroundColor: val, borderColor: val };\n }\n else if (name === 'editable') {\n ui = { startEditable: val, durationEditable: val };\n }\n else {\n ui = { [name]: val };\n }\n this.mutate({\n standardProps: { ui },\n });\n }\n else {\n console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`);\n }\n }\n setExtendedProp(name, val) {\n this.mutate({\n extendedProps: { [name]: val },\n });\n }\n setStart(startInput, options = {}) {\n let { dateEnv } = this._context;\n let start = dateEnv.createMarker(startInput);\n if (start && this._instance) { // TODO: warning if parsed bad\n let instanceRange = this._instance.range;\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?\n if (options.maintainDuration) {\n this.mutate({ datesDelta: startDelta });\n }\n else {\n this.mutate({ startDelta });\n }\n }\n }\n setEnd(endInput, options = {}) {\n let { dateEnv } = this._context;\n let end;\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n if (!end) {\n return; // TODO: warning if parsed bad\n }\n }\n if (this._instance) {\n if (end) {\n let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);\n this.mutate({ endDelta });\n }\n else {\n this.mutate({ standardProps: { hasEnd: false } });\n }\n }\n }\n setDates(startInput, endInput, options = {}) {\n let { dateEnv } = this._context;\n let standardProps = { allDay: options.allDay };\n let start = dateEnv.createMarker(startInput);\n let end;\n if (!start) {\n return; // TODO: warning if parsed bad\n }\n if (endInput != null) {\n end = dateEnv.createMarker(endInput);\n if (!end) { // TODO: warning if parsed bad\n return;\n }\n }\n if (this._instance) {\n let instanceRange = this._instance.range;\n // when computing the diff for an event being converted to all-day,\n // compute diff off of the all-day values the way event-mutation does.\n if (options.allDay === true) {\n instanceRange = computeAlignedDayRange(instanceRange);\n }\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);\n if (end) {\n let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);\n if (durationsEqual(startDelta, endDelta)) {\n this.mutate({ datesDelta: startDelta, standardProps });\n }\n else {\n this.mutate({ startDelta, endDelta, standardProps });\n }\n }\n else { // means \"clear the end\"\n standardProps.hasEnd = false;\n this.mutate({ datesDelta: startDelta, standardProps });\n }\n }\n }\n moveStart(deltaInput) {\n let delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ startDelta: delta });\n }\n }\n moveEnd(deltaInput) {\n let delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ endDelta: delta });\n }\n }\n moveDates(deltaInput) {\n let delta = createDuration(deltaInput);\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ datesDelta: delta });\n }\n }\n setAllDay(allDay, options = {}) {\n let standardProps = { allDay };\n let { maintainDuration } = options;\n if (maintainDuration == null) {\n maintainDuration = this._context.options.allDayMaintainDuration;\n }\n if (this._def.allDay !== allDay) {\n standardProps.hasEnd = maintainDuration;\n }\n this.mutate({ standardProps });\n }\n formatRange(formatInput) {\n let { dateEnv } = this._context;\n let instance = this._instance;\n let formatter = createFormatter(formatInput);\n if (this._def.hasEnd) {\n return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n forcedStartTzo: instance.forcedStartTzo,\n forcedEndTzo: instance.forcedEndTzo,\n });\n }\n return dateEnv.format(instance.range.start, formatter, {\n forcedTzo: instance.forcedStartTzo,\n });\n }\n mutate(mutation) {\n let instance = this._instance;\n if (instance) {\n let def = this._def;\n let context = this._context;\n let { eventStore } = context.getCurrentData();\n let relevantEvents = getRelevantEvents(eventStore, instance.instanceId);\n let eventConfigBase = {\n '': {\n display: '',\n startEditable: true,\n durationEditable: true,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n },\n };\n relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);\n let oldEvent = new EventImpl(context, def, instance); // snapshot\n this._def = relevantEvents.defs[def.defId];\n this._instance = relevantEvents.instances[instance.instanceId];\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents,\n });\n context.emitter.trigger('eventChange', {\n oldEvent,\n event: this,\n relatedEvents: buildEventApis(relevantEvents, context, instance),\n revert() {\n context.dispatch({\n type: 'RESET_EVENTS',\n eventStore, // the ORIGINAL store\n });\n },\n });\n }\n }\n remove() {\n let context = this._context;\n let asStore = eventApiToStore(this);\n context.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: asStore,\n });\n context.emitter.trigger('eventRemove', {\n event: this,\n relatedEvents: [],\n revert() {\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: asStore,\n });\n },\n });\n }\n get source() {\n let { sourceId } = this._def;\n if (sourceId) {\n return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);\n }\n return null;\n }\n get start() {\n return this._instance ?\n this._context.dateEnv.toDate(this._instance.range.start) :\n null;\n }\n get end() {\n return (this._instance && this._def.hasEnd) ?\n this._context.dateEnv.toDate(this._instance.range.end) :\n null;\n }\n get startStr() {\n let instance = this._instance;\n if (instance) {\n return this._context.dateEnv.formatIso(instance.range.start, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedStartTzo,\n });\n }\n return '';\n }\n get endStr() {\n let instance = this._instance;\n if (instance && this._def.hasEnd) {\n return this._context.dateEnv.formatIso(instance.range.end, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedEndTzo,\n });\n }\n return '';\n }\n // computable props that all access the def\n // TODO: find a TypeScript-compatible way to do this at scale\n get id() { return this._def.publicId; }\n get groupId() { return this._def.groupId; }\n get allDay() { return this._def.allDay; }\n get title() { return this._def.title; }\n get url() { return this._def.url; }\n get display() { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier\n get startEditable() { return this._def.ui.startEditable; }\n get durationEditable() { return this._def.ui.durationEditable; }\n get constraint() { return this._def.ui.constraints[0] || null; }\n get overlap() { return this._def.ui.overlap; }\n get allow() { return this._def.ui.allows[0] || null; }\n get backgroundColor() { return this._def.ui.backgroundColor; }\n get borderColor() { return this._def.ui.borderColor; }\n get textColor() { return this._def.ui.textColor; }\n // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n get classNames() { return this._def.ui.classNames; }\n get extendedProps() { return this._def.extendedProps; }\n toPlainObject(settings = {}) {\n let def = this._def;\n let { ui } = def;\n let { startStr, endStr } = this;\n let res = {\n allDay: def.allDay,\n };\n if (def.title) {\n res.title = def.title;\n }\n if (startStr) {\n res.start = startStr;\n }\n if (endStr) {\n res.end = endStr;\n }\n if (def.publicId) {\n res.id = def.publicId;\n }\n if (def.groupId) {\n res.groupId = def.groupId;\n }\n if (def.url) {\n res.url = def.url;\n }\n if (ui.display && ui.display !== 'auto') {\n res.display = ui.display;\n }\n // TODO: what about recurring-event properties???\n // TODO: include startEditable/durationEditable/constraint/overlap/allow\n if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {\n res.color = ui.backgroundColor;\n }\n else {\n if (ui.backgroundColor) {\n res.backgroundColor = ui.backgroundColor;\n }\n if (ui.borderColor) {\n res.borderColor = ui.borderColor;\n }\n }\n if (ui.textColor) {\n res.textColor = ui.textColor;\n }\n if (ui.classNames.length) {\n res.classNames = ui.classNames;\n }\n if (Object.keys(def.extendedProps).length) {\n if (settings.collapseExtendedProps) {\n Object.assign(res, def.extendedProps);\n }\n else {\n res.extendedProps = def.extendedProps;\n }\n }\n return res;\n }\n toJSON() {\n return this.toPlainObject();\n }\n}\nfunction eventApiToStore(eventApi) {\n let def = eventApi._def;\n let instance = eventApi._instance;\n return {\n defs: { [def.defId]: def },\n instances: instance\n ? { [instance.instanceId]: instance }\n : {},\n };\n}\nfunction buildEventApis(eventStore, context, excludeInstance) {\n let { defs, instances } = eventStore;\n let eventApis = [];\n let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';\n for (let id in instances) {\n let instance = instances[id];\n let def = defs[instance.defId];\n if (instance.instanceId !== excludeInstanceId) {\n eventApis.push(new EventImpl(context, def, instance));\n }\n }\n return eventApis;\n}\n\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nfunction sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {\n let inverseBgByGroupId = {};\n let inverseBgByDefId = {};\n let defByGroupId = {};\n let bgRanges = [];\n let fgRanges = [];\n let eventUis = compileEventUis(eventStore.defs, eventUiBases);\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId];\n let ui = eventUis[def.defId];\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId] = [];\n if (!defByGroupId[def.groupId]) {\n defByGroupId[def.groupId] = def;\n }\n }\n else {\n inverseBgByDefId[defId] = [];\n }\n }\n }\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId];\n let def = eventStore.defs[instance.defId];\n let ui = eventUis[def.defId];\n let origRange = instance.range;\n let normalRange = (!def.allDay && nextDayThreshold) ?\n computeVisibleDayRange(origRange, nextDayThreshold) :\n origRange;\n let slicedRange = intersectRanges(normalRange, framingRange);\n if (slicedRange) {\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId].push(slicedRange);\n }\n else {\n inverseBgByDefId[instance.defId].push(slicedRange);\n }\n }\n else if (ui.display !== 'none') {\n (ui.display === 'background' ? bgRanges : fgRanges).push({\n def,\n ui,\n instance,\n range: slicedRange,\n isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),\n });\n }\n }\n }\n for (let groupId in inverseBgByGroupId) { // BY GROUP\n let ranges = inverseBgByGroupId[groupId];\n let invertedRanges = invertRanges(ranges, framingRange);\n for (let invertedRange of invertedRanges) {\n let def = defByGroupId[groupId];\n let ui = eventUis[def.defId];\n bgRanges.push({\n def,\n ui,\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n });\n }\n }\n for (let defId in inverseBgByDefId) {\n let ranges = inverseBgByDefId[defId];\n let invertedRanges = invertRanges(ranges, framingRange);\n for (let invertedRange of invertedRanges) {\n bgRanges.push({\n def: eventStore.defs[defId],\n ui: eventUis[defId],\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n });\n }\n }\n return { bg: bgRanges, fg: fgRanges };\n}\nfunction hasBgRendering(def) {\n return def.ui.display === 'background' || def.ui.display === 'inverse-background';\n}\nfunction setElSeg(el, seg) {\n el.fcSeg = seg;\n}\nfunction getElSeg(el) {\n return el.fcSeg ||\n el.parentNode.fcSeg || // for the harness\n null;\n}\n// event ui computation\nfunction compileEventUis(eventDefs, eventUiBases) {\n return mapHash(eventDefs, (eventDef) => compileEventUi(eventDef, eventUiBases));\n}\nfunction compileEventUi(eventDef, eventUiBases) {\n let uis = [];\n if (eventUiBases['']) {\n uis.push(eventUiBases['']);\n }\n if (eventUiBases[eventDef.defId]) {\n uis.push(eventUiBases[eventDef.defId]);\n }\n uis.push(eventDef.ui);\n return combineEventUis(uis);\n}\nfunction sortEventSegs(segs, eventOrderSpecs) {\n let objs = segs.map(buildSegCompareObj);\n objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));\n return objs.map((c) => c._seg);\n}\n// returns a object with all primitive props that can be compared\nfunction buildSegCompareObj(seg) {\n let { eventRange } = seg;\n let eventDef = eventRange.def;\n let range = eventRange.instance ? eventRange.instance.range : eventRange.range;\n let start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events\n let end = range.end ? range.end.valueOf() : 0; // \"\n return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start,\n end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });\n}\nfunction computeSegDraggable(seg, context) {\n let { pluginHooks } = context;\n let transformers = pluginHooks.isDraggableTransformers;\n let { def, ui } = seg.eventRange;\n let val = ui.startEditable;\n for (let transformer of transformers) {\n val = transformer(val, def, ui, context);\n }\n return val;\n}\nfunction computeSegStartResizable(seg, context) {\n return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;\n}\nfunction computeSegEndResizable(seg, context) {\n return seg.isEnd && seg.eventRange.ui.durationEditable;\n}\nfunction buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true\ndefaultDisplayEventEnd, // defaults to true\nstartOverride, endOverride) {\n let { dateEnv, options } = context;\n let { displayEventTime, displayEventEnd } = options;\n let eventDef = seg.eventRange.def;\n let eventInstance = seg.eventRange.instance;\n if (displayEventTime == null) {\n displayEventTime = defaultDisplayEventTime !== false;\n }\n if (displayEventEnd == null) {\n displayEventEnd = defaultDisplayEventEnd !== false;\n }\n let wholeEventStart = eventInstance.range.start;\n let wholeEventEnd = eventInstance.range.end;\n let segStart = startOverride || seg.start || seg.eventRange.range.start;\n let segEnd = endOverride || seg.end || seg.eventRange.range.end;\n let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();\n let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();\n if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {\n segStart = isStartDay ? wholeEventStart : segStart;\n segEnd = isEndDay ? wholeEventEnd : segEnd;\n if (displayEventEnd && eventDef.hasEnd) {\n return dateEnv.formatRange(segStart, segEnd, timeFormat, {\n forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,\n forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,\n });\n }\n return dateEnv.format(segStart, timeFormat, {\n forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same\n });\n }\n return '';\n}\nfunction getSegMeta(seg, todayRange, nowDate) {\n let segRange = seg.eventRange.range;\n return {\n isPast: segRange.end <= (nowDate || todayRange.start),\n isFuture: segRange.start >= (nowDate || todayRange.end),\n isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),\n };\n}\nfunction getEventClassNames(props) {\n let classNames = ['fc-event'];\n if (props.isMirror) {\n classNames.push('fc-event-mirror');\n }\n if (props.isDraggable) {\n classNames.push('fc-event-draggable');\n }\n if (props.isStartResizable || props.isEndResizable) {\n classNames.push('fc-event-resizable');\n }\n if (props.isDragging) {\n classNames.push('fc-event-dragging');\n }\n if (props.isResizing) {\n classNames.push('fc-event-resizing');\n }\n if (props.isSelected) {\n classNames.push('fc-event-selected');\n }\n if (props.isStart) {\n classNames.push('fc-event-start');\n }\n if (props.isEnd) {\n classNames.push('fc-event-end');\n }\n if (props.isPast) {\n classNames.push('fc-event-past');\n }\n if (props.isToday) {\n classNames.push('fc-event-today');\n }\n if (props.isFuture) {\n classNames.push('fc-event-future');\n }\n return classNames;\n}\nfunction buildEventRangeKey(eventRange) {\n return eventRange.instance\n ? eventRange.instance.instanceId\n : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;\n // inverse-background events don't have specific instances. TODO: better solution\n}\nfunction getSegAnchorAttrs(seg, context) {\n let { def, instance } = seg.eventRange;\n let { url } = def;\n if (url) {\n return { href: url };\n }\n let { emitter, options } = context;\n let { eventInteractive } = options;\n if (eventInteractive == null) {\n eventInteractive = def.interactive;\n if (eventInteractive == null) {\n eventInteractive = Boolean(emitter.hasHandlers('eventClick'));\n }\n }\n // mock what happens in EventClicking\n if (eventInteractive) {\n // only attach keyboard-related handlers because click handler is already done in EventClicking\n return createAriaKeyboardAttrs((ev) => {\n emitter.trigger('eventClick', {\n el: ev.target,\n event: new EventImpl(context, def, instance),\n jsEvent: ev,\n view: context.viewApi,\n });\n });\n }\n return {};\n}\n\nconst STANDARD_PROPS = {\n start: identity,\n end: identity,\n allDay: Boolean,\n};\nfunction parseDateSpan(raw, dateEnv, defaultDuration) {\n let span = parseOpenDateSpan(raw, dateEnv);\n let { range } = span;\n if (!range.start) {\n return null;\n }\n if (!range.end) {\n if (defaultDuration == null) {\n return null;\n }\n range.end = dateEnv.add(range.start, defaultDuration);\n }\n return span;\n}\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nfunction parseOpenDateSpan(raw, dateEnv) {\n let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS);\n let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;\n let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;\n let { allDay } = standardProps;\n if (allDay == null) {\n allDay = (startMeta && startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified);\n }\n return Object.assign({ range: {\n start: startMeta ? startMeta.marker : null,\n end: endMeta ? endMeta.marker : null,\n }, allDay }, extra);\n}\nfunction isDateSpansEqual(span0, span1) {\n return rangesEqual(span0.range, span1.range) &&\n span0.allDay === span1.allDay &&\n isSpanPropsEqual(span0, span1);\n}\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0, span1) {\n for (let propName in span1) {\n if (propName !== 'range' && propName !== 'allDay') {\n if (span0[propName] !== span1[propName]) {\n return false;\n }\n }\n }\n // are there any props that span0 has that span1 DOESN'T have?\n // both have range/allDay, so no need to special-case.\n for (let propName in span0) {\n if (!(propName in span1)) {\n return false;\n }\n }\n return true;\n}\nfunction buildDateSpanApi(span, dateEnv) {\n return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });\n}\nfunction buildRangeApiWithTimeZone(range, dateEnv, omitTime) {\n return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });\n}\nfunction buildRangeApi(range, dateEnv, omitTime) {\n return {\n start: dateEnv.toDate(range.start),\n end: dateEnv.toDate(range.end),\n startStr: dateEnv.formatIso(range.start, { omitTime }),\n endStr: dateEnv.formatIso(range.end, { omitTime }),\n };\n}\nfunction fabricateEventRange(dateSpan, eventUiBases, context) {\n let res = refineEventDef({ editable: false }, context);\n let def = parseEventDef(res.refined, res.extra, '', // sourceId\n dateSpan.allDay, true, // hasEnd\n context);\n return {\n def,\n ui: compileEventUi(def, eventUiBases),\n instance: createEventInstance(def.defId, dateSpan.range),\n range: dateSpan.range,\n isStart: true,\n isEnd: true,\n };\n}\n\n/*\ngiven a function that resolves a result asynchronously.\nthe function can either call passed-in success and failure callbacks,\nor it can return a promise.\nif you need to pass additional params to func, bind them first.\n*/\nfunction unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {\n // guard against success/failure callbacks being called more than once\n // and guard against a promise AND callback being used together.\n let isResolved = false;\n let wrappedSuccess = function (res) {\n if (!isResolved) {\n isResolved = true;\n normalizedSuccessCallback(res);\n }\n };\n let wrappedFailure = function (error) {\n if (!isResolved) {\n isResolved = true;\n normalizedFailureCallback(error);\n }\n };\n let res = func(wrappedSuccess, wrappedFailure);\n if (res && typeof res.then === 'function') {\n res.then(wrappedSuccess, wrappedFailure);\n }\n}\n\nclass JsonRequestError extends Error {\n constructor(message, response) {\n super(message);\n this.response = response;\n }\n}\nfunction requestJson(method, url, params) {\n method = method.toUpperCase();\n const fetchOptions = {\n method,\n };\n if (method === 'GET') {\n url += (url.indexOf('?') === -1 ? '?' : '&') +\n new URLSearchParams(params);\n }\n else {\n fetchOptions.body = new URLSearchParams(params);\n fetchOptions.headers = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n }\n return fetch(url, fetchOptions).then((fetchRes) => {\n if (fetchRes.ok) {\n return fetchRes.json().then((parsedResponse) => {\n return [parsedResponse, fetchRes];\n }, () => {\n throw new JsonRequestError('Failure parsing JSON', fetchRes);\n });\n }\n else {\n throw new JsonRequestError('Request failed', fetchRes);\n }\n });\n}\n\nlet canVGrowWithinCell;\nfunction getCanVGrowWithinCell() {\n if (canVGrowWithinCell == null) {\n canVGrowWithinCell = computeCanVGrowWithinCell();\n }\n return canVGrowWithinCell;\n}\nfunction computeCanVGrowWithinCell() {\n // for SSR, because this function is call immediately at top-level\n // TODO: just make this logic execute top-level, immediately, instead of doing lazily\n if (typeof document === 'undefined') {\n return true;\n }\n let el = document.createElement('div');\n el.style.position = 'absolute';\n el.style.top = '0px';\n el.style.left = '0px';\n el.innerHTML = '<table><tr><td><div></div></td></tr></table>';\n el.querySelector('table').style.height = '100px';\n el.querySelector('div').style.height = '100%';\n document.body.appendChild(el);\n let div = el.querySelector('div');\n let possible = div.offsetHeight > 0;\n document.body.removeChild(el);\n return possible;\n}\n\nclass CalendarRoot extends BaseComponent {\n constructor() {\n super(...arguments);\n this.state = {\n forPrint: false,\n };\n this.handleBeforePrint = () => {\n flushSync(() => {\n this.setState({ forPrint: true });\n });\n };\n this.handleAfterPrint = () => {\n flushSync(() => {\n this.setState({ forPrint: false });\n });\n };\n }\n render() {\n let { props } = this;\n let { options } = props;\n let { forPrint } = this.state;\n let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';\n let height = (!isHeightAuto && options.height != null) ? options.height : '';\n let classNames = [\n 'fc',\n forPrint ? 'fc-media-print' : 'fc-media-screen',\n `fc-direction-${options.direction}`,\n props.theme.getClass('root'),\n ];\n if (!getCanVGrowWithinCell()) {\n classNames.push('fc-liquid-hack');\n }\n return props.children(classNames, height, isHeightAuto, forPrint);\n }\n componentDidMount() {\n let { emitter } = this.props;\n emitter.on('_beforeprint', this.handleBeforePrint);\n emitter.on('_afterprint', this.handleAfterPrint);\n }\n componentWillUnmount() {\n let { emitter } = this.props;\n emitter.off('_beforeprint', this.handleBeforePrint);\n emitter.off('_afterprint', this.handleAfterPrint);\n }\n}\n\nclass Interaction {\n constructor(settings) {\n this.component = settings.component;\n this.isHitComboAllowed = settings.isHitComboAllowed || null;\n }\n destroy() {\n }\n}\nfunction parseInteractionSettings(component, input) {\n return {\n component,\n el: input.el,\n useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,\n isHitComboAllowed: input.isHitComboAllowed || null,\n };\n}\nfunction interactionSettingsToStore(settings) {\n return {\n [settings.component.uid]: settings,\n };\n}\n// global state\nconst interactionSettingsStore = {};\n\nclass CalendarImpl {\n getCurrentData() {\n return this.currentDataManager.getCurrentData();\n }\n dispatch(action) {\n this.currentDataManager.dispatch(action);\n }\n get view() { return this.getCurrentData().viewApi; }\n batchRendering(callback) {\n callback();\n }\n updateSize() {\n this.trigger('_resize', true);\n }\n // Options\n // -----------------------------------------------------------------------------------------------------------------\n setOption(name, val) {\n this.dispatch({\n type: 'SET_OPTION',\n optionName: name,\n rawOptionValue: val,\n });\n }\n getOption(name) {\n return this.currentDataManager.currentCalendarOptionsInput[name];\n }\n getAvailableLocaleCodes() {\n return Object.keys(this.getCurrentData().availableRawLocales);\n }\n // Trigger\n // -----------------------------------------------------------------------------------------------------------------\n on(handlerName, handler) {\n let { currentDataManager } = this;\n if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {\n currentDataManager.emitter.on(handlerName, handler);\n }\n else {\n console.warn(`Unknown listener name '${handlerName}'`);\n }\n }\n off(handlerName, handler) {\n this.currentDataManager.emitter.off(handlerName, handler);\n }\n // not meant for public use\n trigger(handlerName, ...args) {\n this.currentDataManager.emitter.trigger(handlerName, ...args);\n }\n // View\n // -----------------------------------------------------------------------------------------------------------------\n changeView(viewType, dateOrRange) {\n this.batchRendering(() => {\n this.unselect();\n if (dateOrRange) {\n if (dateOrRange.start && dateOrRange.end) { // a range\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n });\n this.dispatch({\n type: 'SET_OPTION',\n optionName: 'visibleRange',\n rawOptionValue: dateOrRange,\n });\n }\n else {\n let { dateEnv } = this.getCurrentData();\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n dateMarker: dateEnv.createMarker(dateOrRange),\n });\n }\n }\n else {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n });\n }\n });\n }\n // Forces navigation to a view for the given date.\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n // needs to change\n zoomTo(dateMarker, viewType) {\n let state = this.getCurrentData();\n let spec;\n viewType = viewType || 'day'; // day is default zoom\n spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);\n this.unselect();\n if (spec) {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType: spec.type,\n dateMarker,\n });\n }\n else {\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker,\n });\n }\n }\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n // Preference is given to views that have corresponding buttons.\n getUnitViewSpec(unit) {\n let { viewSpecs, toolbarConfig } = this.getCurrentData();\n let viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);\n let i;\n let spec;\n for (let viewType in viewSpecs) {\n viewTypes.push(viewType);\n }\n for (i = 0; i < viewTypes.length; i += 1) {\n spec = viewSpecs[viewTypes[i]];\n if (spec) {\n if (spec.singleUnit === unit) {\n return spec;\n }\n }\n }\n return null;\n }\n // Current Date\n // -----------------------------------------------------------------------------------------------------------------\n prev() {\n this.unselect();\n this.dispatch({ type: 'PREV' });\n }\n next() {\n this.unselect();\n this.dispatch({ type: 'NEXT' });\n }\n prevYear() {\n let state = this.getCurrentData();\n this.unselect();\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, -1),\n });\n }\n nextYear() {\n let state = this.getCurrentData();\n this.unselect();\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, 1),\n });\n }\n today() {\n let state = this.getCurrentData();\n this.unselect();\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: getNow(state.calendarOptions.now, state.dateEnv),\n });\n }\n gotoDate(zonedDateInput) {\n let state = this.getCurrentData();\n this.unselect();\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.createMarker(zonedDateInput),\n });\n }\n incrementDate(deltaInput) {\n let state = this.getCurrentData();\n let delta = createDuration(deltaInput);\n if (delta) { // else, warn about invalid input?\n this.unselect();\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.add(state.currentDate, delta),\n });\n }\n }\n getDate() {\n let state = this.getCurrentData();\n return state.dateEnv.toDate(state.currentDate);\n }\n // Date Formatting Utils\n // -----------------------------------------------------------------------------------------------------------------\n formatDate(d, formatter) {\n let { dateEnv } = this.getCurrentData();\n return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));\n }\n // `settings` is for formatter AND isEndExclusive\n formatRange(d0, d1, settings) {\n let { dateEnv } = this.getCurrentData();\n return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);\n }\n formatIso(d, omitTime) {\n let { dateEnv } = this.getCurrentData();\n return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime });\n }\n // Date Selection / Event Selection / DayClick\n // -----------------------------------------------------------------------------------------------------------------\n select(dateOrObj, endDate) {\n let selectionInput;\n if (endDate == null) {\n if (dateOrObj.start != null) {\n selectionInput = dateOrObj;\n }\n else {\n selectionInput = {\n start: dateOrObj,\n end: null,\n };\n }\n }\n else {\n selectionInput = {\n start: dateOrObj,\n end: endDate,\n };\n }\n let state = this.getCurrentData();\n let selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));\n if (selection) { // throw parse error otherwise?\n this.dispatch({ type: 'SELECT_DATES', selection });\n triggerDateSelect(selection, null, state);\n }\n }\n unselect(pev) {\n let state = this.getCurrentData();\n if (state.dateSelection) {\n this.dispatch({ type: 'UNSELECT_DATES' });\n triggerDateUnselect(pev, state);\n }\n }\n // Public Events API\n // -----------------------------------------------------------------------------------------------------------------\n addEvent(eventInput, sourceInput) {\n if (eventInput instanceof EventImpl) {\n let def = eventInput._def;\n let instance = eventInput._instance;\n let currentData = this.getCurrentData();\n // not already present? don't want to add an old snapshot\n if (!currentData.eventStore.defs[def.defId]) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?\n });\n this.triggerEventAdd(eventInput);\n }\n return eventInput;\n }\n let state = this.getCurrentData();\n let eventSource;\n if (sourceInput instanceof EventSourceImpl) {\n eventSource = sourceInput.internalEventSource;\n }\n else if (typeof sourceInput === 'boolean') {\n if (sourceInput) { // true. part of the first event source\n [eventSource] = hashValuesToArray(state.eventSources);\n }\n }\n else if (sourceInput != null) { // an ID. accepts a number too\n let sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function\n if (!sourceApi) {\n console.warn(`Could not find an event source with ID \"${sourceInput}\"`); // TODO: test\n return null;\n }\n eventSource = sourceApi.internalEventSource;\n }\n let tuple = parseEvent(eventInput, eventSource, state, false);\n if (tuple) {\n let newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore(tuple),\n });\n this.triggerEventAdd(newEventApi);\n return newEventApi;\n }\n return null;\n }\n triggerEventAdd(eventApi) {\n let { emitter } = this.getCurrentData();\n emitter.trigger('eventAdd', {\n event: eventApi,\n relatedEvents: [],\n revert: () => {\n this.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: eventApiToStore(eventApi),\n });\n },\n });\n }\n // TODO: optimize\n getEventById(id) {\n let state = this.getCurrentData();\n let { defs, instances } = state.eventStore;\n id = String(id);\n for (let defId in defs) {\n let def = defs[defId];\n if (def.publicId === id) {\n if (def.recurringDef) {\n return new EventImpl(state, def, null);\n }\n for (let instanceId in instances) {\n let instance = instances[instanceId];\n if (instance.defId === def.defId) {\n return new EventImpl(state, def, instance);\n }\n }\n }\n }\n return null;\n }\n getEvents() {\n let currentData = this.getCurrentData();\n return buildEventApis(currentData.eventStore, currentData);\n }\n removeAllEvents() {\n this.dispatch({ type: 'REMOVE_ALL_EVENTS' });\n }\n // Public Event Sources API\n // -----------------------------------------------------------------------------------------------------------------\n getEventSources() {\n let state = this.getCurrentData();\n let sourceHash = state.eventSources;\n let sourceApis = [];\n for (let internalId in sourceHash) {\n sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));\n }\n return sourceApis;\n }\n getEventSourceById(id) {\n let state = this.getCurrentData();\n let sourceHash = state.eventSources;\n id = String(id);\n for (let sourceId in sourceHash) {\n if (sourceHash[sourceId].publicId === id) {\n return new EventSourceImpl(state, sourceHash[sourceId]);\n }\n }\n return null;\n }\n addEventSource(sourceInput) {\n let state = this.getCurrentData();\n if (sourceInput instanceof EventSourceImpl) {\n // not already present? don't want to add an old snapshot\n if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [sourceInput.internalEventSource],\n });\n }\n return sourceInput;\n }\n let eventSource = parseEventSource(sourceInput, state);\n if (eventSource) { // TODO: error otherwise?\n this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });\n return new EventSourceImpl(state, eventSource);\n }\n return null;\n }\n removeAllEventSources() {\n this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });\n }\n refetchEvents() {\n this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });\n }\n // Scroll\n // -----------------------------------------------------------------------------------------------------------------\n scrollToTime(timeInput) {\n let time = createDuration(timeInput);\n if (time) {\n this.trigger('_scrollRequest', { time });\n }\n }\n}\n\nfunction pointInsideRect(point, rect) {\n return point.left >= rect.left &&\n point.left < rect.right &&\n point.top >= rect.top &&\n point.top < rect.bottom;\n}\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nfunction intersectRects(rect1, rect2) {\n let res = {\n left: Math.max(rect1.left, rect2.left),\n right: Math.min(rect1.right, rect2.right),\n top: Math.max(rect1.top, rect2.top),\n bottom: Math.min(rect1.bottom, rect2.bottom),\n };\n if (res.left < res.right && res.top < res.bottom) {\n return res;\n }\n return false;\n}\nfunction translateRect(rect, deltaX, deltaY) {\n return {\n left: rect.left + deltaX,\n right: rect.right + deltaX,\n top: rect.top + deltaY,\n bottom: rect.bottom + deltaY,\n };\n}\n// Returns a new point that will have been moved to reside within the given rectangle\nfunction constrainPoint(point, rect) {\n return {\n left: Math.min(Math.max(point.left, rect.left), rect.right),\n top: Math.min(Math.max(point.top, rect.top), rect.bottom),\n };\n}\n// Returns a point that is the center of the given rectangle\nfunction getRectCenter(rect) {\n return {\n left: (rect.left + rect.right) / 2,\n top: (rect.top + rect.bottom) / 2,\n };\n}\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nfunction diffPoints(point1, point2) {\n return {\n left: point1.left - point2.left,\n top: point1.top - point2.top,\n };\n}\n\nconst EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere\nclass Splitter {\n constructor() {\n this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);\n this.splitDateSelection = memoize(this._splitDateSpan);\n this.splitEventStore = memoize(this._splitEventStore);\n this.splitIndividualUi = memoize(this._splitIndividualUi);\n this.splitEventDrag = memoize(this._splitInteraction);\n this.splitEventResize = memoize(this._splitInteraction);\n this.eventUiBuilders = {}; // TODO: typescript protection\n }\n splitProps(props) {\n let keyInfos = this.getKeyInfo(props);\n let defKeys = this.getKeysForEventDefs(props.eventStore);\n let dateSelections = this.splitDateSelection(props.dateSelection);\n let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*\n let eventStores = this.splitEventStore(props.eventStore, defKeys);\n let eventDrags = this.splitEventDrag(props.eventDrag);\n let eventResizes = this.splitEventResize(props.eventResize);\n let splitProps = {};\n this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey));\n for (let key in keyInfos) {\n let keyInfo = keyInfos[key];\n let eventStore = eventStores[key] || EMPTY_EVENT_STORE;\n let buildEventUi = this.eventUiBuilders[key];\n splitProps[key] = {\n businessHours: keyInfo.businessHours || props.businessHours,\n dateSelection: dateSelections[key] || null,\n eventStore,\n eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n eventDrag: eventDrags[key] || null,\n eventResize: eventResizes[key] || null,\n };\n }\n return splitProps;\n }\n _splitDateSpan(dateSpan) {\n let dateSpans = {};\n if (dateSpan) {\n let keys = this.getKeysForDateSpan(dateSpan);\n for (let key of keys) {\n dateSpans[key] = dateSpan;\n }\n }\n return dateSpans;\n }\n _getKeysForEventDefs(eventStore) {\n return mapHash(eventStore.defs, (eventDef) => this.getKeysForEventDef(eventDef));\n }\n _splitEventStore(eventStore, defKeys) {\n let { defs, instances } = eventStore;\n let splitStores = {};\n for (let defId in defs) {\n for (let key of defKeys[defId]) {\n if (!splitStores[key]) {\n splitStores[key] = createEmptyEventStore();\n }\n splitStores[key].defs[defId] = defs[defId];\n }\n }\n for (let instanceId in instances) {\n let instance = instances[instanceId];\n for (let key of defKeys[instance.defId]) {\n if (splitStores[key]) { // must have already been created\n splitStores[key].instances[instanceId] = instance;\n }\n }\n }\n return splitStores;\n }\n _splitIndividualUi(eventUiBases, defKeys) {\n let splitHashes = {};\n for (let defId in eventUiBases) {\n if (defId) { // not the '' key\n for (let key of defKeys[defId]) {\n if (!splitHashes[key]) {\n splitHashes[key] = {};\n }\n splitHashes[key][defId] = eventUiBases[defId];\n }\n }\n }\n return splitHashes;\n }\n _splitInteraction(interaction) {\n let splitStates = {};\n if (interaction) {\n let affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));\n // can't rely on defKeys because event data is mutated\n let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);\n let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);\n let populate = (key) => {\n if (!splitStates[key]) {\n splitStates[key] = {\n affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n isEvent: interaction.isEvent,\n };\n }\n };\n for (let key in affectedStores) {\n populate(key);\n }\n for (let key in mutatedStores) {\n populate(key);\n }\n }\n return splitStates;\n }\n}\nfunction buildEventUiForKey(allUi, eventUiForKey, individualUi) {\n let baseParts = [];\n if (allUi) {\n baseParts.push(allUi);\n }\n if (eventUiForKey) {\n baseParts.push(eventUiForKey);\n }\n let stuff = {\n '': combineEventUis(baseParts),\n };\n if (individualUi) {\n Object.assign(stuff, individualUi);\n }\n return stuff;\n}\n\nfunction getDateMeta(date, todayRange, nowDate, dateProfile) {\n return {\n dow: date.getUTCDay(),\n isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),\n isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),\n isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),\n isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),\n isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),\n };\n}\nfunction getDayClassNames(meta, theme) {\n let classNames = [\n 'fc-day',\n `fc-day-${DAY_IDS[meta.dow]}`,\n ];\n if (meta.isDisabled) {\n classNames.push('fc-day-disabled');\n }\n else {\n if (meta.isToday) {\n classNames.push('fc-day-today');\n classNames.push(theme.getClass('today'));\n }\n if (meta.isPast) {\n classNames.push('fc-day-past');\n }\n if (meta.isFuture) {\n classNames.push('fc-day-future');\n }\n if (meta.isOther) {\n classNames.push('fc-day-other');\n }\n }\n return classNames;\n}\nfunction getSlotClassNames(meta, theme) {\n let classNames = [\n 'fc-slot',\n `fc-slot-${DAY_IDS[meta.dow]}`,\n ];\n if (meta.isDisabled) {\n classNames.push('fc-slot-disabled');\n }\n else {\n if (meta.isToday) {\n classNames.push('fc-slot-today');\n classNames.push(theme.getClass('today'));\n }\n if (meta.isPast) {\n classNames.push('fc-slot-past');\n }\n if (meta.isFuture) {\n classNames.push('fc-slot-future');\n }\n }\n return classNames;\n}\n\nconst DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });\nconst WEEK_FORMAT = createFormatter({ week: 'long' });\nfunction buildNavLinkAttrs(context, dateMarker, viewType = 'day', isTabbable = true) {\n const { dateEnv, options, calendarApi } = context;\n let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);\n if (options.navLinks) {\n let zonedDate = dateEnv.toDate(dateMarker);\n const handleInteraction = (ev) => {\n let customAction = viewType === 'day' ? options.navLinkDayClick :\n viewType === 'week' ? options.navLinkWeekClick : null;\n if (typeof customAction === 'function') {\n customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);\n }\n else {\n if (typeof customAction === 'string') {\n viewType = customAction;\n }\n calendarApi.zoomTo(dateMarker, viewType);\n }\n };\n return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable\n ? createAriaClickAttrs(handleInteraction)\n : { onClick: handleInteraction }));\n }\n return { 'aria-label': dateStr };\n}\n\nlet _isRtlScrollbarOnLeft = null;\nfunction getIsRtlScrollbarOnLeft() {\n if (_isRtlScrollbarOnLeft === null) {\n _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();\n }\n return _isRtlScrollbarOnLeft;\n}\nfunction computeIsRtlScrollbarOnLeft() {\n let outerEl = document.createElement('div');\n applyStyle(outerEl, {\n position: 'absolute',\n top: -1000,\n left: 0,\n border: 0,\n padding: 0,\n overflow: 'scroll',\n direction: 'rtl',\n });\n outerEl.innerHTML = '<div></div>';\n document.body.appendChild(outerEl);\n let innerEl = outerEl.firstChild;\n let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;\n removeElement(outerEl);\n return res;\n}\n\nlet _scrollbarWidths;\nfunction getScrollbarWidths() {\n if (!_scrollbarWidths) {\n _scrollbarWidths = computeScrollbarWidths();\n }\n return _scrollbarWidths;\n}\nfunction computeScrollbarWidths() {\n let el = document.createElement('div');\n el.style.overflow = 'scroll';\n el.style.position = 'absolute';\n el.style.top = '-9999px';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n let res = computeScrollbarWidthsForEl(el);\n document.body.removeChild(el);\n return res;\n}\n// WARNING: will include border\nfunction computeScrollbarWidthsForEl(el) {\n return {\n x: el.offsetHeight - el.clientHeight,\n y: el.offsetWidth - el.clientWidth,\n };\n}\n\nfunction computeEdges(el, getPadding = false) {\n let computedStyle = window.getComputedStyle(el);\n let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;\n let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;\n let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;\n let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\n let badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!\n let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;\n let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;\n let res = {\n borderLeft,\n borderRight,\n borderTop,\n borderBottom,\n scrollbarBottom,\n scrollbarLeft: 0,\n scrollbarRight: 0,\n };\n if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n res.scrollbarLeft = scrollbarLeftRight;\n }\n else {\n res.scrollbarRight = scrollbarLeftRight;\n }\n if (getPadding) {\n res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;\n res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;\n res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;\n res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;\n }\n return res;\n}\nfunction computeInnerRect(el, goWithinPadding = false, doFromWindowViewport) {\n let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);\n let edges = computeEdges(el, goWithinPadding);\n let res = {\n left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n top: outerRect.top + edges.borderTop,\n bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,\n };\n if (goWithinPadding) {\n res.left += edges.paddingLeft;\n res.right -= edges.paddingRight;\n res.top += edges.paddingTop;\n res.bottom -= edges.paddingBottom;\n }\n return res;\n}\nfunction computeRect(el) {\n let rect = el.getBoundingClientRect();\n return {\n left: rect.left + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n right: rect.right + window.pageXOffset,\n bottom: rect.bottom + window.pageYOffset,\n };\n}\nfunction computeClippedClientRect(el) {\n let clippingParents = getClippingParents(el);\n let rect = el.getBoundingClientRect();\n for (let clippingParent of clippingParents) {\n let intersection = intersectRects(rect, clippingParent.getBoundingClientRect());\n if (intersection) {\n rect = intersection;\n }\n else {\n return null;\n }\n }\n return rect;\n}\n// does not return window\nfunction getClippingParents(el) {\n let parents = [];\n while (el instanceof HTMLElement) { // will stop when gets to document or null\n let computedStyle = window.getComputedStyle(el);\n if (computedStyle.position === 'fixed') {\n break;\n }\n if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n parents.push(el);\n }\n el = el.parentNode;\n }\n return parents;\n}\n\n/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nclass PositionCache {\n constructor(originEl, els, isHorizontal, isVertical) {\n this.els = els;\n let originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left\n if (isHorizontal) {\n this.buildElHorizontals(originClientRect.left);\n }\n if (isVertical) {\n this.buildElVerticals(originClientRect.top);\n }\n }\n // Populates the left/right internal coordinate arrays\n buildElHorizontals(originClientLeft) {\n let lefts = [];\n let rights = [];\n for (let el of this.els) {\n let rect = el.getBoundingClientRect();\n lefts.push(rect.left - originClientLeft);\n rights.push(rect.right - originClientLeft);\n }\n this.lefts = lefts;\n this.rights = rights;\n }\n // Populates the top/bottom internal coordinate arrays\n buildElVerticals(originClientTop) {\n let tops = [];\n let bottoms = [];\n for (let el of this.els) {\n let rect = el.getBoundingClientRect();\n tops.push(rect.top - originClientTop);\n bottoms.push(rect.bottom - originClientTop);\n }\n this.tops = tops;\n this.bottoms = bottoms;\n }\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n // If no intersection is made, returns undefined.\n leftToIndex(leftPosition) {\n let { lefts, rights } = this;\n let len = lefts.length;\n let i;\n for (i = 0; i < len; i += 1) {\n if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n return i;\n }\n }\n return undefined; // TODO: better\n }\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n // If no intersection is made, returns undefined.\n topToIndex(topPosition) {\n let { tops, bottoms } = this;\n let len = tops.length;\n let i;\n for (i = 0; i < len; i += 1) {\n if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n return i;\n }\n }\n return undefined; // TODO: better\n }\n // Gets the width of the element at the given index\n getWidth(leftIndex) {\n return this.rights[leftIndex] - this.lefts[leftIndex];\n }\n // Gets the height of the element at the given index\n getHeight(topIndex) {\n return this.bottoms[topIndex] - this.tops[topIndex];\n }\n similarTo(otherCache) {\n return similarNumArrays(this.tops || [], otherCache.tops || []) &&\n similarNumArrays(this.bottoms || [], otherCache.bottoms || []) &&\n similarNumArrays(this.lefts || [], otherCache.lefts || []) &&\n similarNumArrays(this.rights || [], otherCache.rights || []);\n }\n}\nfunction similarNumArrays(a, b) {\n const len = a.length;\n if (len !== b.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (Math.round(a[i]) !== Math.round(b[i])) {\n return false;\n }\n }\n return true;\n}\n\n/* eslint max-classes-per-file: \"off\" */\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nclass ScrollController {\n getMaxScrollTop() {\n return this.getScrollHeight() - this.getClientHeight();\n }\n getMaxScrollLeft() {\n return this.getScrollWidth() - this.getClientWidth();\n }\n canScrollVertically() {\n return this.getMaxScrollTop() > 0;\n }\n canScrollHorizontally() {\n return this.getMaxScrollLeft() > 0;\n }\n canScrollUp() {\n return this.getScrollTop() > 0;\n }\n canScrollDown() {\n return this.getScrollTop() < this.getMaxScrollTop();\n }\n canScrollLeft() {\n return this.getScrollLeft() > 0;\n }\n canScrollRight() {\n return this.getScrollLeft() < this.getMaxScrollLeft();\n }\n}\nclass ElementScrollController extends ScrollController {\n constructor(el) {\n super();\n this.el = el;\n }\n getScrollTop() {\n return this.el.scrollTop;\n }\n getScrollLeft() {\n return this.el.scrollLeft;\n }\n setScrollTop(top) {\n this.el.scrollTop = top;\n }\n setScrollLeft(left) {\n this.el.scrollLeft = left;\n }\n getScrollWidth() {\n return this.el.scrollWidth;\n }\n getScrollHeight() {\n return this.el.scrollHeight;\n }\n getClientHeight() {\n return this.el.clientHeight;\n }\n getClientWidth() {\n return this.el.clientWidth;\n }\n}\nclass WindowScrollController extends ScrollController {\n getScrollTop() {\n return window.pageYOffset;\n }\n getScrollLeft() {\n return window.pageXOffset;\n }\n setScrollTop(n) {\n window.scroll(window.pageXOffset, n);\n }\n setScrollLeft(n) {\n window.scroll(n, window.pageYOffset);\n }\n getScrollWidth() {\n return document.documentElement.scrollWidth;\n }\n getScrollHeight() {\n return document.documentElement.scrollHeight;\n }\n getClientHeight() {\n return document.documentElement.clientHeight;\n }\n getClientWidth() {\n return document.documentElement.clientWidth;\n }\n}\n\n/*\nan INTERACTABLE date component\n\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nclass DateComponent extends BaseComponent {\n constructor() {\n super(...arguments);\n this.uid = guid();\n }\n // Hit System\n // -----------------------------------------------------------------------------------------------------------------\n prepareHits() {\n }\n queryHit(positionLeft, positionTop, elWidth, elHeight) {\n return null; // this should be abstract\n }\n // Pointer Interaction Utils\n // -----------------------------------------------------------------------------------------------------------------\n isValidSegDownEl(el) {\n return !this.props.eventDrag && // HACK\n !this.props.eventResize && // HACK\n !elementClosest(el, '.fc-event-mirror');\n }\n isValidDateDownEl(el) {\n return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&\n !elementClosest(el, '.fc-more-link') && // a \"more..\" link\n !elementClosest(el, 'a[data-navlink]') && // a clickable nav link\n !elementClosest(el, '.fc-popover'); // hack\n }\n}\n\nclass NamedTimeZoneImpl {\n constructor(timeZoneName) {\n this.timeZoneName = timeZoneName;\n }\n}\n\nclass SegHierarchy {\n constructor(getEntryThickness = (entry) => {\n // if no thickness known, assume 1 (if 0, so small it always fits)\n return entry.thickness || 1;\n }) {\n this.getEntryThickness = getEntryThickness;\n // settings\n this.strictOrder = false;\n this.allowReslicing = false;\n this.maxCoord = -1; // -1 means no max\n this.maxStackCnt = -1; // -1 means no max\n this.levelCoords = []; // ordered\n this.entriesByLevel = []; // parallel with levelCoords\n this.stackCnts = {}; // TODO: use better technique!?\n }\n addSegs(inputs) {\n let hiddenEntries = [];\n for (let input of inputs) {\n this.insertEntry(input, hiddenEntries);\n }\n return hiddenEntries;\n }\n insertEntry(entry, hiddenEntries) {\n let insertion = this.findInsertion(entry);\n if (this.isInsertionValid(insertion, entry)) {\n this.insertEntryAt(entry, insertion);\n }\n else {\n this.handleInvalidInsertion(insertion, entry, hiddenEntries);\n }\n }\n isInsertionValid(insertion, entry) {\n return (this.maxCoord === -1 || insertion.levelCoord + this.getEntryThickness(entry) <= this.maxCoord) &&\n (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);\n }\n handleInvalidInsertion(insertion, entry, hiddenEntries) {\n if (this.allowReslicing && insertion.touchingEntry) {\n const hiddenEntry = Object.assign(Object.assign({}, entry), { span: intersectSpans(entry.span, insertion.touchingEntry.span) });\n hiddenEntries.push(hiddenEntry);\n this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);\n }\n else {\n hiddenEntries.push(entry);\n }\n }\n /*\n Does NOT add what hit the `barrier` into hiddenEntries. Should already be done.\n */\n splitEntry(entry, barrier, hiddenEntries) {\n let entrySpan = entry.span;\n let barrierSpan = barrier.span;\n if (entrySpan.start < barrierSpan.start) {\n this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: entrySpan.start, end: barrierSpan.start },\n }, hiddenEntries);\n }\n if (entrySpan.end > barrierSpan.end) {\n this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: barrierSpan.end, end: entrySpan.end },\n }, hiddenEntries);\n }\n }\n insertEntryAt(entry, insertion) {\n let { entriesByLevel, levelCoords } = this;\n if (insertion.lateral === -1) {\n // create a new level\n insertAt(levelCoords, insertion.level, insertion.levelCoord);\n insertAt(entriesByLevel, insertion.level, [entry]);\n }\n else {\n // insert into existing level\n insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);\n }\n this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;\n }\n /*\n does not care about limits\n */\n findInsertion(newEntry) {\n let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;\n let levelCnt = levelCoords.length;\n let candidateCoord = 0;\n let touchingLevel = -1;\n let touchingLateral = -1;\n let touchingEntry = null;\n let stackCnt = 0;\n for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {\n const trackingCoord = levelCoords[trackingLevel];\n // if the current level is past the placed entry, we have found a good empty space and can stop.\n // if strictOrder, keep finding more lateral intersections.\n if (!strictOrder && trackingCoord >= candidateCoord + this.getEntryThickness(newEntry)) {\n break;\n }\n let trackingEntries = entriesByLevel[trackingLevel];\n let trackingEntry;\n let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end\n let lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one\n while ( // loop through entries that horizontally intersect\n (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list\n trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry\n ) {\n let trackingEntryBottom = trackingCoord + this.getEntryThickness(trackingEntry);\n // intersects into the top of the candidate?\n if (trackingEntryBottom > candidateCoord) {\n candidateCoord = trackingEntryBottom;\n touchingEntry = trackingEntry;\n touchingLevel = trackingLevel;\n touchingLateral = lateralIndex;\n }\n // butts up against top of candidate? (will happen if just intersected as well)\n if (trackingEntryBottom === candidateCoord) {\n // accumulate the highest possible stackCnt of the trackingEntries that butt up\n stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);\n }\n lateralIndex += 1;\n }\n }\n // the destination level will be after touchingEntry's level. find it\n let destLevel = 0;\n if (touchingEntry) {\n destLevel = touchingLevel + 1;\n while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {\n destLevel += 1;\n }\n }\n // if adding to an existing level, find where to insert\n let destLateral = -1;\n if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {\n destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];\n }\n return {\n touchingLevel,\n touchingLateral,\n touchingEntry,\n stackCnt,\n levelCoord: candidateCoord,\n level: destLevel,\n lateral: destLateral,\n };\n }\n // sorted by levelCoord (lowest to highest)\n toRects() {\n let { entriesByLevel, levelCoords } = this;\n let levelCnt = entriesByLevel.length;\n let rects = [];\n for (let level = 0; level < levelCnt; level += 1) {\n let entries = entriesByLevel[level];\n let levelCoord = levelCoords[level];\n for (let entry of entries) {\n rects.push(Object.assign(Object.assign({}, entry), { thickness: this.getEntryThickness(entry), levelCoord }));\n }\n }\n return rects;\n }\n}\nfunction getEntrySpanEnd(entry) {\n return entry.span.end;\n}\nfunction buildEntryKey(entry) {\n return entry.index + ':' + entry.span.start;\n}\n// returns groups with entries sorted by input order\nfunction groupIntersectingEntries(entries) {\n let merges = [];\n for (let entry of entries) {\n let filteredMerges = [];\n let hungryMerge = {\n span: entry.span,\n entries: [entry],\n };\n for (let merge of merges) {\n if (intersectSpans(merge.span, hungryMerge.span)) {\n hungryMerge = {\n entries: merge.entries.concat(hungryMerge.entries),\n span: joinSpans(merge.span, hungryMerge.span),\n };\n }\n else {\n filteredMerges.push(merge);\n }\n }\n filteredMerges.push(hungryMerge);\n merges = filteredMerges;\n }\n return merges;\n}\nfunction joinSpans(span0, span1) {\n return {\n start: Math.min(span0.start, span1.start),\n end: Math.max(span0.end, span1.end),\n };\n}\nfunction intersectSpans(span0, span1) {\n let start = Math.max(span0.start, span1.start);\n let end = Math.min(span0.end, span1.end);\n if (start < end) {\n return { start, end };\n }\n return null;\n}\n// general util\n// ---------------------------------------------------------------------------------------------------------------------\nfunction insertAt(arr, index, item) {\n arr.splice(index, 0, item);\n}\nfunction binarySearch(a, searchVal, getItemVal) {\n let startIndex = 0;\n let endIndex = a.length; // exclusive\n if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item\n return [0, 0];\n }\n if (searchVal > getItemVal(a[endIndex - 1])) { // after last item\n return [endIndex, 0];\n }\n while (startIndex < endIndex) {\n let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);\n let middleVal = getItemVal(a[middleIndex]);\n if (searchVal < middleVal) {\n endIndex = middleIndex;\n }\n else if (searchVal > middleVal) {\n startIndex = middleIndex + 1;\n }\n else { // equal!\n return [middleIndex, 1];\n }\n }\n return [startIndex, 0];\n}\n\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nclass ElementDragging {\n constructor(el, selector) {\n this.emitter = new Emitter();\n }\n destroy() {\n }\n setMirrorIsVisible(bool) {\n // optional if subclass doesn't want to support a mirror\n }\n setMirrorNeedsRevert(bool) {\n // optional if subclass doesn't want to support a mirror\n }\n setAutoScrollEnabled(bool) {\n // optional\n }\n}\n\n// TODO: get rid of this in favor of options system,\n// tho it's really easy to access this globally rather than pass thru options.\nconst config = {};\n\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\nconst DRAG_META_REFINERS = {\n startTime: createDuration,\n duration: createDuration,\n create: Boolean,\n sourceId: String,\n};\nfunction parseDragMeta(raw) {\n let { refined, extra } = refineProps(raw, DRAG_META_REFINERS);\n return {\n startTime: refined.startTime || null,\n duration: refined.duration || null,\n create: refined.create != null ? refined.create : true,\n sourceId: refined.sourceId,\n leftoverProps: extra,\n };\n}\n\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nfunction computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {\n // if more than one week row, or if there are a lot of columns with not much space,\n // put just the day numbers will be in each cell\n if (!datesRepDistinctDays || dayCnt > 10) {\n return createFormatter({ weekday: 'short' }); // \"Sat\"\n }\n if (dayCnt > 1) {\n return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // \"Sat 11/12\"\n }\n return createFormatter({ weekday: 'long' }); // \"Saturday\"\n}\n\nconst CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no\nfunction renderInner$1(renderProps) {\n return renderProps.text;\n}\n\n// BAD name for this class now. used in the Header\nclass TableDateCell extends BaseComponent {\n render() {\n let { dateEnv, options, theme, viewApi } = this.context;\n let { props } = this;\n let { date, dateProfile } = props;\n let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);\n let classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));\n let text = dateEnv.format(date, props.dayHeaderFormat);\n // if colCnt is 1, we are already in a day-view and don't need a navlink\n let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)\n ? buildNavLinkAttrs(this.context, date)\n : {};\n let renderProps = Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraRenderProps), { text }), dayMeta);\n return (createElement(ContentContainer, { elTag: \"th\", elClasses: classNames, elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan, 'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined }, props.extraDataAttrs), renderProps: renderProps, generatorName: \"dayHeaderContent\", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContainer) => (createElement(\"div\", { className: \"fc-scrollgrid-sync-inner\" }, !dayMeta.isDisabled && (createElement(InnerContainer, { elTag: \"a\", elAttrs: navLinkAttrs, elClasses: [\n 'fc-col-header-cell-cushion',\n props.isSticky && 'fc-sticky',\n ] }))))));\n }\n}\n\nconst WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });\nclass TableDowCell extends BaseComponent {\n render() {\n let { props } = this;\n let { dateEnv, theme, viewApi, options } = this.context;\n let date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT\n let dateMeta = {\n dow: props.dow,\n isDisabled: false,\n isFuture: false,\n isPast: false,\n isToday: false,\n isOther: false,\n };\n let text = dateEnv.format(date, props.dayHeaderFormat);\n let renderProps = Object.assign(Object.assign(Object.assign(Object.assign({ // TODO: make this public?\n date }, dateMeta), { view: viewApi }), props.extraRenderProps), { text });\n return (createElement(ContentContainer, { elTag: \"th\", elClasses: [\n CLASS_NAME,\n ...getDayClassNames(dateMeta, theme),\n ...(props.extraClassNames || []),\n ], elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan }, props.extraDataAttrs), renderProps: renderProps, generatorName: \"dayHeaderContent\", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (createElement(\"div\", { className: \"fc-scrollgrid-sync-inner\" },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-col-header-cell-cushion',\n props.isSticky && 'fc-sticky',\n ], elAttrs: {\n 'aria-label': dateEnv.format(date, WEEKDAY_FORMAT),\n } })))));\n }\n}\n\nclass NowTimer extends Component {\n constructor(props, context) {\n super(props, context);\n this.initialNowDate = getNow(context.options.now, context.dateEnv);\n this.initialNowQueriedMs = new Date().valueOf();\n this.state = this.computeTiming().currentState;\n }\n render() {\n let { props, state } = this;\n return props.children(state.nowDate, state.todayRange);\n }\n componentDidMount() {\n this.setTimeout();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.unit !== this.props.unit) {\n this.clearTimeout();\n this.setTimeout();\n }\n }\n componentWillUnmount() {\n this.clearTimeout();\n }\n computeTiming() {\n let { props, context } = this;\n let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);\n let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);\n let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));\n let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();\n // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)\n // ensure no longer than a day\n waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);\n return {\n currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },\n nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },\n waitMs,\n };\n }\n setTimeout() {\n let { nextState, waitMs } = this.computeTiming();\n this.timeoutId = setTimeout(() => {\n this.setState(nextState, () => {\n this.setTimeout();\n });\n }, waitMs);\n }\n clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n }\n}\nNowTimer.contextType = ViewContextType;\nfunction buildDayRange(date) {\n let start = startOfDay(date);\n let end = addDays(start, 1);\n return { start, end };\n}\n\nclass DayHeader extends BaseComponent {\n constructor() {\n super(...arguments);\n this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);\n }\n render() {\n let { context } = this;\n let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props;\n let dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);\n return (createElement(NowTimer, { unit: \"day\" }, (nowDate, todayRange) => (createElement(\"tr\", { role: \"row\" },\n renderIntro && renderIntro('day'),\n dates.map((date) => (datesRepDistinctDays ? (createElement(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (createElement(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))))))));\n }\n}\nfunction createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {\n return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);\n}\n\nclass DaySeriesModel {\n constructor(range, dateProfileGenerator) {\n let date = range.start;\n let { end } = range;\n let indices = [];\n let dates = [];\n let dayIndex = -1;\n while (date < end) { // loop each day from start to end\n if (dateProfileGenerator.isHiddenDay(date)) {\n indices.push(dayIndex + 0.5); // mark that it's between indices\n }\n else {\n dayIndex += 1;\n indices.push(dayIndex);\n dates.push(date);\n }\n date = addDays(date, 1);\n }\n this.dates = dates;\n this.indices = indices;\n this.cnt = dates.length;\n }\n sliceRange(range) {\n let firstIndex = this.getDateDayIndex(range.start); // inclusive first index\n let lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index\n let clippedFirstIndex = Math.max(0, firstIndex);\n let clippedLastIndex = Math.min(this.cnt - 1, lastIndex);\n // deal with in-between indices\n clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell\n clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell\n if (clippedFirstIndex <= clippedLastIndex) {\n return {\n firstIndex: clippedFirstIndex,\n lastIndex: clippedLastIndex,\n isStart: firstIndex === clippedFirstIndex,\n isEnd: lastIndex === clippedLastIndex,\n };\n }\n return null;\n }\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n // If before the first offset, returns a negative number.\n // If after the last offset, returns an offset past the last cell offset.\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n getDateDayIndex(date) {\n let { indices } = this;\n let dayOffset = Math.floor(diffDays(this.dates[0], date));\n if (dayOffset < 0) {\n return indices[0] - 1;\n }\n if (dayOffset >= indices.length) {\n return indices[indices.length - 1] + 1;\n }\n return indices[dayOffset];\n }\n}\n\nclass DayTableModel {\n constructor(daySeries, breakOnWeeks) {\n let { dates } = daySeries;\n let daysPerRow;\n let firstDay;\n let rowCnt;\n if (breakOnWeeks) {\n // count columns until the day-of-week repeats\n firstDay = dates[0].getUTCDay();\n for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {\n if (dates[daysPerRow].getUTCDay() === firstDay) {\n break;\n }\n }\n rowCnt = Math.ceil(dates.length / daysPerRow);\n }\n else {\n rowCnt = 1;\n daysPerRow = dates.length;\n }\n this.rowCnt = rowCnt;\n this.colCnt = daysPerRow;\n this.daySeries = daySeries;\n this.cells = this.buildCells();\n this.headerDates = this.buildHeaderDates();\n }\n buildCells() {\n let rows = [];\n for (let row = 0; row < this.rowCnt; row += 1) {\n let cells = [];\n for (let col = 0; col < this.colCnt; col += 1) {\n cells.push(this.buildCell(row, col));\n }\n rows.push(cells);\n }\n return rows;\n }\n buildCell(row, col) {\n let date = this.daySeries.dates[row * this.colCnt + col];\n return {\n key: date.toISOString(),\n date,\n };\n }\n buildHeaderDates() {\n let dates = [];\n for (let col = 0; col < this.colCnt; col += 1) {\n dates.push(this.cells[0][col].date);\n }\n return dates;\n }\n sliceRange(range) {\n let { colCnt } = this;\n let seriesSeg = this.daySeries.sliceRange(range);\n let segs = [];\n if (seriesSeg) {\n let { firstIndex, lastIndex } = seriesSeg;\n let index = firstIndex;\n while (index <= lastIndex) {\n let row = Math.floor(index / colCnt);\n let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);\n segs.push({\n row,\n firstCol: index % colCnt,\n lastCol: (nextIndex - 1) % colCnt,\n isStart: seriesSeg.isStart && index === firstIndex,\n isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,\n });\n index = nextIndex;\n }\n }\n return segs;\n }\n}\n\nclass Slicer {\n constructor() {\n this.sliceBusinessHours = memoize(this._sliceBusinessHours);\n this.sliceDateSelection = memoize(this._sliceDateSpan);\n this.sliceEventStore = memoize(this._sliceEventStore);\n this.sliceEventDrag = memoize(this._sliceInteraction);\n this.sliceEventResize = memoize(this._sliceInteraction);\n this.forceDayIfListItem = false; // hack\n }\n sliceProps(props, dateProfile, nextDayThreshold, context, ...extraArgs) {\n let { eventUiBases } = props;\n let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs);\n return {\n dateSelectionSegs: this.sliceDateSelection(props.dateSelection, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs),\n businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),\n fgEventSegs: eventSegs.fg,\n bgEventSegs: eventSegs.bg,\n eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventSelection: props.eventSelection,\n }; // TODO: give interactionSegs?\n }\n sliceNowDate(// does not memoize\n date, dateProfile, nextDayThreshold, context, ...extraArgs) {\n return this._sliceDateSpan({ range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range\n dateProfile, nextDayThreshold, {}, context, ...extraArgs);\n }\n _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context, ...extraArgs) {\n if (!businessHours) {\n return [];\n }\n return this._sliceEventStore(expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold, ...extraArgs).bg;\n }\n _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {\n if (eventStore) {\n let rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n bg: this.sliceEventRanges(rangeRes.bg, extraArgs),\n fg: this.sliceEventRanges(rangeRes.fg, extraArgs),\n };\n }\n return { bg: [], fg: [] };\n }\n _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {\n if (!interaction) {\n return null;\n }\n let rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n return {\n segs: this.sliceEventRanges(rangeRes.fg, extraArgs),\n affectedInstances: interaction.affectedEvents.instances,\n isEvent: interaction.isEvent,\n };\n }\n _sliceDateSpan(dateSpan, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs) {\n if (!dateSpan) {\n return [];\n }\n let activeRange = computeActiveRange(dateProfile, Boolean(nextDayThreshold));\n let activeDateSpanRange = intersectRanges(dateSpan.range, activeRange);\n if (activeDateSpanRange) {\n dateSpan = Object.assign(Object.assign({}, dateSpan), { range: activeDateSpanRange });\n let eventRange = fabricateEventRange(dateSpan, eventUiBases, context);\n let segs = this.sliceRange(dateSpan.range, ...extraArgs);\n for (let seg of segs) {\n seg.eventRange = eventRange;\n }\n return segs;\n }\n return [];\n }\n /*\n \"complete\" seg means it has component and eventRange\n */\n sliceEventRanges(eventRanges, extraArgs) {\n let segs = [];\n for (let eventRange of eventRanges) {\n segs.push(...this.sliceEventRange(eventRange, extraArgs));\n }\n return segs;\n }\n /*\n \"complete\" seg means it has component and eventRange\n */\n sliceEventRange(eventRange, extraArgs) {\n let dateRange = eventRange.range;\n // hack to make multi-day events that are being force-displayed as list-items to take up only one day\n if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {\n dateRange = {\n start: dateRange.start,\n end: addDays(dateRange.start, 1),\n };\n }\n let segs = this.sliceRange(dateRange, ...extraArgs);\n for (let seg of segs) {\n seg.eventRange = eventRange;\n seg.isStart = eventRange.isStart && seg.isStart;\n seg.isEnd = eventRange.isEnd && seg.isEnd;\n }\n return segs;\n }\n}\n/*\nfor incorporating slotMinTime/slotMaxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile, isComponentAllDay) {\n let range = dateProfile.activeRange;\n if (isComponentAllDay) {\n return range;\n }\n return {\n start: addMs(range.start, dateProfile.slotMinTime.milliseconds),\n end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day\n };\n}\n\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isInteractionValid(interaction, dateProfile, context) {\n let { instances } = interaction.mutatedEvents;\n for (let instanceId in instances) {\n if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n return false;\n }\n }\n return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions\n}\nfunction isDateSelectionValid(dateSelection, dateProfile, context) {\n if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {\n return false;\n }\n return isNewPropsValid({ dateSelection }, context);\n}\nfunction isNewPropsValid(newProps, context) {\n let calendarState = context.getCurrentData();\n let props = Object.assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);\n return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);\n}\nfunction isPropsValid(state, context, dateSpanMeta = {}, filterConfig) {\n if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false;\n }\n if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false;\n }\n return true;\n}\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {\n let currentState = context.getCurrentData();\n let interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions\n let subjectEventStore = interaction.mutatedEvents;\n let subjectDefs = subjectEventStore.defs;\n let subjectInstances = subjectEventStore.instances;\n let subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?\n state.eventUiBases :\n { '': currentState.selectionConfig });\n if (filterConfig) {\n subjectConfigs = mapHash(subjectConfigs, filterConfig);\n }\n // exclude the subject events. TODO: exclude defs too?\n let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);\n let otherDefs = otherEventStore.defs;\n let otherInstances = otherEventStore.instances;\n let otherConfigs = compileEventUis(otherDefs, state.eventUiBases);\n for (let subjectInstanceId in subjectInstances) {\n let subjectInstance = subjectInstances[subjectInstanceId];\n let subjectRange = subjectInstance.range;\n let subjectConfig = subjectConfigs[subjectInstance.defId];\n let subjectDef = subjectDefs[subjectInstance.defId];\n // constraint\n if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {\n return false;\n }\n // overlap\n let { eventOverlap } = context.options;\n let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;\n for (let otherInstanceId in otherInstances) {\n let otherInstance = otherInstances[otherInstanceId];\n // intersect! evaluate\n if (rangesIntersect(subjectRange, otherInstance.range)) {\n let otherOverlap = otherConfigs[otherInstance.defId].overlap;\n // consider the other event's overlap. only do this if the subject event is a \"real\" event\n if (otherOverlap === false && interaction.isEvent) {\n return false;\n }\n if (subjectConfig.overlap === false) {\n return false;\n }\n if (eventOverlapFunc && !eventOverlapFunc(new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event\n new EventImpl(context, subjectDef, subjectInstance))) {\n return false;\n }\n }\n }\n // allow (a function)\n let calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state\n for (let subjectAllow of subjectConfig.allows) {\n let subjectDateSpan = Object.assign(Object.assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });\n let origDef = calendarEventStore.defs[subjectDef.defId];\n let origInstance = calendarEventStore.instances[subjectInstanceId];\n let eventApi;\n if (origDef) { // was previously in the calendar\n eventApi = new EventImpl(context, origDef, origInstance);\n }\n else { // was an external event\n eventApi = new EventImpl(context, subjectDef); // no instance, because had no dates\n }\n if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {\n return false;\n }\n }\n }\n return true;\n}\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\nfunction isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {\n let relevantEventStore = state.eventStore;\n let relevantDefs = relevantEventStore.defs;\n let relevantInstances = relevantEventStore.instances;\n let selection = state.dateSelection;\n let selectionRange = selection.range;\n let { selectionConfig } = context.getCurrentData();\n if (filterConfig) {\n selectionConfig = filterConfig(selectionConfig);\n }\n // constraint\n if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {\n return false;\n }\n // overlap\n let { selectOverlap } = context.options;\n let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;\n for (let relevantInstanceId in relevantInstances) {\n let relevantInstance = relevantInstances[relevantInstanceId];\n // intersect! evaluate\n if (rangesIntersect(selectionRange, relevantInstance.range)) {\n if (selectionConfig.overlap === false) {\n return false;\n }\n if (selectOverlapFunc && !selectOverlapFunc(new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {\n return false;\n }\n }\n }\n // allow (a function)\n for (let selectionAllow of selectionConfig.allows) {\n let fullDateSpan = Object.assign(Object.assign({}, dateSpanMeta), selection);\n if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {\n return false;\n }\n }\n return true;\n}\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\nfunction allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {\n for (let constraint of constraints) {\n if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {\n return false;\n }\n }\n return true;\n}\nfunction constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours\notherEventStore, // for if constraint is an even group ID\nbusinessHoursUnexpanded, // for if constraint is 'businessHours'\ncontext) {\n if (constraint === 'businessHours') {\n return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));\n }\n if (typeof constraint === 'string') { // an group ID\n return eventStoreToRanges(filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint));\n }\n if (typeof constraint === 'object' && constraint) { // non-null object\n return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));\n }\n return []; // if it's false\n}\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore) {\n let { instances } = eventStore;\n let ranges = [];\n for (let instanceId in instances) {\n ranges.push(instances[instanceId].range);\n }\n return ranges;\n}\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges, innerRange) {\n for (let outerRange of outerRanges) {\n if (rangeContainsRange(outerRange, innerRange)) {\n return true;\n }\n }\n return false;\n}\n\nconst VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;\nclass Scroller extends BaseComponent {\n constructor() {\n super(...arguments);\n this.handleEl = (el) => {\n this.el = el;\n setRef(this.props.elRef, el);\n };\n }\n render() {\n let { props } = this;\n let { liquid, liquidIsAbsolute } = props;\n let isAbsolute = liquid && liquidIsAbsolute;\n let className = ['fc-scroller'];\n if (liquid) {\n if (liquidIsAbsolute) {\n className.push('fc-scroller-liquid-absolute');\n }\n else {\n className.push('fc-scroller-liquid');\n }\n }\n return (createElement(\"div\", { ref: this.handleEl, className: className.join(' '), style: {\n overflowX: props.overflowX,\n overflowY: props.overflowY,\n left: (isAbsolute && -(props.overcomeLeft || 0)) || '',\n right: (isAbsolute && -(props.overcomeRight || 0)) || '',\n bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',\n marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',\n marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',\n marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',\n maxHeight: props.maxHeight || '',\n } }, props.children));\n }\n needsXScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return false;\n }\n // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n let { el } = this;\n let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();\n let { children } = el;\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i];\n if (childEl.getBoundingClientRect().width > realClientWidth) {\n return true;\n }\n }\n return false;\n }\n needsYScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return false;\n }\n // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n let { el } = this;\n let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();\n let { children } = el;\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i];\n if (childEl.getBoundingClientRect().height > realClientHeight) {\n return true;\n }\n }\n return false;\n }\n getXScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return 0;\n }\n return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n getYScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return 0;\n }\n return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n}\n\n/*\nTODO: somehow infer OtherArgs from masterCallback?\nTODO: infer RefType from masterCallback if provided\n*/\nclass RefMap {\n constructor(masterCallback) {\n this.masterCallback = masterCallback;\n this.currentMap = {};\n this.depths = {};\n this.callbackMap = {};\n this.handleValue = (val, key) => {\n let { depths, currentMap } = this;\n let removed = false;\n let added = false;\n if (val !== null) {\n // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore\n removed = (key in currentMap);\n currentMap[key] = val;\n depths[key] = (depths[key] || 0) + 1;\n added = true;\n }\n else {\n depths[key] -= 1;\n if (!depths[key]) {\n delete currentMap[key];\n delete this.callbackMap[key];\n removed = true;\n }\n }\n if (this.masterCallback) {\n if (removed) {\n this.masterCallback(null, String(key));\n }\n if (added) {\n this.masterCallback(val, String(key));\n }\n }\n };\n }\n createRef(key) {\n let refCallback = this.callbackMap[key];\n if (!refCallback) {\n refCallback = this.callbackMap[key] = (val) => {\n this.handleValue(val, String(key));\n };\n }\n return refCallback;\n }\n // TODO: check callers that don't care about order. should use getAll instead\n // NOTE: this method has become less valuable now that we are encouraged to map order by some other index\n // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and \"collect\"\n collect(startIndex, endIndex, step) {\n return collectFromHash(this.currentMap, startIndex, endIndex, step);\n }\n getAll() {\n return hashValuesToArray(this.currentMap);\n }\n}\n\nfunction computeShrinkWidth(chunkEls) {\n let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');\n let largestWidth = 0;\n for (let shrinkCell of shrinkCells) {\n largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));\n }\n return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits\n}\nfunction getSectionHasLiquidHeight(props, sectionConfig) {\n return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)\n}\nfunction getAllowYScrolling(props, sectionConfig) {\n return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars\n getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars\n}\n// TODO: ONLY use `arg`. force out internal function to use same API\nfunction renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {\n let { expandRows } = arg;\n let content = typeof chunkConfig.content === 'function' ?\n chunkConfig.content(arg) :\n createElement('table', {\n role: 'presentation',\n className: [\n chunkConfig.tableClassName,\n sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',\n ].join(' '),\n style: {\n minWidth: arg.tableMinWidth,\n width: arg.clientWidth,\n height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height\n },\n }, arg.tableColGroupNode, createElement(isHeader ? 'thead' : 'tbody', {\n role: 'presentation',\n }, typeof chunkConfig.rowContent === 'function'\n ? chunkConfig.rowContent(arg)\n : chunkConfig.rowContent));\n return content;\n}\nfunction isColPropsEqual(cols0, cols1) {\n return isArraysEqual(cols0, cols1, isPropsEqual);\n}\nfunction renderMicroColGroup(cols, shrinkWidth) {\n let colNodes = [];\n /*\n for ColProps with spans, it would have been great to make a single <col span=\"\">\n HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.\n SOLUTION: making individual <col> elements makes Chrome behave.\n */\n for (let colProps of cols) {\n let span = colProps.span || 1;\n for (let i = 0; i < span; i += 1) {\n colNodes.push(createElement(\"col\", { style: {\n width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),\n minWidth: colProps.minWidth || '',\n } }));\n }\n }\n return createElement('colgroup', {}, ...colNodes);\n}\nfunction sanitizeShrinkWidth(shrinkWidth) {\n /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth\n 4 accounts for 2 2-pixel borders. TODO: better solution? */\n return shrinkWidth == null ? 4 : shrinkWidth;\n}\nfunction hasShrinkWidth(cols) {\n for (let col of cols) {\n if (col.width === 'shrink') {\n return true;\n }\n }\n return false;\n}\nfunction getScrollGridClassNames(liquid, context) {\n let classNames = [\n 'fc-scrollgrid',\n context.theme.getClass('table'),\n ];\n if (liquid) {\n classNames.push('fc-scrollgrid-liquid');\n }\n return classNames;\n}\nfunction getSectionClassNames(sectionConfig, wholeTableVGrow) {\n let classNames = [\n 'fc-scrollgrid-section',\n `fc-scrollgrid-section-${sectionConfig.type}`,\n sectionConfig.className, // used?\n ];\n if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {\n classNames.push('fc-scrollgrid-section-liquid');\n }\n if (sectionConfig.isSticky) {\n classNames.push('fc-scrollgrid-section-sticky');\n }\n return classNames;\n}\nfunction renderScrollShim(arg) {\n return (createElement(\"div\", { className: \"fc-scrollgrid-sticky-shim\", style: {\n width: arg.clientWidth,\n minWidth: arg.tableMinWidth,\n } }));\n}\nfunction getStickyHeaderDates(options) {\n let { stickyHeaderDates } = options;\n if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {\n stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';\n }\n return stickyHeaderDates;\n}\nfunction getStickyFooterScrollbar(options) {\n let { stickyFooterScrollbar } = options;\n if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {\n stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';\n }\n return stickyFooterScrollbar;\n}\n\nclass SimpleScrollGrid extends BaseComponent {\n constructor() {\n super(...arguments);\n this.processCols = memoize((a) => a, isColPropsEqual); // so we get same `cols` props every time\n // yucky to memoize VNodes, but much more efficient for consumers\n this.renderMicroColGroup = memoize(renderMicroColGroup);\n this.scrollerRefs = new RefMap();\n this.scrollerElRefs = new RefMap(this._handleScrollerEl.bind(this));\n this.state = {\n shrinkWidth: null,\n forceYScrollbars: false,\n scrollerClientWidths: {},\n scrollerClientHeights: {},\n };\n // TODO: can do a really simple print-view. dont need to join rows\n this.handleSizing = () => {\n this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));\n };\n }\n render() {\n let { props, state, context } = this;\n let sectionConfigs = props.sections || [];\n let cols = this.processCols(props.cols);\n let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);\n let classNames = getScrollGridClassNames(props.liquid, context);\n if (props.collapsibleWidth) {\n classNames.push('fc-scrollgrid-collapsible');\n }\n // TODO: make DRY\n let configCnt = sectionConfigs.length;\n let configI = 0;\n let currentConfig;\n let headSectionNodes = [];\n let bodySectionNodes = [];\n let footSectionNodes = [];\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n configI += 1;\n }\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));\n configI += 1;\n }\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n configI += 1;\n }\n // firefox bug: when setting height on table and there is a thead or tfoot,\n // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)\n // use getCanVGrowWithinCell as a way to detect table-stupid firefox.\n // if so, use a simpler dom structure, jam everything into a lone tbody.\n let isBuggy = !getCanVGrowWithinCell();\n const roleAttrs = { role: 'rowgroup' };\n return createElement('table', {\n role: 'grid',\n className: classNames.join(' '),\n style: { height: props.height },\n }, Boolean(!isBuggy && headSectionNodes.length) && createElement('thead', roleAttrs, ...headSectionNodes), Boolean(!isBuggy && bodySectionNodes.length) && createElement('tbody', roleAttrs, ...bodySectionNodes), Boolean(!isBuggy && footSectionNodes.length) && createElement('tfoot', roleAttrs, ...footSectionNodes), isBuggy && createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes));\n }\n renderSection(sectionConfig, microColGroupNode, isHeader) {\n if ('outerContent' in sectionConfig) {\n return (createElement(Fragment, { key: sectionConfig.key }, sectionConfig.outerContent));\n }\n return (createElement(\"tr\", { key: sectionConfig.key, role: \"presentation\", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));\n }\n renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {\n if ('outerContent' in chunkConfig) {\n return chunkConfig.outerContent;\n }\n let { props } = this;\n let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state;\n let needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?\n let isLiquid = getSectionHasLiquidHeight(props, sectionConfig);\n // for `!props.liquid` - is WHOLE scrollgrid natural height?\n // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars\n let overflowY = !props.liquid ? 'visible' :\n forceYScrollbars ? 'scroll' :\n !needsYScrolling ? 'hidden' :\n 'auto';\n let sectionKey = sectionConfig.key;\n let content = renderChunkContent(sectionConfig, chunkConfig, {\n tableColGroupNode: microColGroupNode,\n tableMinWidth: '',\n clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,\n clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,\n expandRows: sectionConfig.expandRows,\n syncRowHeights: false,\n rowSyncHeights: [],\n reportRowHeightChange: () => { },\n }, isHeader);\n return createElement(isHeader ? 'th' : 'td', {\n ref: chunkConfig.elRef,\n role: 'presentation',\n }, createElement(\"div\", { className: `fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}` },\n createElement(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness\n : true }, content)));\n }\n _handleScrollerEl(scrollerEl, key) {\n let section = getSectionByKey(this.props.sections, key);\n if (section) {\n setRef(section.chunk.scrollerElRef, scrollerEl);\n }\n }\n componentDidMount() {\n this.handleSizing();\n this.context.addResizeHandler(this.handleSizing);\n }\n componentDidUpdate() {\n // TODO: need better solution when state contains non-sizing things\n this.handleSizing();\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing);\n }\n computeShrinkWidth() {\n return hasShrinkWidth(this.props.cols)\n ? computeShrinkWidth(this.scrollerElRefs.getAll())\n : 0;\n }\n computeScrollerDims() {\n let scrollbarWidth = getScrollbarWidths();\n let { scrollerRefs, scrollerElRefs } = this;\n let forceYScrollbars = false;\n let scrollerClientWidths = {};\n let scrollerClientHeights = {};\n for (let sectionKey in scrollerRefs.currentMap) {\n let scroller = scrollerRefs.currentMap[sectionKey];\n if (scroller && scroller.needsYScrolling()) {\n forceYScrollbars = true;\n break;\n }\n }\n for (let section of this.props.sections) {\n let sectionKey = section.key;\n let scrollerEl = scrollerElRefs.currentMap[sectionKey];\n if (scrollerEl) {\n let harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders\n scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars\n ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n : 0));\n scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);\n }\n }\n return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights };\n }\n}\nSimpleScrollGrid.addStateEquality({\n scrollerClientWidths: isPropsEqual,\n scrollerClientHeights: isPropsEqual,\n});\nfunction getSectionByKey(sections, key) {\n for (let section of sections) {\n if (section.key === key) {\n return section;\n }\n }\n return null;\n}\n\nclass EventContainer extends BaseComponent {\n constructor() {\n super(...arguments);\n this.handleEl = (el) => {\n this.el = el;\n if (el) {\n setElSeg(el, this.props.seg);\n }\n };\n }\n render() {\n const { props, context } = this;\n const { options } = context;\n const { seg } = props;\n const { eventRange } = seg;\n const { ui } = eventRange;\n const renderProps = {\n event: new EventImpl(context, eventRange.def, eventRange.instance),\n view: context.viewApi,\n timeText: props.timeText,\n textColor: ui.textColor,\n backgroundColor: ui.backgroundColor,\n borderColor: ui.borderColor,\n isDraggable: !props.disableDragging && computeSegDraggable(seg, context),\n isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),\n isEndResizable: !props.disableResizing && computeSegEndResizable(seg),\n isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),\n isStart: Boolean(seg.isStart),\n isEnd: Boolean(seg.isEnd),\n isPast: Boolean(props.isPast),\n isFuture: Boolean(props.isFuture),\n isToday: Boolean(props.isToday),\n isSelected: Boolean(props.isSelected),\n isDragging: Boolean(props.isDragging),\n isResizing: Boolean(props.isResizing),\n };\n return (createElement(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, elClasses: [\n ...getEventClassNames(renderProps),\n ...seg.eventRange.ui.classNames,\n ...(props.elClasses || []),\n ], renderProps: renderProps, generatorName: \"eventContent\", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));\n }\n componentDidUpdate(prevProps) {\n if (this.el && this.props.seg !== prevProps.seg) {\n setElSeg(this.el, this.props.seg);\n }\n }\n}\n\n// should not be a purecomponent\nclass StandardEvent extends BaseComponent {\n render() {\n let { props, context } = this;\n let { options } = context;\n let { seg } = props;\n let { ui } = seg.eventRange;\n let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;\n let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);\n return (createElement(EventContainer, Object.assign({}, props /* includes elRef */, { elTag: \"a\", elStyle: {\n borderColor: ui.borderColor,\n backgroundColor: ui.backgroundColor,\n }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (createElement(Fragment, null,\n createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-event-main'], elStyle: { color: eventContentArg.textColor } }),\n Boolean(eventContentArg.isStartResizable) && (createElement(\"div\", { className: \"fc-event-resizer fc-event-resizer-start\" })),\n Boolean(eventContentArg.isEndResizable) && (createElement(\"div\", { className: \"fc-event-resizer fc-event-resizer-end\" }))))));\n }\n}\nfunction renderInnerContent$1(innerProps) {\n return (createElement(\"div\", { className: \"fc-event-main-frame\" },\n innerProps.timeText && (createElement(\"div\", { className: \"fc-event-time\" }, innerProps.timeText)),\n createElement(\"div\", { className: \"fc-event-title-container\" },\n createElement(\"div\", { className: \"fc-event-title fc-sticky\" }, innerProps.event.title || createElement(Fragment, null, \"\\u00A0\")))));\n}\n\nconst NowIndicatorContainer = (props) => (createElement(ViewContextType.Consumer, null, (context) => {\n let { options } = context;\n let renderProps = {\n isAxis: props.isAxis,\n date: context.dateEnv.toDate(props.date),\n view: context.viewApi,\n };\n return (createElement(ContentContainer, Object.assign({}, props /* includes children */, { elTag: props.elTag || 'div', renderProps: renderProps, generatorName: \"nowIndicatorContent\", customGenerator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount })));\n}));\n\nconst DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });\nclass DayCellContainer extends BaseComponent {\n constructor() {\n super(...arguments);\n this.refineRenderProps = memoizeObjArg(refineRenderProps);\n }\n render() {\n let { props, context } = this;\n let { options } = context;\n let renderProps = this.refineRenderProps({\n date: props.date,\n dateProfile: props.dateProfile,\n todayRange: props.todayRange,\n isMonthStart: props.isMonthStart || false,\n showDayNumber: props.showDayNumber,\n extraRenderProps: props.extraRenderProps,\n viewApi: context.viewApi,\n dateEnv: context.dateEnv,\n monthStartFormat: options.monthStartFormat,\n });\n return (createElement(ContentContainer, Object.assign({}, props /* includes children */, { elClasses: [\n ...getDayClassNames(renderProps, context.theme),\n ...(props.elClasses || []),\n ], elAttrs: Object.assign(Object.assign({}, props.elAttrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: \"dayCellContent\", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator: \n // don't use custom classNames if disabled\n renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));\n }\n}\nfunction hasCustomDayCellContent(options) {\n return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));\n}\nfunction refineRenderProps(raw) {\n let { date, dateEnv, dateProfile, isMonthStart } = raw;\n let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);\n let dayNumberText = raw.showDayNumber ? (dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT)) : '';\n return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { isMonthStart,\n dayNumberText }), raw.extraRenderProps);\n}\n\nclass BgEvent extends BaseComponent {\n render() {\n let { props } = this;\n let { seg } = props;\n return (createElement(EventContainer, { elTag: \"div\", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, seg: seg, timeText: \"\", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));\n }\n}\nfunction renderInnerContent(props) {\n let { title } = props.event;\n return title && (createElement(\"div\", { className: \"fc-event-title\" }, props.event.title));\n}\nfunction renderFill(fillType) {\n return (createElement(\"div\", { className: `fc-${fillType}` }));\n}\n\nconst WeekNumberContainer = (props) => (createElement(ViewContextType.Consumer, null, (context) => {\n let { dateEnv, options } = context;\n let { date } = props;\n let format = options.weekNumberFormat || props.defaultFormat;\n let num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?\n let text = dateEnv.format(date, format);\n let renderProps = { num, text, date };\n return (createElement(ContentContainer // why isn't WeekNumberContentArg being auto-detected?\n , Object.assign({}, props /* includes children */, { renderProps: renderProps, generatorName: \"weekNumberContent\", customGenerator: options.weekNumberContent, defaultGenerator: renderInner, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount })));\n}));\nfunction renderInner(innerProps) {\n return innerProps.text;\n}\n\nconst PADDING_FROM_VIEWPORT = 10;\nclass Popover extends BaseComponent {\n constructor() {\n super(...arguments);\n this.state = {\n titleId: getUniqueDomId(),\n };\n this.handleRootEl = (el) => {\n this.rootEl = el;\n if (this.props.elRef) {\n setRef(this.props.elRef, el);\n }\n };\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n this.handleDocumentMouseDown = (ev) => {\n // only hide the popover if the click happened outside the popover\n const target = getEventTargetViaRoot(ev);\n if (!this.rootEl.contains(target)) {\n this.handleCloseClick();\n }\n };\n this.handleDocumentKeyDown = (ev) => {\n if (ev.key === 'Escape') {\n this.handleCloseClick();\n }\n };\n this.handleCloseClick = () => {\n let { onClose } = this.props;\n if (onClose) {\n onClose();\n }\n };\n }\n render() {\n let { theme, options } = this.context;\n let { props, state } = this;\n let classNames = [\n 'fc-popover',\n theme.getClass('popover'),\n ].concat(props.extraClassNames || []);\n return createPortal(createElement(\"div\", Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(' '), \"aria-labelledby\": state.titleId, ref: this.handleRootEl }),\n createElement(\"div\", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },\n createElement(\"span\", { className: \"fc-popover-title\", id: state.titleId }, props.title),\n createElement(\"span\", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),\n createElement(\"div\", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);\n }\n componentDidMount() {\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n this.updateSize();\n }\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n }\n updateSize() {\n let { isRtl } = this.context;\n let { alignmentEl, alignGridTop } = this.props;\n let { rootEl } = this;\n let alignmentRect = computeClippedClientRect(alignmentEl);\n if (alignmentRect) {\n let popoverDims = rootEl.getBoundingClientRect();\n // position relative to viewport\n let popoverTop = alignGridTop\n ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top\n : alignmentRect.top;\n let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;\n // constrain\n popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);\n popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);\n popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);\n let origin = rootEl.offsetParent.getBoundingClientRect();\n applyStyle(rootEl, {\n top: popoverTop - origin.top,\n left: popoverLeft - origin.left,\n });\n }\n }\n}\n\nclass MorePopover extends DateComponent {\n constructor() {\n super(...arguments);\n this.handleRootEl = (rootEl) => {\n this.rootEl = rootEl;\n if (rootEl) {\n this.context.registerInteractiveComponent(this, {\n el: rootEl,\n useEventCenter: false,\n });\n }\n else {\n this.context.unregisterInteractiveComponent(this);\n }\n };\n }\n render() {\n let { options, dateEnv } = this.context;\n let { props } = this;\n let { startDate, todayRange, dateProfile } = props;\n let title = dateEnv.format(startDate, options.dayPopoverFormat);\n return (createElement(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, elAttrs) => (createElement(Popover, { elRef: elAttrs.ref, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []), extraAttrs: elAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },\n hasCustomDayCellContent(options) && (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-more-popover-misc'] })),\n props.children))));\n }\n queryHit(positionLeft, positionTop, elWidth, elHeight) {\n let { rootEl, props } = this;\n if (positionLeft >= 0 && positionLeft < elWidth &&\n positionTop >= 0 && positionTop < elHeight) {\n return {\n dateProfile: props.dateProfile,\n dateSpan: Object.assign({ allDay: !props.forceTimed, range: {\n start: props.startDate,\n end: props.endDate,\n } }, props.extraDateSpan),\n dayEl: rootEl,\n rect: {\n left: 0,\n top: 0,\n right: elWidth,\n bottom: elHeight,\n },\n layer: 1, // important when comparing with hits from other components\n };\n }\n return null;\n }\n}\n\nclass MoreLinkContainer extends BaseComponent {\n constructor() {\n super(...arguments);\n this.state = {\n isPopoverOpen: false,\n popoverId: getUniqueDomId(),\n };\n this.handleLinkEl = (linkEl) => {\n this.linkEl = linkEl;\n if (this.props.elRef) {\n setRef(this.props.elRef, linkEl);\n }\n };\n this.handleClick = (ev) => {\n let { props, context } = this;\n let { moreLinkClick } = context.options;\n let date = computeRange(props).start;\n function buildPublicSeg(seg) {\n let { def, instance, range } = seg.eventRange;\n return {\n event: new EventImpl(context, def, instance),\n start: context.dateEnv.toDate(range.start),\n end: context.dateEnv.toDate(range.end),\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n };\n }\n if (typeof moreLinkClick === 'function') {\n moreLinkClick = moreLinkClick({\n date,\n allDay: Boolean(props.allDayDate),\n allSegs: props.allSegs.map(buildPublicSeg),\n hiddenSegs: props.hiddenSegs.map(buildPublicSeg),\n jsEvent: ev,\n view: context.viewApi,\n });\n }\n if (!moreLinkClick || moreLinkClick === 'popover') {\n this.setState({ isPopoverOpen: true });\n }\n else if (typeof moreLinkClick === 'string') { // a view name\n context.calendarApi.zoomTo(date, moreLinkClick);\n }\n };\n this.handlePopoverClose = () => {\n this.setState({ isPopoverOpen: false });\n };\n }\n render() {\n let { props, state } = this;\n return (createElement(ViewContextType.Consumer, null, (context) => {\n let { viewApi, options, calendarApi } = context;\n let { moreLinkText } = options;\n let { moreCnt } = props;\n let range = computeRange(props);\n let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals\n ? moreLinkText.call(calendarApi, moreCnt)\n : `+${moreCnt} ${moreLinkText}`;\n let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);\n let renderProps = {\n num: moreCnt,\n shortText: `+${moreCnt}`,\n text,\n view: viewApi,\n };\n return (createElement(Fragment, null,\n Boolean(props.moreCnt) && (createElement(ContentContainer, { elTag: props.elTag || 'a', elRef: this.handleLinkEl, elClasses: [\n ...(props.elClasses || []),\n 'fc-more-link',\n ], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: \"moreLinkContent\", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),\n state.isPopoverOpen && (createElement(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ?\n props.alignmentElRef.current :\n this.linkEl, alignGridTop: props.alignGridTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent()))));\n }));\n }\n componentDidMount() {\n this.updateParentEl();\n }\n componentDidUpdate() {\n this.updateParentEl();\n }\n updateParentEl() {\n if (this.linkEl) {\n this.parentEl = elementClosest(this.linkEl, '.fc-view-harness');\n }\n }\n}\nfunction renderMoreLinkInner(props) {\n return props.text;\n}\nfunction computeRange(props) {\n if (props.allDayDate) {\n return {\n start: props.allDayDate,\n end: addDays(props.allDayDate, 1),\n };\n }\n let { hiddenSegs } = props;\n return {\n start: computeEarliestSegStart(hiddenSegs),\n end: computeLatestSegEnd(hiddenSegs),\n };\n}\nfunction computeEarliestSegStart(segs) {\n return segs.reduce(pickEarliestStart).eventRange.range.start;\n}\nfunction pickEarliestStart(seg0, seg1) {\n return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;\n}\nfunction computeLatestSegEnd(segs) {\n return segs.reduce(pickLatestEnd).eventRange.range.end;\n}\nfunction pickLatestEnd(seg0, seg1) {\n return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;\n}\n\nclass Store {\n constructor() {\n this.handlers = [];\n }\n set(value) {\n this.currentValue = value;\n for (let handler of this.handlers) {\n handler(value);\n }\n }\n subscribe(handler) {\n this.handlers.push(handler);\n if (this.currentValue !== undefined) {\n handler(this.currentValue);\n }\n }\n}\n\n/*\nSubscribers will get a LIST of CustomRenderings\n*/\nclass CustomRenderingStore extends Store {\n constructor() {\n super(...arguments);\n this.map = new Map();\n }\n // for consistent order\n handle(customRendering) {\n const { map } = this;\n let updated = false;\n if (customRendering.isActive) {\n map.set(customRendering.id, customRendering);\n updated = true;\n }\n else if (map.has(customRendering.id)) {\n map.delete(customRendering.id);\n updated = true;\n }\n if (updated) {\n this.set(map);\n }\n }\n}\n\nexport { elementClosest as $, memoizeObjArg as A, BaseComponent as B, ContentContainer as C, DelayedRunner as D, isPropsEqual as E, Emitter as F, getInitialDate as G, rangeContainsMarker as H, createEmptyEventStore as I, reduceCurrentDate as J, reduceEventStore as K, rezoneEventStoreDates as L, mergeRawOptions as M, BASE_OPTION_REFINERS as N, CALENDAR_LISTENER_REFINERS as O, CALENDAR_OPTION_REFINERS as P, COMPLEX_OPTION_COMPARATORS as Q, VIEW_OPTION_REFINERS as R, DateEnv as S, Theme as T, DateProfileGenerator as U, ViewContextType as V, createEventUi as W, parseBusinessHours as X, setRef as Y, Interaction as Z, getElSeg as _, mapHash as a, getSlotClassNames as a$, EventImpl as a0, listenBySelector as a1, listenToHoverBySelector as a2, PureComponent as a3, buildViewContext as a4, getUniqueDomId as a5, parseInteractionSettings as a6, interactionSettingsStore as a7, getNow as a8, CalendarImpl as a9, diffDates as aA, removeExact as aB, memoizeArraylike as aC, memoizeHashlike as aD, intersectRects as aE, pointInsideRect as aF, constrainPoint as aG, getRectCenter as aH, diffPoints as aI, translateRect as aJ, compareObjs as aK, collectFromHash as aL, findElements as aM, findDirectChildren as aN, removeElement as aO, applyStyle as aP, elementMatches as aQ, getEventTargetViaRoot as aR, parseClassNames as aS, getCanVGrowWithinCell as aT, mergeEventStores as aU, getRelevantEvents as aV, eventTupleToStore as aW, combineEventUis as aX, Splitter as aY, getDayClassNames as aZ, getDateMeta as a_, flushSync as aa, CalendarRoot as ab, RenderId as ac, ensureElHasStyles as ad, applyStyleProp as ae, sliceEventStore as af, JsonRequestError as ag, createContext as ah, refineProps as ai, createEventInstance as aj, parseEventDef as ak, refineEventDef as al, padStart as am, isInt as an, parseFieldSpecs as ao, compareByFieldSpecs as ap, flexibleCompare as aq, preventSelection as ar, allowSelection as as, preventContextMenu as at, allowContextMenu as au, compareNumbers as av, enableCursor as aw, disableCursor as ax, computeVisibleDayRange as ay, isMultiDayRange as az, buildViewClassNames as b, SimpleScrollGrid as b$, buildNavLinkAttrs as b0, preventDefault as b1, whenTransitionDone as b2, computeInnerRect as b3, computeEdges as b4, getClippingParents as b5, computeRect as b6, rangesEqual as b7, rangesIntersect as b8, rangeContainsRange as b9, SegHierarchy as bA, buildEntryKey as bB, getEntrySpanEnd as bC, binarySearch as bD, groupIntersectingEntries as bE, intersectSpans as bF, interactionSettingsToStore as bG, ElementDragging as bH, config as bI, parseDragMeta as bJ, DayHeader as bK, computeFallbackHeaderFormat as bL, TableDateCell as bM, TableDowCell as bN, DaySeriesModel as bO, hasBgRendering as bP, buildSegTimeText as bQ, sortEventSegs as bR, getSegMeta as bS, buildEventRangeKey as bT, getSegAnchorAttrs as bU, DayTableModel as bV, Slicer as bW, applyMutationToEventStore as bX, isPropsValid as bY, isInteractionValid as bZ, isDateSelectionValid as b_, PositionCache as ba, ScrollController as bb, ElementScrollController as bc, WindowScrollController as bd, DateComponent as be, isDateSpansEqual as bf, addMs as bg, addWeeks as bh, diffWeeks as bi, diffWholeWeeks as bj, diffDayAndTime as bk, diffDays as bl, isValidDate as bm, asCleanDays as bn, multiplyDuration as bo, addDurations as bp, asRoughMinutes as bq, asRoughSeconds as br, asRoughMs as bs, wholeDivideDurations as bt, formatIsoTimeString as bu, formatDayString as bv, buildIsoString as bw, formatIsoMonthStr as bx, NamedTimeZoneImpl as by, parse as bz, greatestDurationDenominator as c, hasShrinkWidth as c0, renderMicroColGroup as c1, getScrollGridClassNames as c2, getSectionClassNames as c3, getSectionHasLiquidHeight as c4, getAllowYScrolling as c5, renderChunkContent as c6, computeShrinkWidth as c7, sanitizeShrinkWidth as c8, isColPropsEqual as c9, renderScrollShim as ca, getStickyFooterScrollbar as cb, getStickyHeaderDates as cc, Scroller as cd, getScrollbarWidths as ce, RefMap as cf, getIsRtlScrollbarOnLeft as cg, NowTimer as ch, ScrollResponder as ci, StandardEvent as cj, NowIndicatorContainer as ck, DayCellContainer as cl, hasCustomDayCellContent as cm, EventContainer as cn, renderFill as co, BgEvent as cp, WeekNumberContainer as cq, MoreLinkContainer as cr, computeEarliestSegStart as cs, ViewContainer as ct, triggerDateSelect as cu, getDefaultEventEnd as cv, injectStyles as cw, buildElAttrs as cx, CustomRenderingStore as cy, createDuration as d, BASE_OPTION_DEFAULTS as e, arrayToHash as f, guid as g, filterHash as h, isArraysEqual as i, buildEventSourceRefiners as j, formatWithOrdinals as k, buildRangeApiWithTimeZone as l, mergeProps as m, identity as n, intersectRanges as o, parseEventSource as p, startOfDay as q, requestJson as r, subtractDurations as s, addDays as t, unpromisify as u, hashValuesToArray as v, buildEventApis as w, createFormatter as x, diffWholeDays as y, memoize as z };\n", "import { m as mergeProps, g as guid, i as isArraysEqual, T as Theme, a as mapHash, B as BaseComponent, V as ViewContextType, C as ContentContainer, b as buildViewClassNames, c as greatestDurationDenominator, d as createDuration, e as BASE_OPTION_DEFAULTS, f as arrayToHash, h as filterHash, j as buildEventSourceRefiners, p as parseEventSource, k as formatWithOrdinals, u as unpromisify, l as buildRangeApiWithTimeZone, n as identity, r as requestJson, s as subtractDurations, o as intersectRanges, q as startOfDay, t as addDays, v as hashValuesToArray, w as buildEventApis, D as DelayedRunner, x as createFormatter, y as diffWholeDays, z as memoize, A as memoizeObjArg, E as isPropsEqual, F as Emitter, G as getInitialDate, H as rangeContainsMarker, I as createEmptyEventStore, J as reduceCurrentDate, K as reduceEventStore, L as rezoneEventStoreDates, M as mergeRawOptions, N as BASE_OPTION_REFINERS, O as CALENDAR_LISTENER_REFINERS, P as CALENDAR_OPTION_REFINERS, Q as COMPLEX_OPTION_COMPARATORS, R as VIEW_OPTION_REFINERS, S as DateEnv, U as DateProfileGenerator, W as createEventUi, X as parseBusinessHours, Y as setRef, Z as Interaction, _ as getElSeg, $ as elementClosest, a0 as EventImpl, a1 as listenBySelector, a2 as listenToHoverBySelector, a3 as PureComponent, a4 as buildViewContext, a5 as getUniqueDomId, a6 as parseInteractionSettings, a7 as interactionSettingsStore, a8 as getNow, a9 as CalendarImpl, aa as flushSync, ab as CalendarRoot, ac as RenderId, ad as ensureElHasStyles, ae as applyStyleProp, af as sliceEventStore } from './internal-common.js';\nexport { ag as JsonRequestError } from './internal-common.js';\nimport { createElement, createRef, Fragment, render } from 'preact';\nimport 'preact/compat';\n\nconst globalLocales = [];\n\nconst MINIMAL_RAW_EN_LOCALE = {\n code: 'en',\n week: {\n dow: 0,\n doy: 4, // 4 days need to be within the year to be considered the first week\n },\n direction: 'ltr',\n buttonText: {\n prev: 'prev',\n next: 'next',\n prevYear: 'prev year',\n nextYear: 'next year',\n year: 'year',\n today: 'today',\n month: 'month',\n week: 'week',\n day: 'day',\n list: 'list',\n },\n weekText: 'W',\n weekTextLong: 'Week',\n closeHint: 'Close',\n timeHint: 'Time',\n eventHint: 'Event',\n allDayText: 'all-day',\n moreLinkText: 'more',\n noEventsText: 'No events to display',\n};\nconst RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), { \n // Includes things we don't want other locales to inherit,\n // things that derive from other translatable strings.\n buttonHints: {\n prev: 'Previous $0',\n next: 'Next $0',\n today(buttonText, unit) {\n return (unit === 'day')\n ? 'Today'\n : `This ${buttonText}`;\n },\n }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {\n return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;\n } });\nfunction organizeRawLocales(explicitRawLocales) {\n let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n let allRawLocales = globalLocales.concat(explicitRawLocales);\n let rawLocaleMap = {\n en: RAW_EN_LOCALE,\n };\n for (let rawLocale of allRawLocales) {\n rawLocaleMap[rawLocale.code] = rawLocale;\n }\n return {\n map: rawLocaleMap,\n defaultCode,\n };\n}\nfunction buildLocale(inputSingular, available) {\n if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {\n return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n }\n return queryLocale(inputSingular, available);\n}\nfunction queryLocale(codeArg, available) {\n let codes = [].concat(codeArg || []); // will convert to array\n let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n return parseLocale(codeArg, codes, raw);\n}\nfunction queryRawLocale(codes, available) {\n for (let i = 0; i < codes.length; i += 1) {\n let parts = codes[i].toLocaleLowerCase().split('-');\n for (let j = parts.length; j > 0; j -= 1) {\n let simpleId = parts.slice(0, j).join('-');\n if (available[simpleId]) {\n return available[simpleId];\n }\n }\n }\n return null;\n}\nfunction parseLocale(codeArg, codes, raw) {\n let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);\n delete merged.code; // don't want this part of the options\n let { week } = merged;\n delete merged.week;\n return {\n codeArg,\n codes,\n week,\n simpleNumberFormat: new Intl.NumberFormat(codeArg),\n options: merged,\n };\n}\n\n// TODO: easier way to add new hooks? need to update a million things\nfunction createPlugin(input) {\n return {\n id: guid(),\n name: input.name,\n premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,\n deps: input.deps || [],\n reducers: input.reducers || [],\n isLoadingFuncs: input.isLoadingFuncs || [],\n contextInit: [].concat(input.contextInit || []),\n eventRefiners: input.eventRefiners || {},\n eventDefMemberAdders: input.eventDefMemberAdders || [],\n eventSourceRefiners: input.eventSourceRefiners || {},\n isDraggableTransformers: input.isDraggableTransformers || [],\n eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n dateSelectionTransformers: input.dateSelectionTransformers || [],\n datePointTransforms: input.datePointTransforms || [],\n dateSpanTransforms: input.dateSpanTransforms || [],\n views: input.views || {},\n viewPropsTransformers: input.viewPropsTransformers || [],\n isPropsValid: input.isPropsValid || null,\n externalDefTransforms: input.externalDefTransforms || [],\n viewContainerAppends: input.viewContainerAppends || [],\n eventDropTransformers: input.eventDropTransformers || [],\n componentInteractions: input.componentInteractions || [],\n calendarInteractions: input.calendarInteractions || [],\n themeClasses: input.themeClasses || {},\n eventSourceDefs: input.eventSourceDefs || [],\n cmdFormatter: input.cmdFormatter,\n recurringTypes: input.recurringTypes || [],\n namedTimeZonedImpl: input.namedTimeZonedImpl,\n initialView: input.initialView || '',\n elementDraggingImpl: input.elementDraggingImpl,\n optionChangeHandlers: input.optionChangeHandlers || {},\n scrollGridImpl: input.scrollGridImpl || null,\n listenerRefiners: input.listenerRefiners || {},\n optionRefiners: input.optionRefiners || {},\n propSetHandlers: input.propSetHandlers || {},\n };\n}\nfunction buildPluginHooks(pluginDefs, globalDefs) {\n let currentPluginIds = {};\n let hooks = {\n premiumReleaseDate: undefined,\n reducers: [],\n isLoadingFuncs: [],\n contextInit: [],\n eventRefiners: {},\n eventDefMemberAdders: [],\n eventSourceRefiners: {},\n isDraggableTransformers: [],\n eventDragMutationMassagers: [],\n eventDefMutationAppliers: [],\n dateSelectionTransformers: [],\n datePointTransforms: [],\n dateSpanTransforms: [],\n views: {},\n viewPropsTransformers: [],\n isPropsValid: null,\n externalDefTransforms: [],\n viewContainerAppends: [],\n eventDropTransformers: [],\n componentInteractions: [],\n calendarInteractions: [],\n themeClasses: {},\n eventSourceDefs: [],\n cmdFormatter: null,\n recurringTypes: [],\n namedTimeZonedImpl: null,\n initialView: '',\n elementDraggingImpl: null,\n optionChangeHandlers: {},\n scrollGridImpl: null,\n listenerRefiners: {},\n optionRefiners: {},\n propSetHandlers: {},\n };\n function addDefs(defs) {\n for (let def of defs) {\n const pluginName = def.name;\n const currentId = currentPluginIds[pluginName];\n if (currentId === undefined) {\n currentPluginIds[pluginName] = def.id;\n addDefs(def.deps);\n hooks = combineHooks(hooks, def);\n }\n else if (currentId !== def.id) {\n // different ID than the one already added\n console.warn(`Duplicate plugin '${pluginName}'`);\n }\n }\n }\n if (pluginDefs) {\n addDefs(pluginDefs);\n }\n addDefs(globalDefs);\n return hooks;\n}\nfunction buildBuildPluginHooks() {\n let currentOverrideDefs = [];\n let currentGlobalDefs = [];\n let currentHooks;\n return (overrideDefs, globalDefs) => {\n if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {\n currentHooks = buildPluginHooks(overrideDefs, globalDefs);\n }\n currentOverrideDefs = overrideDefs;\n currentGlobalDefs = globalDefs;\n return currentHooks;\n };\n}\nfunction combineHooks(hooks0, hooks1) {\n return {\n premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),\n reducers: hooks0.reducers.concat(hooks1.reducers),\n isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),\n contextInit: hooks0.contextInit.concat(hooks1.contextInit),\n eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),\n eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),\n eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),\n isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),\n viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),\n eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),\n eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n initialView: hooks0.initialView || hooks1.initialView,\n elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),\n scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,\n listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),\n optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),\n propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),\n };\n}\nfunction compareOptionalDates(date0, date1) {\n if (date0 === undefined) {\n return date1;\n }\n if (date1 === undefined) {\n return date0;\n }\n return new Date(Math.max(date0.valueOf(), date1.valueOf()));\n}\n\nclass StandardTheme extends Theme {\n}\nStandardTheme.prototype.classes = {\n root: 'fc-theme-standard',\n tableCellShaded: 'fc-cell-shaded',\n buttonGroup: 'fc-button-group',\n button: 'fc-button fc-button-primary',\n buttonActive: 'fc-button-active',\n};\nStandardTheme.prototype.baseIconClass = 'fc-icon';\nStandardTheme.prototype.iconClasses = {\n close: 'fc-icon-x',\n prev: 'fc-icon-chevron-left',\n next: 'fc-icon-chevron-right',\n prevYear: 'fc-icon-chevrons-left',\n nextYear: 'fc-icon-chevrons-right',\n};\nStandardTheme.prototype.rtlIconClasses = {\n prev: 'fc-icon-chevron-right',\n next: 'fc-icon-chevron-left',\n prevYear: 'fc-icon-chevrons-right',\n nextYear: 'fc-icon-chevrons-left',\n};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n\nfunction compileViewDefs(defaultConfigs, overrideConfigs) {\n let hash = {};\n let viewType;\n for (viewType in defaultConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n for (viewType in overrideConfigs) {\n ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n }\n return hash;\n}\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n if (hash[viewType]) {\n return hash[viewType];\n }\n let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n if (viewDef) {\n hash[viewType] = viewDef;\n }\n return viewDef;\n}\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n let defaultConfig = defaultConfigs[viewType];\n let overrideConfig = overrideConfigs[viewType];\n let queryProp = (name) => ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :\n ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null));\n let theComponent = queryProp('component');\n let superType = queryProp('superType');\n let superDef = null;\n if (superType) {\n if (superType === viewType) {\n throw new Error('Can\\'t have a custom view type that references itself');\n }\n superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n }\n if (!theComponent && superDef) {\n theComponent = superDef.component;\n }\n if (!theComponent) {\n return null; // don't throw a warning, might be settings for a single-unit view\n }\n return {\n type: viewType,\n component: theComponent,\n defaults: Object.assign(Object.assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),\n overrides: Object.assign(Object.assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),\n };\n}\n\nfunction parseViewConfigs(inputs) {\n return mapHash(inputs, parseViewConfig);\n}\nfunction parseViewConfig(input) {\n let rawOptions = typeof input === 'function' ?\n { component: input } :\n input;\n let { component } = rawOptions;\n if (rawOptions.content) {\n // TODO: remove content/classNames/didMount/etc from options?\n component = createViewHookComponent(rawOptions);\n }\n else if (component && !(component.prototype instanceof BaseComponent)) {\n // WHY?: people were using `component` property for `content`\n // TODO: converge on one setting name\n component = createViewHookComponent(Object.assign(Object.assign({}, rawOptions), { content: component }));\n }\n return {\n superType: rawOptions.type,\n component: component,\n rawOptions, // includes type and component too :(\n };\n}\nfunction createViewHookComponent(options) {\n return (viewProps) => (createElement(ViewContextType.Consumer, null, (context) => (createElement(ContentContainer, { elTag: \"div\", elClasses: buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, customGenerator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));\n}\n\nfunction buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n let defaultConfigs = parseViewConfigs(defaultInputs);\n let overrideConfigs = parseViewConfigs(optionOverrides.views);\n let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));\n}\nfunction buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n let durationInput = viewDef.overrides.duration ||\n viewDef.defaults.duration ||\n dynamicOptionOverrides.duration ||\n optionOverrides.duration;\n let duration = null;\n let durationUnit = '';\n let singleUnit = '';\n let singleUnitOverrides = {};\n if (durationInput) {\n duration = createDurationCached(durationInput);\n if (duration) { // valid?\n let denom = greatestDurationDenominator(duration);\n durationUnit = denom.unit;\n if (denom.value === 1) {\n singleUnit = durationUnit;\n singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};\n }\n }\n }\n let queryButtonText = (optionsSubset) => {\n let buttonTextMap = optionsSubset.buttonText || {};\n let buttonTextKey = viewDef.defaults.buttonTextKey;\n if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n return buttonTextMap[buttonTextKey];\n }\n if (buttonTextMap[viewDef.type] != null) {\n return buttonTextMap[viewDef.type];\n }\n if (buttonTextMap[singleUnit] != null) {\n return buttonTextMap[singleUnit];\n }\n return null;\n };\n let queryButtonTitle = (optionsSubset) => {\n let buttonHints = optionsSubset.buttonHints || {};\n let buttonKey = viewDef.defaults.buttonTextKey; // use same key as text\n if (buttonKey != null && buttonHints[buttonKey] != null) {\n return buttonHints[buttonKey];\n }\n if (buttonHints[viewDef.type] != null) {\n return buttonHints[viewDef.type];\n }\n if (buttonHints[singleUnit] != null) {\n return buttonHints[singleUnit];\n }\n return null;\n };\n return {\n type: viewDef.type,\n component: viewDef.component,\n duration,\n durationUnit,\n singleUnit,\n optionDefaults: viewDef.defaults,\n optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),\n buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||\n queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence\n viewDef.overrides.buttonText,\n buttonTextDefault: queryButtonText(localeDefaults) ||\n viewDef.defaults.buttonText ||\n queryButtonText(BASE_OPTION_DEFAULTS) ||\n viewDef.type,\n // not DRY\n buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||\n queryButtonTitle(optionOverrides) ||\n viewDef.overrides.buttonHint,\n buttonTitleDefault: queryButtonTitle(localeDefaults) ||\n viewDef.defaults.buttonHint ||\n queryButtonTitle(BASE_OPTION_DEFAULTS),\n // will eventually fall back to buttonText\n };\n}\n// hack to get memoization working\nlet durationInputMap = {};\nfunction createDurationCached(durationInput) {\n let json = JSON.stringify(durationInput);\n let res = durationInputMap[json];\n if (res === undefined) {\n res = createDuration(durationInput);\n durationInputMap[json] = res;\n }\n return res;\n}\n\nfunction reduceViewType(viewType, action) {\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n viewType = action.viewType;\n }\n return viewType;\n}\n\nfunction reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {\n switch (action.type) {\n case 'SET_OPTION':\n return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });\n default:\n return dynamicOptionOverrides;\n }\n}\n\nfunction reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {\n let dp;\n switch (action.type) {\n case 'CHANGE_VIEW_TYPE':\n return dateProfileGenerator.build(action.dateMarker || currentDate);\n case 'CHANGE_DATE':\n return dateProfileGenerator.build(action.dateMarker);\n case 'PREV':\n dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);\n if (dp.isValid) {\n return dp;\n }\n break;\n case 'NEXT':\n dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);\n if (dp.isValid) {\n return dp;\n }\n break;\n }\n return currentDateProfile;\n}\n\nfunction initEventSources(calendarOptions, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null;\n return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);\n}\nfunction reduceEventSources(eventSources, action, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n switch (action.type) {\n case 'ADD_EVENT_SOURCES': // already parsed\n return addSources(eventSources, action.sources, activeRange, context);\n case 'REMOVE_EVENT_SOURCE':\n return removeSource(eventSources, action.sourceId);\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'CHANGE_DATE':\n case 'CHANGE_VIEW_TYPE':\n if (dateProfile) {\n return fetchDirtySources(eventSources, activeRange, context);\n }\n return eventSources;\n case 'FETCH_EVENT_SOURCES':\n return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?\n arrayToHash(action.sourceIds) :\n excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);\n case 'RECEIVE_EVENTS':\n case 'RECEIVE_EVENT_ERROR':\n return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n case 'REMOVE_ALL_EVENT_SOURCES':\n return {};\n default:\n return eventSources;\n }\n}\nfunction reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {\n let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);\n}\nfunction computeEventSourcesLoading(eventSources) {\n for (let sourceId in eventSources) {\n if (eventSources[sourceId].isFetching) {\n return true;\n }\n }\n return false;\n}\nfunction addSources(eventSourceHash, sources, fetchRange, context) {\n let hash = {};\n for (let source of sources) {\n hash[source.sourceId] = source;\n }\n if (fetchRange) {\n hash = fetchDirtySources(hash, fetchRange, context);\n }\n return Object.assign(Object.assign({}, eventSourceHash), hash);\n}\nfunction removeSource(eventSourceHash, sourceId) {\n return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);\n}\nfunction fetchDirtySources(sourceHash, fetchRange, context) {\n return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);\n}\nfunction isSourceDirty(eventSource, fetchRange, context) {\n if (!doesSourceNeedRange(eventSource, context)) {\n return !eventSource.latestFetchId;\n }\n return !context.options.lazyFetching ||\n !eventSource.fetchRange ||\n eventSource.isFetching || // always cancel outdated in-progress fetches\n fetchRange.start < eventSource.fetchRange.start ||\n fetchRange.end > eventSource.fetchRange.end;\n}\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {\n let nextSources = {};\n for (let sourceId in prevSources) {\n let source = prevSources[sourceId];\n if (sourceIdHash[sourceId]) {\n nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);\n }\n else {\n nextSources[sourceId] = source;\n }\n }\n return nextSources;\n}\nfunction fetchSource(eventSource, fetchRange, isRefetch, context) {\n let { options, calendarApi } = context;\n let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];\n let fetchId = guid();\n sourceDef.fetch({\n eventSource,\n range: fetchRange,\n isRefetch,\n context,\n }, (res) => {\n let { rawEvents } = res;\n if (options.eventSourceSuccess) {\n rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;\n }\n if (eventSource.success) {\n rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;\n }\n context.dispatch({\n type: 'RECEIVE_EVENTS',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n rawEvents,\n });\n }, (error) => {\n let errorHandled = false;\n if (options.eventSourceFailure) {\n options.eventSourceFailure.call(calendarApi, error);\n errorHandled = true;\n }\n if (eventSource.failure) {\n eventSource.failure(error);\n errorHandled = true;\n }\n if (!errorHandled) {\n console.warn(error.message, error);\n }\n context.dispatch({\n type: 'RECEIVE_EVENT_ERROR',\n sourceId: eventSource.sourceId,\n fetchId,\n fetchRange,\n error,\n });\n });\n return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });\n}\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n let eventSource = sourceHash[sourceId];\n if (eventSource && // not already removed\n fetchId === eventSource.latestFetchId) {\n return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });\n }\n return sourceHash;\n}\nfunction excludeStaticSources(eventSources, context) {\n return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));\n}\nfunction parseInitialSources(rawOptions, context) {\n let refiners = buildEventSourceRefiners(context);\n let rawSources = [].concat(rawOptions.eventSources || []);\n let sources = []; // parsed\n if (rawOptions.initialEvents) {\n rawSources.unshift(rawOptions.initialEvents);\n }\n if (rawOptions.events) {\n rawSources.unshift(rawOptions.events);\n }\n for (let rawSource of rawSources) {\n let source = parseEventSource(rawSource, context, refiners);\n if (source) {\n sources.push(source);\n }\n }\n return sources;\n}\nfunction doesSourceNeedRange(eventSource, context) {\n let defs = context.pluginHooks.eventSourceDefs;\n return !defs[eventSource.sourceDefId].ignoreRange;\n}\n\nfunction reduceDateSelection(currentSelection, action) {\n switch (action.type) {\n case 'UNSELECT_DATES':\n return null;\n case 'SELECT_DATES':\n return action.selection;\n default:\n return currentSelection;\n }\n}\n\nfunction reduceSelectedEvent(currentInstanceId, action) {\n switch (action.type) {\n case 'UNSELECT_EVENT':\n return '';\n case 'SELECT_EVENT':\n return action.eventInstanceId;\n default:\n return currentInstanceId;\n }\n}\n\nfunction reduceEventDrag(currentDrag, action) {\n let newDrag;\n switch (action.type) {\n case 'UNSET_EVENT_DRAG':\n return null;\n case 'SET_EVENT_DRAG':\n newDrag = action.state;\n return {\n affectedEvents: newDrag.affectedEvents,\n mutatedEvents: newDrag.mutatedEvents,\n isEvent: newDrag.isEvent,\n };\n default:\n return currentDrag;\n }\n}\n\nfunction reduceEventResize(currentResize, action) {\n let newResize;\n switch (action.type) {\n case 'UNSET_EVENT_RESIZE':\n return null;\n case 'SET_EVENT_RESIZE':\n newResize = action.state;\n return {\n affectedEvents: newResize.affectedEvents,\n mutatedEvents: newResize.mutatedEvents,\n isEvent: newResize.isEvent,\n };\n default:\n return currentResize;\n }\n}\n\nfunction parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n return { header, footer };\n}\nfunction parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n let sectionWidgets = {};\n let viewsWithButtons = [];\n let hasTitle = false;\n for (let sectionName in sectionStrHash) {\n let sectionStr = sectionStrHash[sectionName];\n let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);\n sectionWidgets[sectionName] = sectionRes.widgets;\n viewsWithButtons.push(...sectionRes.viewsWithButtons);\n hasTitle = hasTitle || sectionRes.hasTitle;\n }\n return { sectionWidgets, viewsWithButtons, hasTitle };\n}\n/*\nBAD: querying icons and text here. should be done at render time\n*/\nfunction parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined\ncalendarOptionOverrides, // overrides only!, unrefined :(\ntheme, viewSpecs, calendarApi) {\n let isRtl = calendarOptions.direction === 'rtl';\n let calendarCustomButtons = calendarOptions.customButtons || {};\n let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};\n let calendarButtonText = calendarOptions.buttonText || {};\n let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};\n let calendarButtonHints = calendarOptions.buttonHints || {};\n let sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];\n let viewsWithButtons = [];\n let hasTitle = false;\n let widgets = sectionSubstrs.map((buttonGroupStr) => (buttonGroupStr.split(',').map((buttonName) => {\n if (buttonName === 'title') {\n hasTitle = true;\n return { buttonName };\n }\n let customButtonProps;\n let viewSpec;\n let buttonClick;\n let buttonIcon; // only one of these will be set\n let buttonText; // \"\n let buttonHint;\n // ^ for the title=\"\" attribute, for accessibility\n if ((customButtonProps = calendarCustomButtons[buttonName])) {\n buttonClick = (ev) => {\n if (customButtonProps.click) {\n customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?\n }\n };\n (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = customButtonProps.text);\n buttonHint = customButtonProps.hint || customButtonProps.text;\n }\n else if ((viewSpec = viewSpecs[buttonName])) {\n viewsWithButtons.push(buttonName);\n buttonClick = () => {\n calendarApi.changeView(buttonName);\n };\n (buttonText = viewSpec.buttonTextOverride) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = viewSpec.buttonTextDefault);\n let textFallback = viewSpec.buttonTextOverride ||\n viewSpec.buttonTextDefault;\n buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||\n viewSpec.buttonTitleDefault ||\n calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName\n textFallback);\n }\n else if (calendarApi[buttonName]) { // a calendarApi method\n buttonClick = () => {\n calendarApi[buttonName]();\n };\n (buttonText = calendarButtonTextOverrides[buttonName]) ||\n (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||\n (buttonText = calendarButtonText[buttonName]); // everything else is considered default\n if (buttonName === 'prevYear' || buttonName === 'nextYear') {\n let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';\n buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||\n calendarButtonHints[prevOrNext], [\n calendarButtonText.year || 'year',\n 'year',\n ], calendarButtonText[buttonName]);\n }\n else {\n buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||\n calendarButtonHints[buttonName], [\n calendarButtonText[navUnit] || navUnit,\n navUnit,\n ], calendarButtonText[buttonName]);\n }\n }\n return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };\n })));\n return { widgets, viewsWithButtons, hasTitle };\n}\n\n// always represents the current view. otherwise, it'd need to change value every time date changes\nclass ViewImpl {\n constructor(type, getCurrentData, dateEnv) {\n this.type = type;\n this.getCurrentData = getCurrentData;\n this.dateEnv = dateEnv;\n }\n get calendar() {\n return this.getCurrentData().calendarApi;\n }\n get title() {\n return this.getCurrentData().viewTitle;\n }\n get activeStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);\n }\n get activeEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);\n }\n get currentStart() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);\n }\n get currentEnd() {\n return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);\n }\n getOption(name) {\n return this.getCurrentData().options[name]; // are the view-specific options\n }\n}\n\nlet eventSourceDef$2 = {\n ignoreRange: true,\n parseMeta(refined) {\n if (Array.isArray(refined.events)) {\n return refined.events;\n }\n return null;\n },\n fetch(arg, successCallback) {\n successCallback({\n rawEvents: arg.eventSource.meta,\n });\n },\n};\nconst arrayEventSourcePlugin = createPlugin({\n name: 'array-event-source',\n eventSourceDefs: [eventSourceDef$2],\n});\n\nlet eventSourceDef$1 = {\n parseMeta(refined) {\n if (typeof refined.events === 'function') {\n return refined.events;\n }\n return null;\n },\n fetch(arg, successCallback, errorCallback) {\n const { dateEnv } = arg.context;\n const func = arg.eventSource.meta;\n unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);\n },\n};\nconst funcEventSourcePlugin = createPlugin({\n name: 'func-event-source',\n eventSourceDefs: [eventSourceDef$1],\n});\n\nconst JSON_FEED_EVENT_SOURCE_REFINERS = {\n method: String,\n extraParams: identity,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n};\n\nlet eventSourceDef = {\n parseMeta(refined) {\n if (refined.url && (refined.format === 'json' || !refined.format)) {\n return {\n url: refined.url,\n format: 'json',\n method: (refined.method || 'GET').toUpperCase(),\n extraParams: refined.extraParams,\n startParam: refined.startParam,\n endParam: refined.endParam,\n timeZoneParam: refined.timeZoneParam,\n };\n }\n return null;\n },\n fetch(arg, successCallback, errorCallback) {\n const { meta } = arg.eventSource;\n const requestParams = buildRequestParams(meta, arg.range, arg.context);\n requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {\n successCallback({ rawEvents, response });\n }, errorCallback);\n },\n};\nconst jsonFeedEventSourcePlugin = createPlugin({\n name: 'json-event-source',\n eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,\n eventSourceDefs: [eventSourceDef],\n});\nfunction buildRequestParams(meta, range, context) {\n let { dateEnv, options } = context;\n let startParam;\n let endParam;\n let timeZoneParam;\n let customRequestParams;\n let params = {};\n startParam = meta.startParam;\n if (startParam == null) {\n startParam = options.startParam;\n }\n endParam = meta.endParam;\n if (endParam == null) {\n endParam = options.endParam;\n }\n timeZoneParam = meta.timeZoneParam;\n if (timeZoneParam == null) {\n timeZoneParam = options.timeZoneParam;\n }\n // retrieve any outbound GET/POST data from the options\n if (typeof meta.extraParams === 'function') {\n // supplied as a function that returns a key/value object\n customRequestParams = meta.extraParams();\n }\n else {\n // probably supplied as a straight key/value object\n customRequestParams = meta.extraParams || {};\n }\n Object.assign(params, customRequestParams);\n params[startParam] = dateEnv.formatIso(range.start);\n params[endParam] = dateEnv.formatIso(range.end);\n if (dateEnv.timeZone !== 'local') {\n params[timeZoneParam] = dateEnv.timeZone;\n }\n return params;\n}\n\nconst SIMPLE_RECURRING_REFINERS = {\n daysOfWeek: identity,\n startTime: createDuration,\n endTime: createDuration,\n duration: createDuration,\n startRecur: identity,\n endRecur: identity,\n};\n\nlet recurring = {\n parse(refined, dateEnv) {\n if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {\n let recurringData = {\n daysOfWeek: refined.daysOfWeek || null,\n startTime: refined.startTime || null,\n endTime: refined.endTime || null,\n startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,\n endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,\n };\n let duration;\n if (refined.duration) {\n duration = refined.duration;\n }\n if (!duration && refined.startTime && refined.endTime) {\n duration = subtractDurations(refined.endTime, refined.startTime);\n }\n return {\n allDayGuess: Boolean(!refined.startTime && !refined.endTime),\n duration,\n typeData: recurringData, // doesn't need endTime anymore but oh well\n };\n }\n return null;\n },\n expand(typeData, framingRange, dateEnv) {\n let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });\n if (clippedFramingRange) {\n return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);\n }\n return [];\n },\n};\nconst simpleRecurringEventsPlugin = createPlugin({\n name: 'simple-recurring-event',\n recurringTypes: [recurring],\n eventRefiners: SIMPLE_RECURRING_REFINERS,\n});\nfunction expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {\n let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;\n let dayMarker = startOfDay(framingRange.start);\n let endMarker = framingRange.end;\n let instanceStarts = [];\n while (dayMarker < endMarker) {\n let instanceStart;\n // if everyday, or this particular day-of-week\n if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n if (startTime) {\n instanceStart = dateEnv.add(dayMarker, startTime);\n }\n else {\n instanceStart = dayMarker;\n }\n instanceStarts.push(instanceStart);\n }\n dayMarker = addDays(dayMarker, 1);\n }\n return instanceStarts;\n}\n\nconst changeHandlerPlugin = createPlugin({\n name: 'change-handler',\n optionChangeHandlers: {\n events(events, context) {\n handleEventSources([events], context);\n },\n eventSources: handleEventSources,\n },\n});\n/*\nBUG: if `event` was supplied, all previously-given `eventSources` will be wiped out\n*/\nfunction handleEventSources(inputs, context) {\n let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);\n if (unfoundSources.length === 1 &&\n inputs.length === 1 &&\n Array.isArray(unfoundSources[0]._raw) &&\n Array.isArray(inputs[0])) {\n context.dispatch({\n type: 'RESET_RAW_EVENTS',\n sourceId: unfoundSources[0].sourceId,\n rawEvents: inputs[0],\n });\n return;\n }\n let newInputs = [];\n for (let input of inputs) {\n let inputFound = false;\n for (let i = 0; i < unfoundSources.length; i += 1) {\n if (unfoundSources[i]._raw === input) {\n unfoundSources.splice(i, 1); // delete\n inputFound = true;\n break;\n }\n }\n if (!inputFound) {\n newInputs.push(input);\n }\n }\n for (let unfoundSource of unfoundSources) {\n context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: unfoundSource.sourceId,\n });\n }\n for (let newInput of newInputs) {\n context.calendarApi.addEventSource(newInput);\n }\n}\n\nfunction handleDateProfile(dateProfile, context) {\n context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));\n}\n\nfunction handleEventStore(eventStore, context) {\n let { emitter } = context;\n if (emitter.hasHandlers('eventsSet')) {\n emitter.trigger('eventsSet', buildEventApis(eventStore, context));\n }\n}\n\n/*\nthis array is exposed on the root namespace so that UMD plugins can add to it.\nsee the rollup-bundles script.\n*/\nconst globalPlugins = [\n arrayEventSourcePlugin,\n funcEventSourcePlugin,\n jsonFeedEventSourcePlugin,\n simpleRecurringEventsPlugin,\n changeHandlerPlugin,\n createPlugin({\n name: 'misc',\n isLoadingFuncs: [\n (state) => computeEventSourcesLoading(state.eventSources),\n ],\n propSetHandlers: {\n dateProfile: handleDateProfile,\n eventStore: handleEventStore,\n },\n }),\n];\n\nclass TaskRunner {\n constructor(runTaskOption, drainedOption) {\n this.runTaskOption = runTaskOption;\n this.drainedOption = drainedOption;\n this.queue = [];\n this.delayedRunner = new DelayedRunner(this.drain.bind(this));\n }\n request(task, delay) {\n this.queue.push(task);\n this.delayedRunner.request(delay);\n }\n pause(scope) {\n this.delayedRunner.pause(scope);\n }\n resume(scope, force) {\n this.delayedRunner.resume(scope, force);\n }\n drain() {\n let { queue } = this;\n while (queue.length) {\n let completedTasks = [];\n let task;\n while ((task = queue.shift())) {\n this.runTask(task);\n completedTasks.push(task);\n }\n this.drained(completedTasks);\n } // keep going, in case new tasks were added in the drained handler\n }\n runTask(task) {\n if (this.runTaskOption) {\n this.runTaskOption(task);\n }\n }\n drained(completedTasks) {\n if (this.drainedOption) {\n this.drainedOption(completedTasks);\n }\n }\n}\n\n// Computes what the title at the top of the calendarApi should be for this view\nfunction buildTitle(dateProfile, viewOptions, dateEnv) {\n let range;\n // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n range = dateProfile.currentRange;\n }\n else { // for day units or smaller, use the actual day range\n range = dateProfile.activeRange;\n }\n return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {\n isEndExclusive: dateProfile.isRangeAllDay,\n defaultSeparator: viewOptions.titleRangeSeparator,\n });\n}\n// Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\nfunction buildTitleFormat(dateProfile) {\n let { currentRangeUnit } = dateProfile;\n if (currentRangeUnit === 'year') {\n return { year: 'numeric' };\n }\n if (currentRangeUnit === 'month') {\n return { year: 'numeric', month: 'long' }; // like \"September 2014\"\n }\n let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\n if (days !== null && days > 1) {\n // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n return { year: 'numeric', month: 'short', day: 'numeric' };\n }\n // one day. longer, like \"September 9 2014\"\n return { year: 'numeric', month: 'long', day: 'numeric' };\n}\n\n// in future refactor, do the redux-style function(state=initial) for initial-state\n// also, whatever is happening in constructor, have it happen in action queue too\nclass CalendarDataManager {\n constructor(props) {\n this.computeCurrentViewData = memoize(this._computeCurrentViewData);\n this.organizeRawLocales = memoize(organizeRawLocales);\n this.buildLocale = memoize(buildLocale);\n this.buildPluginHooks = buildBuildPluginHooks();\n this.buildDateEnv = memoize(buildDateEnv$1);\n this.buildTheme = memoize(buildTheme);\n this.parseToolbars = memoize(parseToolbars);\n this.buildViewSpecs = memoize(buildViewSpecs);\n this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);\n this.buildViewApi = memoize(buildViewApi);\n this.buildViewUiProps = memoizeObjArg(buildViewUiProps);\n this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);\n this.buildEventUiBases = memoize(buildEventUiBases);\n this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);\n this.buildTitle = memoize(buildTitle);\n this.emitter = new Emitter();\n this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));\n this.currentCalendarOptionsInput = {};\n this.currentCalendarOptionsRefined = {};\n this.currentViewOptionsInput = {};\n this.currentViewOptionsRefined = {};\n this.currentCalendarOptionsRefiners = {};\n this.optionsForRefining = [];\n this.optionsForHandling = [];\n this.getCurrentData = () => this.data;\n this.dispatch = (action) => {\n this.actionRunner.request(action); // protects against recursive calls to _handleAction\n };\n this.props = props;\n this.actionRunner.pause();\n let dynamicOptionOverrides = {};\n let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;\n let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\n // wire things up\n // TODO: not DRY\n props.calendarApi.currentDataManager = this;\n this.emitter.setThisContext(props.calendarApi);\n this.emitter.setOptions(currentViewData.options);\n let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);\n let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {\n currentDate = dateProfile.currentRange.start;\n }\n let calendarContext = {\n dateEnv: optionsData.dateEnv,\n options: optionsData.calendarOptions,\n pluginHooks: optionsData.pluginHooks,\n calendarApi: props.calendarApi,\n dispatch: this.dispatch,\n emitter: this.emitter,\n getCurrentData: this.getCurrentData,\n };\n // needs to be after setThisContext\n for (let callback of optionsData.pluginHooks.contextInit) {\n callback(calendarContext);\n }\n // NOT DRY\n let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);\n let initialState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n businessHours: this.parseContextBusinessHours(calendarContext),\n eventSources,\n eventUiBases: {},\n eventStore: createEmptyEventStore(),\n renderableEventStore: createEmptyEventStore(),\n dateSelection: null,\n eventSelection: '',\n eventDrag: null,\n eventResize: null,\n selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,\n };\n let contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);\n for (let reducer of optionsData.pluginHooks.reducers) {\n Object.assign(initialState, reducer(null, null, contextAndState));\n }\n if (computeIsLoading(initialState, calendarContext)) {\n this.emitter.trigger('loading', true); // NOT DRY\n }\n this.state = initialState;\n this.updateData();\n this.actionRunner.resume();\n }\n resetOptions(optionOverrides, changedOptionNames) {\n let { props } = this;\n if (changedOptionNames === undefined) {\n props.optionOverrides = optionOverrides;\n }\n else {\n props.optionOverrides = Object.assign(Object.assign({}, (props.optionOverrides || {})), optionOverrides);\n this.optionsForRefining.push(...changedOptionNames);\n }\n if (changedOptionNames === undefined || changedOptionNames.length) {\n this.actionRunner.request({\n type: 'NOTHING',\n });\n }\n }\n _handleAction(action) {\n let { props, state, emitter } = this;\n let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);\n let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n let currentViewType = reduceViewType(state.currentViewType, action);\n let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);\n // wire things up\n // TODO: not DRY\n props.calendarApi.currentDataManager = this;\n emitter.setThisContext(props.calendarApi);\n emitter.setOptions(currentViewData.options);\n let calendarContext = {\n dateEnv: optionsData.dateEnv,\n options: optionsData.calendarOptions,\n pluginHooks: optionsData.pluginHooks,\n calendarApi: props.calendarApi,\n dispatch: this.dispatch,\n emitter,\n getCurrentData: this.getCurrentData,\n };\n let { currentDate, dateProfile } = state;\n if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack\n dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n }\n currentDate = reduceCurrentDate(currentDate, action);\n dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);\n if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator\n action.type === 'NEXT' || // \"\n !rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n currentDate = dateProfile.currentRange.start;\n }\n let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);\n let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);\n let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading\n let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?\n (state.renderableEventStore || eventStore) : // try from previous state\n eventStore;\n let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext); // will memoize obj\n let eventUiBySource = this.buildEventUiBySource(eventSources);\n let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);\n let newState = {\n dynamicOptionOverrides,\n currentViewType,\n currentDate,\n dateProfile,\n eventSources,\n eventStore,\n renderableEventStore,\n selectionConfig,\n eventUiBases,\n businessHours: this.parseContextBusinessHours(calendarContext),\n dateSelection: reduceDateSelection(state.dateSelection, action),\n eventSelection: reduceSelectedEvent(state.eventSelection, action),\n eventDrag: reduceEventDrag(state.eventDrag, action),\n eventResize: reduceEventResize(state.eventResize, action),\n };\n let contextAndState = Object.assign(Object.assign({}, calendarContext), newState);\n for (let reducer of optionsData.pluginHooks.reducers) {\n Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value\n }\n let wasLoading = computeIsLoading(state, calendarContext);\n let isLoading = computeIsLoading(newState, calendarContext);\n // TODO: use propSetHandlers in plugin system\n if (!wasLoading && isLoading) {\n emitter.trigger('loading', true);\n }\n else if (wasLoading && !isLoading) {\n emitter.trigger('loading', false);\n }\n this.state = newState;\n if (props.onAction) {\n props.onAction(action);\n }\n }\n updateData() {\n let { props, state } = this;\n let oldData = this.data;\n let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);\n let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);\n let data = this.data = Object.assign(Object.assign(Object.assign({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);\n let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;\n let oldCalendarOptions = oldData && oldData.calendarOptions;\n let newCalendarOptions = optionsData.calendarOptions;\n if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {\n if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {\n // hack\n state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);\n state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);\n state.renderableEventStore = data.renderableEventStore = rezoneEventStoreDates(data.renderableEventStore, oldData.dateEnv, data.dateEnv);\n }\n for (let optionName in changeHandlers) {\n if (this.optionsForHandling.indexOf(optionName) !== -1 ||\n oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {\n changeHandlers[optionName](newCalendarOptions[optionName], data);\n }\n }\n }\n this.optionsForHandling = [];\n if (props.onData) {\n props.onData(data);\n }\n }\n computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {\n // TODO: blacklist options that are handled by optionChangeHandlers\n if (!this.optionsForRefining.length &&\n optionOverrides === this.stableOptionOverrides &&\n dynamicOptionOverrides === this.stableDynamicOptionOverrides) {\n return this.stableCalendarOptionsData;\n }\n let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);\n warnUnknownOptions(extra);\n let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);\n let viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);\n let theme = this.buildTheme(refinedOptions, pluginHooks);\n let toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);\n return this.stableCalendarOptionsData = {\n calendarOptions: refinedOptions,\n pluginHooks,\n dateEnv,\n viewSpecs,\n theme,\n toolbarConfig,\n localeDefaults,\n availableRawLocales: availableLocaleData.map,\n };\n }\n // always called from behind a memoizer\n processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {\n let { locales, locale } = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n optionOverrides,\n dynamicOptionOverrides,\n ]);\n let availableLocaleData = this.organizeRawLocales(locales);\n let availableRawLocales = availableLocaleData.map;\n let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;\n let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);\n let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n let extra = {};\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n localeDefaults,\n optionOverrides,\n dynamicOptionOverrides,\n ]);\n let refined = {};\n let currentRaw = this.currentCalendarOptionsInput;\n let currentRefined = this.currentCalendarOptionsRefined;\n let anyChanges = false;\n for (let optionName in raw) {\n if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || (COMPLEX_OPTION_COMPARATORS[optionName] &&\n (optionName in currentRaw) &&\n COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])))) {\n refined[optionName] = currentRefined[optionName];\n }\n else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName]);\n anyChanges = true;\n }\n else {\n extra[optionName] = currentRaw[optionName];\n }\n }\n if (anyChanges) {\n this.currentCalendarOptionsInput = raw;\n this.currentCalendarOptionsRefined = refined;\n this.stableOptionOverrides = optionOverrides;\n this.stableDynamicOptionOverrides = dynamicOptionOverrides;\n }\n this.optionsForHandling.push(...this.optionsForRefining);\n this.optionsForRefining = [];\n return {\n rawOptions: this.currentCalendarOptionsInput,\n refinedOptions: this.currentCalendarOptionsRefined,\n pluginHooks,\n availableLocaleData,\n localeDefaults,\n extra,\n };\n }\n _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {\n let viewSpec = optionsData.viewSpecs[viewType];\n if (!viewSpec) {\n throw new Error(`viewType \"${viewType}\" is not available. Please make sure you've loaded all neccessary plugins`);\n }\n let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);\n warnUnknownOptions(extra);\n let dateProfileGenerator = this.buildDateProfileGenerator({\n dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,\n duration: viewSpec.duration,\n durationUnit: viewSpec.durationUnit,\n usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,\n dateEnv: optionsData.dateEnv,\n calendarApi: this.props.calendarApi,\n slotMinTime: refinedOptions.slotMinTime,\n slotMaxTime: refinedOptions.slotMaxTime,\n showNonCurrentDates: refinedOptions.showNonCurrentDates,\n dayCount: refinedOptions.dayCount,\n dateAlignment: refinedOptions.dateAlignment,\n dateIncrement: refinedOptions.dateIncrement,\n hiddenDays: refinedOptions.hiddenDays,\n weekends: refinedOptions.weekends,\n nowInput: refinedOptions.now,\n validRangeInput: refinedOptions.validRange,\n visibleRangeInput: refinedOptions.visibleRange,\n fixedWeekCount: refinedOptions.fixedWeekCount,\n });\n let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);\n return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };\n }\n processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {\n let raw = mergeRawOptions([\n BASE_OPTION_DEFAULTS,\n viewSpec.optionDefaults,\n localeDefaults,\n optionOverrides,\n viewSpec.optionOverrides,\n dynamicOptionOverrides,\n ]);\n let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n let refined = {};\n let currentRaw = this.currentViewOptionsInput;\n let currentRefined = this.currentViewOptionsRefined;\n let anyChanges = false;\n let extra = {};\n for (let optionName in raw) {\n if (raw[optionName] === currentRaw[optionName] ||\n (COMPLEX_OPTION_COMPARATORS[optionName] &&\n COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {\n refined[optionName] = currentRefined[optionName];\n }\n else {\n if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||\n (COMPLEX_OPTION_COMPARATORS[optionName] &&\n COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {\n if (optionName in this.currentCalendarOptionsRefined) { // might be an \"extra\" prop\n refined[optionName] = this.currentCalendarOptionsRefined[optionName];\n }\n }\n else if (refiners[optionName]) {\n refined[optionName] = refiners[optionName](raw[optionName]);\n }\n else {\n extra[optionName] = raw[optionName];\n }\n anyChanges = true;\n }\n }\n if (anyChanges) {\n this.currentViewOptionsInput = raw;\n this.currentViewOptionsRefined = refined;\n }\n return {\n rawOptions: this.currentViewOptionsInput,\n refinedOptions: this.currentViewOptionsRefined,\n extra,\n };\n }\n}\nfunction buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {\n let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);\n return new DateEnv({\n calendarSystem: 'gregory',\n timeZone,\n namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,\n locale,\n weekNumberCalculation,\n firstDay,\n weekText,\n cmdFormatter: pluginHooks.cmdFormatter,\n defaultSeparator,\n });\n}\nfunction buildTheme(options, pluginHooks) {\n let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;\n return new ThemeClass(options);\n}\nfunction buildDateProfileGenerator(props) {\n let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;\n return new DateProfileGeneratorClass(props);\n}\nfunction buildViewApi(type, getCurrentData, dateEnv) {\n return new ViewImpl(type, getCurrentData, dateEnv);\n}\nfunction buildEventUiBySource(eventSources) {\n return mapHash(eventSources, (eventSource) => eventSource.ui);\n}\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n let eventUiBases = { '': eventUiSingleBase };\n for (let defId in eventDefs) {\n let def = eventDefs[defId];\n if (def.sourceId && eventUiBySource[def.sourceId]) {\n eventUiBases[defId] = eventUiBySource[def.sourceId];\n }\n }\n return eventUiBases;\n}\nfunction buildViewUiProps(calendarContext) {\n let { options } = calendarContext;\n return {\n eventUiSingleBase: createEventUi({\n display: options.eventDisplay,\n editable: options.editable,\n startEditable: options.eventStartEditable,\n durationEditable: options.eventDurationEditable,\n constraint: options.eventConstraint,\n overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,\n allow: options.eventAllow,\n backgroundColor: options.eventBackgroundColor,\n borderColor: options.eventBorderColor,\n textColor: options.eventTextColor,\n color: options.eventColor,\n // classNames: options.eventClassNames // render hook will handle this\n }, calendarContext),\n selectionConfig: createEventUi({\n constraint: options.selectConstraint,\n overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,\n allow: options.selectAllow,\n }, calendarContext),\n };\n}\nfunction computeIsLoading(state, context) {\n for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {\n if (isLoadingFunc(state)) {\n return true;\n }\n }\n return false;\n}\nfunction parseContextBusinessHours(calendarContext) {\n return parseBusinessHours(calendarContext.options.businessHours, calendarContext);\n}\nfunction warnUnknownOptions(options, viewName) {\n for (let optionName in options) {\n console.warn(`Unknown option '${optionName}'` +\n (viewName ? ` for view '${viewName}'` : ''));\n }\n}\n\nclass ToolbarSection extends BaseComponent {\n render() {\n let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));\n return createElement('div', { className: 'fc-toolbar-chunk' }, ...children);\n }\n renderWidgetGroup(widgetGroup) {\n let { props } = this;\n let { theme } = this.context;\n let children = [];\n let isOnlyButtons = true;\n for (let widget of widgetGroup) {\n let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;\n if (buttonName === 'title') {\n isOnlyButtons = false;\n children.push(createElement(\"h2\", { className: \"fc-toolbar-title\", id: props.titleId }, props.title));\n }\n else {\n let isPressed = buttonName === props.activeButton;\n let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||\n (!props.isPrevEnabled && buttonName === 'prev') ||\n (!props.isNextEnabled && buttonName === 'next');\n let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')];\n if (isPressed) {\n buttonClasses.push(theme.getClass('buttonActive'));\n }\n children.push(createElement(\"button\", { type: \"button\", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, \"aria-pressed\": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? createElement(\"span\", { className: buttonIcon, role: \"img\" }) : '')));\n }\n }\n if (children.length > 1) {\n let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';\n return createElement('div', { className: groupClassName }, ...children);\n }\n return children[0];\n }\n}\n\nclass Toolbar extends BaseComponent {\n render() {\n let { model, extraClassName } = this.props;\n let forceLtr = false;\n let startContent;\n let endContent;\n let sectionWidgets = model.sectionWidgets;\n let centerContent = sectionWidgets.center;\n if (sectionWidgets.left) {\n forceLtr = true;\n startContent = sectionWidgets.left;\n }\n else {\n startContent = sectionWidgets.start;\n }\n if (sectionWidgets.right) {\n forceLtr = true;\n endContent = sectionWidgets.right;\n }\n else {\n endContent = sectionWidgets.end;\n }\n let classNames = [\n extraClassName || '',\n 'fc-toolbar',\n forceLtr ? 'fc-toolbar-ltr' : '',\n ];\n return (createElement(\"div\", { className: classNames.join(' ') },\n this.renderSection('start', startContent || []),\n this.renderSection('center', centerContent || []),\n this.renderSection('end', endContent || [])));\n }\n renderSection(key, widgetGroups) {\n let { props } = this;\n return (createElement(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));\n }\n}\n\nclass ViewHarness extends BaseComponent {\n constructor() {\n super(...arguments);\n this.state = {\n availableWidth: null,\n };\n this.handleEl = (el) => {\n this.el = el;\n setRef(this.props.elRef, el);\n this.updateAvailableWidth();\n };\n this.handleResize = () => {\n this.updateAvailableWidth();\n };\n }\n render() {\n let { props, state } = this;\n let { aspectRatio } = props;\n let classNames = [\n 'fc-view-harness',\n (aspectRatio || props.liquid || props.height)\n ? 'fc-view-harness-active' // harness controls the height\n : 'fc-view-harness-passive', // let the view do the height\n ];\n let height = '';\n let paddingBottom = '';\n if (aspectRatio) {\n if (state.availableWidth !== null) {\n height = state.availableWidth / aspectRatio;\n }\n else {\n // while waiting to know availableWidth, we can't set height to *zero*\n // because will cause lots of unnecessary scrollbars within scrollgrid.\n // BETTER: don't start rendering ANYTHING yet until we know container width\n // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)\n paddingBottom = `${(1 / aspectRatio) * 100}%`;\n }\n }\n else {\n height = props.height || '';\n }\n return (createElement(\"div\", { \"aria-labelledby\": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));\n }\n componentDidMount() {\n this.context.addResizeHandler(this.handleResize);\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize);\n }\n updateAvailableWidth() {\n if (this.el && // needed. but why?\n this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth\n ) {\n this.setState({ availableWidth: this.el.offsetWidth });\n }\n }\n}\n\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\nclass EventClicking extends Interaction {\n constructor(settings) {\n super(settings);\n this.handleSegClick = (ev, segEl) => {\n let { component } = this;\n let { context } = component;\n let seg = getElSeg(segEl);\n if (seg && // might be the <div> surrounding the more link\n component.isValidSegDownEl(ev.target)) {\n // our way to simulate a link click for elements that can't be <a> tags\n // grab before trigger fired in case trigger trashes DOM thru rerendering\n let hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');\n let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n context.emitter.trigger('eventClick', {\n el: segEl,\n event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: context.viewApi,\n });\n if (url && !ev.defaultPrevented) {\n window.location.href = url;\n }\n }\n };\n this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events\n this.handleSegClick);\n }\n}\n\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\nclass EventHovering extends Interaction {\n constructor(settings) {\n super(settings);\n // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n this.handleEventElRemove = (el) => {\n if (el === this.currentSegEl) {\n this.handleSegLeave(null, this.currentSegEl);\n }\n };\n this.handleSegEnter = (ev, segEl) => {\n if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper\n this.currentSegEl = segEl;\n this.triggerEvent('eventMouseEnter', ev, segEl);\n }\n };\n this.handleSegLeave = (ev, segEl) => {\n if (this.currentSegEl) {\n this.currentSegEl = null;\n this.triggerEvent('eventMouseLeave', ev, segEl);\n }\n };\n this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events\n this.handleSegEnter, this.handleSegLeave);\n }\n destroy() {\n this.removeHoverListeners();\n }\n triggerEvent(publicEvName, ev, segEl) {\n let { component } = this;\n let { context } = component;\n let seg = getElSeg(segEl);\n if (!ev || component.isValidSegDownEl(ev.target)) {\n context.emitter.trigger(publicEvName, {\n el: segEl,\n event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),\n jsEvent: ev,\n view: context.viewApi,\n });\n }\n }\n}\n\nclass CalendarContent extends PureComponent {\n constructor() {\n super(...arguments);\n this.buildViewContext = memoize(buildViewContext);\n this.buildViewPropTransformers = memoize(buildViewPropTransformers);\n this.buildToolbarProps = memoize(buildToolbarProps);\n this.headerRef = createRef();\n this.footerRef = createRef();\n this.interactionsStore = {};\n // eslint-disable-next-line\n this.state = {\n viewLabelId: getUniqueDomId(),\n };\n // Component Registration\n // -----------------------------------------------------------------------------------------------------------------\n this.registerInteractiveComponent = (component, settingsInput) => {\n let settings = parseInteractionSettings(component, settingsInput);\n let DEFAULT_INTERACTIONS = [\n EventClicking,\n EventHovering,\n ];\n let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);\n let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));\n this.interactionsStore[component.uid] = interactions;\n interactionSettingsStore[component.uid] = settings;\n };\n this.unregisterInteractiveComponent = (component) => {\n let listeners = this.interactionsStore[component.uid];\n if (listeners) {\n for (let listener of listeners) {\n listener.destroy();\n }\n delete this.interactionsStore[component.uid];\n }\n delete interactionSettingsStore[component.uid];\n };\n // Resizing\n // -----------------------------------------------------------------------------------------------------------------\n this.resizeRunner = new DelayedRunner(() => {\n this.props.emitter.trigger('_resize', true); // should window resizes be considered \"forced\" ?\n this.props.emitter.trigger('windowResize', { view: this.props.viewApi });\n });\n this.handleWindowResize = (ev) => {\n let { options } = this.props;\n if (options.handleWindowResize &&\n ev.target === window // avoid jqui events\n ) {\n this.resizeRunner.request(options.windowResizeDelay);\n }\n };\n }\n /*\n renders INSIDE of an outer div\n */\n render() {\n let { props } = this;\n let { toolbarConfig, options } = props;\n let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????\n props.viewTitle);\n let viewVGrow = false;\n let viewHeight = '';\n let viewAspectRatio;\n if (props.isHeightAuto || props.forPrint) {\n viewHeight = '';\n }\n else if (options.height != null) {\n viewVGrow = true;\n }\n else if (options.contentHeight != null) {\n viewHeight = options.contentHeight;\n }\n else {\n viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall\n }\n let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);\n let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)\n ? this.state.viewLabelId\n : undefined;\n return (createElement(ViewContextType.Provider, { value: viewContext },\n toolbarConfig.header && (createElement(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: \"fc-header-toolbar\", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),\n createElement(ViewHarness, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },\n this.renderView(props),\n this.buildAppendContent()),\n toolbarConfig.footer && (createElement(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: \"fc-footer-toolbar\", model: toolbarConfig.footer, titleId: \"\" }, toolbarProps)))));\n }\n componentDidMount() {\n let { props } = this;\n this.calendarInteractions = props.pluginHooks.calendarInteractions\n .map((CalendarInteractionClass) => new CalendarInteractionClass(props));\n window.addEventListener('resize', this.handleWindowResize);\n let { propSetHandlers } = props.pluginHooks;\n for (let propName in propSetHandlers) {\n propSetHandlers[propName](props[propName], props);\n }\n }\n componentDidUpdate(prevProps) {\n let { props } = this;\n let { propSetHandlers } = props.pluginHooks;\n for (let propName in propSetHandlers) {\n if (props[propName] !== prevProps[propName]) {\n propSetHandlers[propName](props[propName], props);\n }\n }\n }\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleWindowResize);\n this.resizeRunner.clear();\n for (let interaction of this.calendarInteractions) {\n interaction.destroy();\n }\n this.props.emitter.trigger('_unmount');\n }\n buildAppendContent() {\n let { props } = this;\n let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));\n return createElement(Fragment, {}, ...children);\n }\n renderView(props) {\n let { pluginHooks } = props;\n let { viewSpec } = props;\n let viewProps = {\n dateProfile: props.dateProfile,\n businessHours: props.businessHours,\n eventStore: props.renderableEventStore,\n eventUiBases: props.eventUiBases,\n dateSelection: props.dateSelection,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize,\n isHeightAuto: props.isHeightAuto,\n forPrint: props.forPrint,\n };\n let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);\n for (let transformer of transformers) {\n Object.assign(viewProps, transformer.transform(viewProps, props));\n }\n let ViewComponent = viewSpec.component;\n return (createElement(ViewComponent, Object.assign({}, viewProps)));\n }\n}\nfunction buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {\n // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid\n let todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason\n let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);\n let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);\n return {\n title,\n activeButton: viewSpec.type,\n navUnit: viewSpec.singleUnit,\n isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n isPrevEnabled: prevInfo.isValid,\n isNextEnabled: nextInfo.isValid,\n };\n}\n// Plugin\n// -----------------------------------------------------------------------------------------------------------------\nfunction buildViewPropTransformers(theClasses) {\n return theClasses.map((TheClass) => new TheClass());\n}\n\nclass Calendar extends CalendarImpl {\n constructor(el, optionOverrides = {}) {\n super();\n this.isRendering = false;\n this.isRendered = false;\n this.currentClassNames = [];\n this.customContentRenderId = 0;\n this.handleAction = (action) => {\n // actions we know we want to render immediately\n switch (action.type) {\n case 'SET_EVENT_DRAG':\n case 'SET_EVENT_RESIZE':\n this.renderRunner.tryDrain();\n }\n };\n this.handleData = (data) => {\n this.currentData = data;\n this.renderRunner.request(data.calendarOptions.rerenderDelay);\n };\n this.handleRenderRequest = () => {\n if (this.isRendering) {\n this.isRendered = true;\n let { currentData } = this;\n flushSync(() => {\n render(createElement(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {\n this.setClassNames(classNames);\n this.setHeight(height);\n return (createElement(RenderId.Provider, { value: this.customContentRenderId },\n createElement(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));\n }), this.el);\n });\n }\n else if (this.isRendered) {\n this.isRendered = false;\n render(null, this.el);\n this.setClassNames([]);\n this.setHeight('');\n }\n };\n ensureElHasStyles(el);\n this.el = el;\n this.renderRunner = new DelayedRunner(this.handleRenderRequest);\n new CalendarDataManager({\n optionOverrides,\n calendarApi: this,\n onAction: this.handleAction,\n onData: this.handleData,\n });\n }\n render() {\n let wasRendering = this.isRendering;\n if (!wasRendering) {\n this.isRendering = true;\n }\n else {\n this.customContentRenderId += 1;\n }\n this.renderRunner.request();\n if (wasRendering) {\n this.updateSize();\n }\n }\n destroy() {\n if (this.isRendering) {\n this.isRendering = false;\n this.renderRunner.request();\n }\n }\n updateSize() {\n flushSync(() => {\n super.updateSize();\n });\n }\n batchRendering(func) {\n this.renderRunner.pause('batchRendering');\n func();\n this.renderRunner.resume('batchRendering');\n }\n pauseRendering() {\n this.renderRunner.pause('pauseRendering');\n }\n resumeRendering() {\n this.renderRunner.resume('pauseRendering', true);\n }\n resetOptions(optionOverrides, changedOptionNames) {\n this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);\n }\n setClassNames(classNames) {\n if (!isArraysEqual(classNames, this.currentClassNames)) {\n let { classList } = this.el;\n for (let className of this.currentClassNames) {\n classList.remove(className);\n }\n for (let className of classNames) {\n classList.add(className);\n }\n this.currentClassNames = classNames;\n }\n }\n setHeight(height) {\n applyStyleProp(this.el, 'height', height);\n }\n}\n\nfunction formatDate(dateInput, options = {}) {\n let dateEnv = buildDateEnv(options);\n let formatter = createFormatter(options);\n let dateMeta = dateEnv.createMarkerMeta(dateInput);\n if (!dateMeta) { // TODO: warning?\n return '';\n }\n return dateEnv.format(dateMeta.marker, formatter, {\n forcedTzo: dateMeta.forcedTzo,\n });\n}\nfunction formatRange(startInput, endInput, options) {\n let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object\n let formatter = createFormatter(options);\n let startMeta = dateEnv.createMarkerMeta(startInput);\n let endMeta = dateEnv.createMarkerMeta(endInput);\n if (!startMeta || !endMeta) { // TODO: warning?\n return '';\n }\n return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n forcedStartTzo: startMeta.forcedTzo,\n forcedEndTzo: endMeta.forcedTzo,\n isEndExclusive: options.isEndExclusive,\n defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator,\n });\n}\n// TODO: more DRY and optimized\nfunction buildDateEnv(settings) {\n let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n return new DateEnv(Object.assign(Object.assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));\n}\n\n// HELPERS\n/*\nif nextDayThreshold is specified, slicing is done in an all-day fashion.\nyou can get nextDayThreshold from context.nextDayThreshold\n*/\nfunction sliceEvents(props, allDay) {\n return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;\n}\n\nconst version = '6.1.11';\n\nexport { Calendar, createPlugin, formatDate, formatRange, globalLocales, globalPlugins, sliceEvents, version };\n", "import { DateComponent, getStickyHeaderDates, ViewContainer, SimpleScrollGrid, getStickyFooterScrollbar, renderScrollShim, createFormatter, BaseComponent, StandardEvent, buildSegTimeText, EventContainer, getSegAnchorAttrs, memoize, MoreLinkContainer, getSegMeta, getUniqueDomId, setRef, DayCellContainer, WeekNumberContainer, buildNavLinkAttrs, hasCustomDayCellContent, addMs, intersectRanges, addDays, SegHierarchy, buildEntryKey, intersectSpans, RefMap, sortEventSegs, isPropsEqual, buildEventRangeKey, BgEvent, renderFill, PositionCache, NowTimer, formatIsoMonthStr, formatDayString, Slicer, DayHeader, DaySeriesModel, DayTableModel, DateProfileGenerator, addWeeks, diffWeeks, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createRef, createElement, Fragment } from '@fullcalendar/core/preact.js';\n\n/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a Table subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\nclass TableView extends DateComponent {\n constructor() {\n super(...arguments);\n this.headerElRef = createRef();\n }\n renderSimpleLayout(headerRowContent, bodyContent) {\n let { props, context } = this;\n let sections = [];\n let stickyHeaderDates = getStickyHeaderDates(context.options);\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunk: {\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n },\n });\n }\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n chunk: { content: bodyContent },\n });\n return (createElement(ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },\n createElement(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [] /* TODO: make optional? */, sections: sections })));\n }\n renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {\n let ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n if (!ScrollGrid) {\n throw new Error('No ScrollGrid implementation');\n }\n let { props, context } = this;\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);\n let sections = [];\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunks: [{\n key: 'main',\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n }],\n });\n }\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n chunks: [{\n key: 'main',\n content: bodyContent,\n }],\n });\n if (stickyFooterScrollbar) {\n sections.push({\n type: 'footer',\n key: 'footer',\n isSticky: true,\n chunks: [{\n key: 'main',\n content: renderScrollShim,\n }],\n });\n }\n return (createElement(ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },\n createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections })));\n }\n}\n\nfunction splitSegsByRow(segs, rowCnt) {\n let byRow = [];\n for (let i = 0; i < rowCnt; i += 1) {\n byRow[i] = [];\n }\n for (let seg of segs) {\n byRow[seg.row].push(seg);\n }\n return byRow;\n}\nfunction splitSegsByFirstCol(segs, colCnt) {\n let byCol = [];\n for (let i = 0; i < colCnt; i += 1) {\n byCol[i] = [];\n }\n for (let seg of segs) {\n byCol[seg.firstCol].push(seg);\n }\n return byCol;\n}\nfunction splitInteractionByRow(ui, rowCnt) {\n let byRow = [];\n if (!ui) {\n for (let i = 0; i < rowCnt; i += 1) {\n byRow[i] = null;\n }\n }\n else {\n for (let i = 0; i < rowCnt; i += 1) {\n byRow[i] = {\n affectedInstances: ui.affectedInstances,\n isEvent: ui.isEvent,\n segs: [],\n };\n }\n for (let seg of ui.segs) {\n byRow[seg.row].segs.push(seg);\n }\n }\n return byRow;\n}\n\nconst DEFAULT_TABLE_EVENT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow',\n});\nfunction hasListItemDisplay(seg) {\n let { display } = seg.eventRange.ui;\n return display === 'list-item' || (display === 'auto' &&\n !seg.eventRange.def.allDay &&\n seg.firstCol === seg.lastCol && // can't be multi-day\n seg.isStart && // \"\n seg.isEnd // \"\n );\n}\n\nclass TableBlockEvent extends BaseComponent {\n render() {\n let { props } = this;\n return (createElement(StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));\n }\n}\n\nclass TableListItemEvent extends BaseComponent {\n render() {\n let { props, context } = this;\n let { options } = context;\n let { seg } = props;\n let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;\n let timeText = buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);\n return (createElement(EventContainer, Object.assign({}, props, { elTag: \"a\", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));\n }\n}\nfunction renderInnerContent(renderProps) {\n return (createElement(Fragment, null,\n createElement(\"div\", { className: \"fc-daygrid-event-dot\", style: { borderColor: renderProps.borderColor || renderProps.backgroundColor } }),\n renderProps.timeText && (createElement(\"div\", { className: \"fc-event-time\" }, renderProps.timeText)),\n createElement(\"div\", { className: \"fc-event-title\" }, renderProps.event.title || createElement(Fragment, null, \"\\u00A0\"))));\n}\n\nclass TableCellMoreLink extends BaseComponent {\n constructor() {\n super(...arguments);\n this.compileSegs = memoize(compileSegs);\n }\n render() {\n let { props } = this;\n let { allSegs, invisibleSegs } = this.compileSegs(props.singlePlacements);\n return (createElement(MoreLinkContainer, { elClasses: ['fc-daygrid-more-link'], dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs: allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: () => {\n let isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) ||\n (props.eventResize ? props.eventResize.affectedInstances : null) ||\n {};\n return (createElement(Fragment, null, allSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId;\n return (createElement(\"div\", { className: \"fc-daygrid-event-harness\", key: instanceId, style: {\n visibility: isForcedInvisible[instanceId] ? 'hidden' : '',\n } }, hasListItemDisplay(seg) ? (createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange)))) : (createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))))));\n })));\n } }));\n }\n}\nfunction compileSegs(singlePlacements) {\n let allSegs = [];\n let invisibleSegs = [];\n for (let placement of singlePlacements) {\n allSegs.push(placement.seg);\n if (!placement.isVisible) {\n invisibleSegs.push(placement.seg);\n }\n }\n return { allSegs, invisibleSegs };\n}\n\nconst DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: 'narrow' });\nclass TableCell extends DateComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n this.state = {\n dayNumberId: getUniqueDomId(),\n };\n this.handleRootEl = (el) => {\n setRef(this.rootElRef, el);\n setRef(this.props.elRef, el);\n };\n }\n render() {\n let { context, props, state, rootElRef } = this;\n let { options, dateEnv } = context;\n let { date, dateProfile } = props;\n // TODO: memoize this?\n const isMonthStart = props.showDayNumber &&\n shouldDisplayMonthStart(date, dateProfile.currentRange, dateEnv);\n return (createElement(DayCellContainer, { elTag: \"td\", elRef: this.handleRootEl, elClasses: [\n 'fc-daygrid-day',\n ...(props.extraClassNames || []),\n ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, isMonthStart: isMonthStart, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (createElement(\"div\", { ref: props.innerElRef, className: \"fc-daygrid-day-frame fc-scrollgrid-sync-inner\", style: { minHeight: props.minHeight } },\n props.showWeekNumber && (createElement(WeekNumberContainer, { elTag: \"a\", elClasses: ['fc-daygrid-week-number'], elAttrs: buildNavLinkAttrs(context, date, 'week'), date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })),\n !renderProps.isDisabled &&\n (props.showDayNumber || hasCustomDayCellContent(options) || props.forceDayTop) ? (createElement(\"div\", { className: \"fc-daygrid-day-top\" },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-daygrid-day-number',\n isMonthStart && 'fc-daygrid-month-start',\n ], elAttrs: Object.assign(Object.assign({}, buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))) : props.showDayNumber ? (\n // for creating correct amount of space (see issue #7162)\n createElement(\"div\", { className: \"fc-daygrid-day-top\", style: { visibility: 'hidden' } },\n createElement(\"a\", { className: \"fc-daygrid-day-number\" }, \"\\u00A0\"))) : undefined,\n createElement(\"div\", { className: \"fc-daygrid-day-events\", ref: props.fgContentElRef },\n props.fgContent,\n createElement(\"div\", { className: \"fc-daygrid-day-bottom\", style: { marginTop: props.moreMarginTop } },\n createElement(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange }))),\n createElement(\"div\", { className: \"fc-daygrid-day-bg\" }, props.bgContent)))));\n }\n}\nfunction renderTopInner(props) {\n return props.dayNumberText || createElement(Fragment, null, \"\\u00A0\");\n}\nfunction shouldDisplayMonthStart(date, currentRange, dateEnv) {\n const { start: currentStart, end: currentEnd } = currentRange;\n const currentEndIncl = addMs(currentEnd, -1);\n const currentFirstYear = dateEnv.getYear(currentStart);\n const currentFirstMonth = dateEnv.getMonth(currentStart);\n const currentLastYear = dateEnv.getYear(currentEndIncl);\n const currentLastMonth = dateEnv.getMonth(currentEndIncl);\n // spans more than one month?\n return !(currentFirstYear === currentLastYear && currentFirstMonth === currentLastMonth) &&\n Boolean(\n // first date in current view?\n date.valueOf() === currentStart.valueOf() ||\n // a month-start that's within the current range?\n (dateEnv.getDay(date) === 1 && date.valueOf() < currentEnd.valueOf()));\n}\n\nfunction generateSegKey(seg) {\n return seg.eventRange.instance.instanceId + ':' + seg.firstCol;\n}\nfunction generateSegUid(seg) {\n return generateSegKey(seg) + ':' + seg.lastCol;\n}\nfunction computeFgSegPlacement(segs, // assumed already sorted\ndayMaxEvents, dayMaxEventRows, strictOrder, segHeights, maxContentHeight, cells) {\n let hierarchy = new DayGridSegHierarchy((segEntry) => {\n // TODO: more DRY with generateSegUid\n let segUid = segs[segEntry.index].eventRange.instance.instanceId +\n ':' + segEntry.span.start +\n ':' + (segEntry.span.end - 1);\n // if no thickness known, assume 1 (if 0, so small it always fits)\n return segHeights[segUid] || 1;\n });\n hierarchy.allowReslicing = true;\n hierarchy.strictOrder = strictOrder;\n if (dayMaxEvents === true || dayMaxEventRows === true) {\n hierarchy.maxCoord = maxContentHeight;\n hierarchy.hiddenConsumes = true;\n }\n else if (typeof dayMaxEvents === 'number') {\n hierarchy.maxStackCnt = dayMaxEvents;\n }\n else if (typeof dayMaxEventRows === 'number') {\n hierarchy.maxStackCnt = dayMaxEventRows;\n hierarchy.hiddenConsumes = true;\n }\n // create segInputs only for segs with known heights\n let segInputs = [];\n let unknownHeightSegs = [];\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i];\n let segUid = generateSegUid(seg);\n let eventHeight = segHeights[segUid];\n if (eventHeight != null) {\n segInputs.push({\n index: i,\n span: {\n start: seg.firstCol,\n end: seg.lastCol + 1,\n },\n });\n }\n else {\n unknownHeightSegs.push(seg);\n }\n }\n let hiddenEntries = hierarchy.addSegs(segInputs);\n let segRects = hierarchy.toRects();\n let { singleColPlacements, multiColPlacements, leftoverMargins } = placeRects(segRects, segs, cells);\n let moreCnts = [];\n let moreMarginTops = [];\n // add segs with unknown heights\n for (let seg of unknownHeightSegs) {\n multiColPlacements[seg.firstCol].push({\n seg,\n isVisible: false,\n isAbsolute: true,\n absoluteTop: 0,\n marginTop: 0,\n });\n for (let col = seg.firstCol; col <= seg.lastCol; col += 1) {\n singleColPlacements[col].push({\n seg: resliceSeg(seg, col, col + 1, cells),\n isVisible: false,\n isAbsolute: false,\n absoluteTop: 0,\n marginTop: 0,\n });\n }\n }\n // add the hidden entries\n for (let col = 0; col < cells.length; col += 1) {\n moreCnts.push(0);\n }\n for (let hiddenEntry of hiddenEntries) {\n let seg = segs[hiddenEntry.index];\n let hiddenSpan = hiddenEntry.span;\n multiColPlacements[hiddenSpan.start].push({\n seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),\n isVisible: false,\n isAbsolute: true,\n absoluteTop: 0,\n marginTop: 0,\n });\n for (let col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {\n moreCnts[col] += 1;\n singleColPlacements[col].push({\n seg: resliceSeg(seg, col, col + 1, cells),\n isVisible: false,\n isAbsolute: false,\n absoluteTop: 0,\n marginTop: 0,\n });\n }\n }\n // deal with leftover margins\n for (let col = 0; col < cells.length; col += 1) {\n moreMarginTops.push(leftoverMargins[col]);\n }\n return { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops };\n}\n// rects ordered by top coord, then left\nfunction placeRects(allRects, segs, cells) {\n let rectsByEachCol = groupRectsByEachCol(allRects, cells.length);\n let singleColPlacements = [];\n let multiColPlacements = [];\n let leftoverMargins = [];\n for (let col = 0; col < cells.length; col += 1) {\n let rects = rectsByEachCol[col];\n // compute all static segs in singlePlacements\n let singlePlacements = [];\n let currentHeight = 0;\n let currentMarginTop = 0;\n for (let rect of rects) {\n let seg = segs[rect.index];\n singlePlacements.push({\n seg: resliceSeg(seg, col, col + 1, cells),\n isVisible: true,\n isAbsolute: false,\n absoluteTop: rect.levelCoord,\n marginTop: rect.levelCoord - currentHeight,\n });\n currentHeight = rect.levelCoord + rect.thickness;\n }\n // compute mixed static/absolute segs in multiPlacements\n let multiPlacements = [];\n currentHeight = 0;\n currentMarginTop = 0;\n for (let rect of rects) {\n let seg = segs[rect.index];\n let isAbsolute = rect.span.end - rect.span.start > 1; // multi-column?\n let isFirstCol = rect.span.start === col;\n currentMarginTop += rect.levelCoord - currentHeight; // amount of space since bottom of previous seg\n currentHeight = rect.levelCoord + rect.thickness; // height will now be bottom of current seg\n if (isAbsolute) {\n currentMarginTop += rect.thickness;\n if (isFirstCol) {\n multiPlacements.push({\n seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),\n isVisible: true,\n isAbsolute: true,\n absoluteTop: rect.levelCoord,\n marginTop: 0,\n });\n }\n }\n else if (isFirstCol) {\n multiPlacements.push({\n seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),\n isVisible: true,\n isAbsolute: false,\n absoluteTop: rect.levelCoord,\n marginTop: currentMarginTop, // claim the margin\n });\n currentMarginTop = 0;\n }\n }\n singleColPlacements.push(singlePlacements);\n multiColPlacements.push(multiPlacements);\n leftoverMargins.push(currentMarginTop);\n }\n return { singleColPlacements, multiColPlacements, leftoverMargins };\n}\nfunction groupRectsByEachCol(rects, colCnt) {\n let rectsByEachCol = [];\n for (let col = 0; col < colCnt; col += 1) {\n rectsByEachCol.push([]);\n }\n for (let rect of rects) {\n for (let col = rect.span.start; col < rect.span.end; col += 1) {\n rectsByEachCol[col].push(rect);\n }\n }\n return rectsByEachCol;\n}\nfunction resliceSeg(seg, spanStart, spanEnd, cells) {\n if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {\n return seg;\n }\n let eventRange = seg.eventRange;\n let origRange = eventRange.range;\n let slicedRange = intersectRanges(origRange, {\n start: cells[spanStart].date,\n end: addDays(cells[spanEnd - 1].date, 1),\n });\n return Object.assign(Object.assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {\n def: eventRange.def,\n ui: Object.assign(Object.assign({}, eventRange.ui), { durationEditable: false }),\n instance: eventRange.instance,\n range: slicedRange,\n }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });\n}\nclass DayGridSegHierarchy extends SegHierarchy {\n constructor() {\n super(...arguments);\n // config\n this.hiddenConsumes = false;\n // allows us to keep hidden entries in the hierarchy so they take up space\n this.forceHidden = {};\n }\n addSegs(segInputs) {\n const hiddenSegs = super.addSegs(segInputs);\n const { entriesByLevel } = this;\n const excludeHidden = (entry) => !this.forceHidden[buildEntryKey(entry)];\n // remove the forced-hidden segs\n for (let level = 0; level < entriesByLevel.length; level += 1) {\n entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);\n }\n return hiddenSegs;\n }\n handleInvalidInsertion(insertion, entry, hiddenEntries) {\n const { entriesByLevel, forceHidden } = this;\n const { touchingEntry, touchingLevel, touchingLateral } = insertion;\n // the entry that the new insertion is touching must be hidden\n if (this.hiddenConsumes && touchingEntry) {\n const touchingEntryId = buildEntryKey(touchingEntry);\n if (!forceHidden[touchingEntryId]) {\n if (this.allowReslicing) {\n // split up the touchingEntry, reinsert it\n const hiddenEntry = Object.assign(Object.assign({}, touchingEntry), { span: intersectSpans(touchingEntry.span, entry.span) });\n // reinsert the area that turned into a \"more\" link (so no other entries try to\n // occupy the space) but mark it forced-hidden\n const hiddenEntryId = buildEntryKey(hiddenEntry);\n forceHidden[hiddenEntryId] = true;\n entriesByLevel[touchingLevel][touchingLateral] = hiddenEntry;\n hiddenEntries.push(hiddenEntry);\n this.splitEntry(touchingEntry, entry, hiddenEntries);\n }\n else {\n forceHidden[touchingEntryId] = true;\n hiddenEntries.push(touchingEntry);\n }\n }\n }\n // will try to reslice...\n super.handleInvalidInsertion(insertion, entry, hiddenEntries);\n }\n}\n\nclass TableRow extends DateComponent {\n constructor() {\n super(...arguments);\n this.cellElRefs = new RefMap(); // the <td>\n this.frameElRefs = new RefMap(); // the fc-daygrid-day-frame\n this.fgElRefs = new RefMap(); // the fc-daygrid-day-events\n this.segHarnessRefs = new RefMap(); // indexed by \"instanceId:firstCol\"\n this.rootElRef = createRef();\n this.state = {\n framePositions: null,\n maxContentHeight: null,\n segHeights: {},\n };\n this.handleResize = (isForced) => {\n if (isForced) {\n this.updateSizing(true); // isExternal=true\n }\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let colCnt = props.cells.length;\n let businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);\n let bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);\n let highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);\n let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);\n let { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops } = computeFgSegPlacement(sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.segHeights, state.maxContentHeight, props.cells);\n let isForcedInvisible = // TODO: messy way to compute this\n (props.eventDrag && props.eventDrag.affectedInstances) ||\n (props.eventResize && props.eventResize.affectedInstances) ||\n {};\n return (createElement(\"tr\", { ref: this.rootElRef, role: \"row\" },\n props.renderIntro && props.renderIntro(),\n props.cells.map((cell, col) => {\n let normalFgNodes = this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);\n let mirrorFgNodes = this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);\n return (createElement(TableCell, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), innerElRef: this.frameElRefs.createRef(cell.key) /* FF <td> problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers /* even displaying weeknum for row, not necessarily day */, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys\n createElement(Fragment, null,\n createElement(Fragment, null, normalFgNodes),\n createElement(Fragment, null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys\n createElement(Fragment, null,\n this.renderFillSegs(highlightSegsByCol[col], 'highlight'),\n this.renderFillSegs(businessHoursByCol[col], 'non-business'),\n this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))), minHeight: props.cellMinHeight }));\n })));\n }\n componentDidMount() {\n this.updateSizing(true);\n this.context.addResizeHandler(this.handleResize);\n }\n componentDidUpdate(prevProps, prevState) {\n let currentProps = this.props;\n this.updateSizing(!isPropsEqual(prevProps, currentProps));\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize);\n }\n getHighlightSegs() {\n let { props } = this;\n if (props.eventDrag && props.eventDrag.segs.length) { // messy check\n return props.eventDrag.segs;\n }\n if (props.eventResize && props.eventResize.segs.length) { // messy check\n return props.eventResize.segs;\n }\n return props.dateSelectionSegs;\n }\n getMirrorSegs() {\n let { props } = this;\n if (props.eventResize && props.eventResize.segs.length) { // messy check\n return props.eventResize.segs;\n }\n return [];\n }\n renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {\n let { context } = this;\n let { eventSelection } = this.props;\n let { framePositions } = this.state;\n let defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1\n let isMirror = isDragging || isResizing || isDateSelecting;\n let nodes = [];\n if (framePositions) {\n for (let placement of segPlacements) {\n let { seg } = placement;\n let { instanceId } = seg.eventRange.instance;\n let isVisible = placement.isVisible && !isForcedInvisible[instanceId];\n let isAbsolute = placement.isAbsolute;\n let left = '';\n let right = '';\n if (isAbsolute) {\n if (context.isRtl) {\n right = 0;\n left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];\n }\n else {\n left = 0;\n right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];\n }\n }\n /*\n known bug: events that are force to be list-item but span multiple days still take up space in later columns\n todo: in print view, for multi-day events, don't display title within non-start/end segs\n */\n nodes.push(createElement(\"div\", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: generateSegKey(seg), ref: isMirror ? null : this.segHarnessRefs.createRef(generateSegUid(seg)), style: {\n visibility: isVisible ? '' : 'hidden',\n marginTop: isAbsolute ? '' : placement.marginTop,\n top: isAbsolute ? placement.absoluteTop : '',\n left,\n right,\n } }, hasListItemDisplay(seg) ? (createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange)))) : (createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange))))));\n }\n }\n return nodes;\n }\n renderFillSegs(segs, fillType) {\n let { isRtl } = this.context;\n let { todayRange } = this.props;\n let { framePositions } = this.state;\n let nodes = [];\n if (framePositions) {\n for (let seg of segs) {\n let leftRightCss = isRtl ? {\n right: 0,\n left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol],\n } : {\n left: 0,\n right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],\n };\n nodes.push(createElement(\"div\", { key: buildEventRangeKey(seg.eventRange), className: \"fc-daygrid-bg-harness\", style: leftRightCss }, fillType === 'bg-event' ?\n createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, todayRange))) :\n renderFill(fillType)));\n }\n }\n return createElement(Fragment, {}, ...nodes);\n }\n updateSizing(isExternalSizingChange) {\n let { props, state, frameElRefs } = this;\n if (!props.forPrint &&\n props.clientWidth !== null // positioning ready?\n ) {\n if (isExternalSizingChange) {\n let frameEls = props.cells.map((cell) => frameElRefs.currentMap[cell.key]);\n if (frameEls.length) {\n let originEl = this.rootElRef.current;\n let newPositionCache = new PositionCache(originEl, frameEls, true, // isHorizontal\n false);\n if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {\n this.setState({\n framePositions: new PositionCache(originEl, frameEls, true, // isHorizontal\n false),\n });\n }\n }\n }\n const oldSegHeights = this.state.segHeights;\n const newSegHeights = this.querySegHeights();\n const limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;\n this.safeSetState({\n // HACK to prevent oscillations of events being shown/hidden from max-event-rows\n // Essentially, once you compute an element's height, never null-out.\n // TODO: always display all events, as visibility:hidden?\n segHeights: Object.assign(Object.assign({}, oldSegHeights), newSegHeights),\n maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null,\n });\n }\n }\n querySegHeights() {\n let segElMap = this.segHarnessRefs.currentMap;\n let segHeights = {};\n // get the max height amongst instance segs\n for (let segUid in segElMap) {\n let height = Math.round(segElMap[segUid].getBoundingClientRect().height);\n segHeights[segUid] = Math.max(segHeights[segUid] || 0, height);\n }\n return segHeights;\n }\n computeMaxContentHeight() {\n let firstKey = this.props.cells[0].key;\n let cellEl = this.cellElRefs.currentMap[firstKey];\n let fcContainerEl = this.fgElRefs.currentMap[firstKey];\n return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;\n }\n getCellEls() {\n let elMap = this.cellElRefs.currentMap;\n return this.props.cells.map((cell) => elMap[cell.key]);\n }\n}\nTableRow.addStateEquality({\n segHeights: isPropsEqual,\n});\nfunction buildMirrorPlacements(mirrorSegs, colPlacements) {\n if (!mirrorSegs.length) {\n return [];\n }\n let topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?\n return mirrorSegs.map((seg) => ({\n seg,\n isVisible: true,\n isAbsolute: true,\n absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],\n marginTop: 0,\n }));\n}\nfunction buildAbsoluteTopHash(colPlacements) {\n let topsByInstanceId = {};\n for (let placements of colPlacements) {\n for (let placement of placements) {\n topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;\n }\n }\n return topsByInstanceId;\n}\n\nclass TableRows extends DateComponent {\n constructor() {\n super(...arguments);\n this.splitBusinessHourSegs = memoize(splitSegsByRow);\n this.splitBgEventSegs = memoize(splitSegsByRow);\n this.splitFgEventSegs = memoize(splitSegsByRow);\n this.splitDateSelectionSegs = memoize(splitSegsByRow);\n this.splitEventDrag = memoize(splitInteractionByRow);\n this.splitEventResize = memoize(splitInteractionByRow);\n this.rowRefs = new RefMap();\n }\n render() {\n let { props, context } = this;\n let rowCnt = props.cells.length;\n let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);\n let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);\n let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);\n let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);\n let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);\n let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);\n // for DayGrid view with many rows, force a min-height on cells so doesn't appear squished\n // choose 7 because a month view will have max 6 rows\n let cellMinHeight = (rowCnt >= 7 && props.clientWidth) ?\n props.clientWidth / context.options.aspectRatio / 6 :\n null;\n return (createElement(NowTimer, { unit: \"day\" }, (nowDate, todayRange) => (createElement(Fragment, null, props.cells.map((cells, row) => (createElement(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length\n ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */\n : row // in case there are no cells (like when resource view is loading)\n , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: props.dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, cellMinHeight: cellMinHeight, forPrint: props.forPrint })))))));\n }\n componentDidMount() {\n this.registerInteractiveComponent();\n }\n componentDidUpdate() {\n // for if started with zero cells\n this.registerInteractiveComponent();\n }\n registerInteractiveComponent() {\n if (!this.rootEl) {\n // HACK: need a daygrid wrapper parent to do positioning\n // NOTE: a daygrid resource view w/o resources can have zero cells\n const firstCellEl = this.rowRefs.currentMap[0].getCellEls()[0];\n const rootEl = firstCellEl ? firstCellEl.closest('.fc-daygrid-body') : null;\n if (rootEl) {\n this.rootEl = rootEl;\n this.context.registerInteractiveComponent(this, {\n el: rootEl,\n isHitComboAllowed: this.props.isHitComboAllowed,\n });\n }\n }\n }\n componentWillUnmount() {\n if (this.rootEl) {\n this.context.unregisterInteractiveComponent(this);\n this.rootEl = null;\n }\n }\n // Hit System\n // ----------------------------------------------------------------------------------------------------\n prepareHits() {\n this.rowPositions = new PositionCache(this.rootEl, this.rowRefs.collect().map((rowObj) => rowObj.getCellEls()[0]), // first cell el in each row. TODO: not optimal\n false, true);\n this.colPositions = new PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row\n true, // horizontal\n false);\n }\n queryHit(positionLeft, positionTop) {\n let { colPositions, rowPositions } = this;\n let col = colPositions.leftToIndex(positionLeft);\n let row = rowPositions.topToIndex(positionTop);\n if (row != null && col != null) {\n let cell = this.props.cells[row][col];\n return {\n dateProfile: this.props.dateProfile,\n dateSpan: Object.assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),\n dayEl: this.getCellEl(row, col),\n rect: {\n left: colPositions.lefts[col],\n right: colPositions.rights[col],\n top: rowPositions.tops[row],\n bottom: rowPositions.bottoms[row],\n },\n layer: 0,\n };\n }\n return null;\n }\n getCellEl(row, col) {\n return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal\n }\n getCellRange(row, col) {\n let start = this.props.cells[row][col].date;\n let end = addDays(start, 1);\n return { start, end };\n }\n}\nfunction isSegAllDay(seg) {\n return seg.eventRange.def.allDay;\n}\n\nclass Table extends DateComponent {\n constructor() {\n super(...arguments);\n this.elRef = createRef();\n this.needsScrollReset = false;\n }\n render() {\n let { props } = this;\n let { dayMaxEventRows, dayMaxEvents, expandRows } = props;\n let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;\n // if rows can't expand to fill fixed height, can't do balanced-height event limit\n // TODO: best place to normalize these options?\n if (limitViaBalanced && !expandRows) {\n limitViaBalanced = false;\n dayMaxEventRows = null;\n dayMaxEvents = null;\n }\n let classNames = [\n 'fc-daygrid-body',\n limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',\n expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others?\n ];\n return (createElement(\"div\", { ref: this.elRef, className: classNames.join(' '), style: {\n // these props are important to give this wrapper correct dimensions for interactions\n // TODO: if we set it here, can we avoid giving to inner tables?\n width: props.clientWidth,\n minWidth: props.tableMinWidth,\n } },\n createElement(\"table\", { role: \"presentation\", className: \"fc-scrollgrid-sync-table\", style: {\n width: props.clientWidth,\n minWidth: props.tableMinWidth,\n height: expandRows ? props.clientHeight : '',\n } },\n props.colGroupNode,\n createElement(\"tbody\", { role: \"presentation\" },\n createElement(TableRows, { dateProfile: props.dateProfile, cells: props.cells, renderRowIntro: props.renderRowIntro, showWeekNumbers: props.showWeekNumbers, clientWidth: props.clientWidth, clientHeight: props.clientHeight, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed })))));\n }\n componentDidMount() {\n this.requestScrollReset();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.dateProfile !== this.props.dateProfile) {\n this.requestScrollReset();\n }\n else {\n this.flushScrollReset();\n }\n }\n requestScrollReset() {\n this.needsScrollReset = true;\n this.flushScrollReset();\n }\n flushScrollReset() {\n if (this.needsScrollReset &&\n this.props.clientWidth // sizes computed?\n ) {\n const subjectEl = getScrollSubjectEl(this.elRef.current, this.props.dateProfile);\n if (subjectEl) {\n const originEl = subjectEl.closest('.fc-daygrid-body');\n const scrollEl = originEl.closest('.fc-scroller');\n const scrollTop = subjectEl.getBoundingClientRect().top -\n originEl.getBoundingClientRect().top;\n scrollEl.scrollTop = scrollTop ? (scrollTop + 1) : 0; // overcome border\n }\n this.needsScrollReset = false;\n }\n }\n}\nfunction getScrollSubjectEl(containerEl, dateProfile) {\n let el;\n if (dateProfile.currentRangeUnit.match(/year|month/)) {\n el = containerEl.querySelector(`[data-date=\"${formatIsoMonthStr(dateProfile.currentDate)}-01\"]`);\n // even if view is month-based, first-of-month might be hidden...\n }\n if (!el) {\n el = containerEl.querySelector(`[data-date=\"${formatDayString(dateProfile.currentDate)}\"]`);\n // could still be hidden if an interior-view hidden day\n }\n return el;\n}\n\nclass DayTableSlicer extends Slicer {\n constructor() {\n super(...arguments);\n this.forceDayIfListItem = true;\n }\n sliceRange(dateRange, dayTableModel) {\n return dayTableModel.sliceRange(dateRange);\n }\n}\n\nclass DayTable extends DateComponent {\n constructor() {\n super(...arguments);\n this.slicer = new DayTableSlicer();\n this.tableRef = createRef();\n }\n render() {\n let { props, context } = this;\n return (createElement(Table, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));\n }\n}\n\nclass DayTableView extends TableView {\n constructor() {\n super(...arguments);\n this.buildDayTableModel = memoize(buildDayTableModel);\n this.headerRef = createRef();\n this.tableRef = createRef();\n // can't override any lifecycle methods from parent\n }\n render() {\n let { options, dateProfileGenerator } = this.context;\n let { props } = this;\n let dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);\n let headerContent = options.dayHeaders && (createElement(DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 }));\n let bodyContent = (contentArg) => (createElement(DayTable, { ref: this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }));\n return options.dayMinWidth\n ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)\n : this.renderSimpleLayout(headerContent, bodyContent);\n }\n}\nfunction buildDayTableModel(dateProfile, dateProfileGenerator) {\n let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n return new DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));\n}\n\nclass TableDateProfileGenerator extends DateProfileGenerator {\n // Computes the date range that will be rendered\n buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);\n let { props } = this;\n return buildDayTableRenderRange({\n currentRange: renderRange,\n snapToWeek: /^(year|month)$/.test(currentRangeUnit),\n fixedWeekCount: props.fixedWeekCount,\n dateEnv: props.dateEnv,\n });\n }\n}\nfunction buildDayTableRenderRange(props) {\n let { dateEnv, currentRange } = props;\n let { start, end } = currentRange;\n let endOfWeek;\n // year and month views should be aligned with weeks. this is already done for week\n if (props.snapToWeek) {\n start = dateEnv.startOfWeek(start);\n // make end-of-week if not already\n endOfWeek = dateEnv.startOfWeek(end);\n if (endOfWeek.valueOf() !== end.valueOf()) {\n end = addWeeks(endOfWeek, 1);\n }\n }\n // ensure 6 weeks\n if (props.fixedWeekCount) {\n // TODO: instead of these date-math gymnastics (for multimonth view),\n // compute dateprofiles of all months, then use start of first and end of last.\n let lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(addDays(currentRange.end, -1)));\n let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\n diffWeeks(lastMonthRenderStart, end));\n end = addWeeks(end, 6 - rowCnt);\n }\n return { start, end };\n}\n\nvar css_248z = \":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}\";\ninjectStyles(css_248z);\n\nexport { DayTableView as DayGridView, DayTable, DayTableSlicer, Table, TableDateProfileGenerator, TableRows, TableView, buildDayTableModel, buildDayTableRenderRange };\n", "import { createPlugin } from '@fullcalendar/core/index.js';\nimport { DayGridView as DayTableView, TableDateProfileGenerator } from './internal.js';\nimport '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\n\nvar index = createPlugin({\n name: '@fullcalendar/daygrid',\n initialView: 'dayGridMonth',\n views: {\n dayGrid: {\n component: DayTableView,\n dateProfileGeneratorClass: TableDateProfileGenerator,\n },\n dayGridDay: {\n type: 'dayGrid',\n duration: { days: 1 },\n },\n dayGridWeek: {\n type: 'dayGrid',\n duration: { weeks: 1 },\n },\n dayGridMonth: {\n type: 'dayGrid',\n duration: { months: 1 },\n fixedWeekCount: true,\n },\n dayGridYear: {\n type: 'dayGrid',\n duration: { years: 1 },\n },\n },\n});\n\nexport { index as default };\n", "import { Splitter, hasBgRendering, createFormatter, ViewContextType, ContentContainer, BaseComponent, DateComponent, diffDays, buildNavLinkAttrs, WeekNumberContainer, getStickyHeaderDates, ViewContainer, SimpleScrollGrid, getStickyFooterScrollbar, NowTimer, NowIndicatorContainer, renderScrollShim, rangeContainsMarker, startOfDay, asRoughMs, createDuration, RefMap, PositionCache, MoreLinkContainer, SegHierarchy, groupIntersectingEntries, binarySearch, getEntrySpanEnd, buildEntryKey, StandardEvent, memoize, sortEventSegs, DayCellContainer, hasCustomDayCellContent, getSegMeta, buildIsoString, computeEarliestSegStart, buildEventRangeKey, BgEvent, renderFill, addDurations, multiplyDuration, wholeDivideDurations, Slicer, intersectRanges, formatIsoTimeString, DayHeader, DaySeriesModel, DayTableModel, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createElement, createRef, Fragment } from '@fullcalendar/core/preact.js';\nimport { DayTable } from '@fullcalendar/daygrid/internal.js';\n\nclass AllDaySplitter extends Splitter {\n getKeyInfo() {\n return {\n allDay: {},\n timed: {},\n };\n }\n getKeysForDateSpan(dateSpan) {\n if (dateSpan.allDay) {\n return ['allDay'];\n }\n return ['timed'];\n }\n getKeysForEventDef(eventDef) {\n if (!eventDef.allDay) {\n return ['timed'];\n }\n if (hasBgRendering(eventDef)) {\n return ['timed', 'allDay'];\n }\n return ['allDay'];\n }\n}\n\nconst DEFAULT_SLAT_LABEL_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n});\nfunction TimeColsAxisCell(props) {\n let classNames = [\n 'fc-timegrid-slot',\n 'fc-timegrid-slot-label',\n props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor',\n ];\n return (createElement(ViewContextType.Consumer, null, (context) => {\n if (!props.isLabeled) {\n return (createElement(\"td\", { className: classNames.join(' '), \"data-time\": props.isoTimeStr }));\n }\n let { dateEnv, options, viewApi } = context;\n let labelFormat = // TODO: fully pre-parse\n options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :\n Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) :\n createFormatter(options.slotLabelFormat);\n let renderProps = {\n level: 0,\n time: props.time,\n date: dateEnv.toDate(props.date),\n view: viewApi,\n text: dateEnv.format(props.date, labelFormat),\n };\n return (createElement(ContentContainer, { elTag: \"td\", elClasses: classNames, elAttrs: {\n 'data-time': props.isoTimeStr,\n }, renderProps: renderProps, generatorName: \"slotLabelContent\", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (createElement(\"div\", { className: \"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame\" },\n createElement(InnerContent, { elTag: \"div\", elClasses: [\n 'fc-timegrid-slot-label-cushion',\n 'fc-scrollgrid-shrink-cushion',\n ] })))));\n }));\n}\nfunction renderInnerContent(props) {\n return props.text;\n}\n\nclass TimeBodyAxis extends BaseComponent {\n render() {\n return this.props.slatMetas.map((slatMeta) => (createElement(\"tr\", { key: slatMeta.key },\n createElement(TimeColsAxisCell, Object.assign({}, slatMeta)))));\n }\n}\n\nconst DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: 'short' });\nconst AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;\nclass TimeColsView extends DateComponent {\n constructor() {\n super(...arguments);\n this.allDaySplitter = new AllDaySplitter(); // for use by subclasses\n this.headerElRef = createRef();\n this.rootElRef = createRef();\n this.scrollerElRef = createRef();\n this.state = {\n slatCoords: null,\n };\n this.handleScrollTopRequest = (scrollTop) => {\n let scrollerEl = this.scrollerElRef.current;\n if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer\n scrollerEl.scrollTop = scrollTop;\n }\n };\n /* Header Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n this.renderHeadAxis = (rowKey, frameHeight = '') => {\n let { options } = this.context;\n let { dateProfile } = this.props;\n let range = dateProfile.renderRange;\n let dayCnt = diffDays(range.start, range.end);\n // only do in day views (to avoid doing in week views that dont need it)\n let navLinkAttrs = (dayCnt === 1)\n ? buildNavLinkAttrs(this.context, range.start, 'week')\n : {};\n if (options.weekNumbers && rowKey === 'day') {\n return (createElement(WeekNumberContainer, { elTag: \"th\", elClasses: [\n 'fc-timegrid-axis',\n 'fc-scrollgrid-shrink',\n ], elAttrs: {\n 'aria-hidden': true,\n }, date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, (InnerContent) => (createElement(\"div\", { className: [\n 'fc-timegrid-axis-frame',\n 'fc-scrollgrid-shrink-frame',\n 'fc-timegrid-axis-frame-liquid',\n ].join(' '), style: { height: frameHeight } },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-timegrid-axis-cushion',\n 'fc-scrollgrid-shrink-cushion',\n 'fc-scrollgrid-sync-inner',\n ], elAttrs: navLinkAttrs })))));\n }\n return (createElement(\"th\", { \"aria-hidden\": true, className: \"fc-timegrid-axis\" },\n createElement(\"div\", { className: \"fc-timegrid-axis-frame\", style: { height: frameHeight } })));\n };\n /* Table Component Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,\n // but DayGrid still needs to have classNames on inner elements in order to measure.\n this.renderTableRowAxis = (rowHeight) => {\n let { options, viewApi } = this.context;\n let renderProps = {\n text: options.allDayText,\n view: viewApi,\n };\n return (\n // TODO: make reusable hook. used in list view too\n createElement(ContentContainer, { elTag: \"td\", elClasses: [\n 'fc-timegrid-axis',\n 'fc-scrollgrid-shrink',\n ], elAttrs: {\n 'aria-hidden': true,\n }, renderProps: renderProps, generatorName: \"allDayContent\", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (createElement(\"div\", { className: [\n 'fc-timegrid-axis-frame',\n 'fc-scrollgrid-shrink-frame',\n rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : '',\n ].join(' '), style: { height: rowHeight } },\n createElement(InnerContent, { elTag: \"span\", elClasses: [\n 'fc-timegrid-axis-cushion',\n 'fc-scrollgrid-shrink-cushion',\n 'fc-scrollgrid-sync-inner',\n ] })))));\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n };\n }\n // rendering\n // ----------------------------------------------------------------------------------------------------\n renderSimpleLayout(headerRowContent, allDayContent, timeContent) {\n let { context, props } = this;\n let sections = [];\n let stickyHeaderDates = getStickyHeaderDates(context.options);\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunk: {\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n },\n });\n }\n if (allDayContent) {\n sections.push({\n type: 'body',\n key: 'all-day',\n chunk: { content: allDayContent },\n });\n sections.push({\n type: 'body',\n key: 'all-day-divider',\n outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?\n createElement(\"tr\", { role: \"presentation\", className: \"fc-scrollgrid-section\" },\n createElement(\"td\", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),\n });\n }\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n expandRows: Boolean(context.options.expandRows),\n chunk: {\n scrollerElRef: this.scrollerElRef,\n content: timeContent,\n },\n });\n return (createElement(ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },\n createElement(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: 'shrink' }], sections: sections })));\n }\n renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {\n let ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n if (!ScrollGrid) {\n throw new Error('No ScrollGrid implementation');\n }\n let { context, props } = this;\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);\n let sections = [];\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n syncRowHeights: true,\n chunks: [\n {\n key: 'axis',\n rowContent: (arg) => (createElement(\"tr\", { role: \"presentation\" }, this.renderHeadAxis('day', arg.rowSyncHeights[0]))),\n },\n {\n key: 'cols',\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n },\n ],\n });\n }\n if (allDayContent) {\n sections.push({\n type: 'body',\n key: 'all-day',\n syncRowHeights: true,\n chunks: [\n {\n key: 'axis',\n rowContent: (contentArg) => (createElement(\"tr\", { role: \"presentation\" }, this.renderTableRowAxis(contentArg.rowSyncHeights[0]))),\n },\n {\n key: 'cols',\n content: allDayContent,\n },\n ],\n });\n sections.push({\n key: 'all-day-divider',\n type: 'body',\n outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?\n createElement(\"tr\", { role: \"presentation\", className: \"fc-scrollgrid-section\" },\n createElement(\"td\", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),\n });\n }\n let isNowIndicator = context.options.nowIndicator;\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n expandRows: Boolean(context.options.expandRows),\n chunks: [\n {\n key: 'axis',\n content: (arg) => (\n // TODO: make this now-indicator arrow more DRY with TimeColsContent\n createElement(\"div\", { className: \"fc-timegrid-axis-chunk\" },\n createElement(\"table\", { \"aria-hidden\": true, style: { height: arg.expandRows ? arg.clientHeight : '' } },\n arg.tableColGroupNode,\n createElement(\"tbody\", null,\n createElement(TimeBodyAxis, { slatMetas: slatMetas }))),\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" },\n createElement(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, (nowDate) => {\n let nowIndicatorTop = isNowIndicator &&\n slatCoords &&\n slatCoords.safeComputeTop(nowDate); // might return void\n if (typeof nowIndicatorTop === 'number') {\n return (createElement(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: nowDate }));\n }\n return null;\n })))),\n },\n {\n key: 'cols',\n scrollerElRef: this.scrollerElRef,\n content: timeContent,\n },\n ],\n });\n if (stickyFooterScrollbar) {\n sections.push({\n key: 'footer',\n type: 'footer',\n isSticky: true,\n chunks: [\n {\n key: 'axis',\n content: renderScrollShim,\n },\n {\n key: 'cols',\n content: renderScrollShim,\n },\n ],\n });\n }\n return (createElement(ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },\n createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: false, colGroups: [\n { width: 'shrink', cols: [{ width: 'shrink' }] },\n { cols: [{ span: colCnt, minWidth: dayMinWidth }] },\n ], sections: sections })));\n }\n /* Dimensions\n ------------------------------------------------------------------------------------------------------------------*/\n getAllDayMaxEventProps() {\n let { dayMaxEvents, dayMaxEventRows } = this.context.options;\n if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?\n dayMaxEvents = undefined;\n dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure \"auto\" goes to a real number\n }\n return { dayMaxEvents, dayMaxEventRows };\n }\n}\nfunction renderAllDayInner(renderProps) {\n return renderProps.text;\n}\n\nclass TimeColsSlatsCoords {\n constructor(positions, dateProfile, slotDuration) {\n this.positions = positions;\n this.dateProfile = dateProfile;\n this.slotDuration = slotDuration;\n }\n safeComputeTop(date) {\n let { dateProfile } = this;\n if (rangeContainsMarker(dateProfile.currentRange, date)) {\n let startOfDayDate = startOfDay(date);\n let timeMs = date.valueOf() - startOfDayDate.valueOf();\n if (timeMs >= asRoughMs(dateProfile.slotMinTime) &&\n timeMs < asRoughMs(dateProfile.slotMaxTime)) {\n return this.computeTimeTop(createDuration(timeMs));\n }\n }\n return null;\n }\n // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n computeDateTop(when, startOfDayDate) {\n if (!startOfDayDate) {\n startOfDayDate = startOfDay(when);\n }\n return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));\n }\n // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.\n // Eventually allow computation with arbirary slat dates.\n computeTimeTop(duration) {\n let { positions, dateProfile } = this;\n let len = positions.els.length;\n // floating-point value of # of slots covered\n let slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);\n let slatIndex;\n let slatRemainder;\n // compute a floating-point number for how many slats should be progressed through.\n // from 0 to number of slats (inclusive)\n // constrained because slotMinTime/slotMaxTime might be customized.\n slatCoverage = Math.max(0, slatCoverage);\n slatCoverage = Math.min(len, slatCoverage);\n // an integer index of the furthest whole slat\n // from 0 to number slats (*exclusive*, so len-1)\n slatIndex = Math.floor(slatCoverage);\n slatIndex = Math.min(slatIndex, len - 1);\n // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n // could be 1.0 if slatCoverage is covering *all* the slots\n slatRemainder = slatCoverage - slatIndex;\n return positions.tops[slatIndex] +\n positions.getHeight(slatIndex) * slatRemainder;\n }\n}\n\nclass TimeColsSlatsBody extends BaseComponent {\n render() {\n let { props, context } = this;\n let { options } = context;\n let { slatElRefs } = props;\n return (createElement(\"tbody\", null, props.slatMetas.map((slatMeta, i) => {\n let renderProps = {\n time: slatMeta.time,\n date: context.dateEnv.toDate(slatMeta.date),\n view: context.viewApi,\n };\n return (createElement(\"tr\", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },\n props.axis && (createElement(TimeColsAxisCell, Object.assign({}, slatMeta))),\n createElement(ContentContainer, { elTag: \"td\", elClasses: [\n 'fc-timegrid-slot',\n 'fc-timegrid-slot-lane',\n !slatMeta.isLabeled && 'fc-timegrid-slot-minor',\n ], elAttrs: {\n 'data-time': slatMeta.isoTimeStr,\n }, renderProps: renderProps, generatorName: \"slotLaneContent\", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount })));\n })));\n }\n}\n\n/*\nfor the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n*/\nclass TimeColsSlats extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n this.slatElRefs = new RefMap();\n }\n render() {\n let { props, context } = this;\n return (createElement(\"div\", { ref: this.rootElRef, className: \"fc-timegrid-slots\" },\n createElement(\"table\", { \"aria-hidden\": true, className: context.theme.getClass('table'), style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n height: props.minHeight,\n } },\n props.tableColGroupNode /* relies on there only being a single <col> for the axis */,\n createElement(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));\n }\n componentDidMount() {\n this.updateSizing();\n }\n componentDidUpdate() {\n this.updateSizing();\n }\n componentWillUnmount() {\n if (this.props.onCoords) {\n this.props.onCoords(null);\n }\n }\n updateSizing() {\n let { context, props } = this;\n if (props.onCoords &&\n props.clientWidth !== null // means sizing has stabilized\n ) {\n let rootEl = this.rootElRef.current;\n if (rootEl.offsetHeight) { // not hidden by css\n props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));\n }\n }\n }\n}\nfunction collectSlatEls(elMap, slatMetas) {\n return slatMetas.map((slatMeta) => elMap[slatMeta.key]);\n}\n\nfunction splitSegsByCol(segs, colCnt) {\n let segsByCol = [];\n let i;\n for (i = 0; i < colCnt; i += 1) {\n segsByCol.push([]);\n }\n if (segs) {\n for (i = 0; i < segs.length; i += 1) {\n segsByCol[segs[i].col].push(segs[i]);\n }\n }\n return segsByCol;\n}\nfunction splitInteractionByCol(ui, colCnt) {\n let byRow = [];\n if (!ui) {\n for (let i = 0; i < colCnt; i += 1) {\n byRow[i] = null;\n }\n }\n else {\n for (let i = 0; i < colCnt; i += 1) {\n byRow[i] = {\n affectedInstances: ui.affectedInstances,\n isEvent: ui.isEvent,\n segs: [],\n };\n }\n for (let seg of ui.segs) {\n byRow[seg.col].segs.push(seg);\n }\n }\n return byRow;\n}\n\nclass TimeColMoreLink extends BaseComponent {\n render() {\n let { props } = this;\n return (createElement(MoreLinkContainer, { elClasses: ['fc-timegrid-more-link'], elStyle: {\n top: props.top,\n bottom: props.bottom,\n }, allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: () => renderPlainFgSegs(props.hiddenSegs, props), defaultGenerator: renderMoreLinkInner, forceTimed: true }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timegrid-more-link-inner', 'fc-sticky'] }))));\n }\n}\nfunction renderMoreLinkInner(props) {\n return props.shortText;\n}\n\n// segInputs assumed sorted\nfunction buildPositioning(segInputs, strictOrder, maxStackCnt) {\n let hierarchy = new SegHierarchy();\n if (strictOrder != null) {\n hierarchy.strictOrder = strictOrder;\n }\n if (maxStackCnt != null) {\n hierarchy.maxStackCnt = maxStackCnt;\n }\n let hiddenEntries = hierarchy.addSegs(segInputs);\n let hiddenGroups = groupIntersectingEntries(hiddenEntries);\n let web = buildWeb(hierarchy);\n web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0\n let segRects = webToRects(web);\n return { segRects, hiddenGroups };\n}\nfunction buildWeb(hierarchy) {\n const { entriesByLevel } = hierarchy;\n const buildNode = cacheable((level, lateral) => level + ':' + lateral, (level, lateral) => {\n let siblingRange = findNextLevelSegs(hierarchy, level, lateral);\n let nextLevelRes = buildNodes(siblingRange, buildNode);\n let entry = entriesByLevel[level][lateral];\n return [\n Object.assign(Object.assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),\n entry.thickness + nextLevelRes[1], // the pressure builds\n ];\n });\n return buildNodes(entriesByLevel.length\n ? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length }\n : null, buildNode)[0];\n}\nfunction buildNodes(siblingRange, buildNode) {\n if (!siblingRange) {\n return [[], 0];\n }\n let { level, lateralStart, lateralEnd } = siblingRange;\n let lateral = lateralStart;\n let pairs = [];\n while (lateral < lateralEnd) {\n pairs.push(buildNode(level, lateral));\n lateral += 1;\n }\n pairs.sort(cmpDescPressures);\n return [\n pairs.map(extractNode),\n pairs[0][1], // first item's pressure\n ];\n}\nfunction cmpDescPressures(a, b) {\n return b[1] - a[1];\n}\nfunction extractNode(a) {\n return a[0];\n}\nfunction findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {\n let { levelCoords, entriesByLevel } = hierarchy;\n let subjectEntry = entriesByLevel[subjectLevel][subjectLateral];\n let afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;\n let levelCnt = levelCoords.length;\n let level = subjectLevel;\n // skip past levels that are too high up\n for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)\n ; // do nothing\n for (; level < levelCnt; level += 1) {\n let entries = entriesByLevel[level];\n let entry;\n let searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);\n let lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one\n let lateralEnd = lateralStart;\n while ( // loop through entries that horizontally intersect\n (entry = entries[lateralEnd]) && // but not past the whole seg list\n entry.span.start < subjectEntry.span.end) {\n lateralEnd += 1;\n }\n if (lateralStart < lateralEnd) {\n return { level, lateralStart, lateralEnd };\n }\n }\n return null;\n}\nfunction stretchWeb(topLevelNodes, totalThickness) {\n const stretchNode = cacheable((node, startCoord, prevThickness) => buildEntryKey(node), (node, startCoord, prevThickness) => {\n let { nextLevelNodes, thickness } = node;\n let allThickness = thickness + prevThickness;\n let thicknessFraction = thickness / allThickness;\n let endCoord;\n let newChildren = [];\n if (!nextLevelNodes.length) {\n endCoord = totalThickness;\n }\n else {\n for (let childNode of nextLevelNodes) {\n if (endCoord === undefined) {\n let res = stretchNode(childNode, startCoord, allThickness);\n endCoord = res[0];\n newChildren.push(res[1]);\n }\n else {\n let res = stretchNode(childNode, endCoord, 0);\n newChildren.push(res[1]);\n }\n }\n }\n let newThickness = (endCoord - startCoord) * thicknessFraction;\n return [endCoord - newThickness, Object.assign(Object.assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];\n });\n return topLevelNodes.map((node) => stretchNode(node, 0, 0)[1]);\n}\n// not sorted in any particular order\nfunction webToRects(topLevelNodes) {\n let rects = [];\n const processNode = cacheable((node, levelCoord, stackDepth) => buildEntryKey(node), (node, levelCoord, stackDepth) => {\n let rect = Object.assign(Object.assign({}, node), { levelCoord,\n stackDepth, stackForward: 0 });\n rects.push(rect);\n return (rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1);\n });\n function processNodes(nodes, levelCoord, stackDepth) {\n let stackForward = 0;\n for (let node of nodes) {\n stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);\n }\n return stackForward;\n }\n processNodes(topLevelNodes, 0, 0);\n return rects; // TODO: sort rects by levelCoord to be consistent with toRects?\n}\n// TODO: move to general util\nfunction cacheable(keyFunc, workFunc) {\n const cache = {};\n return (...args) => {\n let key = keyFunc(...args);\n return (key in cache)\n ? cache[key]\n : (cache[key] = workFunc(...args));\n };\n}\n\nfunction computeSegVCoords(segs, colDate, slatCoords = null, eventMinHeight = 0) {\n let vcoords = [];\n if (slatCoords) {\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i];\n let spanStart = slatCoords.computeDateTop(seg.start, colDate);\n let spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(\n slatCoords.computeDateTop(seg.end, colDate));\n vcoords.push({\n start: Math.round(spanStart),\n end: Math.round(spanEnd), //\n });\n }\n }\n return vcoords;\n}\nfunction computeFgSegPlacements(segs, segVCoords, // might not have for every seg\neventOrderStrict, eventMaxStack) {\n let segInputs = [];\n let dumbSegs = []; // segs without coords\n for (let i = 0; i < segs.length; i += 1) {\n let vcoords = segVCoords[i];\n if (vcoords) {\n segInputs.push({\n index: i,\n thickness: 1,\n span: vcoords,\n });\n }\n else {\n dumbSegs.push(segs[i]);\n }\n }\n let { segRects, hiddenGroups } = buildPositioning(segInputs, eventOrderStrict, eventMaxStack);\n let segPlacements = [];\n for (let segRect of segRects) {\n segPlacements.push({\n seg: segs[segRect.index],\n rect: segRect,\n });\n }\n for (let dumbSeg of dumbSegs) {\n segPlacements.push({ seg: dumbSeg, rect: null });\n }\n return { segPlacements, hiddenGroups };\n}\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n meridiem: false,\n});\nclass TimeColEvent extends BaseComponent {\n render() {\n return (createElement(StandardEvent, Object.assign({}, this.props, { elClasses: [\n 'fc-timegrid-event',\n 'fc-v-event',\n this.props.isShort && 'fc-timegrid-event-short',\n ], defaultTimeFormat: DEFAULT_TIME_FORMAT })));\n }\n}\n\nclass TimeCol extends BaseComponent {\n constructor() {\n super(...arguments);\n this.sortEventSegs = memoize(sortEventSegs);\n }\n // TODO: memoize event-placement?\n render() {\n let { props, context } = this;\n let { options } = context;\n let isSelectMirror = options.selectMirror;\n let mirrorSegs = // yuck\n (props.eventDrag && props.eventDrag.segs) ||\n (props.eventResize && props.eventResize.segs) ||\n (isSelectMirror && props.dateSelectionSegs) ||\n [];\n let interactionAffectedInstances = // TODO: messy way to compute this\n (props.eventDrag && props.eventDrag.affectedInstances) ||\n (props.eventResize && props.eventResize.affectedInstances) ||\n {};\n let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);\n return (createElement(DayCellContainer, { elTag: \"td\", elRef: props.elRef, elClasses: [\n 'fc-timegrid-col',\n ...(props.extraClassNames || []),\n ], elAttrs: Object.assign({ role: 'gridcell' }, props.extraDataAttrs), date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraRenderProps: props.extraRenderProps }, (InnerContent) => (createElement(\"div\", { className: \"fc-timegrid-col-frame\" },\n createElement(\"div\", { className: \"fc-timegrid-col-bg\" },\n this.renderFillSegs(props.businessHourSegs, 'non-business'),\n this.renderFillSegs(props.bgEventSegs, 'bg-event'),\n this.renderFillSegs(props.dateSelectionSegs, 'highlight')),\n createElement(\"div\", { className: \"fc-timegrid-col-events\" }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),\n createElement(\"div\", { className: \"fc-timegrid-col-events\" }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror), 'mirror')),\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" }, this.renderNowIndicator(props.nowIndicatorSegs)),\n hasCustomDayCellContent(options) && (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timegrid-col-misc'] }))))));\n }\n renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n let { props } = this;\n if (props.forPrint) {\n return renderPlainFgSegs(sortedFgSegs, props);\n }\n return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey);\n }\n renderPositionedFgSegs(segs, // if not mirror, needs to be sorted\n segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n let { eventMaxStack, eventShortHeight, eventOrderStrict, eventMinHeight } = this.context.options;\n let { date, slatCoords, eventSelection, todayRange, nowDate } = this.props;\n let isMirror = isDragging || isResizing || isDateSelecting;\n let segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);\n let { segPlacements, hiddenGroups } = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack);\n return (createElement(Fragment, null,\n this.renderHiddenGroups(hiddenGroups, segs),\n segPlacements.map((segPlacement) => {\n let { seg, rect } = segPlacement;\n let instanceId = seg.eventRange.instance.instanceId;\n let isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);\n let vStyle = computeSegVStyle(rect && rect.span);\n let hStyle = (!isMirror && rect) ? this.computeSegHStyle(rect) : { left: 0, right: 0 };\n let isInset = Boolean(rect) && rect.stackForward > 0;\n let isShort = Boolean(rect) && (rect.span.end - rect.span.start) < eventShortHeight; // look at other places for this problem\n return (createElement(\"div\", { className: 'fc-timegrid-event-harness' +\n (isInset ? ' fc-timegrid-event-harness-inset' : ''), key: forcedKey || instanceId, style: Object.assign(Object.assign({ visibility: isVisible ? '' : 'hidden' }, vStyle), hStyle) },\n createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, isShort: isShort }, getSegMeta(seg, todayRange, nowDate)))));\n })));\n }\n // will already have eventMinHeight applied because segInputs already had it\n renderHiddenGroups(hiddenGroups, segs) {\n let { extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize } = this.props;\n return (createElement(Fragment, null, hiddenGroups.map((hiddenGroup) => {\n let positionCss = computeSegVStyle(hiddenGroup.span);\n let hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);\n return (createElement(TimeColMoreLink, { key: buildIsoString(computeEarliestSegStart(hiddenSegs)), hiddenSegs: hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan: extraDateSpan, dateProfile: dateProfile, todayRange: todayRange, nowDate: nowDate, eventSelection: eventSelection, eventDrag: eventDrag, eventResize: eventResize }));\n })));\n }\n renderFillSegs(segs, fillType) {\n let { props, context } = this;\n let segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated\n let children = segVCoords.map((vcoords, i) => {\n let seg = segs[i];\n return (createElement(\"div\", { key: buildEventRangeKey(seg.eventRange), className: \"fc-timegrid-bg-harness\", style: computeSegVStyle(vcoords) }, fillType === 'bg-event' ?\n createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, props.todayRange, props.nowDate))) :\n renderFill(fillType)));\n });\n return createElement(Fragment, null, children);\n }\n renderNowIndicator(segs) {\n let { slatCoords, date } = this.props;\n if (!slatCoords) {\n return null;\n }\n return segs.map((seg, i) => (createElement(NowIndicatorContainer\n // key doesn't matter. will only ever be one\n , { \n // key doesn't matter. will only ever be one\n key: i, elClasses: ['fc-timegrid-now-indicator-line'], elStyle: {\n top: slatCoords.computeDateTop(seg.start, date),\n }, isAxis: false, date: date })));\n }\n computeSegHStyle(segHCoords) {\n let { isRtl, options } = this.context;\n let shouldOverlap = options.slotEventOverlap;\n let nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point\n let farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point\n let left; // amount of space from left edge, a fraction of the total width\n let right; // amount of space from right edge, a fraction of the total width\n if (shouldOverlap) {\n // double the width, but don't go beyond the maximum forward coordinate (1.0)\n farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);\n }\n if (isRtl) {\n left = 1 - farCoord;\n right = nearCoord;\n }\n else {\n left = nearCoord;\n right = 1 - farCoord;\n }\n let props = {\n zIndex: segHCoords.stackDepth + 1,\n left: left * 100 + '%',\n right: right * 100 + '%',\n };\n if (shouldOverlap && !segHCoords.stackForward) {\n // add padding to the edge so that forward stacked events don't cover the resizer's icon\n props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n }\n return props;\n }\n}\nfunction renderPlainFgSegs(sortedFgSegs, { todayRange, nowDate, eventSelection, eventDrag, eventResize }) {\n let hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) ||\n (eventResize ? eventResize.affectedInstances : null) ||\n {};\n return (createElement(Fragment, null, sortedFgSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId;\n return (createElement(\"div\", { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? 'hidden' : '' } },\n createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, getSegMeta(seg, todayRange, nowDate)))));\n })));\n}\nfunction computeSegVStyle(segVCoords) {\n if (!segVCoords) {\n return { top: '', bottom: '' };\n }\n return {\n top: segVCoords.start,\n bottom: -segVCoords.end,\n };\n}\nfunction compileSegsFromEntries(segEntries, allSegs) {\n return segEntries.map((segEntry) => allSegs[segEntry.index]);\n}\n\nclass TimeColsContent extends BaseComponent {\n constructor() {\n super(...arguments);\n this.splitFgEventSegs = memoize(splitSegsByCol);\n this.splitBgEventSegs = memoize(splitSegsByCol);\n this.splitBusinessHourSegs = memoize(splitSegsByCol);\n this.splitNowIndicatorSegs = memoize(splitSegsByCol);\n this.splitDateSelectionSegs = memoize(splitSegsByCol);\n this.splitEventDrag = memoize(splitInteractionByCol);\n this.splitEventResize = memoize(splitInteractionByCol);\n this.rootElRef = createRef();\n this.cellElRefs = new RefMap();\n }\n render() {\n let { props, context } = this;\n let nowIndicatorTop = context.options.nowIndicator &&\n props.slatCoords &&\n props.slatCoords.safeComputeTop(props.nowDate); // might return void\n let colCnt = props.cells.length;\n let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);\n let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);\n let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);\n let nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);\n let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);\n let eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);\n let eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);\n return (createElement(\"div\", { className: \"fc-timegrid-cols\", ref: this.rootElRef },\n createElement(\"table\", { role: \"presentation\", style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n } },\n props.tableColGroupNode,\n createElement(\"tbody\", { role: \"presentation\" },\n createElement(\"tr\", { role: \"row\" },\n props.axis && (createElement(\"td\", { \"aria-hidden\": true, className: \"fc-timegrid-col fc-timegrid-axis\" },\n createElement(\"div\", { className: \"fc-timegrid-col-frame\" },\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" }, typeof nowIndicatorTop === 'number' && (createElement(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: props.nowDate })))))),\n props.cells.map((cell, i) => (createElement(TimeCol, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint }))))))));\n }\n componentDidMount() {\n this.updateCoords();\n }\n componentDidUpdate() {\n this.updateCoords();\n }\n updateCoords() {\n let { props } = this;\n if (props.onColCoords &&\n props.clientWidth !== null // means sizing has stabilized\n ) {\n props.onColCoords(new PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal\n false));\n }\n }\n}\nfunction collectCellEls(elMap, cells) {\n return cells.map((cell) => elMap[cell.key]);\n}\n\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\nclass TimeCols extends DateComponent {\n constructor() {\n super(...arguments);\n this.processSlotOptions = memoize(processSlotOptions);\n this.state = {\n slatCoords: null,\n };\n this.handleRootEl = (el) => {\n if (el) {\n this.context.registerInteractiveComponent(this, {\n el,\n isHitComboAllowed: this.props.isHitComboAllowed,\n });\n }\n else {\n this.context.unregisterInteractiveComponent(this);\n }\n };\n this.handleScrollRequest = (request) => {\n let { onScrollTopRequest } = this.props;\n let { slatCoords } = this.state;\n if (onScrollTopRequest && slatCoords) {\n if (request.time) {\n let top = slatCoords.computeTimeTop(request.time);\n top = Math.ceil(top); // zoom can give weird floating-point values. rather scroll a little bit further\n if (top) {\n top += 1; // to overcome top border that slots beyond the first have. looks better\n }\n onScrollTopRequest(top);\n }\n return true;\n }\n return false;\n };\n this.handleColCoords = (colCoords) => {\n this.colCoords = colCoords;\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n if (this.props.onSlatCoords) {\n this.props.onSlatCoords(slatCoords);\n }\n };\n }\n render() {\n let { props, state } = this;\n return (createElement(\"div\", { className: \"fc-timegrid-body\", ref: this.handleRootEl, style: {\n // these props are important to give this wrapper correct dimensions for interactions\n // TODO: if we set it here, can we avoid giving to inner tables?\n width: props.clientWidth,\n minWidth: props.tableMinWidth,\n } },\n createElement(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),\n createElement(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));\n }\n componentDidMount() {\n this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);\n }\n componentDidUpdate(prevProps) {\n this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);\n }\n componentWillUnmount() {\n this.scrollResponder.detach();\n }\n queryHit(positionLeft, positionTop) {\n let { dateEnv, options } = this.context;\n let { colCoords } = this;\n let { dateProfile } = this.props;\n let { slatCoords } = this.state;\n let { snapDuration, snapsPerSlot } = this.processSlotOptions(this.props.slotDuration, options.snapDuration);\n let colIndex = colCoords.leftToIndex(positionLeft);\n let slatIndex = slatCoords.positions.topToIndex(positionTop);\n if (colIndex != null && slatIndex != null) {\n let cell = this.props.cells[colIndex];\n let slatTop = slatCoords.positions.tops[slatIndex];\n let slatHeight = slatCoords.positions.getHeight(slatIndex);\n let partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1\n let localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n let snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n let dayDate = this.props.cells[colIndex].date;\n let time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));\n let start = dateEnv.add(dayDate, time);\n let end = dateEnv.add(start, snapDuration);\n return {\n dateProfile,\n dateSpan: Object.assign({ range: { start, end }, allDay: false }, cell.extraDateSpan),\n dayEl: colCoords.els[colIndex],\n rect: {\n left: colCoords.lefts[colIndex],\n right: colCoords.rights[colIndex],\n top: slatTop,\n bottom: slatTop + slatHeight,\n },\n layer: 0,\n };\n }\n return null;\n }\n}\nfunction processSlotOptions(slotDuration, snapDurationOverride) {\n let snapDuration = snapDurationOverride || slotDuration;\n let snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);\n if (snapsPerSlot === null) {\n snapDuration = slotDuration;\n snapsPerSlot = 1;\n // TODO: say warning?\n }\n return { snapDuration, snapsPerSlot };\n}\n\nclass DayTimeColsSlicer extends Slicer {\n sliceRange(range, dayRanges) {\n let segs = [];\n for (let col = 0; col < dayRanges.length; col += 1) {\n let segRange = intersectRanges(range, dayRanges[col]);\n if (segRange) {\n segs.push({\n start: segRange.start,\n end: segRange.end,\n isStart: segRange.start.valueOf() === range.start.valueOf(),\n isEnd: segRange.end.valueOf() === range.end.valueOf(),\n col,\n });\n }\n }\n return segs;\n }\n}\n\nclass DayTimeCols extends DateComponent {\n constructor() {\n super(...arguments);\n this.buildDayRanges = memoize(buildDayRanges);\n this.slicer = new DayTimeColsSlicer();\n this.timeColsRef = createRef();\n }\n render() {\n let { props, context } = this;\n let { dateProfile, dayTableModel } = props;\n let { nowIndicator, nextDayThreshold } = context.options;\n let dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);\n // give it the first row of cells\n // TODO: would move this further down hierarchy, but sliceNowDate needs it\n return (createElement(NowTimer, { unit: nowIndicator ? 'minute' : 'day' }, (nowDate, todayRange) => (createElement(TimeCols, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: nowIndicator && this.slicer.sliceNowDate(nowDate, dateProfile, nextDayThreshold, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords })))));\n }\n}\nfunction buildDayRanges(dayTableModel, dateProfile, dateEnv) {\n let ranges = [];\n for (let date of dayTableModel.headerDates) {\n ranges.push({\n start: dateEnv.add(date, dateProfile.slotMinTime),\n end: dateEnv.add(date, dateProfile.slotMaxTime),\n });\n }\n return ranges;\n}\n\n// potential nice values for the slot-duration and interval-duration\n// from largest to smallest\nconst STOCK_SUB_DURATIONS = [\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { seconds: 30 },\n { seconds: 15 },\n];\nfunction buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {\n let dayStart = new Date(0);\n let slatTime = slotMinTime;\n let slatIterator = createDuration(0);\n let labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);\n let metas = [];\n while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {\n let date = dateEnv.add(dayStart, slatTime);\n let isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;\n metas.push({\n date,\n time: slatTime,\n key: date.toISOString(),\n isoTimeStr: formatIsoTimeString(date),\n isLabeled,\n });\n slatTime = addDurations(slatTime, slotDuration);\n slatIterator = addDurations(slatIterator, slotDuration);\n }\n return metas;\n}\n// Computes an automatic value for slotLabelInterval\nfunction computeLabelInterval(slotDuration) {\n let i;\n let labelInterval;\n let slotsPerLabel;\n // find the smallest stock label interval that results in more than one slots-per-label\n for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {\n labelInterval = createDuration(STOCK_SUB_DURATIONS[i]);\n slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);\n if (slotsPerLabel !== null && slotsPerLabel > 1) {\n return labelInterval;\n }\n }\n return slotDuration; // fall back\n}\n\nclass DayTimeColsView extends TimeColsView {\n constructor() {\n super(...arguments);\n this.buildTimeColsModel = memoize(buildTimeColsModel);\n this.buildSlatMetas = memoize(buildSlatMetas);\n }\n render() {\n let { options, dateEnv, dateProfileGenerator } = this.context;\n let { props } = this;\n let { dateProfile } = props;\n let dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);\n let splitProps = this.allDaySplitter.splitProps(props);\n let slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);\n let { dayMinWidth } = options;\n let hasAttachedAxis = !dayMinWidth;\n let hasDetachedAxis = dayMinWidth;\n let headerContent = options.dayHeaders && (createElement(DayHeader, { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null }));\n let allDayContent = (options.allDaySlot !== false) && ((contentArg) => (createElement(DayTable, Object.assign({}, splitProps.allDay, { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, this.getAllDayMaxEventProps()))));\n let timeGridContent = (contentArg) => (createElement(DayTimeCols, Object.assign({}, splitProps.timed, { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: this.handleScrollTopRequest })));\n return hasDetachedAxis\n ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)\n : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);\n }\n}\nfunction buildTimeColsModel(dateProfile, dateProfileGenerator) {\n let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n return new DayTableModel(daySeries, false);\n}\n\nvar css_248z = \".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:\\\"\\\\00a0\\\"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:\\\"\\\\00a0-\\\\00a0\\\"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}\";\ninjectStyles(css_248z);\n\nexport { DayTimeCols, DayTimeColsSlicer, DayTimeColsView, TimeCols, TimeColsSlatsCoords, TimeColsView, buildDayRanges, buildSlatMetas, buildTimeColsModel };\n", "import { createPlugin } from '@fullcalendar/core/index.js';\nimport { DayTimeColsView } from './internal.js';\nimport '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\nimport '@fullcalendar/daygrid/internal.js';\n\nconst OPTION_REFINERS = {\n allDaySlot: Boolean,\n};\n\nvar index = createPlugin({\n name: '@fullcalendar/timegrid',\n initialView: 'timeGridWeek',\n optionRefiners: OPTION_REFINERS,\n views: {\n timeGrid: {\n component: DayTimeColsView,\n usesMinMaxTime: true,\n allDaySlot: true,\n slotDuration: '00:30:00',\n slotEventOverlap: true, // a bad name. confused with overlap/constraint system\n },\n timeGridDay: {\n type: 'timeGrid',\n duration: { days: 1 },\n },\n timeGridWeek: {\n type: 'timeGrid',\n duration: { weeks: 1 },\n },\n },\n});\n\nexport { index as default };\n", "\uFEFFimport { Calendar } from '@fullcalendar/core';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n getEventsUrl: String,\r\n strings: Object\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"calendar\"];\r\n }\r\n\r\n async connect() {\r\n await this.getAndRenderEvents();\r\n }\r\n\r\n async getAndRenderEvents() {\r\n let endDate = new Date(this.calendarTarget.calendar.view.activeEnd.getTime());\r\n endDate.setDate(this.calendarTarget.calendar.view.activeEnd.getDate() - 1); // our end dates are inclusive\r\n const queryParams = new URLSearchParams({\r\n startDate: this.calendarTarget.calendar.view.activeStart.toLocaleDateString(\"en-GB\"),\r\n endDate: endDate.toLocaleDateString(\"en-GB\")\r\n });\r\n const response = await fetch(`${this.getEventsUrlValue}?${queryParams}`, { headers: { \"X-Requested-With\": \"XMLHttpRequest\" } });\r\n const events = await response.json();\r\n this.calendarTarget.calendar.removeAllEvents();\r\n\r\n for (const event of events) {\r\n this.calendarTarget.calendar.addEvent(event);\r\n }\r\n }\r\n\r\n showEventDetails({ jsEvent, el, event }) {\r\n if (!bootstrap.Popover.getInstance(el)) {\r\n const popover = new bootstrap.Popover(el, {\r\n title: \"<strong class='d-block'>\" + event.title + \"</strong> \" + (event.extendedProps.type ? event.extendedProps.type : \"\"),\r\n content: `\r\n<div>\r\n <div class=\"fw-bold\">${event.allDay ? this.stringsValue.dateLabel : this.stringsValue.startDateLabel}</div>\r\n <div class=\"mb-2\">${event.extendedProps.start}</div>\r\n ${!event.allDay\r\n ? `<div class=\"fw-bold\">${this.stringsValue.endDateLabel}</div>\r\n <div class=\"mb-2\">${event.extendedProps.end}</div>`\r\n : \"\"}\r\n ${event.extendedProps.location\r\n ? `<div class=\"fw-bold\">${this.stringsValue.locationLabel}</div>\r\n <div class=\"mb-2\">${event.extendedProps.location}</div>`\r\n : \"\"}\r\n ${event.url\r\n ? `<a href=\"${event.url}\">${this.stringsValue.viewDetailsLink}</a>`\r\n : \"\"}\r\n</div>`,\r\n html: true\r\n });\r\n setTimeout(() => popover.show(), 0);\r\n }\r\n jsEvent.preventDefault();\r\n }\r\n\r\n calendarTargetConnected() {\r\n this.calendarTarget.calendar = new Calendar(\r\n this.calendarTarget,\r\n {\r\n plugins: [dayGridPlugin, timeGridPlugin],\r\n initialView: 'dayGridMonth',\r\n headerToolbar: {\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: 'dayGridMonth,timeGridWeek,timeGridDay'\r\n },\r\n height: \"auto\",\r\n fixedWeekCount: false,\r\n showNonCurrentDates: false,\r\n navLinks: true,\r\n eventDisplay: \"block\",\r\n eventBorderColor: \"var(--fc-button-border-color)\",\r\n eventBackgroundColor: \"var(--fc-button-bg-color)\",\r\n eventTextColor: \"var(--fc-button-text-color)\",\r\n eventTimeFormat: {\r\n hour: \"numeric\",\r\n minute: \"2-digit\",\r\n meridiem: \"short\"\r\n },\r\n timeZone: \"Europe/London\",\r\n datesSet: () => this.getAndRenderEvents(),\r\n eventClick: e => this.showEventDetails(e),\r\n eventContent: function (arg) {\r\n const event = arg.event;\r\n\r\n const container = document.createElement('div');\r\n container.classList.add('py-1');\r\n container.classList.add('px-1');\r\n\r\n const timeElement = document.createElement('div');\r\n if (!event.allDay) {\r\n const startTime = event.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n timeElement.textContent = startTime;\r\n }\r\n\r\n const titleElement = document.createElement('div');\r\n titleElement.innerHTML = `<strong class='d-block'>${event.title}</strong>`;\r\n\r\n if (event.extendedProps.type) {\r\n const typeElement = document.createElement('div');\r\n typeElement.textContent = event.extendedProps.type;\r\n titleElement.appendChild(typeElement);\r\n }\r\n\r\n container.appendChild(timeElement);\r\n container.appendChild(titleElement);\r\n\r\n return { domNodes: [container] };\r\n }\r\n }\r\n );\r\n this.calendarTarget.calendar.render();\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"bookingField\"];\r\n }\r\n\r\n configureBookingFormForType({ target }) {\r\n const isSelfBookingType = target.options[target.selectedIndex].value === \"self\";\r\n this.bookingFieldTargets.forEach(bft => {\r\n bft.value = isSelfBookingType && bft.dataset.selfValue || \"\";\r\n });\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nfunction renderNominee({ element, text, companyName }) {\r\n companyName = companyName || (element && element.dataset.companyName);\r\n return text + (companyName ? ` (${companyName})` : \"\");\r\n}\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n \"suggestNomineesUrl\": String,\r\n \"selectNomineesPlaceholder\": String,\r\n \"availableReasonImageUrls\": Object\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"nominees\", \"customReason\", \"reasonImage\", \"details\", \"addAnEmojiButton\", \"emojiPicker\"];\r\n }\r\n\r\n async connect() {\r\n if (this.hasEmojiPickerTarget) {\r\n const {data, Picker} = await import(\"imports/emoji-mart\");\r\n const picker = new Picker({\r\n data,\r\n onEmojiSelect: (e) => {\r\n this.insertEmoji(e.native);\r\n }\r\n });\r\n this.emojiPickerTarget.appendChild(picker);\r\n }\r\n }\r\n\r\n nomineesTargetConnected() {\r\n const pageSize = 50;\r\n jQuery(this.nomineesTarget).select2({\r\n placeholder: this.selectNomineesPlaceholderValue,\r\n allowClear: false,\r\n minimumInputLength: 2,\r\n templateResult: state => state.id ? renderNominee(state): state.text,\r\n templateSelection: renderNominee,\r\n ajax: {\r\n url: this.suggestNomineesUrlValue,\r\n dataType: \"json\",\r\n method: \"post\",\r\n delay: 250,\r\n data: function (params) {\r\n params.page = params.page || 1;\r\n return {\r\n searchText: params.term,\r\n page: params.page,\r\n pageSize: pageSize\r\n };\r\n },\r\n processResults: function (data, params) {\r\n params.page = params.page || 1;\r\n return {\r\n results: data.results,\r\n pagination: {\r\n more: (params.page * pageSize) < data.total\r\n }\r\n };\r\n },\r\n cache: false\r\n }\r\n });\r\n }\r\n\r\n toggleCustomReasonAndDisplayImageForSelectedReason({ target }) {\r\n const availableReasonImageUrl = this.availableReasonImageUrlsValue[target.value];\r\n this.customReasonTarget.classList.toggle(\"d-none\", target.value !== \"0\");\r\n if (this.hasReasonImageTarget) {\r\n this.reasonImageTarget.src = availableReasonImageUrl;\r\n this.reasonImageTarget.classList.toggle(\"d-none\", !availableReasonImageUrl);\r\n }\r\n }\r\n\r\n insertEmoji(emoji) {\r\n const selectionStart = this.detailsTarget.selectionStart;\r\n const selectionEnd = this.detailsTarget.selectionEnd;\r\n this.detailsTarget.value = this.detailsTarget.value.substring(0, selectionStart) + emoji + this.detailsTarget.value.substring(selectionEnd, this.detailsTarget.value.length);\r\n this.detailsTarget.selectionStart = selectionStart + emoji.length;\r\n this.detailsTarget.selectionEnd = this.detailsTarget.selectionStart;\r\n bootstrap.Dropdown.getOrCreateInstance(this.addAnEmojiButtonTarget).hide();\r\n this.detailsTarget.focus();\r\n }\r\n}\r\n", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"prizeContainer\", \"prizeImageContainer\", \"prizeImage\", \"prizeName\", \"prizeDescription\", \"addressContainer\"];\r\n }\r\n\r\n showSelectedPrize({ target }) {\r\n const selectedOption = target.options[target.selectedIndex];\r\n\r\n if (selectedOption.value) {\r\n this.prizeContainerTarget.classList.remove(\"d-none\");\r\n this.prizeImageContainerTarget.classList.toggle(\"d-none\", !selectedOption.dataset.image);\r\n this.prizeImageTarget.src = selectedOption.dataset.image;\r\n this.prizeNameTarget.innerHTML = selectedOption.dataset.title;\r\n this.prizeDescriptionTarget.innerHTML = selectedOption.dataset.description;\r\n } else {\r\n this.prizeContainerTarget.classList.add(\"d-none\");\r\n }\r\n }\r\n\r\n showAddressContainer({ target }) {\r\n const selectedOption = target.options[target.selectedIndex];\r\n this.addressContainerTarget.classList.toggle(\"d-none\", selectedOption.dataset.requiresAddress !== \"True\");\r\n }\r\n}", "\uFEFFimport {Controller} from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n profilePictureUrl: String,\r\n editPictureModalId: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"picture\"];\r\n }\r\n\r\n closeEditPictureModalAndRefreshPicture() {\r\n //TODO: should import Modal rather than relying on global bootstrap but having both causes 2 backdrops to render\r\n bootstrap.Modal.getInstance(document.getElementById(this.editPictureModalIdValue)).hide();\r\n this.pictureTarget.src = `${this.profilePictureUrlValue}?width=${this.pictureTarget.getAttribute(\"width\")}&height=${this.pictureTarget.getAttribute(\"height\")}&${new Date().getTime()}`;\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n notSetPictureUrl: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"shouldRemovePicture\", \"previewPicture\", \"removePicture\", \"pictureFile\", \"presetPicture\"];\r\n }\r\n\r\n dispatchChangedEvent({ detail: { xhr: { status } } }) {\r\n if (status === 200) {\r\n this.dispatch(\"changed\", { bubbles: true });\r\n }\r\n }\r\n\r\n removePicture(e) {\r\n e.preventDefault();\r\n this.shouldRemovePictureTarget.value = true;\r\n this.previewPictureTarget.style.backgroundImage = `url(\"${this.notSetPictureUrlValue}\")`;\r\n this.removePictureTarget.classList.add(\"invisible\");\r\n this.pictureFileTarget.value = null;\r\n this.presetPictureTargets.forEach(ppt => {\r\n ppt.checked = false;\r\n });\r\n }\r\n\r\n selectPictureFile() {\r\n const [file] = this.pictureFileTarget.files;\r\n this.shouldRemovePictureTarget.value = !file;\r\n this.removePictureTarget.classList.toggle(\"invisible\", !file);\r\n this.previewPictureTarget.style.backgroundImage = `url(\"${file ? URL.createObjectURL(file) : this.notSetPictureUrlValue}\")`;\r\n this.presetPictureTargets.forEach(ppt => {\r\n ppt.checked = false;\r\n });\r\n }\r\n\r\n selectPresetPicture({ target }) {\r\n this.shouldRemovePictureTarget.value = false;\r\n this.removePictureTarget.classList.remove(\"invisible\");\r\n this.previewPictureTarget.style.backgroundImage = `url(\"${target.parentNode.querySelector(\"img\").src}\")`;\r\n this.pictureFileTarget.value = null;\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport \"toastr\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n membershipUrl: String,\r\n referralCode: String,\r\n linkCopiedMessage: String,\r\n codeCopiedMessage: String\r\n }\r\n }\r\n\r\n copyLink() {\r\n navigator.clipboard.writeText(this.membershipUrlValue);\r\n toastr.success(this.linkCopiedMessageValue);\r\n }\r\n\r\n copyCode() {\r\n navigator.clipboard.writeText(this.referralCodeValue);\r\n toastr.success(this.codeCopiedMessageValue);\r\n }\r\n}\r\n", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n notSetPictureUrl: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\"previewPicture\", \"pictureFile\", \"presetPicture\"];\r\n }\r\n\r\n selectPictureFile() {\r\n const [file] = this.pictureFileTarget.files;\r\n this.previewPictureTarget.style.backgroundImage = `url(\"${file ? URL.createObjectURL(file) : this.notSetPictureUrlValue}\")`;\r\n this.presetPictureTargets.forEach(ppt => {\r\n ppt.checked = false;\r\n });\r\n }\r\n\r\n selectPresetPicture({ target }) {\r\n this.previewPictureTarget.style.backgroundImage = `url(\"${target.parentNode.querySelector(\"img\").src}\")`;\r\n this.pictureFileTarget.value = null;\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport Flickity from \"flickity\";\r\nimport \"flickity-as-nav-for\";\r\nimport pDebounce from \"p-debounce\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n customAmountText: String,\r\n calculatePointsForCustomVariantAmountUrl: String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"imageCarousel\", \"imageCarouselNav\", \"price\", \"points\", \"customVariant\", \"customVariantAmount\", \"giftRecipient\", \"giftOther\"];\r\n }\r\n\r\n initialize() {\r\n this.calculatePointsForCustomVariantAmount = pDebounce(this.calculatePointsForCustomVariantAmount, 250);\r\n }\r\n\r\n imageCarouselTargetConnected() {\r\n this.imageCarouselTarget.flickity = new Flickity(\r\n this.imageCarouselTarget,\r\n {\r\n cellAlign: \"left\",\r\n contain: true,\r\n pageDots: false,\r\n // arrowShape: \"M98.4,86c0,6.6-5.4,12-12,12h-72c-6.6,0-12-5.4-12-12V14c0-6.6,5.4-12,12-12h72c6.6,0,12,5.4,12,12V86z M71.4,47H36.7 l12.9-12.9c1.2-1.2,1.2-3.1,0-4.2s-3.1-1.2-4.2,0l-18,18c-1.2,1.2-1.2,3.1,0,4.2c0,0,0,0,0,0l18,18c1.2,1.2,3.1,1.2,4.2,0c1.2-1.2,1.2-3.1,0-4.2L36.7,53h34.8c1.7,0,3-1.3,3-3C74.4,48.4,73.1,47,71.4,47z\"\r\n }\r\n );\r\n }\r\n\r\n imageCarouselNavTargetConnected() {\r\n this.imageCarouselNavTarget.flickity = new Flickity(\r\n this.imageCarouselNavTarget,\r\n {\r\n asNavFor: this.imageCarouselTarget,\r\n cellAlign: \"left\",\r\n contain: true,\r\n prevNextButtons: false,\r\n pageDots: false\r\n }\r\n );\r\n }\r\n\r\n displaySelectedVariant({ target }) {\r\n const variantId = target.options[target.selectedIndex].dataset.variantId;\r\n const variantImage = this.imageCarouselTarget.querySelector(`[data-variant-id=\"${variantId}\"]`);\r\n const imageIndex = variantImage ? Array.prototype.indexOf.call(variantImage.parentNode.children, variantImage) : 0;\r\n this.imageCarouselTarget.flickity.select(imageIndex, false, true);\r\n\r\n if (this.hasImageCarouselNavTarget) {\r\n this.imageCarouselTarget.flickity.select(imageIndex, false, true);\r\n }\r\n\r\n const price = target.options[target.selectedIndex].dataset.price;\r\n\r\n if (this.hasPriceTarget && price) {\r\n this.priceTarget.innerHTML = price;\r\n }\r\n\r\n const points = target.options[target.selectedIndex].dataset.points;\r\n const preSalePoints = target.options[target.selectedIndex].dataset.preSalePoints;\r\n this.pointsTarget.innerHTML = preSalePoints ?\r\n `\r\n <span class=\"text-decoration-line-through text-secondary\">${preSalePoints}</span>\r\n <span class=\"text-danger\">${points}</span>\r\n ` :\r\n points;\r\n this.customVariantTarget.classList.toggle(\"d-none\", variantId !== \"-1\");\r\n\r\n if (variantId === \"-1\") {\r\n this.updateCustomVariantPoints();\r\n }\r\n }\r\n\r\n updateCustomVariantPoints() {\r\n if (this.customVariantAmountTarget.value) {\r\n void this.refreshCustomVariantPoints();\r\n } else {\r\n this.pointsTarget.innerHTML = this.customAmountTextValue;\r\n }\r\n }\r\n\r\n async refreshCustomVariantPoints() {\r\n if (!this.pointsTarget.querySelector(\".spinner-border\")) {\r\n this.pointsTarget.innerHTML = `<div class=\"spinner-border\"></div>`;\r\n }\r\n\r\n this.pointsTarget.innerHTML = await this.calculatePointsForCustomVariantAmount();\r\n }\r\n\r\n async calculatePointsForCustomVariantAmount() {\r\n const url = new URL(this.calculatePointsForCustomVariantAmountUrlValue, document.location.origin);\r\n url.searchParams.set(\"customVariantAmount\", this.customVariantAmountTarget.value);\r\n const response = await fetch(url);\r\n return await response.text();\r\n }\r\n\r\n setCustomVariantAmount(e) {\r\n e.preventDefault();\r\n this.customVariantAmountTarget.value = e.params.customVariantAmount;\r\n this.customVariantAmountTarget.focus();\r\n void this.updateCustomVariantPoints();\r\n }\r\n\r\n configureGiftFormForRecipientType({ target }) {\r\n const isSelfRecipientTypeSelected = target.options[target.selectedIndex].value === \"self\";\r\n this.giftRecipientTargets.forEach(grt => {\r\n grt.value = isSelfRecipientTypeSelected && grt.dataset.initialValue || \"\";\r\n });\r\n this.giftOtherTarget.classList.toggle(\"hide\", isSelfRecipientTypeSelected);\r\n }\r\n}\r\n", "const pDebounce = (fn, wait, options = {}) => {\n\tif (!Number.isFinite(wait)) {\n\t\tthrow new TypeError('Expected `wait` to be a finite number');\n\t}\n\n\tlet leadingValue;\n\tlet timeout;\n\tlet resolveList = [];\n\n\treturn function (...arguments_) {\n\t\treturn new Promise(resolve => {\n\t\t\tconst shouldCallNow = options.before && !timeout;\n\n\t\t\tclearTimeout(timeout);\n\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\ttimeout = null;\n\n\t\t\t\tconst result = options.before ? leadingValue : fn.apply(this, arguments_);\n\n\t\t\t\tfor (resolve of resolveList) {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\n\t\t\t\tresolveList = [];\n\t\t\t}, wait);\n\n\t\t\tif (shouldCallNow) {\n\t\t\t\tleadingValue = fn.apply(this, arguments_);\n\t\t\t\tresolve(leadingValue);\n\t\t\t} else {\n\t\t\t\tresolveList.push(resolve);\n\t\t\t}\n\t\t});\n\t};\n};\n\npDebounce.promise = function_ => {\n\tlet currentPromise;\n\n\treturn async function (...arguments_) {\n\t\tif (currentPromise) {\n\t\t\treturn currentPromise;\n\t\t}\n\n\t\ttry {\n\t\t\tcurrentPromise = function_.apply(this, arguments_);\n\t\t\treturn await currentPromise;\n\t\t} finally {\n\t\t\tcurrentPromise = undefined;\n\t\t}\n\t};\n};\n\nexport default pDebounce;\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport InfiniteScroll from \"infinite-scroll\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"rewards\",\"sortOrderSelection\"];\r\n }\r\n\r\n rewardsTargetConnected(target) {\r\n new InfiniteScroll(\r\n target,\r\n {\r\n fetchOptions: {\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\"\r\n }\r\n },\r\n path: \".js-load-next\",\r\n append: \".c-item-container\",\r\n history: true,\r\n }\r\n )\r\n }\r\n\r\n setAvailableSortOrder({ target }) {\r\n const isAllPerkType = target.options[target.selectedIndex].value === \"\";\r\n\r\n if (isAllPerkType) {\r\n this.sortOrderSelectionTarget.selectedIndex = 0;\r\n }\r\n\r\n for (const option of this.sortOrderSelectionTarget.options) {\r\n if (!option.hasAttribute(\"data-for-all-perk-types\")) {\r\n option.classList.toggle(\"d-none\", isAllPerkType);\r\n }\r\n }\r\n }\r\n}\r\n", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"target\", \"targetStatus\", \"targetProgress\", \"targetIndicator\"];\r\n }\r\n\r\n connect() {\r\n this.setTargetStatusAndIndicatorPosition();\r\n this.targetStatusTarget.style.opacity = 1;\r\n }\r\n\r\n setTargetStatusAndIndicatorPosition() {\r\n if (this.redrawAnimationFrame) {\r\n cancelAnimationFrame(this.redrawAnimationFrame);\r\n }\r\n\r\n this.redrawAnimationFrame = requestAnimationFrame(() => {\r\n // get element left and width\r\n const { left: elementLeft, width: elementWidth } = this.element.getBoundingClientRect();\r\n\r\n // get target left and width\r\n const { left: targetLeft, width: targetWidth } = this.targetTarget.getBoundingClientRect();\r\n const targetMiddle = targetLeft + targetWidth * this.targetTarget.dataset.progressPercentage / 100;\r\n\r\n // set target status left\r\n const targetStatusTargetWidth = this.targetStatusTarget.getBoundingClientRect().width;\r\n let optimalTargetStatusTargetLeft = targetMiddle - elementLeft - targetStatusTargetWidth / 2;\r\n\r\n if (optimalTargetStatusTargetLeft + targetStatusTargetWidth > elementWidth) {\r\n optimalTargetStatusTargetLeft = elementWidth - targetStatusTargetWidth;\r\n }\r\n\r\n this.targetStatusTarget.style.left = `${Math.max(optimalTargetStatusTargetLeft, 0)}px`;\r\n\r\n // set target indicator left\r\n const targetIndicatorTargetWidth = this.targetIndicatorTarget.getBoundingClientRect().width;\r\n let optimalTargetIndicatorTargetLeft = targetMiddle - elementLeft - targetIndicatorTargetWidth / 2;\r\n\r\n if (optimalTargetIndicatorTargetLeft + targetIndicatorTargetWidth > elementWidth) {\r\n optimalTargetIndicatorTargetLeft = elementWidth - targetIndicatorTargetWidth;\r\n }\r\n\r\n this.targetIndicatorTarget.style.left = `${Math.max(optimalTargetIndicatorTargetLeft, 0)}px`;\r\n });\r\n }\r\n\r\n setTargetIndicatorTransitioned() {\r\n this.targetIndicatorTarget.classList.add(\"transitioned\");\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\nimport { SCRATCH_TYPE, ScratchCard } from \"scratchcard-js\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n coverImage: String\r\n }\r\n }\r\n static get targets() {\r\n return [\"scratchcardContainer\", \"resultContainer\", \"confetti\", \"revealButton\", \"completeButton\"];\r\n }\r\n\r\n showResult() {\r\n setTimeout(\r\n () => {\r\n this.scratchcardContainerTarget.style.userSelect = \"auto\";\r\n this.resultContainerTarget.classList.remove(\"d-none\");\r\n\r\n if (this.hasConfettiTarget) {\r\n this.confettiTarget.classList.remove(\"d-none\");\r\n }\r\n\r\n this.revealButtonTarget.classList.add(\"d-none\");\r\n this.completeButtonTarget.classList.remove(\"d-none\");\r\n },\r\n 250\r\n );\r\n }\r\n\r\n async renderScratchcard() {\r\n\r\n this.scratchcardContainerTarget.scratchCard = new ScratchCard(\r\n this.scratchcardContainerTarget,\r\n {\r\n callback: () => this.showResult(),\r\n clearZoneRadius: 50,\r\n containerHeight: this.scratchcardContainerTarget.offsetHeight,\r\n containerWidth: this.scratchcardContainerTarget.offsetWidth,\r\n imageForwardSrc: this.coverImageValue,\r\n imageBackgroundSrc: '',\r\n htmlBackground: `<div></div>`,\r\n scratchType: SCRATCH_TYPE.LINE\r\n }\r\n );\r\n await this.scratchcardContainerTarget.scratchCard.init();\r\n this.scratchcardContainerTarget.style.opacity = 1;\r\n }\r\n\r\n reveal() {\r\n this.scratchcardContainerTarget.scratchCard.clear();\r\n this.showResult();\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nconst countdownFrom = 10;\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n resendCodeUrl: String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"resendCode\", \"countdown\", \"successMessage\", \"failedMessage\"];\r\n }\r\n\r\n connect() {\r\n if (this.resendCodeTarget.disabled) {\r\n this.countdown = countdownFrom;\r\n this.enableResendCodeTargetAfterCountdown();\r\n }\r\n }\r\n\r\n enableResendCodeTargetAfterCountdown() {\r\n const interval = setInterval(\r\n () => {\r\n this.countdown--;\r\n this.countdownTarget.textContent = `(${this.countdown})`;\r\n\r\n if (this.countdown > 0) {\r\n return;\r\n }\r\n \r\n this.resendCodeTarget.disabled = false;\r\n this.countdownTarget.textContent = \"\";\r\n clearInterval(interval);\r\n },\r\n 1000\r\n );\r\n }\r\n\r\n async resendCode(e) {\r\n e.preventDefault();\r\n e.target.disabled = true;\r\n this.countdown = countdownFrom;\r\n this.countdownTarget.textContent = `(${this.countdown})`;\r\n this.successMessageTarget.classList.add(\"d-none\");\r\n this.failedMessageTarget.classList.add(\"d-none\");\r\n const response = await fetch(this.resendCodeUrlValue, { method: \"post\" });\r\n const { successfullySentCode } = await response.json();\r\n this.successMessageTarget.classList.toggle(\"d-none\", !successfullySentCode);\r\n this.failedMessageTarget.classList.toggle(\"d-none\", successfullySentCode);\r\n this.enableResendCodeTargetAfterCountdown();\r\n }\r\n}", "/**\n * Get a random integer between `min` (inclusive) and `max` (exclusive).\n */\nexport function getRandomInt(min = 0, max = 0) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\n/**\n * Get a random number between `min` (inclusive) and `max` (inclusive).\n * Control the number of decimal places with `round`.\n */\nexport function getRandomFloat(min = 0, max = 0, round = 14) {\n return parseFloat((Math.random() * (max - min) + min).toFixed(round));\n}\n\n/**\n * Convert degrees to radians.\n */\nexport function degRad(degrees = 0) {\n return degrees * Math.PI / 180;\n}\n\n/**\n * Return true if `angle` is between `arcStart` (inclusive) and `arcEnd` (exclusive).\n * Example: `(0, 359, 1) == true`\n * Example: `(0, 1, 2) == false`\n */\nexport function isAngleBetween(angle, arcStart, arcEnd) {\n if (arcStart < arcEnd) return arcStart <= angle && angle < arcEnd;\n return arcStart <= angle || angle < arcEnd;\n}\n\n/**\n * Average the values in `array`.\n * Only operate on truthy values.\n * Truthy values that are not Numbers count as 1.\n * Return 0 if the array is empty.\n */\nexport function aveArray(array = []) {\n let sum = 0;\n for (const val of array) {\n if (val) sum += ((typeof val === 'number') ? val : 1);\n }\n return sum / array.length || 0;\n}\n\n/**\n * Calculate the largest font size that `text` can have without exceeding `maxWidth`.\n * Won't work unless `fontFamily` has been loaded.\n */\nexport function getFontSizeToFit(text, fontFamily, maxWidth, canvasContext) {\n canvasContext.save();\n canvasContext.font = `1px ${fontFamily}`;\n const w = canvasContext.measureText(text).width;\n canvasContext.restore();\n return maxWidth / w;\n}\n\n/**\n * Return true if the given point is inside a circle.\n * cx, cy is circle center.\n * radius is circle radius.\n */\nexport function isPointInCircle(point = {x: 0, y: 0}, cx, cy, radius) {\n const distanceSquared = ((point.x - cx) ** 2) + ((point.y - cy) ** 2);\n return distanceSquared <= (radius ** 2);\n}\n\n/**\n * Translate the given point from the viewport's coordinate space to the element's coordinate space.\n */\nexport function translateXYToElement(point = {x: 0, y: 0}, element = {}, devicePixelRatio = 1) {\n const rect = element.getBoundingClientRect();\n return {\n x: (point.x - rect.left) * devicePixelRatio,\n y: (point.y - rect.top) * devicePixelRatio,\n };\n}\n\nexport function getMouseButtonsPressed(event = {}) {\n return [1, 2, 4, 8, 16].filter(i => event.buttons & i);\n}\n\n/**\n * Source: https://stackoverflow.com/a/47653643/737393\n */\nexport function getAngle(originX, originY, targetX, targetY) {\n const dx = originX - targetX;\n const dy = originY - targetY;\n\n let theta = Math.atan2(-dy, -dx);\n theta *= 180 / Math.PI;\n if (theta < 0) theta += 360;\n\n return theta;\n}\n\n/**\n * Return the distance between two points.\n */\nexport function getDistanceBetweenPoints(point1 = {x: 0, y: 0}, point2 = {x: 0, y: 0}) {\n return Math.hypot(point2.x - point1.x, point2.y - point1.y);\n}\n\n/**\n * Add two angles together.\n * Return a positive number between 0 and 359.9999.\n */\nexport function addAngle(a = 0, b = 0) {\n const sum = a + b;\n let result;\n\n if (sum > 0) {\n result = sum % 360;\n } else {\n result = 360 + (sum % 360);\n }\n if (result === 360) result = 0;\n\n return result;\n}\n\n/**\n * Return the shortest difference (in degrees) between two angles.\n * Only accept angles between 0 and 360.\n */\nexport function diffAngle(a = 0, b = 0) {\n const offsetFrom180 = 180 - b;\n const aWithOffset = addAngle(a, offsetFrom180);\n return 180 - aWithOffset;\n}\n\n/**\n * Calculate what the new rotation of a wheel should be, so that the relative angle `targetAngle` will be at 0 degrees (north).\n * targetAngle = a value between 0 and 360.\n * direction = the direction the wheel can spin. 1 for clockwise, -1 for antiClockwise.\n */\nexport function calcWheelRotationForTargetAngle(currentRotation = 0, targetAngle = 0, direction = 1) {\n\n let angle = ((currentRotation % 360) + targetAngle) % 360;\n\n // Ignore tiny values.\n // Due to floating point arithmetic, ocassionally the input angles won't add up exactly\n // and this can push the angle slightly above 360.\n angle = fixFloat(angle);\n\n // Apply direction:\n angle = ((direction === 1) ? (360 - angle) : 360 + angle) % 360;\n angle *= direction;\n\n return currentRotation + angle;\n}\n\nexport function isObject(v) {\n return typeof v === 'object' && !Array.isArray(v) && v !== null;\n}\n\nexport function isNumber(n) {\n return typeof n === 'number' && !Number.isNaN(n);\n}\n\nexport function setProp({val, isValid, errorMessage, defaultValue, action = null}) {\n if (isValid) {\n return (action) ? action() : val;\n } else if (val === undefined) {\n return defaultValue;\n }\n throw new Error(errorMessage);\n}\n\n/**\n * Return true if image has loaded.\n */\nexport function isImageLoaded(image) {\n // We can detect a broken image (didn't load) by checking the natural width/height.\n return image && image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0;\n}\n\nexport function fixFloat(f = 0) {\n return Number(f.toFixed(9));\n}\n\n/**\n * Easing function.\n */\nexport function easeSinOut(n) {\n return Math.sin((n * Math.PI) / 2);\n}\n", "/**\n * Adjustment when drawing arcs to ensure 0\u00B0 is north (due to canvas drawing arcs from 90\u00B0).\n */\nexport const arcAdjust = -90;\n\nexport const baseCanvasSize = 500; // 500 seemed to be a good value for this.\n\n/**\n * The period in milliseconds that we record drag events.\n * Used to calculate how fast the wheel should spin after the drag ends.\n * For example, if the wheel was dragged 20 degrees over the last 250ms,\n * then it should continue rotating at a speed of 20 degrees every 250ms after the drag ends.\n */\nexport const dragCapturePeriod = 250;\n\n/**\n * Text alignment enum.\n */\nexport const AlignText = Object.freeze({\n left: 'left',\n right: 'right',\n center: 'center',\n});\n\n/**\n * Wheel property defaults.\n */\nexport const Defaults = Object.freeze({\n wheel: {\n borderColor: '#000',\n borderWidth: 1,\n debug: false,\n image: null,\n isInteractive: true,\n itemBackgroundColors: ['#fff'],\n itemLabelAlign: AlignText.right,\n itemLabelBaselineOffset: 0,\n itemLabelColors: ['#000'],\n itemLabelFont: 'sans-serif',\n itemLabelFontSizeMax: baseCanvasSize,\n itemLabelRadius: 0.85,\n itemLabelRadiusMax: 0.2,\n itemLabelRotation: 0,\n itemLabelStrokeColor: '#fff',\n itemLabelStrokeWidth: 0,\n items: [],\n lineColor: '#000',\n lineWidth: 1,\n pixelRatio: 0,\n radius: 0.95,\n rotation: 0,\n rotationResistance: -35,\n rotationSpeedMax: 300,\n offset: {w: 0, h: 0},\n onCurrentIndexChange: null,\n onRest: null,\n onSpin: null,\n overlayImage: null,\n pointerAngle: 0,\n },\n item: {\n backgroundColor: null,\n image: null,\n imageOpacity: 1,\n imageRadius: 0.5,\n imageRotation: 0,\n imageScale: 1,\n label: '',\n labelColor: null,\n value: null,\n weight: 1,\n },\n});\n\nexport const Debugging = Object.freeze({\n pointerLineColor: '#ff00ff',\n labelOutlineColor: '#ff00ff',\n labelRadiusColor: '#00ff00',\n dragEventHue: 200,\n});\n", "export function register(wheel = {}) {\n\n registerPointerEvents(wheel);\n\n // Register window resize event:\n wheel._handler_onResize = e => wheel.resize(e);\n window.addEventListener('resize', wheel._handler_onResize);\n\n // Monitor when the device resolution (devicePixelRatio) changes:\n // See https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio\n const updatePixelRatio = () => {\n wheel.resize();\n matchMedia(`(resolution: ${pr}dppx)`)\n .addEventListener('change', updatePixelRatio, { once: true });\n };\n\n}\n\nexport function unregister(wheel = {}) {\n\n const canvas = wheel.canvas;\n\n if ('PointerEvent' in window) {\n canvas.removeEventListener('pointerdown', wheel._handler_onPointerDown);\n canvas.removeEventListener('pointermove', wheel._handler_onPointerMoveRefreshCursor);\n } else {\n canvas.removeEventListener('touchstart', wheel._handler_onTouchStart);\n canvas.removeEventListener('mousedown', wheel._handler_onMouseDown);\n canvas.removeEventListener('mousemove', wheel._handler_onMouseMoveRefreshCursor);\n }\n\n window.removeEventListener('resize', wheel._handler_onResize);\n\n}\n\nfunction registerPointerEvents(wheel = {}) {\n // Adapted from https://glitch.com/~jake-in-the-box\n\n const canvas = wheel.canvas;\n\n wheel._handler_onPointerMoveRefreshCursor = (e = {}) => {\n const point = {\n x: e.clientX,\n y: e.clientY,\n };\n wheel.isCursorOverWheel = wheel.wheelHitTest(point);\n wheel.refreshCursor();\n };\n\n wheel._handler_onMouseMoveRefreshCursor = (e = {}) => {\n const point = {\n x: e.clientX,\n y: e.clientY,\n };\n wheel.isCursorOverWheel = wheel.wheelHitTest(point);\n wheel.refreshCursor();\n };\n\n wheel._handler_onPointerDown = (e = {}) => {\n\n const point = {\n x: e.clientX,\n y: e.clientY,\n };\n\n if (!wheel.isInteractive) return;\n if (!wheel.wheelHitTest(point)) return;\n\n e.preventDefault();\n wheel.dragStart(point);\n canvas.setPointerCapture(e.pointerId);\n canvas.addEventListener('pointermove', onPointerMove);\n canvas.addEventListener('pointerup', onPointerUp);\n canvas.addEventListener('pointercancel', onPointerUp);\n canvas.addEventListener('pointerout', onPointerUp);\n\n function onPointerMove(e = {}) {\n e.preventDefault();\n wheel.dragMove({\n x: e.clientX,\n y: e.clientY,\n });\n }\n\n function onPointerUp(e = {}) {\n e.preventDefault();\n canvas.releasePointerCapture(e.pointerId);\n canvas.removeEventListener('pointermove', onPointerMove);\n canvas.removeEventListener('pointerup', onPointerUp);\n canvas.removeEventListener('pointercancel', onPointerUp);\n canvas.removeEventListener('pointerout', onPointerUp);\n wheel.dragEnd();\n }\n\n };\n\n wheel._handler_onMouseDown = (e = {}) => {\n\n const point = {\n x: e.clientX,\n y: e.clientY,\n };\n\n if (!wheel.isInteractive) return;\n if (!wheel.wheelHitTest(point)) return;\n\n wheel.dragStart(point);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n\n function onMouseMove(e = {}) {\n e.preventDefault();\n wheel.dragMove({\n x: e.clientX,\n y: e.clientY,\n });\n }\n\n function onMouseUp(e = {}) {\n e.preventDefault();\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n wheel.dragEnd();\n }\n\n };\n\n wheel._handler_onTouchStart = (e = {}) => {\n\n const point = {\n x: e.targetTouches[0].clientX,\n y: e.targetTouches[0].clientY,\n };\n\n if (!wheel.isInteractive) return;\n if (!wheel.wheelHitTest(point)) return;\n\n e.preventDefault();\n wheel.dragStart(point);\n canvas.addEventListener('touchmove', onTouchMove);\n canvas.addEventListener('touchend', onTouchEnd);\n canvas.addEventListener('touchcancel', onTouchEnd);\n\n function onTouchMove(e = {}) {\n e.preventDefault();\n wheel.dragMove({\n x: e.targetTouches[0].clientX,\n y: e.targetTouches[0].clientY,\n });\n }\n\n function onTouchEnd(e = {}) {\n e.preventDefault();\n canvas.removeEventListener('touchmove', onTouchMove);\n canvas.removeEventListener('touchend', onTouchEnd);\n canvas.removeEventListener('touchcancel', onTouchEnd);\n wheel.dragEnd();\n }\n\n };\n\n if ('PointerEvent' in window) {\n canvas.addEventListener('pointerdown', wheel._handler_onPointerDown);\n canvas.addEventListener('pointermove', wheel._handler_onPointerMoveRefreshCursor);\n } else {\n canvas.addEventListener('touchstart', wheel._handler_onTouchStart);\n canvas.addEventListener('mousedown', wheel._handler_onMouseDown);\n canvas.addEventListener('mousemove', wheel._handler_onMouseMoveRefreshCursor);\n }\n\n}\n", "import * as util from './util.js';\nimport {Defaults} from './constants.js';\n\nexport class Item {\n\n constructor(wheel, props = {}) {\n\n // Validate params.\n if (!util.isObject(wheel)) throw new Error('wheel must be an instance of Wheel'); // Ideally we would use instanceof, however importing the Wheel class would create a circular ref.\n if (!util.isObject(props) && props !== null) throw new Error('props must be an Object or null');\n\n this._wheel = wheel;\n\n // Assign default values.\n // This avoids null exceptions when we initalise each property one-by-one in `init()`.\n for (const i of Object.keys(Defaults.item)) {\n this['_' + i] = Defaults.item[i];\n }\n\n if (props) {\n this.init(props);\n } else {\n this.init(Defaults.item);\n }\n\n }\n\n /**\n * Initialise all properties.\n */\n init(props = {}) {\n this.backgroundColor = props.backgroundColor;\n this.image = props.image;\n this.imageOpacity = props.imageOpacity;\n this.imageRadius = props.imageRadius;\n this.imageRotation = props.imageRotation;\n this.imageScale = props.imageScale;\n this.label = props.label;\n this.labelColor = props.labelColor;\n this.value = props.value;\n this.weight = props.weight;\n }\n\n /**\n * The background color of the item.\n * When `null`, the actual color rendered will fall back to `Wheel.itemBackgroundColors`.\n * Example: `'#fff'`.\n */\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(val) {\n if (typeof val === 'string') {\n this._backgroundColor = val;\n } else {\n this._backgroundColor = Defaults.item.backgroundColor;\n }\n this._wheel.refresh();\n }\n\n /**\n * The url of an image that will be drawn on the item.\n * Any part of the image that extends outside the item will be clipped.\n * The image will be drawn over the top of `Item.backgroundColor`.\n */\n get image() {\n return this._image;\n }\n set image(val) {\n let img;\n if (typeof val === 'string') {\n img = new Image();\n img.src = val;\n img.onload = e => this._wheel.refresh();\n } else {\n img = Defaults.item.image;\n }\n this._image = img;\n this._wheel.refresh();\n }\n\n /**\n * The opacity (as a percent) of `Item.image`.\n * Useful if you want to fade the image to make the item's label stand out.\n */\n get imageOpacity() {\n return this._imageOpacity;\n }\n set imageOpacity(val) {\n if (typeof val === 'number') {\n this._imageOpacity = val;\n } else {\n this._imageOpacity = Defaults.item.imageOpacity;\n }\n this._wheel.refresh();\n }\n\n /**\n * The point along the radius (as a percent, starting from the center of the wheel) to draw the center of `Item.image`.\n */\n get imageRadius() {\n return this._imageRadius;\n }\n set imageRadius(val) {\n if (typeof val === 'number') {\n this._imageRadius = val;\n } else {\n this._imageRadius = Defaults.item.imageRadius;\n }\n this._wheel.refresh();\n }\n\n /**\n * The rotation (angle in degrees) of `Item.image`.\n */\n get imageRotation() {\n return this._imageRotation;\n }\n set imageRotation(val) {\n if (typeof val === 'number') {\n this._imageRotation = val;\n } else {\n this._imageRotation = Defaults.item.imageRotation;\n }\n this._wheel.refresh();\n }\n\n /**\n * The scale (as a percent) to resize `Item.image`.\n */\n get imageScale() {\n return this._imageScale;\n }\n set imageScale(val) {\n if (typeof val === 'number') {\n this._imageScale = val;\n } else {\n this._imageScale = Defaults.item.imageScale;\n }\n this._wheel.refresh();\n }\n\n /**\n * The text that will be drawn on the item.\n */\n get label() {\n return this._label;\n }\n set label(val) {\n if (typeof val === 'string') {\n this._label = val;\n } else {\n this._label = Defaults.item.label;\n }\n this._wheel.refresh();\n }\n\n /**\n * The color of the label.\n * When `null`, the actual color rendered will fall back to `Wheel.itemLabelColors`.\n * Example: `'#000'`.\n */\n get labelColor() {\n return this._labelColor;\n }\n set labelColor(val) {\n if (typeof val === 'string') {\n this._labelColor = val;\n } else {\n this._labelColor = Defaults.item.labelColor;\n }\n this._wheel.refresh();\n }\n\n /**\n * Some value that has meaning to your application.\n * For example, a reference to the object representing the item on the wheel, or a database id.\n */\n get value() {\n return this._value;\n }\n set value(val) {\n if (val !== undefined) {\n this._value = val;\n } else {\n this._value = Defaults.item.value;\n }\n }\n\n /**\n * The proportional size of the item relative to other items on the wheel.\n * For example, if you have 2 items where `item[0]` has a weight of `1` and `item[1]` has a weight of `2`,\n * then `item[0]` will take up 1/3 of the space on the wheel.\n */\n get weight() {\n return this._weight;\n }\n set weight(val) {\n if (typeof val === 'number') {\n this._weight = val;\n } else {\n this._weight = Defaults.item.weight;\n }\n }\n\n /**\n * Get the 0-based index of this item.\n */\n getIndex() {\n const index = this._wheel.items.findIndex(i => i === this);\n if (index === -1) throw new Error('Item not found in parent Wheel');\n return index;\n }\n\n /**\n * Get the angle (in degrees) that this item ends at (exclusive), ignoring the current `rotation` of the wheel.\n */\n getCenterAngle() {\n const angle = this._wheel.getItemAngles()[ this.getIndex() ];\n return angle.start + ((angle.end - angle.start) / 2);\n }\n\n /**\n * Get the angle (in degrees) that this item starts at (inclusive), ignoring the current `rotation` of the wheel.\n */\n getStartAngle() {\n return this._wheel.getItemAngles()[ this.getIndex() ].start;\n }\n\n /**\n * Get the angle (in degrees) that this item ends at (inclusive), ignoring the current `rotation` of the wheel.\n */\n getEndAngle() {\n return this._wheel.getItemAngles()[ this.getIndex() ].end;\n }\n\n /**\n * Return a random angle (in degrees) between this item's start angle (inclusive) and end angle (inclusive).\n */\n getRandomAngle() {\n return util.getRandomFloat(this.getStartAngle(), this.getEndAngle());\n }\n\n}\n", "import * as util from './util.js';\nimport * as Constants from './constants.js';\nimport {Defaults} from './constants.js';\nimport * as events from './events.js';\nimport {Item} from './item.js';\n\nexport class Wheel {\n\n /**\n * Create the wheel inside a container Element and initialise it with props.\n * `container` must be an Element.\n * `props` must be an Object or null.\n */\n constructor(container, props = {}) {\n\n // Validate params.\n if (!(container instanceof Element)) throw new Error('container must be an instance of Element');\n if (!util.isObject(props) && props !== null) throw new Error('props must be an Object or null');\n\n // Init some things:\n this._frameRequestId = null;\n this._rotationSpeed = 0;\n this._rotationDirection = 1;\n this._spinToTimeEnd = null; // Used to animate the wheel for spinTo()\n this._lastSpinFrameTime = null; // Used to animate the wheel for spin()\n\n this.add(container);\n\n // Assign default values.\n // This avoids null exceptions when we initalise each property one-by-one in `init()`.\n for (const i of Object.keys(Defaults.wheel)) {\n this['_' + i] = Defaults.wheel[i];\n }\n\n if (props) {\n this.init(props);\n } else {\n this.init(Defaults.wheel);\n }\n\n }\n\n /**\n * Initialise all properties.\n */\n init(props = {}) {\n this._isInitialising = true;\n\n this.borderColor = props.borderColor;\n this.borderWidth = props.borderWidth;\n this.debug = props.debug;\n this.image = props.image;\n this.isInteractive = props.isInteractive;\n this.itemBackgroundColors = props.itemBackgroundColors;\n this.itemLabelAlign = props.itemLabelAlign;\n this.itemLabelBaselineOffset = props.itemLabelBaselineOffset;\n this.itemLabelColors = props.itemLabelColors;\n this.itemLabelFont = props.itemLabelFont;\n this.itemLabelFontSizeMax = props.itemLabelFontSizeMax;\n this.itemLabelRadius = props.itemLabelRadius;\n this.itemLabelRadiusMax = props.itemLabelRadiusMax;\n this.itemLabelRotation = props.itemLabelRotation;\n this.itemLabelStrokeColor = props.itemLabelStrokeColor;\n this.itemLabelStrokeWidth = props.itemLabelStrokeWidth;\n this.items = props.items;\n this.lineColor = props.lineColor;\n this.lineWidth = props.lineWidth;\n this.pixelRatio = props.pixelRatio;\n this.rotationSpeedMax = props.rotationSpeedMax;\n this.radius = props.radius;\n this.rotation = props.rotation;\n this.rotationResistance = props.rotationResistance;\n this.offset = props.offset;\n this.onCurrentIndexChange = props.onCurrentIndexChange;\n this.onRest = props.onRest;\n this.onSpin = props.onSpin;\n this.overlayImage = props.overlayImage;\n this.pointerAngle = props.pointerAngle;\n }\n\n /**\n * Add the wheel to the DOM and register event handlers.\n */\n add(container) {\n this._canvasContainer = container;\n this.canvas = document.createElement('canvas');\n this._context = this.canvas.getContext('2d');\n this._canvasContainer.append(this.canvas);\n events.register(this);\n if (this._isInitialising === false) this.resize(); // Initalise the canvas's dimensions (but not when called from the constructor).\n }\n\n /**\n * Remove the wheel from the DOM and unregister event handlers.\n */\n remove() {\n window.cancelAnimationFrame(this._frameRequestId);\n events.unregister(this);\n this._canvasContainer.removeChild(this.canvas);\n this._canvasContainer = null;\n this.canvas = null;\n this._context = null;\n }\n\n /**\n * Resize the wheel to fit inside it's container.\n * Call this after changing any property of the wheel that relates to it's size or position.\n */\n resize() {\n\n // Get the smallest dimension of `canvasContainer`:\n const [w, h] = [\n this._canvasContainer.clientWidth * this.getActualPixelRatio(),\n this._canvasContainer.clientHeight * this.getActualPixelRatio(),\n ];\n\n // Calc the size that the wheel needs to be to fit in it's container:\n const minSize = Math.min(w, h);\n const wheelSize = {\n w: minSize - (minSize * this.offset.w),\n h: minSize - (minSize * this.offset.h),\n };\n const scale = Math.min(w / wheelSize.w, h / wheelSize.h);\n this._size = Math.max(wheelSize.w * scale, wheelSize.h * scale);\n\n // Resize canvas element:\n this.canvas.style.width = this._canvasContainer.clientWidth + 'px';\n this.canvas.style.height = this._canvasContainer.clientHeight + 'px';\n this.canvas.width = w;\n this.canvas.height = h;\n\n // Re-calculate the center of the wheel:\n this._center = {\n x: w / 2 + (w * this.offset.w),\n y: h / 2 + (h * this.offset.h),\n };\n\n // Recalculate the wheel radius:\n this._actualRadius = (this._size / 2) * this.radius;\n\n // Adjust the font size of labels so they all fit inside `wheelRadius`:\n this.itemLabelFontSize = this.itemLabelFontSizeMax * (this._size / Constants.baseCanvasSize);\n this.labelMaxWidth = this._actualRadius * (this.itemLabelRadius - this.itemLabelRadiusMax);\n for (const item of this._items) {\n this.itemLabelFontSize = Math.min(this.itemLabelFontSize, util.getFontSizeToFit(item.label, this.itemLabelFont, this.labelMaxWidth, this._context));\n }\n\n this.refresh();\n\n }\n\n /**\n * Main animation loop.\n */\n draw(now = 0) {\n\n this._frameRequestId = null;\n\n const ctx = this._context;\n\n // Clear canvas.\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n this.animateRotation(now);\n\n const angles = this.getItemAngles(this._rotation);\n\n const actualBorderWidth = this.getScaledNumber(this._borderWidth);\n\n // Set font:\n ctx.textBaseline = 'middle';\n ctx.textAlign = this.itemLabelAlign;\n ctx.font = this.itemLabelFontSize + 'px ' + this.itemLabelFont;\n\n ctx.save();\n\n // Build paths:\n for (const [i, a] of angles.entries()) {\n\n const path = new Path2D();\n path.moveTo(this._center.x, this._center.y);\n path.arc(\n this._center.x,\n this._center.y,\n this._actualRadius - (actualBorderWidth / 2),\n util.degRad(a.start + Constants.arcAdjust),\n util.degRad(a.end + Constants.arcAdjust)\n );\n\n this._items[i].path = path;\n\n }\n\n this.drawItemBackgrounds(ctx, angles);\n this.drawItemImages(ctx, angles);\n this.drawItemLines(ctx, angles);\n this.drawItemLabels(ctx, angles);\n this.drawBorder(ctx);\n this.drawImage(ctx, this._image, false);\n this.drawImage(ctx, this._overlayImage, true);\n this.drawPointerLine(ctx);\n this.drawDragEvents(ctx);\n\n this._isInitialising = false;\n\n }\n\n drawItemBackgrounds(ctx, angles = []) {\n\n for (const [i, a] of angles.entries()) {\n\n const item = this._items[i];\n\n ctx.fillStyle = item.backgroundColor ?? (\n // Fall back to a value from the repeating set:\n this._itemBackgroundColors[i % this._itemBackgroundColors.length]\n );\n\n ctx.fill(item.path);\n\n }\n\n }\n\n drawItemImages(ctx, angles = []) {\n\n for (const [i, a] of angles.entries()) {\n\n const item = this._items[i];\n\n if (!util.isImageLoaded(item.image)) continue;\n\n ctx.save();\n\n ctx.clip(item.path);\n\n const angle = a.start + ((a.end - a.start) / 2);\n\n ctx.translate(\n this._center.x + Math.cos(util.degRad(angle + Constants.arcAdjust)) * (this._actualRadius * item.imageRadius),\n this._center.y + Math.sin(util.degRad(angle + Constants.arcAdjust)) * (this._actualRadius * item.imageRadius)\n );\n\n ctx.rotate(util.degRad(angle + item.imageRotation));\n\n ctx.globalAlpha = item.imageOpacity;\n\n const width = (this._size / 500) * item.image.width * item.imageScale;\n const height = (this._size / 500) * item.image.height * item.imageScale;\n const widthHalf = -width / 2;\n const heightHalf = -height / 2;\n\n ctx.drawImage(\n item.image,\n widthHalf,\n heightHalf,\n width,\n height\n );\n\n ctx.restore();\n\n }\n\n }\n\n drawImage(ctx, image, isOverlay = false) {\n\n if (!util.isImageLoaded(image)) return;\n\n ctx.translate(\n this._center.x,\n this._center.y\n );\n\n if (!isOverlay) ctx.rotate(util.degRad(this._rotation));\n\n // Draw the image centered and scaled to fit the wheel's container:\n // For convenience, scale the 'normal' image to the size of the wheel radius\n // (so a change in the wheel radius won't require the image to also be updated).\n const size = isOverlay ? this._size : this._size * this.radius;\n const sizeHalf = -(size / 2);\n\n ctx.drawImage(\n image,\n sizeHalf,\n sizeHalf,\n size,\n size\n );\n\n ctx.resetTransform();\n\n }\n\n drawPointerLine(ctx) {\n\n if (!this.debug) return;\n\n ctx.translate(\n this._center.x,\n this._center.y\n );\n\n ctx.rotate(util.degRad(this._pointerAngle + Constants.arcAdjust));\n\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this._actualRadius * 2, 0);\n\n ctx.strokeStyle = Constants.Debugging.pointerLineColor;\n ctx.lineWidth = this.getScaledNumber(2);\n ctx.stroke();\n\n ctx.resetTransform();\n\n }\n\n drawBorder(ctx) {\n\n if (this._borderWidth <= 0) return;\n\n const actualBorderWidth = this.getScaledNumber(this._borderWidth);\n const actualBorderColor = this._borderColor || 'transparent';\n\n ctx.beginPath();\n ctx.strokeStyle = actualBorderColor;\n ctx.lineWidth = actualBorderWidth;\n ctx.arc(this._center.x, this._center.y, this._actualRadius - (actualBorderWidth / 2), 0, 2 * Math.PI);\n ctx.stroke();\n\n if (this.debug) {\n const actualDebugLineWidth = this.getScaledNumber(1);\n\n ctx.beginPath();\n ctx.strokeStyle = ctx.strokeStyle = Constants.Debugging.labelRadiusColor;\n ctx.lineWidth = actualDebugLineWidth;\n ctx.arc(this._center.x, this._center.y, this._actualRadius * this.itemLabelRadius, 0, 2 * Math.PI);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.strokeStyle = ctx.strokeStyle = Constants.Debugging.labelRadiusColor;\n ctx.lineWidth = actualDebugLineWidth;\n ctx.arc(this._center.x, this._center.y, this._actualRadius * this.itemLabelRadiusMax, 0, 2 * Math.PI);\n ctx.stroke();\n }\n\n }\n\n drawItemLines(ctx, angles = []) {\n\n if (this._lineWidth <= 0) return;\n\n const actualLineWidth = this.getScaledNumber(this._lineWidth);\n const actualBorderWidth = this.getScaledNumber(this._borderWidth);\n\n ctx.translate(\n this._center.x,\n this._center.y\n );\n\n for (const angle of angles) {\n ctx.rotate(util.degRad(angle.start + Constants.arcAdjust));\n\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this._actualRadius - actualBorderWidth, 0);\n\n ctx.strokeStyle = this.lineColor;\n ctx.lineWidth = actualLineWidth;\n ctx.stroke();\n\n ctx.rotate(-util.degRad(angle.start + Constants.arcAdjust));\n }\n\n ctx.resetTransform();\n\n }\n\n drawItemLabels(ctx, angles = []) {\n\n const actualItemLabelBaselineOffset = this.itemLabelFontSize * -this.itemLabelBaselineOffset;\n const actualDebugLineWidth = this.getScaledNumber(1);\n const actualLabelStrokeWidth = this.getScaledNumber(this._itemLabelStrokeWidth * 2);\n\n for (const [i, a] of angles.entries()) {\n\n const item = this._items[i];\n\n const actualLabelColor = item.labelColor\n || (this._itemLabelColors[i % this._itemLabelColors.length] // Fall back to a value from the repeating set.\n || 'transparent'); // Handle empty string/undefined.\n\n if (item.label.trim() === '' || actualLabelColor === 'transparent') continue;\n\n ctx.save();\n\n ctx.clip(item.path);\n\n const angle = a.start + ((a.end - a.start) / 2);\n\n ctx.translate(\n this._center.x + Math.cos(util.degRad(angle + Constants.arcAdjust)) * (this._actualRadius * this.itemLabelRadius),\n this._center.y + Math.sin(util.degRad(angle + Constants.arcAdjust)) * (this._actualRadius * this.itemLabelRadius)\n );\n\n ctx.rotate(util.degRad(angle + Constants.arcAdjust));\n\n ctx.rotate(util.degRad(this.itemLabelRotation));\n\n if (this.debug) {\n // Draw the outline of the label:\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(-this.labelMaxWidth, 0);\n\n ctx.strokeStyle = Constants.Debugging.labelOutlineColor;\n ctx.lineWidth = actualDebugLineWidth;\n ctx.stroke();\n\n ctx.strokeRect(0, -this.itemLabelFontSize / 2, -this.labelMaxWidth, this.itemLabelFontSize);\n }\n\n if (this._itemLabelStrokeWidth > 0) {\n ctx.lineWidth = actualLabelStrokeWidth;\n ctx.strokeStyle = this._itemLabelStrokeColor;\n ctx.lineJoin = 'round';\n ctx.strokeText(item.label, 0, actualItemLabelBaselineOffset);\n }\n\n ctx.fillStyle = actualLabelColor;\n ctx.fillText(item.label, 0, actualItemLabelBaselineOffset);\n\n ctx.restore();\n\n }\n\n }\n\n drawDragEvents(ctx) {\n\n if (!this.debug || !this.dragEvents?.length) return;\n\n const dragEventsReversed = [...this.dragEvents].reverse();\n const actualLineWidth = this.getScaledNumber(0.5);\n const actualCircleDiameter = this.getScaledNumber(4);\n\n for (const [i, event] of dragEventsReversed.entries()) {\n const percent = (i / this.dragEvents.length) * 100;\n ctx.beginPath();\n ctx.arc(event.x, event.y, actualCircleDiameter, 0, 2 * Math.PI);\n ctx.fillStyle = `hsl(${Constants.Debugging.dragEventHue},100%,${percent}%)`;\n ctx.strokeStyle = '#000';\n ctx.lineWidth = actualLineWidth;\n ctx.fill();\n ctx.stroke();\n }\n\n }\n\n animateRotation(now = 0) {\n\n // For spinTo()\n if (this._spinToTimeEnd !== null) {\n\n // Check if we should end the animation:\n if (now >= this._spinToTimeEnd) {\n this.rotation = this._spinToEndRotation;\n this._spinToTimeEnd = null;\n this.raiseEvent_onRest();\n return;\n }\n\n const duration = this._spinToTimeEnd - this._spinToTimeStart;\n let delta = (now - this._spinToTimeStart) / duration;\n delta = (delta < 0)? 0 : delta; // Frame time may be before the start time.\n const distance = this._spinToEndRotation - this._spinToStartRotation;\n\n this.rotation = this._spinToStartRotation + distance * this._spinToEasingFunction(delta);\n\n this.refresh();\n\n return;\n\n }\n\n // For spin()\n if (this._lastSpinFrameTime !== null) {\n\n const delta = now - this._lastSpinFrameTime;\n\n if (delta > 0) {\n\n this.rotation += ((delta / 1000) * this._rotationSpeed) % 360; // TODO: very small rounding errors can accumulative here.\n this._rotationSpeed = this.getRotationSpeedPlusDrag(delta);\n\n // Check if we should end the animation:\n if (this._rotationSpeed === 0) {\n this.raiseEvent_onRest();\n this._lastSpinFrameTime = null;\n } else {\n this._lastSpinFrameTime = now;\n }\n\n }\n\n this.refresh();\n\n return;\n\n }\n\n }\n\n getRotationSpeedPlusDrag(delta = 0) {\n\n // Simulate drag:\n const newRotationSpeed = this._rotationSpeed + ((this.rotationResistance * (delta / 1000)) * this._rotationDirection);\n\n // Stop rotation once speed reaches 0.\n // Otherwise the wheel could rotate in the opposite direction next frame.\n if ((this._rotationDirection === 1 && newRotationSpeed < 0) || (this._rotationDirection === -1 && newRotationSpeed >= 0)) {\n return 0;\n }\n\n return newRotationSpeed;\n\n }\n\n /**\n * Spin the wheel by setting `rotationSpeed`.\n * The wheel will immediately start spinning, and slow down over time depending on the value of `rotationResistance`.\n * A positive number will spin clockwise, a negative number will spin anticlockwise.\n */\n spin(rotationSpeed = 0) {\n if (!util.isNumber(rotationSpeed)) throw new Error('rotationSpeed must be a number');\n this.dragEvents = [];\n this.beginSpin(rotationSpeed, 'spin');\n }\n\n /**\n * Spin the wheel to a particular rotation.\n * The animation will occur over the provided `duration` (milliseconds).\n * The animation can be adjusted by providing an optional `easingFunction` which accepts a single parameter n, where n is between 0 and 1 inclusive.\n * If no easing function is provided, the default easeSinOut will be used.\n * For example easing functions see [easing-utils](https://github.com/AndrewRayCode/easing-utils).\n */\n spinTo(rotation = 0, duration = 0, easingFunction = null) {\n\n if (!util.isNumber(rotation)) throw new Error('Error: rotation must be a number');\n if (!util.isNumber(duration)) throw new Error('Error: duration must be a number');\n\n this.stop();\n\n this.dragEvents = [];\n\n this.animate(rotation, duration, easingFunction);\n\n this.raiseEvent_onSpin({method: 'spinto', targetRotation: rotation, duration});\n\n }\n\n /**\n * Spin the wheel to a particular item.\n * The animation will occur over the provided `duration` (milliseconds).\n * If `spinToCenter` is true, the wheel will spin to the center of the item, otherwise the wheel will spin to a random angle inside the item.\n * `numberOfRevolutions` controls how many times the wheel will rotate a full 360 degrees before resting on the item.\n * The animation can be adjusted by providing an optional `easingFunction` which accepts a single parameter n, where n is between 0 and 1 inclusive.\n * If no easing function is provided, the default easeSinOut will be used.\n * For example easing functions see [easing-utils](https://github.com/AndrewRayCode/easing-utils).\n */\n spinToItem(itemIndex = 0, duration = 0, spinToCenter = true, numberOfRevolutions = 1, direction = 1, easingFunction = null) {\n\n this.stop();\n\n this.dragEvents = [];\n\n const itemAngle = spinToCenter ? this.items[itemIndex].getCenterAngle() : this.items[itemIndex].getRandomAngle();\n\n let newRotation = util.calcWheelRotationForTargetAngle(this.rotation, itemAngle - this._pointerAngle, direction);\n newRotation += ((numberOfRevolutions * 360) * direction);\n\n this.animate(newRotation, duration, easingFunction);\n\n this.raiseEvent_onSpin({method: 'spintoitem', targetItemIndex: itemIndex, targetRotation: newRotation, duration});\n\n }\n\n animate(newRotation, duration, easingFunction) {\n this._spinToStartRotation = this.rotation;\n this._spinToEndRotation = newRotation;\n this._spinToTimeStart = performance.now();\n this._spinToTimeEnd = this._spinToTimeStart + duration;\n this._spinToEasingFunction = easingFunction || util.easeSinOut;\n this.refresh();\n }\n\n /**\n * Immediately stop the wheel from spinning, regardless of which method was used to spin it.\n */\n stop() {\n\n // Stop the wheel if it was spun via `spinTo()`.\n this._spinToTimeEnd = null;\n\n // Stop the wheel if it was spun via `spin()`.\n this._rotationSpeed = 0;\n this._lastSpinFrameTime = null;\n\n }\n\n /**\n * Return n scaled to the size of the canvas.\n */\n getScaledNumber(n) {\n return (n / Constants.baseCanvasSize) * this._size;\n }\n\n getActualPixelRatio() {\n return (this._pixelRatio !== 0) ? this._pixelRatio : window.devicePixelRatio;\n }\n\n /**\n * Return true if the given point is inside the wheel.\n */\n wheelHitTest(point = {x:0, y:0}) {\n const p = util.translateXYToElement(point, this.canvas, this.getActualPixelRatio());\n return util.isPointInCircle(p, this._center.x, this._center.y, this._actualRadius);\n }\n\n /**\n * Refresh the cursor state.\n * Call this after the pointer moves.\n */\n refreshCursor() {\n\n if (this.isInteractive) {\n\n if (this.isDragging) {\n this.canvas.style.cursor = 'grabbing';\n return;\n }\n\n if (this.isCursorOverWheel) {\n this.canvas.style.cursor = 'grab';\n return;\n }\n\n }\n\n this.canvas.style.cursor = '';\n\n }\n\n /**\n * Get the angle (in degrees) of the given point from the center of the wheel.\n * 0 is north.\n */\n getAngleFromCenter(point = {x:0, y:0}) {\n return (util.getAngle(this._center.x, this._center.y, point.x, point.y) + 90) % 360;\n }\n\n /**\n * Get the index of the item that the Pointer is pointing at.\n * An item is considered \"current\" if `pointerAngle` is between it's start angle (inclusive)\n * and it's end angle (exclusive).\n */\n getCurrentIndex() {\n return this._currentIndex;\n }\n\n /**\n * Calculate and set `currentIndex`\n */\n refreshCurrentIndex(angles = []) {\n if (this._items.length === 0) this._currentIndex = -1;\n\n for (const [i, a] of angles.entries()) {\n\n if (!util.isAngleBetween(this._pointerAngle, a.start % 360, a.end % 360)) continue;\n\n if (this._currentIndex === i) break;\n\n this._currentIndex = i;\n\n if (!this._isInitialising) this.raiseEvent_onCurrentIndexChange();\n\n break;\n\n }\n }\n\n /**\n * Return an array of objects containing the start angle (inclusive) and end angle (inclusive) of each item.\n */\n getItemAngles(initialRotation = 0) {\n\n let weightSum = 0;\n for (const i of this.items) {\n weightSum += i.weight;\n }\n const weightedItemAngle = 360 / weightSum;\n\n let itemAngle;\n let lastItemAngle = initialRotation;\n const angles = [];\n\n for (const item of this._items) {\n itemAngle = item.weight * weightedItemAngle;\n angles.push({\n start: lastItemAngle,\n end: lastItemAngle + itemAngle,\n });\n lastItemAngle += itemAngle;\n }\n\n // Ensure the difference between last angle.end and first angle.start is exactly 360 degrees.\n // Sometimes floating point arithmetic pushes the end value past 360 degrees by\n // a very small amount, which causes issues when calculating `currentIndex`.\n if (this._items.length > 1) {\n angles[angles.length - 1].end = angles[0].start + 360;\n }\n\n return angles;\n\n }\n\n /**\n * Schedule a redraw of the wheel on the canvas.\n * Call this after changing any property of the wheel that relates to it's appearance.\n */\n refresh() {\n if (this._frameRequestId === null) {\n this._frameRequestId = window.requestAnimationFrame(t => this.draw(t));\n }\n }\n\n limitSpeed(speed = 0, max = 0) {\n // Max is always a positive number, but speed may be positive or negative.\n const newSpeed = Math.min(speed, max);\n return Math.max(newSpeed, -max);\n }\n\n beginSpin(speed = 0, spinMethod = '') {\n this.stop();\n\n this._rotationSpeed = this.limitSpeed(speed, this._rotationSpeedMax);\n this._lastSpinFrameTime = performance.now();\n\n this._rotationDirection = (this._rotationSpeed >= 0) ? 1 : -1; // 1 for clockwise or stationary, -1 for anticlockwise.\n\n if (this._rotationSpeed !== 0) {\n this.raiseEvent_onSpin({\n method: spinMethod,\n rotationSpeed: this._rotationSpeed,\n rotationResistance: this._rotationResistance,\n });\n }\n\n this.refresh();\n }\n\n refreshAriaLabel() {\n // See https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/img_role\n this.canvas.setAttribute('role', 'img');\n const wheelDescription = (this.items.length >= 2) ? ` The wheel has ${this.items.length} slices.` : '';\n this.canvas.setAttribute('aria-label', 'An image of a spinning prize wheel.' + wheelDescription);\n }\n\n /**\n * The color of the line around the circumference of the wheel.\n */\n get borderColor() {\n return this._borderColor;\n }\n set borderColor(val) {\n this._borderColor = util.setProp({\n val,\n isValid: typeof val === 'string',\n errorMessage: 'Wheel.borderColor must be a string',\n defaultValue: Defaults.wheel.borderColor,\n });\n\n this.refresh();\n }\n\n /**\n * The width (in pixels) of the line around the circumference of the wheel.\n */\n get borderWidth() {\n return this._borderWidth;\n }\n set borderWidth(val) {\n this._borderWidth = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.borderWidth must be a number',\n defaultValue: Defaults.wheel.borderWidth,\n });\n\n this.refresh();\n }\n\n /**\n * Show debugging info.\n * This is particularly helpful when fine-tuning labels.\n */\n get debug() {\n return this._debug;\n }\n set debug(val) {\n this._debug = util.setProp({\n val,\n isValid: typeof val === 'boolean',\n errorMessage: 'Wheel.debug must be a boolean',\n defaultValue: Defaults.wheel.debug,\n });\n\n this.refresh();\n }\n\n /**\n * The url of an image that will be drawn over the center of the wheel which will rotate with the wheel.\n * It will be automatically scaled to fit `radius`.\n */\n get image() {\n return this._image?.src ?? null;\n }\n set image(val) {\n this._image = util.setProp({\n val,\n isValid: typeof val === 'string' || val === null,\n errorMessage: 'Wheel.image must be a url (string) or null',\n defaultValue: Defaults.wheel.image,\n action: () => {\n if (val === null) return null;\n const v = new Image();\n v.src = val;\n v.onload = e => this.refresh();\n return v;\n },\n });\n\n this.refresh();\n }\n\n /**\n * Allow the user to spin the wheel using click-drag/touch-flick.\n * User interaction will only be detected within the bounds of `Wheel.radius`.\n */\n get isInteractive() {\n return this._isInteractive;\n }\n set isInteractive(val) {\n this._isInteractive = util.setProp({\n val,\n isValid: typeof val === 'boolean',\n errorMessage: 'Wheel.isInteractive must be a boolean',\n defaultValue: Defaults.wheel.isInteractive,\n });\n\n this.refreshCursor(); // Reset the cursor in case the wheel is currently being dragged.\n }\n\n /**\n * The repeating pattern of background colors for all items.\n * Overridden by `Item.backgroundColor`.\n * Example: `['#fff','#000']`.\n */\n get itemBackgroundColors() {\n return this._itemBackgroundColors;\n }\n set itemBackgroundColors(val) {\n this._itemBackgroundColors = util.setProp({\n val,\n isValid: Array.isArray(val),\n errorMessage: 'Wheel.itemBackgroundColors must be an array',\n defaultValue: Defaults.wheel.itemBackgroundColors,\n });\n\n this.refresh();\n }\n\n /**\n * The alignment of all item labels.\n * Accepted values: `'left'`|`'center'`|`'right'`.\n * You may need to set `itemLabelRotation` in combination with this.\n */\n get itemLabelAlign() {\n return this._itemLabelAlign;\n }\n set itemLabelAlign(val) {\n this._itemLabelAlign = util.setProp({\n val,\n isValid: typeof val === 'string',\n errorMessage: 'Wheel.itemLabelAlign must be a string',\n defaultValue: Defaults.wheel.itemLabelAlign,\n });\n\n this.refresh();\n }\n\n /**\n * The offset of the baseline (or line height) of all item labels (as a percent of the label's height).\n */\n get itemLabelBaselineOffset() {\n return this._itemLabelBaselineOffset;\n }\n set itemLabelBaselineOffset(val) {\n this._itemLabelBaselineOffset = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelBaselineOffset must be a number',\n defaultValue: Defaults.wheel.itemLabelBaselineOffset,\n });\n\n this.resize();\n }\n\n /**\n * The repeating pattern of colors for all item labels.\n * Overridden by `Item.labelColor`.\n * Example: `['#fff','#000']`.\n */\n get itemLabelColors() {\n return this._itemLabelColors;\n }\n set itemLabelColors(val) {\n this._itemLabelColors = util.setProp({\n val,\n isValid: Array.isArray(val),\n errorMessage: 'Wheel.itemLabelColors must be an array',\n defaultValue: Defaults.wheel.itemLabelColors,\n });\n\n this.refresh();\n }\n\n /**\n * The font family for all item labels.\n * Overridden by `Item.labelFont`.\n * Example: `'sans-serif'`.\n */\n get itemLabelFont() {\n return this._itemLabelFont;\n }\n set itemLabelFont(val) {\n this._itemLabelFont = util.setProp({\n val,\n isValid: typeof val === 'string',\n errorMessage: 'Wheel.itemLabelFont must be a string',\n defaultValue: Defaults.wheel.itemLabelFont,\n });\n\n this.resize();\n }\n\n /**\n * The maximum font size (in pixels) for all item labels.\n */\n get itemLabelFontSizeMax() {\n return this._itemLabelFontSizeMax;\n }\n set itemLabelFontSizeMax(val) {\n this._itemLabelFontSizeMax = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelFontSizeMax must be a number',\n defaultValue: Defaults.wheel.itemLabelFontSizeMax,\n });\n\n this.resize();\n }\n\n /**\n * The point along the radius (as a percent, starting from the center of the wheel)\n * to start drawing all item labels.\n */\n get itemLabelRadius() {\n return this._itemLabelRadius;\n }\n set itemLabelRadius(val) {\n this._itemLabelRadius = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelRadius must be a number',\n defaultValue: Defaults.wheel.itemLabelRadius,\n });\n\n this.resize();\n }\n\n /**\n * The point along the radius (as a percent, starting from the center of the wheel)\n * to calculate the maximum font size for all item labels.\n */\n get itemLabelRadiusMax() {\n return this._itemLabelRadiusMax;\n }\n set itemLabelRadiusMax(val) {\n this._itemLabelRadiusMax = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelRadiusMax must be a number',\n defaultValue: Defaults.wheel.itemLabelRadiusMax,\n });\n\n this.resize();\n }\n\n /**\n * The rotation of all item labels.\n * Use this to flip the labels `180\u00B0` in combination with `itemLabelAlign`.\n */\n get itemLabelRotation() {\n return this._itemLabelRotation;\n }\n set itemLabelRotation(val) {\n this._itemLabelRotation = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelRotation must be a number',\n defaultValue: Defaults.wheel.itemLabelRotation,\n });\n\n this.refresh();\n }\n\n /**\n * The color of the stroke applied to the outside of the label text.\n */\n get itemLabelStrokeColor() {\n return this._itemLabelStrokeColor;\n }\n set itemLabelStrokeColor(val) {\n this._itemLabelStrokeColor = util.setProp({\n val,\n isValid: typeof val === 'string',\n errorMessage: 'Wheel.itemLabelStrokeColor must be a string',\n defaultValue: Defaults.wheel.itemLabelStrokeColor,\n });\n\n this.refresh();\n }\n\n /**\n * The width of the stroke applied to the outside of the label text.\n */\n get itemLabelStrokeWidth() {\n return this._itemLabelStrokeWidth;\n }\n set itemLabelStrokeWidth(val) {\n this._itemLabelStrokeWidth = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.itemLabelStrokeWidth must be a number',\n defaultValue: Defaults.wheel.itemLabelStrokeWidth,\n });\n\n this.refresh();\n }\n\n /**\n * The items to show on the wheel.\n */\n get items() {\n return this._items;\n }\n set items(val) {\n this._items = util.setProp({\n val,\n isValid: Array.isArray(val),\n errorMessage: 'Wheel.items must be an array of Items',\n defaultValue: Defaults.wheel.items,\n action: () => {\n const v = [];\n for (const item of val) {\n v.push(new Item(this, {\n backgroundColor: item.backgroundColor,\n image: item.image,\n imageRadius: item.imageRadius,\n imageRotation: item.imageRotation,\n imageScale: item.imageScale,\n label: item.label,\n labelColor: item.labelColor,\n value: item.value,\n weight: item.weight,\n }));\n }\n return v;\n },\n });\n\n this.refreshAriaLabel();\n this.refreshCurrentIndex(this.getItemAngles(this._rotation));\n this.resize(); // Refresh item label font size.\n }\n\n /**\n * The color of the lines between the items.\n */\n get lineColor() {\n return this._lineColor;\n }\n set lineColor(val) {\n this._lineColor = util.setProp({\n val,\n isValid: typeof val === 'string',\n errorMessage: 'Wheel.lineColor must be a string',\n defaultValue: Defaults.wheel.lineColor,\n });\n\n this.refresh();\n }\n\n /**\n * The width (in pixels) of the lines between the items.\n */\n get lineWidth() {\n return this._lineWidth;\n }\n set lineWidth(val) {\n this._lineWidth = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.lineWidth must be a number',\n defaultValue: Defaults.wheel.lineWidth,\n });\n\n this.refresh();\n }\n\n /**\n * The offset of the wheel relative to it's center (as a percent of the wheel's diameter).\n */\n get offset() {\n return this._offset;\n }\n set offset(val) {\n this._offset = util.setProp({\n val,\n isValid: util.isObject(val),\n errorMessage: 'Wheel.offset must be an object',\n defaultValue: Defaults.wheel.offset,\n });\n\n this.resize();\n }\n\n /**\n * The callback for the `onCurrentIndexChange` event.\n */\n get onCurrentIndexChange() {\n return this._onCurrentIndexChange;\n }\n set onCurrentIndexChange(val) {\n this._onCurrentIndexChange = util.setProp({\n val,\n isValid: typeof val === 'function' || val === null,\n errorMessage: 'Wheel.onCurrentIndexChange must be a function or null',\n defaultValue: Defaults.wheel.onCurrentIndexChange,\n });\n }\n\n /**\n * The callback for the `onRest` event.\n */\n get onRest() {\n return this._onRest;\n }\n set onRest(val) {\n this._onRest = util.setProp({\n val,\n isValid: typeof val === 'function' || val === null,\n errorMessage: 'Wheel.onRest must be a function or null',\n defaultValue: Defaults.wheel.onRest,\n });\n }\n\n /**\n * The callback for the `onSpin` event.\n */\n get onSpin() {\n return this._onSpin;\n }\n set onSpin(val) {\n this._onSpin = util.setProp({\n val,\n isValid: typeof val === 'function' || val === null,\n errorMessage: 'Wheel.onSpin must be a function or null',\n defaultValue: Defaults.wheel.onSpin,\n });\n }\n\n /**\n * The url of an image that will be drawn over the center of the wheel which will not rotate with the wheel.\n * It will be automatically scaled to fit the container's smallest dimension.\n * Use this to draw decorations around the wheel, such as a stand or pointer.\n */\n get overlayImage() {\n return this._overlayImage?.src ?? null;\n }\n set overlayImage(val) {\n this._overlayImage = util.setProp({\n val,\n isValid: typeof val === 'string' || val === null,\n errorMessage: 'Wheel.overlayImage must be a url (string) or null',\n defaultValue: Defaults.wheel.overlayImage,\n action: () => {\n if (val === null) return null;\n const v = new Image();\n v.src = val;\n v.onload = e => this.refresh();\n return v;\n },\n });\n\n this.refresh();\n }\n\n /**\n * The pixel ratio used to render the wheel.\n * Values above 0 will produce a sharper image at the cost of performance.\n * A value of `0` will cause the pixel ratio to be automatically determined using `window.devicePixelRatio`.\n */\n get pixelRatio() {\n return this._pixelRatio;\n }\n set pixelRatio(val) {\n this._pixelRatio = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.pixelRatio must be a number',\n defaultValue: Defaults.wheel.pixelRatio,\n });\n this.dragEvents = [];\n this.resize();\n }\n\n /**\n * The angle of the Pointer which is used to determine the `currentIndex` (or the \"winning\" item).\n */\n get pointerAngle() {\n return this._pointerAngle;\n }\n set pointerAngle(val) {\n this._pointerAngle = util.setProp({\n val,\n isValid: util.isNumber(val) && val >= 0,\n errorMessage: 'Wheel.pointerAngle must be a number between 0 and 360',\n defaultValue: Defaults.wheel.pointerAngle,\n action: () => val % 360,\n });\n\n if (this.debug) this.refresh();\n }\n\n /**\n * The radius of the wheel (as a percent of the container's smallest dimension).\n */\n get radius() {\n return this._radius;\n }\n set radius(val) {\n this._radius = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.radius must be a number',\n defaultValue: Defaults.wheel.radius,\n });\n\n this.resize();\n }\n\n /**\n * The rotation (angle in degrees) of the wheel.\n * `0` is north.\n * The first item will be drawn clockwise from this point.\n */\n get rotation() {\n return this._rotation;\n }\n set rotation(val) {\n this._rotation = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.rotation must be a number',\n defaultValue: Defaults.wheel.rotation,\n });\n\n this.refreshCurrentIndex(this.getItemAngles(this._rotation));\n this.refresh();\n }\n\n /**\n * The amount that `rotationSpeed` will be reduced by every second.\n * Only in effect when `rotationSpeed !== 0`.\n * Set to `0` to spin the wheel infinitely.\n */\n get rotationResistance() {\n return this._rotationResistance;\n }\n set rotationResistance(val) {\n this._rotationResistance = util.setProp({\n val,\n isValid: util.isNumber(val),\n errorMessage: 'Wheel.rotationResistance must be a number',\n defaultValue: Defaults.wheel.rotationResistance,\n });\n }\n\n /**\n * (Readonly) How far (angle in degrees) the wheel will spin every 1 second.\n * A positive number means the wheel is spinning clockwise, a negative number means anticlockwise, and `0` means the wheel is not spinning.\n */\n get rotationSpeed() {\n return this._rotationSpeed;\n }\n\n /**\n * The maximum value for `rotationSpeed` (ignoring the wheel's spin direction).\n * The wheel will not spin faster than this value in any direction.\n */\n get rotationSpeedMax() {\n return this._rotationSpeedMax;\n }\n set rotationSpeedMax(val) {\n this._rotationSpeedMax = util.setProp({\n val,\n isValid: util.isNumber(val) && val >= 0,\n errorMessage: 'Wheel.rotationSpeedMax must be a number >= 0',\n defaultValue: Defaults.wheel.rotationSpeedMax,\n });\n }\n\n /**\n * Enter the drag state.\n */\n dragStart(point = {x:0, y:0}) {\n\n const p = util.translateXYToElement(point, this.canvas, this.getActualPixelRatio());\n\n this.isDragging = true;\n\n this.stop(); // Interrupt `spinTo()`\n\n this.dragEvents = [{\n distance: 0,\n x: p.x,\n y: p.y,\n now:performance.now(),\n }];\n\n this.refreshCursor();\n\n }\n\n dragMove(point = {x:0, y:0}) {\n\n const p = util.translateXYToElement(point, this.canvas, this.getActualPixelRatio());\n const a = this.getAngleFromCenter(p);\n\n const lastDragPoint = this.dragEvents[0];\n const lastAngle = this.getAngleFromCenter(lastDragPoint);\n const angleSinceLastMove = util.diffAngle(lastAngle, a);\n\n this.dragEvents.unshift({\n distance: angleSinceLastMove,\n x: p.x,\n y: p.y,\n now:performance.now(),\n });\n\n // Retain max 40 drag events.\n if (this.debug && this.dragEvents.length >= 40) this.dragEvents.pop();\n\n // Snap the wheel to the new rotation.\n this.rotation += angleSinceLastMove; // TODO: can we apply easing here so it looks nicer?\n\n }\n\n /**\n * Exit the drag state.\n * Set the rotation speed so the wheel continues to spin in the same direction.\n */\n dragEnd() {\n\n this.isDragging = false;\n\n // Calc the drag distance:\n let dragDistance = 0;\n const now = performance.now();\n\n for (const [i, event] of this.dragEvents.entries()) {\n\n if (!this.isDragEventTooOld(now, event)) {\n dragDistance += event.distance;\n continue;\n }\n\n // Exclude old events:\n this.dragEvents.length = i;\n if (this.debug) this.refresh(); // Redraw drag events after trimming the array.\n break;\n\n }\n\n this.refreshCursor();\n\n if (dragDistance === 0) return;\n\n this.beginSpin(dragDistance * (1000 / Constants.dragCapturePeriod), 'interact');\n\n }\n\n isDragEventTooOld(now = 0, event = {}) {\n return (now - event.now) > Constants.dragCapturePeriod;\n }\n\n raiseEvent_onCurrentIndexChange(data = {}) {\n this.onCurrentIndexChange?.({\n type: 'currentIndexChange',\n currentIndex: this._currentIndex,\n ...data,\n });\n }\n\n raiseEvent_onRest(data = {}) {\n this.onRest?.({\n type: 'rest',\n currentIndex: this._currentIndex,\n rotation: this._rotation,\n ...data,\n });\n }\n\n raiseEvent_onSpin(data = {}) {\n this.onSpin?.({\n type: 'spin',\n ...data,\n });\n }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\r\nimport { Wheel } from \"spin-wheel/src/wheel\";\r\n\r\nconst itemBackgroundColours = [\r\n \"#e8336a\",\r\n \"#ee743b\",\r\n \"#95c11f\",\r\n \"#15af97\",\r\n \"#0085c8\",\r\n \"#005580\",\r\n \"#7a4d99\"\r\n];\r\n\r\nfunction randomIntFromInterval(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n}\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n prizes: Array,\r\n centreImage: String,\r\n overlayImage: String,\r\n textColours: Array,\r\n segmentColours: Array,\r\n prizeId: Number\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"wheelContainer\", \"resultContainer\", \"spinTheWheelButton\", \"completeButton\"];\r\n }\r\n\r\n renderWheel() {\r\n const items = this.prizesValue;//.map(p => ({ label: p.name }));\r\n\r\n this.wheelContainerTarget.wheel = new Wheel(\r\n this.wheelContainerTarget,\r\n {\r\n isInteractive: true,\r\n itemBackgroundColors: this.segmentColoursValue,\r\n itemLabelAlign: \"left\",\r\n itemLabelBaselineOffset: 0,\r\n itemLabelColors: this.textColoursValue,\r\n itemLabelFontSizeMax: 44,\r\n itemLabelFont: 'Poppins, Helvetica, sans-serif', \r\n itemLabelRadius: 0.93,\r\n itemLabelRadiusMax: 0.1,\r\n itemLabelRotation: 180,\r\n items: items,\r\n overlayImage: this.overlayImageValue,\r\n image: this.centreImageValue,\r\n lineColor: \"#fff\",\r\n lineWidth: 4,\r\n onRest: e => this.showResult(e),\r\n onSpin: e => this.spinToPrize(e), \r\n radius: 0.84,\r\n rotationResistance: -100,\r\n rotationSpeedMax: 500\r\n }\r\n );\r\n }\r\n\r\n spinToPrize(e) {\r\n const isManualSpin = e.target === this.spinTheWheelButtonTarget;\r\n\r\n if (isManualSpin || e.method === \"interact\") {\r\n this.spinTheWheelButtonTarget.disabled = true;\r\n this.wheelContainerTarget.wheel.isInteractive = false;\r\n var nonWinningItems = this.prizesValue.map((item, index) => ({ item: item, index: index })).filter(p => p.item.value === 0);\r\n this.wheelContainerTarget.wheel.spinToItem(\r\n this.prizeIdValue ?\r\n this.prizesValue.findIndex(p => p.value === this.prizeIdValue) :\r\n nonWinningItems[Math.floor(Math.random() * nonWinningItems.length)].index,\r\n randomIntFromInterval(2500, 4000),\r\n false,\r\n randomIntFromInterval(2, 4),\r\n isManualSpin || e.rotationSpeed > 0 ? 1 : -1,\r\n null\r\n );\r\n }\r\n }\r\n\r\n showResult() {\r\n setTimeout(\r\n () => {\r\n this.spinTheWheelButtonTarget.classList.add(\"d-none\");\r\n this.resultContainerTarget.classList.remove(\"d-none\");\r\n this.completeButtonTarget.classList.remove(\"d-none\");\r\n },\r\n 250\r\n );\r\n }\r\n}", "var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar defaults = {\r\n lines: 12,\r\n length: 7,\r\n width: 5,\r\n radius: 10,\r\n scale: 1.0,\r\n corners: 1,\r\n color: '#000',\r\n fadeColor: 'transparent',\r\n animation: 'spinner-line-fade-default',\r\n rotate: 0,\r\n direction: 1,\r\n speed: 1,\r\n zIndex: 2e9,\r\n className: 'spinner',\r\n top: '50%',\r\n left: '50%',\r\n shadow: '0 0 1px transparent',\r\n position: 'absolute',\r\n};\r\nvar Spinner = /** @class */ (function () {\r\n function Spinner(opts) {\r\n if (opts === void 0) { opts = {}; }\r\n this.opts = __assign(__assign({}, defaults), opts);\r\n }\r\n /**\r\n * Adds the spinner to the given target element. If this instance is already\r\n * spinning, it is automatically removed from its previous target by calling\r\n * stop() internally.\r\n */\r\n Spinner.prototype.spin = function (target) {\r\n this.stop();\r\n this.el = document.createElement('div');\r\n this.el.className = this.opts.className;\r\n this.el.setAttribute('role', 'progressbar');\r\n css(this.el, {\r\n position: this.opts.position,\r\n width: 0,\r\n zIndex: this.opts.zIndex,\r\n left: this.opts.left,\r\n top: this.opts.top,\r\n transform: \"scale(\" + this.opts.scale + \")\",\r\n });\r\n if (target) {\r\n target.insertBefore(this.el, target.firstChild || null);\r\n }\r\n drawLines(this.el, this.opts);\r\n return this;\r\n };\r\n /**\r\n * Stops and removes the Spinner.\r\n * Stopped spinners may be reused by calling spin() again.\r\n */\r\n Spinner.prototype.stop = function () {\r\n if (this.el) {\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.animateId);\r\n }\r\n else {\r\n clearTimeout(this.animateId);\r\n }\r\n if (this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n this.el = undefined;\r\n }\r\n return this;\r\n };\r\n return Spinner;\r\n}());\r\nexport { Spinner };\r\n/**\r\n * Sets multiple style properties at once.\r\n */\r\nfunction css(el, props) {\r\n for (var prop in props) {\r\n el.style[prop] = props[prop];\r\n }\r\n return el;\r\n}\r\n/**\r\n * Returns the line color from the given string or array.\r\n */\r\nfunction getColor(color, idx) {\r\n return typeof color == 'string' ? color : color[idx % color.length];\r\n}\r\n/**\r\n * Internal method that draws the individual lines.\r\n */\r\nfunction drawLines(el, opts) {\r\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\r\n var shadow = 'none';\r\n if (opts.shadow === true) {\r\n shadow = '0 2px 4px #000'; // default shadow\r\n }\r\n else if (typeof opts.shadow === 'string') {\r\n shadow = opts.shadow;\r\n }\r\n var shadows = parseBoxShadow(shadow);\r\n for (var i = 0; i < opts.lines; i++) {\r\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\r\n var backgroundLine = css(document.createElement('div'), {\r\n position: 'absolute',\r\n top: -opts.width / 2 + \"px\",\r\n width: (opts.length + opts.width) + 'px',\r\n height: opts.width + 'px',\r\n background: getColor(opts.fadeColor, i),\r\n borderRadius: borderRadius,\r\n transformOrigin: 'left',\r\n transform: \"rotate(\" + degrees + \"deg) translateX(\" + opts.radius + \"px)\",\r\n });\r\n var delay = i * opts.direction / opts.lines / opts.speed;\r\n delay -= 1 / opts.speed; // so initial animation state will include trail\r\n var line = css(document.createElement('div'), {\r\n width: '100%',\r\n height: '100%',\r\n background: getColor(opts.color, i),\r\n borderRadius: borderRadius,\r\n boxShadow: normalizeShadow(shadows, degrees),\r\n animation: 1 / opts.speed + \"s linear \" + delay + \"s infinite \" + opts.animation,\r\n });\r\n backgroundLine.appendChild(line);\r\n el.appendChild(backgroundLine);\r\n }\r\n}\r\nfunction parseBoxShadow(boxShadow) {\r\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\r\n var shadows = [];\r\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\r\n var shadow = _a[_i];\r\n var matches = shadow.match(regex);\r\n if (matches === null) {\r\n continue; // invalid syntax\r\n }\r\n var x = +matches[2];\r\n var y = +matches[5];\r\n var xUnits = matches[4];\r\n var yUnits = matches[7];\r\n if (x === 0 && !xUnits) {\r\n xUnits = yUnits;\r\n }\r\n if (y === 0 && !yUnits) {\r\n yUnits = xUnits;\r\n }\r\n if (xUnits !== yUnits) {\r\n continue; // units must match to use as coordinates\r\n }\r\n shadows.push({\r\n prefix: matches[1] || '',\r\n x: x,\r\n y: y,\r\n xUnits: xUnits,\r\n yUnits: yUnits,\r\n end: matches[8],\r\n });\r\n }\r\n return shadows;\r\n}\r\n/**\r\n * Modify box-shadow x/y offsets to counteract rotation\r\n */\r\nfunction normalizeShadow(shadows, degrees) {\r\n var normalized = [];\r\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\r\n var shadow = shadows_1[_i];\r\n var xy = convertOffset(shadow.x, shadow.y, degrees);\r\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\r\n }\r\n return normalized.join(', ');\r\n}\r\nfunction convertOffset(x, y, degrees) {\r\n var radians = degrees * Math.PI / 180;\r\n var sin = Math.sin(radians);\r\n var cos = Math.cos(radians);\r\n return [\r\n Math.round((x * cos + y * sin) * 1000) / 1000,\r\n Math.round((-x * sin + y * cos) * 1000) / 1000,\r\n ];\r\n}\r\n", "import { Controller } from \"@hotwired/stimulus\";\r\nimport { Spinner } from \"spin.js\";\r\n\r\nexport default class extends Controller {\r\n connect() {\r\n new Spinner().spin(this.element);\r\n }\r\n}", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nfunction createInputElement(name, value) {\r\n var input = document.createElement(\"input\");\r\n\r\n input.setAttribute(\"type\", \"hidden\");\r\n input.setAttribute(\"id\", name);\r\n input.setAttribute(\"name\", name);\r\n input.setAttribute(\"value\", value);\r\n\r\n return input;\r\n}\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n message: String\r\n };\r\n }\r\n\r\n connect() {\r\n var tagName = this.element.tagName;\r\n if (tagName === \"A\") {\r\n this.element.addEventListener(\"click\", e => this.handleLinkConfirmation(e));\r\n }\r\n else if (tagName === \"BUTTON\") {\r\n this.element.addEventListener(\"click\", e => this.handleButtonConfirmation(e));\r\n }\r\n }\r\n\r\n handleLinkConfirmation(e) {\r\n e.preventDefault();\r\n bootbox.confirm(this.messageValue, function (confirmed) {\r\n if (confirmed) {\r\n window.location.href = e.target.href;\r\n }\r\n });\r\n }\r\n\r\n handleButtonConfirmation(e) {\r\n e.preventDefault();\r\n\r\n bootbox.confirm(this.messageValue, function (confirmed) {\r\n if (confirmed) {\r\n var element = e.target;\r\n\r\n var form = element.closest(\"form\");\r\n var name = element.getAttribute(\"name\");\r\n \r\n if (name) {\r\n var value = element.getAttribute(\"value\");\r\n if (value) {\r\n var existing = form.querySelector(`input[name=\"${name}\"]`);\r\n if (!existing) {\r\n var input = createInputElement(name, value);\r\n form.append(input);\r\n }\r\n else {\r\n existing.value = value;\r\n }\r\n }\r\n }\r\n\r\n form.submit();\r\n }\r\n });\r\n }\r\n}\r\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get targets() {\r\n return [\"requestType\", \"requestTypeDescription\"];\r\n }\r\n\r\n requestTypeChangedHandler({ currentTarget }) {\r\n var selectedValue = currentTarget.options[currentTarget.selectedIndex].value;\r\n if (selectedValue === \"other\") {\r\n this.requestTypeDescriptionTarget.classList.remove(\"hide\");\r\n }\r\n else {\r\n this.requestTypeDescriptionTarget.classList.add(\"hide\");\r\n }\r\n }\r\n}\r\n", "import { Controller } from \"@hotwired/stimulus\";\r\nimport intlTelInput from \"intl-tel-input\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n hiddenInput: String,\r\n availableCountries: Array\r\n };\r\n }\r\n\r\n async connect() {\r\n if (!this.mobileCountryCode) {\r\n await import(\"imports/intl-tel-input-utils\");\r\n const hiddenInput = this.element.form[this.hiddenInputValue];\r\n this.mobileCountryCode = intlTelInput(\r\n this.element,\r\n {\r\n separateDialCode: true,\r\n onlyCountries: this.availableCountriesValue,\r\n initialCountry: hiddenInput.value\r\n }\r\n );\r\n hiddenInput.value = this.mobileCountryCode.getSelectedCountryData().iso2.toUpperCase();\r\n this.element.addEventListener(\"countrychange\", () => {\r\n hiddenInput.value = this.mobileCountryCode.getSelectedCountryData().iso2.toUpperCase();\r\n });\r\n }\r\n }\r\n}", "export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}", "export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}", "/*! qrcanvas v3.1.2 | ISC License */\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport qrcode from 'qrcode-generator';\n\nvar COLOR_BLACK = '#000';\nvar COLOR_WHITE = '#fff';\n\nvar helpers = {\n createCanvas: createCanvas,\n isCanvas: isCanvas,\n isDrawable: isDrawable,\n getCanvas: getCanvas,\n updateCanvas: updateCanvas,\n drawCanvas: drawCanvas,\n drawText: drawText\n};\n\nfunction createCanvas(width, height) {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nfunction isCanvas(el) {\n return el instanceof HTMLCanvasElement;\n}\n\nfunction isDrawable(el) {\n return isCanvas(el) || el instanceof HTMLImageElement;\n}\n/**\n * @desc Create a new canvas.\n * @param {Int} width Width of the canvas.\n * @param {Int} height Height of the canvas.\n * @return {Canvas}\n */\n\n\nfunction getCanvas(width, height) {\n return helpers.createCanvas(width, height == null ? width : height);\n}\n\nfunction updateCanvas(canvas, width, height) {\n if (canvas) {\n canvas.width = width;\n canvas.height = height == null ? width : height;\n return canvas;\n }\n\n return getCanvas(width, height);\n}\n\n/**\n * @desc Draw to the canvas with given image or colors.\n * @param {Canvas} canvas The canvas to initialize.\n * @param {Image | String | Array} data\n * @param {Object} options\n * cellSize: {Int}\n * clear: {Boolean}\n */\nfunction drawCanvas(canvas, data, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n cellSize = _options.cellSize,\n context = _options.context,\n _options$clear = _options.clear,\n clear = _options$clear === void 0 ? true : _options$clear;\n var width = canvas.width,\n height = canvas.height;\n var queue = [data];\n var ctx = context || canvas.getContext('2d');\n if (clear) ctx.clearRect(0, 0, width, height);\n ctx.globalCompositeOperation = 'source-over';\n\n while (queue.length) {\n var item = queue.shift();\n\n if (Array.isArray(item)) {\n queue = item.concat(queue);\n } else if (item) {\n var obj = void 0;\n\n if (helpers.isDrawable(item)) {\n obj = {\n image: item\n };\n } else if (typeof item === 'string') {\n obj = {\n style: item\n };\n } else {\n obj = item;\n }\n\n var x = (obj.col == null ? obj.x : obj.col * cellSize) || 0;\n var y = (obj.row == null ? obj.y : obj.row * cellSize) || 0;\n if (x < 0) x += width;\n if (y < 0) y += width;\n var w = ('cols' in obj ? obj.cols * cellSize : obj.w) || width;\n var h = ('rows' in obj ? obj.rows * cellSize : obj.h) || width;\n\n if (obj.image) {\n ctx.drawImage(obj.image, x, y, w, h);\n } else {\n ctx.fillStyle = obj.style || 'black';\n ctx.fillRect(x, y, w, h);\n }\n }\n }\n\n return canvas;\n}\n\nfunction drawText(text, options) {\n var _ref = options || {},\n _ref$fontSize = _ref.fontSize,\n fontSize = _ref$fontSize === void 0 ? 64 : _ref$fontSize,\n _ref$fontStyle = _ref.fontStyle,\n fontStyle = _ref$fontStyle === void 0 ? '' : _ref$fontStyle,\n _ref$fontFamily = _ref.fontFamily,\n fontFamily = _ref$fontFamily === void 0 ? 'Cursive' : _ref$fontFamily,\n _ref$color = _ref.color,\n color = _ref$color === void 0 ? null : _ref$color,\n _ref$pad = _ref.pad,\n pad = _ref$pad === void 0 ? 8 : _ref$pad,\n _ref$padColor = _ref.padColor,\n padColor = _ref$padColor === void 0 ? COLOR_WHITE : _ref$padColor,\n _ref$mode = _ref.mode,\n mode = _ref$mode === void 0 ? 1 : _ref$mode;\n\n var canvas = getCanvas(1);\n var ctx = canvas.getContext('2d');\n var padColorArr;\n\n if (padColor) {\n ctx.fillStyle = padColor;\n ctx.fillRect(0, 0, 1, 1);\n\n var _ctx$getImageData = ctx.getImageData(0, 0, 1, 1);\n\n padColorArr = _ctx$getImageData.data;\n if (!padColorArr[3]) padColorArr = null;\n }\n\n var height = fontSize + 2 * pad;\n var font = [fontStyle, fontSize + \"px\", fontFamily].filter(Boolean).join(' ');\n\n var resetContext = function resetContext() {\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.font = font;\n };\n\n resetContext();\n var width = Math.ceil(ctx.measureText(text).width) + 2 * pad;\n canvas.width = width;\n canvas.height = height;\n resetContext();\n\n var fillText = function fillText() {\n ctx.fillStyle = color || COLOR_BLACK;\n ctx.fillText(text, width / 2, height / 2);\n };\n\n if (mode === 1) {\n ctx.fillStyle = padColor;\n ctx.fillRect(0, 0, width, height);\n fillText();\n } else {\n fillText();\n\n if (padColorArr) {\n (function () {\n var imageData = ctx.getImageData(0, 0, width, height);\n var data = imageData.data;\n var total = width * height;\n var padded = [];\n var offset = 0;\n\n var _loop = function _loop(loop) {\n var current = [];\n var unique = {};\n padded[offset] = current;\n offset = 1 - offset;\n var last = padded[offset];\n\n if (!last) {\n last = [];\n\n for (var i = 0; i < total; i += 1) {\n last.push(i);\n }\n }\n\n last.forEach(function (i) {\n if (data[4 * i + 3]) {\n [i % width ? i - 1 : -1, (i + 1) % width ? i + 1 : -1, i - width, i + width].forEach(function (j) {\n var k = 4 * j;\n\n if (k >= 0 && k <= data.length && !unique[j]) {\n unique[j] = 1;\n current.push(j);\n }\n });\n }\n });\n current.forEach(function (i) {\n var j = 4 * i;\n\n if (!data[j + 3]) {\n for (var k = 0; k < 4; k += 1) {\n data[j + k] = padColorArr[k];\n }\n }\n });\n };\n\n for (var loop = 0; loop < pad; loop += 1) {\n _loop();\n }\n\n ctx.putImageData(imageData, 0, 0);\n })();\n }\n }\n\n return canvas;\n}\n\nvar effects = {\n \"default\": renderDefault,\n round: renderRound,\n fusion: renderFusion,\n spot: renderSpot\n};\n\nfunction renderDefault(_ref) {\n var foreground = _ref.foreground,\n cellSize = _ref.cellSize,\n isDark = _ref.isDark,\n count = _ref.count;\n var getCanvas = helpers.getCanvas,\n drawCanvas = helpers.drawCanvas;\n var width = cellSize * count;\n var canvasMask = getCanvas(width);\n var context = canvasMask.getContext('2d');\n context.fillStyle = COLOR_BLACK;\n drawCells({\n cellSize: cellSize,\n count: count\n }, function (_ref2) {\n var i = _ref2.i,\n j = _ref2.j,\n x = _ref2.x,\n y = _ref2.y;\n\n if (isDark(i, j)) {\n context.fillRect(x, y, cellSize, cellSize);\n }\n });\n var canvasFg = getCanvas(width);\n drawCanvas(canvasFg, foreground, {\n cellSize: cellSize\n });\n var ctx = canvasFg.getContext('2d');\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(canvasMask, 0, 0);\n return canvasFg;\n}\n\nfunction renderRound(_ref3, maskOptions) {\n var foreground = _ref3.foreground,\n cellSize = _ref3.cellSize,\n isDark = _ref3.isDark,\n count = _ref3.count;\n var getCanvas = helpers.getCanvas,\n drawCanvas = helpers.drawCanvas;\n var width = cellSize * count;\n var canvasMask = getCanvas(width);\n var _maskOptions$value = maskOptions.value,\n value = _maskOptions$value === void 0 ? 1 : _maskOptions$value;\n var radius = value * cellSize / 2;\n var context = canvasMask.getContext('2d');\n context.fillStyle = COLOR_BLACK;\n drawCells({\n cellSize: cellSize,\n count: count\n }, function (_ref4) {\n var i = _ref4.i,\n j = _ref4.j,\n x = _ref4.x,\n y = _ref4.y;\n\n if (isDark(i, j)) {\n context.beginPath();\n context.moveTo(x + 0.5 * cellSize, y);\n drawCorner(context, x + cellSize, y, x + cellSize, y + 0.5 * cellSize, radius);\n drawCorner(context, x + cellSize, y + cellSize, x + 0.5 * cellSize, y + cellSize, radius);\n drawCorner(context, x, y + cellSize, x, y + 0.5 * cellSize, radius);\n drawCorner(context, x, y, x + 0.5 * cellSize, y, radius); // context.closePath();\n\n context.fill();\n }\n });\n var canvasFg = getCanvas(width);\n drawCanvas(canvasFg, foreground, {\n cellSize: cellSize\n });\n var ctx = canvasFg.getContext('2d');\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(canvasMask, 0, 0);\n return canvasFg;\n}\n\nfunction renderFusion(_ref5, maskOptions) {\n var foreground = _ref5.foreground,\n cellSize = _ref5.cellSize,\n isDark = _ref5.isDark,\n count = _ref5.count;\n var getCanvas = helpers.getCanvas,\n drawCanvas = helpers.drawCanvas;\n var width = cellSize * count;\n var canvasMask = getCanvas(width);\n var context = canvasMask.getContext('2d');\n context.fillStyle = COLOR_BLACK;\n var _maskOptions$value2 = maskOptions.value,\n value = _maskOptions$value2 === void 0 ? 1 : _maskOptions$value2;\n var radius = value * cellSize / 2;\n drawCells({\n cellSize: cellSize,\n count: count\n }, function (_ref6) {\n var i = _ref6.i,\n j = _ref6.j,\n x = _ref6.x,\n y = _ref6.y;\n var corners = [0, 0, 0, 0]; // NW, NE, SE, SW\n\n if (isDark(i - 1, j)) {\n corners[0] += 1;\n corners[1] += 1;\n }\n\n if (isDark(i + 1, j)) {\n corners[2] += 1;\n corners[3] += 1;\n }\n\n if (isDark(i, j - 1)) {\n corners[0] += 1;\n corners[3] += 1;\n }\n\n if (isDark(i, j + 1)) {\n corners[1] += 1;\n corners[2] += 1;\n }\n\n if (isDark(i, j)) {\n if (isDark(i - 1, j - 1)) corners[0] += 1;\n if (isDark(i - 1, j + 1)) corners[1] += 1;\n if (isDark(i + 1, j + 1)) corners[2] += 1;\n if (isDark(i + 1, j - 1)) corners[3] += 1;\n context.beginPath();\n context.moveTo(x + 0.5 * cellSize, y);\n drawCorner(context, x + cellSize, y, x + cellSize, y + 0.5 * cellSize, corners[1] ? 0 : radius);\n drawCorner(context, x + cellSize, y + cellSize, x + 0.5 * cellSize, y + cellSize, corners[2] ? 0 : radius);\n drawCorner(context, x, y + cellSize, x, y + 0.5 * cellSize, corners[3] ? 0 : radius);\n drawCorner(context, x, y, x + 0.5 * cellSize, y, corners[0] ? 0 : radius); // context.closePath();\n\n context.fill();\n } else {\n if (corners[0] === 2) {\n fillCorner(context, x, y + 0.5 * cellSize, x, y, x + 0.5 * cellSize, y, radius);\n }\n\n if (corners[1] === 2) {\n fillCorner(context, x + 0.5 * cellSize, y, x + cellSize, y, x + cellSize, y + 0.5 * cellSize, radius);\n }\n\n if (corners[2] === 2) {\n fillCorner(context, x + cellSize, y + 0.5 * cellSize, x + cellSize, y + cellSize, x + 0.5 * cellSize, y + cellSize, radius);\n }\n\n if (corners[3] === 2) {\n fillCorner(context, x + 0.5 * cellSize, y + cellSize, x, y + cellSize, x, y + 0.5 * cellSize, radius);\n }\n }\n });\n var canvasFg = getCanvas(width);\n drawCanvas(canvasFg, foreground, {\n cellSize: cellSize\n });\n var ctx = canvasFg.getContext('2d');\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(canvasMask, 0, 0);\n return canvasFg;\n}\n\nfunction renderSpot(_ref7, maskOptions) {\n var foreground = _ref7.foreground,\n cellSize = _ref7.cellSize,\n isDark = _ref7.isDark,\n count = _ref7.count;\n var getCanvas = helpers.getCanvas,\n drawCanvas = helpers.drawCanvas;\n var width = cellSize * count;\n var canvasMask = getCanvas(width);\n var value = maskOptions.value,\n _maskOptions$foregrou = maskOptions.foregroundLight,\n foregroundLight = _maskOptions$foregrou === void 0 ? COLOR_WHITE : _maskOptions$foregrou;\n var context = canvasMask.getContext('2d');\n var canvasLayer = getCanvas(width);\n var canvasFg = getCanvas(width);\n var ctxLayer = canvasLayer.getContext('2d');\n [{\n dark: true,\n foreground: foreground\n }, {\n dark: false,\n foreground: foregroundLight\n }].forEach(function (item) {\n context.fillStyle = COLOR_BLACK;\n context.clearRect(0, 0, width, width);\n drawCells({\n cellSize: cellSize,\n count: count\n }, function (_ref8) {\n var i = _ref8.i,\n j = _ref8.j,\n x = _ref8.x,\n y = _ref8.y;\n\n if (isDark(i, j) ^ +!item.dark) {\n var fillSize;\n\n if (i <= 7 && j <= 7 || i <= 7 && count - j - 1 <= 7 || count - i - 1 <= 7 && j <= 7 || i + 5 <= count && i + 9 >= count && j + 5 <= count && j + 9 >= count || i === 7 || j === 7) {\n fillSize = 1 - 0.1 * value;\n } else {\n fillSize = 0.25;\n }\n\n var offset = (1 - fillSize) / 2;\n context.fillRect(x + offset * cellSize, y + offset * cellSize, fillSize * cellSize, fillSize * cellSize);\n }\n });\n drawCanvas(canvasLayer, item.foreground, {\n cellSize: cellSize,\n context: ctxLayer\n });\n ctxLayer.globalCompositeOperation = 'destination-in';\n ctxLayer.drawImage(canvasMask, 0, 0);\n drawCanvas(canvasFg, canvasLayer, {\n cellSize: cellSize,\n clear: false\n });\n });\n return canvasFg;\n}\n\nfunction drawCells(_ref9, drawEach) {\n var cellSize = _ref9.cellSize,\n count = _ref9.count;\n\n for (var i = 0; i < count; i += 1) {\n for (var j = 0; j < count; j += 1) {\n var x = j * cellSize;\n var y = i * cellSize;\n drawEach({\n i: i,\n j: j,\n x: x,\n y: y\n });\n }\n }\n}\n\nfunction drawCorner(ctx, cornerX, cornerY, x, y, r) {\n if (r) {\n ctx.arcTo(cornerX, cornerY, x, y, r);\n } else {\n ctx.lineTo(cornerX, cornerY);\n ctx.lineTo(x, y);\n }\n}\n\nfunction fillCorner(context, startX, startY, cornerX, cornerY, destX, destY, radius) {\n context.beginPath();\n context.moveTo(startX, startY);\n drawCorner(context, cornerX, cornerY, destX, destY, radius);\n context.lineTo(cornerX, cornerY);\n context.lineTo(startX, startY); // context.closePath();\n\n context.fill();\n}\n\n// Enable UTF_8 support\nqrcode.stringToBytes = qrcode.stringToBytesFuncs['UTF-8'];\nvar DEFAULTS = {\n background: 'white',\n foreground: 'black',\n typeNumber: 0,\n correctLevel: 'L',\n data: '',\n padding: 0,\n resize: true\n};\n\nvar QRCanvasRenderer = /*#__PURE__*/function () {\n function QRCanvasRenderer(options) {\n var _this = this;\n\n this.options = _extends({}, DEFAULTS);\n this.cache = {};\n\n this.isDark = function (i, j) {\n var _this$cache = _this.cache,\n qr = _this$cache.qr,\n count = _this$cache.count;\n if (i < 0 || i >= count || j < 0 || j >= count) return false;\n return qr.isDark(i, j);\n };\n\n this.setOptions(options);\n }\n\n var _proto = QRCanvasRenderer.prototype;\n\n _proto.render = function render(canvas, config) {\n if (config === void 0) {\n config = {};\n }\n\n var _this$options = this.options,\n background = _this$options.background,\n foreground = _this$options.foreground,\n padding = _this$options.padding,\n effect = _this$options.effect,\n logo = _this$options.logo,\n resize = _this$options.resize;\n var onRender = effects[effect.type] || effects[\"default\"];\n var count = this.cache.count;\n var drawCanvas = helpers.drawCanvas;\n var _config = config,\n size = _config.size;\n var canvasOut;\n var canvasBg;\n var canvasFg; // Prepare output canvas, resize it if cellSize or size is provided.\n\n {\n var _config2 = config,\n cellSize = _config2.cellSize;\n if (!canvas && !cellSize && !size) cellSize = 6;\n if (cellSize) size = count * cellSize + padding + padding;\n\n if (size) {\n canvasOut = resize || !canvas ? helpers.updateCanvas(canvas, size) : canvas;\n } else {\n size = canvas.width;\n canvasOut = canvas;\n }\n }\n var contentSize = size - padding - padding; // Create foreground and background layers on canvas\n\n {\n var _cellSize = Math.ceil(contentSize / count);\n\n var sketchSize = _cellSize * count;\n canvasBg = helpers.getCanvas(_cellSize * count);\n drawCanvas(canvasBg, background, {\n cellSize: _cellSize\n });\n canvasFg = onRender(_extends({\n foreground: foreground,\n cellSize: _cellSize,\n isDark: this.isDark\n }, this.cache), this.options.effect); // draw logo\n\n if (logo) {\n var logoLayer = _extends({}, logo);\n\n if (!logo.w && !logo.h && !logo.cols && !logo.rows) {\n var _ref = logo.image,\n width = _ref.width,\n height = _ref.height;\n var imageRatio = width / height;\n var posRatio = Math.min((count - 18) / count, 0.38);\n var h = Math.min(height, sketchSize * posRatio, sketchSize * posRatio / imageRatio);\n var w = h * imageRatio;\n var x = (sketchSize - w) / 2;\n var y = (sketchSize - h) / 2;\n logoLayer.w = w;\n logoLayer.h = h;\n logoLayer.x = x;\n logoLayer.y = y;\n }\n\n drawCanvas(canvasFg, logoLayer, {\n clear: false\n });\n }\n } // Combine the layers\n\n drawCanvas(canvasOut, [{\n image: canvasBg\n }, {\n image: canvasFg,\n x: padding,\n y: padding,\n w: contentSize,\n h: contentSize\n }]);\n return canvasOut;\n };\n\n _proto.setOptions = function setOptions(options) {\n this.options = _extends({}, this.options, options);\n this.normalizeEffect();\n this.normalizeLogo();\n var _this$options2 = this.options,\n typeNumber = _this$options2.typeNumber,\n data = _this$options2.data,\n logo = _this$options2.logo; // L / M / Q / H\n\n var correctLevel = this.options.correctLevel;\n if (logo && ['Q', 'H'].indexOf(correctLevel) < 0) correctLevel = 'H';\n var qr = qrcode(typeNumber, correctLevel);\n qr.addData(data || '');\n qr.make();\n var count = qr.getModuleCount();\n this.cache = {\n qr: qr,\n count: count\n };\n };\n\n _proto.normalizeEffect = function normalizeEffect() {\n var effect = this.options.effect;\n\n if (typeof effect === 'string') {\n effect = {\n type: effect\n };\n }\n\n this.options.effect = effect || {};\n };\n\n _proto.normalizeLogo = function normalizeLogo() {\n var isDrawable = helpers.isDrawable,\n drawText = helpers.drawText;\n var logo = this.options.logo;\n\n if (logo) {\n if (isDrawable(logo)) {\n logo = {\n image: logo\n };\n } else if (!isDrawable(logo.image)) {\n if (typeof logo === 'string') {\n logo = {\n text: logo\n };\n }\n\n if (typeof logo.text === 'string') {\n logo = {\n image: drawText(logo.text, logo.options)\n };\n } else {\n logo = null;\n }\n }\n }\n\n this.options.logo = logo;\n };\n\n return QRCanvasRenderer;\n}();\n\nfunction qrcanvas(options) {\n var canvas = options.canvas,\n size = options.size,\n cellSize = options.cellSize,\n rest = _objectWithoutPropertiesLoose(options, [\"canvas\", \"size\", \"cellSize\"]);\n\n var renderer = new QRCanvasRenderer(rest);\n return renderer.render(canvas, {\n size: size,\n cellSize: cellSize\n });\n}\n\nfunction setCanvasModule(canvasModule) {\n var Canvas = canvasModule.Canvas,\n Image = canvasModule.Image,\n createCanvas = canvasModule.createCanvas;\n\n var isCanvas = function isCanvas(el) {\n return el instanceof Canvas;\n };\n\n var isDrawable = function isDrawable(el) {\n return isCanvas(el) || el instanceof Image;\n };\n\n helpers.createCanvas = createCanvas;\n helpers.isCanvas = isCanvas;\n helpers.isDrawable = isDrawable;\n}\n\nexport { effects, helpers, qrcanvas, setCanvasModule };\n", "\uFEFFimport { Controller } from \"@hotwired/stimulus\";\r\nimport { qrcanvas } from \"qrcanvas\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n sendCodeUrl: String,\r\n resendCode: String,\r\n otpSecret: String\r\n };\r\n }\r\n\r\n static get targets() {\r\n return [\r\n \"smsAuthenticationMethodForm\",\r\n \"sendCodeButton\",\r\n \"sendCodeSuccessfulMessage\",\r\n \"sendCodeFailedMessage\",\r\n \"smsTwoFACode\",\r\n \"appAuthenticationMethodForm\",\r\n \"qrCode\",\r\n \"setUpAgain\"\r\n ];\r\n }\r\n\r\n displaySelectedAuthenticationMethodForm({ target }) {\r\n if (this.hasSmsAuthenticationMethodFormTarget) {\r\n this.smsAuthenticationMethodFormTarget.classList.toggle(\"d-none\", target.value !== \"SMS\");\r\n }\r\n\r\n this.appAuthenticationMethodFormTarget.classList.toggle(\"d-none\", target.value !== \"App\");\r\n }\r\n\r\n async sendCode() {\r\n this.sendCodeButtonTarget.disabled = true;\r\n this.sendCodeSuccessfulMessageTarget.classList.add(\"d-none\");\r\n this.sendCodeFailedMessageTarget.classList.add(\"d-none\");\r\n const response = await fetch(this.sendCodeUrlValue, { method: \"post\" });\r\n const { wasSuccessful } = await response.json();\r\n this.sendCodeSuccessfulMessageTarget.classList.toggle(\"d-none\", !wasSuccessful);\r\n this.sendCodeFailedMessageTarget.classList.toggle(\"d-none\", wasSuccessful);\r\n this.smsTwoFACodeTarget.focus();\r\n setTimeout(\r\n () => {\r\n this.sendCodeButtonTarget.textContent = this.resendCodeValue;\r\n this.sendCodeButtonTarget.disabled = false;\r\n },\r\n 5000\r\n );\r\n }\r\n\r\n displaySetUpAgain(e) {\r\n e.preventDefault();\r\n this.setUpAgainTarget.classList.remove(\"d-none\");\r\n e.target.remove();\r\n }\r\n\r\n qrCodeTargetConnected() {\r\n this.qrCodeTarget.appendChild(qrcanvas({\r\n data: `otpauth://totp/?secret=${this.otpSecretValue}`,\r\n size: 200\r\n }));\r\n }\r\n}", "import { Controller } from \"@hotwired/stimulus\";\r\n\r\nexport default class extends Controller {\r\n static get values() {\r\n return {\r\n markAsReadUrl: String,\r\n markAsUnreadUrl: String\r\n }\r\n }\r\n\r\n static get targets() {\r\n return [\"unreadIndicator\", \"markAllAsRead\", \"userNotification\"];\r\n }\r\n\r\n async markAsReadFromExternalSource(userNotificationId) {\r\n await this.markAsRequest(userNotificationId, true);\r\n const markAsElement = this.element.querySelector(`[data-user-notification-id=\"${userNotificationId}\"] .l-header__notifications-dropdown-item-mark-as`);\r\n\r\n if (markAsElement) {\r\n markAsElement.title = markAsElement.dataset.markAsUnreadTitle;\r\n markAsElement.classList.remove(\"l-header__notifications-dropdown-item-mark-as--read\");\r\n this.refreshGroupIndicators();\r\n }\r\n }\r\n\r\n async markAllAsRead(e) {\r\n e.preventDefault();\r\n\r\n for (const userNotificationTarget of this.userNotificationTargets) {\r\n const markAsElement = userNotificationTarget.querySelector(\".l-header__notifications-dropdown-item-mark-as\");\r\n\r\n if (markAsElement.classList.contains(\"l-header__notifications-dropdown-item-mark-as--read\")) {\r\n await this.markAsRequest(userNotificationTarget.dataset.userNotificationId, true);\r\n markAsElement.title = markAsElement.dataset.markAsUnreadTitle;\r\n markAsElement.classList.remove(\"l-header__notifications-dropdown-item-mark-as--read\");\r\n }\r\n }\r\n\r\n this.refreshGroupIndicators();\r\n }\r\n\r\n markAsReadWithoutRequest(e) {\r\n e.target.closest(\"[data-user-notification-id]\").querySelector(\".l-header__notifications-dropdown-item-mark-as\")?.classList.remove(\"l-header__notifications-dropdown-item-mark-as--read\");\r\n this.refreshGroupIndicators();\r\n }\r\n\r\n async markAs(e) {\r\n e.preventDefault();\r\n const userNotificationTarget = e.target.closest(\"[data-user-notification-id]\");\r\n const markAsElement = userNotificationTarget.querySelector(\".l-header__notifications-dropdown-item-mark-as\");\r\n const markAsRead = markAsElement.classList.contains(\"l-header__notifications-dropdown-item-mark-as--read\");\r\n await this.markAsRequest(userNotificationTarget.dataset.userNotificationId, markAsRead);\r\n markAsElement.title = markAsRead ? markAsElement.dataset.markAsUnreadTitle : markAsElement.dataset.markAsReadTitle;\r\n markAsElement.classList.toggle(\"l-header__notifications-dropdown-item-mark-as--read\", !markAsRead);\r\n this.refreshGroupIndicators();\r\n }\r\n\r\n async markAsRequest(userNotificationId, read) {\r\n const queryParams = new URLSearchParams({ id: userNotificationId });\r\n await fetch(`${read ? this.markAsReadUrlValue : this.markAsUnreadUrlValue}?${queryParams}`, { method: \"post\" });\r\n }\r\n\r\n refreshGroupIndicators() {\r\n const allRead = this.userNotificationTargets.filter(unt => unt.querySelector(\".l-header__notifications-dropdown-item-mark-as--read\")).length === 0;\r\n this.markAllAsReadTarget.classList.toggle(\"d-none\", allRead);\r\n this.unreadIndicatorTarget.classList.toggle(\"d-none\", allRead);\r\n }\r\n}", "const $ = jQuery.noConflict();\r\n\r\nfunction clickFocus() {\r\n\r\n $(document).on(\"click\", \"[data-clickfocus]\", function () {\r\n const selector = $(this).attr(\"data-clickfocus\");\r\n const elementToFocus = $(document).find(selector);\r\n\r\n if (elementToFocus.length) {\r\n //console.log(\"Direct focus applied\");\r\n elementToFocus.get(0).focus();\r\n } else {\r\n //console.log(\"Waiting for htmx swap to apply focus\");\r\n\r\n document.addEventListener(\"htmx:afterSwap\", function handleSwap(event) {\r\n const elementToFocus = $(selector);\r\n\r\n if (elementToFocus.length) {\r\n setTimeout(() => {\r\n //console.log(\"Focus applied after htmx swap\");\r\n elementToFocus.get(0).focus();\r\n }, 10);\r\n document.removeEventListener(\"htmx:afterSwap\", handleSwap);\r\n }\r\n });\r\n }\r\n });\r\n\r\n}\r\n\r\nfunction lazyImages() {\r\n\r\n window.lazySizesConfig = window.lazySizesConfig || {};\r\n lazySizesConfig.expand = 1500;\r\n lazySizesConfig.loadHidden = false;\r\n}\r\n\r\nfunction flickity() {\r\n\r\n $('.c-card__carousel').flickity({\r\n // options\r\n cellAlign: 'left',\r\n contain: true,\r\n pageDots: false,\r\n wrapAround: true,\r\n \"imagesLoaded\": true\r\n });\r\n\r\n $('.c-carousel').flickity({\r\n // options\r\n cellAlign: 'left',\r\n contain: true,\r\n pageDots: false,\r\n autoPlay: 5000,\r\n wrapAround: true,\r\n \"imagesLoaded\": true\r\n });\r\n\r\n $('.c-carousel--activities').flickity({\r\n // options\r\n cellAlign: 'center',\r\n contain: true,\r\n pageDots: true,\r\n autoPlay: 3000,\r\n wrapAround: true,\r\n \"imagesLoaded\": true,\r\n prevNextButtons: false\r\n });\r\n\r\n $('.c-carousel--categories').flickity({\r\n // options\r\n cellAlign: 'left',\r\n contain: true,\r\n pageDots: false,\r\n wrapAround: false,\r\n freeScroll: true,\r\n \"imagesLoaded\": true\r\n });\r\n\r\n $('.c-carousel-badges').flickity({\r\n // options\r\n cellAlign: 'left',\r\n contain: true,\r\n pageDots: false,\r\n autoPlay: 5000,\r\n wrapAround: true,\r\n \"imagesLoaded\": true\r\n });\r\n \r\n}\r\n\r\nfunction flickityFeedResize() {\r\n if ($('.c-feed__view-switcher').length > 0) {\r\n $('.c-feed__view-switcher label').on('click', function () {\r\n $('.c-card__carousel').flickity('resize');\r\n $('.c-carousel--activities').flickity('resize');\r\n });\r\n }\r\n}\r\n\r\nfunction matchHeight() {\r\n\r\n $('.js-match-height').matchHeight();\r\n $('.js-match-height-card').matchHeight();\r\n \r\n}\r\n\r\nfunction customScrollbar() {\r\n\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('.js-custom-scrollbar'),\r\n (el) => new SimpleBar(el)\r\n );\r\n\r\n $('.js-search').on('focus', function() {\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('.tt-menu'),\r\n (el) => new SimpleBar(el)\r\n );\r\n });\r\n\r\n $('#searchAddress').on('focus', function() {\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('.tt-menu'),\r\n (el) => new SimpleBar(el)\r\n );\r\n });\r\n \r\n}\r\n\r\nfunction datepicker() {\r\n\r\n $( '.js-datepicker' ).datepicker({\r\n orientation: \"bottom auto\",\r\n autoclose: true,\r\n language: is.culture\r\n });\r\n\r\n var dateMinus25Years = new Date();\r\n dateMinus25Years.setFullYear(dateMinus25Years.getFullYear() - 25);\r\n\r\n $('.js-datepicker-dob').datepicker({\r\n orientation: \"bottom auto\",\r\n autoclose: true,\r\n language: is.culture,\r\n defaultViewDate: {\r\n year: dateMinus25Years.getFullYear(),\r\n month: dateMinus25Years.getMonth(),\r\n day: dateMinus25Years.getDate()\r\n },\r\n defaultDate: dateMinus25Years,\r\n setDate: dateMinus25Years\r\n });\r\n\r\n}\r\n\r\nfunction select2() {\r\n\r\n $('.js-select').select2();\r\n \r\n}\r\n\r\nfunction magnificPopup() {\r\n\r\n $('.c-carousel-popup').magnificPopup({\r\n type: 'image',\r\n disableOn: 576,\r\n gallery:{enabled:true},\r\n closeOnContentClick: true\r\n });\r\n\r\n}\r\n\r\nfunction magnificPopupResize() {\r\n if( $('.c-carousel-popup').length > 0 ) {\r\n if( $(window).width() < 600 ) {\r\n $('.c-carousel-popup').on('click', function() {\r\n return false;\r\n });\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction tooltips() {\r\n document.querySelectorAll('[data-bs-toggle=\"tooltip\"]').forEach(t => new bootstrap.Tooltip(t));\r\n\r\n const popoverTriggerList = document.querySelectorAll('[data-bs-toggle=\"popover\"]')\r\n const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))\r\n\r\n // Close the popover when clicking outside\r\n document.addEventListener('click', function (e) {\r\n var popovers = document.querySelectorAll('.popover');\r\n\r\n if (popovers.length > 0) {\r\n popovers.forEach(function (popoverElement) {\r\n if (popoverElement.classList.contains('show')) {\r\n if (!popoverElement.contains(e.target)) {\r\n popoverElement.classList.remove('show');\r\n $(document).find('.popover').hide();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n document.addEventListener('mouseover', function (e) {\r\n if (e.target.closest('[data-bs-toggle=\"popover\"]')) {\r\n e.target.click();\r\n }\r\n });\r\n}\r\n\r\n$(function () {\r\n clickFocus();\r\n lazyImages();\r\n flickity();\r\n flickityFeedResize();\r\n matchHeight();\r\n customScrollbar();\r\n datepicker();\r\n select2();\r\n magnificPopup();\r\n magnificPopupResize();\r\n tooltips();\r\n});\r\n\r\n$(window).on(\"resize\", magnificPopupResize);\r\n\r\nwindow.flickity = flickity;", "import { Application } from \"@hotwired/stimulus\";\r\nimport AjaxPopoverController from \"./controllers/AjaxPopoverController\";\r\nimport AtLeastOneCheckedController from \"./controllers/AtLeastOneCheckedController\";\r\nimport BadgeCollectedController from \"./controllers/BadgeCollectedController\";\r\nimport CheckoutAddressEntryController from \"./controllers/CheckoutAddressEntryController\";\r\nimport ClaimsQualifyingProductsController from \"./controllers/ClaimsQualifyingProductsController\";\r\nimport CodeEntryController from \"./controllers/CodeEntryController\";\r\nimport CredentialsController from \"./controllers/CredentialsController\";\r\nimport FavouriteController from \"./controllers/FavouriteController\";\r\nimport FeedController from \"./controllers/FeedController\";\r\nimport FeedItemController from \"./controllers/FeedItemController\";\r\nimport FeedLikeButtonController from \"./controllers/FeedLikeButtonController\";\r\nimport FeedPostCreateController from \"./controllers/FeedPostCreateController\";\r\nimport GifPauseController from \"./controllers/GifPauseController\";\r\nimport FormController from \"./controllers/FormController\";\r\nimport HelpController from \"./controllers/HelpController\";\r\nimport LayoutAccountDropdownController from \"./controllers/LayoutAccountDropdownController\";\r\nimport LayoutController from \"./controllers/LayoutController\";\r\nimport IntercomController from \"./controllers/IntercomController\";\r\nimport LayoutSearchSuggestController from \"./controllers/LayoutSearchSuggestController\";\r\nimport LogUserActionController from \"./controllers/LogUserActionController\";\r\nimport MembershipRequestController from \"./controllers/MembershipRequestController\";\r\nimport MyEventsCalendarController from \"./controllers/MyEventsCalendarController\";\r\nimport MyEventsDetailController from \"./controllers/MyEventsDetailController\";\r\nimport NominationCreateController from \"./controllers/NominationCreateController\";\r\nimport PrizeController from \"./controllers/PrizeController\";\r\nimport ProfileController from \"./controllers/ProfileController\";\r\nimport ProfileEditPictureController from \"./controllers/ProfileEditPictureController\";\r\nimport ReferAFriendController from \"./controllers/ReferAFriendController\";\r\nimport RegistrationProfileController from \"./controllers/RegistrationProfileController\";\r\nimport RewardController from \"./controllers/RewardController\";\r\nimport RewardsController from \"./controllers/RewardsController\";\r\nimport SalesTargetVisualisation from \"./controllers/SalesTargetVisualisation\";\r\nimport ScratchcardController from \"./controllers/ScratchcardController\";\r\nimport SignInVerifySmsController from \"./controllers/SignInVerifySmsController\";\r\nimport SpinTheWheelController from \"./controllers/SpinTheWheelController\";\r\nimport SpinnerController from \"./controllers/SpinnerController\";\r\nimport ConfirmController from \"./controllers/ConfirmController\";\r\nimport SpendRequestController from \"./controllers/SpendRequestController\";\r\nimport TelephoneNumberController from \"./controllers/TelephoneNumberController\";\r\nimport TwoFASettingsController from \"./controllers/TwoFASettingsController\";\r\nimport UserNotificationsController from \"./controllers/UserNotificationsController\";\r\nimport \"./plugins\";\r\n\r\nconst application = Application.start();\r\napplication.register(\"ajax-popover\", AjaxPopoverController);\r\napplication.register(\"at-least-one-checked\", AtLeastOneCheckedController);\r\napplication.register(\"badge-collected\", BadgeCollectedController);\r\napplication.register(\"checkout-address-entry\", CheckoutAddressEntryController);\r\napplication.register(\"claims-qualifying-products\", ClaimsQualifyingProductsController);\r\napplication.register(\"code-entry\", CodeEntryController);\r\napplication.register(\"credentials\", CredentialsController);\r\napplication.register(\"favourite\", FavouriteController);\r\napplication.register(\"feed-item\", FeedItemController);\r\napplication.register(\"feed-like-button\", FeedLikeButtonController);\r\napplication.register(\"feed-post-create\", FeedPostCreateController);\r\napplication.register(\"gif-pause\", GifPauseController);\r\napplication.register(\"feed\", FeedController);\r\napplication.register(\"form\", FormController);\r\napplication.register(\"help\", HelpController);\r\napplication.register(\"layout\", LayoutController);\r\napplication.register(\"layout-account-dropdown\", LayoutAccountDropdownController);\r\napplication.register(\"layout-search-suggest\", LayoutSearchSuggestController);\r\napplication.register(\"log-user-action\", LogUserActionController);\r\napplication.register(\"membership-request\", MembershipRequestController);\r\napplication.register(\"my-events-calendar\", MyEventsCalendarController);\r\napplication.register(\"my-events-detail\", MyEventsDetailController);\r\napplication.register(\"nomination-create\", NominationCreateController);\r\napplication.register(\"prize\", PrizeController)\r\napplication.register(\"profile\", ProfileController);\r\napplication.register(\"profile-edit-picture\", ProfileEditPictureController);\r\napplication.register(\"refer-a-friend\", ReferAFriendController);\r\napplication.register(\"registration-profile\", RegistrationProfileController);\r\napplication.register(\"reward\", RewardController);\r\napplication.register(\"rewards\", RewardsController);\r\napplication.register(\"sales-target-visualisation\", SalesTargetVisualisation);\r\napplication.register(\"scratchcard\", ScratchcardController);\r\napplication.register(\"sign-in-verify-sms\", SignInVerifySmsController);\r\napplication.register(\"spin-the-wheel\", SpinTheWheelController);\r\napplication.register(\"spinner\", SpinnerController);\r\napplication.register(\"telephone-number\", TelephoneNumberController);\r\napplication.register(\"two-fa-settings\", TwoFASettingsController);\r\napplication.register(\"user-notifications\", UserNotificationsController);\r\napplication.register(\"confirm\", ConfirmController);\r\napplication.register(\"spend-request\", SpendRequestController);\r\napplication.register(\"intercom\", IntercomController);"], "mappings": "0xBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEA,IAAMC,GAAN,KAAsB,CACpB,YAAYC,EAAU,CAAE,OAAiB,EAAG,CAC1C,KAAK,MAAQ,GACb,KAAK,SAAWA,EAChB,KAAK,OAAS,CAAC,CACjB,CAEA,OAAQ,CACN,OAAO,IAAK,KAAK,SAAS,QAASC,GAAW,CAC5C,KAAK,OAAO,KAAKA,CAAO,EAEnB,KAAK,QACR,KAAK,MAAQ,GACb,KAAK,OAAO,MAAM,EAAE,EAExB,CAAC,CACH,CAEA,OAAQ,CACF,KAAK,OAAO,OACd,KAAK,OAAO,MAAM,EAAE,EAEpB,KAAK,MAAQ,EAEjB,CACF,EAEAH,GAAO,QAAUC,KC7BjB,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAUE,SAAUC,EAAQC,EAAU,CAE7B,aAEK,OAAOF,IAAW,UAAY,OAAOA,GAAO,SAAY,SAS5DA,GAAO,QAAUC,EAAO,SACvBC,EAASD,EAAQ,EAAK,EACtB,SAAUE,EAAI,CACb,GAAK,CAACA,EAAE,SACP,MAAM,IAAI,MAAO,0CAA2C,EAE7D,OAAOD,EAASC,CAAE,CACnB,EAEDD,EAASD,CAAO,CAIlB,GAAK,OAAO,OAAW,IAAc,OAASF,GAAM,SAAUK,EAAQC,EAAW,CAMjF,aAEA,IAAIC,EAAM,CAAC,EAEPC,EAAW,OAAO,eAElBC,EAAQF,EAAI,MAEZG,EAAOH,EAAI,KAAO,SAAUI,EAAQ,CACvC,OAAOJ,EAAI,KAAK,KAAMI,CAAM,CAC7B,EAAI,SAAUA,EAAQ,CACrB,OAAOJ,EAAI,OAAO,MAAO,CAAC,EAAGI,CAAM,CACpC,EAGIC,EAAOL,EAAI,KAEXM,EAAUN,EAAI,QAEdO,EAAa,CAAC,EAEdC,EAAWD,EAAW,SAEtBE,EAASF,EAAW,eAEpBG,EAAaD,EAAO,SAEpBE,EAAuBD,EAAW,KAAM,MAAO,EAE/CE,EAAU,CAAC,EAEXC,EAAa,SAAqBC,EAAM,CAS1C,OAAO,OAAOA,GAAQ,YAAc,OAAOA,EAAI,UAAa,UAC3D,OAAOA,EAAI,MAAS,UACtB,EAGGC,EAAW,SAAmBD,EAAM,CACtC,OAAOA,GAAO,MAAQA,IAAQA,EAAI,MACnC,EAGGE,EAAWlB,EAAO,SAIjBmB,EAA4B,CAC/B,KAAM,GACN,IAAK,GACL,MAAO,GACP,SAAU,EACX,EAEA,SAASC,EAASC,EAAMC,EAAMC,EAAM,CACnCA,EAAMA,GAAOL,EAEb,IAAIM,EAAGC,EACNC,EAASH,EAAI,cAAe,QAAS,EAGtC,GADAG,EAAO,KAAOL,EACTC,EACJ,IAAME,KAAKL,EAYVM,EAAMH,EAAME,CAAE,GAAKF,EAAK,cAAgBA,EAAK,aAAcE,CAAE,EACxDC,GACJC,EAAO,aAAcF,EAAGC,CAAI,EAI/BF,EAAI,KAAK,YAAaG,CAAO,EAAE,WAAW,YAAaA,CAAO,CAC/D,CAGD,SAASC,EAAQX,EAAM,CACtB,OAAKA,GAAO,KACJA,EAAM,GAIP,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,WAChDP,EAAYC,EAAS,KAAMM,CAAI,CAAE,GAAK,SACtC,OAAOA,CACT,CAOA,IAAIY,EAAU,QAEbC,EAAc,SAGdC,EAAS,SAAUC,EAAUC,EAAU,CAItC,OAAO,IAAIF,EAAO,GAAG,KAAMC,EAAUC,CAAQ,CAC9C,EAEDF,EAAO,GAAKA,EAAO,UAAY,CAG9B,OAAQF,EAER,YAAaE,EAGb,OAAQ,EAER,QAAS,UAAW,CACnB,OAAO1B,EAAM,KAAM,IAAK,CACzB,EAIA,IAAK,SAAU6B,EAAM,CAGpB,OAAKA,GAAO,KACJ7B,EAAM,KAAM,IAAK,EAIlB6B,EAAM,EAAI,KAAMA,EAAM,KAAK,MAAO,EAAI,KAAMA,CAAI,CACxD,EAIA,UAAW,SAAUC,EAAQ,CAG5B,IAAIC,EAAML,EAAO,MAAO,KAAK,YAAY,EAAGI,CAAM,EAGlD,OAAAC,EAAI,WAAa,KAGVA,CACR,EAGA,KAAM,SAAUC,EAAW,CAC1B,OAAON,EAAO,KAAM,KAAMM,CAAS,CACpC,EAEA,IAAK,SAAUA,EAAW,CACzB,OAAO,KAAK,UAAWN,EAAO,IAAK,KAAM,SAAUO,EAAMb,EAAI,CAC5D,OAAOY,EAAS,KAAMC,EAAMb,EAAGa,CAAK,CACrC,CAAE,CAAE,CACL,EAEA,MAAO,UAAW,CACjB,OAAO,KAAK,UAAWjC,EAAM,MAAO,KAAM,SAAU,CAAE,CACvD,EAEA,MAAO,UAAW,CACjB,OAAO,KAAK,GAAI,CAAE,CACnB,EAEA,KAAM,UAAW,CAChB,OAAO,KAAK,GAAI,EAAG,CACpB,EAEA,KAAM,UAAW,CAChB,OAAO,KAAK,UAAW0B,EAAO,KAAM,KAAM,SAAUQ,EAAOd,EAAI,CAC9D,OAASA,EAAI,GAAM,CACpB,CAAE,CAAE,CACL,EAEA,IAAK,UAAW,CACf,OAAO,KAAK,UAAWM,EAAO,KAAM,KAAM,SAAUQ,EAAOd,EAAI,CAC9D,OAAOA,EAAI,CACZ,CAAE,CAAE,CACL,EAEA,GAAI,SAAUA,EAAI,CACjB,IAAIe,EAAM,KAAK,OACdC,EAAI,CAAChB,GAAMA,EAAI,EAAIe,EAAM,GAC1B,OAAO,KAAK,UAAWC,GAAK,GAAKA,EAAID,EAAM,CAAE,KAAMC,CAAE,CAAE,EAAI,CAAC,CAAE,CAC/D,EAEA,IAAK,UAAW,CACf,OAAO,KAAK,YAAc,KAAK,YAAY,CAC5C,EAIA,KAAMjC,EACN,KAAML,EAAI,KACV,OAAQA,EAAI,MACb,EAEA4B,EAAO,OAASA,EAAO,GAAG,OAAS,UAAW,CAC7C,IAAIW,EAASC,EAAMC,EAAKC,EAAMC,EAAaC,EAC1CC,EAAS,UAAW,CAAE,GAAK,CAAC,EAC5BvB,EAAI,EACJwB,EAAS,UAAU,OACnBC,EAAO,GAsBR,IAnBK,OAAOF,GAAW,YACtBE,EAAOF,EAGPA,EAAS,UAAWvB,CAAE,GAAK,CAAC,EAC5BA,KAII,OAAOuB,GAAW,UAAY,CAAChC,EAAYgC,CAAO,IACtDA,EAAS,CAAC,GAINvB,IAAMwB,IACVD,EAAS,KACTvB,KAGOA,EAAIwB,EAAQxB,IAGnB,IAAOiB,EAAU,UAAWjB,CAAE,IAAO,KAGpC,IAAMkB,KAAQD,EACbG,EAAOH,EAASC,CAAK,EAIhB,EAAAA,IAAS,aAAeK,IAAWH,KAKnCK,GAAQL,IAAUd,EAAO,cAAec,CAAK,IAC/CC,EAAc,MAAM,QAASD,CAAK,KACpCD,EAAMI,EAAQL,CAAK,EAGdG,GAAe,CAAC,MAAM,QAASF,CAAI,EACvCG,EAAQ,CAAC,EACE,CAACD,GAAe,CAACf,EAAO,cAAea,CAAI,EACtDG,EAAQ,CAAC,EAETA,EAAQH,EAETE,EAAc,GAGdE,EAAQL,CAAK,EAAIZ,EAAO,OAAQmB,EAAMH,EAAOF,CAAK,GAGvCA,IAAS,SACpBG,EAAQL,CAAK,EAAIE,IAOrB,OAAOG,CACR,EAEAjB,EAAO,OAAQ,CAGd,QAAS,UAAaF,EAAU,KAAK,OAAO,GAAI,QAAS,MAAO,EAAG,EAGnE,QAAS,GAET,MAAO,SAAUsB,EAAM,CACtB,MAAM,IAAI,MAAOA,CAAI,CACtB,EAEA,KAAM,UAAW,CAAC,EAElB,cAAe,SAAUlC,EAAM,CAC9B,IAAImC,EAAOC,EAIX,MAAK,CAACpC,GAAON,EAAS,KAAMM,CAAI,IAAM,kBAC9B,IAGRmC,EAAQhD,EAAUa,CAAI,EAGhBmC,GAKNC,EAAOzC,EAAO,KAAMwC,EAAO,aAAc,GAAKA,EAAM,YAC7C,OAAOC,GAAS,YAAcxC,EAAW,KAAMwC,CAAK,IAAMvC,GALzD,GAMT,EAEA,cAAe,SAAUG,EAAM,CAC9B,IAAI0B,EAEJ,IAAMA,KAAQ1B,EACb,MAAO,GAER,MAAO,EACR,EAIA,WAAY,SAAUK,EAAMoB,EAASlB,EAAM,CAC1CH,EAASC,EAAM,CAAE,MAAOoB,GAAWA,EAAQ,KAAM,EAAGlB,CAAI,CACzD,EAEA,KAAM,SAAUP,EAAKoB,EAAW,CAC/B,IAAIY,EAAQxB,EAAI,EAEhB,GAAK6B,EAAarC,CAAI,EAErB,IADAgC,EAAShC,EAAI,OACLQ,EAAIwB,GACNZ,EAAS,KAAMpB,EAAKQ,CAAE,EAAGA,EAAGR,EAAKQ,CAAE,CAAE,IAAM,GAD7BA,IACnB,KAKD,KAAMA,KAAKR,EACV,GAAKoB,EAAS,KAAMpB,EAAKQ,CAAE,EAAGA,EAAGR,EAAKQ,CAAE,CAAE,IAAM,GAC/C,MAKH,OAAOR,CACR,EAIA,KAAM,SAAUqB,EAAO,CACtB,IAAIf,EACHa,EAAM,GACNX,EAAI,EACJ8B,EAAWjB,EAAK,SAEjB,GAAK,CAACiB,EAGL,KAAUhC,EAAOe,EAAMb,GAAI,GAG1BW,GAAOL,EAAO,KAAMR,CAAK,EAG3B,OAAKgC,IAAa,GAAKA,IAAa,GAC5BjB,EAAK,YAERiB,IAAa,EACVjB,EAAK,gBAAgB,YAExBiB,IAAa,GAAKA,IAAa,EAC5BjB,EAAK,UAKNF,CACR,EAGA,UAAW,SAAUjC,EAAKqD,EAAU,CACnC,IAAIpB,EAAMoB,GAAW,CAAC,EAEtB,OAAKrD,GAAO,OACNmD,EAAa,OAAQnD,CAAI,CAAE,EAC/B4B,EAAO,MAAOK,EACb,OAAOjC,GAAQ,SACd,CAAEA,CAAI,EAAIA,CACZ,EAEAK,EAAK,KAAM4B,EAAKjC,CAAI,GAIfiC,CACR,EAEA,QAAS,SAAUE,EAAMnC,EAAKsB,EAAI,CACjC,OAAOtB,GAAO,KAAO,GAAKM,EAAQ,KAAMN,EAAKmC,EAAMb,CAAE,CACtD,EAEA,SAAU,SAAUa,EAAO,CAC1B,IAAImB,EAAYnB,GAAQA,EAAK,aAC5BoB,EAAUpB,IAAUA,EAAK,eAAiBA,GAAO,gBAIlD,MAAO,CAACR,EAAY,KAAM2B,GAAaC,GAAWA,EAAQ,UAAY,MAAO,CAC9E,EAIA,MAAO,SAAUC,EAAOC,EAAS,CAKhC,QAJIpB,EAAM,CAACoB,EAAO,OACjBnB,EAAI,EACJhB,EAAIkC,EAAM,OAEHlB,EAAID,EAAKC,IAChBkB,EAAOlC,GAAI,EAAImC,EAAQnB,CAAE,EAG1B,OAAAkB,EAAM,OAASlC,EAERkC,CACR,EAEA,KAAM,SAAUxB,EAAOE,EAAUwB,EAAS,CASzC,QARIC,EACHC,EAAU,CAAC,EACXtC,EAAI,EACJwB,EAASd,EAAM,OACf6B,EAAiB,CAACH,EAIXpC,EAAIwB,EAAQxB,IACnBqC,EAAkB,CAACzB,EAAUF,EAAOV,CAAE,EAAGA,CAAE,EACtCqC,IAAoBE,GACxBD,EAAQ,KAAM5B,EAAOV,CAAE,CAAE,EAI3B,OAAOsC,CACR,EAGA,IAAK,SAAU5B,EAAOE,EAAU4B,EAAM,CACrC,IAAIhB,EAAQiB,EACXzC,EAAI,EACJW,EAAM,CAAC,EAGR,GAAKkB,EAAanB,CAAM,EAEvB,IADAc,EAASd,EAAM,OACPV,EAAIwB,EAAQxB,IACnByC,EAAQ7B,EAAUF,EAAOV,CAAE,EAAGA,EAAGwC,CAAI,EAEhCC,GAAS,MACb9B,EAAI,KAAM8B,CAAM,MAMlB,KAAMzC,KAAKU,EACV+B,EAAQ7B,EAAUF,EAAOV,CAAE,EAAGA,EAAGwC,CAAI,EAEhCC,GAAS,MACb9B,EAAI,KAAM8B,CAAM,EAMnB,OAAO5D,EAAM8B,CAAI,CAClB,EAGA,KAAM,EAIN,QAASrB,CACV,CAAE,EAEG,OAAO,QAAW,aACtBgB,EAAO,GAAI,OAAO,QAAS,EAAI5B,EAAK,OAAO,QAAS,GAIrD4B,EAAO,KAAM,uEAAuE,MAAO,GAAI,EAC9F,SAAUoC,EAAIxB,EAAO,CACpBjC,EAAY,WAAaiC,EAAO,GAAI,EAAIA,EAAK,YAAY,CAC1D,CAAE,EAEH,SAASW,EAAarC,EAAM,CAM3B,IAAIgC,EAAS,CAAC,CAAChC,GAAO,WAAYA,GAAOA,EAAI,OAC5CmD,EAAOxC,EAAQX,CAAI,EAEpB,OAAKD,EAAYC,CAAI,GAAKC,EAAUD,CAAI,EAChC,GAGDmD,IAAS,SAAWnB,IAAW,GACrC,OAAOA,GAAW,UAAYA,EAAS,GAAOA,EAAS,KAAOhC,CAChE,CAGA,SAASoD,EAAU/B,EAAMK,EAAO,CAE/B,OAAOL,EAAK,UAAYA,EAAK,SAAS,YAAY,IAAMK,EAAK,YAAY,CAE1E,CACA,IAAI2B,EAAMnE,EAAI,IAGVoE,EAAOpE,EAAI,KAGXqE,EAASrE,EAAI,OAGbsE,EAAa,sBAGbC,GAAW,IAAI,OAClB,IAAMD,EAAa,8BAAgCA,EAAa,KAChE,GACD,EAMA1C,EAAO,SAAW,SAAU4C,EAAGC,EAAI,CAClC,IAAIC,EAAMD,GAAKA,EAAE,WAEjB,OAAOD,IAAME,GAAO,CAAC,EAAGA,GAAOA,EAAI,WAAa,IAI/CF,EAAE,SACDA,EAAE,SAAUE,CAAI,EAChBF,EAAE,yBAA2BA,EAAE,wBAAyBE,CAAI,EAAI,IAEnE,EAOA,IAAIC,GAAa,+CAEjB,SAASC,GAAYC,EAAIC,EAAc,CACtC,OAAKA,EAGCD,IAAO,KACJ,SAIDA,EAAG,MAAO,EAAG,EAAG,EAAI,KAAOA,EAAG,WAAYA,EAAG,OAAS,CAAE,EAAE,SAAU,EAAG,EAAI,IAI5E,KAAOA,CACf,CAEAjD,EAAO,eAAiB,SAAUmD,EAAM,CACvC,OAASA,EAAM,IAAK,QAASJ,GAAYC,EAAW,CACrD,EAKA,IAAII,GAAehE,EAClBiE,GAAa5E,GAEZ,UAAW,CAEb,IAAIiB,EACH4D,EACAC,EACAC,EACAC,EACAhF,EAAO4E,GAGPjE,EACAsE,EACAC,EACAC,EACA5B,EAGA6B,EAAU7D,EAAO,QACjB8D,EAAU,EACVC,GAAO,EACPC,GAAaC,GAAY,EACzBC,GAAaD,GAAY,EACzBE,GAAgBF,GAAY,EAC5BG,GAAyBH,GAAY,EACrCI,GAAY,SAAUzB,EAAGC,EAAI,CAC5B,OAAKD,IAAMC,IACVY,EAAe,IAET,CACR,EAEAa,GAAW,6HAMXC,GAAa,0BAA4B7B,EACxC,0CAGD8B,GAAa,MAAQ9B,EAAa,KAAO6B,GAAa,OAAS7B,EAG9D,gBAAkBA,EAGlB,wDAA6D6B,GAAa,OAC1E7B,EAAa,OAEd+B,GAAU,KAAOF,GAAa,qFAOAC,GAAa,eAO3CE,GAAc,IAAI,OAAQhC,EAAa,IAAK,GAAI,EAEhDiC,GAAS,IAAI,OAAQ,IAAMjC,EAAa,KAAOA,EAAa,GAAI,EAChEkC,GAAqB,IAAI,OAAQ,IAAMlC,EAAa,WAAaA,EAAa,IAC7EA,EAAa,GAAI,EAClBmC,GAAW,IAAI,OAAQnC,EAAa,IAAK,EAEzCoC,GAAU,IAAI,OAAQL,EAAQ,EAC9BM,GAAc,IAAI,OAAQ,IAAMR,GAAa,GAAI,EAEjDS,GAAY,CACX,GAAI,IAAI,OAAQ,MAAQT,GAAa,GAAI,EACzC,MAAO,IAAI,OAAQ,QAAUA,GAAa,GAAI,EAC9C,IAAK,IAAI,OAAQ,KAAOA,GAAa,OAAQ,EAC7C,KAAM,IAAI,OAAQ,IAAMC,EAAW,EACnC,OAAQ,IAAI,OAAQ,IAAMC,EAAQ,EAClC,MAAO,IAAI,OACV,yDACC/B,EAAa,+BAAiCA,EAAa,cAC3DA,EAAa,aAAeA,EAAa,SAAU,GAAI,EACzD,KAAM,IAAI,OAAQ,OAAS4B,GAAW,KAAM,GAAI,EAIhD,aAAc,IAAI,OAAQ,IAAM5B,EAC/B,mDAAqDA,EACrD,mBAAqBA,EAAa,mBAAoB,GAAI,CAC5D,EAEAuC,GAAU,sCACVC,GAAU,SAGVC,GAAa,mCAEbC,GAAW,OAIXC,GAAY,IAAI,OAAQ,uBAAyB3C,EAChD,uBAAwB,GAAI,EAC7B4C,GAAY,SAAUC,EAAQC,EAAS,CACtC,IAAIC,EAAO,KAAOF,EAAO,MAAO,CAAE,EAAI,MAEtC,OAAKC,IAUEC,EAAO,EACb,OAAO,aAAcA,EAAO,KAAQ,EACpC,OAAO,aAAcA,GAAQ,GAAK,MAAQA,EAAO,KAAQ,KAAO,EAClE,EAMAC,GAAgB,UAAW,CAC1BC,GAAY,CACb,EAEAC,GAAqBC,GACpB,SAAUtF,EAAO,CAChB,OAAOA,EAAK,WAAa,IAAQ+B,EAAU/B,EAAM,UAAW,CAC7D,EACA,CAAE,IAAK,aAAc,KAAM,QAAS,CACrC,EAKD,SAASuF,IAAoB,CAC5B,GAAI,CACH,OAAO1G,EAAS,aACjB,MAAgB,CAAE,CACnB,CAGA,GAAI,CACHX,EAAK,MACFL,EAAME,EAAM,KAAM8E,GAAa,UAAW,EAC5CA,GAAa,UACd,EAKAhF,EAAKgF,GAAa,WAAW,MAAO,EAAE,QACvC,MAAc,CACb3E,EAAO,CACN,MAAO,SAAUwC,EAAQ8E,EAAM,CAC9B1C,GAAW,MAAOpC,EAAQ3C,EAAM,KAAMyH,CAAI,CAAE,CAC7C,EACA,KAAM,SAAU9E,EAAS,CACxBoC,GAAW,MAAOpC,EAAQ3C,EAAM,KAAM,UAAW,CAAE,CAAE,CACtD,CACD,CACD,CAEA,SAAS0H,GAAM/F,EAAUC,EAASuB,EAASwE,EAAO,CACjD,IAAIC,EAAGxG,GAAGa,GAAM4F,GAAKC,GAAOC,GAAQC,GACnCC,GAAarG,GAAWA,EAAQ,cAGhCsB,GAAWtB,EAAUA,EAAQ,SAAW,EAKzC,GAHAuB,EAAUA,GAAW,CAAC,EAGjB,OAAOxB,GAAa,UAAY,CAACA,GACrCuB,KAAa,GAAKA,KAAa,GAAKA,KAAa,GAEjD,OAAOC,EAIR,GAAK,CAACwE,IACLN,GAAazF,CAAQ,EACrBA,EAAUA,GAAWd,EAEhBuE,GAAiB,CAIrB,GAAKnC,KAAa,KAAQ4E,GAAQjB,GAAW,KAAMlF,CAAS,GAG3D,GAAOiG,EAAIE,GAAO,CAAE,GAGnB,GAAK5E,KAAa,EACjB,GAAOjB,GAAOL,EAAQ,eAAgBgG,CAAE,GAIvC,GAAK3F,GAAK,KAAO2F,EAChB,OAAAzH,EAAK,KAAMgD,EAASlB,EAAK,EAClBkB,MAGR,QAAOA,UAQH8E,KAAgBhG,GAAOgG,GAAW,eAAgBL,CAAE,IACxDF,GAAK,SAAU9F,EAASK,EAAK,GAC7BA,GAAK,KAAO2F,EAEZ,OAAAzH,EAAK,KAAMgD,EAASlB,EAAK,EAClBkB,MAKH,IAAK2E,GAAO,CAAE,EACpB,OAAA3H,EAAK,MAAOgD,EAASvB,EAAQ,qBAAsBD,CAAS,CAAE,EACvDwB,EAGD,IAAOyE,EAAIE,GAAO,CAAE,IAAOlG,EAAQ,uBACzC,OAAAzB,EAAK,MAAOgD,EAASvB,EAAQ,uBAAwBgG,CAAE,CAAE,EAClDzE,EAKT,GAAK,CAAC2C,GAAwBnE,EAAW,GAAI,IAC1C,CAAC2D,GAAa,CAACA,EAAU,KAAM3D,CAAS,GAAM,CAYhD,GAVAqG,GAAcrG,EACdsG,GAAarG,EASRsB,KAAa,IACfqD,GAAS,KAAM5E,CAAS,GAAK2E,GAAmB,KAAM3E,CAAS,GAAM,CAyBvE,IAtBAsG,GAAanB,GAAS,KAAMnF,CAAS,GAAKuG,GAAatG,EAAQ,UAAW,GACzEA,GAQIqG,IAAcrG,GAAW,CAAClB,EAAQ,UAG/BmH,GAAMjG,EAAQ,aAAc,IAAK,GACvCiG,GAAMnG,EAAO,eAAgBmG,EAAI,EAEjCjG,EAAQ,aAAc,KAAQiG,GAAMtC,CAAU,GAKhDwC,GAASI,GAAUxG,CAAS,EAC5BP,GAAI2G,GAAO,OACH3G,MACP2G,GAAQ3G,EAAE,GAAMyG,GAAM,IAAMA,GAAM,UAAa,IAC9CO,GAAYL,GAAQ3G,EAAE,CAAE,EAE1B4G,GAAcD,GAAO,KAAM,GAAI,CAChC,CAEA,GAAI,CACH,OAAA5H,EAAK,MAAOgD,EACX8E,GAAW,iBAAkBD,EAAY,CAC1C,EACO7E,CACR,MAAqB,CACpB2C,GAAwBnE,EAAU,EAAK,CACxC,QAAE,CACIkG,KAAQtC,GACZ3D,EAAQ,gBAAiB,IAAK,CAEhC,CACD,CACD,CAID,OAAOyG,GAAQ1G,EAAS,QAAS0C,GAAU,IAAK,EAAGzC,EAASuB,EAASwE,CAAK,CAC3E,CAQA,SAAShC,IAAc,CACtB,IAAI2C,EAAO,CAAC,EAEZ,SAASC,EAAOC,EAAK3E,EAAQ,CAI5B,OAAKyE,EAAK,KAAME,EAAM,GAAI,EAAIxD,EAAK,aAGlC,OAAOuD,EAAOD,EAAK,MAAM,CAAE,EAEnBC,EAAOC,EAAM,GAAI,EAAI3E,CAC/B,CACA,OAAO0E,CACR,CAMA,SAASE,GAAcC,EAAK,CAC3B,OAAAA,EAAInD,CAAQ,EAAI,GACTmD,CACR,CAMA,SAASC,GAAQD,EAAK,CACrB,IAAIE,EAAK9H,EAAS,cAAe,UAAW,EAE5C,GAAI,CACH,MAAO,CAAC,CAAC4H,EAAIE,CAAG,CACjB,MAAc,CACb,MAAO,EACR,QAAE,CAGIA,EAAG,YACPA,EAAG,WAAW,YAAaA,CAAG,EAI/BA,EAAK,IACN,CACD,CAMA,SAASC,GAAmB9E,EAAO,CAClC,OAAO,SAAU9B,EAAO,CACvB,OAAO+B,EAAU/B,EAAM,OAAQ,GAAKA,EAAK,OAAS8B,CACnD,CACD,CAMA,SAAS+E,GAAoB/E,EAAO,CACnC,OAAO,SAAU9B,EAAO,CACvB,OAAS+B,EAAU/B,EAAM,OAAQ,GAAK+B,EAAU/B,EAAM,QAAS,IAC9DA,EAAK,OAAS8B,CAChB,CACD,CAMA,SAASgF,GAAsBC,EAAW,CAGzC,OAAO,SAAU/G,EAAO,CAKvB,MAAK,SAAUA,EASTA,EAAK,YAAcA,EAAK,WAAa,GAGpC,UAAWA,EACV,UAAWA,EAAK,WACbA,EAAK,WAAW,WAAa+G,EAE7B/G,EAAK,WAAa+G,EAMpB/G,EAAK,aAAe+G,GAG1B/G,EAAK,aAAe,CAAC+G,GACpB1B,GAAoBrF,CAAK,IAAM+G,EAG3B/G,EAAK,WAAa+G,EAKd,UAAW/G,EACfA,EAAK,WAAa+G,EAInB,EACR,CACD,CAMA,SAASC,GAAwBP,EAAK,CACrC,OAAOD,GAAc,SAAUS,EAAW,CACzC,OAAAA,EAAW,CAACA,EACLT,GAAc,SAAUd,EAAMjE,EAAU,CAM9C,QALItB,EACH+G,GAAeT,EAAI,CAAC,EAAGf,EAAK,OAAQuB,CAAS,EAC7C9H,GAAI+H,GAAa,OAGV/H,MACFuG,EAAQvF,EAAI+G,GAAc/H,EAAE,CAAI,IACpCuG,EAAMvF,CAAE,EAAI,EAAGsB,EAAStB,CAAE,EAAIuF,EAAMvF,CAAE,GAGzC,CAAE,CACH,CAAE,CACH,CAOA,SAAS8F,GAAatG,EAAU,CAC/B,OAAOA,GAAW,OAAOA,EAAQ,qBAAyB,KAAeA,CAC1E,CAOA,SAASyF,GAAanG,EAAO,CAC5B,IAAIkI,EACHjI,EAAMD,EAAOA,EAAK,eAAiBA,EAAO4D,GAO3C,OAAK3D,GAAOL,GAAYK,EAAI,WAAa,GAAK,CAACA,EAAI,kBAKnDL,EAAWK,EACXiE,EAAkBtE,EAAS,gBAC3BuE,EAAiB,CAAC3D,EAAO,SAAUZ,CAAS,EAI5C4C,EAAU0B,EAAgB,SACzBA,EAAgB,uBAChBA,EAAgB,kBAOZA,EAAgB,mBAMpBN,IAAgBhE,IACdsI,EAAYtI,EAAS,cAAiBsI,EAAU,MAAQA,GAG1DA,EAAU,iBAAkB,SAAUhC,EAAc,EAOrD1G,EAAQ,QAAUiI,GAAQ,SAAUC,EAAK,CACxC,OAAAxD,EAAgB,YAAawD,CAAG,EAAE,GAAKlH,EAAO,QACvC,CAACZ,EAAS,mBAChB,CAACA,EAAS,kBAAmBY,EAAO,OAAQ,EAAE,MAChD,CAAE,EAKFhB,EAAQ,kBAAoBiI,GAAQ,SAAUC,EAAK,CAClD,OAAOlF,EAAQ,KAAMkF,EAAI,GAAI,CAC9B,CAAE,EAIFlI,EAAQ,MAAQiI,GAAQ,UAAW,CAClC,OAAO7H,EAAS,iBAAkB,QAAS,CAC5C,CAAE,EAWFJ,EAAQ,OAASiI,GAAQ,UAAW,CACnC,GAAI,CACH,OAAA7H,EAAS,cAAe,iBAAkB,EACnC,EACR,MAAc,CACb,MAAO,EACR,CACD,CAAE,EAGGJ,EAAQ,SACZsE,EAAK,OAAO,GAAK,SAAUqE,EAAK,CAC/B,IAAIC,EAASD,EAAG,QAAStC,GAAWC,EAAU,EAC9C,OAAO,SAAU/E,GAAO,CACvB,OAAOA,GAAK,aAAc,IAAK,IAAMqH,CACtC,CACD,EACAtE,EAAK,KAAK,GAAK,SAAUqE,EAAIzH,EAAU,CACtC,GAAK,OAAOA,EAAQ,eAAmB,KAAeyD,EAAiB,CACtE,IAAIpD,GAAOL,EAAQ,eAAgByH,CAAG,EACtC,OAAOpH,GAAO,CAAEA,EAAK,EAAI,CAAC,CAC3B,CACD,IAEA+C,EAAK,OAAO,GAAM,SAAUqE,EAAK,CAChC,IAAIC,EAASD,EAAG,QAAStC,GAAWC,EAAU,EAC9C,OAAO,SAAU/E,GAAO,CACvB,IAAIf,GAAO,OAAOe,GAAK,iBAAqB,KAC3CA,GAAK,iBAAkB,IAAK,EAC7B,OAAOf,IAAQA,GAAK,QAAUoI,CAC/B,CACD,EAIAtE,EAAK,KAAK,GAAK,SAAUqE,EAAIzH,EAAU,CACtC,GAAK,OAAOA,EAAQ,eAAmB,KAAeyD,EAAiB,CACtE,IAAInE,GAAME,GAAGU,GACZG,GAAOL,EAAQ,eAAgByH,CAAG,EAEnC,GAAKpH,GAAO,CAIX,GADAf,GAAOe,GAAK,iBAAkB,IAAK,EAC9Bf,IAAQA,GAAK,QAAUmI,EAC3B,MAAO,CAAEpH,EAAK,EAMf,IAFAH,GAAQF,EAAQ,kBAAmByH,CAAG,EACtCjI,GAAI,EACMa,GAAOH,GAAOV,IAAI,GAE3B,GADAF,GAAOe,GAAK,iBAAkB,IAAK,EAC9Bf,IAAQA,GAAK,QAAUmI,EAC3B,MAAO,CAAEpH,EAAK,CAGjB,CAEA,MAAO,CAAC,CACT,CACD,GAID+C,EAAK,KAAK,IAAM,SAAUuE,EAAK3H,EAAU,CACxC,OAAK,OAAOA,EAAQ,qBAAyB,IACrCA,EAAQ,qBAAsB2H,CAAI,EAIlC3H,EAAQ,iBAAkB2H,CAAI,CAEvC,EAGAvE,EAAK,KAAK,MAAQ,SAAUwE,EAAW5H,EAAU,CAChD,GAAK,OAAOA,EAAQ,uBAA2B,KAAeyD,EAC7D,OAAOzD,EAAQ,uBAAwB4H,CAAU,CAEnD,EAOAlE,EAAY,CAAC,EAIbqD,GAAQ,SAAUC,EAAK,CAEtB,IAAIa,EAEJrE,EAAgB,YAAawD,CAAG,EAAE,UACjC,UAAYrD,EAAU,iDACLA,EAAU,oEAKtBqD,EAAG,iBAAkB,YAAa,EAAE,QACzCtD,EAAU,KAAM,MAAQlB,EAAa,aAAe4B,GAAW,GAAI,EAI9D4C,EAAG,iBAAkB,QAAUrD,EAAU,IAAK,EAAE,QACrDD,EAAU,KAAM,IAAK,EAMhBsD,EAAG,iBAAkB,KAAOrD,EAAU,IAAK,EAAE,QAClDD,EAAU,KAAM,UAAW,EAOtBsD,EAAG,iBAAkB,UAAW,EAAE,QACvCtD,EAAU,KAAM,UAAW,EAK5BmE,EAAQ3I,EAAS,cAAe,OAAQ,EACxC2I,EAAM,aAAc,OAAQ,QAAS,EACrCb,EAAG,YAAaa,CAAM,EAAE,aAAc,OAAQ,GAAI,EAQlDrE,EAAgB,YAAawD,CAAG,EAAE,SAAW,GACxCA,EAAG,iBAAkB,WAAY,EAAE,SAAW,GAClDtD,EAAU,KAAM,WAAY,WAAY,EAQzCmE,EAAQ3I,EAAS,cAAe,OAAQ,EACxC2I,EAAM,aAAc,OAAQ,EAAG,EAC/Bb,EAAG,YAAaa,CAAM,EAChBb,EAAG,iBAAkB,WAAY,EAAE,QACxCtD,EAAU,KAAM,MAAQlB,EAAa,QAAUA,EAAa,KAC3DA,EAAa,YAAe,CAE/B,CAAE,EAEI1D,EAAQ,QAQb4E,EAAU,KAAM,MAAO,EAGxBA,EAAYA,EAAU,QAAU,IAAI,OAAQA,EAAU,KAAM,GAAI,CAAE,EAMlES,GAAY,SAAUzB,EAAGC,EAAI,CAG5B,GAAKD,IAAMC,EACV,OAAAY,EAAe,GACR,EAIR,IAAIuE,GAAU,CAACpF,EAAE,wBAA0B,CAACC,EAAE,wBAC9C,OAAKmF,KASLA,IAAYpF,EAAE,eAAiBA,KAASC,EAAE,eAAiBA,GAC1DD,EAAE,wBAAyBC,CAAE,EAG7B,EAGImF,GAAU,GACZ,CAAChJ,EAAQ,cAAgB6D,EAAE,wBAAyBD,CAAE,IAAMoF,GAOzDpF,IAAMxD,GAAYwD,EAAE,eAAiBQ,IACzC4C,GAAK,SAAU5C,GAAcR,CAAE,EACxB,GAOHC,IAAMzD,GAAYyD,EAAE,eAAiBO,IACzC4C,GAAK,SAAU5C,GAAcP,CAAE,EACxB,EAIDW,EACJ9E,EAAQ,KAAM8E,EAAWZ,CAAE,EAAIlE,EAAQ,KAAM8E,EAAWX,CAAE,EAC5D,EAGKmF,GAAU,EAAI,GAAK,EAC3B,GAEO5I,CACR,CAEA4G,GAAK,QAAU,SAAUiC,EAAMC,EAAW,CACzC,OAAOlC,GAAMiC,EAAM,KAAM,KAAMC,CAAS,CACzC,EAEAlC,GAAK,gBAAkB,SAAUzF,EAAM0H,EAAO,CAG7C,GAFAtC,GAAapF,CAAK,EAEboD,GACJ,CAACS,GAAwB6D,EAAO,GAAI,IAClC,CAACrE,GAAa,CAACA,EAAU,KAAMqE,CAAK,GAEtC,GAAI,CACH,IAAI5H,EAAM2B,EAAQ,KAAMzB,EAAM0H,CAAK,EAGnC,GAAK5H,GAAOrB,EAAQ,mBAIlBuB,EAAK,UAAYA,EAAK,SAAS,WAAa,GAC7C,OAAOF,CAET,MAAc,CACb+D,GAAwB6D,EAAM,EAAK,CACpC,CAGD,OAAOjC,GAAMiC,EAAM7I,EAAU,KAAM,CAAEmB,CAAK,CAAE,EAAE,OAAS,CACxD,EAEAyF,GAAK,SAAW,SAAU9F,EAASK,EAAO,CAOzC,OAAOL,EAAQ,eAAiBA,IAAad,GAC5CuG,GAAazF,CAAQ,EAEfF,EAAO,SAAUE,EAASK,CAAK,CACvC,EAGAyF,GAAK,KAAO,SAAUzF,EAAMK,EAAO,EAO3BL,EAAK,eAAiBA,IAAUnB,GACtCuG,GAAapF,CAAK,EAGnB,IAAIyG,EAAK1D,EAAK,WAAY1C,EAAK,YAAY,CAAE,EAG5CjB,EAAMqH,GAAMnI,EAAO,KAAMyE,EAAK,WAAY1C,EAAK,YAAY,CAAE,EAC5DoG,EAAIzG,EAAMK,EAAM,CAAC+C,CAAe,EAChC,OAEF,OAAKhE,IAAQ,OACLA,EAGDY,EAAK,aAAcK,CAAK,CAChC,EAEAoF,GAAK,MAAQ,SAAU5E,EAAM,CAC5B,MAAM,IAAI,MAAO,0CAA4CA,CAAI,CAClE,EAMApB,EAAO,WAAa,SAAUyB,EAAU,CACvC,IAAIlB,EACH4H,EAAa,CAAC,EACdzH,EAAI,EACJhB,EAAI,EAWL,GAJA+D,EAAe,CAACzE,EAAQ,WACxBwE,EAAY,CAACxE,EAAQ,YAAcV,EAAM,KAAMmD,EAAS,CAAE,EAC1De,EAAK,KAAMf,EAAS4C,EAAU,EAEzBZ,EAAe,CACnB,KAAUlD,EAAOkB,EAAS/B,GAAI,GACxBa,IAASkB,EAAS/B,CAAE,IACxBgB,EAAIyH,EAAW,KAAMzI,CAAE,GAGzB,KAAQgB,KACP+B,EAAO,KAAMhB,EAAS0G,EAAYzH,CAAE,EAAG,CAAE,CAE3C,CAIA,OAAA8C,EAAY,KAEL/B,CACR,EAEAzB,EAAO,GAAG,WAAa,UAAW,CACjC,OAAO,KAAK,UAAWA,EAAO,WAAY1B,EAAM,MAAO,IAAK,CAAE,CAAE,CACjE,EAEAgF,EAAOtD,EAAO,KAAO,CAGpB,YAAa,GAEb,aAAc+G,GAEd,MAAO/B,GAEP,WAAY,CAAC,EAEb,KAAM,CAAC,EAEP,SAAU,CACT,IAAK,CAAE,IAAK,aAAc,MAAO,EAAK,EACtC,IAAK,CAAE,IAAK,YAAa,EACzB,IAAK,CAAE,IAAK,kBAAmB,MAAO,EAAK,EAC3C,IAAK,CAAE,IAAK,iBAAkB,CAC/B,EAEA,UAAW,CACV,KAAM,SAAUoB,EAAQ,CACvB,OAAAA,EAAO,CAAE,EAAIA,EAAO,CAAE,EAAE,QAASf,GAAWC,EAAU,EAGtDc,EAAO,CAAE,GAAMA,EAAO,CAAE,GAAKA,EAAO,CAAE,GAAKA,EAAO,CAAE,GAAK,IACvD,QAASf,GAAWC,EAAU,EAE3Bc,EAAO,CAAE,IAAM,OACnBA,EAAO,CAAE,EAAI,IAAMA,EAAO,CAAE,EAAI,KAG1BA,EAAM,MAAO,EAAG,CAAE,CAC1B,EAEA,MAAO,SAAUA,EAAQ,CAYxB,OAAAA,EAAO,CAAE,EAAIA,EAAO,CAAE,EAAE,YAAY,EAE/BA,EAAO,CAAE,EAAE,MAAO,EAAG,CAAE,IAAM,OAG3BA,EAAO,CAAE,GACdJ,GAAK,MAAOI,EAAO,CAAE,CAAE,EAKxBA,EAAO,CAAE,EAAI,EAAGA,EAAO,CAAE,EACxBA,EAAO,CAAE,GAAMA,EAAO,CAAE,GAAK,GAC7B,GAAMA,EAAO,CAAE,IAAM,QAAUA,EAAO,CAAE,IAAM,QAE/CA,EAAO,CAAE,EAAI,EAAKA,EAAO,CAAE,EAAIA,EAAO,CAAE,GAAOA,EAAO,CAAE,IAAM,QAGnDA,EAAO,CAAE,GACpBJ,GAAK,MAAOI,EAAO,CAAE,CAAE,EAGjBA,CACR,EAEA,OAAQ,SAAUA,EAAQ,CACzB,IAAIgC,EACHC,EAAW,CAACjC,EAAO,CAAE,GAAKA,EAAO,CAAE,EAEpC,OAAKpB,GAAU,MAAM,KAAMoB,EAAO,CAAE,CAAE,EAC9B,MAIHA,EAAO,CAAE,EACbA,EAAO,CAAE,EAAIA,EAAO,CAAE,GAAKA,EAAO,CAAE,GAAK,GAG9BiC,GAAYvD,GAAQ,KAAMuD,CAAS,IAG5CD,EAAS3B,GAAU4B,EAAU,EAAK,KAGlCD,EAASC,EAAS,QAAS,IAAKA,EAAS,OAASD,CAAO,EAAIC,EAAS,UAGxEjC,EAAO,CAAE,EAAIA,EAAO,CAAE,EAAE,MAAO,EAAGgC,CAAO,EACzChC,EAAO,CAAE,EAAIiC,EAAS,MAAO,EAAGD,CAAO,GAIjChC,EAAM,MAAO,EAAG,CAAE,EAC1B,CACD,EAEA,OAAQ,CAEP,IAAK,SAAUkC,EAAmB,CACjC,IAAIC,EAAmBD,EAAiB,QAASjD,GAAWC,EAAU,EAAE,YAAY,EACpF,OAAOgD,IAAqB,IAC3B,UAAW,CACV,MAAO,EACR,EACA,SAAU/H,EAAO,CAChB,OAAO+B,EAAU/B,EAAMgI,CAAiB,CACzC,CACF,EAEA,MAAO,SAAUT,EAAY,CAC5B,IAAIU,EAAUxE,GAAY8D,EAAY,GAAI,EAE1C,OAAOU,IACJA,EAAU,IAAI,OAAQ,MAAQ9F,EAAa,IAAMoF,EAClD,IAAMpF,EAAa,KAAM,IAC1BsB,GAAY8D,EAAW,SAAUvH,EAAO,CACvC,OAAOiI,EAAQ,KACd,OAAOjI,EAAK,WAAc,UAAYA,EAAK,WAC1C,OAAOA,EAAK,aAAiB,KAC5BA,EAAK,aAAc,OAAQ,GAC5B,EACF,CACD,CAAE,CACJ,EAEA,KAAM,SAAUK,EAAM6H,EAAUC,EAAQ,CACvC,OAAO,SAAUnI,EAAO,CACvB,IAAIoI,EAAS3C,GAAK,KAAMzF,EAAMK,CAAK,EAEnC,OAAK+H,GAAU,KACPF,IAAa,KAEfA,GAINE,GAAU,GAELF,IAAa,IACVE,IAAWD,EAEdD,IAAa,KACVE,IAAWD,EAEdD,IAAa,KACVC,GAASC,EAAO,QAASD,CAAM,IAAM,EAExCD,IAAa,KACVC,GAASC,EAAO,QAASD,CAAM,EAAI,GAEtCD,IAAa,KACVC,GAASC,EAAO,MAAO,CAACD,EAAM,MAAO,IAAMA,EAE9CD,IAAa,MACR,IAAME,EAAO,QAASjE,GAAa,GAAI,EAAI,KAClD,QAASgE,CAAM,EAAI,GAEjBD,IAAa,KACVE,IAAWD,GAASC,EAAO,MAAO,EAAGD,EAAM,OAAS,CAAE,IAAMA,EAAQ,IAGrE,IA5BC,EA6BT,CACD,EAEA,MAAO,SAAUrG,EAAMuG,EAAMC,EAAWjH,EAAOkH,EAAO,CACrD,IAAIC,GAAS1G,EAAK,MAAO,EAAG,CAAE,IAAM,MACnC2G,GAAU3G,EAAK,MAAO,EAAG,IAAM,OAC/B4G,GAASL,IAAS,UAEnB,OAAOhH,IAAU,GAAKkH,IAAS,EAG9B,SAAUvI,GAAO,CAChB,MAAO,CAAC,CAACA,GAAK,UACf,EAEA,SAAUA,GAAM2I,GAAUC,GAAM,CAC/B,IAAItC,GAAOuC,GAAY5J,GAAM6J,GAAWC,GACvCC,GAAMR,KAAWC,GAAU,cAAgB,kBAC3CQ,GAASjJ,GAAK,WACdK,GAAOqI,IAAU1I,GAAK,SAAS,YAAY,EAC3CkJ,GAAW,CAACN,IAAO,CAACF,GACpBS,GAAO,GAER,GAAKF,GAAS,CAGb,GAAKT,GAAS,CACb,KAAQQ,IAAM,CAEb,IADA/J,GAAOe,GACGf,GAAOA,GAAM+J,EAAI,GAC1B,GAAKN,GACJ3G,EAAU9C,GAAMoB,EAAK,EACrBpB,GAAK,WAAa,EAElB,MAAO,GAKT8J,GAAQC,GAAMlH,IAAS,QAAU,CAACiH,IAAS,aAC5C,CACA,MAAO,EACR,CAKA,GAHAA,GAAQ,CAAEN,GAAUQ,GAAO,WAAaA,GAAO,SAAU,EAGpDR,IAAWS,IASf,IANAL,GAAaI,GAAQ3F,CAAQ,IAAO2F,GAAQ3F,CAAQ,EAAI,CAAC,GACzDgD,GAAQuC,GAAY/G,CAAK,GAAK,CAAC,EAC/BgH,GAAYxC,GAAO,CAAE,IAAM/C,GAAW+C,GAAO,CAAE,EAC/C6C,GAAOL,IAAaxC,GAAO,CAAE,EAC7BrH,GAAO6J,IAAaG,GAAO,WAAYH,EAAU,EAEvC7J,GAAO,EAAE6J,IAAa7J,IAAQA,GAAM+J,EAAI,IAG/CG,GAAOL,GAAY,IAAOC,GAAM,IAAI,GAGtC,GAAK9J,GAAK,WAAa,GAAK,EAAEkK,IAAQlK,KAASe,GAAO,CACrD6I,GAAY/G,CAAK,EAAI,CAAEyB,EAASuF,GAAWK,EAAK,EAChD,KACD,UAMID,KACJL,GAAa7I,GAAMsD,CAAQ,IAAOtD,GAAMsD,CAAQ,EAAI,CAAC,GACrDgD,GAAQuC,GAAY/G,CAAK,GAAK,CAAC,EAC/BgH,GAAYxC,GAAO,CAAE,IAAM/C,GAAW+C,GAAO,CAAE,EAC/C6C,GAAOL,IAKHK,KAAS,GAGb,MAAUlK,GAAO,EAAE6J,IAAa7J,IAAQA,GAAM+J,EAAI,IAC/CG,GAAOL,GAAY,IAAOC,GAAM,IAAI,IAE/B,GAAAL,GACN3G,EAAU9C,GAAMoB,EAAK,EACrBpB,GAAK,WAAa,IAClB,EAAEkK,KAGGD,KACJL,GAAa5J,GAAMqE,CAAQ,IACxBrE,GAAMqE,CAAQ,EAAI,CAAC,GACtBuF,GAAY/G,CAAK,EAAI,CAAEyB,EAAS4F,EAAK,GAGjClK,KAASe,MAZf,CAqBH,OAAAmJ,IAAQZ,EACDY,KAAS9H,GAAW8H,GAAO9H,IAAU,GAAK8H,GAAO9H,GAAS,CAClE,CACD,CACF,EAEA,OAAQ,SAAU+H,EAAQnC,EAAW,CAMpC,IAAIoC,EACH5C,EAAK1D,EAAK,QAASqG,CAAO,GAAKrG,EAAK,WAAYqG,EAAO,YAAY,CAAE,GACpE3D,GAAK,MAAO,uBAAyB2D,CAAO,EAK9C,OAAK3C,EAAInD,CAAQ,EACTmD,EAAIQ,CAAS,EAIhBR,EAAG,OAAS,GAChB4C,EAAO,CAAED,EAAQA,EAAQ,GAAInC,CAAS,EAC/BlE,EAAK,WAAW,eAAgBqG,EAAO,YAAY,CAAE,EAC3D5C,GAAc,SAAUd,EAAMjE,GAAU,CAIvC,QAHI6H,GACHC,GAAU9C,EAAIf,EAAMuB,CAAS,EAC7B9H,GAAIoK,GAAQ,OACLpK,MACPmK,GAAMnL,EAAQ,KAAMuH,EAAM6D,GAASpK,EAAE,CAAE,EACvCuG,EAAM4D,EAAI,EAAI,EAAG7H,GAAS6H,EAAI,EAAIC,GAASpK,EAAE,EAE/C,CAAE,EACF,SAAUa,EAAO,CAChB,OAAOyG,EAAIzG,EAAM,EAAGqJ,CAAK,CAC1B,GAGK5C,CACR,CACD,EAEA,QAAS,CAGR,IAAKD,GAAc,SAAU9G,EAAW,CAKvC,IAAI8H,EAAQ,CAAC,EACZtG,EAAU,CAAC,EACXsI,EAAUC,GAAS/J,EAAS,QAAS0C,GAAU,IAAK,CAAE,EAEvD,OAAOoH,EAASlG,CAAQ,EACvBkD,GAAc,SAAUd,EAAMjE,GAASkH,GAAUC,GAAM,CAMtD,QALI5I,GACH0J,GAAYF,EAAS9D,EAAM,KAAMkD,GAAK,CAAC,CAAE,EACzCzJ,GAAIuG,EAAK,OAGFvG,OACAa,GAAO0J,GAAWvK,EAAE,KAC1BuG,EAAMvG,EAAE,EAAI,EAAGsC,GAAStC,EAAE,EAAIa,IAGjC,CAAE,EACF,SAAUA,EAAM2I,GAAUC,GAAM,CAC/B,OAAApB,EAAO,CAAE,EAAIxH,EACbwJ,EAAShC,EAAO,KAAMoB,GAAK1H,CAAQ,EAInCsG,EAAO,CAAE,EAAI,KACN,CAACtG,EAAQ,IAAI,CACrB,CACF,CAAE,EAEF,IAAKsF,GAAc,SAAU9G,EAAW,CACvC,OAAO,SAAUM,EAAO,CACvB,OAAOyF,GAAM/F,EAAUM,CAAK,EAAE,OAAS,CACxC,CACD,CAAE,EAEF,SAAUwG,GAAc,SAAUmD,EAAO,CACxC,OAAAA,EAAOA,EAAK,QAAS7E,GAAWC,EAAU,EACnC,SAAU/E,EAAO,CACvB,OAASA,EAAK,aAAeP,EAAO,KAAMO,CAAK,GAAI,QAAS2J,CAAK,EAAI,EACtE,CACD,CAAE,EASF,KAAMnD,GAAc,SAAUoD,EAAO,CAGpC,OAAMpF,GAAY,KAAMoF,GAAQ,EAAG,GAClCnE,GAAK,MAAO,qBAAuBmE,CAAK,EAEzCA,EAAOA,EAAK,QAAS9E,GAAWC,EAAU,EAAE,YAAY,EACjD,SAAU/E,EAAO,CACvB,IAAI6J,EACJ,EACC,IAAOA,EAAWzG,EACjBpD,EAAK,KACLA,EAAK,aAAc,UAAW,GAAKA,EAAK,aAAc,MAAO,EAE7D,OAAA6J,EAAWA,EAAS,YAAY,EACzBA,IAAaD,GAAQC,EAAS,QAASD,EAAO,GAAI,IAAM,SAErD5J,EAAOA,EAAK,aAAgBA,EAAK,WAAa,GAC1D,MAAO,EACR,CACD,CAAE,EAGF,OAAQ,SAAUA,EAAO,CACxB,IAAI8J,EAAOnM,EAAO,UAAYA,EAAO,SAAS,KAC9C,OAAOmM,GAAQA,EAAK,MAAO,CAAE,IAAM9J,EAAK,EACzC,EAEA,KAAM,SAAUA,EAAO,CACtB,OAAOA,IAASmD,CACjB,EAEA,MAAO,SAAUnD,EAAO,CACvB,OAAOA,IAASuF,GAAkB,GACjC1G,EAAS,SAAS,GAClB,CAAC,EAAGmB,EAAK,MAAQA,EAAK,MAAQ,CAACA,EAAK,SACtC,EAGA,QAAS8G,GAAsB,EAAM,EACrC,SAAUA,GAAsB,EAAK,EAErC,QAAS,SAAU9G,EAAO,CAIzB,OAAS+B,EAAU/B,EAAM,OAAQ,GAAK,CAAC,CAACA,EAAK,SAC1C+B,EAAU/B,EAAM,QAAS,GAAK,CAAC,CAACA,EAAK,QACzC,EAEA,SAAU,SAAUA,EAAO,CAM1B,OAAKA,EAAK,YAETA,EAAK,WAAW,cAGVA,EAAK,WAAa,EAC1B,EAGA,MAAO,SAAUA,EAAO,CAMvB,IAAMA,EAAOA,EAAK,WAAYA,EAAMA,EAAOA,EAAK,YAC/C,GAAKA,EAAK,SAAW,EACpB,MAAO,GAGT,MAAO,EACR,EAEA,OAAQ,SAAUA,EAAO,CACxB,MAAO,CAAC+C,EAAK,QAAQ,MAAO/C,CAAK,CAClC,EAGA,OAAQ,SAAUA,EAAO,CACxB,OAAO2E,GAAQ,KAAM3E,EAAK,QAAS,CACpC,EAEA,MAAO,SAAUA,EAAO,CACvB,OAAO0E,GAAQ,KAAM1E,EAAK,QAAS,CACpC,EAEA,OAAQ,SAAUA,EAAO,CACxB,OAAO+B,EAAU/B,EAAM,OAAQ,GAAKA,EAAK,OAAS,UACjD+B,EAAU/B,EAAM,QAAS,CAC3B,EAEA,KAAM,SAAUA,EAAO,CACtB,IAAI+J,EACJ,OAAOhI,EAAU/B,EAAM,OAAQ,GAAKA,EAAK,OAAS,UAK7C+J,EAAO/J,EAAK,aAAc,MAAO,IAAO,MAC3C+J,EAAK,YAAY,IAAM,OAC1B,EAGA,MAAO/C,GAAwB,UAAW,CACzC,MAAO,CAAE,CAAE,CACZ,CAAE,EAEF,KAAMA,GAAwB,SAAUgD,EAAerJ,EAAS,CAC/D,MAAO,CAAEA,EAAS,CAAE,CACrB,CAAE,EAEF,GAAIqG,GAAwB,SAAUgD,EAAerJ,EAAQsG,EAAW,CACvE,MAAO,CAAEA,EAAW,EAAIA,EAAWtG,EAASsG,CAAS,CACtD,CAAE,EAEF,KAAMD,GAAwB,SAAUE,EAAcvG,EAAS,CAE9D,QADIxB,EAAI,EACAA,EAAIwB,EAAQxB,GAAK,EACxB+H,EAAa,KAAM/H,CAAE,EAEtB,OAAO+H,CACR,CAAE,EAEF,IAAKF,GAAwB,SAAUE,EAAcvG,EAAS,CAE7D,QADIxB,EAAI,EACAA,EAAIwB,EAAQxB,GAAK,EACxB+H,EAAa,KAAM/H,CAAE,EAEtB,OAAO+H,CACR,CAAE,EAEF,GAAIF,GAAwB,SAAUE,EAAcvG,EAAQsG,EAAW,CACtE,IAAI9H,EAUJ,IARK8H,EAAW,EACf9H,EAAI8H,EAAWtG,EACJsG,EAAWtG,EACtBxB,EAAIwB,EAEJxB,EAAI8H,EAGG,EAAE9H,GAAK,GACd+H,EAAa,KAAM/H,CAAE,EAEtB,OAAO+H,CACR,CAAE,EAEF,GAAIF,GAAwB,SAAUE,EAAcvG,EAAQsG,EAAW,CAEtE,QADI9H,EAAI8H,EAAW,EAAIA,EAAWtG,EAASsG,EACnC,EAAE9H,EAAIwB,GACbuG,EAAa,KAAM/H,CAAE,EAEtB,OAAO+H,CACR,CAAE,CACH,CACD,EAEAnE,EAAK,QAAQ,IAAMA,EAAK,QAAQ,GAGhC,IAAM5D,IAAK,CAAE,MAAO,GAAM,SAAU,GAAM,KAAM,GAAM,SAAU,GAAM,MAAO,EAAK,EACjF4D,EAAK,QAAS5D,CAAE,EAAIyH,GAAmBzH,CAAE,EAE1C,IAAMA,IAAK,CAAE,OAAQ,GAAM,MAAO,EAAK,EACtC4D,EAAK,QAAS5D,CAAE,EAAI0H,GAAoB1H,CAAE,EAI3C,SAAS8K,IAAa,CAAC,CACvBA,GAAW,UAAYlH,EAAK,QAAUA,EAAK,QAC3CA,EAAK,WAAa,IAAIkH,GAEtB,SAAS/D,GAAUxG,EAAUwK,EAAY,CACxC,IAAIX,EAAS1D,EAAOsE,EAAQrI,GAC3BsI,GAAOtE,GAAQuE,GACfC,GAAS3G,GAAYjE,EAAW,GAAI,EAErC,GAAK4K,GACJ,OAAOJ,EAAY,EAAII,GAAO,MAAO,CAAE,EAOxC,IAJAF,GAAQ1K,EACRoG,GAAS,CAAC,EACVuE,GAAatH,EAAK,UAEVqH,IAAQ,EAGV,CAACb,IAAa1D,EAAQzB,GAAO,KAAMgG,EAAM,MACxCvE,IAGJuE,GAAQA,GAAM,MAAOvE,EAAO,CAAE,EAAE,MAAO,GAAKuE,IAE7CtE,GAAO,KAAQqE,EAAS,CAAC,CAAI,GAG9BZ,EAAU,IAGH1D,EAAQxB,GAAmB,KAAM+F,EAAM,KAC7Cb,EAAU1D,EAAM,MAAM,EACtBsE,EAAO,KAAM,CACZ,MAAOZ,EAGP,KAAM1D,EAAO,CAAE,EAAE,QAASzD,GAAU,GAAI,CACzC,CAAE,EACFgI,GAAQA,GAAM,MAAOb,EAAQ,MAAO,GAIrC,IAAMzH,MAAQiB,EAAK,QACX8C,EAAQpB,GAAW3C,EAAK,EAAE,KAAMsI,EAAM,KAAS,CAACC,GAAYvI,EAAK,IACrE+D,EAAQwE,GAAYvI,EAAK,EAAG+D,CAAM,MACpC0D,EAAU1D,EAAM,MAAM,EACtBsE,EAAO,KAAM,CACZ,MAAOZ,EACP,KAAMzH,GACN,QAAS+D,CACV,CAAE,EACFuE,GAAQA,GAAM,MAAOb,EAAQ,MAAO,GAItC,GAAK,CAACA,EACL,KAEF,CAKA,OAAKW,EACGE,GAAM,OAGPA,GACN3E,GAAK,MAAO/F,CAAS,EAGrBiE,GAAYjE,EAAUoG,EAAO,EAAE,MAAO,CAAE,CAC1C,CAEA,SAASK,GAAYgE,EAAS,CAI7B,QAHIhL,EAAI,EACPe,EAAMiK,EAAO,OACbzK,EAAW,GACJP,EAAIe,EAAKf,IAChBO,GAAYyK,EAAQhL,CAAE,EAAE,MAEzB,OAAOO,CACR,CAEA,SAAS4F,GAAekE,EAASe,EAAYC,EAAO,CACnD,IAAIxB,EAAMuB,EAAW,IACpBE,EAAOF,EAAW,KAClBhE,GAAMkE,GAAQzB,EACd0B,GAAmBF,GAAQjE,KAAQ,aACnCoE,GAAWnH,KAEZ,OAAO+G,EAAW,MAGjB,SAAUvK,GAAML,GAASiJ,GAAM,CAC9B,KAAU5I,GAAOA,GAAMgJ,CAAI,GAC1B,GAAKhJ,GAAK,WAAa,GAAK0K,GAC3B,OAAOlB,EAASxJ,GAAML,GAASiJ,EAAI,EAGrC,MAAO,EACR,EAGA,SAAU5I,GAAML,GAASiJ,GAAM,CAC9B,IAAIgC,GAAU/B,GACbgC,GAAW,CAAEtH,EAASoH,EAAS,EAGhC,GAAK/B,IACJ,KAAU5I,GAAOA,GAAMgJ,CAAI,GAC1B,IAAKhJ,GAAK,WAAa,GAAK0K,KACtBlB,EAASxJ,GAAML,GAASiJ,EAAI,EAChC,MAAO,OAKV,MAAU5I,GAAOA,GAAMgJ,CAAI,GAC1B,GAAKhJ,GAAK,WAAa,GAAK0K,GAG3B,GAFA7B,GAAa7I,GAAMsD,CAAQ,IAAOtD,GAAMsD,CAAQ,EAAI,CAAC,GAEhDmH,GAAQ1I,EAAU/B,GAAMyK,CAAK,EACjCzK,GAAOA,GAAMgJ,CAAI,GAAKhJ,OAChB,KAAO4K,GAAW/B,GAAYtC,EAAI,IACxCqE,GAAU,CAAE,IAAMrH,GAAWqH,GAAU,CAAE,IAAMD,GAG/C,OAASE,GAAU,CAAE,EAAID,GAAU,CAAE,EAOrC,GAHA/B,GAAYtC,EAAI,EAAIsE,GAGbA,GAAU,CAAE,EAAIrB,EAASxJ,GAAML,GAASiJ,EAAI,EAClD,MAAO,GAMZ,MAAO,EACR,CACF,CAEA,SAASkC,GAAgBC,EAAW,CACnC,OAAOA,EAAS,OAAS,EACxB,SAAU/K,EAAML,EAASiJ,EAAM,CAE9B,QADIzJ,EAAI4L,EAAS,OACT5L,KACP,GAAK,CAAC4L,EAAU5L,CAAE,EAAGa,EAAML,EAASiJ,CAAI,EACvC,MAAO,GAGT,MAAO,EACR,EACAmC,EAAU,CAAE,CACd,CAEA,SAASC,GAAkBtL,EAAUuL,EAAU/J,EAAU,CAGxD,QAFI/B,EAAI,EACPe,EAAM+K,EAAS,OACR9L,EAAIe,EAAKf,IAChBsG,GAAM/F,EAAUuL,EAAU9L,CAAE,EAAG+B,CAAQ,EAExC,OAAOA,CACR,CAEA,SAASgK,GAAUxB,EAAWyB,EAAKC,EAAQzL,EAASiJ,EAAM,CAOzD,QANI5I,GACHqL,GAAe,CAAC,EAChBlM,GAAI,EACJe,GAAMwJ,EAAU,OAChB4B,GAASH,GAAO,KAEThM,GAAIe,GAAKf,MACTa,GAAO0J,EAAWvK,EAAE,KACrB,CAACiM,GAAUA,EAAQpL,GAAML,EAASiJ,CAAI,KAC1CyC,GAAa,KAAMrL,EAAK,EACnBsL,IACJH,EAAI,KAAMhM,EAAE,GAMhB,OAAOkM,EACR,CAEA,SAASE,GAAYC,EAAW9L,EAAU8J,EAASiC,EAAYC,EAAYC,GAAe,CACzF,OAAKF,GAAc,CAACA,EAAYnI,CAAQ,IACvCmI,EAAaF,GAAYE,CAAW,GAEhCC,GAAc,CAACA,EAAYpI,CAAQ,IACvCoI,EAAaH,GAAYG,EAAYC,EAAa,GAE5CnF,GAAc,SAAUd,GAAMxE,GAASvB,GAASiJ,GAAM,CAC5D,IAAIgD,GAAMzM,GAAGa,GAAM6L,GAClBC,GAAS,CAAC,EACVC,GAAU,CAAC,EACXC,GAAc9K,GAAQ,OAGtBrB,GAAQ6F,IACPsF,GAAkBtL,GAAY,IAC7BC,GAAQ,SAAW,CAAEA,EAAQ,EAAIA,GAAS,CAAC,CAAE,EAG/CsM,GAAYT,IAAe9F,IAAQ,CAAChG,GACnCwL,GAAUrL,GAAOiM,GAAQN,EAAW7L,GAASiJ,EAAI,EACjD/I,GAqBF,GAnBK2J,GAIJqC,GAAaH,IAAgBhG,GAAO8F,EAAYQ,IAAeP,GAG9D,CAAC,EAGDvK,GAGDsI,EAASyC,GAAWJ,GAAYlM,GAASiJ,EAAI,GAE7CiD,GAAaI,GAITR,EAMJ,IALAG,GAAOV,GAAUW,GAAYE,EAAQ,EACrCN,EAAYG,GAAM,CAAC,EAAGjM,GAASiJ,EAAI,EAGnCzJ,GAAIyM,GAAK,OACDzM,OACAa,GAAO4L,GAAMzM,EAAE,KACrB0M,GAAYE,GAAS5M,EAAE,CAAE,EAAI,EAAG8M,GAAWF,GAAS5M,EAAE,CAAE,EAAIa,KAK/D,GAAK0F,IACJ,GAAKgG,GAAcF,EAAY,CAC9B,GAAKE,EAAa,CAKjB,IAFAE,GAAO,CAAC,EACRzM,GAAI0M,GAAW,OACP1M,OACAa,GAAO6L,GAAY1M,EAAE,IAG3ByM,GAAK,KAAQK,GAAW9M,EAAE,EAAIa,EAAO,EAGvC0L,EAAY,KAAQG,GAAa,CAAC,EAAKD,GAAMhD,EAAI,CAClD,CAIA,IADAzJ,GAAI0M,GAAW,OACP1M,OACAa,GAAO6L,GAAY1M,EAAE,KACzByM,GAAOF,EAAavN,EAAQ,KAAMuH,GAAM1F,EAAK,EAAI8L,GAAQ3M,EAAE,GAAM,KAEnEuG,GAAMkG,EAAK,EAAI,EAAG1K,GAAS0K,EAAK,EAAI5L,IAGvC,OAIA6L,GAAaX,GACZW,KAAe3K,GACd2K,GAAW,OAAQG,GAAaH,GAAW,MAAO,EAClDA,EACF,EACKH,EACJA,EAAY,KAAMxK,GAAS2K,GAAYjD,EAAI,EAE3C1K,EAAK,MAAOgD,GAAS2K,EAAW,CAGnC,CAAE,CACH,CAEA,SAASK,GAAmB/B,EAAS,CA+BpC,QA9BIgC,EAAc3C,EAASrJ,EAC1BD,EAAMiK,EAAO,OACbiC,GAAkBrJ,EAAK,SAAUoH,EAAQ,CAAE,EAAE,IAAK,EAClDkC,GAAmBD,IAAmBrJ,EAAK,SAAU,GAAI,EACzD5D,GAAIiN,GAAkB,EAAI,EAG1BE,GAAehH,GAAe,SAAUtF,GAAO,CAC9C,OAAOA,KAASmM,CACjB,EAAGE,GAAkB,EAAK,EAC1BE,GAAkBjH,GAAe,SAAUtF,GAAO,CACjD,OAAO7B,EAAQ,KAAMgO,EAAcnM,EAAK,EAAI,EAC7C,EAAGqM,GAAkB,EAAK,EAC1BtB,GAAW,CAAE,SAAU/K,GAAML,GAASiJ,GAAM,CAM3C,IAAI9I,GAAQ,CAACsM,KAAqBxD,IAAOjJ,IAAWqD,MACjDmJ,EAAexM,IAAU,SAC1B2M,GAActM,GAAML,GAASiJ,EAAI,EACjC2D,GAAiBvM,GAAML,GAASiJ,EAAI,GAItC,OAAAuD,EAAe,KACRrM,EACR,CAAE,EAEKX,GAAIe,EAAKf,KAChB,GAAOqK,EAAUzG,EAAK,SAAUoH,EAAQhL,EAAE,EAAE,IAAK,EAChD4L,GAAW,CAAEzF,GAAewF,GAAgBC,EAAS,EAAGvB,CAAQ,CAAE,MAC5D,CAIN,GAHAA,EAAUzG,EAAK,OAAQoH,EAAQhL,EAAE,EAAE,IAAK,EAAE,MAAO,KAAMgL,EAAQhL,EAAE,EAAE,OAAQ,EAGtEqK,EAASlG,CAAQ,EAAI,CAIzB,IADAnD,EAAI,EAAEhB,GACEgB,EAAID,GACN,CAAA6C,EAAK,SAAUoH,EAAQhK,CAAE,EAAE,IAAK,EADrBA,IAChB,CAID,OAAOoL,GACNpM,GAAI,GAAK2L,GAAgBC,EAAS,EAClC5L,GAAI,GAAKgH,GAGRgE,EAAO,MAAO,EAAGhL,GAAI,CAAE,EACrB,OAAQ,CAAE,MAAOgL,EAAQhL,GAAI,CAAE,EAAE,OAAS,IAAM,IAAM,EAAG,CAAE,CAC9D,EAAE,QAASiD,GAAU,IAAK,EAC1BoH,EACArK,GAAIgB,GAAK+L,GAAmB/B,EAAO,MAAOhL,GAAGgB,CAAE,CAAE,EACjDA,EAAID,GAAOgM,GAAqB/B,EAASA,EAAO,MAAOhK,CAAE,CAAI,EAC7DA,EAAID,GAAOiG,GAAYgE,CAAO,CAC/B,CACD,CACAY,GAAS,KAAMvB,CAAQ,CACxB,CAGD,OAAOsB,GAAgBC,EAAS,CACjC,CAEA,SAASyB,GAA0BC,EAAiBC,EAAc,CACjE,IAAIC,EAAQD,EAAY,OAAS,EAChCE,EAAYH,EAAgB,OAAS,EACrCI,EAAe,SAAUnH,GAAM/F,GAASiJ,GAAK1H,GAAS4L,GAAY,CACjE,IAAI9M,GAAMG,GAAGqJ,GACZuD,GAAe,EACf5N,GAAI,IACJuK,GAAYhE,IAAQ,CAAC,EACrBsH,GAAa,CAAC,EACdC,GAAgBjK,EAGhBnD,GAAQ6F,IAAQkH,GAAa7J,EAAK,KAAK,IAAK,IAAK+J,EAAU,EAG3DI,GAAkB3J,GAAW0J,IAAiB,KAAO,EAAI,KAAK,OAAO,GAAK,GAC1E/M,GAAML,GAAM,OAeb,IAbKiN,KAMJ9J,EAAmBrD,IAAWd,GAAYc,IAAWmN,IAO9C3N,KAAMe,KAASF,GAAOH,GAAOV,EAAE,IAAO,KAAMA,KAAM,CACzD,GAAKyN,GAAa5M,GAAO,CAWxB,IAVAG,GAAI,EAMC,CAACR,IAAWK,GAAK,eAAiBnB,IACtCuG,GAAapF,EAAK,EAClB4I,GAAM,CAACxF,GAEEoG,GAAUiD,EAAiBtM,IAAI,GACxC,GAAKqJ,GAASxJ,GAAML,IAAWd,EAAU+J,EAAI,EAAI,CAChD1K,EAAK,KAAMgD,GAASlB,EAAK,EACzB,KACD,CAEI8M,KACJvJ,EAAU2J,GAEZ,CAGKP,KAGG3M,GAAO,CAACwJ,IAAWxJ,KACzB+M,KAIIrH,IACJgE,GAAU,KAAM1J,EAAK,EAGxB,CAaA,GATA+M,IAAgB5N,GASXwN,GAASxN,KAAM4N,GAAe,CAElC,IADA5M,GAAI,EACMqJ,GAAUkD,EAAavM,IAAI,GACpCqJ,GAASE,GAAWsD,GAAYrN,GAASiJ,EAAI,EAG9C,GAAKlD,GAAO,CAGX,GAAKqH,GAAe,EACnB,KAAQ5N,MACCuK,GAAWvK,EAAE,GAAK6N,GAAY7N,EAAE,IACvC6N,GAAY7N,EAAE,EAAI6C,EAAI,KAAMd,EAAQ,GAMvC8L,GAAa9B,GAAU8B,EAAW,CACnC,CAGA9O,EAAK,MAAOgD,GAAS8L,EAAW,EAG3BF,IAAa,CAACpH,IAAQsH,GAAW,OAAS,GAC5CD,GAAeL,EAAY,OAAW,GAExCjN,EAAO,WAAYyB,EAAQ,CAE7B,CAGA,OAAK4L,KACJvJ,EAAU2J,GACVlK,EAAmBiK,IAGbvD,EACR,EAED,OAAOiD,EACNnG,GAAcqG,CAAa,EAC3BA,CACF,CAEA,SAASpD,GAAS/J,EAAUmG,EAAgC,CAC3D,IAAI1G,EACHuN,EAAc,CAAC,EACfD,EAAkB,CAAC,EACnBnC,GAAS1G,GAAelE,EAAW,GAAI,EAExC,GAAK,CAAC4K,GAAS,CAOd,IAJMzE,IACLA,EAAQK,GAAUxG,CAAS,GAE5BP,EAAI0G,EAAM,OACF1G,KACPmL,GAAS4B,GAAmBrG,EAAO1G,CAAE,CAAE,EAClCmL,GAAQhH,CAAQ,EACpBoJ,EAAY,KAAMpC,EAAO,EAEzBmC,EAAgB,KAAMnC,EAAO,EAK/BA,GAAS1G,GAAelE,EACvB8M,GAA0BC,EAAiBC,CAAY,CAAE,EAG1DpC,GAAO,SAAW5K,CACnB,CACA,OAAO4K,EACR,CAWA,SAASlE,GAAQ1G,EAAUC,EAASuB,EAASwE,EAAO,CACnD,IAAIvG,EAAGgL,GAAQgD,GAAOrL,GAAM2D,GAC3B2H,GAAW,OAAO1N,GAAa,YAAcA,EAC7CmG,GAAQ,CAACH,GAAQQ,GAAYxG,EAAW0N,GAAS,UAAY1N,CAAW,EAMzE,GAJAwB,EAAUA,GAAW,CAAC,EAIjB2E,GAAM,SAAW,EAAI,CAIzB,GADAsE,GAAStE,GAAO,CAAE,EAAIA,GAAO,CAAE,EAAE,MAAO,CAAE,EACrCsE,GAAO,OAAS,IAAOgD,GAAQhD,GAAQ,CAAE,GAAI,OAAS,MACzDxK,EAAQ,WAAa,GAAKyD,GAAkBL,EAAK,SAAUoH,GAAQ,CAAE,EAAE,IAAK,EAAI,CAMjF,GAJAxK,GAAYoD,EAAK,KAAK,GACrBoK,GAAM,QAAS,CAAE,EAAE,QAASrI,GAAWC,EAAU,EACjDpF,CACD,GAAK,CAAC,GAAK,CAAE,EACPA,EAIMyN,KACXzN,EAAUA,EAAQ,gBAJlB,QAAOuB,EAORxB,EAAWA,EAAS,MAAOyK,GAAO,MAAM,EAAE,MAAM,MAAO,CACxD,CAIA,IADAhL,EAAIsF,GAAU,aAAa,KAAM/E,CAAS,EAAI,EAAIyK,GAAO,OACjDhL,MACPgO,GAAQhD,GAAQhL,CAAE,EAGb,CAAA4D,EAAK,SAAYjB,GAAOqL,GAAM,IAAO,IAG1C,IAAO1H,GAAO1C,EAAK,KAAMjB,EAAK,KAGtB4D,EAAOD,GACb0H,GAAM,QAAS,CAAE,EAAE,QAASrI,GAAWC,EAAU,EACjDF,GAAS,KAAMsF,GAAQ,CAAE,EAAE,IAAK,GAC/BlE,GAAatG,EAAQ,UAAW,GAAKA,CACvC,GAAM,CAKL,GAFAwK,GAAO,OAAQhL,EAAG,CAAE,EACpBO,EAAWgG,EAAK,QAAUS,GAAYgE,EAAO,EACxC,CAACzK,EACL,OAAAxB,EAAK,MAAOgD,EAASwE,CAAK,EACnBxE,EAGR,KACD,CAGH,CAIA,OAAEkM,IAAY3D,GAAS/J,EAAUmG,EAAM,GACtCH,EACA/F,EACA,CAACyD,EACDlC,EACA,CAACvB,GAAWkF,GAAS,KAAMnF,CAAS,GAAKuG,GAAatG,EAAQ,UAAW,GAAKA,CAC/E,EACOuB,CACR,CAMAzC,EAAQ,WAAa6E,EAAQ,MAAO,EAAG,EAAE,KAAMQ,EAAU,EAAE,KAAM,EAAG,IAAMR,EAG1E8B,GAAY,EAIZ3G,EAAQ,aAAeiI,GAAQ,SAAUC,EAAK,CAG7C,OAAOA,EAAG,wBAAyB9H,EAAS,cAAe,UAAW,CAAE,EAAI,CAC7E,CAAE,EAEFY,EAAO,KAAOgG,GAGdhG,EAAO,KAAM,GAAI,EAAIA,EAAO,KAAK,QACjCA,EAAO,OAASA,EAAO,WAIvBgG,GAAK,QAAUgE,GACfhE,GAAK,OAASW,GACdX,GAAK,YAAcL,GACnBK,GAAK,SAAWS,GAEhBT,GAAK,OAAShG,EAAO,eACrBgG,GAAK,QAAUhG,EAAO,KACtBgG,GAAK,MAAQhG,EAAO,SACpBgG,GAAK,UAAYhG,EAAO,KACxBgG,GAAK,QAAUhG,EAAO,QACtBgG,GAAK,WAAahG,EAAO,UAIzB,GAAI,EAGJ,IAAIuJ,GAAM,SAAUhJ,EAAMgJ,EAAKqE,EAAQ,CAItC,QAHI9D,EAAU,CAAC,EACd+D,EAAWD,IAAU,QAEZrN,EAAOA,EAAMgJ,CAAI,IAAOhJ,EAAK,WAAa,GACnD,GAAKA,EAAK,WAAa,EAAI,CAC1B,GAAKsN,GAAY7N,EAAQO,CAAK,EAAE,GAAIqN,CAAM,EACzC,MAED9D,EAAQ,KAAMvJ,CAAK,CACpB,CAED,OAAOuJ,CACR,EAGIgE,GAAW,SAAUC,EAAGxN,EAAO,CAGlC,QAFIuJ,EAAU,CAAC,EAEPiE,EAAGA,EAAIA,EAAE,YACXA,EAAE,WAAa,GAAKA,IAAMxN,GAC9BuJ,EAAQ,KAAMiE,CAAE,EAIlB,OAAOjE,CACR,EAGIkE,GAAgBhO,EAAO,KAAK,MAAM,aAElCiO,GAAe,kEAKnB,SAASC,GAAQhG,EAAUiG,EAAWC,EAAM,CAC3C,OAAKnP,EAAYkP,CAAU,EACnBnO,EAAO,KAAMkI,EAAU,SAAU3H,EAAMb,EAAI,CACjD,MAAO,CAAC,CAACyO,EAAU,KAAM5N,EAAMb,EAAGa,CAAK,IAAM6N,CAC9C,CAAE,EAIED,EAAU,SACPnO,EAAO,KAAMkI,EAAU,SAAU3H,EAAO,CAC9C,OAASA,IAAS4N,IAAgBC,CACnC,CAAE,EAIE,OAAOD,GAAc,SAClBnO,EAAO,KAAMkI,EAAU,SAAU3H,EAAO,CAC9C,OAAS7B,EAAQ,KAAMyP,EAAW5N,CAAK,EAAI,KAAS6N,CACrD,CAAE,EAIIpO,EAAO,OAAQmO,EAAWjG,EAAUkG,CAAI,CAChD,CAEApO,EAAO,OAAS,SAAUiI,EAAM7H,EAAOgO,EAAM,CAC5C,IAAI7N,EAAOH,EAAO,CAAE,EAMpB,OAJKgO,IACJnG,EAAO,QAAUA,EAAO,KAGpB7H,EAAM,SAAW,GAAKG,EAAK,WAAa,EACrCP,EAAO,KAAK,gBAAiBO,EAAM0H,CAAK,EAAI,CAAE1H,CAAK,EAAI,CAAC,EAGzDP,EAAO,KAAK,QAASiI,EAAMjI,EAAO,KAAMI,EAAO,SAAUG,EAAO,CACtE,OAAOA,EAAK,WAAa,CAC1B,CAAE,CAAE,CACL,EAEAP,EAAO,GAAG,OAAQ,CACjB,KAAM,SAAUC,EAAW,CAC1B,IAAIP,EAAGW,EACNI,EAAM,KAAK,OACX4N,EAAO,KAER,GAAK,OAAOpO,GAAa,SACxB,OAAO,KAAK,UAAWD,EAAQC,CAAS,EAAE,OAAQ,UAAW,CAC5D,IAAMP,EAAI,EAAGA,EAAIe,EAAKf,IACrB,GAAKM,EAAO,SAAUqO,EAAM3O,CAAE,EAAG,IAAK,EACrC,MAAO,EAGV,CAAE,CAAE,EAKL,IAFAW,EAAM,KAAK,UAAW,CAAC,CAAE,EAEnBX,EAAI,EAAGA,EAAIe,EAAKf,IACrBM,EAAO,KAAMC,EAAUoO,EAAM3O,CAAE,EAAGW,CAAI,EAGvC,OAAOI,EAAM,EAAIT,EAAO,WAAYK,CAAI,EAAIA,CAC7C,EACA,OAAQ,SAAUJ,EAAW,CAC5B,OAAO,KAAK,UAAWiO,GAAQ,KAAMjO,GAAY,CAAC,EAAG,EAAM,CAAE,CAC9D,EACA,IAAK,SAAUA,EAAW,CACzB,OAAO,KAAK,UAAWiO,GAAQ,KAAMjO,GAAY,CAAC,EAAG,EAAK,CAAE,CAC7D,EACA,GAAI,SAAUA,EAAW,CACxB,MAAO,CAAC,CAACiO,GACR,KAIA,OAAOjO,GAAa,UAAY+N,GAAc,KAAM/N,CAAS,EAC5DD,EAAQC,CAAS,EACjBA,GAAY,CAAC,EACd,EACD,EAAE,MACH,CACD,CAAE,EAOF,IAAIqO,GAMHnJ,GAAa,sCAEboJ,EAAOvO,EAAO,GAAG,KAAO,SAAUC,EAAUC,EAASsO,EAAO,CAC3D,IAAIpI,EAAO7F,EAGX,GAAK,CAACN,EACL,OAAO,KAQR,GAHAuO,EAAOA,GAAQF,GAGV,OAAOrO,GAAa,SAaxB,GAZKA,EAAU,CAAE,IAAM,KACtBA,EAAUA,EAAS,OAAS,CAAE,IAAM,KACpCA,EAAS,QAAU,EAGnBmG,EAAQ,CAAE,KAAMnG,EAAU,IAAK,EAG/BmG,EAAQjB,GAAW,KAAMlF,CAAS,EAI9BmG,IAAWA,EAAO,CAAE,GAAK,CAAClG,GAG9B,GAAKkG,EAAO,CAAE,EAAI,CAYjB,GAXAlG,EAAUA,aAAmBF,EAASE,EAAS,CAAE,EAAIA,EAIrDF,EAAO,MAAO,KAAMA,EAAO,UAC1BoG,EAAO,CAAE,EACTlG,GAAWA,EAAQ,SAAWA,EAAQ,eAAiBA,EAAUd,EACjE,EACD,CAAE,EAGG6O,GAAW,KAAM7H,EAAO,CAAE,CAAE,GAAKpG,EAAO,cAAeE,CAAQ,EACnE,IAAMkG,KAASlG,EAGTjB,EAAY,KAAMmH,CAAM,CAAE,EAC9B,KAAMA,CAAM,EAAGlG,EAASkG,CAAM,CAAE,EAIhC,KAAK,KAAMA,EAAOlG,EAASkG,CAAM,CAAE,EAKtC,OAAO,IAGR,KACC,QAAA7F,EAAOnB,EAAS,eAAgBgH,EAAO,CAAE,CAAE,EAEtC7F,IAGJ,KAAM,CAAE,EAAIA,EACZ,KAAK,OAAS,GAER,SAIF,OAAK,CAACL,GAAWA,EAAQ,QACtBA,GAAWsO,GAAO,KAAMvO,CAAS,EAKnC,KAAK,YAAaC,CAAQ,EAAE,KAAMD,CAAS,MAI7C,IAAKA,EAAS,SACpB,YAAM,CAAE,EAAIA,EACZ,KAAK,OAAS,EACP,KAID,GAAKhB,EAAYgB,CAAS,EAChC,OAAOuO,EAAK,QAAU,OACrBA,EAAK,MAAOvO,CAAS,EAGrBA,EAAUD,CAAO,EAGnB,OAAOA,EAAO,UAAWC,EAAU,IAAK,CACzC,EAGDsO,EAAK,UAAYvO,EAAO,GAGxBsO,GAAatO,EAAQZ,CAAS,EAG9B,IAAIqP,EAAe,iCAGlBC,EAAmB,CAClB,SAAU,GACV,SAAU,GACV,KAAM,GACN,KAAM,EACP,EAED1O,EAAO,GAAG,OAAQ,CACjB,IAAK,SAAUiB,EAAS,CACvB,IAAI0N,EAAU3O,EAAQiB,EAAQ,IAAK,EAClC2N,EAAID,EAAQ,OAEb,OAAO,KAAK,OAAQ,UAAW,CAE9B,QADIjP,EAAI,EACAA,EAAIkP,EAAGlP,IACd,GAAKM,EAAO,SAAU,KAAM2O,EAASjP,CAAE,CAAE,EACxC,MAAO,EAGV,CAAE,CACH,EAEA,QAAS,SAAUmP,EAAW3O,EAAU,CACvC,IAAI4O,EACHpP,EAAI,EACJkP,EAAI,KAAK,OACT9E,EAAU,CAAC,EACX6E,EAAU,OAAOE,GAAc,UAAY7O,EAAQ6O,CAAU,EAG9D,GAAK,CAACb,GAAc,KAAMa,CAAU,GACnC,KAAQnP,EAAIkP,EAAGlP,IACd,IAAMoP,EAAM,KAAMpP,CAAE,EAAGoP,GAAOA,IAAQ5O,EAAS4O,EAAMA,EAAI,WAGxD,GAAKA,EAAI,SAAW,KAAQH,EAC3BA,EAAQ,MAAOG,CAAI,EAAI,GAGvBA,EAAI,WAAa,GAChB9O,EAAO,KAAK,gBAAiB8O,EAAKD,CAAU,GAAM,CAEnD/E,EAAQ,KAAMgF,CAAI,EAClB,KACD,EAKH,OAAO,KAAK,UAAWhF,EAAQ,OAAS,EAAI9J,EAAO,WAAY8J,CAAQ,EAAIA,CAAQ,CACpF,EAGA,MAAO,SAAUvJ,EAAO,CAGvB,OAAMA,EAKD,OAAOA,GAAS,SACb7B,EAAQ,KAAMsB,EAAQO,CAAK,EAAG,KAAM,CAAE,CAAE,EAIzC7B,EAAQ,KAAM,KAGpB6B,EAAK,OAASA,EAAM,CAAE,EAAIA,CAC3B,EAbU,KAAM,CAAE,GAAK,KAAM,CAAE,EAAE,WAAe,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAS,EAcjF,EAEA,IAAK,SAAUN,EAAUC,EAAU,CAClC,OAAO,KAAK,UACXF,EAAO,WACNA,EAAO,MAAO,KAAK,IAAI,EAAGA,EAAQC,EAAUC,CAAQ,CAAE,CACvD,CACD,CACD,EAEA,QAAS,SAAUD,EAAW,CAC7B,OAAO,KAAK,IAAKA,GAAY,KAC5B,KAAK,WAAa,KAAK,WAAW,OAAQA,CAAS,CACpD,CACD,CACD,CAAE,EAEF,SAAS8O,EAASD,EAAKvF,EAAM,CAC5B,MAAUuF,EAAMA,EAAKvF,CAAI,IAAOuF,EAAI,WAAa,GAAI,CACrD,OAAOA,CACR,CAEA9O,EAAO,KAAM,CACZ,OAAQ,SAAUO,EAAO,CACxB,IAAIiJ,EAASjJ,EAAK,WAClB,OAAOiJ,GAAUA,EAAO,WAAa,GAAKA,EAAS,IACpD,EACA,QAAS,SAAUjJ,EAAO,CACzB,OAAOgJ,GAAKhJ,EAAM,YAAa,CAChC,EACA,aAAc,SAAUA,EAAM6B,EAAIwL,EAAQ,CACzC,OAAOrE,GAAKhJ,EAAM,aAAcqN,CAAM,CACvC,EACA,KAAM,SAAUrN,EAAO,CACtB,OAAOwO,EAASxO,EAAM,aAAc,CACrC,EACA,KAAM,SAAUA,EAAO,CACtB,OAAOwO,EAASxO,EAAM,iBAAkB,CACzC,EACA,QAAS,SAAUA,EAAO,CACzB,OAAOgJ,GAAKhJ,EAAM,aAAc,CACjC,EACA,QAAS,SAAUA,EAAO,CACzB,OAAOgJ,GAAKhJ,EAAM,iBAAkB,CACrC,EACA,UAAW,SAAUA,EAAM6B,EAAIwL,EAAQ,CACtC,OAAOrE,GAAKhJ,EAAM,cAAeqN,CAAM,CACxC,EACA,UAAW,SAAUrN,EAAM6B,EAAIwL,EAAQ,CACtC,OAAOrE,GAAKhJ,EAAM,kBAAmBqN,CAAM,CAC5C,EACA,SAAU,SAAUrN,EAAO,CAC1B,OAAOuN,IAAYvN,EAAK,YAAc,CAAC,GAAI,WAAYA,CAAK,CAC7D,EACA,SAAU,SAAUA,EAAO,CAC1B,OAAOuN,GAAUvN,EAAK,UAAW,CAClC,EACA,SAAU,SAAUA,EAAO,CAC1B,OAAKA,EAAK,iBAAmB,MAK5BlC,EAAUkC,EAAK,eAAgB,EAExBA,EAAK,iBAMR+B,EAAU/B,EAAM,UAAW,IAC/BA,EAAOA,EAAK,SAAWA,GAGjBP,EAAO,MAAO,CAAC,EAAGO,EAAK,UAAW,EAC1C,CACD,EAAG,SAAUK,EAAMoG,EAAK,CACvBhH,EAAO,GAAIY,CAAK,EAAI,SAAUgN,EAAO3N,EAAW,CAC/C,IAAI6J,EAAU9J,EAAO,IAAK,KAAMgH,EAAI4G,CAAM,EAE1C,OAAKhN,EAAK,MAAO,EAAG,IAAM,UACzBX,EAAW2N,GAGP3N,GAAY,OAAOA,GAAa,WACpC6J,EAAU9J,EAAO,OAAQC,EAAU6J,CAAQ,GAGvC,KAAK,OAAS,IAGZ4E,EAAkB9N,CAAK,GAC5BZ,EAAO,WAAY8J,CAAQ,EAIvB2E,EAAa,KAAM7N,CAAK,GAC5BkJ,EAAQ,QAAQ,GAIX,KAAK,UAAWA,CAAQ,CAChC,CACD,CAAE,EACF,IAAIkF,EAAkB,oBAKtB,SAASC,GAAetO,EAAU,CACjC,IAAIuO,EAAS,CAAC,EACd,OAAAlP,EAAO,KAAMW,EAAQ,MAAOqO,CAAc,GAAK,CAAC,EAAG,SAAUG,EAAGC,EAAO,CACtEF,EAAQE,CAAK,EAAI,EAClB,CAAE,EACKF,CACR,CAwBAlP,EAAO,UAAY,SAAUW,EAAU,CAItCA,EAAU,OAAOA,GAAY,SAC5BsO,GAAetO,CAAQ,EACvBX,EAAO,OAAQ,CAAC,EAAGW,CAAQ,EAE5B,IACC0O,EAGAC,EAGAC,EAGAC,EAGAC,EAAO,CAAC,EAGRC,EAAQ,CAAC,EAGTC,EAAc,GAGdC,EAAO,UAAW,CAQjB,IALAJ,EAASA,GAAU7O,EAAQ,KAI3B4O,EAAQF,EAAS,GACTK,EAAM,OAAQC,EAAc,GAEnC,IADAL,EAASI,EAAM,MAAM,EACb,EAAEC,EAAcF,EAAK,QAGvBA,EAAME,CAAY,EAAE,MAAOL,EAAQ,CAAE,EAAGA,EAAQ,CAAE,CAAE,IAAM,IAC9D3O,EAAQ,cAGRgP,EAAcF,EAAK,OACnBH,EAAS,IAMN3O,EAAQ,SACb2O,EAAS,IAGVD,EAAS,GAGJG,IAGCF,EACJG,EAAO,CAAC,EAIRA,EAAO,GAGV,EAGApB,EAAO,CAGN,IAAK,UAAW,CACf,OAAKoB,IAGCH,GAAU,CAACD,IACfM,EAAcF,EAAK,OAAS,EAC5BC,EAAM,KAAMJ,CAAO,GAGlB,SAASO,EAAKjG,EAAO,CACtB5J,EAAO,KAAM4J,EAAM,SAAUuF,EAAGjN,GAAM,CAChCjD,EAAYiD,EAAI,GACf,CAACvB,EAAQ,QAAU,CAAC0N,EAAK,IAAKnM,EAAI,IACtCuN,EAAK,KAAMvN,EAAI,EAELA,IAAOA,GAAI,QAAUrC,EAAQqC,EAAI,IAAM,UAGlD2N,EAAK3N,EAAI,CAEX,CAAE,CACH,EAAK,SAAU,EAEVoN,GAAU,CAACD,GACfO,EAAK,GAGA,IACR,EAGA,OAAQ,UAAW,CAClB,OAAA5P,EAAO,KAAM,UAAW,SAAUmP,EAAGjN,EAAM,CAE1C,QADI4N,GACMA,EAAQ9P,EAAO,QAASkC,EAAKuN,EAAMK,CAAM,GAAM,IACxDL,EAAK,OAAQK,EAAO,CAAE,EAGjBA,GAASH,GACbA,GAGH,CAAE,EACK,IACR,EAIA,IAAK,SAAU3I,EAAK,CACnB,OAAOA,EACNhH,EAAO,QAASgH,EAAIyI,CAAK,EAAI,GAC7BA,EAAK,OAAS,CAChB,EAGA,MAAO,UAAW,CACjB,OAAKA,IACJA,EAAO,CAAC,GAEF,IACR,EAKA,QAAS,UAAW,CACnB,OAAAD,EAASE,EAAQ,CAAC,EAClBD,EAAOH,EAAS,GACT,IACR,EACA,SAAU,UAAW,CACpB,MAAO,CAACG,CACT,EAKA,KAAM,UAAW,CAChB,OAAAD,EAASE,EAAQ,CAAC,EACb,CAACJ,GAAU,CAACD,IAChBI,EAAOH,EAAS,IAEV,IACR,EACA,OAAQ,UAAW,CAClB,MAAO,CAAC,CAACE,CACV,EAGA,SAAU,SAAUtP,EAAS0J,EAAO,CACnC,OAAM4F,IACL5F,EAAOA,GAAQ,CAAC,EAChBA,EAAO,CAAE1J,EAAS0J,EAAK,MAAQA,EAAK,MAAM,EAAIA,CAAK,EACnD8F,EAAM,KAAM9F,CAAK,EACXyF,GACLO,EAAK,GAGA,IACR,EAGA,KAAM,UAAW,CAChB,OAAAvB,EAAK,SAAU,KAAM,SAAU,EACxB,IACR,EAGA,MAAO,UAAW,CACjB,MAAO,CAAC,CAACkB,CACV,CACD,EAED,OAAOlB,CACR,EAGA,SAAS0B,GAAUC,EAAI,CACtB,OAAOA,CACR,CACA,SAASC,GAASC,EAAK,CACtB,MAAMA,CACP,CAEA,SAASC,GAAYhO,EAAOiO,EAASC,EAAQC,EAAU,CACtD,IAAIC,EAEJ,GAAI,CAGEpO,GAASlD,EAAcsR,EAASpO,EAAM,OAAU,EACpDoO,EAAO,KAAMpO,CAAM,EAAE,KAAMiO,CAAQ,EAAE,KAAMC,CAAO,EAGvClO,GAASlD,EAAcsR,EAASpO,EAAM,IAAO,EACxDoO,EAAO,KAAMpO,EAAOiO,EAASC,CAAO,EAQpCD,EAAQ,MAAO,OAAW,CAAEjO,CAAM,EAAE,MAAOmO,CAAQ,CAAE,CAMvD,OAAUnO,EAAQ,CAIjBkO,EAAO,MAAO,OAAW,CAAElO,CAAM,CAAE,CACpC,CACD,CAEAnC,EAAO,OAAQ,CAEd,SAAU,SAAUwQ,EAAO,CAC1B,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAYzQ,EAAO,UAAW,QAAS,EAClDA,EAAO,UAAW,QAAS,EAAG,CAAE,EACjC,CAAE,UAAW,OAAQA,EAAO,UAAW,aAAc,EACpDA,EAAO,UAAW,aAAc,EAAG,EAAG,UAAW,EAClD,CAAE,SAAU,OAAQA,EAAO,UAAW,aAAc,EACnDA,EAAO,UAAW,aAAc,EAAG,EAAG,UAAW,CACnD,EACA0Q,EAAQ,UACRC,EAAU,CACT,MAAO,UAAW,CACjB,OAAOD,CACR,EACA,OAAQ,UAAW,CAClB,OAAAE,EAAS,KAAM,SAAU,EAAE,KAAM,SAAU,EACpC,IACR,EACA,MAAS,SAAU5J,EAAK,CACvB,OAAO2J,EAAQ,KAAM,KAAM3J,CAAG,CAC/B,EAGA,KAAM,UAA6C,CAClD,IAAI6J,EAAM,UAEV,OAAO7Q,EAAO,SAAU,SAAU8Q,EAAW,CAC5C9Q,EAAO,KAAMyQ,EAAQ,SAAUrO,EAAI2O,EAAQ,CAG1C,IAAI/J,EAAK/H,EAAY4R,EAAKE,EAAO,CAAE,CAAE,CAAE,GAAKF,EAAKE,EAAO,CAAE,CAAE,EAK5DH,EAAUG,EAAO,CAAE,CAAE,EAAG,UAAW,CAClC,IAAIC,EAAWhK,GAAMA,EAAG,MAAO,KAAM,SAAU,EAC1CgK,GAAY/R,EAAY+R,EAAS,OAAQ,EAC7CA,EAAS,QAAQ,EACf,SAAUF,EAAS,MAAO,EAC1B,KAAMA,EAAS,OAAQ,EACvB,KAAMA,EAAS,MAAO,EAExBA,EAAUC,EAAO,CAAE,EAAI,MAAO,EAC7B,KACA/J,EAAK,CAAEgK,CAAS,EAAI,SACrB,CAEF,CAAE,CACH,CAAE,EACFH,EAAM,IACP,CAAE,EAAE,QAAQ,CACb,EACA,KAAM,SAAUI,EAAaC,EAAYC,EAAa,CACrD,IAAIC,EAAW,EACf,SAAShB,EAASiB,EAAOT,EAAUU,EAASC,GAAU,CACrD,OAAO,UAAW,CACjB,IAAIC,GAAO,KACV5H,GAAO,UACP6H,GAAa,UAAW,CACvB,IAAIT,GAAUU,GAKd,GAAK,EAAAL,EAAQD,GAQb,IAJAJ,GAAWM,EAAQ,MAAOE,GAAM5H,EAAK,EAIhCoH,KAAaJ,EAAS,QAAQ,EAClC,MAAM,IAAI,UAAW,0BAA2B,EAOjDc,GAAOV,KAKJ,OAAOA,IAAa,UACrB,OAAOA,IAAa,aACrBA,GAAS,KAGL/R,EAAYyS,EAAK,EAGhBH,GACJG,GAAK,KACJV,GACAZ,EAASgB,EAAUR,EAAUb,GAAUwB,EAAQ,EAC/CnB,EAASgB,EAAUR,EAAUX,GAASsB,EAAQ,CAC/C,GAMAH,IAEAM,GAAK,KACJV,GACAZ,EAASgB,EAAUR,EAAUb,GAAUwB,EAAQ,EAC/CnB,EAASgB,EAAUR,EAAUX,GAASsB,EAAQ,EAC9CnB,EAASgB,EAAUR,EAAUb,GAC5Ba,EAAS,UAAW,CACtB,IAQIU,IAAYvB,KAChByB,GAAO,OACP5H,GAAO,CAAEoH,EAAS,IAKjBO,IAAWX,EAAS,aAAeY,GAAM5H,EAAK,GAElD,EAGA+H,GAAUJ,GACTE,GACA,UAAW,CACV,GAAI,CACHA,GAAW,CACZ,OAAUG,GAAI,CAER5R,EAAO,SAAS,eACpBA,EAAO,SAAS,cAAe4R,GAC9BD,GAAQ,KAAM,EAMXN,EAAQ,GAAKD,IAIZE,IAAYrB,KAChBuB,GAAO,OACP5H,GAAO,CAAEgI,EAAE,GAGZhB,EAAS,WAAYY,GAAM5H,EAAK,EAElC,CACD,EAMGyH,EACJM,GAAQ,GAKH3R,EAAO,SAAS,aACpB2R,GAAQ,MAAQ3R,EAAO,SAAS,aAAa,EAMlCA,EAAO,SAAS,eAC3B2R,GAAQ,MAAQ3R,EAAO,SAAS,aAAa,GAE9C9B,EAAO,WAAYyT,EAAQ,EAE7B,CACD,CAEA,OAAO3R,EAAO,SAAU,SAAU8Q,EAAW,CAG5CL,EAAQ,CAAE,EAAG,CAAE,EAAE,IAChBL,EACC,EACAU,EACA7R,EAAYkS,CAAW,EACtBA,EACApB,GACDe,EAAS,UACV,CACD,EAGAL,EAAQ,CAAE,EAAG,CAAE,EAAE,IAChBL,EACC,EACAU,EACA7R,EAAYgS,CAAY,EACvBA,EACAlB,EACF,CACD,EAGAU,EAAQ,CAAE,EAAG,CAAE,EAAE,IAChBL,EACC,EACAU,EACA7R,EAAYiS,CAAW,EACtBA,EACAjB,EACF,CACD,CACD,CAAE,EAAE,QAAQ,CACb,EAIA,QAAS,SAAU/Q,EAAM,CACxB,OAAOA,GAAO,KAAOc,EAAO,OAAQd,EAAKyR,CAAQ,EAAIA,CACtD,CACD,EACAC,EAAW,CAAC,EAGb,OAAA5Q,EAAO,KAAMyQ,EAAQ,SAAU/Q,EAAGqR,EAAQ,CACzC,IAAItB,EAAOsB,EAAO,CAAE,EACnBc,EAAcd,EAAO,CAAE,EAKxBJ,EAASI,EAAO,CAAE,CAAE,EAAItB,EAAK,IAGxBoC,GACJpC,EAAK,IACJ,UAAW,CAIViB,EAAQmB,CACT,EAIApB,EAAQ,EAAI/Q,CAAE,EAAG,CAAE,EAAE,QAIrB+Q,EAAQ,EAAI/Q,CAAE,EAAG,CAAE,EAAE,QAGrB+Q,EAAQ,CAAE,EAAG,CAAE,EAAE,KAGjBA,EAAQ,CAAE,EAAG,CAAE,EAAE,IAClB,EAMDhB,EAAK,IAAKsB,EAAO,CAAE,EAAE,IAAK,EAK1BH,EAAUG,EAAO,CAAE,CAAE,EAAI,UAAW,CACnC,OAAAH,EAAUG,EAAO,CAAE,EAAI,MAAO,EAAG,OAASH,EAAW,OAAY,KAAM,SAAU,EAC1E,IACR,EAKAA,EAAUG,EAAO,CAAE,EAAI,MAAO,EAAItB,EAAK,QACxC,CAAE,EAGFkB,EAAQ,QAASC,CAAS,EAGrBJ,GACJA,EAAK,KAAMI,EAAUA,CAAS,EAIxBA,CACR,EAGA,KAAM,SAAUkB,EAAc,CAC7B,IAGCC,EAAY,UAAU,OAGtBrS,EAAIqS,EAGJC,EAAkB,MAAOtS,CAAE,EAC3BuS,EAAgB3T,EAAM,KAAM,SAAU,EAGtC4T,EAAUlS,EAAO,SAAS,EAG1BmS,EAAa,SAAUzS,EAAI,CAC1B,OAAO,SAAUyC,EAAQ,CACxB6P,EAAiBtS,CAAE,EAAI,KACvBuS,EAAevS,CAAE,EAAI,UAAU,OAAS,EAAIpB,EAAM,KAAM,SAAU,EAAI6D,EAC9D,EAAE4P,GACTG,EAAQ,YAAaF,EAAiBC,CAAc,CAEtD,CACD,EAGD,GAAKF,GAAa,IACjB5B,GAAY2B,EAAaI,EAAQ,KAAMC,EAAYzS,CAAE,CAAE,EAAE,QAASwS,EAAQ,OACzE,CAACH,CAAU,EAGPG,EAAQ,MAAM,IAAM,WACxBjT,EAAYgT,EAAevS,CAAE,GAAKuS,EAAevS,CAAE,EAAE,IAAK,GAE1D,OAAOwS,EAAQ,KAAK,EAKtB,KAAQxS,KACPyQ,GAAY8B,EAAevS,CAAE,EAAGyS,EAAYzS,CAAE,EAAGwS,EAAQ,MAAO,EAGjE,OAAOA,EAAQ,QAAQ,CACxB,CACD,CAAE,EAKF,IAAIE,GAAc,yDAKlBpS,EAAO,SAAS,cAAgB,SAAUqS,EAAOC,EAAa,CAIxDpU,EAAO,SAAWA,EAAO,QAAQ,MAAQmU,GAASD,GAAY,KAAMC,EAAM,IAAK,GACnFnU,EAAO,QAAQ,KAAM,8BAAgCmU,EAAM,QAC1DA,EAAM,MAAOC,CAAW,CAE3B,EAKAtS,EAAO,eAAiB,SAAUqS,EAAQ,CACzCnU,EAAO,WAAY,UAAW,CAC7B,MAAMmU,CACP,CAAE,CACH,EAMA,IAAIE,GAAYvS,EAAO,SAAS,EAEhCA,EAAO,GAAG,MAAQ,SAAUgH,EAAK,CAEhC,OAAAuL,GACE,KAAMvL,CAAG,EAKT,MAAO,SAAUqL,EAAQ,CACzBrS,EAAO,eAAgBqS,CAAM,CAC9B,CAAE,EAEI,IACR,EAEArS,EAAO,OAAQ,CAGd,QAAS,GAIT,UAAW,EAGX,MAAO,SAAUwS,EAAO,EAGlBA,IAAS,GAAO,EAAExS,EAAO,UAAYA,EAAO,WAKjDA,EAAO,QAAU,GAGZ,EAAAwS,IAAS,IAAQ,EAAExS,EAAO,UAAY,IAK3CuS,GAAU,YAAanT,EAAU,CAAEY,CAAO,CAAE,EAC7C,CACD,CAAE,EAEFA,EAAO,MAAM,KAAOuS,GAAU,KAG9B,SAASE,IAAY,CACpBrT,EAAS,oBAAqB,mBAAoBqT,EAAU,EAC5DvU,EAAO,oBAAqB,OAAQuU,EAAU,EAC9CzS,EAAO,MAAM,CACd,CAMKZ,EAAS,aAAe,YAC1BA,EAAS,aAAe,WAAa,CAACA,EAAS,gBAAgB,SAGjElB,EAAO,WAAY8B,EAAO,KAAM,GAKhCZ,EAAS,iBAAkB,mBAAoBqT,EAAU,EAGzDvU,EAAO,iBAAkB,OAAQuU,EAAU,GAQ5C,IAAIC,GAAS,SAAUtS,EAAO4G,EAAIF,EAAK3E,EAAOwQ,EAAWC,EAAUC,EAAM,CACxE,IAAInT,EAAI,EACPe,EAAML,EAAM,OACZ0S,EAAOhM,GAAO,KAGf,GAAKjH,EAAQiH,CAAI,IAAM,SAAW,CACjC6L,EAAY,GACZ,IAAMjT,KAAKoH,EACV4L,GAAQtS,EAAO4G,EAAItH,EAAGoH,EAAKpH,CAAE,EAAG,GAAMkT,EAAUC,CAAI,CAItD,SAAY1Q,IAAU,SACrBwQ,EAAY,GAEN1T,EAAYkD,CAAM,IACvB0Q,EAAM,IAGFC,IAGCD,GACJ7L,EAAG,KAAM5G,EAAO+B,CAAM,EACtB6E,EAAK,OAIL8L,EAAO9L,EACPA,EAAK,SAAUzG,EAAMwS,EAAM5Q,EAAQ,CAClC,OAAO2Q,EAAK,KAAM9S,EAAQO,CAAK,EAAG4B,CAAM,CACzC,IAIG6E,GACJ,KAAQtH,EAAIe,EAAKf,IAChBsH,EACC5G,EAAOV,CAAE,EAAGoH,EAAK+L,EAChB1Q,EACAA,EAAM,KAAM/B,EAAOV,CAAE,EAAGA,EAAGsH,EAAI5G,EAAOV,CAAE,EAAGoH,CAAI,CAAE,CACnD,EAKH,OAAK6L,EACGvS,EAIH0S,EACG9L,EAAG,KAAM5G,CAAM,EAGhBK,EAAMuG,EAAI5G,EAAO,CAAE,EAAG0G,CAAI,EAAI8L,CACtC,EAIII,GAAY,QACfC,GAAa,YAGd,SAASC,GAAYC,EAAMC,EAAS,CACnC,OAAOA,EAAO,YAAY,CAC3B,CAKA,SAASC,GAAWC,EAAS,CAC5B,OAAOA,EAAO,QAASN,GAAW,KAAM,EAAE,QAASC,GAAYC,EAAW,CAC3E,CACA,IAAIK,GAAa,SAAUC,EAAQ,CAQlC,OAAOA,EAAM,WAAa,GAAKA,EAAM,WAAa,GAAK,CAAG,CAACA,EAAM,QAClE,EAKA,SAASC,IAAO,CACf,KAAK,QAAUzT,EAAO,QAAUyT,GAAK,KACtC,CAEAA,GAAK,IAAM,EAEXA,GAAK,UAAY,CAEhB,MAAO,SAAUD,EAAQ,CAGxB,IAAIrR,EAAQqR,EAAO,KAAK,OAAQ,EAGhC,OAAMrR,IACLA,EAAQ,CAAC,EAKJoR,GAAYC,CAAM,IAIjBA,EAAM,SACVA,EAAO,KAAK,OAAQ,EAAIrR,EAMxB,OAAO,eAAgBqR,EAAO,KAAK,QAAS,CAC3C,MAAOrR,EACP,aAAc,EACf,CAAE,IAKEA,CACR,EACA,IAAK,SAAUqR,EAAOE,EAAMvR,EAAQ,CACnC,IAAIwR,EACH9M,EAAQ,KAAK,MAAO2M,CAAM,EAI3B,GAAK,OAAOE,GAAS,SACpB7M,EAAOwM,GAAWK,CAAK,CAAE,EAAIvR,MAM7B,KAAMwR,KAAQD,EACb7M,EAAOwM,GAAWM,CAAK,CAAE,EAAID,EAAMC,CAAK,EAG1C,OAAO9M,CACR,EACA,IAAK,SAAU2M,EAAO1M,EAAM,CAC3B,OAAOA,IAAQ,OACd,KAAK,MAAO0M,CAAM,EAGlBA,EAAO,KAAK,OAAQ,GAAKA,EAAO,KAAK,OAAQ,EAAGH,GAAWvM,CAAI,CAAE,CACnE,EACA,OAAQ,SAAU0M,EAAO1M,EAAK3E,EAAQ,CAarC,OAAK2E,IAAQ,QACPA,GAAO,OAAOA,GAAQ,UAAc3E,IAAU,OAE5C,KAAK,IAAKqR,EAAO1M,CAAI,GAS7B,KAAK,IAAK0M,EAAO1M,EAAK3E,CAAM,EAIrBA,IAAU,OAAYA,EAAQ2E,EACtC,EACA,OAAQ,SAAU0M,EAAO1M,EAAM,CAC9B,IAAIpH,EACHmH,EAAQ2M,EAAO,KAAK,OAAQ,EAE7B,GAAK3M,IAAU,OAIf,IAAKC,IAAQ,OAoBZ,IAjBK,MAAM,QAASA,CAAI,EAIvBA,EAAMA,EAAI,IAAKuM,EAAU,GAEzBvM,EAAMuM,GAAWvM,CAAI,EAIrBA,EAAMA,KAAOD,EACZ,CAAEC,CAAI,EACJA,EAAI,MAAOkI,CAAc,GAAK,CAAC,GAGnCtP,EAAIoH,EAAI,OAEApH,KACP,OAAOmH,EAAOC,EAAKpH,CAAE,CAAE,GAKpBoH,IAAQ,QAAa9G,EAAO,cAAe6G,CAAM,KAMhD2M,EAAM,SACVA,EAAO,KAAK,OAAQ,EAAI,OAExB,OAAOA,EAAO,KAAK,OAAQ,GAG9B,EACA,QAAS,SAAUA,EAAQ,CAC1B,IAAI3M,EAAQ2M,EAAO,KAAK,OAAQ,EAChC,OAAO3M,IAAU,QAAa,CAAC7G,EAAO,cAAe6G,CAAM,CAC5D,CACD,EACA,IAAI+M,GAAW,IAAIH,GAEfI,GAAW,IAAIJ,GAcfK,GAAS,gCACZC,GAAa,SAEd,SAASC,GAASN,EAAO,CACxB,OAAKA,IAAS,OACN,GAGHA,IAAS,QACN,GAGHA,IAAS,OACN,KAIHA,IAAS,CAACA,EAAO,GACd,CAACA,EAGJI,GAAO,KAAMJ,CAAK,EACf,KAAK,MAAOA,CAAK,EAGlBA,CACR,CAEA,SAASO,GAAU1T,EAAMuG,EAAK4M,EAAO,CACpC,IAAI9S,EAIJ,GAAK8S,IAAS,QAAanT,EAAK,WAAa,EAI5C,GAHAK,EAAO,QAAUkG,EAAI,QAASiN,GAAY,KAAM,EAAE,YAAY,EAC9DL,EAAOnT,EAAK,aAAcK,CAAK,EAE1B,OAAO8S,GAAS,SAAW,CAC/B,GAAI,CACHA,EAAOM,GAASN,CAAK,CACtB,MAAc,CAAC,CAGfG,GAAS,IAAKtT,EAAMuG,EAAK4M,CAAK,CAC/B,MACCA,EAAO,OAGT,OAAOA,CACR,CAEA1T,EAAO,OAAQ,CACd,QAAS,SAAUO,EAAO,CACzB,OAAOsT,GAAS,QAAStT,CAAK,GAAKqT,GAAS,QAASrT,CAAK,CAC3D,EAEA,KAAM,SAAUA,EAAMK,EAAM8S,EAAO,CAClC,OAAOG,GAAS,OAAQtT,EAAMK,EAAM8S,CAAK,CAC1C,EAEA,WAAY,SAAUnT,EAAMK,EAAO,CAClCiT,GAAS,OAAQtT,EAAMK,CAAK,CAC7B,EAIA,MAAO,SAAUL,EAAMK,EAAM8S,EAAO,CACnC,OAAOE,GAAS,OAAQrT,EAAMK,EAAM8S,CAAK,CAC1C,EAEA,YAAa,SAAUnT,EAAMK,EAAO,CACnCgT,GAAS,OAAQrT,EAAMK,CAAK,CAC7B,CACD,CAAE,EAEFZ,EAAO,GAAG,OAAQ,CACjB,KAAM,SAAU8G,EAAK3E,EAAQ,CAC5B,IAAIzC,EAAGkB,EAAM8S,EACZnT,EAAO,KAAM,CAAE,EACf2T,EAAQ3T,GAAQA,EAAK,WAGtB,GAAKuG,IAAQ,OAAY,CACxB,GAAK,KAAK,SACT4M,EAAOG,GAAS,IAAKtT,CAAK,EAErBA,EAAK,WAAa,GAAK,CAACqT,GAAS,IAAKrT,EAAM,cAAe,GAAI,CAEnE,IADAb,EAAIwU,EAAM,OACFxU,KAIFwU,EAAOxU,CAAE,IACbkB,EAAOsT,EAAOxU,CAAE,EAAE,KACbkB,EAAK,QAAS,OAAQ,IAAM,IAChCA,EAAOyS,GAAWzS,EAAK,MAAO,CAAE,CAAE,EAClCqT,GAAU1T,EAAMK,EAAM8S,EAAM9S,CAAK,CAAE,IAItCgT,GAAS,IAAKrT,EAAM,eAAgB,EAAK,CAC1C,CAGD,OAAOmT,CACR,CAGA,OAAK,OAAO5M,GAAQ,SACZ,KAAK,KAAM,UAAW,CAC5B+M,GAAS,IAAK,KAAM/M,CAAI,CACzB,CAAE,EAGI4L,GAAQ,KAAM,SAAUvQ,EAAQ,CACtC,IAAIuR,EAOJ,GAAKnT,GAAQ4B,IAAU,OAYtB,OARAuR,EAAOG,GAAS,IAAKtT,EAAMuG,CAAI,EAC1B4M,IAAS,SAMdA,EAAOO,GAAU1T,EAAMuG,CAAI,EACtB4M,IAAS,QACNA,EAIR,OAID,KAAK,KAAM,UAAW,CAGrBG,GAAS,IAAK,KAAM/M,EAAK3E,CAAM,CAChC,CAAE,CACH,EAAG,KAAMA,EAAO,UAAU,OAAS,EAAG,KAAM,EAAK,CAClD,EAEA,WAAY,SAAU2E,EAAM,CAC3B,OAAO,KAAK,KAAM,UAAW,CAC5B+M,GAAS,OAAQ,KAAM/M,CAAI,CAC5B,CAAE,CACH,CACD,CAAE,EAGF9G,EAAO,OAAQ,CACd,MAAO,SAAUO,EAAM8B,EAAMqR,EAAO,CACnC,IAAIhE,EAEJ,GAAKnP,EACJ,OAAA8B,GAASA,GAAQ,MAAS,QAC1BqN,EAAQkE,GAAS,IAAKrT,EAAM8B,CAAK,EAG5BqR,IACC,CAAChE,GAAS,MAAM,QAASgE,CAAK,EAClChE,EAAQkE,GAAS,OAAQrT,EAAM8B,EAAMrC,EAAO,UAAW0T,CAAK,CAAE,EAE9DhE,EAAM,KAAMgE,CAAK,GAGZhE,GAAS,CAAC,CAEnB,EAEA,QAAS,SAAUnP,EAAM8B,EAAO,CAC/BA,EAAOA,GAAQ,KAEf,IAAIqN,EAAQ1P,EAAO,MAAOO,EAAM8B,CAAK,EACpC8R,EAAczE,EAAM,OACpB1I,EAAK0I,EAAM,MAAM,EACjB0E,EAAQpU,EAAO,YAAaO,EAAM8B,CAAK,EACvCgS,EAAO,UAAW,CACjBrU,EAAO,QAASO,EAAM8B,CAAK,CAC5B,EAGI2E,IAAO,eACXA,EAAK0I,EAAM,MAAM,EACjByE,KAGInN,IAIC3E,IAAS,MACbqN,EAAM,QAAS,YAAa,EAI7B,OAAO0E,EAAM,KACbpN,EAAG,KAAMzG,EAAM8T,EAAMD,CAAM,GAGvB,CAACD,GAAeC,GACpBA,EAAM,MAAM,KAAK,CAEnB,EAGA,YAAa,SAAU7T,EAAM8B,EAAO,CACnC,IAAIyE,EAAMzE,EAAO,aACjB,OAAOuR,GAAS,IAAKrT,EAAMuG,CAAI,GAAK8M,GAAS,OAAQrT,EAAMuG,EAAK,CAC/D,MAAO9G,EAAO,UAAW,aAAc,EAAE,IAAK,UAAW,CACxD4T,GAAS,OAAQrT,EAAM,CAAE8B,EAAO,QAASyE,CAAI,CAAE,CAChD,CAAE,CACH,CAAE,CACH,CACD,CAAE,EAEF9G,EAAO,GAAG,OAAQ,CACjB,MAAO,SAAUqC,EAAMqR,EAAO,CAC7B,IAAIY,EAAS,EAQb,OANK,OAAOjS,GAAS,WACpBqR,EAAOrR,EACPA,EAAO,KACPiS,KAGI,UAAU,OAASA,EAChBtU,EAAO,MAAO,KAAM,CAAE,EAAGqC,CAAK,EAG/BqR,IAAS,OACf,KACA,KAAK,KAAM,UAAW,CACrB,IAAIhE,EAAQ1P,EAAO,MAAO,KAAMqC,EAAMqR,CAAK,EAG3C1T,EAAO,YAAa,KAAMqC,CAAK,EAE1BA,IAAS,MAAQqN,EAAO,CAAE,IAAM,cACpC1P,EAAO,QAAS,KAAMqC,CAAK,CAE7B,CAAE,CACJ,EACA,QAAS,SAAUA,EAAO,CACzB,OAAO,KAAK,KAAM,UAAW,CAC5BrC,EAAO,QAAS,KAAMqC,CAAK,CAC5B,CAAE,CACH,EACA,WAAY,SAAUA,EAAO,CAC5B,OAAO,KAAK,MAAOA,GAAQ,KAAM,CAAC,CAAE,CACrC,EAIA,QAAS,SAAUA,EAAMnD,EAAM,CAC9B,IAAIqV,EACHC,EAAQ,EACRC,EAAQzU,EAAO,SAAS,EACxBkI,EAAW,KACXxI,EAAI,KAAK,OACT0Q,EAAU,UAAW,CACZ,EAAEoE,GACTC,EAAM,YAAavM,EAAU,CAAEA,CAAS,CAAE,CAE5C,EAQD,IANK,OAAO7F,GAAS,WACpBnD,EAAMmD,EACNA,EAAO,QAERA,EAAOA,GAAQ,KAEP3C,KACP6U,EAAMX,GAAS,IAAK1L,EAAUxI,CAAE,EAAG2C,EAAO,YAAa,EAClDkS,GAAOA,EAAI,QACfC,IACAD,EAAI,MAAM,IAAKnE,CAAQ,GAGzB,OAAAA,EAAQ,EACDqE,EAAM,QAASvV,CAAI,CAC3B,CACD,CAAE,EACF,IAAIwV,GAAS,sCAAwC,OAEjDC,GAAU,IAAI,OAAQ,iBAAmBD,GAAO,cAAe,GAAI,EAGnEE,GAAY,CAAE,MAAO,QAAS,SAAU,MAAO,EAE/ClR,GAAkBtE,EAAS,gBAI1ByV,GAAa,SAAUtU,EAAO,CAChC,OAAOP,EAAO,SAAUO,EAAK,cAAeA,CAAK,CAClD,EACAuU,GAAW,CAAE,SAAU,EAAK,EAOxBpR,GAAgB,cACpBmR,GAAa,SAAUtU,EAAO,CAC7B,OAAOP,EAAO,SAAUO,EAAK,cAAeA,CAAK,GAChDA,EAAK,YAAauU,EAAS,IAAMvU,EAAK,aACxC,GAEF,IAAIwU,GAAqB,SAAUxU,EAAM2G,EAAK,CAI5C,OAAA3G,EAAO2G,GAAM3G,EAGNA,EAAK,MAAM,UAAY,QAC7BA,EAAK,MAAM,UAAY,IAMvBsU,GAAYtU,CAAK,GAEjBP,EAAO,IAAKO,EAAM,SAAU,IAAM,MACpC,EAID,SAASyU,GAAWzU,EAAMoT,EAAMsB,EAAYC,EAAQ,CACnD,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,UAAW,CACV,OAAOA,EAAM,IAAI,CAClB,EACA,UAAW,CACV,OAAOlV,EAAO,IAAKO,EAAMoT,EAAM,EAAG,CACnC,EACD4B,EAAUD,EAAa,EACvBE,EAAOP,GAAcA,EAAY,CAAE,IAAOjV,EAAO,UAAW2T,CAAK,EAAI,GAAK,MAG1E8B,EAAgBlV,EAAK,WAClBP,EAAO,UAAW2T,CAAK,GAAK6B,IAAS,MAAQ,CAACD,IAChDZ,GAAQ,KAAM3U,EAAO,IAAKO,EAAMoT,CAAK,CAAE,EAEzC,GAAK8B,GAAiBA,EAAe,CAAE,IAAMD,EAAO,CAYnD,IARAD,EAAUA,EAAU,EAGpBC,EAAOA,GAAQC,EAAe,CAAE,EAGhCA,EAAgB,CAACF,GAAW,EAEpBF,KAIPrV,EAAO,MAAOO,EAAMoT,EAAM8B,EAAgBD,CAAK,GACxC,EAAIJ,IAAY,GAAMA,EAAQE,EAAa,EAAIC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBI,EAAgBA,EAAgBL,EAIjCK,EAAgBA,EAAgB,EAChCzV,EAAO,MAAOO,EAAMoT,EAAM8B,EAAgBD,CAAK,EAG/CP,EAAaA,GAAc,CAAC,CAC7B,CAEA,OAAKA,IACJQ,EAAgB,CAACA,GAAiB,CAACF,GAAW,EAG9CJ,EAAWF,EAAY,CAAE,EACxBQ,GAAkBR,EAAY,CAAE,EAAI,GAAMA,EAAY,CAAE,EACxD,CAACA,EAAY,CAAE,EACXC,IACJA,EAAM,KAAOM,EACbN,EAAM,MAAQO,EACdP,EAAM,IAAMC,IAGPA,CACR,CAGA,IAAIO,GAAoB,CAAC,EAEzB,SAASC,GAAmBpV,EAAO,CAClC,IAAI4L,EACH1M,EAAMc,EAAK,cACX+B,EAAW/B,EAAK,SAChBqV,EAAUF,GAAmBpT,CAAS,EAEvC,OAAKsT,IAILzJ,EAAO1M,EAAI,KAAK,YAAaA,EAAI,cAAe6C,CAAS,CAAE,EAC3DsT,EAAU5V,EAAO,IAAKmM,EAAM,SAAU,EAEtCA,EAAK,WAAW,YAAaA,CAAK,EAE7ByJ,IAAY,SAChBA,EAAU,SAEXF,GAAmBpT,CAAS,EAAIsT,EAEzBA,EACR,CAEA,SAASC,GAAU3N,EAAU4N,EAAO,CAOnC,QANIF,EAASrV,EACZwV,EAAS,CAAC,EACVjG,EAAQ,EACR5O,EAASgH,EAAS,OAGX4H,EAAQ5O,EAAQ4O,IACvBvP,EAAO2H,EAAU4H,CAAM,EACjBvP,EAAK,QAIXqV,EAAUrV,EAAK,MAAM,QAChBuV,GAKCF,IAAY,SAChBG,EAAQjG,CAAM,EAAI8D,GAAS,IAAKrT,EAAM,SAAU,GAAK,KAC/CwV,EAAQjG,CAAM,IACnBvP,EAAK,MAAM,QAAU,KAGlBA,EAAK,MAAM,UAAY,IAAMwU,GAAoBxU,CAAK,IAC1DwV,EAAQjG,CAAM,EAAI6F,GAAmBpV,CAAK,IAGtCqV,IAAY,SAChBG,EAAQjG,CAAM,EAAI,OAGlB8D,GAAS,IAAKrT,EAAM,UAAWqV,CAAQ,IAM1C,IAAM9F,EAAQ,EAAGA,EAAQ5O,EAAQ4O,IAC3BiG,EAAQjG,CAAM,GAAK,OACvB5H,EAAU4H,CAAM,EAAE,MAAM,QAAUiG,EAAQjG,CAAM,GAIlD,OAAO5H,CACR,CAEAlI,EAAO,GAAG,OAAQ,CACjB,KAAM,UAAW,CAChB,OAAO6V,GAAU,KAAM,EAAK,CAC7B,EACA,KAAM,UAAW,CAChB,OAAOA,GAAU,IAAK,CACvB,EACA,OAAQ,SAAUnF,EAAQ,CACzB,OAAK,OAAOA,GAAU,UACdA,EAAQ,KAAK,KAAK,EAAI,KAAK,KAAK,EAGjC,KAAK,KAAM,UAAW,CACvBqE,GAAoB,IAAK,EAC7B/U,EAAQ,IAAK,EAAE,KAAK,EAEpBA,EAAQ,IAAK,EAAE,KAAK,CAEtB,CAAE,CACH,CACD,CAAE,EACF,IAAIgW,GAAmB,wBAEnBC,GAAa,iCAEbC,GAAgB,sCAIlB,UAAW,CACZ,IAAIC,EAAW/W,EAAS,uBAAuB,EAC9CgX,EAAMD,EAAS,YAAa/W,EAAS,cAAe,KAAM,CAAE,EAC5D2I,EAAQ3I,EAAS,cAAe,OAAQ,EAMzC2I,EAAM,aAAc,OAAQ,OAAQ,EACpCA,EAAM,aAAc,UAAW,SAAU,EACzCA,EAAM,aAAc,OAAQ,GAAI,EAEhCqO,EAAI,YAAarO,CAAM,EAIvB/I,EAAQ,WAAaoX,EAAI,UAAW,EAAK,EAAE,UAAW,EAAK,EAAE,UAAU,QAIvEA,EAAI,UAAY,yBAChBpX,EAAQ,eAAiB,CAAC,CAACoX,EAAI,UAAW,EAAK,EAAE,UAAU,aAK3DA,EAAI,UAAY,oBAChBpX,EAAQ,OAAS,CAAC,CAACoX,EAAI,SACxB,GAAI,EAIJ,IAAIC,GAAU,CAKb,MAAO,CAAE,EAAG,UAAW,UAAW,EAClC,IAAK,CAAE,EAAG,oBAAqB,qBAAsB,EACrD,GAAI,CAAE,EAAG,iBAAkB,kBAAmB,EAC9C,GAAI,CAAE,EAAG,qBAAsB,uBAAwB,EAEvD,SAAU,CAAE,EAAG,GAAI,EAAG,CACvB,EAEAA,GAAQ,MAAQA,GAAQ,MAAQA,GAAQ,SAAWA,GAAQ,QAAUA,GAAQ,MAC7EA,GAAQ,GAAKA,GAAQ,GAGfrX,EAAQ,SACbqX,GAAQ,SAAWA,GAAQ,OAAS,CAAE,EAAG,+BAAgC,WAAY,GAItF,SAASC,GAAQpW,EAAS2H,EAAM,CAI/B,IAAIxH,EAYJ,OAVK,OAAOH,EAAQ,qBAAyB,IAC5CG,EAAMH,EAAQ,qBAAsB2H,GAAO,GAAI,EAEpC,OAAO3H,EAAQ,iBAAqB,IAC/CG,EAAMH,EAAQ,iBAAkB2H,GAAO,GAAI,EAG3CxH,EAAM,CAAC,EAGHwH,IAAQ,QAAaA,GAAOvF,EAAUpC,EAAS2H,CAAI,EAChD7H,EAAO,MAAO,CAAEE,CAAQ,EAAGG,CAAI,EAGhCA,CACR,CAIA,SAASkW,GAAenW,EAAOoW,EAAc,CAI5C,QAHI9W,EAAI,EACPkP,EAAIxO,EAAM,OAEHV,EAAIkP,EAAGlP,IACdkU,GAAS,IACRxT,EAAOV,CAAE,EACT,aACA,CAAC8W,GAAe5C,GAAS,IAAK4C,EAAa9W,CAAE,EAAG,YAAa,CAC9D,CAEF,CAGA,IAAI+W,GAAQ,YAEZ,SAASC,GAAetW,EAAOF,EAASyW,EAASC,EAAWC,EAAU,CAOrE,QANItW,EAAMgU,EAAK1M,EAAKiP,EAAMC,EAAUrW,EACnCyV,EAAWjW,EAAQ,uBAAuB,EAC1C8W,EAAQ,CAAC,EACTtX,GAAI,EACJkP,GAAIxO,EAAM,OAEHV,GAAIkP,GAAGlP,KAGd,GAFAa,EAAOH,EAAOV,EAAE,EAEXa,GAAQA,IAAS,EAGrB,GAAKV,EAAQU,CAAK,IAAM,SAIvBP,EAAO,MAAOgX,EAAOzW,EAAK,SAAW,CAAEA,CAAK,EAAIA,CAAK,UAG1C,CAACkW,GAAM,KAAMlW,CAAK,EAC7ByW,EAAM,KAAM9W,EAAQ,eAAgBK,CAAK,CAAE,MAGrC,CAUN,IATAgU,EAAMA,GAAO4B,EAAS,YAAajW,EAAQ,cAAe,KAAM,CAAE,EAGlE2H,GAAQoO,GAAS,KAAM1V,CAAK,GAAK,CAAE,GAAI,EAAG,GAAK,CAAE,EAAE,YAAY,EAC/DuW,EAAOT,GAASxO,CAAI,GAAKwO,GAAQ,SACjC9B,EAAI,UAAYuC,EAAM,CAAE,EAAI9W,EAAO,cAAeO,CAAK,EAAIuW,EAAM,CAAE,EAGnEpW,EAAIoW,EAAM,CAAE,EACJpW,KACP6T,EAAMA,EAAI,UAKXvU,EAAO,MAAOgX,EAAOzC,EAAI,UAAW,EAGpCA,EAAM4B,EAAS,WAGf5B,EAAI,YAAc,EACnB,CAQF,IAHA4B,EAAS,YAAc,GAEvBzW,GAAI,EACMa,EAAOyW,EAAOtX,IAAI,GAAM,CAGjC,GAAKkX,GAAa5W,EAAO,QAASO,EAAMqW,CAAU,EAAI,GAAK,CACrDC,GACJA,EAAQ,KAAMtW,CAAK,EAEpB,QACD,CAaA,GAXAwW,EAAWlC,GAAYtU,CAAK,EAG5BgU,EAAM+B,GAAQH,EAAS,YAAa5V,CAAK,EAAG,QAAS,EAGhDwW,GACJR,GAAehC,CAAI,EAIfoC,EAEJ,IADAjW,EAAI,EACMH,EAAOgU,EAAK7T,GAAI,GACpBwV,GAAY,KAAM3V,EAAK,MAAQ,EAAG,GACtCoW,EAAQ,KAAMpW,CAAK,CAIvB,CAEA,OAAO4V,CACR,CAGA,IAAIc,GAAiB,sBAErB,SAASC,IAAa,CACrB,MAAO,EACR,CAEA,SAASC,IAAc,CACtB,MAAO,EACR,CAEA,SAASC,GAAI7W,EAAM8W,EAAOpX,EAAUyT,EAAM1M,EAAIsQ,EAAM,CACnD,IAAIC,EAAQlV,EAGZ,GAAK,OAAOgV,GAAU,SAAW,CAG3B,OAAOpX,GAAa,WAGxByT,EAAOA,GAAQzT,EACfA,EAAW,QAEZ,IAAMoC,KAAQgV,EACbD,GAAI7W,EAAM8B,EAAMpC,EAAUyT,EAAM2D,EAAOhV,CAAK,EAAGiV,CAAI,EAEpD,OAAO/W,CACR,CAqBA,GAnBKmT,GAAQ,MAAQ1M,GAAM,MAG1BA,EAAK/G,EACLyT,EAAOzT,EAAW,QACP+G,GAAM,OACZ,OAAO/G,GAAa,UAGxB+G,EAAK0M,EACLA,EAAO,SAIP1M,EAAK0M,EACLA,EAAOzT,EACPA,EAAW,SAGR+G,IAAO,GACXA,EAAKmQ,WACM,CAACnQ,EACZ,OAAOzG,EAGR,OAAK+W,IAAQ,IACZC,EAASvQ,EACTA,EAAK,SAAUwQ,EAAQ,CAGtB,OAAAxX,EAAO,EAAE,IAAKwX,CAAM,EACbD,EAAO,MAAO,KAAM,SAAU,CACtC,EAGAvQ,EAAG,KAAOuQ,EAAO,OAAUA,EAAO,KAAOvX,EAAO,SAE1CO,EAAK,KAAM,UAAW,CAC5BP,EAAO,MAAM,IAAK,KAAMqX,EAAOrQ,EAAI0M,EAAMzT,CAAS,CACnD,CAAE,CACH,CAMAD,EAAO,MAAQ,CAEd,OAAQ,CAAC,EAET,IAAK,SAAUO,EAAM8W,EAAO/F,EAASoC,EAAMzT,EAAW,CAErD,IAAIwX,EAAaC,EAAanD,EAC7BoD,EAAQC,EAAGC,EACXtG,EAASuG,EAAUzV,GAAM0V,GAAYC,GACrCC,GAAWrE,GAAS,IAAKrT,CAAK,EAG/B,GAAMgT,GAAYhT,CAAK,EAuCvB,IAlCK+Q,EAAQ,UACZmG,EAAcnG,EACdA,EAAUmG,EAAY,QACtBxX,EAAWwX,EAAY,UAKnBxX,GACJD,EAAO,KAAK,gBAAiB0D,GAAiBzD,CAAS,EAIlDqR,EAAQ,OACbA,EAAQ,KAAOtR,EAAO,SAIf2X,EAASM,GAAS,UACzBN,EAASM,GAAS,OAAS,OAAO,OAAQ,IAAK,IAExCP,EAAcO,GAAS,UAC9BP,EAAcO,GAAS,OAAS,SAAUrG,GAAI,CAI7C,OAAO,OAAO5R,EAAW,KAAeA,EAAO,MAAM,YAAc4R,GAAE,KACpE5R,EAAO,MAAM,SAAS,MAAOO,EAAM,SAAU,EAAI,MACnD,GAID8W,GAAUA,GAAS,IAAK,MAAOrI,CAAc,GAAK,CAAE,EAAG,EACvD4I,EAAIP,EAAM,OACFO,KACPrD,EAAM0C,GAAe,KAAMI,EAAOO,CAAE,CAAE,GAAK,CAAC,EAC5CvV,GAAO2V,GAAWzD,EAAK,CAAE,EACzBwD,IAAexD,EAAK,CAAE,GAAK,IAAK,MAAO,GAAI,EAAE,KAAK,EAG5ClS,KAKNkP,EAAUvR,EAAO,MAAM,QAASqC,EAAK,GAAK,CAAC,EAG3CA,IAASpC,EAAWsR,EAAQ,aAAeA,EAAQ,WAAclP,GAGjEkP,EAAUvR,EAAO,MAAM,QAASqC,EAAK,GAAK,CAAC,EAG3CwV,EAAY7X,EAAO,OAAQ,CAC1B,KAAMqC,GACN,SAAU2V,GACV,KAAMtE,EACN,QAASpC,EACT,KAAMA,EAAQ,KACd,SAAUrR,EACV,aAAcA,GAAYD,EAAO,KAAK,MAAM,aAAa,KAAMC,CAAS,EACxE,UAAW8X,GAAW,KAAM,GAAI,CACjC,EAAGN,CAAY,GAGPK,EAAWH,EAAQtV,EAAK,KAC/ByV,EAAWH,EAAQtV,EAAK,EAAI,CAAC,EAC7ByV,EAAS,cAAgB,GAGpB,CAACvG,EAAQ,OACbA,EAAQ,MAAM,KAAMhR,EAAMmT,EAAMqE,GAAYL,CAAY,IAAM,KAEzDnX,EAAK,kBACTA,EAAK,iBAAkB8B,GAAMqV,CAAY,GAKvCnG,EAAQ,MACZA,EAAQ,IAAI,KAAMhR,EAAMsX,CAAU,EAE5BA,EAAU,QAAQ,OACvBA,EAAU,QAAQ,KAAOvG,EAAQ,OAK9BrR,EACJ6X,EAAS,OAAQA,EAAS,gBAAiB,EAAGD,CAAU,EAExDC,EAAS,KAAMD,CAAU,EAI1B7X,EAAO,MAAM,OAAQqC,EAAK,EAAI,GAGhC,EAGA,OAAQ,SAAU9B,EAAM8W,EAAO/F,EAASrR,EAAUiY,EAAc,CAE/D,IAAIxX,EAAGyX,EAAW5D,EACjBoD,EAAQC,EAAGC,EACXtG,EAASuG,EAAUzV,GAAM0V,GAAYC,GACrCC,GAAWrE,GAAS,QAASrT,CAAK,GAAKqT,GAAS,IAAKrT,CAAK,EAE3D,GAAK,GAAC0X,IAAY,EAAGN,EAASM,GAAS,SAOvC,KAFAZ,GAAUA,GAAS,IAAK,MAAOrI,CAAc,GAAK,CAAE,EAAG,EACvD4I,EAAIP,EAAM,OACFO,KAAM,CAMb,GALArD,EAAM0C,GAAe,KAAMI,EAAOO,CAAE,CAAE,GAAK,CAAC,EAC5CvV,GAAO2V,GAAWzD,EAAK,CAAE,EACzBwD,IAAexD,EAAK,CAAE,GAAK,IAAK,MAAO,GAAI,EAAE,KAAK,EAG7C,CAAClS,GAAO,CACZ,IAAMA,MAAQsV,EACb3X,EAAO,MAAM,OAAQO,EAAM8B,GAAOgV,EAAOO,CAAE,EAAGtG,EAASrR,EAAU,EAAK,EAEvE,QACD,CAUA,IARAsR,EAAUvR,EAAO,MAAM,QAASqC,EAAK,GAAK,CAAC,EAC3CA,IAASpC,EAAWsR,EAAQ,aAAeA,EAAQ,WAAclP,GACjEyV,EAAWH,EAAQtV,EAAK,GAAK,CAAC,EAC9BkS,EAAMA,EAAK,CAAE,GACZ,IAAI,OAAQ,UAAYwD,GAAW,KAAM,eAAgB,EAAI,SAAU,EAGxEI,EAAYzX,EAAIoX,EAAS,OACjBpX,KACPmX,EAAYC,EAAUpX,CAAE,GAEjBwX,GAAeF,KAAaH,EAAU,YAC1C,CAACvG,GAAWA,EAAQ,OAASuG,EAAU,QACvC,CAACtD,GAAOA,EAAI,KAAMsD,EAAU,SAAU,KACtC,CAAC5X,GAAYA,IAAa4X,EAAU,UACrC5X,IAAa,MAAQ4X,EAAU,YAChCC,EAAS,OAAQpX,EAAG,CAAE,EAEjBmX,EAAU,UACdC,EAAS,gBAELvG,EAAQ,QACZA,EAAQ,OAAO,KAAMhR,EAAMsX,CAAU,GAOnCM,GAAa,CAACL,EAAS,UACtB,CAACvG,EAAQ,UACbA,EAAQ,SAAS,KAAMhR,EAAMwX,GAAYE,GAAS,MAAO,IAAM,KAE/DjY,EAAO,YAAaO,EAAM8B,GAAM4V,GAAS,MAAO,EAGjD,OAAON,EAAQtV,EAAK,EAEtB,CAGKrC,EAAO,cAAe2X,CAAO,GACjC/D,GAAS,OAAQrT,EAAM,eAAgB,EAEzC,EAEA,SAAU,SAAU6X,EAAc,CAEjC,IAAI1Y,EAAGgB,EAAGL,EAAKyJ,EAAS+N,EAAWQ,EAClCzO,EAAO,IAAI,MAAO,UAAU,MAAO,EAGnC4N,EAAQxX,EAAO,MAAM,IAAKoY,CAAY,EAEtCN,GACClE,GAAS,IAAK,KAAM,QAAS,GAAK,OAAO,OAAQ,IAAK,GACpD4D,EAAM,IAAK,GAAK,CAAC,EACpBjG,EAAUvR,EAAO,MAAM,QAASwX,EAAM,IAAK,GAAK,CAAC,EAKlD,IAFA5N,EAAM,CAAE,EAAI4N,EAEN9X,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAClCkK,EAAMlK,CAAE,EAAI,UAAWA,CAAE,EAM1B,GAHA8X,EAAM,eAAiB,KAGlB,EAAAjG,EAAQ,aAAeA,EAAQ,YAAY,KAAM,KAAMiG,CAAM,IAAM,IASxE,KAJAa,EAAerY,EAAO,MAAM,SAAS,KAAM,KAAMwX,EAAOM,CAAS,EAGjEpY,EAAI,GACMoK,EAAUuO,EAAc3Y,GAAI,IAAO,CAAC8X,EAAM,qBAAqB,GAIxE,IAHAA,EAAM,cAAgB1N,EAAQ,KAE9BpJ,EAAI,GACMmX,EAAY/N,EAAQ,SAAUpJ,GAAI,IAC3C,CAAC8W,EAAM,8BAA8B,IAIhC,CAACA,EAAM,YAAcK,EAAU,YAAc,IACjDL,EAAM,WAAW,KAAMK,EAAU,SAAU,KAE3CL,EAAM,UAAYK,EAClBL,EAAM,KAAOK,EAAU,KAEvBxX,IAAUL,EAAO,MAAM,QAAS6X,EAAU,QAAS,GAAK,CAAC,GAAI,QAC5DA,EAAU,SAAU,MAAO/N,EAAQ,KAAMF,CAAK,EAE1CvJ,IAAQ,SACLmX,EAAM,OAASnX,KAAU,KAC/BmX,EAAM,eAAe,EACrBA,EAAM,gBAAgB,IAQ3B,OAAKjG,EAAQ,cACZA,EAAQ,aAAa,KAAM,KAAMiG,CAAM,EAGjCA,EAAM,OACd,EAEA,SAAU,SAAUA,EAAOM,EAAW,CACrC,IAAIpY,EAAGmY,EAAW1U,EAAKmV,EAAiBC,EACvCF,EAAe,CAAC,EAChBG,EAAgBV,EAAS,cACzBhJ,EAAM0I,EAAM,OAGb,GAAKgB,GAIJ1J,EAAI,UAOJ,EAAG0I,EAAM,OAAS,SAAWA,EAAM,QAAU,IAE7C,KAAQ1I,IAAQ,KAAMA,EAAMA,EAAI,YAAc,KAI7C,GAAKA,EAAI,WAAa,GAAK,EAAG0I,EAAM,OAAS,SAAW1I,EAAI,WAAa,IAAS,CAGjF,IAFAwJ,EAAkB,CAAC,EACnBC,EAAmB,CAAC,EACd7Y,EAAI,EAAGA,EAAI8Y,EAAe9Y,IAC/BmY,EAAYC,EAAUpY,CAAE,EAGxByD,EAAM0U,EAAU,SAAW,IAEtBU,EAAkBpV,CAAI,IAAM,SAChCoV,EAAkBpV,CAAI,EAAI0U,EAAU,aACnC7X,EAAQmD,EAAK,IAAK,EAAE,MAAO2L,CAAI,EAAI,GACnC9O,EAAO,KAAMmD,EAAK,KAAM,KAAM,CAAE2L,CAAI,CAAE,EAAE,QAErCyJ,EAAkBpV,CAAI,GAC1BmV,EAAgB,KAAMT,CAAU,EAG7BS,EAAgB,QACpBD,EAAa,KAAM,CAAE,KAAMvJ,EAAK,SAAUwJ,CAAgB,CAAE,CAE9D,EAKF,OAAAxJ,EAAM,KACD0J,EAAgBV,EAAS,QAC7BO,EAAa,KAAM,CAAE,KAAMvJ,EAAK,SAAUgJ,EAAS,MAAOU,CAAc,CAAE,CAAE,EAGtEH,CACR,EAEA,QAAS,SAAUzX,EAAM6X,EAAO,CAC/B,OAAO,eAAgBzY,EAAO,MAAM,UAAWY,EAAM,CACpD,WAAY,GACZ,aAAc,GAEd,IAAK3B,EAAYwZ,CAAK,EACrB,UAAW,CACV,GAAK,KAAK,cACT,OAAOA,EAAM,KAAK,aAAc,CAElC,EACA,UAAW,CACV,GAAK,KAAK,cACT,OAAO,KAAK,cAAe7X,CAAK,CAElC,EAED,IAAK,SAAUuB,EAAQ,CACtB,OAAO,eAAgB,KAAMvB,EAAM,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOuB,CACR,CAAE,CACH,CACD,CAAE,CACH,EAEA,IAAK,SAAUuW,EAAgB,CAC9B,OAAOA,EAAe1Y,EAAO,OAAQ,EACpC0Y,EACA,IAAI1Y,EAAO,MAAO0Y,CAAc,CAClC,EAEA,QAAS,CACR,KAAM,CAGL,SAAU,EACX,EACA,MAAO,CAGN,MAAO,SAAUhF,EAAO,CAIvB,IAAIxM,EAAK,MAAQwM,EAGjB,OAAKsC,GAAe,KAAM9O,EAAG,IAAK,GACjCA,EAAG,OAAS5E,EAAU4E,EAAI,OAAQ,GAGlCyR,GAAgBzR,EAAI,QAAS,EAAK,EAI5B,EACR,EACA,QAAS,SAAUwM,EAAO,CAIzB,IAAIxM,EAAK,MAAQwM,EAGjB,OAAKsC,GAAe,KAAM9O,EAAG,IAAK,GACjCA,EAAG,OAAS5E,EAAU4E,EAAI,OAAQ,GAElCyR,GAAgBzR,EAAI,OAAQ,EAItB,EACR,EAIA,SAAU,SAAUsQ,EAAQ,CAC3B,IAAIvW,EAASuW,EAAM,OACnB,OAAOxB,GAAe,KAAM/U,EAAO,IAAK,GACvCA,EAAO,OAASqB,EAAUrB,EAAQ,OAAQ,GAC1C2S,GAAS,IAAK3S,EAAQ,OAAQ,GAC9BqB,EAAUrB,EAAQ,GAAI,CACxB,CACD,EAEA,aAAc,CACb,aAAc,SAAUuW,EAAQ,CAI1BA,EAAM,SAAW,QAAaA,EAAM,gBACxCA,EAAM,cAAc,YAAcA,EAAM,OAE1C,CACD,CACD,CACD,EAMA,SAASmB,GAAgBzR,EAAI7E,EAAMuW,EAAU,CAG5C,GAAK,CAACA,EAAU,CACVhF,GAAS,IAAK1M,EAAI7E,CAAK,IAAM,QACjCrC,EAAO,MAAM,IAAKkH,EAAI7E,EAAM6U,EAAW,EAExC,MACD,CAGAtD,GAAS,IAAK1M,EAAI7E,EAAM,EAAM,EAC9BrC,EAAO,MAAM,IAAKkH,EAAI7E,EAAM,CAC3B,UAAW,GACX,QAAS,SAAUmV,EAAQ,CAC1B,IAAI7O,EACHkQ,EAAQjF,GAAS,IAAK,KAAMvR,CAAK,EAElC,GAAOmV,EAAM,UAAY,GAAO,KAAMnV,CAAK,GAG1C,GAAMwW,GA4BQ7Y,EAAO,MAAM,QAASqC,CAAK,GAAK,CAAC,GAAI,cAClDmV,EAAM,gBAAgB,UAxBtBqB,EAAQva,EAAM,KAAM,SAAU,EAC9BsV,GAAS,IAAK,KAAMvR,EAAMwW,CAAM,EAGhC,KAAMxW,CAAK,EAAE,EACbsG,EAASiL,GAAS,IAAK,KAAMvR,CAAK,EAClCuR,GAAS,IAAK,KAAMvR,EAAM,EAAM,EAE3BwW,IAAUlQ,EAGd,OAAA6O,EAAM,yBAAyB,EAC/BA,EAAM,eAAe,EAEd7O,OAeEkQ,IAGXjF,GAAS,IAAK,KAAMvR,EAAMrC,EAAO,MAAM,QACtC6Y,EAAO,CAAE,EACTA,EAAM,MAAO,CAAE,EACf,IACD,CAAE,EAUFrB,EAAM,gBAAgB,EACtBA,EAAM,8BAAgCN,GAExC,CACD,CAAE,CACH,CAEAlX,EAAO,YAAc,SAAUO,EAAM8B,EAAMyW,EAAS,CAG9CvY,EAAK,qBACTA,EAAK,oBAAqB8B,EAAMyW,CAAO,CAEzC,EAEA9Y,EAAO,MAAQ,SAAUa,EAAKkY,EAAQ,CAGrC,GAAK,EAAG,gBAAgB/Y,EAAO,OAC9B,OAAO,IAAIA,EAAO,MAAOa,EAAKkY,CAAM,EAIhClY,GAAOA,EAAI,MACf,KAAK,cAAgBA,EACrB,KAAK,KAAOA,EAAI,KAIhB,KAAK,mBAAqBA,EAAI,kBAC5BA,EAAI,mBAAqB,QAGzBA,EAAI,cAAgB,GACrBqW,GACAC,GAKD,KAAK,OAAWtW,EAAI,QAAUA,EAAI,OAAO,WAAa,EACrDA,EAAI,OAAO,WACXA,EAAI,OAEL,KAAK,cAAgBA,EAAI,cACzB,KAAK,cAAgBA,EAAI,eAIzB,KAAK,KAAOA,EAIRkY,GACJ/Y,EAAO,OAAQ,KAAM+Y,CAAM,EAI5B,KAAK,UAAYlY,GAAOA,EAAI,WAAa,KAAK,IAAI,EAGlD,KAAMb,EAAO,OAAQ,EAAI,EAC1B,EAIAA,EAAO,MAAM,UAAY,CACxB,YAAaA,EAAO,MACpB,mBAAoBmX,GACpB,qBAAsBA,GACtB,8BAA+BA,GAC/B,YAAa,GAEb,eAAgB,UAAW,CAC1B,IAAIvF,EAAI,KAAK,cAEb,KAAK,mBAAqBsF,GAErBtF,GAAK,CAAC,KAAK,aACfA,EAAE,eAAe,CAEnB,EACA,gBAAiB,UAAW,CAC3B,IAAIA,EAAI,KAAK,cAEb,KAAK,qBAAuBsF,GAEvBtF,GAAK,CAAC,KAAK,aACfA,EAAE,gBAAgB,CAEpB,EACA,yBAA0B,UAAW,CACpC,IAAIA,EAAI,KAAK,cAEb,KAAK,8BAAgCsF,GAEhCtF,GAAK,CAAC,KAAK,aACfA,EAAE,yBAAyB,EAG5B,KAAK,gBAAgB,CACtB,CACD,EAGA5R,EAAO,KAAM,CACZ,OAAQ,GACR,QAAS,GACT,WAAY,GACZ,eAAgB,GAChB,QAAS,GACT,OAAQ,GACR,WAAY,GACZ,QAAS,GACT,MAAO,GACP,MAAO,GACP,SAAU,GACV,KAAM,GACN,KAAQ,GACR,KAAM,GACN,SAAU,GACV,IAAK,GACL,QAAS,GACT,OAAQ,GACR,QAAS,GACT,QAAS,GACT,QAAS,GACT,QAAS,GACT,QAAS,GACT,UAAW,GACX,YAAa,GACb,QAAS,GACT,QAAS,GACT,cAAe,GACf,UAAW,GACX,QAAS,GACT,MAAO,EACR,EAAGA,EAAO,MAAM,OAAQ,EAExBA,EAAO,KAAM,CAAE,MAAO,UAAW,KAAM,UAAW,EAAG,SAAUqC,EAAM2W,EAAe,CAEnF,SAASC,EAAoBb,EAAc,CAC1C,GAAKhZ,EAAS,aAAe,CAS5B,IAAI0Z,EAASlF,GAAS,IAAK,KAAM,QAAS,EACzC4D,EAAQxX,EAAO,MAAM,IAAKoY,CAAY,EACvCZ,EAAM,KAAOY,EAAY,OAAS,UAAY,QAAU,OACxDZ,EAAM,YAAc,GAGpBsB,EAAQV,CAAY,EAMfZ,EAAM,SAAWA,EAAM,eAK3BsB,EAAQtB,CAAM,CAEhB,MAICxX,EAAO,MAAM,SAAUgZ,EAAcZ,EAAY,OAChDpY,EAAO,MAAM,IAAKoY,CAAY,CAAE,CAEnC,CAEApY,EAAO,MAAM,QAASqC,CAAK,EAAI,CAG9B,MAAO,UAAW,CAEjB,IAAI6W,EAOJ,GAFAP,GAAgB,KAAMtW,EAAM,EAAK,EAE5BjD,EAAS,aAMb8Z,EAAWtF,GAAS,IAAK,KAAMoF,CAAa,EACtCE,GACL,KAAK,iBAAkBF,EAAcC,CAAmB,EAEzDrF,GAAS,IAAK,KAAMoF,GAAgBE,GAAY,GAAM,CAAE,MAIxD,OAAO,EAET,EACA,QAAS,UAAW,CAGnB,OAAAP,GAAgB,KAAMtW,CAAK,EAGpB,EACR,EAEA,SAAU,UAAW,CACpB,IAAI6W,EAEJ,GAAK9Z,EAAS,aACb8Z,EAAWtF,GAAS,IAAK,KAAMoF,CAAa,EAAI,EAC1CE,EAILtF,GAAS,IAAK,KAAMoF,EAAcE,CAAS,GAH3C,KAAK,oBAAqBF,EAAcC,CAAmB,EAC3DrF,GAAS,OAAQ,KAAMoF,CAAa,OAOrC,OAAO,EAET,EAIA,SAAU,SAAUxB,EAAQ,CAC3B,OAAO5D,GAAS,IAAK4D,EAAM,OAAQnV,CAAK,CACzC,EAEA,aAAc2W,CACf,EAcAhZ,EAAO,MAAM,QAASgZ,CAAa,EAAI,CACtC,MAAO,UAAW,CAIjB,IAAIvZ,EAAM,KAAK,eAAiB,KAAK,UAAY,KAChD0Z,EAAa/Z,EAAS,aAAe,KAAOK,EAC5CyZ,EAAWtF,GAAS,IAAKuF,EAAYH,CAAa,EAM7CE,IACA9Z,EAAS,aACb,KAAK,iBAAkB4Z,EAAcC,CAAmB,EAExDxZ,EAAI,iBAAkB4C,EAAM4W,EAAoB,EAAK,GAGvDrF,GAAS,IAAKuF,EAAYH,GAAgBE,GAAY,GAAM,CAAE,CAC/D,EACA,SAAU,UAAW,CACpB,IAAIzZ,EAAM,KAAK,eAAiB,KAAK,UAAY,KAChD0Z,EAAa/Z,EAAS,aAAe,KAAOK,EAC5CyZ,EAAWtF,GAAS,IAAKuF,EAAYH,CAAa,EAAI,EAEjDE,EAQLtF,GAAS,IAAKuF,EAAYH,EAAcE,CAAS,GAP5C9Z,EAAS,aACb,KAAK,oBAAqB4Z,EAAcC,CAAmB,EAE3DxZ,EAAI,oBAAqB4C,EAAM4W,EAAoB,EAAK,EAEzDrF,GAAS,OAAQuF,EAAYH,CAAa,EAI5C,CACD,CACD,CAAE,EAUFhZ,EAAO,KAAM,CACZ,WAAY,YACZ,WAAY,WACZ,aAAc,cACd,aAAc,YACf,EAAG,SAAUoZ,EAAMC,EAAM,CACxBrZ,EAAO,MAAM,QAASoZ,CAAK,EAAI,CAC9B,aAAcC,EACd,SAAUA,EAEV,OAAQ,SAAU7B,EAAQ,CACzB,IAAInX,EACHY,EAAS,KACTqY,EAAU9B,EAAM,cAChBK,EAAYL,EAAM,UAInB,OAAK,CAAC8B,GAAaA,IAAYrY,GAAU,CAACjB,EAAO,SAAUiB,EAAQqY,CAAQ,KAC1E9B,EAAM,KAAOK,EAAU,SACvBxX,EAAMwX,EAAU,QAAQ,MAAO,KAAM,SAAU,EAC/CL,EAAM,KAAO6B,GAEPhZ,CACR,CACD,CACD,CAAE,EAEFL,EAAO,GAAG,OAAQ,CAEjB,GAAI,SAAUqX,EAAOpX,EAAUyT,EAAM1M,EAAK,CACzC,OAAOoQ,GAAI,KAAMC,EAAOpX,EAAUyT,EAAM1M,CAAG,CAC5C,EACA,IAAK,SAAUqQ,EAAOpX,EAAUyT,EAAM1M,EAAK,CAC1C,OAAOoQ,GAAI,KAAMC,EAAOpX,EAAUyT,EAAM1M,EAAI,CAAE,CAC/C,EACA,IAAK,SAAUqQ,EAAOpX,EAAU+G,EAAK,CACpC,IAAI6Q,EAAWxV,EACf,GAAKgV,GAASA,EAAM,gBAAkBA,EAAM,UAG3C,OAAAQ,EAAYR,EAAM,UAClBrX,EAAQqX,EAAM,cAAe,EAAE,IAC9BQ,EAAU,UACTA,EAAU,SAAW,IAAMA,EAAU,UACrCA,EAAU,SACXA,EAAU,SACVA,EAAU,OACX,EACO,KAER,GAAK,OAAOR,GAAU,SAAW,CAGhC,IAAMhV,KAAQgV,EACb,KAAK,IAAKhV,EAAMpC,EAAUoX,EAAOhV,CAAK,CAAE,EAEzC,OAAO,IACR,CACA,OAAKpC,IAAa,IAAS,OAAOA,GAAa,cAG9C+G,EAAK/G,EACLA,EAAW,QAEP+G,IAAO,KACXA,EAAKmQ,IAEC,KAAK,KAAM,UAAW,CAC5BnX,EAAO,MAAM,OAAQ,KAAMqX,EAAOrQ,EAAI/G,CAAS,CAChD,CAAE,CACH,CACD,CAAE,EAGF,IAKCsZ,GAAe,wBAGfC,GAAW,oCAEXC,GAAe,6BAGhB,SAASC,GAAoBnZ,EAAMoZ,EAAU,CAC5C,OAAKrX,EAAU/B,EAAM,OAAQ,GAC5B+B,EAAUqX,EAAQ,WAAa,GAAKA,EAAUA,EAAQ,WAAY,IAAK,GAEhE3Z,EAAQO,CAAK,EAAE,SAAU,OAAQ,EAAG,CAAE,GAAKA,CAIpD,CAGA,SAASqZ,GAAerZ,EAAO,CAC9B,OAAAA,EAAK,MAASA,EAAK,aAAc,MAAO,IAAM,MAAS,IAAMA,EAAK,KAC3DA,CACR,CACA,SAASsZ,GAAetZ,EAAO,CAC9B,OAAOA,EAAK,MAAQ,IAAK,MAAO,EAAG,CAAE,IAAM,QAC1CA,EAAK,KAAOA,EAAK,KAAK,MAAO,CAAE,EAE/BA,EAAK,gBAAiB,MAAO,EAGvBA,CACR,CAEA,SAASuZ,GAAgBjZ,EAAKkZ,EAAO,CACpC,IAAIra,EAAGkP,EAAGvM,EAAM2X,EAAUC,EAAUC,EAAUvC,EAE9C,GAAKoC,EAAK,WAAa,EAKvB,IAAKnG,GAAS,QAAS/S,CAAI,IAC1BmZ,EAAWpG,GAAS,IAAK/S,CAAI,EAC7B8W,EAASqC,EAAS,OAEbrC,GAAS,CACb/D,GAAS,OAAQmG,EAAM,eAAgB,EAEvC,IAAM1X,KAAQsV,EACb,IAAMjY,EAAI,EAAGkP,EAAI+I,EAAQtV,CAAK,EAAE,OAAQ3C,EAAIkP,EAAGlP,IAC9CM,EAAO,MAAM,IAAK+Z,EAAM1X,EAAMsV,EAAQtV,CAAK,EAAG3C,CAAE,CAAE,CAGrD,CAIImU,GAAS,QAAShT,CAAI,IAC1BoZ,EAAWpG,GAAS,OAAQhT,CAAI,EAChCqZ,EAAWla,EAAO,OAAQ,CAAC,EAAGia,CAAS,EAEvCpG,GAAS,IAAKkG,EAAMG,CAAS,GAE/B,CAGA,SAASC,GAAUtZ,EAAKkZ,EAAO,CAC9B,IAAIzX,EAAWyX,EAAK,SAAS,YAAY,EAGpCzX,IAAa,SAAW0T,GAAe,KAAMnV,EAAI,IAAK,EAC1DkZ,EAAK,QAAUlZ,EAAI,SAGRyB,IAAa,SAAWA,IAAa,cAChDyX,EAAK,aAAelZ,EAAI,aAE1B,CAEA,SAASuZ,GAAUC,EAAYzQ,EAAMtJ,EAAUuW,EAAU,CAGxDjN,EAAOrL,EAAMqL,CAAK,EAElB,IAAIuM,EAAUvU,EAAO+U,EAAS2D,EAAY9a,EAAMC,EAC/CC,EAAI,EACJkP,EAAIyL,EAAW,OACfE,EAAW3L,EAAI,EACfzM,GAAQyH,EAAM,CAAE,EAChB4Q,GAAkBvb,EAAYkD,EAAM,EAGrC,GAAKqY,IACD5L,EAAI,GAAK,OAAOzM,IAAU,UAC3B,CAACnD,EAAQ,YAAcwa,GAAS,KAAMrX,EAAM,EAC9C,OAAOkY,EAAW,KAAM,SAAUvK,GAAQ,CACzC,IAAIzB,GAAOgM,EAAW,GAAIvK,EAAM,EAC3B0K,KACJ5Q,EAAM,CAAE,EAAIzH,GAAM,KAAM,KAAM2N,GAAOzB,GAAK,KAAK,CAAE,GAElD+L,GAAU/L,GAAMzE,EAAMtJ,EAAUuW,CAAQ,CACzC,CAAE,EAGH,GAAKjI,IACJuH,EAAWO,GAAe9M,EAAMyQ,EAAY,CAAE,EAAE,cAAe,GAAOA,EAAYxD,CAAQ,EAC1FjV,EAAQuU,EAAS,WAEZA,EAAS,WAAW,SAAW,IACnCA,EAAWvU,GAIPA,GAASiV,GAAU,CAOvB,IANAF,EAAU3W,EAAO,IAAKsW,GAAQH,EAAU,QAAS,EAAGyD,EAAc,EAClEU,EAAa3D,EAAQ,OAKbjX,EAAIkP,EAAGlP,IACdF,EAAO2W,EAEFzW,IAAM6a,IACV/a,EAAOQ,EAAO,MAAOR,EAAM,GAAM,EAAK,EAGjC8a,GAIJta,EAAO,MAAO2W,EAASL,GAAQ9W,EAAM,QAAS,CAAE,GAIlDc,EAAS,KAAM+Z,EAAY3a,CAAE,EAAGF,EAAME,CAAE,EAGzC,GAAK4a,EAOJ,IANA7a,EAAMkX,EAASA,EAAQ,OAAS,CAAE,EAAE,cAGpC3W,EAAO,IAAK2W,EAASkD,EAAc,EAG7Bna,EAAI,EAAGA,EAAI4a,EAAY5a,IAC5BF,EAAOmX,EAASjX,CAAE,EACbwW,GAAY,KAAM1W,EAAK,MAAQ,EAAG,GACtC,CAACoU,GAAS,OAAQpU,EAAM,YAAa,GACrCQ,EAAO,SAAUP,EAAKD,CAAK,IAEtBA,EAAK,MAASA,EAAK,MAAQ,IAAK,YAAY,IAAO,SAGlDQ,EAAO,UAAY,CAACR,EAAK,UAC7BQ,EAAO,SAAUR,EAAK,IAAK,CAC1B,MAAOA,EAAK,OAASA,EAAK,aAAc,OAAQ,CACjD,EAAGC,CAAI,EASRH,EAASE,EAAK,YAAY,QAASia,GAAc,EAAG,EAAGja,EAAMC,CAAI,EAKtE,CAGD,OAAO4a,CACR,CAEA,SAASI,GAAQla,EAAMN,EAAUya,EAAW,CAK3C,QAJIlb,EACHwX,EAAQ/W,EAAWD,EAAO,OAAQC,EAAUM,CAAK,EAAIA,EACrDb,EAAI,GAEKF,EAAOwX,EAAOtX,CAAE,IAAO,KAAMA,IACjC,CAACgb,GAAYlb,EAAK,WAAa,GACnCQ,EAAO,UAAWsW,GAAQ9W,CAAK,CAAE,EAG7BA,EAAK,aACJkb,GAAY7F,GAAYrV,CAAK,GACjC+W,GAAeD,GAAQ9W,EAAM,QAAS,CAAE,EAEzCA,EAAK,WAAW,YAAaA,CAAK,GAIpC,OAAOe,CACR,CAEAP,EAAO,OAAQ,CACd,cAAe,SAAU2a,EAAO,CAC/B,OAAOA,CACR,EAEA,MAAO,SAAUpa,EAAMqa,EAAeC,EAAoB,CACzD,IAAInb,EAAGkP,EAAGkM,EAAaC,EACtB/Z,EAAQT,EAAK,UAAW,EAAK,EAC7Bya,EAASnG,GAAYtU,CAAK,EAG3B,GAAK,CAACvB,EAAQ,iBAAoBuB,EAAK,WAAa,GAAKA,EAAK,WAAa,KACzE,CAACP,EAAO,SAAUO,CAAK,EAOxB,IAHAwa,EAAezE,GAAQtV,CAAM,EAC7B8Z,EAAcxE,GAAQ/V,CAAK,EAErBb,EAAI,EAAGkP,EAAIkM,EAAY,OAAQpb,EAAIkP,EAAGlP,IAC3Cya,GAAUW,EAAapb,CAAE,EAAGqb,EAAcrb,CAAE,CAAE,EAKhD,GAAKkb,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAexE,GAAQ/V,CAAK,EAC1Cwa,EAAeA,GAAgBzE,GAAQtV,CAAM,EAEvCtB,EAAI,EAAGkP,EAAIkM,EAAY,OAAQpb,EAAIkP,EAAGlP,IAC3Coa,GAAgBgB,EAAapb,CAAE,EAAGqb,EAAcrb,CAAE,CAAE,OAGrDoa,GAAgBvZ,EAAMS,CAAM,EAK9B,OAAA+Z,EAAezE,GAAQtV,EAAO,QAAS,EAClC+Z,EAAa,OAAS,GAC1BxE,GAAewE,EAAc,CAACC,GAAU1E,GAAQ/V,EAAM,QAAS,CAAE,EAI3DS,CACR,EAEA,UAAW,SAAUZ,EAAQ,CAK5B,QAJIsT,EAAMnT,EAAM8B,EACfkP,EAAUvR,EAAO,MAAM,QACvBN,EAAI,GAEKa,EAAOH,EAAOV,CAAE,KAAQ,OAAWA,IAC5C,GAAK6T,GAAYhT,CAAK,EAAI,CACzB,GAAOmT,EAAOnT,EAAMqT,GAAS,OAAQ,EAAM,CAC1C,GAAKF,EAAK,OACT,IAAMrR,KAAQqR,EAAK,OACbnC,EAASlP,CAAK,EAClBrC,EAAO,MAAM,OAAQO,EAAM8B,CAAK,EAIhCrC,EAAO,YAAaO,EAAM8B,EAAMqR,EAAK,MAAO,EAO/CnT,EAAMqT,GAAS,OAAQ,EAAI,MAC5B,CACKrT,EAAMsT,GAAS,OAAQ,IAI3BtT,EAAMsT,GAAS,OAAQ,EAAI,OAE7B,CAEF,CACD,CAAE,EAEF7T,EAAO,GAAG,OAAQ,CACjB,OAAQ,SAAUC,EAAW,CAC5B,OAAOwa,GAAQ,KAAMxa,EAAU,EAAK,CACrC,EAEA,OAAQ,SAAUA,EAAW,CAC5B,OAAOwa,GAAQ,KAAMxa,CAAS,CAC/B,EAEA,KAAM,SAAUkC,EAAQ,CACvB,OAAOuQ,GAAQ,KAAM,SAAUvQ,EAAQ,CACtC,OAAOA,IAAU,OAChBnC,EAAO,KAAM,IAAK,EAClB,KAAK,MAAM,EAAE,KAAM,UAAW,EACxB,KAAK,WAAa,GAAK,KAAK,WAAa,IAAM,KAAK,WAAa,KACrE,KAAK,YAAcmC,EAErB,CAAE,CACJ,EAAG,KAAMA,EAAO,UAAU,MAAO,CAClC,EAEA,OAAQ,UAAW,CAClB,OAAOiY,GAAU,KAAM,UAAW,SAAU7Z,EAAO,CAClD,GAAK,KAAK,WAAa,GAAK,KAAK,WAAa,IAAM,KAAK,WAAa,EAAI,CACzE,IAAIU,EAASyY,GAAoB,KAAMnZ,CAAK,EAC5CU,EAAO,YAAaV,CAAK,CAC1B,CACD,CAAE,CACH,EAEA,QAAS,UAAW,CACnB,OAAO6Z,GAAU,KAAM,UAAW,SAAU7Z,EAAO,CAClD,GAAK,KAAK,WAAa,GAAK,KAAK,WAAa,IAAM,KAAK,WAAa,EAAI,CACzE,IAAIU,EAASyY,GAAoB,KAAMnZ,CAAK,EAC5CU,EAAO,aAAcV,EAAMU,EAAO,UAAW,CAC9C,CACD,CAAE,CACH,EAEA,OAAQ,UAAW,CAClB,OAAOmZ,GAAU,KAAM,UAAW,SAAU7Z,EAAO,CAC7C,KAAK,YACT,KAAK,WAAW,aAAcA,EAAM,IAAK,CAE3C,CAAE,CACH,EAEA,MAAO,UAAW,CACjB,OAAO6Z,GAAU,KAAM,UAAW,SAAU7Z,EAAO,CAC7C,KAAK,YACT,KAAK,WAAW,aAAcA,EAAM,KAAK,WAAY,CAEvD,CAAE,CACH,EAEA,MAAO,UAAW,CAIjB,QAHIA,EACHb,EAAI,GAEKa,EAAO,KAAMb,CAAE,IAAO,KAAMA,IAChCa,EAAK,WAAa,IAGtBP,EAAO,UAAWsW,GAAQ/V,EAAM,EAAM,CAAE,EAGxCA,EAAK,YAAc,IAIrB,OAAO,IACR,EAEA,MAAO,SAAUqa,EAAeC,EAAoB,CACnD,OAAAD,EAAgBA,GAAwB,GACxCC,EAAoBA,GAA4BD,EAEzC,KAAK,IAAK,UAAW,CAC3B,OAAO5a,EAAO,MAAO,KAAM4a,EAAeC,CAAkB,CAC7D,CAAE,CACH,EAEA,KAAM,SAAU1Y,EAAQ,CACvB,OAAOuQ,GAAQ,KAAM,SAAUvQ,EAAQ,CACtC,IAAI5B,EAAO,KAAM,CAAE,GAAK,CAAC,EACxBb,EAAI,EACJkP,EAAI,KAAK,OAEV,GAAKzM,IAAU,QAAa5B,EAAK,WAAa,EAC7C,OAAOA,EAAK,UAIb,GAAK,OAAO4B,GAAU,UAAY,CAACoX,GAAa,KAAMpX,CAAM,GAC3D,CAACkU,IAAWJ,GAAS,KAAM9T,CAAM,GAAK,CAAE,GAAI,EAAG,GAAK,CAAE,EAAE,YAAY,CAAE,EAAI,CAE1EA,EAAQnC,EAAO,cAAemC,CAAM,EAEpC,GAAI,CACH,KAAQzC,EAAIkP,EAAGlP,IACda,EAAO,KAAMb,CAAE,GAAK,CAAC,EAGhBa,EAAK,WAAa,IACtBP,EAAO,UAAWsW,GAAQ/V,EAAM,EAAM,CAAE,EACxCA,EAAK,UAAY4B,GAInB5B,EAAO,CAGR,MAAc,CAAC,CAChB,CAEKA,GACJ,KAAK,MAAM,EAAE,OAAQ4B,CAAM,CAE7B,EAAG,KAAMA,EAAO,UAAU,MAAO,CAClC,EAEA,YAAa,UAAW,CACvB,IAAI0U,EAAU,CAAC,EAGf,OAAOuD,GAAU,KAAM,UAAW,SAAU7Z,EAAO,CAClD,IAAIiJ,EAAS,KAAK,WAEbxJ,EAAO,QAAS,KAAM6W,CAAQ,EAAI,IACtC7W,EAAO,UAAWsW,GAAQ,IAAK,CAAE,EAC5B9M,GACJA,EAAO,aAAcjJ,EAAM,IAAK,EAKnC,EAAGsW,CAAQ,CACZ,CACD,CAAE,EAEF7W,EAAO,KAAM,CACZ,SAAU,SACV,UAAW,UACX,aAAc,SACd,YAAa,QACb,WAAY,aACb,EAAG,SAAUY,EAAMqa,EAAW,CAC7Bjb,EAAO,GAAIY,CAAK,EAAI,SAAUX,EAAW,CAOxC,QANIG,EACHC,EAAM,CAAC,EACP6a,EAASlb,EAAQC,CAAS,EAC1B6I,EAAOoS,EAAO,OAAS,EACvBxb,EAAI,EAEGA,GAAKoJ,EAAMpJ,IAClBU,EAAQV,IAAMoJ,EAAO,KAAO,KAAK,MAAO,EAAK,EAC7C9I,EAAQkb,EAAQxb,CAAE,CAAE,EAAGub,CAAS,EAAG7a,CAAM,EAIzC3B,EAAK,MAAO4B,EAAKD,EAAM,IAAI,CAAE,EAG9B,OAAO,KAAK,UAAWC,CAAI,CAC5B,CACD,CAAE,EACF,IAAI8a,GAAY,IAAI,OAAQ,KAAOzG,GAAO,kBAAmB,GAAI,EAE7D0G,GAAc,MAGdC,GAAY,SAAU9a,EAAO,CAK/B,IAAI+a,EAAO/a,EAAK,cAAc,YAE9B,OAAK,CAAC+a,GAAQ,CAACA,EAAK,UACnBA,EAAOpd,GAGDod,EAAK,iBAAkB/a,CAAK,CACpC,EAEGgb,GAAO,SAAUhb,EAAMI,EAASL,EAAW,CAC9C,IAAID,EAAKO,EACR4a,EAAM,CAAC,EAGR,IAAM5a,KAAQD,EACb6a,EAAK5a,CAAK,EAAIL,EAAK,MAAOK,CAAK,EAC/BL,EAAK,MAAOK,CAAK,EAAID,EAASC,CAAK,EAGpCP,EAAMC,EAAS,KAAMC,CAAK,EAG1B,IAAMK,KAAQD,EACbJ,EAAK,MAAOK,CAAK,EAAI4a,EAAK5a,CAAK,EAGhC,OAAOP,CACR,EAGIob,GAAY,IAAI,OAAQ7G,GAAU,KAAM,GAAI,EAAG,GAAI,GAIrD,UAAW,CAIZ,SAAS8G,GAAoB,CAG5B,GAAMtF,EAIN,CAAAuF,EAAU,MAAM,QAAU,+EAE1BvF,EAAI,MAAM,QACT,4HAGD1S,GAAgB,YAAaiY,CAAU,EAAE,YAAavF,CAAI,EAE1D,IAAIwF,EAAW1d,EAAO,iBAAkBkY,CAAI,EAC5CyF,EAAmBD,EAAS,MAAQ,KAGpCE,EAAwBC,EAAoBH,EAAS,UAAW,IAAM,GAItExF,EAAI,MAAM,MAAQ,MAClB4F,EAAoBD,EAAoBH,EAAS,KAAM,IAAM,GAI7DK,EAAuBF,EAAoBH,EAAS,KAAM,IAAM,GAMhExF,EAAI,MAAM,SAAW,WACrB8F,EAAmBH,EAAoB3F,EAAI,YAAc,CAAE,IAAM,GAEjE1S,GAAgB,YAAaiY,CAAU,EAIvCvF,EAAM,KACP,CAEA,SAAS2F,EAAoBI,EAAU,CACtC,OAAO,KAAK,MAAO,WAAYA,CAAQ,CAAE,CAC1C,CAEA,IAAIN,EAAkBI,EAAsBC,EAAkBF,EAC7DI,EAAyBN,EACzBH,EAAYvc,EAAS,cAAe,KAAM,EAC1CgX,EAAMhX,EAAS,cAAe,KAAM,EAG/BgX,EAAI,QAMVA,EAAI,MAAM,eAAiB,cAC3BA,EAAI,UAAW,EAAK,EAAE,MAAM,eAAiB,GAC7CpX,EAAQ,gBAAkBoX,EAAI,MAAM,iBAAmB,cAEvDpW,EAAO,OAAQhB,EAAS,CACvB,kBAAmB,UAAW,CAC7B,OAAA0c,EAAkB,EACXO,CACR,EACA,eAAgB,UAAW,CAC1B,OAAAP,EAAkB,EACXM,CACR,EACA,cAAe,UAAW,CACzB,OAAAN,EAAkB,EACXG,CACR,EACA,mBAAoB,UAAW,CAC9B,OAAAH,EAAkB,EACXI,CACR,EACA,cAAe,UAAW,CACzB,OAAAJ,EAAkB,EACXQ,CACR,EAWA,qBAAsB,UAAW,CAChC,IAAIG,EAAOC,EAAIC,EAASC,GACxB,OAAKJ,GAA2B,OAC/BC,EAAQjd,EAAS,cAAe,OAAQ,EACxCkd,EAAKld,EAAS,cAAe,IAAK,EAClCmd,EAAUnd,EAAS,cAAe,KAAM,EAExCid,EAAM,MAAM,QAAU,2DACtBC,EAAG,MAAM,QAAU,0CAKnBA,EAAG,MAAM,OAAS,MAClBC,EAAQ,MAAM,OAAS,MAQvBA,EAAQ,MAAM,QAAU,QAExB7Y,GACE,YAAa2Y,CAAM,EACnB,YAAaC,CAAG,EAChB,YAAaC,CAAQ,EAEvBC,GAAUte,EAAO,iBAAkBoe,CAAG,EACtCF,EAA4B,SAAUI,GAAQ,OAAQ,EAAG,EACxD,SAAUA,GAAQ,eAAgB,EAAG,EACrC,SAAUA,GAAQ,kBAAmB,EAAG,IAAQF,EAAG,aAEpD5Y,GAAgB,YAAa2Y,CAAM,GAE7BD,CACR,CACD,CAAE,EACH,GAAI,EAGJ,SAASK,GAAQlc,EAAMK,EAAM8b,EAAW,CACvC,IAAIC,EAAOC,EAAUC,EAAUxc,EAC9Byc,EAAe1B,GAAY,KAAMxa,CAAK,EAMtCmc,EAAQxc,EAAK,MAEd,OAAAmc,EAAWA,GAAYrB,GAAW9a,CAAK,EAKlCmc,IAWJrc,EAAMqc,EAAS,iBAAkB9b,CAAK,GAAK8b,EAAU9b,CAAK,EAErDkc,GAAgBzc,IAkBpBA,EAAMA,EAAI,QAASsC,GAAU,IAAK,GAAK,QAGnCtC,IAAQ,IAAM,CAACwU,GAAYtU,CAAK,IACpCF,EAAML,EAAO,MAAOO,EAAMK,CAAK,GAQ3B,CAAC5B,EAAQ,eAAe,GAAKmc,GAAU,KAAM9a,CAAI,GAAKob,GAAU,KAAM7a,CAAK,IAG/E+b,EAAQI,EAAM,MACdH,EAAWG,EAAM,SACjBF,EAAWE,EAAM,SAGjBA,EAAM,SAAWA,EAAM,SAAWA,EAAM,MAAQ1c,EAChDA,EAAMqc,EAAS,MAGfK,EAAM,MAAQJ,EACdI,EAAM,SAAWH,EACjBG,EAAM,SAAWF,IAIZxc,IAAQ,OAIdA,EAAM,GACNA,CACF,CAGA,SAAS2c,GAAcC,EAAaC,EAAS,CAG5C,MAAO,CACN,IAAK,UAAW,CACf,GAAKD,EAAY,EAAI,CAIpB,OAAO,KAAK,IACZ,MACD,CAGA,OAAS,KAAK,IAAMC,GAAS,MAAO,KAAM,SAAU,CACrD,CACD,CACD,CAGA,IAAIC,GAAc,CAAE,SAAU,MAAO,IAAK,EACzCC,GAAahe,EAAS,cAAe,KAAM,EAAE,MAC7Cie,GAAc,CAAC,EAGhB,SAASC,GAAgB1c,EAAO,CAM/B,QAHI2c,EAAU3c,EAAM,CAAE,EAAE,YAAY,EAAIA,EAAK,MAAO,CAAE,EACrDlB,EAAIyd,GAAY,OAETzd,KAEP,GADAkB,EAAOuc,GAAazd,CAAE,EAAI6d,EACrB3c,KAAQwc,GACZ,OAAOxc,CAGV,CAGA,SAAS4c,GAAe5c,EAAO,CAC9B,IAAI6c,EAAQzd,EAAO,SAAUY,CAAK,GAAKyc,GAAazc,CAAK,EAEzD,OAAK6c,IAGA7c,KAAQwc,GACLxc,EAEDyc,GAAazc,CAAK,EAAI0c,GAAgB1c,CAAK,GAAKA,EACxD,CAGA,IAKC8c,GAAe,4BACfC,GAAU,CAAE,SAAU,WAAY,WAAY,SAAU,QAAS,OAAQ,EACzEC,GAAqB,CACpB,cAAe,IACf,WAAY,KACb,EAED,SAASC,GAAmBrd,EAAO2B,EAAO2b,EAAW,CAIpD,IAAI9b,EAAU2S,GAAQ,KAAMxS,CAAM,EAClC,OAAOH,EAGN,KAAK,IAAK,EAAGA,EAAS,CAAE,GAAM8b,GAAY,EAAI,GAAM9b,EAAS,CAAE,GAAK,MACpEG,CACF,CAEA,SAAS4b,GAAoBxd,EAAMyd,EAAWC,EAAKC,EAAaC,EAAQC,EAAc,CACrF,IAAI1e,EAAIse,IAAc,QAAU,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EACRC,EAAc,EAGf,GAAKN,KAAUC,EAAc,SAAW,WACvC,MAAO,GAGR,KAAQxe,EAAI,EAAGA,GAAK,EAKdue,IAAQ,WACZM,GAAeve,EAAO,IAAKO,EAAM0d,EAAMrJ,GAAWlV,CAAE,EAAG,GAAMye,CAAO,GAI/DD,GAmBAD,IAAQ,YACZK,GAASte,EAAO,IAAKO,EAAM,UAAYqU,GAAWlV,CAAE,EAAG,GAAMye,CAAO,GAIhEF,IAAQ,WACZK,GAASte,EAAO,IAAKO,EAAM,SAAWqU,GAAWlV,CAAE,EAAI,QAAS,GAAMye,CAAO,KAtB9EG,GAASte,EAAO,IAAKO,EAAM,UAAYqU,GAAWlV,CAAE,EAAG,GAAMye,CAAO,EAG/DF,IAAQ,UACZK,GAASte,EAAO,IAAKO,EAAM,SAAWqU,GAAWlV,CAAE,EAAI,QAAS,GAAMye,CAAO,EAI7EE,GAASre,EAAO,IAAKO,EAAM,SAAWqU,GAAWlV,CAAE,EAAI,QAAS,GAAMye,CAAO,GAoBhF,MAAK,CAACD,GAAeE,GAAe,IAInCE,GAAS,KAAK,IAAK,EAAG,KAAK,KAC1B/d,EAAM,SAAWyd,EAAW,CAAE,EAAE,YAAY,EAAIA,EAAU,MAAO,CAAE,CAAE,EACrEI,EACAE,EACAD,EACA,EAID,CAAE,GAAK,GAGDC,EAAQC,CAChB,CAEA,SAASC,GAAkBje,EAAMyd,EAAWK,EAAQ,CAGnD,IAAIF,EAAS9C,GAAW9a,CAAK,EAI5Bke,EAAkB,CAACzf,EAAQ,kBAAkB,GAAKqf,EAClDH,EAAcO,GACbze,EAAO,IAAKO,EAAM,YAAa,GAAO4d,CAAO,IAAM,aACpDO,EAAmBR,EAEnBve,EAAM8c,GAAQlc,EAAMyd,EAAWG,CAAO,EACtCQ,EAAa,SAAWX,EAAW,CAAE,EAAE,YAAY,EAAIA,EAAU,MAAO,CAAE,EAI3E,GAAK7C,GAAU,KAAMxb,CAAI,EAAI,CAC5B,GAAK,CAAC0e,EACL,OAAO1e,EAERA,EAAM,MACP,CAMA,OAAO,CAACX,EAAQ,kBAAkB,GAAKkf,GAMtC,CAAClf,EAAQ,qBAAqB,GAAKsD,EAAU/B,EAAM,IAAK,GAIxDZ,IAAQ,QAIR,CAAC,WAAYA,CAAI,GAAKK,EAAO,IAAKO,EAAM,UAAW,GAAO4d,CAAO,IAAM,WAGvE5d,EAAK,eAAe,EAAE,SAEtB2d,EAAcle,EAAO,IAAKO,EAAM,YAAa,GAAO4d,CAAO,IAAM,aAKjEO,EAAmBC,KAAcpe,EAC5Bme,IACJ/e,EAAMY,EAAMoe,CAAW,IAKzBhf,EAAM,WAAYA,CAAI,GAAK,EAGlBA,EACRoe,GACCxd,EACAyd,EACAK,IAAWH,EAAc,SAAW,WACpCQ,EACAP,EAGAxe,CACD,EACG,IACL,CAEAK,EAAO,OAAQ,CAId,SAAU,CACT,QAAS,CACR,IAAK,SAAUO,EAAMmc,EAAW,CAC/B,GAAKA,EAAW,CAGf,IAAIrc,EAAMoc,GAAQlc,EAAM,SAAU,EAClC,OAAOF,IAAQ,GAAK,IAAMA,CAC3B,CACD,CACD,CACD,EAGA,UAAW,CACV,wBAAyB,GACzB,YAAa,GACb,iBAAkB,GAClB,YAAa,GACb,SAAU,GACV,WAAY,GACZ,WAAY,GACZ,SAAU,GACV,WAAY,GACZ,cAAe,GACf,gBAAiB,GACjB,QAAS,GACT,WAAY,GACZ,aAAc,GACd,WAAY,GACZ,QAAS,GACT,MAAO,GACP,QAAS,GACT,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,KAAM,GAGN,YAAa,GACb,aAAc,GACd,YAAa,GACb,iBAAkB,GAClB,cAAe,EAChB,EAIA,SAAU,CAAC,EAGX,MAAO,SAAUE,EAAMK,EAAMuB,EAAOkc,EAAQ,CAG3C,GAAK,GAAC9d,GAAQA,EAAK,WAAa,GAAKA,EAAK,WAAa,GAAK,CAACA,EAAK,OAKlE,KAAIF,EAAKgC,EAAM+R,EACdwK,EAAWvL,GAAWzS,CAAK,EAC3Bkc,EAAe1B,GAAY,KAAMxa,CAAK,EACtCmc,EAAQxc,EAAK,MAad,GARMuc,IACLlc,EAAO4c,GAAeoB,CAAS,GAIhCxK,EAAQpU,EAAO,SAAUY,CAAK,GAAKZ,EAAO,SAAU4e,CAAS,EAGxDzc,IAAU,OAAY,CAY1B,GAXAE,EAAO,OAAOF,EAGTE,IAAS,WAAchC,EAAMsU,GAAQ,KAAMxS,CAAM,IAAO9B,EAAK,CAAE,IACnE8B,EAAQ6S,GAAWzU,EAAMK,EAAMP,CAAI,EAGnCgC,EAAO,UAIHF,GAAS,MAAQA,IAAUA,EAC/B,OAMIE,IAAS,UAAY,CAACya,IAC1B3a,GAAS9B,GAAOA,EAAK,CAAE,IAAOL,EAAO,UAAW4e,CAAS,EAAI,GAAK,OAI9D,CAAC5f,EAAQ,iBAAmBmD,IAAU,IAAMvB,EAAK,QAAS,YAAa,IAAM,IACjFmc,EAAOnc,CAAK,EAAI,YAIZ,CAACwT,GAAS,EAAG,QAASA,KACxBjS,EAAQiS,EAAM,IAAK7T,EAAM4B,EAAOkc,CAAM,KAAQ,UAE3CvB,EACJC,EAAM,YAAanc,EAAMuB,CAAM,EAE/B4a,EAAOnc,CAAK,EAAIuB,EAInB,KAGC,QAAKiS,GAAS,QAASA,IACpB/T,EAAM+T,EAAM,IAAK7T,EAAM,GAAO8d,CAAM,KAAQ,OAEvChe,EAID0c,EAAOnc,CAAK,EAErB,EAEA,IAAK,SAAUL,EAAMK,EAAMyd,EAAOF,EAAS,CAC1C,IAAIxe,EAAKQ,EAAKiU,EACbwK,EAAWvL,GAAWzS,CAAK,EAC3Bkc,EAAe1B,GAAY,KAAMxa,CAAK,EA4BvC,OAvBMkc,IACLlc,EAAO4c,GAAeoB,CAAS,GAIhCxK,EAAQpU,EAAO,SAAUY,CAAK,GAAKZ,EAAO,SAAU4e,CAAS,EAGxDxK,GAAS,QAASA,IACtBzU,EAAMyU,EAAM,IAAK7T,EAAM,GAAM8d,CAAM,GAI/B1e,IAAQ,SACZA,EAAM8c,GAAQlc,EAAMK,EAAMud,CAAO,GAI7Bxe,IAAQ,UAAYiB,KAAQgd,KAChCje,EAAMie,GAAoBhd,CAAK,GAI3Byd,IAAU,IAAMA,GACpBle,EAAM,WAAYR,CAAI,EACf0e,IAAU,IAAQ,SAAUle,CAAI,EAAIA,GAAO,EAAIR,GAGhDA,CACR,CACD,CAAE,EAEFK,EAAO,KAAM,CAAE,SAAU,OAAQ,EAAG,SAAUoC,EAAI4b,EAAY,CAC7Dhe,EAAO,SAAUge,CAAU,EAAI,CAC9B,IAAK,SAAUzd,EAAMmc,EAAU2B,EAAQ,CACtC,GAAK3B,EAIJ,OAAOgB,GAAa,KAAM1d,EAAO,IAAKO,EAAM,SAAU,CAAE,IAQrD,CAACA,EAAK,eAAe,EAAE,QAAU,CAACA,EAAK,sBAAsB,EAAE,OACjEgb,GAAMhb,EAAMod,GAAS,UAAW,CAC/B,OAAOa,GAAkBje,EAAMyd,EAAWK,CAAM,CACjD,CAAE,EACFG,GAAkBje,EAAMyd,EAAWK,CAAM,CAE5C,EAEA,IAAK,SAAU9d,EAAM4B,EAAOkc,EAAQ,CACnC,IAAIrc,EACHmc,EAAS9C,GAAW9a,CAAK,EAIzBse,EAAqB,CAAC7f,EAAQ,cAAc,GAC3Cmf,EAAO,WAAa,WAGrBM,EAAkBI,GAAsBR,EACxCH,EAAcO,GACbze,EAAO,IAAKO,EAAM,YAAa,GAAO4d,CAAO,IAAM,aACpDL,EAAWO,EACVN,GACCxd,EACAyd,EACAK,EACAH,EACAC,CACD,EACA,EAIF,OAAKD,GAAeW,IACnBf,GAAY,KAAK,KAChBvd,EAAM,SAAWyd,EAAW,CAAE,EAAE,YAAY,EAAIA,EAAU,MAAO,CAAE,CAAE,EACrE,WAAYG,EAAQH,CAAU,CAAE,EAChCD,GAAoBxd,EAAMyd,EAAW,SAAU,GAAOG,CAAO,EAC7D,EACD,GAIIL,IAAc9b,EAAU2S,GAAQ,KAAMxS,CAAM,KAC9CH,EAAS,CAAE,GAAK,QAAW,OAE7BzB,EAAK,MAAOyd,CAAU,EAAI7b,EAC1BA,EAAQnC,EAAO,IAAKO,EAAMyd,CAAU,GAG9BH,GAAmBtd,EAAM4B,EAAO2b,CAAS,CACjD,CACD,CACD,CAAE,EAEF9d,EAAO,SAAS,WAAagd,GAAche,EAAQ,mBAClD,SAAUuB,EAAMmc,EAAW,CAC1B,GAAKA,EACJ,OAAS,WAAYD,GAAQlc,EAAM,YAAa,CAAE,GACjDA,EAAK,sBAAsB,EAAE,KAC5Bgb,GAAMhb,EAAM,CAAE,WAAY,CAAE,EAAG,UAAW,CACzC,OAAOA,EAAK,sBAAsB,EAAE,IACrC,CAAE,GACA,IAEN,CACD,EAGAP,EAAO,KAAM,CACZ,OAAQ,GACR,QAAS,GACT,OAAQ,OACT,EAAG,SAAU8e,EAAQC,EAAS,CAC7B/e,EAAO,SAAU8e,EAASC,CAAO,EAAI,CACpC,OAAQ,SAAU5c,EAAQ,CAOzB,QANIzC,EAAI,EACPsf,EAAW,CAAC,EAGZC,EAAQ,OAAO9c,GAAU,SAAWA,EAAM,MAAO,GAAI,EAAI,CAAEA,CAAM,EAE1DzC,EAAI,EAAGA,IACdsf,EAAUF,EAASlK,GAAWlV,CAAE,EAAIqf,CAAO,EAC1CE,EAAOvf,CAAE,GAAKuf,EAAOvf,EAAI,CAAE,GAAKuf,EAAO,CAAE,EAG3C,OAAOD,CACR,CACD,EAEKF,IAAW,WACf9e,EAAO,SAAU8e,EAASC,CAAO,EAAE,IAAMlB,GAE3C,CAAE,EAEF7d,EAAO,GAAG,OAAQ,CACjB,IAAK,SAAUY,EAAMuB,EAAQ,CAC5B,OAAOuQ,GAAQ,KAAM,SAAUnS,EAAMK,EAAMuB,EAAQ,CAClD,IAAIgc,EAAQ1d,EACXiL,EAAM,CAAC,EACPhM,EAAI,EAEL,GAAK,MAAM,QAASkB,CAAK,EAAI,CAI5B,IAHAud,EAAS9C,GAAW9a,CAAK,EACzBE,EAAMG,EAAK,OAEHlB,EAAIe,EAAKf,IAChBgM,EAAK9K,EAAMlB,CAAE,CAAE,EAAIM,EAAO,IAAKO,EAAMK,EAAMlB,CAAE,EAAG,GAAOye,CAAO,EAG/D,OAAOzS,CACR,CAEA,OAAOvJ,IAAU,OAChBnC,EAAO,MAAOO,EAAMK,EAAMuB,CAAM,EAChCnC,EAAO,IAAKO,EAAMK,CAAK,CACzB,EAAGA,EAAMuB,EAAO,UAAU,OAAS,CAAE,CACtC,CACD,CAAE,EAGF,SAAS+c,GAAO3e,EAAMI,EAASgT,EAAMwL,EAAKC,EAAS,CAClD,OAAO,IAAIF,GAAM,UAAU,KAAM3e,EAAMI,EAASgT,EAAMwL,EAAKC,CAAO,CACnE,CACApf,EAAO,MAAQkf,GAEfA,GAAM,UAAY,CACjB,YAAaA,GACb,KAAM,SAAU3e,EAAMI,EAASgT,EAAMwL,EAAKC,EAAQ5J,EAAO,CACxD,KAAK,KAAOjV,EACZ,KAAK,KAAOoT,EACZ,KAAK,OAASyL,GAAUpf,EAAO,OAAO,SACtC,KAAK,QAAUW,EACf,KAAK,MAAQ,KAAK,IAAM,KAAK,IAAI,EACjC,KAAK,IAAMwe,EACX,KAAK,KAAO3J,IAAUxV,EAAO,UAAW2T,CAAK,EAAI,GAAK,KACvD,EACA,IAAK,UAAW,CACf,IAAIS,EAAQ8K,GAAM,UAAW,KAAK,IAAK,EAEvC,OAAO9K,GAASA,EAAM,IACrBA,EAAM,IAAK,IAAK,EAChB8K,GAAM,UAAU,SAAS,IAAK,IAAK,CACrC,EACA,IAAK,SAAUG,EAAU,CACxB,IAAIC,EACHlL,EAAQ8K,GAAM,UAAW,KAAK,IAAK,EAEpC,OAAK,KAAK,QAAQ,SACjB,KAAK,IAAMI,EAAQtf,EAAO,OAAQ,KAAK,MAAO,EAC7Cqf,EAAS,KAAK,QAAQ,SAAWA,EAAS,EAAG,EAAG,KAAK,QAAQ,QAC9D,EAEA,KAAK,IAAMC,EAAQD,EAEpB,KAAK,KAAQ,KAAK,IAAM,KAAK,OAAUC,EAAQ,KAAK,MAE/C,KAAK,QAAQ,MACjB,KAAK,QAAQ,KAAK,KAAM,KAAK,KAAM,KAAK,IAAK,IAAK,EAG9ClL,GAASA,EAAM,IACnBA,EAAM,IAAK,IAAK,EAEhB8K,GAAM,UAAU,SAAS,IAAK,IAAK,EAE7B,IACR,CACD,EAEAA,GAAM,UAAU,KAAK,UAAYA,GAAM,UAEvCA,GAAM,UAAY,CACjB,SAAU,CACT,IAAK,SAAUhK,EAAQ,CACtB,IAAIvM,EAIJ,OAAKuM,EAAM,KAAK,WAAa,GAC5BA,EAAM,KAAMA,EAAM,IAAK,GAAK,MAAQA,EAAM,KAAK,MAAOA,EAAM,IAAK,GAAK,KAC/DA,EAAM,KAAMA,EAAM,IAAK,GAO/BvM,EAAS3I,EAAO,IAAKkV,EAAM,KAAMA,EAAM,KAAM,EAAG,EAGzC,CAACvM,GAAUA,IAAW,OAAS,EAAIA,EAC3C,EACA,IAAK,SAAUuM,EAAQ,CAKjBlV,EAAO,GAAG,KAAMkV,EAAM,IAAK,EAC/BlV,EAAO,GAAG,KAAMkV,EAAM,IAAK,EAAGA,CAAM,EACzBA,EAAM,KAAK,WAAa,IACnClV,EAAO,SAAUkV,EAAM,IAAK,GAC3BA,EAAM,KAAK,MAAOsI,GAAetI,EAAM,IAAK,CAAE,GAAK,MACpDlV,EAAO,MAAOkV,EAAM,KAAMA,EAAM,KAAMA,EAAM,IAAMA,EAAM,IAAK,EAE7DA,EAAM,KAAMA,EAAM,IAAK,EAAIA,EAAM,GAEnC,CACD,CACD,EAIAgK,GAAM,UAAU,UAAYA,GAAM,UAAU,WAAa,CACxD,IAAK,SAAUhK,EAAQ,CACjBA,EAAM,KAAK,UAAYA,EAAM,KAAK,aACtCA,EAAM,KAAMA,EAAM,IAAK,EAAIA,EAAM,IAEnC,CACD,EAEAlV,EAAO,OAAS,CACf,OAAQ,SAAUuf,EAAI,CACrB,OAAOA,CACR,EACA,MAAO,SAAUA,EAAI,CACpB,MAAO,IAAM,KAAK,IAAKA,EAAI,KAAK,EAAG,EAAI,CACxC,EACA,SAAU,OACX,EAEAvf,EAAO,GAAKkf,GAAM,UAAU,KAG5Blf,EAAO,GAAG,KAAO,CAAC,EAKlB,IACCwf,GAAOC,GACPC,GAAW,yBACXC,GAAO,cAER,SAASC,IAAW,CACdH,KACCrgB,EAAS,SAAW,IAASlB,EAAO,sBACxCA,EAAO,sBAAuB0hB,EAAS,EAEvC1hB,EAAO,WAAY0hB,GAAU5f,EAAO,GAAG,QAAS,EAGjDA,EAAO,GAAG,KAAK,EAEjB,CAGA,SAAS6f,IAAc,CACtB,OAAA3hB,EAAO,WAAY,UAAW,CAC7BshB,GAAQ,MACT,CAAE,EACOA,GAAQ,KAAK,IAAI,CAC3B,CAGA,SAASM,GAAOzd,EAAM0d,EAAe,CACpC,IAAIC,EACHtgB,EAAI,EACJwU,EAAQ,CAAE,OAAQ7R,CAAK,EAKxB,IADA0d,EAAeA,EAAe,EAAI,EAC1BrgB,EAAI,EAAGA,GAAK,EAAIqgB,EACvBC,EAAQpL,GAAWlV,CAAE,EACrBwU,EAAO,SAAW8L,CAAM,EAAI9L,EAAO,UAAY8L,CAAM,EAAI3d,EAG1D,OAAK0d,IACJ7L,EAAM,QAAUA,EAAM,MAAQ7R,GAGxB6R,CACR,CAEA,SAAS+L,GAAa9d,EAAOwR,EAAMuM,EAAY,CAK9C,QAJIhL,EACHmF,GAAe8F,GAAU,SAAUxM,CAAK,GAAK,CAAC,GAAI,OAAQwM,GAAU,SAAU,GAAI,CAAE,EACpFrQ,EAAQ,EACR5O,EAASmZ,EAAW,OACbvK,EAAQ5O,EAAQ4O,IACvB,GAAOoF,EAAQmF,EAAYvK,CAAM,EAAE,KAAMoQ,EAAWvM,EAAMxR,CAAM,EAG/D,OAAO+S,CAGV,CAEA,SAASkL,GAAkB7f,EAAMwY,EAAOsH,EAAO,CAC9C,IAAI1M,EAAMxR,EAAOme,EAAQlM,EAAOmM,EAASC,EAAWC,EAAgB7K,EACnE8K,EAAQ,UAAW3H,GAAS,WAAYA,EACxC4H,EAAO,KACPvH,GAAO,CAAC,EACR2D,GAAQxc,EAAK,MACbqgB,GAASrgB,EAAK,UAAYwU,GAAoBxU,CAAK,EACnDsgB,GAAWjN,GAAS,IAAKrT,EAAM,QAAS,EAGnC8f,EAAK,QACVjM,EAAQpU,EAAO,YAAaO,EAAM,IAAK,EAClC6T,EAAM,UAAY,OACtBA,EAAM,SAAW,EACjBmM,EAAUnM,EAAM,MAAM,KACtBA,EAAM,MAAM,KAAO,UAAW,CACvBA,EAAM,UACXmM,EAAQ,CAEV,GAEDnM,EAAM,WAENuM,EAAK,OAAQ,UAAW,CAGvBA,EAAK,OAAQ,UAAW,CACvBvM,EAAM,WACApU,EAAO,MAAOO,EAAM,IAAK,EAAE,QAChC6T,EAAM,MAAM,KAAK,CAEnB,CAAE,CACH,CAAE,GAIH,IAAMT,KAAQoF,EAEb,GADA5W,EAAQ4W,EAAOpF,CAAK,EACf+L,GAAS,KAAMvd,CAAM,EAAI,CAG7B,GAFA,OAAO4W,EAAOpF,CAAK,EACnB2M,EAASA,GAAUne,IAAU,SACxBA,KAAYye,GAAS,OAAS,QAIlC,GAAKze,IAAU,QAAU0e,IAAYA,GAAUlN,CAAK,IAAM,OACzDiN,GAAS,OAIT,UAGFxH,GAAMzF,CAAK,EAAIkN,IAAYA,GAAUlN,CAAK,GAAK3T,EAAO,MAAOO,EAAMoT,CAAK,CACzE,CAKD,GADA6M,EAAY,CAACxgB,EAAO,cAAe+Y,CAAM,EACpC,GAACyH,GAAaxgB,EAAO,cAAeoZ,EAAK,GAK9C,CAAKsH,GAASngB,EAAK,WAAa,IAM/B8f,EAAK,SAAW,CAAEtD,GAAM,SAAUA,GAAM,UAAWA,GAAM,SAAU,EAGnE0D,EAAiBI,IAAYA,GAAS,QACjCJ,GAAkB,OACtBA,EAAiB7M,GAAS,IAAKrT,EAAM,SAAU,GAEhDqV,EAAU5V,EAAO,IAAKO,EAAM,SAAU,EACjCqV,IAAY,SACX6K,EACJ7K,EAAU6K,GAIV5K,GAAU,CAAEtV,CAAK,EAAG,EAAK,EACzBkgB,EAAiBlgB,EAAK,MAAM,SAAWkgB,EACvC7K,EAAU5V,EAAO,IAAKO,EAAM,SAAU,EACtCsV,GAAU,CAAEtV,CAAK,CAAE,KAKhBqV,IAAY,UAAYA,IAAY,gBAAkB6K,GAAkB,OACvEzgB,EAAO,IAAKO,EAAM,OAAQ,IAAM,SAG9BigB,IACLG,EAAK,KAAM,UAAW,CACrB5D,GAAM,QAAU0D,CACjB,CAAE,EACGA,GAAkB,OACtB7K,EAAUmH,GAAM,QAChB0D,EAAiB7K,IAAY,OAAS,GAAKA,IAG7CmH,GAAM,QAAU,iBAKdsD,EAAK,WACTtD,GAAM,SAAW,SACjB4D,EAAK,OAAQ,UAAW,CACvB5D,GAAM,SAAWsD,EAAK,SAAU,CAAE,EAClCtD,GAAM,UAAYsD,EAAK,SAAU,CAAE,EACnCtD,GAAM,UAAYsD,EAAK,SAAU,CAAE,CACpC,CAAE,GAIHG,EAAY,GACZ,IAAM7M,KAAQyF,GAGPoH,IACAK,GACC,WAAYA,KAChBD,GAASC,GAAS,QAGnBA,GAAWjN,GAAS,OAAQrT,EAAM,SAAU,CAAE,QAASkgB,CAAe,CAAE,EAIpEH,IACJO,GAAS,OAAS,CAACD,IAIfA,IACJ/K,GAAU,CAAEtV,CAAK,EAAG,EAAK,EAK1BogB,EAAK,KAAM,UAAW,CAKfC,IACL/K,GAAU,CAAEtV,CAAK,CAAE,EAEpBqT,GAAS,OAAQrT,EAAM,QAAS,EAChC,IAAMoT,KAAQyF,GACbpZ,EAAO,MAAOO,EAAMoT,EAAMyF,GAAMzF,CAAK,CAAE,CAEzC,CAAE,GAIH6M,EAAYP,GAAaW,GAASC,GAAUlN,CAAK,EAAI,EAAGA,EAAMgN,CAAK,EAC3DhN,KAAQkN,KACfA,GAAUlN,CAAK,EAAI6M,EAAU,MACxBI,KACJJ,EAAU,IAAMA,EAAU,MAC1BA,EAAU,MAAQ,IAItB,CAEA,SAASM,GAAY/H,EAAOgI,EAAgB,CAC3C,IAAIjR,EAAOlP,EAAMwe,EAAQjd,EAAOiS,EAGhC,IAAMtE,KAASiJ,EAed,GAdAnY,EAAOyS,GAAWvD,CAAM,EACxBsP,EAAS2B,EAAengB,CAAK,EAC7BuB,EAAQ4W,EAAOjJ,CAAM,EAChB,MAAM,QAAS3N,CAAM,IACzBid,EAASjd,EAAO,CAAE,EAClBA,EAAQ4W,EAAOjJ,CAAM,EAAI3N,EAAO,CAAE,GAG9B2N,IAAUlP,IACdmY,EAAOnY,CAAK,EAAIuB,EAChB,OAAO4W,EAAOjJ,CAAM,GAGrBsE,EAAQpU,EAAO,SAAUY,CAAK,EACzBwT,GAAS,WAAYA,EAAQ,CACjCjS,EAAQiS,EAAM,OAAQjS,CAAM,EAC5B,OAAO4W,EAAOnY,CAAK,EAInB,IAAMkP,KAAS3N,EACN2N,KAASiJ,IAChBA,EAAOjJ,CAAM,EAAI3N,EAAO2N,CAAM,EAC9BiR,EAAejR,CAAM,EAAIsP,EAG5B,MACC2B,EAAengB,CAAK,EAAIwe,CAG3B,CAEA,SAASe,GAAW5f,EAAMygB,EAAYrgB,EAAU,CAC/C,IAAIgI,EACHsY,EACAnR,EAAQ,EACR5O,EAASif,GAAU,WAAW,OAC9BvP,EAAW5Q,EAAO,SAAS,EAAE,OAAQ,UAAW,CAG/C,OAAOkhB,EAAK,IACb,CAAE,EACFA,EAAO,UAAW,CACjB,GAAKD,EACJ,MAAO,GAYR,QAVIE,EAAc3B,IAASK,GAAY,EACtC9N,EAAY,KAAK,IAAK,EAAGmO,EAAU,UAAYA,EAAU,SAAWiB,CAAY,EAIhFhV,GAAO4F,EAAYmO,EAAU,UAAY,EACzCb,GAAU,EAAIlT,GACd2D,GAAQ,EACR5O,GAASgf,EAAU,OAAO,OAEnBpQ,GAAQ5O,GAAQ4O,KACvBoQ,EAAU,OAAQpQ,EAAM,EAAE,IAAKuP,EAAQ,EAMxC,OAHAzO,EAAS,WAAYrQ,EAAM,CAAE2f,EAAWb,GAAStN,CAAU,CAAE,EAGxDsN,GAAU,GAAKne,GACZ6Q,GAIF7Q,IACL0P,EAAS,WAAYrQ,EAAM,CAAE2f,EAAW,EAAG,CAAE,CAAE,EAIhDtP,EAAS,YAAarQ,EAAM,CAAE2f,CAAU,CAAE,EACnC,GACR,EACAA,EAAYtP,EAAS,QAAS,CAC7B,KAAMrQ,EACN,MAAOP,EAAO,OAAQ,CAAC,EAAGghB,CAAW,EACrC,KAAMhhB,EAAO,OAAQ,GAAM,CAC1B,cAAe,CAAC,EAChB,OAAQA,EAAO,OAAO,QACvB,EAAGW,CAAQ,EACX,mBAAoBqgB,EACpB,gBAAiBrgB,EACjB,UAAW6e,IAASK,GAAY,EAChC,SAAUlf,EAAQ,SAClB,OAAQ,CAAC,EACT,YAAa,SAAUgT,EAAMwL,EAAM,CAClC,IAAIjK,GAAQlV,EAAO,MAAOO,EAAM2f,EAAU,KAAMvM,EAAMwL,EACrDe,EAAU,KAAK,cAAevM,CAAK,GAAKuM,EAAU,KAAK,MAAO,EAC/D,OAAAA,EAAU,OAAO,KAAMhL,EAAM,EACtBA,EACR,EACA,KAAM,SAAUkM,EAAU,CACzB,IAAItR,EAAQ,EAIX5O,GAASkgB,EAAUlB,EAAU,OAAO,OAAS,EAC9C,GAAKe,EACJ,OAAO,KAGR,IADAA,EAAU,GACFnR,EAAQ5O,GAAQ4O,IACvBoQ,EAAU,OAAQpQ,CAAM,EAAE,IAAK,CAAE,EAIlC,OAAKsR,GACJxQ,EAAS,WAAYrQ,EAAM,CAAE2f,EAAW,EAAG,CAAE,CAAE,EAC/CtP,EAAS,YAAarQ,EAAM,CAAE2f,EAAWkB,CAAQ,CAAE,GAEnDxQ,EAAS,WAAYrQ,EAAM,CAAE2f,EAAWkB,CAAQ,CAAE,EAE5C,IACR,CACD,CAAE,EACFrI,EAAQmH,EAAU,MAInB,IAFAY,GAAY/H,EAAOmH,EAAU,KAAK,aAAc,EAExCpQ,EAAQ5O,EAAQ4O,IAEvB,GADAnH,EAASwX,GAAU,WAAYrQ,CAAM,EAAE,KAAMoQ,EAAW3f,EAAMwY,EAAOmH,EAAU,IAAK,EAC/EvX,EACJ,OAAK1J,EAAY0J,EAAO,IAAK,IAC5B3I,EAAO,YAAakgB,EAAU,KAAMA,EAAU,KAAK,KAAM,EAAE,KAC1DvX,EAAO,KAAK,KAAMA,CAAO,GAEpBA,EAIT,OAAA3I,EAAO,IAAK+Y,EAAOkH,GAAaC,CAAU,EAErCjhB,EAAYihB,EAAU,KAAK,KAAM,GACrCA,EAAU,KAAK,MAAM,KAAM3f,EAAM2f,CAAU,EAI5CA,EACE,SAAUA,EAAU,KAAK,QAAS,EAClC,KAAMA,EAAU,KAAK,KAAMA,EAAU,KAAK,QAAS,EACnD,KAAMA,EAAU,KAAK,IAAK,EAC1B,OAAQA,EAAU,KAAK,MAAO,EAEhClgB,EAAO,GAAG,MACTA,EAAO,OAAQkhB,EAAM,CACpB,KAAM3gB,EACN,KAAM2f,EACN,MAAOA,EAAU,KAAK,KACvB,CAAE,CACH,EAEOA,CACR,CAEAlgB,EAAO,UAAYA,EAAO,OAAQmgB,GAAW,CAE5C,SAAU,CACT,IAAK,CAAE,SAAUxM,EAAMxR,EAAQ,CAC9B,IAAI+S,EAAQ,KAAK,YAAavB,EAAMxR,CAAM,EAC1C,OAAA6S,GAAWE,EAAM,KAAMvB,EAAMgB,GAAQ,KAAMxS,CAAM,EAAG+S,CAAM,EACnDA,CACR,CAAE,CACH,EAEA,QAAS,SAAU6D,EAAOzY,EAAW,CAC/BrB,EAAY8Z,CAAM,GACtBzY,EAAWyY,EACXA,EAAQ,CAAE,GAAI,GAEdA,EAAQA,EAAM,MAAO/J,CAAc,EAOpC,QAJI2E,EACH7D,EAAQ,EACR5O,EAAS6X,EAAM,OAERjJ,EAAQ5O,EAAQ4O,IACvB6D,EAAOoF,EAAOjJ,CAAM,EACpBqQ,GAAU,SAAUxM,CAAK,EAAIwM,GAAU,SAAUxM,CAAK,GAAK,CAAC,EAC5DwM,GAAU,SAAUxM,CAAK,EAAE,QAASrT,CAAS,CAE/C,EAEA,WAAY,CAAE8f,EAAiB,EAE/B,UAAW,SAAU9f,EAAU+gB,EAAU,CACnCA,EACJlB,GAAU,WAAW,QAAS7f,CAAS,EAEvC6f,GAAU,WAAW,KAAM7f,CAAS,CAEtC,CACD,CAAE,EAEFN,EAAO,MAAQ,SAAUshB,EAAOlC,EAAQpY,EAAK,CAC5C,IAAIua,EAAMD,GAAS,OAAOA,GAAU,SAAWthB,EAAO,OAAQ,CAAC,EAAGshB,CAAM,EAAI,CAC3E,SAAUta,GAAM,CAACA,GAAMoY,GACtBngB,EAAYqiB,CAAM,GAAKA,EACxB,SAAUA,EACV,OAAQta,GAAMoY,GAAUA,GAAU,CAACngB,EAAYmgB,CAAO,GAAKA,CAC5D,EAGA,OAAKpf,EAAO,GAAG,IACduhB,EAAI,SAAW,EAGV,OAAOA,EAAI,UAAa,WACvBA,EAAI,YAAYvhB,EAAO,GAAG,OAC9BuhB,EAAI,SAAWvhB,EAAO,GAAG,OAAQuhB,EAAI,QAAS,EAG9CA,EAAI,SAAWvhB,EAAO,GAAG,OAAO,WAM9BuhB,EAAI,OAAS,MAAQA,EAAI,QAAU,MACvCA,EAAI,MAAQ,MAIbA,EAAI,IAAMA,EAAI,SAEdA,EAAI,SAAW,UAAW,CACpBtiB,EAAYsiB,EAAI,GAAI,GACxBA,EAAI,IAAI,KAAM,IAAK,EAGfA,EAAI,OACRvhB,EAAO,QAAS,KAAMuhB,EAAI,KAAM,CAElC,EAEOA,CACR,EAEAvhB,EAAO,GAAG,OAAQ,CACjB,OAAQ,SAAUshB,EAAOE,EAAIpC,EAAQ9e,EAAW,CAG/C,OAAO,KAAK,OAAQyU,EAAmB,EAAE,IAAK,UAAW,CAAE,EAAE,KAAK,EAGhE,IAAI,EAAE,QAAS,CAAE,QAASyM,CAAG,EAAGF,EAAOlC,EAAQ9e,CAAS,CAC3D,EACA,QAAS,SAAUqT,EAAM2N,EAAOlC,EAAQ9e,EAAW,CAClD,IAAImhB,EAAQzhB,EAAO,cAAe2T,CAAK,EACtC+N,EAAS1hB,EAAO,MAAOshB,EAAOlC,EAAQ9e,CAAS,EAC/CqhB,EAAc,UAAW,CAGxB,IAAIhB,EAAOR,GAAW,KAAMngB,EAAO,OAAQ,CAAC,EAAG2T,CAAK,EAAG+N,CAAO,GAGzDD,GAAS7N,GAAS,IAAK,KAAM,QAAS,IAC1C+M,EAAK,KAAM,EAAK,CAElB,EAED,OAAAgB,EAAY,OAASA,EAEdF,GAASC,EAAO,QAAU,GAChC,KAAK,KAAMC,CAAY,EACvB,KAAK,MAAOD,EAAO,MAAOC,CAAY,CACxC,EACA,KAAM,SAAUtf,EAAMuf,EAAYR,EAAU,CAC3C,IAAIS,EAAY,SAAUzN,EAAQ,CACjC,IAAI0N,EAAO1N,EAAM,KACjB,OAAOA,EAAM,KACb0N,EAAMV,CAAQ,CACf,EAEA,OAAK,OAAO/e,GAAS,WACpB+e,EAAUQ,EACVA,EAAavf,EACbA,EAAO,QAEHuf,GACJ,KAAK,MAAOvf,GAAQ,KAAM,CAAC,CAAE,EAGvB,KAAK,KAAM,UAAW,CAC5B,IAAI0f,EAAU,GACbjS,EAAQzN,GAAQ,MAAQA,EAAO,aAC/B2f,EAAShiB,EAAO,OAChB0T,EAAOE,GAAS,IAAK,IAAK,EAE3B,GAAK9D,EACC4D,EAAM5D,CAAM,GAAK4D,EAAM5D,CAAM,EAAE,MACnC+R,EAAWnO,EAAM5D,CAAM,CAAE,MAG1B,KAAMA,KAAS4D,EACTA,EAAM5D,CAAM,GAAK4D,EAAM5D,CAAM,EAAE,MAAQ6P,GAAK,KAAM7P,CAAM,GAC5D+R,EAAWnO,EAAM5D,CAAM,CAAE,EAK5B,IAAMA,EAAQkS,EAAO,OAAQlS,KACvBkS,EAAQlS,CAAM,EAAE,OAAS,OAC3BzN,GAAQ,MAAQ2f,EAAQlS,CAAM,EAAE,QAAUzN,KAE5C2f,EAAQlS,CAAM,EAAE,KAAK,KAAMsR,CAAQ,EACnCW,EAAU,GACVC,EAAO,OAAQlS,EAAO,CAAE,IAOrBiS,GAAW,CAACX,IAChBphB,EAAO,QAAS,KAAMqC,CAAK,CAE7B,CAAE,CACH,EACA,OAAQ,SAAUA,EAAO,CACxB,OAAKA,IAAS,KACbA,EAAOA,GAAQ,MAET,KAAK,KAAM,UAAW,CAC5B,IAAIyN,EACH4D,EAAOE,GAAS,IAAK,IAAK,EAC1BlE,EAAQgE,EAAMrR,EAAO,OAAQ,EAC7B+R,EAAQV,EAAMrR,EAAO,YAAa,EAClC2f,EAAShiB,EAAO,OAChBkB,EAASwO,EAAQA,EAAM,OAAS,EAajC,IAVAgE,EAAK,OAAS,GAGd1T,EAAO,MAAO,KAAMqC,EAAM,CAAC,CAAE,EAExB+R,GAASA,EAAM,MACnBA,EAAM,KAAK,KAAM,KAAM,EAAK,EAIvBtE,EAAQkS,EAAO,OAAQlS,KACvBkS,EAAQlS,CAAM,EAAE,OAAS,MAAQkS,EAAQlS,CAAM,EAAE,QAAUzN,IAC/D2f,EAAQlS,CAAM,EAAE,KAAK,KAAM,EAAK,EAChCkS,EAAO,OAAQlS,EAAO,CAAE,GAK1B,IAAMA,EAAQ,EAAGA,EAAQ5O,EAAQ4O,IAC3BJ,EAAOI,CAAM,GAAKJ,EAAOI,CAAM,EAAE,QACrCJ,EAAOI,CAAM,EAAE,OAAO,KAAM,IAAK,EAKnC,OAAO4D,EAAK,MACb,CAAE,CACH,CACD,CAAE,EAEF1T,EAAO,KAAM,CAAE,SAAU,OAAQ,MAAO,EAAG,SAAUoC,EAAIxB,EAAO,CAC/D,IAAIqhB,EAAQjiB,EAAO,GAAIY,CAAK,EAC5BZ,EAAO,GAAIY,CAAK,EAAI,SAAU0gB,EAAOlC,EAAQ9e,EAAW,CACvD,OAAOghB,GAAS,MAAQ,OAAOA,GAAU,UACxCW,EAAM,MAAO,KAAM,SAAU,EAC7B,KAAK,QAASnC,GAAOlf,EAAM,EAAK,EAAG0gB,EAAOlC,EAAQ9e,CAAS,CAC7D,CACD,CAAE,EAGFN,EAAO,KAAM,CACZ,UAAW8f,GAAO,MAAO,EACzB,QAASA,GAAO,MAAO,EACvB,YAAaA,GAAO,QAAS,EAC7B,OAAQ,CAAE,QAAS,MAAO,EAC1B,QAAS,CAAE,QAAS,MAAO,EAC3B,WAAY,CAAE,QAAS,QAAS,CACjC,EAAG,SAAUlf,EAAMmY,EAAQ,CAC1B/Y,EAAO,GAAIY,CAAK,EAAI,SAAU0gB,EAAOlC,EAAQ9e,EAAW,CACvD,OAAO,KAAK,QAASyY,EAAOuI,EAAOlC,EAAQ9e,CAAS,CACrD,CACD,CAAE,EAEFN,EAAO,OAAS,CAAC,EACjBA,EAAO,GAAG,KAAO,UAAW,CAC3B,IAAIkiB,EACHxiB,EAAI,EACJsiB,EAAShiB,EAAO,OAIjB,IAFAwf,GAAQ,KAAK,IAAI,EAET9f,EAAIsiB,EAAO,OAAQtiB,IAC1BwiB,EAAQF,EAAQtiB,CAAE,EAGb,CAACwiB,EAAM,GAAKF,EAAQtiB,CAAE,IAAMwiB,GAChCF,EAAO,OAAQtiB,IAAK,CAAE,EAIlBsiB,EAAO,QACZhiB,EAAO,GAAG,KAAK,EAEhBwf,GAAQ,MACT,EAEAxf,EAAO,GAAG,MAAQ,SAAUkiB,EAAQ,CACnCliB,EAAO,OAAO,KAAMkiB,CAAM,EAC1BliB,EAAO,GAAG,MAAM,CACjB,EAEAA,EAAO,GAAG,SAAW,GACrBA,EAAO,GAAG,MAAQ,UAAW,CACvByf,KAILA,GAAa,GACbG,GAAS,EACV,EAEA5f,EAAO,GAAG,KAAO,UAAW,CAC3Byf,GAAa,IACd,EAEAzf,EAAO,GAAG,OAAS,CAClB,KAAM,IACN,KAAM,IAGN,SAAU,GACX,EAIAA,EAAO,GAAG,MAAQ,SAAUmiB,EAAM9f,EAAO,CACxC,OAAA8f,EAAOniB,EAAO,IAAKA,EAAO,GAAG,OAAQmiB,CAAK,GAAKA,EAC/C9f,EAAOA,GAAQ,KAER,KAAK,MAAOA,EAAM,SAAUgS,EAAMD,EAAQ,CAChD,IAAIgO,EAAUlkB,EAAO,WAAYmW,EAAM8N,CAAK,EAC5C/N,EAAM,KAAO,UAAW,CACvBlW,EAAO,aAAckkB,CAAQ,CAC9B,CACD,CAAE,CACH,EAGE,UAAW,CACZ,IAAIra,EAAQ3I,EAAS,cAAe,OAAQ,EAC3CuH,EAASvH,EAAS,cAAe,QAAS,EAC1CmiB,EAAM5a,EAAO,YAAavH,EAAS,cAAe,QAAS,CAAE,EAE9D2I,EAAM,KAAO,WAIb/I,EAAQ,QAAU+I,EAAM,QAAU,GAIlC/I,EAAQ,YAAcuiB,EAAI,SAI1BxZ,EAAQ3I,EAAS,cAAe,OAAQ,EACxC2I,EAAM,MAAQ,IACdA,EAAM,KAAO,QACb/I,EAAQ,WAAa+I,EAAM,QAAU,GACtC,EAAI,EAGJ,IAAIsa,GACHC,GAAatiB,EAAO,KAAK,WAE1BA,EAAO,GAAG,OAAQ,CACjB,KAAM,SAAUY,EAAMuB,EAAQ,CAC7B,OAAOuQ,GAAQ,KAAM1S,EAAO,KAAMY,EAAMuB,EAAO,UAAU,OAAS,CAAE,CACrE,EAEA,WAAY,SAAUvB,EAAO,CAC5B,OAAO,KAAK,KAAM,UAAW,CAC5BZ,EAAO,WAAY,KAAMY,CAAK,CAC/B,CAAE,CACH,CACD,CAAE,EAEFZ,EAAO,OAAQ,CACd,KAAM,SAAUO,EAAMK,EAAMuB,EAAQ,CACnC,IAAI9B,EAAK+T,EACRmO,EAAQhiB,EAAK,SAGd,GAAK,EAAAgiB,IAAU,GAAKA,IAAU,GAAKA,IAAU,GAK7C,IAAK,OAAOhiB,EAAK,aAAiB,IACjC,OAAOP,EAAO,KAAMO,EAAMK,EAAMuB,CAAM,EAUvC,IALKogB,IAAU,GAAK,CAACviB,EAAO,SAAUO,CAAK,KAC1C6T,EAAQpU,EAAO,UAAWY,EAAK,YAAY,CAAE,IAC1CZ,EAAO,KAAK,MAAM,KAAK,KAAMY,CAAK,EAAIyhB,GAAW,SAGhDlgB,IAAU,OAAY,CAC1B,GAAKA,IAAU,KAAO,CACrBnC,EAAO,WAAYO,EAAMK,CAAK,EAC9B,MACD,CAEA,OAAKwT,GAAS,QAASA,IACpB/T,EAAM+T,EAAM,IAAK7T,EAAM4B,EAAOvB,CAAK,KAAQ,OACtCP,GAGRE,EAAK,aAAcK,EAAMuB,EAAQ,EAAG,EAC7BA,EACR,CAEA,OAAKiS,GAAS,QAASA,IAAW/T,EAAM+T,EAAM,IAAK7T,EAAMK,CAAK,KAAQ,KAC9DP,GAGRA,EAAML,EAAO,KAAK,KAAMO,EAAMK,CAAK,EAG5BP,GAAc,QACtB,EAEA,UAAW,CACV,KAAM,CACL,IAAK,SAAUE,EAAM4B,EAAQ,CAC5B,GAAK,CAACnD,EAAQ,YAAcmD,IAAU,SACrCG,EAAU/B,EAAM,OAAQ,EAAI,CAC5B,IAAIZ,EAAMY,EAAK,MACf,OAAAA,EAAK,aAAc,OAAQ4B,CAAM,EAC5BxC,IACJY,EAAK,MAAQZ,GAEPwC,CACR,CACD,CACD,CACD,EAEA,WAAY,SAAU5B,EAAM4B,EAAQ,CACnC,IAAIvB,EACHlB,EAAI,EAIJ8iB,EAAYrgB,GAASA,EAAM,MAAO6M,CAAc,EAEjD,GAAKwT,GAAajiB,EAAK,WAAa,EACnC,KAAUK,EAAO4hB,EAAW9iB,GAAI,GAC/Ba,EAAK,gBAAiBK,CAAK,CAG9B,CACD,CAAE,EAGFyhB,GAAW,CACV,IAAK,SAAU9hB,EAAM4B,EAAOvB,EAAO,CAClC,OAAKuB,IAAU,GAGdnC,EAAO,WAAYO,EAAMK,CAAK,EAE9BL,EAAK,aAAcK,EAAMA,CAAK,EAExBA,CACR,CACD,EAEAZ,EAAO,KAAMA,EAAO,KAAK,MAAM,KAAK,OAAO,MAAO,MAAO,EAAG,SAAUoC,EAAIxB,EAAO,CAChF,IAAI6hB,EAASH,GAAY1hB,CAAK,GAAKZ,EAAO,KAAK,KAE/CsiB,GAAY1hB,CAAK,EAAI,SAAUL,EAAMK,EAAM8hB,EAAQ,CAClD,IAAIriB,EAAKyY,EACR6J,EAAgB/hB,EAAK,YAAY,EAElC,OAAM8hB,IAGL5J,EAASwJ,GAAYK,CAAc,EACnCL,GAAYK,CAAc,EAAItiB,EAC9BA,EAAMoiB,EAAQliB,EAAMK,EAAM8hB,CAAM,GAAK,KACpCC,EACA,KACDL,GAAYK,CAAc,EAAI7J,GAExBzY,CACR,CACD,CAAE,EAKF,IAAIuiB,GAAa,sCAChBC,GAAa,gBAEd7iB,EAAO,GAAG,OAAQ,CACjB,KAAM,SAAUY,EAAMuB,EAAQ,CAC7B,OAAOuQ,GAAQ,KAAM1S,EAAO,KAAMY,EAAMuB,EAAO,UAAU,OAAS,CAAE,CACrE,EAEA,WAAY,SAAUvB,EAAO,CAC5B,OAAO,KAAK,KAAM,UAAW,CAC5B,OAAO,KAAMZ,EAAO,QAASY,CAAK,GAAKA,CAAK,CAC7C,CAAE,CACH,CACD,CAAE,EAEFZ,EAAO,OAAQ,CACd,KAAM,SAAUO,EAAMK,EAAMuB,EAAQ,CACnC,IAAI9B,EAAK+T,EACRmO,EAAQhiB,EAAK,SAGd,GAAK,EAAAgiB,IAAU,GAAKA,IAAU,GAAKA,IAAU,GAW7C,OAPKA,IAAU,GAAK,CAACviB,EAAO,SAAUO,CAAK,KAG1CK,EAAOZ,EAAO,QAASY,CAAK,GAAKA,EACjCwT,EAAQpU,EAAO,UAAWY,CAAK,GAG3BuB,IAAU,OACTiS,GAAS,QAASA,IACpB/T,EAAM+T,EAAM,IAAK7T,EAAM4B,EAAOvB,CAAK,KAAQ,OACtCP,EAGCE,EAAMK,CAAK,EAAIuB,EAGpBiS,GAAS,QAASA,IAAW/T,EAAM+T,EAAM,IAAK7T,EAAMK,CAAK,KAAQ,KAC9DP,EAGDE,EAAMK,CAAK,CACnB,EAEA,UAAW,CACV,SAAU,CACT,IAAK,SAAUL,EAAO,CAMrB,IAAIuiB,EAAW9iB,EAAO,KAAK,KAAMO,EAAM,UAAW,EAElD,OAAKuiB,EACG,SAAUA,EAAU,EAAG,EAI9BF,GAAW,KAAMriB,EAAK,QAAS,GAC/BsiB,GAAW,KAAMtiB,EAAK,QAAS,GAC/BA,EAAK,KAEE,EAGD,EACR,CACD,CACD,EAEA,QAAS,CACR,IAAO,UACP,MAAS,WACV,CACD,CAAE,EAUIvB,EAAQ,cACbgB,EAAO,UAAU,SAAW,CAC3B,IAAK,SAAUO,EAAO,CAIrB,IAAIiJ,EAASjJ,EAAK,WAClB,OAAKiJ,GAAUA,EAAO,YACrBA,EAAO,WAAW,cAEZ,IACR,EACA,IAAK,SAAUjJ,EAAO,CAIrB,IAAIiJ,EAASjJ,EAAK,WACbiJ,IACJA,EAAO,cAEFA,EAAO,YACXA,EAAO,WAAW,cAGrB,CACD,GAGDxJ,EAAO,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,iBACD,EAAG,UAAW,CACbA,EAAO,QAAS,KAAK,YAAY,CAAE,EAAI,IACxC,CAAE,EAOD,SAAS+iB,GAAkB5gB,EAAQ,CAClC,IAAIuI,EAASvI,EAAM,MAAO6M,CAAc,GAAK,CAAC,EAC9C,OAAOtE,EAAO,KAAM,GAAI,CACzB,CAGD,SAASsY,GAAUziB,EAAO,CACzB,OAAOA,EAAK,cAAgBA,EAAK,aAAc,OAAQ,GAAK,EAC7D,CAEA,SAAS0iB,GAAgB9gB,EAAQ,CAChC,OAAK,MAAM,QAASA,CAAM,EAClBA,EAEH,OAAOA,GAAU,SACdA,EAAM,MAAO6M,CAAc,GAAK,CAAC,EAElC,CAAC,CACT,CAEAhP,EAAO,GAAG,OAAQ,CACjB,SAAU,SAAUmC,EAAQ,CAC3B,IAAI+gB,EAAYpU,EAAKqU,EAAUrb,EAAWpI,EAAG0jB,EAE7C,OAAKnkB,EAAYkD,CAAM,EACf,KAAK,KAAM,SAAUzB,EAAI,CAC/BV,EAAQ,IAAK,EAAE,SAAUmC,EAAM,KAAM,KAAMzB,EAAGsiB,GAAU,IAAK,CAAE,CAAE,CAClE,CAAE,GAGHE,EAAaD,GAAgB9gB,CAAM,EAE9B+gB,EAAW,OACR,KAAK,KAAM,UAAW,CAI5B,GAHAC,EAAWH,GAAU,IAAK,EAC1BlU,EAAM,KAAK,WAAa,GAAO,IAAMiU,GAAkBI,CAAS,EAAI,IAE/DrU,EAAM,CACV,IAAMpP,EAAI,EAAGA,EAAIwjB,EAAW,OAAQxjB,IACnCoI,EAAYob,EAAYxjB,CAAE,EACrBoP,EAAI,QAAS,IAAMhH,EAAY,GAAI,EAAI,IAC3CgH,GAAOhH,EAAY,KAKrBsb,EAAaL,GAAkBjU,CAAI,EAC9BqU,IAAaC,GACjB,KAAK,aAAc,QAASA,CAAW,CAEzC,CACD,CAAE,EAGI,KACR,EAEA,YAAa,SAAUjhB,EAAQ,CAC9B,IAAI+gB,EAAYpU,EAAKqU,EAAUrb,EAAWpI,EAAG0jB,EAE7C,OAAKnkB,EAAYkD,CAAM,EACf,KAAK,KAAM,SAAUzB,EAAI,CAC/BV,EAAQ,IAAK,EAAE,YAAamC,EAAM,KAAM,KAAMzB,EAAGsiB,GAAU,IAAK,CAAE,CAAE,CACrE,CAAE,EAGG,UAAU,QAIhBE,EAAaD,GAAgB9gB,CAAM,EAE9B+gB,EAAW,OACR,KAAK,KAAM,UAAW,CAM5B,GALAC,EAAWH,GAAU,IAAK,EAG1BlU,EAAM,KAAK,WAAa,GAAO,IAAMiU,GAAkBI,CAAS,EAAI,IAE/DrU,EAAM,CACV,IAAMpP,EAAI,EAAGA,EAAIwjB,EAAW,OAAQxjB,IAInC,IAHAoI,EAAYob,EAAYxjB,CAAE,EAGlBoP,EAAI,QAAS,IAAMhH,EAAY,GAAI,EAAI,IAC9CgH,EAAMA,EAAI,QAAS,IAAMhH,EAAY,IAAK,GAAI,EAKhDsb,EAAaL,GAAkBjU,CAAI,EAC9BqU,IAAaC,GACjB,KAAK,aAAc,QAASA,CAAW,CAEzC,CACD,CAAE,EAGI,MA/BC,KAAK,KAAM,QAAS,EAAG,CAgChC,EAEA,YAAa,SAAUjhB,EAAOkhB,EAAW,CACxC,IAAIH,EAAYpb,EAAWpI,EAAG2O,EAC7BhM,EAAO,OAAOF,EACdmhB,EAAejhB,IAAS,UAAY,MAAM,QAASF,CAAM,EAE1D,OAAKlD,EAAYkD,CAAM,EACf,KAAK,KAAM,SAAUzC,EAAI,CAC/BM,EAAQ,IAAK,EAAE,YACdmC,EAAM,KAAM,KAAMzC,EAAGsjB,GAAU,IAAK,EAAGK,CAAS,EAChDA,CACD,CACD,CAAE,EAGE,OAAOA,GAAa,WAAaC,EAC9BD,EAAW,KAAK,SAAUlhB,CAAM,EAAI,KAAK,YAAaA,CAAM,GAGpE+gB,EAAaD,GAAgB9gB,CAAM,EAE5B,KAAK,KAAM,UAAW,CAC5B,GAAKmhB,EAKJ,IAFAjV,EAAOrO,EAAQ,IAAK,EAEdN,EAAI,EAAGA,EAAIwjB,EAAW,OAAQxjB,IACnCoI,EAAYob,EAAYxjB,CAAE,EAGrB2O,EAAK,SAAUvG,CAAU,EAC7BuG,EAAK,YAAavG,CAAU,EAE5BuG,EAAK,SAAUvG,CAAU,OAKhB3F,IAAU,QAAaE,IAAS,aAC3CyF,EAAYkb,GAAU,IAAK,EACtBlb,GAGJ8L,GAAS,IAAK,KAAM,gBAAiB9L,CAAU,EAO3C,KAAK,cACT,KAAK,aAAc,QAClBA,GAAa3F,IAAU,GACtB,GACAyR,GAAS,IAAK,KAAM,eAAgB,GAAK,EAC3C,EAGH,CAAE,EACH,EAEA,SAAU,SAAU3T,EAAW,CAC9B,IAAI6H,EAAWvH,EACdb,EAAI,EAGL,IADAoI,EAAY,IAAM7H,EAAW,IACnBM,EAAO,KAAMb,GAAI,GAC1B,GAAKa,EAAK,WAAa,IACpB,IAAMwiB,GAAkBC,GAAUziB,CAAK,CAAE,EAAI,KAAM,QAASuH,CAAU,EAAI,GAC5E,MAAO,GAIT,MAAO,EACR,CACD,CAAE,EAKF,IAAIyb,GAAU,MAEdvjB,EAAO,GAAG,OAAQ,CACjB,IAAK,SAAUmC,EAAQ,CACtB,IAAIiS,EAAO/T,EAAKma,EACfja,EAAO,KAAM,CAAE,EAEhB,OAAM,UAAU,QA0BhBia,EAAkBvb,EAAYkD,CAAM,EAE7B,KAAK,KAAM,SAAUzC,EAAI,CAC/B,IAAIC,EAEC,KAAK,WAAa,IAIlB6a,EACJ7a,EAAMwC,EAAM,KAAM,KAAMzC,EAAGM,EAAQ,IAAK,EAAE,IAAI,CAAE,EAEhDL,EAAMwC,EAIFxC,GAAO,KACXA,EAAM,GAEK,OAAOA,GAAQ,SAC1BA,GAAO,GAEI,MAAM,QAASA,CAAI,IAC9BA,EAAMK,EAAO,IAAKL,EAAK,SAAUwC,EAAQ,CACxC,OAAOA,GAAS,KAAO,GAAKA,EAAQ,EACrC,CAAE,GAGHiS,EAAQpU,EAAO,SAAU,KAAK,IAAK,GAAKA,EAAO,SAAU,KAAK,SAAS,YAAY,CAAE,GAGhF,CAACoU,GAAS,EAAG,QAASA,IAAWA,EAAM,IAAK,KAAMzU,EAAK,OAAQ,IAAM,UACzE,KAAK,MAAQA,GAEf,CAAE,GA3DIY,GACJ6T,EAAQpU,EAAO,SAAUO,EAAK,IAAK,GAClCP,EAAO,SAAUO,EAAK,SAAS,YAAY,CAAE,EAEzC6T,GACJ,QAASA,IACP/T,EAAM+T,EAAM,IAAK7T,EAAM,OAAQ,KAAQ,OAElCF,GAGRA,EAAME,EAAK,MAGN,OAAOF,GAAQ,SACZA,EAAI,QAASkjB,GAAS,EAAG,EAI1BljB,GAAc,KAGtB,MAsCF,CACD,CAAE,EAEFL,EAAO,OAAQ,CACd,SAAU,CACT,OAAQ,CACP,IAAK,SAAUO,EAAO,CAErB,IAAIZ,EAAMK,EAAO,KAAK,KAAMO,EAAM,OAAQ,EAC1C,OAAOZ,GAONojB,GAAkB/iB,EAAO,KAAMO,CAAK,CAAE,CACxC,CACD,EACA,OAAQ,CACP,IAAK,SAAUA,EAAO,CACrB,IAAI4B,EAAOqhB,EAAQ9jB,EAClBiB,EAAUJ,EAAK,QACfuP,EAAQvP,EAAK,cACb+W,EAAM/W,EAAK,OAAS,aACpBwV,EAASuB,EAAM,KAAO,CAAC,EACvBmM,EAAMnM,EAAMxH,EAAQ,EAAInP,EAAQ,OAUjC,IARKmP,EAAQ,EACZpQ,EAAI+jB,EAGJ/jB,EAAI4X,EAAMxH,EAAQ,EAIXpQ,EAAI+jB,EAAK/jB,IAKhB,GAJA8jB,EAAS7iB,EAASjB,CAAE,GAIb8jB,EAAO,UAAY9jB,IAAMoQ,IAG9B,CAAC0T,EAAO,WACN,CAACA,EAAO,WAAW,UACpB,CAAClhB,EAAUkhB,EAAO,WAAY,UAAW,GAAM,CAMjD,GAHArhB,EAAQnC,EAAQwjB,CAAO,EAAE,IAAI,EAGxBlM,EACJ,OAAOnV,EAIR4T,EAAO,KAAM5T,CAAM,CACpB,CAGD,OAAO4T,CACR,EAEA,IAAK,SAAUxV,EAAM4B,EAAQ,CAM5B,QALIuhB,EAAWF,EACd7iB,EAAUJ,EAAK,QACfwV,EAAS/V,EAAO,UAAWmC,CAAM,EACjCzC,EAAIiB,EAAQ,OAELjB,KACP8jB,EAAS7iB,EAASjB,CAAE,GAIf8jB,EAAO,SACXxjB,EAAO,QAASA,EAAO,SAAS,OAAO,IAAKwjB,CAAO,EAAGzN,CAAO,EAAI,MAEjE2N,EAAY,IAOd,OAAMA,IACLnjB,EAAK,cAAgB,IAEfwV,CACR,CACD,CACD,CACD,CAAE,EAGF/V,EAAO,KAAM,CAAE,QAAS,UAAW,EAAG,UAAW,CAChDA,EAAO,SAAU,IAAK,EAAI,CACzB,IAAK,SAAUO,EAAM4B,EAAQ,CAC5B,GAAK,MAAM,QAASA,CAAM,EACzB,OAAS5B,EAAK,QAAUP,EAAO,QAASA,EAAQO,CAAK,EAAE,IAAI,EAAG4B,CAAM,EAAI,EAE1E,CACD,EACMnD,EAAQ,UACbgB,EAAO,SAAU,IAAK,EAAE,IAAM,SAAUO,EAAO,CAC9C,OAAOA,EAAK,aAAc,OAAQ,IAAM,KAAO,KAAOA,EAAK,KAC5D,EAEF,CAAE,EAMF,IAAIojB,GAAWzlB,EAAO,SAElB0lB,GAAQ,CAAE,KAAM,KAAK,IAAI,CAAE,EAE3BC,GAAW,KAKf7jB,EAAO,SAAW,SAAU0T,EAAO,CAClC,IAAIvK,EAAK2a,EACT,GAAK,CAACpQ,GAAQ,OAAOA,GAAS,SAC7B,OAAO,KAKR,GAAI,CACHvK,EAAQ,IAAIjL,EAAO,UAAU,EAAI,gBAAiBwV,EAAM,UAAW,CACpE,MAAc,CAAC,CAEf,OAAAoQ,EAAkB3a,GAAOA,EAAI,qBAAsB,aAAc,EAAG,CAAE,GACjE,CAACA,GAAO2a,IACZ9jB,EAAO,MAAO,iBACb8jB,EACC9jB,EAAO,IAAK8jB,EAAgB,WAAY,SAAU5c,EAAK,CACtD,OAAOA,EAAG,WACX,CAAE,EAAE,KAAM;AAAA,CAAK,EACfwM,EACA,EAEIvK,CACR,EAGA,IAAI4a,GAAc,kCACjBC,GAA0B,SAAUpS,EAAI,CACvCA,EAAE,gBAAgB,CACnB,EAED5R,EAAO,OAAQA,EAAO,MAAO,CAE5B,QAAS,SAAUwX,EAAO9D,EAAMnT,EAAM0jB,EAAe,CAEpD,IAAIvkB,EAAGoP,EAAKyF,EAAK2P,EAAYC,EAAQrL,EAAQvH,EAAS6S,EACrDC,EAAY,CAAE9jB,GAAQnB,CAAS,EAC/BiD,GAAOxD,EAAO,KAAM2Y,EAAO,MAAO,EAAIA,EAAM,KAAOA,EACnDO,GAAalZ,EAAO,KAAM2Y,EAAO,WAAY,EAAIA,EAAM,UAAU,MAAO,GAAI,EAAI,CAAC,EAKlF,GAHA1I,EAAMsV,EAAc7P,EAAMhU,EAAOA,GAAQnB,EAGpC,EAAAmB,EAAK,WAAa,GAAKA,EAAK,WAAa,IAKzC,CAAAwjB,GAAY,KAAM1hB,GAAOrC,EAAO,MAAM,SAAU,IAIhDqC,GAAK,QAAS,GAAI,EAAI,KAG1B0V,GAAa1V,GAAK,MAAO,GAAI,EAC7BA,GAAO0V,GAAW,MAAM,EACxBA,GAAW,KAAK,GAEjBoM,EAAS9hB,GAAK,QAAS,GAAI,EAAI,GAAK,KAAOA,GAG3CmV,EAAQA,EAAOxX,EAAO,OAAQ,EAC7BwX,EACA,IAAIxX,EAAO,MAAOqC,GAAM,OAAOmV,GAAU,UAAYA,CAAM,EAG5DA,EAAM,UAAYyM,EAAe,EAAI,EACrCzM,EAAM,UAAYO,GAAW,KAAM,GAAI,EACvCP,EAAM,WAAaA,EAAM,UACxB,IAAI,OAAQ,UAAYO,GAAW,KAAM,eAAgB,EAAI,SAAU,EACvE,KAGDP,EAAM,OAAS,OACTA,EAAM,SACXA,EAAM,OAASjX,GAIhBmT,EAAOA,GAAQ,KACd,CAAE8D,CAAM,EACRxX,EAAO,UAAW0T,EAAM,CAAE8D,CAAM,CAAE,EAGnCjG,EAAUvR,EAAO,MAAM,QAASqC,EAAK,GAAK,CAAC,EACtC,GAAC4hB,GAAgB1S,EAAQ,SAAWA,EAAQ,QAAQ,MAAOhR,EAAMmT,CAAK,IAAM,KAMjF,IAAK,CAACuQ,GAAgB,CAAC1S,EAAQ,UAAY,CAACpS,EAAUoB,CAAK,EAAI,CAM9D,IAJA2jB,EAAa3S,EAAQ,cAAgBlP,GAC/B0hB,GAAY,KAAMG,EAAa7hB,EAAK,IACzCyM,EAAMA,EAAI,YAEHA,EAAKA,EAAMA,EAAI,WACtBuV,EAAU,KAAMvV,CAAI,EACpByF,EAAMzF,EAIFyF,KAAUhU,EAAK,eAAiBnB,IACpCilB,EAAU,KAAM9P,EAAI,aAAeA,EAAI,cAAgBrW,CAAO,CAEhE,CAIA,IADAwB,EAAI,GACMoP,EAAMuV,EAAW3kB,GAAI,IAAO,CAAC8X,EAAM,qBAAqB,GACjE4M,EAActV,EACd0I,EAAM,KAAO9X,EAAI,EAChBwkB,EACA3S,EAAQ,UAAYlP,GAGrByW,GAAWlF,GAAS,IAAK9E,EAAK,QAAS,GAAK,OAAO,OAAQ,IAAK,GAAK0I,EAAM,IAAK,GAC/E5D,GAAS,IAAK9E,EAAK,QAAS,EACxBgK,GACJA,EAAO,MAAOhK,EAAK4E,CAAK,EAIzBoF,EAASqL,GAAUrV,EAAKqV,CAAO,EAC1BrL,GAAUA,EAAO,OAASvF,GAAYzE,CAAI,IAC9C0I,EAAM,OAASsB,EAAO,MAAOhK,EAAK4E,CAAK,EAClC8D,EAAM,SAAW,IACrBA,EAAM,eAAe,GAIxB,OAAAA,EAAM,KAAOnV,GAGR,CAAC4hB,GAAgB,CAACzM,EAAM,mBAAmB,IAExC,CAACjG,EAAQ,UACfA,EAAQ,SAAS,MAAO8S,EAAU,IAAI,EAAG3Q,CAAK,IAAM,KACpDH,GAAYhT,CAAK,GAIZ4jB,GAAUllB,EAAYsB,EAAM8B,EAAK,CAAE,GAAK,CAAClD,EAAUoB,CAAK,IAG5DgU,EAAMhU,EAAM4jB,CAAO,EAEd5P,IACJhU,EAAM4jB,CAAO,EAAI,MAIlBnkB,EAAO,MAAM,UAAYqC,GAEpBmV,EAAM,qBAAqB,GAC/B4M,EAAY,iBAAkB/hB,GAAM2hB,EAAwB,EAG7DzjB,EAAM8B,EAAK,EAAE,EAERmV,EAAM,qBAAqB,GAC/B4M,EAAY,oBAAqB/hB,GAAM2hB,EAAwB,EAGhEhkB,EAAO,MAAM,UAAY,OAEpBuU,IACJhU,EAAM4jB,CAAO,EAAI5P,IAMdiD,EAAM,OACd,EAIA,SAAU,SAAUnV,EAAM9B,EAAMiX,EAAQ,CACvC,IAAI5F,EAAI5R,EAAO,OACd,IAAIA,EAAO,MACXwX,EACA,CACC,KAAMnV,EACN,YAAa,EACd,CACD,EAEArC,EAAO,MAAM,QAAS4R,EAAG,KAAMrR,CAAK,CACrC,CAED,CAAE,EAEFP,EAAO,GAAG,OAAQ,CAEjB,QAAS,SAAUqC,EAAMqR,EAAO,CAC/B,OAAO,KAAK,KAAM,UAAW,CAC5B1T,EAAO,MAAM,QAASqC,EAAMqR,EAAM,IAAK,CACxC,CAAE,CACH,EACA,eAAgB,SAAUrR,EAAMqR,EAAO,CACtC,IAAInT,EAAO,KAAM,CAAE,EACnB,GAAKA,EACJ,OAAOP,EAAO,MAAM,QAASqC,EAAMqR,EAAMnT,EAAM,EAAK,CAEtD,CACD,CAAE,EAGF,IACC+jB,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa5F,EAAQ5f,EAAKylB,EAAa9U,EAAM,CACrD,IAAIjP,EAEJ,GAAK,MAAM,QAAS1B,CAAI,EAGvBc,EAAO,KAAMd,EAAK,SAAUQ,EAAGsQ,EAAI,CAC7B2U,GAAeL,GAAS,KAAMxF,CAAO,EAGzCjP,EAAKiP,EAAQ9O,CAAE,EAKf0U,GACC5F,EAAS,KAAQ,OAAO9O,GAAM,UAAYA,GAAK,KAAOtQ,EAAI,IAAO,IACjEsQ,EACA2U,EACA9U,CACD,CAEF,CAAE,UAES,CAAC8U,GAAe9kB,EAAQX,CAAI,IAAM,SAG7C,IAAM0B,KAAQ1B,EACbwlB,GAAa5F,EAAS,IAAMle,EAAO,IAAK1B,EAAK0B,CAAK,EAAG+jB,EAAa9U,CAAI,OAMvEA,EAAKiP,EAAQ5f,CAAI,CAEnB,CAIAc,EAAO,MAAQ,SAAU4C,EAAG+hB,EAAc,CACzC,IAAI7F,EACH8F,EAAI,CAAC,EACL/U,EAAM,SAAU/I,EAAK+d,EAAkB,CAGtC,IAAI1iB,EAAQlD,EAAY4lB,CAAgB,EACvCA,EAAgB,EAChBA,EAEDD,EAAGA,EAAE,MAAO,EAAI,mBAAoB9d,CAAI,EAAI,IAC3C,mBAAoB3E,GAAgB,EAAW,CACjD,EAED,GAAKS,GAAK,KACT,MAAO,GAIR,GAAK,MAAM,QAASA,CAAE,GAAOA,EAAE,QAAU,CAAC5C,EAAO,cAAe4C,CAAE,EAGjE5C,EAAO,KAAM4C,EAAG,UAAW,CAC1BiN,EAAK,KAAK,KAAM,KAAK,KAAM,CAC5B,CAAE,MAMF,KAAMiP,KAAUlc,EACf8hB,GAAa5F,EAAQlc,EAAGkc,CAAO,EAAG6F,EAAa9U,CAAI,EAKrD,OAAO+U,EAAE,KAAM,GAAI,CACpB,EAEA5kB,EAAO,GAAG,OAAQ,CACjB,UAAW,UAAW,CACrB,OAAOA,EAAO,MAAO,KAAK,eAAe,CAAE,CAC5C,EACA,eAAgB,UAAW,CAC1B,OAAO,KAAK,IAAK,UAAW,CAG3B,IAAIkI,EAAWlI,EAAO,KAAM,KAAM,UAAW,EAC7C,OAAOkI,EAAWlI,EAAO,UAAWkI,CAAS,EAAI,IAClD,CAAE,EAAE,OAAQ,UAAW,CACtB,IAAI7F,EAAO,KAAK,KAGhB,OAAO,KAAK,MAAQ,CAACrC,EAAQ,IAAK,EAAE,GAAI,WAAY,GACnDykB,GAAa,KAAM,KAAK,QAAS,GAAK,CAACD,GAAgB,KAAMniB,CAAK,IAChE,KAAK,SAAW,CAAC2T,GAAe,KAAM3T,CAAK,EAC/C,CAAE,EAAE,IAAK,SAAUD,EAAI7B,EAAO,CAC7B,IAAIZ,EAAMK,EAAQ,IAAK,EAAE,IAAI,EAE7B,OAAKL,GAAO,KACJ,KAGH,MAAM,QAASA,CAAI,EAChBK,EAAO,IAAKL,EAAK,SAAUA,EAAM,CACvC,MAAO,CAAE,KAAMY,EAAK,KAAM,MAAOZ,EAAI,QAAS4kB,GAAO;AAAA,CAAO,CAAE,CAC/D,CAAE,EAGI,CAAE,KAAMhkB,EAAK,KAAM,MAAOZ,EAAI,QAAS4kB,GAAO;AAAA,CAAO,CAAE,CAC/D,CAAE,EAAE,IAAI,CACT,CACD,CAAE,EAGF,IACCO,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAGXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QAWZC,GAAa,CAAC,EAOdC,GAAa,CAAC,EAGdC,GAAW,KAAK,OAAQ,GAAI,EAG5BC,GAAepmB,EAAS,cAAe,GAAI,EAE5ComB,GAAa,KAAO7B,GAAS,KAG7B,SAAS8B,GAA6BC,EAAY,CAGjD,OAAO,SAAUC,EAAoBnV,EAAO,CAEtC,OAAOmV,GAAuB,WAClCnV,EAAOmV,EACPA,EAAqB,KAGtB,IAAIC,EACHlmB,EAAI,EACJmmB,EAAYF,EAAmB,YAAY,EAAE,MAAO3W,CAAc,GAAK,CAAC,EAEzE,GAAK/P,EAAYuR,CAAK,EAGrB,KAAUoV,EAAWC,EAAWnmB,GAAI,GAG9BkmB,EAAU,CAAE,IAAM,KACtBA,EAAWA,EAAS,MAAO,CAAE,GAAK,KAChCF,EAAWE,CAAS,EAAIF,EAAWE,CAAS,GAAK,CAAC,GAAI,QAASpV,CAAK,IAIpEkV,EAAWE,CAAS,EAAIF,EAAWE,CAAS,GAAK,CAAC,GAAI,KAAMpV,CAAK,CAIvE,CACD,CAGA,SAASsV,GAA+BJ,EAAW/kB,EAASolB,EAAiBC,EAAQ,CAEpF,IAAIC,EAAY,CAAC,EAChBC,EAAqBR,IAAcJ,GAEpC,SAASa,EAASP,EAAW,CAC5B,IAAIQ,EACJ,OAAAH,EAAWL,CAAS,EAAI,GACxB5lB,EAAO,KAAM0lB,EAAWE,CAAS,GAAK,CAAC,EAAG,SAAUzW,EAAGkX,EAAqB,CAC3E,IAAIC,EAAsBD,EAAoB1lB,EAASolB,EAAiBC,CAAM,EAC9E,GAAK,OAAOM,GAAwB,UACnC,CAACJ,GAAoB,CAACD,EAAWK,CAAoB,EAErD,OAAA3lB,EAAQ,UAAU,QAAS2lB,CAAoB,EAC/CH,EAASG,CAAoB,EACtB,GACD,GAAKJ,EACX,MAAO,EAAGE,EAAWE,EAEvB,CAAE,EACKF,CACR,CAEA,OAAOD,EAASxlB,EAAQ,UAAW,CAAE,CAAE,GAAK,CAACslB,EAAW,GAAI,GAAKE,EAAS,GAAI,CAC/E,CAKA,SAASI,GAAYtlB,EAAQJ,EAAM,CAClC,IAAIiG,EAAK3F,EACRqlB,EAAcxmB,EAAO,aAAa,aAAe,CAAC,EAEnD,IAAM8G,KAAOjG,EACPA,EAAKiG,CAAI,IAAM,UACjB0f,EAAa1f,CAAI,EAAI7F,EAAWE,IAAUA,EAAO,CAAC,IAAS2F,CAAI,EAAIjG,EAAKiG,CAAI,GAGhF,OAAK3F,GACJnB,EAAO,OAAQ,GAAMiB,EAAQE,CAAK,EAG5BF,CACR,CAMA,SAASwlB,GAAqB7B,EAAGoB,EAAOU,EAAY,CAOnD,QALIC,EAAItkB,EAAMukB,EAAeC,EAC5BC,EAAWlC,EAAE,SACbiB,EAAYjB,EAAE,UAGPiB,EAAW,CAAE,IAAM,KAC1BA,EAAU,MAAM,EACXc,IAAO,SACXA,EAAK/B,EAAE,UAAYoB,EAAM,kBAAmB,cAAe,GAK7D,GAAKW,GACJ,IAAMtkB,KAAQykB,EACb,GAAKA,EAAUzkB,CAAK,GAAKykB,EAAUzkB,CAAK,EAAE,KAAMskB,CAAG,EAAI,CACtDd,EAAU,QAASxjB,CAAK,EACxB,KACD,EAKF,GAAKwjB,EAAW,CAAE,IAAKa,EACtBE,EAAgBf,EAAW,CAAE,MACvB,CAGN,IAAMxjB,KAAQqkB,EAAY,CACzB,GAAK,CAACb,EAAW,CAAE,GAAKjB,EAAE,WAAYviB,EAAO,IAAMwjB,EAAW,CAAE,CAAE,EAAI,CACrEe,EAAgBvkB,EAChB,KACD,CACMwkB,IACLA,EAAgBxkB,EAElB,CAGAukB,EAAgBA,GAAiBC,CAClC,CAKA,GAAKD,EACJ,OAAKA,IAAkBf,EAAW,CAAE,GACnCA,EAAU,QAASe,CAAc,EAE3BF,EAAWE,CAAc,CAElC,CAKA,SAASG,GAAanC,EAAGoC,EAAUhB,EAAOiB,EAAY,CACrD,IAAIC,EAAOC,EAASC,EAAM7S,EAAK8S,EAC9BC,EAAa,CAAC,EAGdzB,EAAYjB,EAAE,UAAU,MAAM,EAG/B,GAAKiB,EAAW,CAAE,EACjB,IAAMuB,KAAQxC,EAAE,WACf0C,EAAYF,EAAK,YAAY,CAAE,EAAIxC,EAAE,WAAYwC,CAAK,EAOxD,IAHAD,EAAUtB,EAAU,MAAM,EAGlBsB,GAcP,GAZKvC,EAAE,eAAgBuC,CAAQ,IAC9BnB,EAAOpB,EAAE,eAAgBuC,CAAQ,CAAE,EAAIH,GAInC,CAACK,GAAQJ,GAAarC,EAAE,aAC5BoC,EAAWpC,EAAE,WAAYoC,EAAUpC,EAAE,QAAS,GAG/CyC,EAAOF,EACPA,EAAUtB,EAAU,MAAM,EAErBsB,GAGJ,GAAKA,IAAY,IAEhBA,EAAUE,UAGCA,IAAS,KAAOA,IAASF,EAAU,CAM9C,GAHAC,EAAOE,EAAYD,EAAO,IAAMF,CAAQ,GAAKG,EAAY,KAAOH,CAAQ,EAGnE,CAACC,GACL,IAAMF,KAASI,EAId,GADA/S,EAAM2S,EAAM,MAAO,GAAI,EAClB3S,EAAK,CAAE,IAAM4S,IAGjBC,EAAOE,EAAYD,EAAO,IAAM9S,EAAK,CAAE,CAAE,GACxC+S,EAAY,KAAO/S,EAAK,CAAE,CAAE,EACxB6S,GAAO,CAGNA,IAAS,GACbA,EAAOE,EAAYJ,CAAM,EAGdI,EAAYJ,CAAM,IAAM,KACnCC,EAAU5S,EAAK,CAAE,EACjBsR,EAAU,QAAStR,EAAK,CAAE,CAAE,GAE7B,KACD,EAMH,GAAK6S,IAAS,GAGb,GAAKA,GAAQxC,EAAE,OACdoC,EAAWI,EAAMJ,CAAS,MAE1B,IAAI,CACHA,EAAWI,EAAMJ,CAAS,CAC3B,OAAUpV,EAAI,CACb,MAAO,CACN,MAAO,cACP,MAAOwV,EAAOxV,EAAI,sBAAwByV,EAAO,OAASF,CAC3D,CACD,CAGH,EAIF,MAAO,CAAE,MAAO,UAAW,KAAMH,CAAS,CAC3C,CAEAhnB,EAAO,OAAQ,CAGd,OAAQ,EAGR,aAAc,CAAC,EACf,KAAM,CAAC,EAEP,aAAc,CACb,IAAK2jB,GAAS,KACd,KAAM,MACN,QAASuB,GAAe,KAAMvB,GAAS,QAAS,EAChD,OAAQ,GACR,YAAa,GACb,MAAO,GACP,YAAa,mDAcb,QAAS,CACR,IAAK4B,GACL,KAAM,aACN,KAAM,YACN,IAAK,4BACL,KAAM,mCACP,EAEA,SAAU,CACT,IAAK,UACL,KAAM,SACN,KAAM,UACP,EAEA,eAAgB,CACf,IAAK,cACL,KAAM,eACN,KAAM,cACP,EAIA,WAAY,CAGX,SAAU,OAGV,YAAa,GAGb,YAAa,KAAK,MAGlB,WAAYvlB,EAAO,QACpB,EAMA,YAAa,CACZ,IAAK,GACL,QAAS,EACV,CACD,EAKA,UAAW,SAAUiB,EAAQsmB,EAAW,CACvC,OAAOA,EAGNhB,GAAYA,GAAYtlB,EAAQjB,EAAO,YAAa,EAAGunB,CAAS,EAGhEhB,GAAYvmB,EAAO,aAAciB,CAAO,CAC1C,EAEA,cAAewkB,GAA6BJ,EAAW,EACvD,cAAeI,GAA6BH,EAAW,EAGvD,KAAM,SAAUkC,EAAK7mB,EAAU,CAGzB,OAAO6mB,GAAQ,WACnB7mB,EAAU6mB,EACVA,EAAM,QAIP7mB,EAAUA,GAAW,CAAC,EAEtB,IAAI8mB,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGArV,EAGAsV,EAGAroB,EAGAsoB,EAGApD,EAAI5kB,EAAO,UAAW,CAAC,EAAGW,CAAQ,EAGlCsnB,GAAkBrD,EAAE,SAAWA,EAG/BsD,GAAqBtD,EAAE,UACpBqD,GAAgB,UAAYA,GAAgB,QAC9CjoB,EAAQioB,EAAgB,EACxBjoB,EAAO,MAGR4Q,GAAW5Q,EAAO,SAAS,EAC3BmoB,GAAmBnoB,EAAO,UAAW,aAAc,EAGnDooB,GAAaxD,EAAE,YAAc,CAAC,EAG9ByD,GAAiB,CAAC,EAClBC,GAAsB,CAAC,EAGvBC,GAAW,WAGXvC,GAAQ,CACP,WAAY,EAGZ,kBAAmB,SAAUlf,GAAM,CAClC,IAAIV,GACJ,GAAKqM,EAAY,CAChB,GAAK,CAACmV,EAEL,IADAA,EAAkB,CAAC,EACTxhB,GAAQ6e,GAAS,KAAM0C,CAAsB,GACtDC,EAAiBxhB,GAAO,CAAE,EAAE,YAAY,EAAI,GAAI,GAC7CwhB,EAAiBxhB,GAAO,CAAE,EAAE,YAAY,EAAI,GAAI,GAAK,CAAC,GACtD,OAAQA,GAAO,CAAE,CAAE,EAGxBA,GAAQwhB,EAAiB9gB,GAAI,YAAY,EAAI,GAAI,CAClD,CACA,OAAOV,IAAS,KAAO,KAAOA,GAAM,KAAM,IAAK,CAChD,EAGA,sBAAuB,UAAW,CACjC,OAAOqM,EAAYkV,EAAwB,IAC5C,EAGA,iBAAkB,SAAU/mB,GAAMuB,GAAQ,CACzC,OAAKsQ,GAAa,OACjB7R,GAAO0nB,GAAqB1nB,GAAK,YAAY,CAAE,EAC9C0nB,GAAqB1nB,GAAK,YAAY,CAAE,GAAKA,GAC9CynB,GAAgBznB,EAAK,EAAIuB,IAEnB,IACR,EAGA,iBAAkB,SAAUE,GAAO,CAClC,OAAKoQ,GAAa,OACjBmS,EAAE,SAAWviB,IAEP,IACR,EAGA,WAAY,SAAUqJ,GAAM,CAC3B,IAAInM,GACJ,GAAKmM,GACJ,GAAK+G,EAGJuT,GAAM,OAAQta,GAAKsa,GAAM,MAAO,CAAE,MAIlC,KAAMzmB,MAAQmM,GACb0c,GAAY7oB,EAAK,EAAI,CAAE6oB,GAAY7oB,EAAK,EAAGmM,GAAKnM,EAAK,CAAE,EAI1D,OAAO,IACR,EAGA,MAAO,SAAUipB,GAAa,CAC7B,IAAIC,GAAYD,IAAcD,GAC9B,OAAKd,GACJA,EAAU,MAAOgB,EAAU,EAE5B1kB,GAAM,EAAG0kB,EAAU,EACZ,IACR,CACD,EAkBD,GAfA7X,GAAS,QAASoV,EAAM,EAKxBpB,EAAE,MAAU4C,GAAO5C,EAAE,KAAOjB,GAAS,MAAS,IAC5C,QAASyB,GAAWzB,GAAS,SAAW,IAAK,EAG/CiB,EAAE,KAAOjkB,EAAQ,QAAUA,EAAQ,MAAQikB,EAAE,QAAUA,EAAE,KAGzDA,EAAE,WAAcA,EAAE,UAAY,KAAM,YAAY,EAAE,MAAO5V,CAAc,GAAK,CAAE,EAAG,EAG5E4V,EAAE,aAAe,KAAO,CAC5BkD,EAAY1oB,EAAS,cAAe,GAAI,EAKxC,GAAI,CACH0oB,EAAU,KAAOlD,EAAE,IAInBkD,EAAU,KAAOA,EAAU,KAC3BlD,EAAE,YAAcY,GAAa,SAAW,KAAOA,GAAa,MAC3DsC,EAAU,SAAW,KAAOA,EAAU,IACxC,MAAc,CAIblD,EAAE,YAAc,EACjB,CACD,CAWA,GARKA,EAAE,MAAQA,EAAE,aAAe,OAAOA,EAAE,MAAS,WACjDA,EAAE,KAAO5kB,EAAO,MAAO4kB,EAAE,KAAMA,EAAE,WAAY,GAI9CkB,GAA+BT,GAAYT,EAAGjkB,EAASqlB,EAAM,EAGxDvT,EACJ,OAAOuT,GAKR+B,EAAc/nB,EAAO,OAAS4kB,EAAE,OAG3BmD,GAAe/nB,EAAO,WAAa,GACvCA,EAAO,MAAM,QAAS,WAAY,EAInC4kB,EAAE,KAAOA,EAAE,KAAK,YAAY,EAG5BA,EAAE,WAAa,CAACO,GAAW,KAAMP,EAAE,IAAK,EAKxC8C,EAAW9C,EAAE,IAAI,QAASG,GAAO,EAAG,EAG9BH,EAAE,WAwBIA,EAAE,MAAQA,EAAE,cACrBA,EAAE,aAAe,IAAK,QAAS,mCAAoC,IAAM,IAC3EA,EAAE,KAAOA,EAAE,KAAK,QAASE,GAAK,GAAI,IAvBlCkD,EAAWpD,EAAE,IAAI,MAAO8C,EAAS,MAAO,EAGnC9C,EAAE,OAAUA,EAAE,aAAe,OAAOA,EAAE,MAAS,YACnD8C,IAAc7D,GAAO,KAAM6D,CAAS,EAAI,IAAM,KAAQ9C,EAAE,KAGxD,OAAOA,EAAE,MAILA,EAAE,QAAU,KAChB8C,EAAWA,EAAS,QAAS1C,GAAY,IAAK,EAC9CgD,GAAanE,GAAO,KAAM6D,CAAS,EAAI,IAAM,KAAQ,KAAS9D,GAAM,OACnEoE,GAIFpD,EAAE,IAAM8C,EAAWM,GASfpD,EAAE,aACD5kB,EAAO,aAAc0nB,CAAS,GAClC1B,GAAM,iBAAkB,oBAAqBhmB,EAAO,aAAc0nB,CAAS,CAAE,EAEzE1nB,EAAO,KAAM0nB,CAAS,GAC1B1B,GAAM,iBAAkB,gBAAiBhmB,EAAO,KAAM0nB,CAAS,CAAE,IAK9D9C,EAAE,MAAQA,EAAE,YAAcA,EAAE,cAAgB,IAASjkB,EAAQ,cACjEqlB,GAAM,iBAAkB,eAAgBpB,EAAE,WAAY,EAIvDoB,GAAM,iBACL,SACApB,EAAE,UAAW,CAAE,GAAKA,EAAE,QAASA,EAAE,UAAW,CAAE,CAAE,EAC/CA,EAAE,QAASA,EAAE,UAAW,CAAE,CAAE,GACzBA,EAAE,UAAW,CAAE,IAAM,IAAM,KAAOW,GAAW,WAAa,IAC7DX,EAAE,QAAS,GAAI,CACjB,EAGA,IAAMllB,KAAKklB,EAAE,QACZoB,GAAM,iBAAkBtmB,EAAGklB,EAAE,QAASllB,CAAE,CAAE,EAI3C,GAAKklB,EAAE,aACJA,EAAE,WAAW,KAAMqD,GAAiBjC,GAAOpB,CAAE,IAAM,IAASnS,GAG9D,OAAOuT,GAAM,MAAM,EAepB,GAXAuC,GAAW,QAGXJ,GAAiB,IAAKvD,EAAE,QAAS,EACjCoB,GAAM,KAAMpB,EAAE,OAAQ,EACtBoB,GAAM,KAAMpB,EAAE,KAAM,EAGpB6C,EAAY3B,GAA+BR,GAAYV,EAAGjkB,EAASqlB,EAAM,EAGpE,CAACyB,EACL1jB,GAAM,GAAI,cAAe,MACnB,CASN,GARAiiB,GAAM,WAAa,EAGd+B,GACJG,GAAmB,QAAS,WAAY,CAAElC,GAAOpB,CAAE,CAAE,EAIjDnS,EACJ,OAAOuT,GAIHpB,EAAE,OAASA,EAAE,QAAU,IAC3BiD,EAAe3pB,EAAO,WAAY,UAAW,CAC5C8nB,GAAM,MAAO,SAAU,CACxB,EAAGpB,EAAE,OAAQ,GAGd,GAAI,CACHnS,EAAY,GACZgV,EAAU,KAAMY,GAAgBtkB,EAAK,CACtC,OAAU6N,GAAI,CAGb,GAAKa,EACJ,MAAMb,GAIP7N,GAAM,GAAI6N,EAAE,CACb,CACD,CAGA,SAAS7N,GAAM2kB,GAAQC,GAAkBjC,GAAWkC,GAAU,CAC7D,IAAI3B,GAAW4B,GAASxW,GAAO2U,GAAU8B,GACxCN,GAAaG,GAGTlW,IAILA,EAAY,GAGPoV,GACJ3pB,EAAO,aAAc2pB,CAAa,EAKnCJ,EAAY,OAGZE,EAAwBiB,IAAW,GAGnC5C,GAAM,WAAa0C,GAAS,EAAI,EAAI,EAGpCzB,GAAYyB,IAAU,KAAOA,GAAS,KAAOA,KAAW,IAGnDhC,KACJM,GAAWP,GAAqB7B,EAAGoB,GAAOU,EAAU,GAIhD,CAACO,IACLjnB,EAAO,QAAS,SAAU4kB,EAAE,SAAU,EAAI,IAC1C5kB,EAAO,QAAS,OAAQ4kB,EAAE,SAAU,EAAI,IACxCA,EAAE,WAAY,aAAc,EAAI,UAAW,CAAC,GAI7CoC,GAAWD,GAAanC,EAAGoC,GAAUhB,GAAOiB,EAAU,EAGjDA,IAGCrC,EAAE,aACNkE,GAAW9C,GAAM,kBAAmB,eAAgB,EAC/C8C,KACJ9oB,EAAO,aAAc0nB,CAAS,EAAIoB,IAEnCA,GAAW9C,GAAM,kBAAmB,MAAO,EACtC8C,KACJ9oB,EAAO,KAAM0nB,CAAS,EAAIoB,KAKvBJ,KAAW,KAAO9D,EAAE,OAAS,OACjC4D,GAAa,YAGFE,KAAW,IACtBF,GAAa,eAIbA,GAAaxB,GAAS,MACtB6B,GAAU7B,GAAS,KACnB3U,GAAQ2U,GAAS,MACjBC,GAAY,CAAC5U,MAKdA,GAAQmW,IACHE,IAAU,CAACF,MACfA,GAAa,QACRE,GAAS,IACbA,GAAS,KAMZ1C,GAAM,OAAS0C,GACf1C,GAAM,YAAe2C,IAAoBH,IAAe,GAGnDvB,GACJrW,GAAS,YAAaqX,GAAiB,CAAEY,GAASL,GAAYxC,EAAM,CAAE,EAEtEpV,GAAS,WAAYqX,GAAiB,CAAEjC,GAAOwC,GAAYnW,EAAM,CAAE,EAIpE2T,GAAM,WAAYoC,EAAW,EAC7BA,GAAa,OAERL,GACJG,GAAmB,QAASjB,GAAY,cAAgB,YACvD,CAAEjB,GAAOpB,EAAGqC,GAAY4B,GAAUxW,EAAM,CAAE,EAI5C8V,GAAiB,SAAUF,GAAiB,CAAEjC,GAAOwC,EAAW,CAAE,EAE7DT,IACJG,GAAmB,QAAS,eAAgB,CAAElC,GAAOpB,CAAE,CAAE,EAGjD,EAAE5kB,EAAO,QAChBA,EAAO,MAAM,QAAS,UAAW,GAGpC,CAEA,OAAOgmB,EACR,EAEA,QAAS,SAAUwB,EAAK9T,EAAMpT,EAAW,CACxC,OAAON,EAAO,IAAKwnB,EAAK9T,EAAMpT,EAAU,MAAO,CAChD,EAEA,UAAW,SAAUknB,EAAKlnB,EAAW,CACpC,OAAON,EAAO,IAAKwnB,EAAK,OAAWlnB,EAAU,QAAS,CACvD,CACD,CAAE,EAEFN,EAAO,KAAM,CAAE,MAAO,MAAO,EAAG,SAAUoC,EAAImO,EAAS,CACtDvQ,EAAQuQ,CAAO,EAAI,SAAUiX,EAAK9T,EAAMpT,EAAU+B,EAAO,CAGxD,OAAKpD,EAAYyU,CAAK,IACrBrR,EAAOA,GAAQ/B,EACfA,EAAWoT,EACXA,EAAO,QAID1T,EAAO,KAAMA,EAAO,OAAQ,CAClC,IAAKwnB,EACL,KAAMjX,EACN,SAAUlO,EACV,KAAMqR,EACN,QAASpT,CACV,EAAGN,EAAO,cAAewnB,CAAI,GAAKA,CAAI,CAAE,CACzC,CACD,CAAE,EAEFxnB,EAAO,cAAe,SAAU4kB,EAAI,CACnC,IAAIllB,EACJ,IAAMA,KAAKklB,EAAE,QACPllB,EAAE,YAAY,IAAM,iBACxBklB,EAAE,YAAcA,EAAE,QAASllB,CAAE,GAAK,GAGrC,CAAE,EAGFM,EAAO,SAAW,SAAUwnB,EAAK7mB,EAASlB,EAAM,CAC/C,OAAOO,EAAO,KAAM,CACnB,IAAKwnB,EAGL,KAAM,MACN,SAAU,SACV,MAAO,GACP,MAAO,GACP,OAAQ,GAKR,WAAY,CACX,cAAe,UAAW,CAAC,CAC5B,EACA,WAAY,SAAUR,EAAW,CAChChnB,EAAO,WAAYgnB,EAAUrmB,EAASlB,CAAI,CAC3C,CACD,CAAE,CACH,EAGAO,EAAO,GAAG,OAAQ,CACjB,QAAS,SAAU2a,EAAO,CACzB,IAAI7D,EAEJ,OAAK,KAAM,CAAE,IACP7X,EAAY0b,CAAK,IACrBA,EAAOA,EAAK,KAAM,KAAM,CAAE,CAAE,GAI7B7D,EAAO9W,EAAQ2a,EAAM,KAAM,CAAE,EAAE,aAAc,EAAE,GAAI,CAAE,EAAE,MAAO,EAAK,EAE9D,KAAM,CAAE,EAAE,YACd7D,EAAK,aAAc,KAAM,CAAE,CAAE,EAG9BA,EAAK,IAAK,UAAW,CAGpB,QAFIvW,EAAO,KAEHA,EAAK,mBACZA,EAAOA,EAAK,kBAGb,OAAOA,CACR,CAAE,EAAE,OAAQ,IAAK,GAGX,IACR,EAEA,UAAW,SAAUoa,EAAO,CAC3B,OAAK1b,EAAY0b,CAAK,EACd,KAAK,KAAM,SAAUjb,EAAI,CAC/BM,EAAQ,IAAK,EAAE,UAAW2a,EAAK,KAAM,KAAMjb,CAAE,CAAE,CAChD,CAAE,EAGI,KAAK,KAAM,UAAW,CAC5B,IAAI2O,EAAOrO,EAAQ,IAAK,EACvB8mB,EAAWzY,EAAK,SAAS,EAErByY,EAAS,OACbA,EAAS,QAASnM,CAAK,EAGvBtM,EAAK,OAAQsM,CAAK,CAEpB,CAAE,CACH,EAEA,KAAM,SAAUA,EAAO,CACtB,IAAIoO,EAAiB9pB,EAAY0b,CAAK,EAEtC,OAAO,KAAK,KAAM,SAAUjb,EAAI,CAC/BM,EAAQ,IAAK,EAAE,QAAS+oB,EAAiBpO,EAAK,KAAM,KAAMjb,CAAE,EAAIib,CAAK,CACtE,CAAE,CACH,EAEA,OAAQ,SAAU1a,EAAW,CAC5B,YAAK,OAAQA,CAAS,EAAE,IAAK,MAAO,EAAE,KAAM,UAAW,CACtDD,EAAQ,IAAK,EAAE,YAAa,KAAK,UAAW,CAC7C,CAAE,EACK,IACR,CACD,CAAE,EAGFA,EAAO,KAAK,QAAQ,OAAS,SAAUO,EAAO,CAC7C,MAAO,CAACP,EAAO,KAAK,QAAQ,QAASO,CAAK,CAC3C,EACAP,EAAO,KAAK,QAAQ,QAAU,SAAUO,EAAO,CAC9C,MAAO,CAAC,EAAGA,EAAK,aAAeA,EAAK,cAAgBA,EAAK,eAAe,EAAE,OAC3E,EAKAP,EAAO,aAAa,IAAM,UAAW,CACpC,GAAI,CACH,OAAO,IAAI9B,EAAO,cACnB,MAAc,CAAC,CAChB,EAEA,IAAI8qB,GAAmB,CAGrB,EAAG,IAIH,KAAM,GACP,EACAC,GAAejpB,EAAO,aAAa,IAAI,EAExChB,EAAQ,KAAO,CAAC,CAACiqB,IAAkB,oBAAqBA,GACxDjqB,EAAQ,KAAOiqB,GAAe,CAAC,CAACA,GAEhCjpB,EAAO,cAAe,SAAUW,EAAU,CACzC,IAAIL,EAAU4oB,EAGd,GAAKlqB,EAAQ,MAAQiqB,IAAgB,CAACtoB,EAAQ,YAC7C,MAAO,CACN,KAAM,SAAUioB,EAASO,EAAW,CACnC,IAAIzpB,EACH0pB,EAAMzoB,EAAQ,IAAI,EAWnB,GATAyoB,EAAI,KACHzoB,EAAQ,KACRA,EAAQ,IACRA,EAAQ,MACRA,EAAQ,SACRA,EAAQ,QACT,EAGKA,EAAQ,UACZ,IAAMjB,KAAKiB,EAAQ,UAClByoB,EAAK1pB,CAAE,EAAIiB,EAAQ,UAAWjB,CAAE,EAK7BiB,EAAQ,UAAYyoB,EAAI,kBAC5BA,EAAI,iBAAkBzoB,EAAQ,QAAS,EAQnC,CAACA,EAAQ,aAAe,CAACioB,EAAS,kBAAmB,IACzDA,EAAS,kBAAmB,EAAI,kBAIjC,IAAMlpB,KAAKkpB,EACVQ,EAAI,iBAAkB1pB,EAAGkpB,EAASlpB,CAAE,CAAE,EAIvCY,EAAW,SAAU+B,EAAO,CAC3B,OAAO,UAAW,CACZ/B,IACJA,EAAW4oB,EAAgBE,EAAI,OAC9BA,EAAI,QAAUA,EAAI,QAAUA,EAAI,UAC/BA,EAAI,mBAAqB,KAEtB/mB,IAAS,QACb+mB,EAAI,MAAM,EACC/mB,IAAS,QAKf,OAAO+mB,EAAI,QAAW,SAC1BD,EAAU,EAAG,OAAQ,EAErBA,EAGCC,EAAI,OACJA,EAAI,UACL,EAGDD,EACCH,GAAkBI,EAAI,MAAO,GAAKA,EAAI,OACtCA,EAAI,YAKFA,EAAI,cAAgB,UAAa,QACnC,OAAOA,EAAI,cAAiB,SAC3B,CAAE,OAAQA,EAAI,QAAS,EACvB,CAAE,KAAMA,EAAI,YAAa,EAC1BA,EAAI,sBAAsB,CAC3B,EAGH,CACD,EAGAA,EAAI,OAAS9oB,EAAS,EACtB4oB,EAAgBE,EAAI,QAAUA,EAAI,UAAY9oB,EAAU,OAAQ,EAK3D8oB,EAAI,UAAY,OACpBA,EAAI,QAAUF,EAEdE,EAAI,mBAAqB,UAAW,CAG9BA,EAAI,aAAe,GAMvBlrB,EAAO,WAAY,UAAW,CACxBoC,GACJ4oB,EAAc,CAEhB,CAAE,CAEJ,EAID5oB,EAAWA,EAAU,OAAQ,EAE7B,GAAI,CAGH8oB,EAAI,KAAMzoB,EAAQ,YAAcA,EAAQ,MAAQ,IAAK,CACtD,OAAUiR,EAAI,CAGb,GAAKtR,EACJ,MAAMsR,CAER,CACD,EAEA,MAAO,UAAW,CACZtR,GACJA,EAAS,CAEX,CACD,CAEF,CAAE,EAMFN,EAAO,cAAe,SAAU4kB,EAAI,CAC9BA,EAAE,cACNA,EAAE,SAAS,OAAS,GAEtB,CAAE,EAGF5kB,EAAO,UAAW,CACjB,QAAS,CACR,OAAQ,2FAET,EACA,SAAU,CACT,OAAQ,yBACT,EACA,WAAY,CACX,cAAe,SAAUkK,EAAO,CAC/B,OAAAlK,EAAO,WAAYkK,CAAK,EACjBA,CACR,CACD,CACD,CAAE,EAGFlK,EAAO,cAAe,SAAU,SAAU4kB,EAAI,CACxCA,EAAE,QAAU,SAChBA,EAAE,MAAQ,IAENA,EAAE,cACNA,EAAE,KAAO,MAEX,CAAE,EAGF5kB,EAAO,cAAe,SAAU,SAAU4kB,EAAI,CAG7C,GAAKA,EAAE,aAAeA,EAAE,YAAc,CACrC,IAAIhlB,EAAQU,EACZ,MAAO,CACN,KAAM,SAAU6O,EAAGga,EAAW,CAC7BvpB,EAASI,EAAQ,UAAW,EAC1B,KAAM4kB,EAAE,aAAe,CAAC,CAAE,EAC1B,KAAM,CAAE,QAASA,EAAE,cAAe,IAAKA,EAAE,GAAI,CAAE,EAC/C,GAAI,aAActkB,EAAW,SAAU+oB,EAAM,CAC7CzpB,EAAO,OAAO,EACdU,EAAW,KACN+oB,GACJF,EAAUE,EAAI,OAAS,QAAU,IAAM,IAAKA,EAAI,IAAK,CAEvD,CAAE,EAGHjqB,EAAS,KAAK,YAAaQ,EAAQ,CAAE,CAAE,CACxC,EACA,MAAO,UAAW,CACZU,GACJA,EAAS,CAEX,CACD,CACD,CACD,CAAE,EAKF,IAAIgpB,GAAe,CAAC,EACnBC,GAAS,oBAGVvpB,EAAO,UAAW,CACjB,MAAO,WACP,cAAe,UAAW,CACzB,IAAIM,EAAWgpB,GAAa,IAAI,GAAOtpB,EAAO,QAAU,IAAQ4jB,GAAM,OACtE,YAAMtjB,CAAS,EAAI,GACZA,CACR,CACD,CAAE,EAGFN,EAAO,cAAe,aAAc,SAAU4kB,EAAG4E,EAAkBxD,EAAQ,CAE1E,IAAIyD,EAAcC,EAAaC,EAC9BC,EAAWhF,EAAE,QAAU,KAAW2E,GAAO,KAAM3E,EAAE,GAAI,EACpD,MACA,OAAOA,EAAE,MAAS,WACfA,EAAE,aAAe,IACjB,QAAS,mCAAoC,IAAM,GACrD2E,GAAO,KAAM3E,EAAE,IAAK,GAAK,QAI5B,GAAKgF,GAAYhF,EAAE,UAAW,CAAE,IAAM,QAGrC,OAAA6E,EAAe7E,EAAE,cAAgB3lB,EAAY2lB,EAAE,aAAc,EAC5DA,EAAE,cAAc,EAChBA,EAAE,cAGEgF,EACJhF,EAAGgF,CAAS,EAAIhF,EAAGgF,CAAS,EAAE,QAASL,GAAQ,KAAOE,CAAa,EACxD7E,EAAE,QAAU,KACvBA,EAAE,MAASf,GAAO,KAAMe,EAAE,GAAI,EAAI,IAAM,KAAQA,EAAE,MAAQ,IAAM6E,GAIjE7E,EAAE,WAAY,aAAc,EAAI,UAAW,CAC1C,OAAM+E,GACL3pB,EAAO,MAAOypB,EAAe,iBAAkB,EAEzCE,EAAmB,CAAE,CAC7B,EAGA/E,EAAE,UAAW,CAAE,EAAI,OAGnB8E,EAAcxrB,EAAQurB,CAAa,EACnCvrB,EAAQurB,CAAa,EAAI,UAAW,CACnCE,EAAoB,SACrB,EAGA3D,EAAM,OAAQ,UAAW,CAGnB0D,IAAgB,OACpB1pB,EAAQ9B,CAAO,EAAE,WAAYurB,CAAa,EAI1CvrB,EAAQurB,CAAa,EAAIC,EAIrB9E,EAAG6E,CAAa,IAGpB7E,EAAE,cAAgB4E,EAAiB,cAGnCF,GAAa,KAAMG,CAAa,GAI5BE,GAAqB1qB,EAAYyqB,CAAY,GACjDA,EAAaC,EAAmB,CAAE,CAAE,EAGrCA,EAAoBD,EAAc,MACnC,CAAE,EAGK,QAET,CAAE,EAUF1qB,EAAQ,mBAAuB,UAAW,CACzC,IAAI6qB,EAAOzqB,EAAS,eAAe,mBAAoB,EAAG,EAAE,KAC5D,OAAAyqB,EAAK,UAAY,6BACVA,EAAK,WAAW,SAAW,CACnC,EAAI,EAOJ7pB,EAAO,UAAY,SAAU0T,EAAMxT,EAAS4pB,EAAc,CACzD,GAAK,OAAOpW,GAAS,SACpB,MAAO,CAAC,EAEJ,OAAOxT,GAAY,YACvB4pB,EAAc5pB,EACdA,EAAU,IAGX,IAAI6K,EAAMgf,EAAQpT,EAwBlB,OAtBMzW,IAIAlB,EAAQ,oBACZkB,EAAUd,EAAS,eAAe,mBAAoB,EAAG,EAKzD2L,EAAO7K,EAAQ,cAAe,MAAO,EACrC6K,EAAK,KAAO3L,EAAS,SAAS,KAC9Bc,EAAQ,KAAK,YAAa6K,CAAK,GAE/B7K,EAAUd,GAIZ2qB,EAAS9b,GAAW,KAAMyF,CAAK,EAC/BiD,EAAU,CAACmT,GAAe,CAAC,EAGtBC,EACG,CAAE7pB,EAAQ,cAAe6pB,EAAQ,CAAE,CAAE,CAAE,GAG/CA,EAASrT,GAAe,CAAEhD,CAAK,EAAGxT,EAASyW,CAAQ,EAE9CA,GAAWA,EAAQ,QACvB3W,EAAQ2W,CAAQ,EAAE,OAAO,EAGnB3W,EAAO,MAAO,CAAC,EAAG+pB,EAAO,UAAW,EAC5C,EAMA/pB,EAAO,GAAG,KAAO,SAAUwnB,EAAKwC,EAAQ1pB,EAAW,CAClD,IAAIL,EAAUoC,EAAM2kB,EACnB3Y,EAAO,KACP4b,EAAMzC,EAAI,QAAS,GAAI,EAExB,OAAKyC,EAAM,KACVhqB,EAAW8iB,GAAkByE,EAAI,MAAOyC,CAAI,CAAE,EAC9CzC,EAAMA,EAAI,MAAO,EAAGyC,CAAI,GAIpBhrB,EAAY+qB,CAAO,GAGvB1pB,EAAW0pB,EACXA,EAAS,QAGEA,GAAU,OAAOA,GAAW,WACvC3nB,EAAO,QAIHgM,EAAK,OAAS,GAClBrO,EAAO,KAAM,CACZ,IAAKwnB,EAKL,KAAMnlB,GAAQ,MACd,SAAU,OACV,KAAM2nB,CACP,CAAE,EAAE,KAAM,SAAUE,EAAe,CAGlClD,EAAW,UAEX3Y,EAAK,KAAMpO,EAIVD,EAAQ,OAAQ,EAAE,OAAQA,EAAO,UAAWkqB,CAAa,CAAE,EAAE,KAAMjqB,CAAS,EAG5EiqB,CAAa,CAKf,CAAE,EAAE,OAAQ5pB,GAAY,SAAU0lB,EAAO0C,EAAS,CACjDra,EAAK,KAAM,UAAW,CACrB/N,EAAS,MAAO,KAAM0mB,GAAY,CAAEhB,EAAM,aAAc0C,EAAQ1C,CAAM,CAAE,CACzE,CAAE,CACH,CAAE,EAGI,IACR,EAKAhmB,EAAO,KAAK,QAAQ,SAAW,SAAUO,EAAO,CAC/C,OAAOP,EAAO,KAAMA,EAAO,OAAQ,SAAUgH,EAAK,CACjD,OAAOzG,IAASyG,EAAG,IACpB,CAAE,EAAE,MACL,EAKAhH,EAAO,OAAS,CACf,UAAW,SAAUO,EAAMI,EAASjB,EAAI,CACvC,IAAIyqB,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EAAYC,EACnEC,EAAW1qB,EAAO,IAAKO,EAAM,UAAW,EACxCoqB,EAAU3qB,EAAQO,CAAK,EACvBwY,EAAQ,CAAC,EAGL2R,IAAa,WACjBnqB,EAAK,MAAM,SAAW,YAGvBgqB,EAAYI,EAAQ,OAAO,EAC3BN,EAAYrqB,EAAO,IAAKO,EAAM,KAAM,EACpCiqB,EAAaxqB,EAAO,IAAKO,EAAM,MAAO,EACtCkqB,GAAsBC,IAAa,YAAcA,IAAa,WAC3DL,EAAYG,GAAa,QAAS,MAAO,EAAI,GAI3CC,GACJN,EAAcQ,EAAQ,SAAS,EAC/BL,EAASH,EAAY,IACrBC,EAAUD,EAAY,OAGtBG,EAAS,WAAYD,CAAU,GAAK,EACpCD,EAAU,WAAYI,CAAW,GAAK,GAGlCvrB,EAAY0B,CAAQ,IAGxBA,EAAUA,EAAQ,KAAMJ,EAAMb,EAAGM,EAAO,OAAQ,CAAC,EAAGuqB,CAAU,CAAE,GAG5D5pB,EAAQ,KAAO,OACnBoY,EAAM,IAAQpY,EAAQ,IAAM4pB,EAAU,IAAQD,GAE1C3pB,EAAQ,MAAQ,OACpBoY,EAAM,KAASpY,EAAQ,KAAO4pB,EAAU,KAASH,GAG7C,UAAWzpB,EACfA,EAAQ,MAAM,KAAMJ,EAAMwY,CAAM,EAGhC4R,EAAQ,IAAK5R,CAAM,CAErB,CACD,EAEA/Y,EAAO,GAAG,OAAQ,CAGjB,OAAQ,SAAUW,EAAU,CAG3B,GAAK,UAAU,OACd,OAAOA,IAAY,OAClB,KACA,KAAK,KAAM,SAAUjB,EAAI,CACxBM,EAAO,OAAO,UAAW,KAAMW,EAASjB,CAAE,CAC3C,CAAE,EAGJ,IAAIkrB,EAAMC,EACTtqB,EAAO,KAAM,CAAE,EAEhB,GAAMA,EAQN,OAAMA,EAAK,eAAe,EAAE,QAK5BqqB,EAAOrqB,EAAK,sBAAsB,EAClCsqB,EAAMtqB,EAAK,cAAc,YAClB,CACN,IAAKqqB,EAAK,IAAMC,EAAI,YACpB,KAAMD,EAAK,KAAOC,EAAI,WACvB,GATQ,CAAE,IAAK,EAAG,KAAM,CAAE,CAU3B,EAIA,SAAU,UAAW,CACpB,GAAM,KAAM,CAAE,EAId,KAAIC,EAAcC,EAAQtrB,EACzBc,EAAO,KAAM,CAAE,EACfyqB,EAAe,CAAE,IAAK,EAAG,KAAM,CAAE,EAGlC,GAAKhrB,EAAO,IAAKO,EAAM,UAAW,IAAM,QAGvCwqB,EAASxqB,EAAK,sBAAsB,MAE9B,CAON,IANAwqB,EAAS,KAAK,OAAO,EAIrBtrB,EAAMc,EAAK,cACXuqB,EAAevqB,EAAK,cAAgBd,EAAI,gBAChCqrB,IACLA,IAAiBrrB,EAAI,MAAQqrB,IAAiBrrB,EAAI,kBACpDO,EAAO,IAAK8qB,EAAc,UAAW,IAAM,UAE3CA,EAAeA,EAAa,WAExBA,GAAgBA,IAAiBvqB,GAAQuqB,EAAa,WAAa,IAGvEE,EAAehrB,EAAQ8qB,CAAa,EAAE,OAAO,EAC7CE,EAAa,KAAOhrB,EAAO,IAAK8qB,EAAc,iBAAkB,EAAK,EACrEE,EAAa,MAAQhrB,EAAO,IAAK8qB,EAAc,kBAAmB,EAAK,EAEzE,CAGA,MAAO,CACN,IAAKC,EAAO,IAAMC,EAAa,IAAMhrB,EAAO,IAAKO,EAAM,YAAa,EAAK,EACzE,KAAMwqB,EAAO,KAAOC,EAAa,KAAOhrB,EAAO,IAAKO,EAAM,aAAc,EAAK,CAC9E,EACD,EAYA,aAAc,UAAW,CACxB,OAAO,KAAK,IAAK,UAAW,CAG3B,QAFIuqB,EAAe,KAAK,aAEhBA,GAAgB9qB,EAAO,IAAK8qB,EAAc,UAAW,IAAM,UAClEA,EAAeA,EAAa,aAG7B,OAAOA,GAAgBpnB,EACxB,CAAE,CACH,CACD,CAAE,EAGF1D,EAAO,KAAM,CAAE,WAAY,cAAe,UAAW,aAAc,EAAG,SAAUuQ,EAAQoD,EAAO,CAC9F,IAAIsX,EAAwBtX,IAAlB,cAEV3T,EAAO,GAAIuQ,CAAO,EAAI,SAAU5Q,EAAM,CACrC,OAAO+S,GAAQ,KAAM,SAAUnS,EAAMgQ,EAAQ5Q,EAAM,CAGlD,IAAIkrB,EAOJ,GANK1rB,EAAUoB,CAAK,EACnBsqB,EAAMtqB,EACKA,EAAK,WAAa,IAC7BsqB,EAAMtqB,EAAK,aAGPZ,IAAQ,OACZ,OAAOkrB,EAAMA,EAAKlX,CAAK,EAAIpT,EAAMgQ,CAAO,EAGpCsa,EACJA,EAAI,SACFI,EAAYJ,EAAI,YAAVlrB,EACPsrB,EAAMtrB,EAAMkrB,EAAI,WACjB,EAGAtqB,EAAMgQ,CAAO,EAAI5Q,CAEnB,EAAG4Q,EAAQ5Q,EAAK,UAAU,MAAO,CAClC,CACD,CAAE,EAQFK,EAAO,KAAM,CAAE,MAAO,MAAO,EAAG,SAAUoC,EAAIuR,EAAO,CACpD3T,EAAO,SAAU2T,CAAK,EAAIqJ,GAAche,EAAQ,cAC/C,SAAUuB,EAAMmc,EAAW,CAC1B,GAAKA,EACJ,OAAAA,EAAWD,GAAQlc,EAAMoT,CAAK,EAGvBwH,GAAU,KAAMuB,CAAS,EAC/B1c,EAAQO,CAAK,EAAE,SAAS,EAAGoT,CAAK,EAAI,KACpC+I,CAEH,CACD,CACD,CAAE,EAIF1c,EAAO,KAAM,CAAE,OAAQ,SAAU,MAAO,OAAQ,EAAG,SAAUY,EAAMyB,EAAO,CACzErC,EAAO,KAAM,CACZ,QAAS,QAAUY,EACnB,QAASyB,EACT,GAAI,QAAUzB,CACf,EAAG,SAAUsqB,EAAcC,EAAW,CAGrCnrB,EAAO,GAAImrB,CAAS,EAAI,SAAUC,EAAQjpB,EAAQ,CACjD,IAAIwQ,EAAY,UAAU,SAAYuY,GAAgB,OAAOE,GAAW,WACvE/M,EAAQ6M,IAAkBE,IAAW,IAAQjpB,IAAU,GAAO,SAAW,UAE1E,OAAOuQ,GAAQ,KAAM,SAAUnS,EAAM8B,EAAMF,EAAQ,CAClD,IAAI1C,EAEJ,OAAKN,EAAUoB,CAAK,EAGZ4qB,EAAS,QAAS,OAAQ,IAAM,EACtC5qB,EAAM,QAAUK,CAAK,EACrBL,EAAK,SAAS,gBAAiB,SAAWK,CAAK,EAI5CL,EAAK,WAAa,GACtBd,EAAMc,EAAK,gBAIJ,KAAK,IACXA,EAAK,KAAM,SAAWK,CAAK,EAAGnB,EAAK,SAAWmB,CAAK,EACnDL,EAAK,KAAM,SAAWK,CAAK,EAAGnB,EAAK,SAAWmB,CAAK,EACnDnB,EAAK,SAAWmB,CAAK,CACtB,GAGMuB,IAAU,OAGhBnC,EAAO,IAAKO,EAAM8B,EAAMgc,CAAM,EAG9Bre,EAAO,MAAOO,EAAM8B,EAAMF,EAAOkc,CAAM,CACzC,EAAGhc,EAAMsQ,EAAYyY,EAAS,OAAWzY,CAAU,CACpD,CACD,CAAE,CACH,CAAE,EAGF3S,EAAO,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,UACD,EAAG,SAAUoC,EAAIC,EAAO,CACvBrC,EAAO,GAAIqC,CAAK,EAAI,SAAU2E,EAAK,CAClC,OAAO,KAAK,GAAI3E,EAAM2E,CAAG,CAC1B,CACD,CAAE,EAKFhH,EAAO,GAAG,OAAQ,CAEjB,KAAM,SAAUqX,EAAO3D,EAAM1M,EAAK,CACjC,OAAO,KAAK,GAAIqQ,EAAO,KAAM3D,EAAM1M,CAAG,CACvC,EACA,OAAQ,SAAUqQ,EAAOrQ,EAAK,CAC7B,OAAO,KAAK,IAAKqQ,EAAO,KAAMrQ,CAAG,CAClC,EAEA,SAAU,SAAU/G,EAAUoX,EAAO3D,EAAM1M,EAAK,CAC/C,OAAO,KAAK,GAAIqQ,EAAOpX,EAAUyT,EAAM1M,CAAG,CAC3C,EACA,WAAY,SAAU/G,EAAUoX,EAAOrQ,EAAK,CAG3C,OAAO,UAAU,SAAW,EAC3B,KAAK,IAAK/G,EAAU,IAAK,EACzB,KAAK,IAAKoX,EAAOpX,GAAY,KAAM+G,CAAG,CACxC,EAEA,MAAO,SAAUqkB,EAAQC,EAAQ,CAChC,OAAO,KACL,GAAI,aAAcD,CAAO,EACzB,GAAI,aAAcC,GAASD,CAAO,CACrC,CACD,CAAE,EAEFrrB,EAAO,KACJ,wLAE0D,MAAO,GAAI,EACvE,SAAUoC,EAAIxB,EAAO,CAGpBZ,EAAO,GAAIY,CAAK,EAAI,SAAU8S,EAAM1M,EAAK,CACxC,OAAO,UAAU,OAAS,EACzB,KAAK,GAAIpG,EAAM,KAAM8S,EAAM1M,CAAG,EAC9B,KAAK,QAASpG,CAAK,CACrB,CACD,CACD,EASA,IAAI2qB,GAAQ,sDAMZvrB,EAAO,MAAQ,SAAUgH,EAAI9G,EAAU,CACtC,IAAIqU,EAAK3K,EAAM4hB,EAUf,GARK,OAAOtrB,GAAY,WACvBqU,EAAMvN,EAAI9G,CAAQ,EAClBA,EAAU8G,EACVA,EAAKuN,GAKD,EAACtV,EAAY+H,CAAG,EAKrB,OAAA4C,EAAOtL,EAAM,KAAM,UAAW,CAAE,EAChCktB,EAAQ,UAAW,CAClB,OAAOxkB,EAAG,MAAO9G,GAAW,KAAM0J,EAAK,OAAQtL,EAAM,KAAM,SAAU,CAAE,CAAE,CAC1E,EAGAktB,EAAM,KAAOxkB,EAAG,KAAOA,EAAG,MAAQhH,EAAO,OAElCwrB,CACR,EAEAxrB,EAAO,UAAY,SAAUyrB,EAAO,CAC9BA,EACJzrB,EAAO,YAEPA,EAAO,MAAO,EAAK,CAErB,EACAA,EAAO,QAAU,MAAM,QACvBA,EAAO,UAAY,KAAK,MACxBA,EAAO,SAAWsC,EAClBtC,EAAO,WAAaf,EACpBe,EAAO,SAAWb,EAClBa,EAAO,UAAYqT,GACnBrT,EAAO,KAAOH,EAEdG,EAAO,IAAM,KAAK,IAElBA,EAAO,UAAY,SAAUd,EAAM,CAKlC,IAAImD,EAAOrC,EAAO,KAAMd,CAAI,EAC5B,OAASmD,IAAS,UAAYA,IAAS,WAKtC,CAAC,MAAOnD,EAAM,WAAYA,CAAI,CAAE,CAClC,EAEAc,EAAO,KAAO,SAAUkK,EAAO,CAC9B,OAAOA,GAAQ,KACd,IACEA,EAAO,IAAK,QAASqhB,GAAO,IAAK,CACrC,EAiBK,OAAO,QAAW,YAAc,OAAO,KAC3C,OAAQ,SAAU,CAAC,EAAG,UAAW,CAChC,OAAOvrB,CACR,CAAE,EAMH,IAGC0rB,GAAUxtB,EAAO,OAGjBytB,GAAKztB,EAAO,EAEb,OAAA8B,EAAO,WAAa,SAAUmB,EAAO,CACpC,OAAKjD,EAAO,IAAM8B,IACjB9B,EAAO,EAAIytB,IAGPxqB,GAAQjD,EAAO,SAAW8B,IAC9B9B,EAAO,OAASwtB,IAGV1rB,CACR,EAKK,OAAO7B,EAAa,MACxBD,EAAO,OAASA,EAAO,EAAI8B,GAMrBA,CACP,CAAE,IC39UF,IAAA4rB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAaC,SAAUC,EAAQ,CACfA,EAAO,CAAC,QAAQ,EAAG,SAAUC,EAAG,CAC5B,OAAQ,UAAY,CAChB,IAAIC,EACAC,EACAC,EAAU,EACVC,EAAY,CACZ,MAAO,QACP,KAAM,OACN,QAAS,UACT,QAAS,SACb,EAEIC,EAAS,CACT,MAAOC,EACP,OAAQC,EACR,MAAOC,EACP,aAAcC,EACd,KAAMC,EACN,QAAS,CAAC,EACV,UAAWC,EACX,QAASC,EACT,QAAS,QACT,QAASC,CACb,EAEIC,EAEJ,OAAOT,EAIP,SAASG,EAAMO,EAASC,EAAOC,EAAiB,CAC5C,OAAOC,EAAO,CACV,KAAMd,EAAU,MAChB,UAAWe,EAAW,EAAE,YAAY,MACpC,QAASJ,EACT,gBAAiBE,EACjB,MAAOD,CACX,CAAC,CACL,CAEA,SAASP,EAAaW,EAASC,EAAQ,CAGnC,OAFKD,IAAWA,EAAUD,EAAW,GACrClB,EAAaD,EAAE,IAAMoB,EAAQ,WAAW,EACpCnB,EAAW,QAGXoB,IACApB,EAAaqB,EAAgBF,CAAO,GAEjCnB,CACX,CAEA,SAASS,EAAKK,EAASC,EAAOC,EAAiB,CAC3C,OAAOC,EAAO,CACV,KAAMd,EAAU,KAChB,UAAWe,EAAW,EAAE,YAAY,KACpC,QAASJ,EACT,gBAAiBE,EACjB,MAAOD,CACX,CAAC,CACL,CAEA,SAASL,EAAUY,EAAU,CACzBrB,EAAWqB,CACf,CAEA,SAASX,EAAQG,EAASC,EAAOC,EAAiB,CAC9C,OAAOC,EAAO,CACV,KAAMd,EAAU,QAChB,UAAWe,EAAW,EAAE,YAAY,QACpC,QAASJ,EACT,gBAAiBE,EACjB,MAAOD,CACX,CAAC,CACL,CAEA,SAASH,EAAQE,EAASC,EAAOC,EAAiB,CAC9C,OAAOC,EAAO,CACV,KAAMd,EAAU,QAChB,UAAWe,EAAW,EAAE,YAAY,QACpC,QAASJ,EACT,gBAAiBE,EACjB,MAAOD,CACX,CAAC,CACL,CAEA,SAASV,EAAMkB,EAAeC,EAAc,CACxC,IAAIL,EAAUD,EAAW,EACpBlB,GAAcQ,EAAaW,CAAO,EAClCM,EAAWF,EAAeJ,EAASK,CAAY,GAChDE,EAAeP,CAAO,CAE9B,CAEA,SAASb,EAAOiB,EAAe,CAC3B,IAAIJ,EAAUD,EAAW,EAEzB,GADKlB,GAAcQ,EAAaW,CAAO,EACnCI,GAAiBxB,EAAE,SAAUwB,CAAa,EAAE,SAAW,EAAG,CAC1DI,EAAYJ,CAAa,EACzB,MACJ,CACIvB,EAAW,SAAS,EAAE,QACtBA,EAAW,OAAO,CAE1B,CAIA,SAAS0B,EAAgBP,EAAS,CAE9B,QADIS,EAAgB5B,EAAW,SAAS,EAC/B6B,EAAID,EAAc,OAAS,EAAGC,GAAK,EAAGA,IAC3CJ,EAAW1B,EAAE6B,EAAcC,CAAC,CAAC,EAAGV,CAAO,CAE/C,CAEA,SAASM,EAAYF,EAAeJ,EAASK,EAAc,CACvD,IAAIM,EAAQN,GAAgBA,EAAa,MAAQA,EAAa,MAAQ,GACtE,OAAID,IAAkBO,GAAS/B,EAAE,SAAUwB,CAAa,EAAE,SAAW,IACjEA,EAAcJ,EAAQ,UAAU,EAAE,CAC9B,SAAUA,EAAQ,aAClB,OAAQA,EAAQ,WAChB,SAAU,UAAY,CAAEQ,EAAYJ,CAAa,CAAG,CACxD,CAAC,EACM,IAEJ,EACX,CAEA,SAASF,EAAgBF,EAAS,CAC9B,OAAAnB,EAAaD,EAAE,QAAQ,EAClB,KAAK,KAAMoB,EAAQ,WAAW,EAC9B,SAASA,EAAQ,aAAa,EAEnCnB,EAAW,SAASD,EAAEoB,EAAQ,MAAM,CAAC,EAC9BnB,CACX,CAEA,SAAS+B,GAAc,CACnB,MAAO,CACH,aAAc,GACd,WAAY,QACZ,YAAa,kBACb,MAAO,GAEP,WAAY,SACZ,aAAc,IACd,WAAY,QACZ,QAAS,OACT,WAAY,UACZ,aAAc,IACd,WAAY,QACZ,SAAU,OACV,YAAa,GACb,cAAe,GACf,YAAa,GACb,aAAc,GAEd,gBAAiB,IACjB,YAAa,CACT,MAAO,cACP,KAAM,aACN,QAAS,gBACT,QAAS,eACb,EACA,UAAW,aACX,cAAe,kBACf,QAAS,IACT,WAAY,cACZ,aAAc,gBACd,WAAY,GACZ,OAAQ,OACR,UAAW,yCACX,WAAY,qBACZ,YAAa,GACb,kBAAmB,GACnB,YAAa,GACb,cAAe,iBACf,IAAK,EACT,CACJ,CAEA,SAASC,EAAQC,EAAM,CACdhC,GACLA,EAASgC,CAAI,CACjB,CAEA,SAAShB,EAAOiB,EAAK,CACjB,IAAIf,EAAUD,EAAW,EACrBiB,EAAYD,EAAI,WAAaf,EAAQ,UAOzC,GALI,OAAQe,EAAI,gBAAqB,MACjCf,EAAUpB,EAAE,OAAOoB,EAASe,EAAI,eAAe,EAC/CC,EAAYD,EAAI,gBAAgB,WAAaC,GAG7CC,GAAWjB,EAASe,CAAG,EAAK,OAEhChC,IAEAF,EAAaQ,EAAaW,EAAS,EAAI,EAEvC,IAAIkB,EAAa,KACbd,EAAgBxB,EAAE,QAAQ,EAC1BuC,GAAgBvC,EAAE,QAAQ,EAC1BwC,GAAkBxC,EAAE,QAAQ,EAC5ByC,GAAmBzC,EAAE,QAAQ,EAC7B0C,GAAgB1C,EAAEoB,EAAQ,SAAS,EACnCuB,GAAc,CACd,WAAY,KACZ,QAAS,KACT,YAAa,IACjB,EACIC,GAAW,CACX,QAASzC,EACT,MAAO,UACP,UAAW,IAAI,KACf,QAASiB,EACT,IAAKe,CACT,EAEA,OAAAU,GAAiB,EAEjBC,GAAa,EAEbC,GAAa,EAEbd,EAAQW,EAAQ,EAEZxB,EAAQ,OAAS,SACjB,QAAQ,IAAIwB,EAAQ,EAGjBpB,EAEP,SAASwB,GAAWC,GAAQ,CACxB,OAAIA,IAAU,OACVA,GAAS,IAGNA,GACF,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,CAC7B,CAEA,SAASJ,IAAmB,CACxBK,GAAQ,EACRC,EAAS,EACTC,EAAW,EACXC,EAAe,EACfC,EAAe,EACfC,GAAO,EACPC,EAAY,EACZC,GAAQ,CACZ,CAEA,SAASA,IAAU,CACf,IAAIC,GAAY,GAChB,OAAQvB,EAAI,UAAW,CACnB,IAAK,gBACL,IAAK,aACDuB,GAAa,SACb,MACJ,QACIA,GAAY,WACpB,CACAlC,EAAc,KAAK,YAAakC,EAAS,CAC7C,CAEA,SAASX,IAAe,CAChB3B,EAAQ,cACRI,EAAc,MAAMmC,GAAaC,EAAgB,EAGjD,CAACxC,EAAQ,SAAWA,EAAQ,cAC5BI,EAAc,MAAMqC,EAAS,EAG7BzC,EAAQ,aAAesB,IACvBA,GAAc,MAAM,SAAUoB,GAAO,CAC7BA,GAAM,gBACNA,GAAM,gBAAgB,EACfA,GAAM,eAAiB,QAAaA,GAAM,eAAiB,KAClEA,GAAM,aAAe,IAGrB1C,EAAQ,cACRA,EAAQ,aAAa0C,EAAK,EAG9BD,GAAU,EAAI,CAClB,CAAC,EAGDzC,EAAQ,SACRI,EAAc,MAAM,SAAUsC,GAAO,CACjC1C,EAAQ,QAAQ0C,EAAK,EACrBD,GAAU,CACd,CAAC,CAET,CAEA,SAASf,IAAe,CACpBtB,EAAc,KAAK,EAEnBA,EAAcJ,EAAQ,UAAU,EAC5B,CAAC,SAAUA,EAAQ,aAAc,OAAQA,EAAQ,WAAY,SAAUA,EAAQ,OAAO,CAC1F,EAEIA,EAAQ,QAAU,IAClBkB,EAAa,WAAWuB,GAAWzC,EAAQ,OAAO,EAClDuB,GAAY,YAAc,WAAWvB,EAAQ,OAAO,EACpDuB,GAAY,QAAU,IAAI,KAAK,EAAE,QAAQ,EAAIA,GAAY,YACrDvB,EAAQ,cACRuB,GAAY,WAAa,YAAYoB,GAAgB,EAAE,GAGnE,CAEA,SAASb,IAAU,CACXf,EAAI,WACJX,EAAc,SAASJ,EAAQ,UAAU,EAAE,SAASgB,CAAS,CAErE,CAEA,SAASoB,GAAc,CACfpC,EAAQ,YACRnB,EAAW,QAAQuB,CAAa,EAEhCvB,EAAW,OAAOuB,CAAa,CAEvC,CAEA,SAAS2B,GAAW,CAChB,GAAIhB,EAAI,MAAO,CACX,IAAI6B,GAAS7B,EAAI,MACbf,EAAQ,aACR4C,GAAShB,GAAWb,EAAI,KAAK,GAEjCI,GAAc,OAAOyB,EAAM,EAAE,SAAS5C,EAAQ,UAAU,EACxDI,EAAc,OAAOe,EAAa,CACtC,CACJ,CAEA,SAASa,GAAa,CAClB,GAAIjB,EAAI,QAAS,CACb,IAAI6B,GAAS7B,EAAI,QACbf,EAAQ,aACR4C,GAAShB,GAAWb,EAAI,OAAO,GAEnCK,GAAgB,OAAOwB,EAAM,EAAE,SAAS5C,EAAQ,YAAY,EAC5DI,EAAc,OAAOgB,EAAe,CACxC,CACJ,CAEA,SAASa,GAAiB,CAClBjC,EAAQ,cACRsB,GAAc,SAAStB,EAAQ,UAAU,EAAE,KAAK,OAAQ,QAAQ,EAChEI,EAAc,QAAQkB,EAAa,EAE3C,CAEA,SAASY,GAAiB,CAClBlC,EAAQ,cACRqB,GAAiB,SAASrB,EAAQ,aAAa,EAC/CI,EAAc,QAAQiB,EAAgB,EAE9C,CAEA,SAASc,IAAS,CACVnC,EAAQ,KACRI,EAAc,SAAS,KAAK,CAEpC,CAEA,SAASa,GAAWjB,GAASe,GAAK,CAC9B,GAAIf,GAAQ,kBAAmB,CAC3B,GAAIe,GAAI,UAAYrB,EAChB,MAAO,GAEPA,EAAgBqB,GAAI,OAE5B,CACA,MAAO,EACX,CAEA,SAAS0B,GAAUI,GAAU,CACzB,IAAIC,GAASD,IAAY7C,EAAQ,cAAgB,GAAQA,EAAQ,YAAcA,EAAQ,WACnF+C,GAAWF,IAAY7C,EAAQ,gBAAkB,GACjDA,EAAQ,cAAgBA,EAAQ,aAChCgD,GAASH,IAAY7C,EAAQ,cAAgB,GAAQA,EAAQ,YAAcA,EAAQ,WACvF,GAAI,EAAApB,EAAE,SAAUwB,CAAa,EAAE,QAAU,CAACyC,IAG1C,oBAAatB,GAAY,UAAU,EAC5BnB,EAAc0C,EAAM,EAAE,CACzB,SAAUC,GACV,OAAQC,GACR,SAAU,UAAY,CAClBxC,EAAYJ,CAAa,EACzB,aAAac,CAAU,EACnBlB,EAAQ,UAAYwB,GAAS,QAAU,UACvCxB,EAAQ,SAAS,EAErBwB,GAAS,MAAQ,SACjBA,GAAS,QAAU,IAAI,KACvBX,EAAQW,EAAQ,CACpB,CACJ,CAAC,CACL,CAEA,SAASgB,IAAmB,EACpBxC,EAAQ,QAAU,GAAKA,EAAQ,gBAAkB,KACjDkB,EAAa,WAAWuB,GAAWzC,EAAQ,eAAe,EAC1DuB,GAAY,YAAc,WAAWvB,EAAQ,eAAe,EAC5DuB,GAAY,QAAU,IAAI,KAAK,EAAE,QAAQ,EAAIA,GAAY,YAEjE,CAEA,SAASgB,IAAc,CACnB,aAAarB,CAAU,EACvBK,GAAY,QAAU,EACtBnB,EAAc,KAAK,GAAM,EAAI,EAAEJ,EAAQ,UAAU,EAC7C,CAAC,SAAUA,EAAQ,aAAc,OAAQA,EAAQ,UAAU,CAC/D,CACJ,CAEA,SAAS2C,IAAiB,CACtB,IAAIM,IAAe1B,GAAY,QAAW,IAAI,KAAK,EAAE,QAAQ,GAAMA,GAAY,YAAe,IAC9FF,GAAiB,MAAM4B,GAAa,GAAG,CAC3C,CACJ,CAEA,SAASlD,GAAa,CAClB,OAAOnB,EAAE,OAAO,CAAC,EAAGgC,EAAY,EAAG3B,EAAO,OAAO,CACrD,CAEA,SAASuB,EAAYJ,EAAe,CAC3BvB,IAAcA,EAAaQ,EAAa,GACzC,CAAAe,EAAc,GAAG,UAAU,IAG/BA,EAAc,OAAO,EACrBA,EAAgB,KACZvB,EAAW,SAAS,EAAE,SAAW,IACjCA,EAAW,OAAO,EAClBa,EAAgB,QAExB,CAEJ,EAAG,CACP,CAAC,CACL,GAAE,OAAO,QAAW,YAAc,OAAO,IAAM,OAAS,SAAUwD,EAAMC,EAAS,CACzE,OAAOzE,GAAW,KAAeA,GAAO,QACxCA,GAAO,QAAUyE,EAAQ,IAAiB,EAE1C,OAAO,OAASA,EAAQ,OAAO,MAAM,CAE7C,CAAC,y+BCpcD,GAvBKC,MAAMC,UAAUC,OACjBF,MAAMC,UAAUC,KAAO,SAASC,EAAAA,CAAAA,GACxBC,OAAS,KAATA,MACM,IAAIC,UAAU,kDAAA,EAAA,GAEC,OAAdF,GAAc,WAAdA,MACD,IAAIE,UAAU,8BAAA,EAAA,QAKpBC,EAHAC,EAAOC,OAAOJ,IAAAA,EACdK,EAASF,EAAKE,SAAW,EACzBC,EAAUC,UAAU,CAAA,EAGfC,EAAI,EAAGA,EAAIH,EAAQG,IAAAA,GACxBN,EAAQC,EAAKK,CAAAA,EACTT,EAAUU,KAAKH,EAASJ,EAAOM,EAAGL,CAAAA,EAAAA,OAC3BD,CAAAA,GAOnBQ,QAAwC,OAAvBA,OAAOC,aAAgB,WAAY,CAAA,IAC7CA,EAAT,SAAqBC,EAAOC,EAAAA,CAC1BA,EAASA,GAAU,CACjBC,QAAAA,GACAC,WAAAA,GACAC,OAAAA,MAAQC,EAAAA,IAENC,EAAMC,SAASC,YAAY,aAAA,EAAA,OAC/BF,EAAIG,gBAAgBT,EAAOC,EAAOC,QAASD,EAAOE,WAAYF,EAAOG,MAAAA,EAC9DE,CAAAA,EAGCR,OAAOY,QAHRJ,SAIRP,EAAYd,UAAYa,OAAOY,MAAMzB,WAGtCa,OAAOC,YAAcA,CAAAA,CAAAA,ICvCjBY,EAAAA,UAAAA,CAAAA,SAAAA,EACQC,EAAAA,CAAAA,EAAAA,KAAAA,CAAAA,EAAAA,KACLA,QAAUA,EAAAA,KACVA,QAAQC,OAASzB,IAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,OAAAA,MAAAA,SAoCnB0B,EAAAA,CACHA,EAAQC,aAAe3B,KAAK4B,QAAQC,KAAKH,EAAS1B,IAAAA,EAClD0B,EAAQI,WAAa9B,KAAK+B,MAAMF,KAAKH,EAAS1B,IAAAA,EAC9C0B,EAAQM,WAAahC,KAAKiC,MAAMJ,KAAKH,EAAS1B,IAAAA,EAE9C0B,EAAQQ,iBAAiB,UAAWR,EAAQC,aAAAA,EAAc,EAC1DD,EAAQQ,iBAAiB,QAASR,EAAQI,WAAAA,EAAY,EACtDJ,EAAQQ,iBAAiB,QAASR,EAAQM,WAAAA,EAAY,CAAA,CAAA,EAAA,CAAA,IAAA,SAAA,MAAA,SAGjDN,EAAAA,CACLA,EAAQS,oBAAoB,UAAWT,EAAQC,aAAAA,EAAc,EAC7DD,EAAQS,oBAAoB,QAAST,EAAQI,WAAAA,EAAY,EACzDJ,EAAQS,oBAAoB,QAAST,EAAQM,WAAAA,EAAY,EAAA,OAElDN,EAAQC,aAAAA,OACRD,EAAQI,WAAAA,OACRJ,EAAQM,UAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAAAA,SAGTI,EAAUxB,EAAAA,CACZwB,EAASC,iBAAiBzB,CAAAA,IAC5BwB,EAASZ,QAAQc,SAAAA,GACjBF,EAASZ,QAAQe,SAAAA,GAAAA,IAGfb,EAAU1B,KACdoC,EAASI,aAAAA,GAETjB,EAAckB,KAAAA,EAAOC,QAAQ,SAAAC,EAAAA,CACvBA,EAAEC,MAAQhC,EAAMiC,UAClBT,EAASI,aAAAA,GACTJ,EAASU,UAAAA,EAAYH,EAAEzC,MAAM6C,YAAAA,CAAAA,EAAenC,EAAOc,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,QAAAA,MAAAA,SAKnDU,EAAUxB,EAAAA,CACdwB,EAASY,WAAAA,GACTZ,EAASL,MAAMtB,KAAKT,KAAMoC,EAAUxB,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,QAAAA,MAAAA,SAGhCwB,EAAUxB,EAAAA,CAAAA,IACVY,EAAUY,EAASZ,QAAAA,GACnBA,EAAQyB,MAAQzB,EAAQyB,KAAKC,SAAStC,EAAMuC,MAAAA,EAAS,CAAA,IACnDC,EAAKxC,EAAMuC,OAAAA,IACfvC,EAAMyC,eAAAA,EACNzC,EAAM0C,gBAAAA,EACCF,EAAGG,SAASR,YAAAA,IAAkB,MAAlBA,GAAAA,EACjBK,EAAKA,EAAGI,aACGJ,IAAO5B,EAAQyB,KAAAA,MAClB,IAAIQ,MAAM,8CAAA,EAGpBjC,EAAQkC,kBAAkBN,EAAGO,aAAa,YAAA,EAAe/C,CAAAA,EACzDY,EAAQe,SAAAA,CAAAA,MAGCf,EAAQoC,QAAQlC,SAAAA,CAAYF,EAAQoC,QAAQC,kBACrDrC,EAAQoC,QAAQC,gBAAAA,GAChBC,WAAW,UAAA,CAAA,OAAMtC,EAAQe,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,IAAAA,QAAAA,MAAAA,SAIvBH,EAAUxB,EAAAA,CAAAA,GACVwB,EAASY,aACXZ,EAASY,WAAAA,IAEXZ,EAAS2B,gBAAgB/D,IAAAA,EAErBY,EAAMiC,UAAY,GAAZA,CAAAA,GAAAA,CAELT,EAASZ,QAAQwC,aAAe5B,EAASZ,QAAQyC,iBAAAA,OACpD7B,EAASZ,QAAQyC,iBAAAA,GACjB7B,EAASI,aAAAA,GAAe,KACxBJ,EAASU,UAAAA,EAAT,MAA8BlC,EAAOZ,IAAAA,EAAAA,GAAAA,CAIlCoC,EAASZ,QAAQc,SAAAA,GAChBF,EAASZ,QAAQ0C,iBACnB9B,EAASU,UAAAA,EAAYqB,YAAYvD,EAAOZ,KAAM,EAAA,MACzC,CAAA,IACD6C,EAAUT,EAASgC,WAAWhC,EAAUpC,KAAMY,CAAAA,EAAAA,GAE9CyD,MAAMxB,CAAAA,GAAAA,CAAaA,EAAS,OAAA,IAE5ByB,EAAUlC,EAASZ,QAAQ+C,SAAAA,EAAWzE,KAAK,SAAAwE,EAAAA,CAAAA,OACtCA,EAAQE,WAAW,CAAA,IAAO3B,CAAAA,CAAAA,EAGxByB,IAHwBzB,QAIjCT,EAASU,UAAAA,EAAYqB,YAAYvD,EAAOZ,KAAMsE,CAAAA,CAAAA,CAMlDlC,EAASZ,QAAQoC,QAAQa,YAAYpE,OACrC+B,EAASZ,QAAQoC,QAAQc,WAAWC,qBAMlCvC,EAASZ,QAAQoC,QAAQU,SACzBlC,EAASZ,QAAQ0C,mBACjB9B,EAASI,eADQ0B,IAElB9B,EAASZ,QAAQc,UAAY1B,EAAMiC,UAAY,IAEhDT,EAASZ,QAAQoD,YAAY5E,KAAAA,EAAM,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,mBAAA,MAAA,SAItBY,EAAAA,CAAAA,GAAAA,CACVZ,KAAKwB,QAAQc,SAAU,MAAA,GAAO,GAE/BtC,KAAKwB,QAAQoC,QAAQa,YAAYpE,SAAW,EAAG,CAAA,IAC7CwE,EAAAA,GAAkB,OACtBtD,EAAckB,KAAAA,EAAOC,QAAQ,SAAAC,EAAAA,CACvB/B,EAAMiC,UAAYF,EAAEC,MAAKiC,EAAAA,GAAkB,CAAA,EAAA,CAGzCA,CAAAA,CAAAA,MAAAA,EAGH,CAAA,EAAA,CAAA,IAAA,aAAA,MAAA,SAGEzC,EAAU0C,EAAIlE,EAAAA,CAAAA,IAEnBY,EAAUY,EAASZ,QACnBuD,EAAOvD,EAAQwD,MAAMC,eAAAA,GAEvBzD,EAAQyC,iBAAAA,GAERzC,EAAQwC,YACRxC,EAAQ0C,gBAAAA,EAAAA,MAAAA,CAAAA,CAGNa,GACKA,EAAKG,mBAAmBV,WAAW,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,kBAAA,MAAA,SAM9BM,EAAAA,CAAAA,KACTtD,QAAQoC,QAAQlC,QAAUoD,EAAAA,IAC3BC,EAAO/E,KAAKwB,QAAQwD,MAAMC,eAAAA,GAE5BjF,KAAKwB,QAAQyC,iBAAAA,GAEbjE,KAAKwB,QAAQwC,YACbhE,KAAKwB,QAAQ0C,gBAAAA,EAGXa,IAAAA,KACGvD,QAAQoC,QAAQuB,aAAeJ,EAAKK,oBAAAA,KACpC5D,QAAQoC,QAAQa,YAAcM,EAAKN,YAAAA,KACnCjD,QAAQoC,QAAQyB,eAAiBN,EAAKO,sBAAAA,CAAAA,EAAAA,CAAAA,IAAAA,YAAAA,MAAAA,UAAAA,CAAAA,IAAAA,EAAAA,KAAAA,MAKtC,CACLnB,YAAa,SAACoB,EAAGT,EAAIR,EAAAA,CAAAA,IACf9C,EAAUgE,EAAKhE,QACnBA,EAAQoC,QAAQU,QAAUA,EAAAA,IAEtBmB,EAAiBjE,EAAQkD,WAAW5E,KAAK,SAAA4F,EAAAA,CAAAA,OACpCA,EAAKpB,UAAYA,CAAAA,CAAAA,EAG1B9C,EAAQoC,QAAQc,WAAae,EAG3BjE,EAAQoC,QAAQa,YAAYpE,QAC1BmB,EAAQoC,QAAQc,WAAWC,mBAC7BnD,EAAQwB,YAERxB,EAAQoD,YAAYE,EAAAA,EAAI,CAAA,EAG5Ba,MAAO,SAACJ,EAAGT,EAAAA,CAELU,EAAKhE,QAAQc,UAAYkD,EAAKhE,QAAQoC,QAAQgC,gBAChDL,EAAElC,eAAAA,EACFkC,EAAEjC,gBAAAA,EACFQ,WAAW,UAAA,CACT0B,EAAKhE,QAAQkC,kBAAkB8B,EAAKhE,QAAQqE,aAAcN,CAAAA,EAC1DC,EAAKhE,QAAQe,SAAAA,CAAAA,EACZ,CAAA,EAAA,EAGPuD,OAAQ,SAACP,EAAGT,EAAAA,CACNU,EAAKhE,QAAQc,WACfiD,EAAElC,eAAAA,EACFkC,EAAEjC,gBAAAA,EACFkC,EAAKhE,QAAQc,SAAAA,GACbkD,EAAKhE,QAAQe,SAAAA,EAAAA,EAGjBwD,IAAK,SAACR,EAAGT,EAAAA,CAEPU,EAAK1C,UAAAA,EAAY6C,MAAMJ,EAAGT,CAAAA,CAAAA,EAE5BkB,MAAO,SAACT,EAAGT,EAAAA,CACLU,EAAKhE,QAAQc,WACXkD,EAAKhE,QAAQyE,kBACfT,EAAK1C,UAAAA,EAAY6C,MAAMJ,EAAGT,CAAAA,EAChBU,EAAKhE,QAAQwC,cACvBuB,EAAEjC,gBAAAA,EACFQ,WAAW,UAAA,CACT0B,EAAKhE,QAAQe,SAAAA,EACbiD,EAAKhE,QAAQc,SAAAA,EAAW,EACvB,CAAA,GAAA,EAIT4D,GAAI,SAACX,EAAGT,EAAAA,CAAAA,GAEFU,EAAKhE,QAAQc,UAAYkD,EAAKhE,QAAQoC,QAAQgC,cAAe,CAC/DL,EAAElC,eAAAA,EACFkC,EAAEjC,gBAAAA,EAAAA,IACE6C,EAAQX,EAAKhE,QAAQoC,QAAQgC,cAAcvF,OAC7C+F,EAAWZ,EAAKhE,QAAQqE,aAEtBM,EAAQC,GAAYA,EAAW,GACjCZ,EAAKhE,QAAQqE,eACbL,EAAKa,YAAAA,GACID,IAAa,IACtBZ,EAAKhE,QAAQqE,aAAeM,EAAQ,EACpCX,EAAKa,YAAAA,EACLb,EAAKhE,QAAQyB,KAAKqD,UAAYd,EAAKhE,QAAQyB,KAAKsD,aAAAA,CAAAA,EAItDC,KAAM,SAACjB,EAAGT,EAAAA,CAAAA,GAEJU,EAAKhE,QAAQc,UAAYkD,EAAKhE,QAAQoC,QAAQgC,cAAe,CAC/DL,EAAElC,eAAAA,EACFkC,EAAEjC,gBAAAA,EAAAA,IACE6C,EAAQX,EAAKhE,QAAQoC,QAAQgC,cAAcvF,OAAS,EACtD+F,EAAWZ,EAAKhE,QAAQqE,aAEtBM,EAAQC,GACVZ,EAAKhE,QAAQqE,eACbL,EAAKa,YAAAA,GACIF,IAAUC,IACnBZ,EAAKhE,QAAQqE,aAAe,EAC5BL,EAAKa,YAAAA,EACLb,EAAKhE,QAAQyB,KAAKqD,UAAY,EAAA,CAAA,EAAA,OAI5B,SAACf,EAAGT,EAAAA,CAERU,EAAKhE,QAAQc,UACbkD,EAAKhE,QAAQoC,QAAQa,YAAYpE,OAAS,EAE1CmF,EAAKhE,QAAQe,SAAAA,EACJiD,EAAKhE,QAAQc,UACtBkD,EAAKhE,QAAQoD,YAAYE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,cAAAA,MAAAA,SAMrB2B,EAAAA,CAAAA,IACNC,EAAM1G,KAAKwB,QAAQyB,KAAK0D,iBAAiB,IAAA,EAC3CtG,EAASqG,EAAIrG,SAAW,EAEtBoG,IAAOzG,KAAKwB,QAAQqE,aAAee,SAASH,CAAAA,GAAAA,QAEvCjG,EAAI,EAAGA,EAAIH,EAAQG,IAAK,CAAA,IAC3B4C,EAAKsD,EAAIlG,CAAAA,EAAAA,GACTA,IAAMR,KAAKwB,QAAQqE,aAAc,CACnCzC,EAAGyD,UAAUC,IAAI9G,KAAKwB,QAAQoC,QAAQc,WAAWqC,WAAAA,EAAAA,IAE7CC,EAAe5D,EAAG6D,sBAAAA,EAClBC,EAAiBlH,KAAKwB,QAAQyB,KAAKgE,sBAAAA,EAAAA,GAEnCD,EAAaG,OAASD,EAAeC,OAAQ,CAAA,IAC3CC,EAAiBJ,EAAaG,OAASD,EAAeC,OAAAA,KACrD3F,QAAQyB,KAAKqD,WAAac,CAAAA,SACtBJ,EAAaK,IAAMH,EAAeG,IAAK,CAAA,IAC5CD,EAAiBF,EAAeG,IAAML,EAAaK,IAAAA,KAClD7F,QAAQyB,KAAKqD,WAAac,CAAAA,CAAAA,MAGjChE,EAAGyD,UAAUS,OAAOtH,KAAKwB,QAAQoC,QAAQc,WAAWqC,WAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAAAA,SAK5CQ,EAAMC,EAAAA,CAAAA,IACdC,EAASF,EAAKN,sBAAAA,EAAwBQ,OAAAA,GAEtCD,EAAe,CAAA,IACbE,EAAQH,EAAKI,cAAgBjH,OAAOkH,iBAAiBL,CAAAA,EAAAA,OAEvDE,EAASI,WAAWH,EAAMI,SAAAA,EAAaD,WAAWH,EAAMK,YAAAA,CAAAA,CAAAA,OAIrDN,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,IAAAA,OAAAA,MAAAA,UAAAA,CAAAA,MAlVA,CACL,CACE7E,IAAK,EACL1C,MAAO,KAAA,EAET,CACE0C,IAAK,EACL1C,MAAO,QAAA,EAET,CACE0C,IAAK,GACL1C,MAAO,OAAA,EAET,CACE0C,IAAK,GACL1C,MAAO,QAAA,EAET,CACE0C,IAAK,GACL1C,MAAO,OAAA,EAET,CACE0C,IAAK,GACL1C,MAAO,IAAA,EAET,CACE0C,IAAK,GACL1C,MAAO,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA8H,CAAA,EAAA,EClCTC,EAAAA,UAAAA,CAAAA,SAAAA,EACQzG,EAAAA,CAAAA,EAAAA,KAAAA,CAAAA,EAAAA,KACLA,QAAUA,EAAAA,KACVA,QAAQ0G,WAAalI,KAAAA,KACrBiD,KAAOjD,KAAKwB,QAAQyB,IAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,OAAAA,MAAAA,SAGtBA,EAAAA,CAAAA,IAAAA,EAAAA,KAAAA,KACEkF,eAAiBnI,KAAKwB,QAAQC,OAAO2G,MAAMvG,KAAK,KAAM7B,IAAAA,EAAAA,KACtDqI,yBAA2BrI,KAAKsI,SACnC,UAAA,CACM9C,EAAKhE,QAAQc,UACfkD,EAAKhE,QAAQoD,YAAYY,EAAKhE,QAAQoC,QAAQlC,QAAAA,EAAS,CAAA,EAG3D,IAAA,EACA,EAAA,KAEG6G,kBAAoBvI,KAAKsI,SAC5B,UAAA,CACM9C,EAAKhE,QAAQc,UACfkD,EAAKhE,QAAQwD,MAAMwD,oBAAAA,EAAoB,CAAA,EAG3C,IAAA,EACA,EAAA,KAIGhH,QAAQwD,MACVyD,YAAAA,EACAvG,iBAAiB,gBAAiBlC,KAAKmI,eAAAA,EAAgB,EAAA,KACrD3G,QAAQwD,MACVyD,YAAAA,EACAvG,iBAAiB,YAAalC,KAAKmI,eAAAA,EAAgB,EACtDzH,OAAOwB,iBAAiB,SAAUlC,KAAKuI,iBAAAA,EAEnCvI,KAAK0I,cAAAA,KACFA,cAAcxG,iBACjB,SACAlC,KAAKqI,yBAAAA,EACL,EAGF3H,OAAOwB,iBAAiB,SAAUlC,KAAKqI,wBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAIpCpF,EAAAA,CAAAA,KACAzB,QAAQwD,MACVyD,YAAAA,EACAtG,oBAAoB,YAAanC,KAAKmI,eAAAA,EAAgB,EAAA,KACpD3G,QAAQwD,MACVyD,YAAAA,EACAtG,oBAAoB,gBAAiBnC,KAAKmI,eAAAA,EAAgB,EAC7DzH,OAAOyB,oBAAoB,SAAUnC,KAAKuI,iBAAAA,EAEtCvI,KAAK0I,cAAAA,KACFA,cAAcvG,oBACjB,SACAnC,KAAKqI,yBAAAA,EACL,EAGF3H,OAAOyB,oBAAoB,SAAUnC,KAAKqI,wBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,MAAAA,SAIrCM,EAAMC,EAAMC,EAAAA,CAAAA,IACfC,EAAAA,EAAAA,UAAAA,EAAAA,KAAAA,OACG,UAAA,CAAA,IACDC,EAAUC,EACZC,EAAO1I,EAKL2I,EAAUL,GAAAA,CAAcC,EAC5BK,aAAaL,CAAAA,EACbA,EAAUhF,WANE,UAAA,CACVgF,EAAU,KACLD,GAAWF,EAAKS,MAAML,EAASE,CAAAA,CAAAA,EAIVL,CAAAA,EACxBM,GAASP,EAAKS,MAAML,EAASE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,EC7EjCI,EAAAA,UAAAA,CAAAA,SAAAA,EACU7H,EAAAA,CAAAA,EAAAA,KAAAA,CAAAA,EAAAA,KACHA,QAAUA,EAAAA,KACVA,QAAQwD,MAAQhF,IAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,cAAAA,MAAAA,UAAAA,CAAAA,IAIjBsJ,EAAAA,OACAtJ,KAAKwB,QAAQoC,QAAQc,aACrB4E,EAAStJ,KAAKwB,QAAQoC,QAAQc,WAAW4E,QAGxCA,EAIEA,EAAOC,cAAcpI,SAHjBA,QAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sBAAAA,MAAAA,SAMKqI,EAAAA,CAAAA,IAEZC,EAAAA,EAAAA,KADAV,EAAU/I,KAAKwB,QAAQoC,QAGvBmB,EAAO/E,KAAKiF,eAAAA,GAAsBjF,KAAKwB,QAAQyC,iBAAAA,GAAwBjE,KAAKwB,QAAQwC,YAAahE,KAAKwB,QAAQ0C,gBAAAA,EAAAA,GAEvGa,IAFuGb,OAEjF,CAAA,GAAA,CAEzBlE,KAAKwB,QAAQkI,aAAAA,OAAAA,KAAAA,KACRlI,QAAQyB,KAAKyE,MAAMiC,QAAAA,mBASxBF,EALCzJ,KAAK4J,kBAAkBb,EAAQrH,OAAAA,EAKlB1B,KAAK6J,gCAAgC9E,EAAK+E,eAAAA,EAJ1C9J,KAAK+J,oCAAoC/J,KAAKwB,QAAQoC,QAAQlC,QACxEqD,EAAK+E,eAAAA,EAAAA,KAMRtI,QAAQyB,KAAKyE,MAAMiC,QAAAA,QAAAA,OAAkBF,EAAYpC,IAAAA;4CAAAA,EAAAA,OACrBoC,EAAYO,KAAAA;6CAAAA,EAAAA,OACXP,EAAYQ,MAAAA;8CAAAA,EAAAA,OACXR,EAAYtC,OAAAA;;qDAAAA,EAI3CsC,EAAYO,OAAS,SAATA,KACPxI,QAAQyB,KAAKyE,MAAMsC,KAAO,QAG/BP,EAAYpC,MAAQ,SAARA,KACP7F,QAAQyB,KAAKyE,MAAML,IAAM,QAG9BmC,GAAUxJ,KAAKkK,eAAAA,EAEnBxJ,OAAOoD,WAAW,UAAA,CAAA,IACVqG,EAAiB,CAClBC,MAAO5E,EAAKhE,QAAQyB,KAAKoH,YACzB5C,OAAQjC,EAAKhE,QAAQyB,KAAKqH,YAAAA,EAEzBC,EAAkB/E,EAAKgF,gBAAgBf,EAAaU,CAAAA,EAEpDM,EAA8B/J,OAAOgK,WAAaP,EAAeC,QAAUG,EAAgBP,MAAQO,EAAgBN,OACnHU,EAA4BjK,OAAOkK,YAAcT,EAAe1C,SAAW8C,EAAgBlD,KAAOkD,EAAgBpD,SAClHsD,GAA+BE,KAC/BnF,EAAKhE,QAAQyB,KAAKyE,MAAMiC,QAAU,gBAClCnE,EAAKgD,oBAAoBgB,CAAAA,EAAAA,EAE9B,CAAA,CAAA,MAAA,KAGEhI,QAAQyB,KAAKyE,MAAMiC,QAAU,eAAA,CAAA,EAAA,CAAA,IAAA,gBAAA,MAAA,SAS5BkB,EAAeC,EAAMC,EAAAA,CAAAA,IAC3B/F,EACAuC,EAAOsD,EAAAA,GAEPC,EAAAA,QACStK,EAAI,EAAGA,EAAIsK,EAAKzK,OAAQG,IAAK,CAAA,IAClC+G,EAAOA,EAAKyD,WAAWF,EAAKtK,CAAAA,CAAAA,KADM,OACNA,OAAAA,KAIrB+G,EAAKlH,OAAS0K,GACjBA,GAAUxD,EAAKlH,OACfkH,EAAOA,EAAK0D,YAEZ1D,EAAKyD,WAAW3K,SAAW,GAAMkH,EAAKlH,SACtCkH,EAAOA,EAAK2D,gBAAAA,CAAAA,IAIpBC,EAAMnL,KAAKoL,mBAAAA,GAEfpG,EAAQhF,KAAKyI,YAAAA,EAAc4C,YAAAA,GACrBC,SAAS/D,EAAMwD,CAAAA,EACrB/F,EAAMuG,OAAOhE,EAAMwD,CAAAA,EACnB/F,EAAMwG,SAAAA,EAAS,EAAA,GAAA,CAGXL,EAAIM,gBAAAA,CAAAA,MACCC,CAAAA,CAETP,EAAIQ,SAAS3G,CAAAA,EACb6F,EAAce,MAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAAAA,SAGCC,EAAMC,EAAqB7H,EAAkB8H,EAAerG,EAAAA,CAAAA,IACvEX,EAAO/E,KAAKiF,eAAAA,GAAqBhB,EAAkB6H,EAAqB9L,KAAKwB,QAAQwC,YAAahE,KAAKwB,QAAQ0C,gBAAAA,EAAAA,GAE/Ga,IAF+Gb,OAE3F,CAAA,IAChB6E,EAAU/I,KAAKwB,QAAQoC,QACvBoI,EAAe,IAAIrL,YAAY,mBAAoB,CACnDK,OAAQ,CACJ0E,KAAMA,EACNtD,SAAU2G,EACVA,QAAShE,EACTnE,MAAOmL,CAAAA,CAAAA,CAAAA,EAAAA,GAIV/L,KAAK4J,kBAAkBb,EAAQrH,OAAAA,EAe7B,CAKHmK,GAH0D,OAAlC7L,KAAKwB,QAAQyK,mBAAqB,SACpDjM,KAAKwB,QAAQyK,kBACb,OAAA,IAEFC,EAASnH,EAAK+E,gBAAkB/E,EAAKN,YAAYpE,OAChDL,KAAKwB,QAAQ0C,mBACdgI,GAAUnH,EAAKG,mBAAmB7E,QAAAA,KAEjC8L,UAAUN,EAAM9G,EAAK+E,gBAAiBoC,CAAAA,CAAAA,KAzBD,CAAA,IACtCE,EAAUpM,KAAKwB,QAAQoC,QAAQlC,QAC/B2K,EAAsD,OAAlCrM,KAAKwB,QAAQyK,mBAAqB,SACpDjM,KAAKwB,QAAQyK,kBACb,IACNJ,GAAQQ,EAAAA,IACJC,EAAWvH,EAAK+E,gBAChBoC,EAASnH,EAAK+E,gBAAkB/E,EAAKN,YAAYpE,OAASgM,EAAWhM,OACpEL,KAAKwB,QAAQ0C,mBACdgI,GAAUnH,EAAKG,mBAAmB7E,OAAS,GAE/C+L,EAAQlM,MAAQkM,EAAQlM,MAAMqM,UAAU,EAAGD,CAAAA,EAAYT,EACnDO,EAAQlM,MAAMqM,UAAUL,EAAQE,EAAQlM,MAAMG,MAAAA,EAClD+L,EAAQI,eAAiBF,EAAWT,EAAKxL,OACzC+L,EAAQK,aAAeH,EAAWT,EAAKxL,MAAAA,CAc3C0I,EAAQrH,QAAQgL,cAAc,IAAI/L,YAAY,QAAS,CAAEG,QAAAA,EAAS,CAAA,CAAA,EAClEiI,EAAQrH,QAAQgL,cAAcV,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,YAAAA,MAAAA,SAI5BW,EAAML,EAAUJ,EAAAA,CAAAA,IAClBlH,EAAOmG,EACXA,EAAMnL,KAAKoL,mBAAAA,GACXpG,EAAQhF,KAAKyI,YAAAA,EAAc4C,YAAAA,GACrBC,SAASH,EAAIyB,WAAYN,CAAAA,EAC/BtH,EAAMuG,OAAOJ,EAAIyB,WAAYV,CAAAA,EAC7BlH,EAAM6H,eAAAA,EAAAA,IAEF/H,EAAK9E,KAAKyI,YAAAA,EAAcqE,cAAc,KAAA,EAC1ChI,EAAGiI,UAAYJ,EAAAA,QAEXK,EAAMC,EADNC,EAAOlN,KAAKyI,YAAAA,EAAc0E,uBAAAA,EAEtBH,EAAOlI,EAAGsI,YACdH,EAAWC,EAAKG,YAAYL,CAAAA,EAEhChI,EAAMsI,WAAWJ,CAAAA,EAGbD,KACAjI,EAAQA,EAAMuI,WAAAA,GACRC,cAAcP,CAAAA,EACpBjI,EAAMwG,SAAAA,EAAS,EACfL,EAAIM,gBAAAA,EACJN,EAAIQ,SAAS3G,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAAAA,UAAAA,CAAAA,OAKbhF,KAAKwB,QAAQkD,WAAW4E,OACjBtJ,KAAKwB,QAAQkD,WAAW4E,OAAOC,cAAckE,aAAAA,EAGjD/M,OAAO+M,aAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,0BAAAA,MAAAA,SAGM/L,EAAAA,CAAAA,GAChBA,EAAQ8B,aAAe,KAAfA,MACD,GAAA,QAGFhD,EAAI,EAAGA,EAAIkB,EAAQ8B,WAAWwH,WAAW3K,OAAQG,IAAK,GAChDkB,EAAQ8B,WAAWwH,WAAWxK,CAAAA,IAE5BkB,EAAAA,OACFlB,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iCAAAA,MAAAA,SAKYkN,EAAAA,CAAAA,IACvBvC,EAAMnL,KAAKoL,mBAAAA,EACXhF,EAAW+E,EAAIyB,WACf9B,EAAO,CAAA,EAAA,GAGP1E,GAAY,KAAM,CAAA,QACd5F,EACAmN,EAAKvH,EAASwH,gBACXxH,IAAa,MAAQuH,IAAO,QAC/BnN,EAAIR,KAAK6N,wBAAwBzH,CAAAA,EACjC0E,EAAKgD,KAAKtN,CAAAA,GACV4F,EAAWA,EAAS5C,cACH,OACbmK,EAAKvH,EAASwH,iBAAAA,OAGtB9C,EAAKiD,QAAAA,EAKE,CACH3H,SAAUA,EACV0E,KAAMA,EACNC,OALKI,EAAI6C,WAAW,CAAA,EAAGC,WAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mCAAAA,MAAAA,UAAAA,CAAAA,IAW3BlF,EAAU/I,KAAKwB,QAAQoC,QACvBiI,EAAO,GAAA,GAEN7L,KAAK4J,kBAAkBb,EAAQrH,OAAAA,EAS7B,CAAA,IACCwM,EAAelO,KAAKoL,mBAAAA,EAAqBwB,WAAAA,GAEzCsB,GAAgB,KAAM,CAAA,IAClBC,EAAqBD,EAAaE,YAClCC,EAAoBrO,KAAKoL,mBAAAA,EAAqB4C,WAAW,CAAA,EAAGC,YAE5DE,GAAsBE,GAAqB,IAC3CxC,EAAOsC,EAAmB5B,UAAU,EAAG8B,CAAAA,EAAAA,CAAAA,KAjBL,CAAA,IACtCC,EAAgBtO,KAAKwB,QAAQoC,QAAQlC,QAAAA,GACrC4M,EAAe,CAAA,IACXhC,EAAWgC,EAAc9B,eACzB8B,EAAcpO,OAASoM,GAAY,IACnCT,EAAOyC,EAAcpO,MAAMqM,UAAU,EAAGD,CAAAA,EAAAA,CAAAA,CAAAA,OAiB7CT,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAAAA,SAGOA,EAAAA,CAAAA,IAEV0C,GADJ1C,EAAOA,EAAK2C,QAAQ,UAAW,GAAA,GACTC,MAAM,KAAA,EAAA,OAErBF,EADWA,EAAWlO,OAAS,CAAA,EACPqO,KAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iBAAAA,MAAAA,SAGpBC,EAAmB1K,EAAkB6H,EAAqB9H,EAAa4K,EAAAA,CAAAA,IAE9ExI,EAAU0E,EAAMC,EAAAA,EAAAA,KADhB2C,EAAM1N,KAAKwB,QAAQoC,QAAAA,GAGlB5D,KAAK4J,kBAAkB8D,EAAIhM,OAAAA,EAEzB,CAAA,IACCmN,EAAgB7O,KAAK8O,+BAA+BpB,CAAAA,EAEpDmB,IACAzI,EAAWyI,EAAczI,SACzB0E,EAAO+D,EAAc/D,KACrBC,EAAS8D,EAAc9D,OAAAA,MAP3B3E,EAAWpG,KAAKwB,QAAQoC,QAAQlC,QAAAA,IAWhCqN,EAAiB/O,KAAKgP,iCAAAA,EACtBC,EAA2BjP,KAAKkP,kBAAkBH,CAAAA,EAAAA,GAElDH,EAAAA,MACO,CACH9E,gBAAiBiF,EAAe1O,OAAS4O,EAAyB5O,OAClEoE,YAAawK,EACbE,uBAAwB/I,EACxBhB,oBAAqB0F,EACrBxF,sBAAuByF,CAAAA,EAAAA,GAI3BgE,GAAAA,KAAyD,CAAA,IAErD5K,EADAiL,EAAAA,GAA4B,GAAA,KAG3B5N,QAAQkD,WAAWhC,QAAQ,SAAA2M,GAAAA,CAAAA,IACxBC,GAAID,GAAO/K,QACXiL,GAAMF,GAAOvD,oBACb9C,EAAKwG,0BAA0BT,EAAgBO,EAAAA,EAC/CP,EAAeU,YAAYH,EAAAA,EAE3BC,GAAMH,IACNA,EAA2BG,GAC3BpL,EAAcmL,GACdxD,EAAsBuD,GAAOvD,oBAAAA,CAAAA,EAIjCsD,GAA4B,IAExBA,IAA6B,GAA7BA,CACCtD,GACD,YAAY4D,KACRX,EAAexC,UACX6C,EAA2B,EAC3BA,CAAAA,CAAAA,GAGd,CAAA,IACMO,EAAwBZ,EAAexC,UAAU6C,EAA2BjL,EAAY9D,OACxF0O,EAAe1O,MAAAA,EAEnB8D,EAAc4K,EAAexC,UAAU6C,EAA0BA,EAA2BjL,EAAY9D,MAAAA,EAAAA,IACpGuP,EAAmBD,EAAsBpD,UAAU,EAAG,CAAA,EACtDsD,EAAeF,EAAsBtP,OAAS,IAE1CuP,IAAqB,KACrBA,IAAqB,QAEzB3L,IACA0L,EAAwBA,EAAsBjB,KAAAA,GAAAA,IAG9CoB,EAAQ9L,EAAc,UAAY,YAAA,GAAA,KAEjCxC,QAAQyC,iBAAmB6L,EAAMJ,KAAKC,CAAAA,EAAAA,CAEtCE,IAAiBlB,GAAAA,CAAuBmB,EAAMJ,KAAKC,CAAAA,GAAAA,MAC7C,CACH7F,gBAAiBsF,EACjB3K,YAAakL,EACbR,uBAAwB/I,EACxBhB,oBAAqB0F,EACrBxF,sBAAuByF,EACvB7F,mBAAoBf,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,4BAAAA,MAAAA,SAOb4L,EAAKzL,EAAAA,CAAAA,QACxB0L,EAAcD,EAAItB,MAAM,EAAA,EAAIV,QAAAA,EAAUkC,KAAK,EAAA,EAC3CxJ,EAAAA,GAEKyJ,EAAO,EAAGC,EAAMJ,EAAI1P,OAAQ6P,EAAOC,EAAKD,IAAQ,CAAA,QACjDE,EAAYF,IAASH,EAAI1P,OAAS,EAClCwP,EAAe,KAAKH,KAAKM,EAAYE,EAAO,CAAA,CAAA,EAE5CG,EAAAA,GACKC,EAAahM,EAAQjE,OAAS,EAAGiQ,GAAc,EAAGA,IAAAA,GACrDhM,EAAQgM,CAAAA,IAAgBN,EAAYE,EAAKI,CAAAA,EAAa,CACxDD,EAAAA,GAAQ,KAAA,CAAA,GAKRA,IAAUD,GAAaP,GAAe,CACtCpJ,EAAQsJ,EAAI1P,OAAS,EAAI6P,EAAAA,KAAAA,CAAAA,CAAAA,OAK1BzJ,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAAAA,SAGO/E,EAAAA,CAAAA,OACPA,EAAQ6B,WAAa,SAAW7B,EAAQ6B,WAAa,UAAbA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAAAA,SAGnCkG,EAAaU,EAAAA,CAAAA,IACrBoG,EAAc7P,OAAOgK,WACrB8F,EAAe9P,OAAOkK,YACtB6F,EAAMtP,SAASuP,gBACfC,GAAcjQ,OAAOkQ,aAAeH,EAAII,aAAeJ,EAAIK,YAAc,GACzEC,GAAarQ,OAAOsQ,aAAeP,EAAInK,YAAcmK,EAAIQ,WAAa,GAEtEC,EAAqC,OAApBzH,EAAYpC,KAAQ,SAAWoC,EAAYpC,IAAM0J,EAAYP,EAAe/G,EAAYtC,OAASgD,EAAe1C,OACjI0J,EAAyC,OAAtB1H,EAAYQ,OAAU,SAAWR,EAAYQ,MAAQR,EAAYO,KAAOG,EAAeC,MAC1GgH,EAA2C,OAAvB3H,EAAYtC,QAAW,SAAWsC,EAAYtC,OAASsC,EAAYpC,IAAM8C,EAAe1C,OAC5G4J,EAAuC,OAArB5H,EAAYO,MAAS,SAAWP,EAAYO,KAAO2G,EAAaJ,EAAc9G,EAAYQ,MAAQE,EAAeC,MAAAA,MAEhI,CACH/C,IAAK6J,EAAUI,KAAKC,MAAMR,CAAAA,EAC1B9G,MAAOkH,EAAYG,KAAKE,KAAKb,EAAaJ,CAAAA,EAC1CpJ,OAAQiK,EAAaE,KAAKE,KAAKT,EAAYP,CAAAA,EAC3CxG,KAAMqH,EAAWC,KAAKC,MAAMZ,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAAAA,UAAAA,CAAAA,IAQ5Bc,EAAa,CACbrH,MAAO,KACP3C,OAAQ,IAAA,EAAA,OAAA,KAGPjG,QAAQyB,KAAKyE,MAAMiC,QAAAA;;;;sDAKzB8H,EAAWrH,MAAQpK,KAAKwB,QAAQyB,KAAKoH,YACrCoH,EAAWhK,OAASzH,KAAKwB,QAAQyB,KAAKqH,aAAAA,KAEjC9I,QAAQyB,KAAKyE,MAAMiC,QAAAA,iBAEjB8H,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sCAAAA,MAAAA,SAG0B/P,EAASgQ,EAAUC,EAAAA,CAAAA,IAW/CC,EAAalR,OAAOmR,kBAAoB,KAExCC,EAAM9R,KAAKyI,YAAAA,EAAcqE,cAAc,KAAA,EAC3CgF,EAAIC,GAAK,2CAAA,KACJtJ,YAAAA,EAAcuJ,KAAK3E,YAAYyE,CAAAA,EAAAA,IAEhCpK,EAAQoK,EAAIpK,MACZuK,EAAWvR,OAAOkH,iBAAmBA,iBAAiBlG,CAAAA,EAAWA,EAAQiG,aAE7ED,EAAMwK,WAAa,WACfxQ,EAAQ6B,WAAa,UACrBmE,EAAMyK,SAAW,cAIrBzK,EAAMgK,SAAW,WACjBhK,EAAM0K,WAAa,SA1BF,CAAC,YAAa,YAAa,QAAS,SAAU,YAC3D,YAAa,iBAAkB,mBAC/B,oBAAqB,kBAAmB,aACxC,eAAgB,gBAAiB,cACjC,YAAa,cAAe,aAAc,cAC1C,WAAY,iBAAkB,aAAc,aAC5C,YAAa,gBAAiB,aAC9B,iBAAkB,gBAAiB,aAAA,EAsB5B1P,QAAQ,SAAA2P,GAAAA,CACf3K,EAAM2K,EAAAA,EAAQJ,EAASI,EAAAA,CAAAA,CAAAA,EAGvBT,GACAlK,EAAM0C,MAAAA,GAAAA,OAAYxD,SAASqL,EAAS7H,KAAAA,EAAS,EAAA,IAAA,EACzC1I,EAAQ6E,aAAeK,SAASqL,EAASxK,MAAAA,IACzCC,EAAM4K,UAAY,WAEtB5K,EAAM6K,SAAW,SAGrBT,EAAI1D,YAAc1M,EAAQxB,MAAMqM,UAAU,EAAGmF,CAAAA,EAEzChQ,EAAQ6B,WAAa,UACrBuO,EAAI1D,YAAc0D,EAAI1D,YAAYI,QAAQ,MAAO,MAAA,GAAA,IAGjDgE,EAAOxS,KAAKyI,YAAAA,EAAcqE,cAAc,MAAA,EAC5C0F,EAAKpE,YAAc1M,EAAQxB,MAAMqM,UAAUmF,CAAAA,GAAa,IACxDI,EAAIzE,YAAYmF,CAAAA,EAAAA,IAEZC,EAAO/Q,EAAQuF,sBAAAA,EACfwJ,EAAMtP,SAASuP,gBACfC,GAAcjQ,OAAOkQ,aAAeH,EAAII,aAAeJ,EAAIK,YAAc,GACzEC,GAAarQ,OAAOsQ,aAAeP,EAAInK,YAAcmK,EAAIQ,WAAa,GAEtE5J,EAAM,EACN2C,EAAO,EACPhK,KAAK0S,sBACPrL,EAAMoL,EAAKpL,IACX2C,EAAOyI,EAAKzI,MAAAA,IAGVP,EAAc,CACdpC,IAAKA,EAAM0J,EAAYyB,EAAKG,UAAY/L,SAASqL,EAASW,cAAAA,EAAkBhM,SAASqL,EAASY,QAAAA,EAAYnR,EAAQ4E,UAClH0D,KAAMA,EAAO2G,EAAa6B,EAAKM,WAAalM,SAASqL,EAASc,eAAAA,CAAAA,EAG9DxC,EAAc7P,OAAOgK,WACrB8F,EAAe9P,OAAOkK,YAEtBT,EAAiBnK,KAAKgT,kBAAAA,EACtBzI,EAAkBvK,KAAKwK,gBAAgBf,EAAaU,CAAAA,EAEpDI,EAAgBN,QAChBR,EAAYQ,MAAQsG,EAAc9G,EAAYO,KAC9CP,EAAYO,KAAO,QAAA,IAGnBiJ,GAAejT,KAAKwB,QAAQkH,cAC1B1I,KAAKwB,QAAQkH,cAAc4B,aAC3BtK,KAAKyI,YAAAA,EAAcuJ,KAAK1H,aAAAA,GAE1BC,EAAgBpD,OAAQ,CAAA,IAIpB+L,GAAuBD,IAAgBzC,GAH1BxQ,KAAKwB,QAAQkH,cACxB1I,KAAKwB,QAAQkH,cAAczB,sBAAAA,EAC3BjH,KAAKyI,YAAAA,EAAcuJ,KAAK/K,sBAAAA,GACuCI,KAErEoC,EAAYtC,OAAS+L,IAAwB1C,EAAeiC,EAAKpL,IAAMmL,EAAKG,WAC5ElJ,EAAYpC,IAAM,MAAA,CAAA,OAGtBkD,EAAkBvK,KAAKwK,gBAAgBf,EAAaU,CAAAA,GAChCH,OAChBP,EAAYO,KAAOuG,EAAcpG,EAAeC,MAC1CuG,EAAaJ,EAAcpG,EAAeC,MAC1CuG,EAAAA,OACClH,EAAYQ,OAEnBM,EAAgBlD,MAChBoC,EAAYpC,IAAMmJ,EAAerG,EAAe1C,OAC1CsJ,EAAYP,EAAerG,EAAe1C,OAC1CsJ,EAAAA,OACCtH,EAAYtC,QAAAA,KAGlBsB,YAAAA,EAAcuJ,KAAKmB,YAAYrB,CAAAA,EAC7BrI,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kCAAAA,MAAAA,SAGqB2J,EAAAA,CAAAA,IACxBpO,EACAmG,EAAMnL,KAAKoL,mBAAAA,GAEfpG,EAAQhF,KAAKyI,YAAAA,EAAc4C,YAAAA,GACrBC,SAASH,EAAIyB,WAAYwG,CAAAA,EAC/BpO,EAAMuG,OAAOJ,EAAIyB,WAAYwG,CAAAA,EAE7BpO,EAAMwG,SAAAA,EAAS,EAAA,IAEXiH,EAAOzN,EAAMiC,sBAAAA,EACbwJ,EAAMtP,SAASuP,gBACfC,GAAcjQ,OAAOkQ,aAAeH,EAAII,aAAeJ,EAAIK,YAAc,GACzEC,GAAarQ,OAAOsQ,aAAeP,EAAInK,YAAcmK,EAAIQ,WAAa,GAKtExH,EAAc,CACdO,KAJOyI,EAAKzI,KAIC2G,EACbtJ,IAJMoL,EAAKpL,IAIAoL,EAAKhL,OAASsJ,CAAAA,EAEzBR,EAAc7P,OAAOgK,WACrB8F,EAAe9P,OAAOkK,YAEtBT,EAAiBnK,KAAKgT,kBAAAA,EACtBzI,EAAkBvK,KAAKwK,gBAAgBf,EAAaU,CAAAA,EAEpDI,EAAgBN,QAChBR,EAAYO,KAAO,OACnBP,EAAYQ,MAAQsG,EAAckC,EAAKzI,KAAO2G,GAAAA,IAG9CsC,EAAejT,KAAKwB,QAAQkH,cAC1B1I,KAAKwB,QAAQkH,cAAc4B,aAC3BtK,KAAKyI,YAAAA,EAAcuJ,KAAK1H,aAAAA,GAE1BC,EAAgBpD,OAAQ,CAAA,IAIpB+L,EAAuBD,GAAgBzC,GAH1BxQ,KAAKwB,QAAQkH,cACxB1I,KAAKwB,QAAQkH,cAAczB,sBAAAA,EAC3BjH,KAAKyI,YAAAA,EAAcuJ,KAAK/K,sBAAAA,GACuCI,KAErEoC,EAAYpC,IAAM,OAClBoC,EAAYtC,OAAS+L,GAAwB1C,EAAeiC,EAAKpL,IAAAA,CAAAA,OAGrEkD,EAAkBvK,KAAKwK,gBAAgBf,EAAaU,CAAAA,GAChCH,OAChBP,EAAYO,KAAOuG,EAAcpG,EAAeC,MAC1CuG,EAAaJ,EAAcpG,EAAeC,MAC1CuG,EAAAA,OACClH,EAAYQ,OAEnBM,EAAgBlD,MAChBoC,EAAYpC,IAAMmJ,EAAerG,EAAe1C,OAC1CsJ,EAAYP,EAAerG,EAAe1C,OAC1CsJ,EAAAA,OACCtH,EAAYtC,QAGlBnH,KAAK0S,sBACNjJ,EAAYO,KAAOP,EAAYO,KAAOP,EAAYO,KAAOhK,KAAKwB,QAAQkH,cAAcoK,WAAarJ,EAAYO,KAC7GP,EAAYpC,IAAMoC,EAAYpC,IAAMoC,EAAYpC,IAAMrH,KAAKwB,QAAQkH,cAAciK,UAAYlJ,EAAYpC,KAGtGoC,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iBAAAA,MAAAA,SAGIlC,EAAAA,CAAAA,IAEP8L,EAEA9N,EAAIvF,KAAKiD,KAAAA,GAEFsC,IAFEtC,OAEFsC,CAAAA,KAEJ8N,IAFI9N,QAEwB8N,EAAW5L,SAAW,GAAXA,IAC1C4L,EAAa9N,EAAE0B,sBAAAA,GAEAQ,SAAW,KACtBlC,EAAIA,EAAEyF,WAAW,CAAA,KADNvD,QACM,CACOlC,EAAE0B,uBAAAA,OAAAA,IAM9BqM,EAAUD,EAAWhM,IACrBkM,EAAaD,EAAUD,EAAW5L,OAAAA,GAElC6L,EAAU,EACV5S,OAAO8I,SAAS,EAAG9I,OAAOsQ,YAAcqC,EAAWhM,IAtBhC,EAAA,UAuBZkM,EAAa7S,OAAOkK,YAAa,CAAA,IACpC4I,EAAO9S,OAAOsQ,YAAcqC,EAAWhM,IAxBxB,GA0BfmM,EAAO9S,OAAOsQ,YAxBM,MAyBpBwC,EAAO9S,OAAOsQ,YAzBM,KAAA,IA4BpByC,EAAU/S,OAAOsQ,aAAetQ,OAAOkK,YAAc2I,GAErDE,EAAUD,IACVC,EAAUD,GAGd9S,OAAO8I,SAAS,EAAGiK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sBAAAA,IAAAA,UAAAA,CAAAA,OAlkBhBzT,KAAKwB,QAAQkH,gBAAkBvH,SAAS6Q,MAAAA,CAAShS,KAAKwB,QAAQkH,aAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,EChFvEgL,EAAAA,UAAAA,CAAAA,SAAAA,EACUlS,EAAAA,CAAAA,EAAAA,KAAAA,CAAAA,EAAAA,KACHA,QAAUA,EAAAA,KACVA,QAAQmS,OAAS3T,IAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,eAAAA,MAAAA,SAGb4T,EAASC,EAAAA,CAAAA,IAAAA,EAAAA,KAAAA,OACXA,EAAMC,OAAO,SAAAC,EAAAA,CAAAA,OACTvO,EAAKkK,KAAKkE,EAASG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,OAAAA,MAAAA,SAI7BH,EAASG,EAAAA,CAAAA,OACH/T,KAAKqQ,MAAMuD,EAASG,CAAAA,IAAY,IAAZA,CAAAA,EAAAA,CAAAA,IAAAA,QAAAA,MAAAA,SAGzBH,EAASG,EAAQC,EAAAA,CACnBA,EAAOA,GAAQ,CAAA,EAGLD,EAAO1T,OAAAA,IAGb4T,EAAMD,EAAKC,KAAO,GAClBC,EAAOF,EAAKE,MAAQ,GACpBC,EAAgBH,EAAKI,eAAiBL,GAAUA,EAAOhR,YAAAA,EAAAA,GAGvDiR,EAAKK,KAAAA,MACE,CAACC,SAAUP,EAAQQ,MAAO,CAAA,EAGrCX,EAAUI,EAAKI,eAAiBR,GAAWA,EAAQ7Q,YAAAA,EAAAA,IAE/CyR,EAAexU,KAAKyU,SAASN,EAAeP,EAAS,EAAG,EAAG,CAAA,CAAA,EAAA,OAC1DY,EAGE,CACHF,SAAUtU,KAAK0U,OAAOX,EAAQS,EAAaG,MAAOV,EAAKC,CAAAA,EACvDK,MAAOC,EAAaD,KAAAA,EAJb,IAAA,CAAA,EAAA,CAAA,IAAA,WAAA,MAAA,SAQNR,EAAQH,EAASgB,EAAaC,EAAcL,EAAAA,CAAAA,GAE7CZ,EAAQvT,SAAWwU,EAAAA,MAGZ,CACHN,MAAOvU,KAAK8U,eAAeN,CAAAA,EAC3BG,MAAOH,EAAaO,MAAAA,CAAAA,EAAAA,GAAAA,EAKxBhB,EAAO1T,SAAWuU,GAAehB,EAAQvT,OAASwU,EAAed,EAAO1T,OAASuU,GAAAA,CAAAA,QAMjFI,EAAMC,EAFN3F,EAAIsE,EAAQiB,CAAAA,EACZpO,EAAQsN,EAAOmB,QAAQ5F,EAAGsF,CAAAA,EAGvBnO,EAAAA,IAAY,CAAA,GACf+N,EAAa1G,KAAKrH,CAAAA,EAClBwO,EAAOjV,KAAKyU,SAASV,EAAQH,EAASnN,EAAQ,EAAGoO,EAAe,EAAGL,CAAAA,EACnEA,EAAaW,IAAAA,EAAAA,CAGRF,EAAAA,OACMD,GAAAA,CAGNA,GAAQA,EAAKT,MAAQU,EAAKV,SAC3BS,EAAOC,GAGXxO,EAAQsN,EAAOmB,QAAQ5F,EAAG7I,EAAQ,CAAA,CAAA,CAAA,OAG/BuO,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iBAAAA,MAAAA,SAGIR,EAAAA,CAAAA,IACPD,EAAQ,EACRU,EAAO,EAAA,OAEXT,EAAa9R,QAAQ,SAAC+D,EAAOjG,EAAAA,CACrBA,EAAI,IACAgU,EAAahU,EAAI,CAAA,EAAK,IAAMiG,EAC5BwO,GAAQA,EAAO,EAGfA,EAAO,GAIfV,GAASU,CAAAA,CAAAA,EAGNV,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAGJR,EAAQqB,EAASnB,EAAKC,EAAAA,CAAAA,IACrBI,EAAWP,EAAOxH,UAAU,EAAG6I,EAAQ,CAAA,CAAA,EAAA,OAE3CA,EAAQ1S,QAAQ,SAAC+D,EAAOjG,EAAAA,CACpB8T,GAAYL,EAAMF,EAAOtN,CAAAA,EAASyN,EAC9BH,EAAOxH,UAAU9F,EAAQ,EAAI2O,EAAQ5U,EAAI,CAAA,EAAM4U,EAAQ5U,EAAI,CAAA,EAAKuT,EAAO1T,MAAAA,CAAAA,CAAAA,EAGxEiU,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAGJV,EAASyB,EAAKrB,EAAAA,CAAAA,IAAAA,EAAAA,KAAAA,OACjBA,EAAOA,GAAQ,CAAA,EACRqB,EACFC,OAAO,SAACC,EAAM7T,EAAS6N,EAAK8F,EAAAA,CAAAA,IACrBtF,EAAMrO,EAENsS,EAAKwB,WACLzF,EAAMiE,EAAKwB,QAAQ9T,CAAAA,KAGfqO,EAAM,KAAA,IAIVuE,EAAWtL,EAAKqH,MAAMuD,EAAS7D,EAAKiE,CAAAA,EAAAA,OAEpCM,GAAY,OACZiB,EAAKA,EAAKlV,MAAAA,EAAU,CAChB0T,OAAQO,EAASA,SACjBC,MAAOD,EAASC,MAChB9N,MAAO8I,EACPkG,SAAU/T,CAAAA,GAIX6T,CAAAA,EACR,CAAA,CAAA,EAENG,KAAK,SAACC,EAAGC,EAAAA,CAAAA,IACFC,EAAUD,EAAErB,MAAQoB,EAAEpB,MAAAA,OACtBsB,GACGF,EAAElP,MAAQmP,EAAEnP,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,EAAAA,OAAAA,UAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,ICtEHuB,EAAAA,EAAAA,KAAAA,EAAAA,EArExB8N,OAAAA,EAAAA,IAAAA,OAAS,KAAAH,EAAAI,EAAAC,EACT1M,OAAAA,EAAAA,IAAAA,OAAS,KAAAyM,EAAAE,EAAAD,EACTjP,YAAAA,EAAAA,IAAAA,OAAc,YAAAkP,EAAAC,EAAAF,EACdG,eAAAA,EAAAA,IAAAA,OAAiB,oBAAAD,EAAAE,EAAAJ,EACjBK,UAAAA,EAAAA,IAAAA,OAAY,GAAAD,EAAAE,EAAAN,EACZ1R,QAAAA,EAAAA,IAAAA,OAAU,IAAAgS,EAAAC,EAAAP,EACV9R,iBAAAA,EAAAA,IAAAA,QAAAA,EAAAA,EAAAA,EACAsS,eAAAA,EAAAA,IAAAA,OAAiB,KAAAC,EAAAC,GAAAV,EACjBW,iBAAAA,GAAAA,KAAAA,OAAmB,KAAAD,GAAAE,GAAAZ,EACnBa,OAAAA,GAAAA,KAAAA,OAAS,MAAAD,GAAAE,GAAAd,EACTe,SAAAA,GAAAA,KAAAA,OAAW,QAAAD,GAAAE,GAAAhB,EACXtR,WAAAA,GAAAA,KAAAA,OAAa,KAAAsS,GAAAC,GAAAjB,EACbtN,cAAAA,GAAAA,KAAAA,OAAgB,KAAAuO,GAAAC,GAAAlB,EAChBmB,gBAAAA,GAAAA,KAAAA,OAAkB,KAAAD,GAAAE,EAAApB,EAClBlK,oBAAAA,EAAAA,IAAAA,QAAAA,EAAAA,EAAAA,EACA9H,YAAAA,EAAAA,IAAAA,QAAAA,EAAAA,EAAAA,EACAiI,kBAAAA,GAAAA,IAAAA,OAAoB,KAAAoL,EAAAC,GAAAtB,EACpBtM,aAAAA,GAAAA,KAAAA,QAAAA,GAAAA,GAAAA,EACAzD,kBAAAA,GAAAA,KAAAA,QAAAA,GAAAA,GAAAA,EACAsR,WAAAA,GAAAA,KAAAA,OAAa,CAAA,EAAAC,GAAAC,GAAAzB,EACb0B,cAAAA,GAAAA,KAAAA,OAAgB,KAAAD,GAAAE,GAAA3B,EAChBrR,kBAAAA,GAAAA,KAAAA,OAAoB,EAAAgT,GAAA,GAAApS,EAAA,KAAAyC,CAAA,EAAA,KAEf9D,iBAAmBA,EAAAA,KACnB2B,aAAe,EAAA,KACfjC,QAAU,CAAA,EAAA,KACVZ,WAAAA,GAAa,KACbV,SAAAA,GAAW,KACXoG,cAAgBA,GAAAA,KAChB1E,YAAcA,EAAAA,KACdiI,kBAAoBA,GAAAA,KACpBvC,aAAeA,GAAAA,KACfzF,iBAAAA,GAAmB,KACnBgC,kBAAoBA,GAErBjG,KAAKkE,mBACPI,EAAU,GACVN,EAAAA,IAGE8R,EAAAA,KACGpR,WAAa,CAChB,CAEEJ,QAASA,EAGTgF,OAAQA,EAGRvC,YAAaA,EAGboP,eAAgBA,EAGhBE,UAAWA,EAGXG,gBACEA,GAAkBoB,EAAQC,uBAC1BhW,KAAK7B,IAAAA,EAGP2W,kBACEA,IAAoBiB,EAAQE,yBAC5BjW,KAAK7B,IAAAA,EAGPmX,iBAAkBnP,EAefmP,GAdgB,OAANnP,GAAM,SACXA,EAAE0G,KAAAA,IAAW,GAAW,KACrB1G,EAEQ,OAANA,GAAM,WACRA,EAAEnG,KAAK2D,CAAAA,EAId2R,IACA,UAAA,CAAA,MACS,0BAAA,EACPtV,KAAK2D,CAAAA,GAKXqR,OAAQA,GAGRE,SAAUA,GAGVjB,OAAQA,EAERhK,oBAAqBA,EAErByL,WAAYA,GAEZG,cAAeA,GAEf/S,kBAAmBA,EAAAA,CAAAA,MAGlB,CAAA,GAAA,CAAID,GAAAA,MA6CH,IAAIjB,MAAM,oCAAA,EA5CZzD,KAAKkE,kBACP6T,QAAQC,KACN,4DAAA,EAAA,KAECtT,WAAaA,GAAWuT,IAAI,SAAAvS,GAAAA,CAAAA,MACxB,CACLpB,QAASoB,GAAKpB,SAAWA,EACzBgF,OAAQ5D,GAAK4D,QAAUA,EACvBvC,YAAarB,GAAKqB,aAAeA,EACjCoP,eAAgBzQ,GAAKyQ,gBAAkBA,EACvCE,UAAW3Q,GAAK2Q,WAAaA,EAC7BG,gBACE9Q,GAAK8Q,gBAAkBoB,EAAQC,uBAC/BhW,KAAK2D,CAAAA,EACPmR,kBACEjR,GAAKiR,kBAAoBiB,EAAQE,yBACjCjW,KAAK2D,CAAAA,EAEP2R,gBAAkB,SAAAnP,GAAAA,CAAAA,OACC,OAANA,IAAM,SACXA,GAAE0G,KAAAA,IAAW,GAAW,KACrB1G,GAEQ,OAANA,IAAM,WACRA,GAAEnG,KAAK2D,CAAAA,EAId2R,IACA,UAAA,CAAA,MACS,0BAAA,EACPtV,KAAK2D,CAAAA,CAAAA,EAER2R,EAAAA,EACHN,OAAQnR,GAAKmR,QAAUA,GACvBE,SAAUrR,GAAKqR,UAAYA,GAC3BjB,OAAQpQ,GAAKoQ,OACbhK,oBAAqBpG,GAAKoG,oBAC1ByL,WAAY7R,GAAK6R,YAAcA,GAC/BG,cAAehS,GAAKgS,eAAiBA,GACrC/S,kBAAmBe,GAAKf,mBAAqBA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAO/C0E,EAAarJ,IAAAA,EAAAA,IACbuB,EAAcvB,IAAAA,EAAAA,IACdiI,EAAkBjI,IAAAA,EAAAA,IAClB0T,EAAc1T,IAAAA,CAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,CAAAA,IAAAA,WAAAA,MAAAA,UAAAA,CAAAA,OA4CXA,KAAK0E,WAAWuT,IAAI,SAAA5I,EAAAA,CAAAA,OAClBA,EAAO/K,OAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAIXQ,EAAAA,CAAAA,GAAAA,CACAA,EAAAA,MACG,IAAIrB,MAAM,gDAAA,EAAA,GAII,OAAXyU,OAAW,KAAepT,aAAcoT,SACjDpT,EAAKA,EAAGqT,IAAAA,GAKRrT,EAAGsT,cAAgBC,UACnBvT,EAAGsT,cAAgBE,gBACnBxT,EAAGsT,cAAgBxY,MAAAA,QAEfS,EAASyE,EAAGzE,OACPG,EAAI,EAAGA,EAAIH,EAAAA,EAAUG,EAAAA,KACvB+X,QAAQzT,EAAGtE,CAAAA,CAAAA,OAAAA,KAGb+X,QAAQzT,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAAAA,SAITA,EAAAA,CACFA,EAAG0T,aAAa,cAAA,GAClBT,QAAQC,KAAK,gCAAkClT,EAAGvB,QAAAA,EAAAA,KAG/CkV,eAAe3T,CAAAA,EAAAA,KACfrD,OAAOI,KAAKiD,CAAAA,EACjBA,EAAG4T,aAAa,eAAA,EAAgB,CAAA,CAAA,EAAA,CAAA,IAAA,iBAAA,MAAA,SAGnBhX,EAAAA,CAAAA,GACTkW,EAAQe,WAAAA,EAAazD,QAAQxT,EAAQ6B,QAAAA,IAD5B7B,GAC8C,CAAA,GAAA,CACrDA,EAAQkM,gBAAAA,MAGJ,IAAInK,MAAM,4BAA8B/B,EAAQ6B,QAAAA,EAFtD7B,EAAQkM,gBAAAA,EAAkB,CAAA,CAAA,EAAA,CAAA,IAAA,aAAA,MAAA,SAOrBuI,EAAAA,CAAAA,IACLyC,EAAU5Y,KAAKgF,MAAMyD,YAAAA,EAAcqE,cAAc,KAAA,EACnD+L,EAAK7Y,KAAKgF,MAAMyD,YAAAA,EAAcqE,cAAc,IAAA,EAAA,OAC9C8L,EAAQE,UAAY3C,EACpByC,EAAQvL,YAAYwL,CAAAA,EAEhB7Y,KAAK0I,cACA1I,KAAK0I,cAAc2E,YAAYuL,CAAAA,EAGjC5Y,KAAKgF,MAAMyD,YAAAA,EAAcuJ,KAAK3E,YAAYuL,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,cAAAA,MAAAA,SAGvClX,EAAS8H,EAAAA,CAAAA,IAAAA,EAAAA,KAAAA,GAAAA,CAGjBxJ,KAAKsC,UACLtC,KAAK4D,QAAQlC,UAAYA,GACzB1B,KAAK4D,QAAQa,cAAgBzE,KAAK+Y,2BAAAA,CAAAA,KAI/BA,2BAA6B/Y,KAAK4D,QAAQa,YAG1CzE,KAAKiD,OAAAA,KACHA,KAAOjD,KAAKgZ,WAAWhZ,KAAK4D,QAAQc,WAAWyR,cAAAA,EACpDzU,EAAQuX,YAAcjZ,KAAKiD,KAAAA,KACtBiF,WAAWrG,KAAK7B,KAAKiD,IAAAA,GAAAA,KAGvBX,SAAAA,GAAW,KACXuD,aAAe,EAEf7F,KAAK4D,QAAQa,cAAAA,KACXb,QAAQa,YAAc,IAAA,IAGvByU,EAAgB,SAAApD,EAAAA,CAAAA,GAEf9M,EAAK1G,SAAAA,CAAAA,IAIN6W,EAAQnQ,EAAK2K,OAAOG,OAAO9K,EAAKpF,QAAQa,YAAaqR,EAAQ,CAC/D7B,IAAKjL,EAAKpF,QAAQc,WAAW6S,WAAWtD,KAAO,SAC/CC,KAAMlL,EAAKpF,QAAQc,WAAW6S,WAAWrD,MAAQ,UACjDG,KAAMrL,EAAKpF,QAAQc,WAAW6S,WAAWlD,KACzCmB,QAAS,SAAA1Q,EAAAA,CAAAA,GACuC,OAAnCkE,EAAKpF,QAAQc,WAAWmS,QAAW,SAAXA,OAC1B/R,EAAGkE,EAAKpF,QAAQc,WAAWmS,MAAAA,EAC7B,GAA8C,OAAnC7N,EAAKpF,QAAQc,WAAWmS,QAAW,WAAXA,OACjC7N,EAAKpF,QAAQc,WAAWmS,OAAO/R,EAAIkE,EAAKpF,QAAQa,WAAAA,EAAAA,MAEjD,IAAIhB,MACR,8DAAA,CAAA,CAAA,CAAA,EAMJuF,EAAKpF,QAAQc,WAAWgT,gBAC1ByB,EAAQA,EAAMpE,MAAM,EAAG/L,EAAKpF,QAAQc,WAAWgT,aAAAA,GAGjD1O,EAAKpF,QAAQgC,cAAgBuT,EAAAA,IAEzBN,EAAK7P,EAAK/F,KAAKmW,cAAc,IAAA,EAAA,GAEjCpQ,EAAKhE,MAAMwD,oBAAoBgB,CAAAA,EAAAA,CAE1B2P,EAAM9Y,OAAQ,CAAA,IACbgZ,EAAe,IAAI1Y,YAAY,mBAAoB,CACrDK,OAAQgI,EAAK/F,IAAAA,CAAAA,EAAAA,OAEf+F,EAAKpF,QAAQlC,QAAQgL,cAAc2M,CAAAA,EAAAA,KAEmB,OAA5CrQ,EAAKpF,QAAQc,WAAWyS,iBAAoB,YAApBA,CAC7BnO,EAAKpF,QAAQc,WAAWyS,gBAAAA,GAAAA,CAC1BnO,EAAKpF,QAAQc,WAAWyS,gBAEzBnO,EAAKzG,SAAAA,EAE8C,OAA5CyG,EAAKpF,QAAQc,WAAWyS,iBAAoB,WAC9C0B,EAAG9L,UAAY/D,EAAKpF,QAAQc,WAAWyS,gBAAAA,EACvC0B,EAAG9L,UAAY/D,EAAKpF,QAAQc,WAAWyS,gBAAAA,CAMhD0B,EAAG9L,UAAY,GAAA,IACXuM,EAAWtQ,EAAKhE,MAAMyD,YAAAA,EAAc0E,uBAAAA,EAExCgM,EAAMzW,QAAQ,SAACgD,EAAMe,EAAAA,CAAAA,IACfrD,EAAK4F,EAAKhE,MAAMyD,YAAAA,EAAcqE,cAAc,IAAA,EAChD1J,EAAGsV,aAAa,aAAcjS,CAAAA,EAC9BrD,EAAG0V,UAAY9P,EAAKpF,QAAQc,WAAW2R,UACvCjT,EAAGlB,iBAAiB,YAAa,SAAAqD,EAAAA,CAAAA,IAAAA,EAAAA,EACbyD,EAAKuQ,cAAchU,EAAEpC,MAAAA,EAAAA,CAAAA,EAA9BsD,GAAAA,EAAAA,CAAAA,EAAAA,EAAAA,CAAAA,GACLlB,EAAEiU,YAAc,GAClBxQ,EAAKvH,OAAO4E,YAAYI,CAAAA,CAAAA,CAAAA,EAGxBuC,EAAKnD,eAAiBY,GACxBrD,EAAGyD,UAAUC,IAAIkC,EAAKpF,QAAQc,WAAWqC,WAAAA,EAE3C3D,EAAG2J,UAAY/D,EAAKpF,QAAQc,WAAWiS,iBAAiBjR,CAAAA,EACxD4T,EAASjM,YAAYjK,CAAAA,CAAAA,CAAAA,EAEvByV,EAAGxL,YAAYiM,CAAAA,CAAAA,CAAAA,EAG6B,OAAnCtZ,KAAK4D,QAAQc,WAAWoR,QAAW,WAAXA,KAC5BlS,QAAQc,WAAWoR,OAAO9V,KAAK4D,QAAQa,YAAayU,CAAAA,EAEzDA,EAAclZ,KAAK4D,QAAQc,WAAWoR,MAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAAAA,SAI5BhR,EAAAA,CAAAA,GAAAA,CACPA,EAAI,MAAO,CAAA,EAAA,IACV2B,EAAQ3B,EAAGnB,aAAa,YAAA,EAAA,OACtB8C,EAA4C,CAAC3B,EAAI2B,CAAAA,EAAzCzG,KAAKuZ,cAAczU,EAAGtB,UAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,wBAAAA,MAAAA,SAGlB9B,EAAS+X,EAAAA,CACzB/X,IAAYP,SAASuY,eAAAA,KAClBC,gBAAgBjY,CAAAA,EAAAA,KAGlBkC,QAAQc,WAAa1E,KAAK0E,WAAW+U,GAAmB,CAAA,EAAA,KACxD7V,QAAQC,gBAAAA,GAAkB,KAC1BD,QAAQlC,QAAUA,EAEnBA,EAAQkI,kBACV5J,KAAK4Z,mBAAmB5Z,KAAK4D,QAAQc,WAAWJ,OAAAA,EAC7CtE,KAAK6Z,cAAcnY,EAAS1B,KAAK4D,QAAQc,WAAWJ,OAAAA,EAAAA,KAEpDM,YAAYlD,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAAAA,SAIHoD,EAAAA,CAAAA,GACdA,EAAG8G,MAAAA,EAEMlL,OAAO+M,eAFb7B,QAGMzK,SAASkK,cADFoC,OAEd,CAAA,IACIzI,EAAQ7D,SAASkK,YAAAA,EACrBrG,EAAM8U,mBAAmBhV,CAAAA,EACzBE,EAAMwG,SAAAA,EAAS,EAAA,IACXL,EAAMzK,OAAO+M,aAAAA,EACjBtC,EAAIM,gBAAAA,EACJN,EAAIQ,SAAS3G,CAAAA,CAAAA,SACG7D,SAAS6Q,KAAK+H,kBAAzB,OAAyD,CAAA,IAC1DC,EAAY7Y,SAAS6Q,KAAK+H,gBAAAA,EAC9BC,EAAUC,kBAAkBnV,CAAAA,EAC5BkV,EAAUxO,SAAAA,EAAS,EACnBwO,EAAUE,OAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAAAA,SAKKrO,EAAAA,CAAAA,IACbV,EAAKnG,GAETA,GADAmG,EAAMzK,OAAO+M,aAAAA,GACDO,WAAW,CAAA,GACjBnB,eAAAA,EAAAA,IACFsN,EAAWhZ,SAASiZ,eAAevO,CAAAA,EACvC7G,EAAMsI,WAAW6M,CAAAA,EACjBnV,EAAM8U,mBAAmBK,CAAAA,EACzBnV,EAAMwG,SAAAA,EAAS,EACfL,EAAIM,gBAAAA,EACJN,EAAIQ,SAAS3G,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAAAA,SAIDqV,EAAUxO,EAAAA,CAAAA,IAClByO,EAAYD,EAAS/T,UACrBiU,EAAWF,EAAS7N,eAEpBgO,EAAQH,EAASna,MAAMqM,UAAU,EAAGgO,CAAAA,EACpCE,EAAOJ,EAASna,MAAMqM,UACxB8N,EAAS5N,aACT4N,EAASna,MAAMG,MAAAA,EAEjBga,EAASna,MAAQsa,EAAQ3O,EAAO4O,EAChCF,GAAsB1O,EAAKxL,OAC3Bga,EAAS7N,eAAiB+N,EAC1BF,EAAS5N,aAAe8N,EACxBF,EAASzO,MAAAA,EACTyO,EAAS/T,UAAYgU,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,MAAAA,UAAAA,CAIjBta,KAAKiD,OAAAA,KACFA,KAAKyE,MAAMiC,QAAU,iBAAA,KACrBrH,SAAAA,GAAW,KACXuD,aAAe,EAAA,KACfjC,QAAU,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,oBAAA,MAAA,SAID6C,EAAOsF,EAAAA,CAAAA,GAEF,OADrBtF,EAAQG,SAASH,CAAAA,IACI,UADJA,CACgBpC,MAAMoC,CAAAA,EAAAA,CAAAA,IACnCf,EAAO1F,KAAK4D,QAAQgC,cAAca,CAAAA,EAClCiU,EAAU1a,KAAK4D,QAAQc,WAAW8R,eAAe9Q,CAAAA,EACjDgV,IAAY,MAAM1a,KAAK2a,YAAYD,EAAS3O,EAAerG,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,cAAAA,MAAAA,SAGrDgV,EAAS3O,EAAerG,EAAAA,CAAAA,KAC7BV,MAAM4V,mBAAmBF,EAAAA,GAAS,GAAY3O,EAAerG,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAAAA,SAG5DhB,EAAYmW,EAAWrM,EAAAA,CAAAA,GACI,OAAtB9J,EAAWoR,QAAW,WAAXA,MACd,IAAIrS,MAAM,kDAAA,EAIhBiB,EAAWoR,OAHDtH,EAGUqM,EAFAnW,EAAWoR,OAAOgF,OAAOD,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAM1CpB,EAAiBoB,EAAWrM,EAAAA,CAAAA,IAC7B/H,EAAQG,SAAS6S,CAAAA,EAAAA,GACA,OAAVhT,GAAU,SACnB,MAAM,IAAIhD,MAAM,uDAAA,EAAA,IAEdiB,EAAa1E,KAAK0E,WAAW+B,CAAAA,EAAAA,KAE5BsU,QAAQrW,EAAYmW,EAAWrM,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAAAA,SAGxBqM,EAAWrM,EAAAA,CAAAA,GAAAA,CACnBxO,KAAKsC,SAAAA,MAGD,IAAImB,MACR,+DAAA,EAAA,KAHGsX,QAAQ/a,KAAK4D,QAAQc,WAAYmW,EAAWrM,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAAAA,SAQ9C1J,EAAAA,CAAAA,GAAAA,CACAA,EAAAA,MACG,IAAIrB,MAAM,gDAAA,EAAA,GAII,OAAXyU,OAAW,KAAepT,aAAcoT,SACjDpT,EAAKA,EAAGqT,IAAAA,GAKRrT,EAAGsT,cAAgBC,UACnBvT,EAAGsT,cAAgBE,gBACnBxT,EAAGsT,cAAgBxY,MAAAA,QAEfS,EAASyE,EAAGzE,OACPG,EAAI,EAAGA,EAAIH,EAAAA,EAAUG,EAAAA,KACvBwa,QAAQlW,EAAGtE,CAAAA,CAAAA,OAAAA,KAGbwa,QAAQlW,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAAAA,SAITA,EAAAA,CAAAA,IAAAA,EAAAA,KAAAA,KACDrD,OAAOwZ,OAAOnW,CAAAA,EACfA,EAAGmU,aAAAA,KACA/Q,WAAW+S,OAAOnW,EAAGmU,WAAAA,EAG5BnV,WAAW,UAAA,CACTgB,EAAGoW,gBAAgB,cAAA,EACnBC,EAAK7Y,SAAAA,GACDwC,EAAGmU,aACLnU,EAAGmU,YAAY3R,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,IAAAA,UAAAA,CAAAA,OAnXZtH,KAAKob,SAAAA,EAAAA,IAAAA,SAGDC,EAAAA,CAAAA,GACPrb,KAAKob,WAAaC,IAAAA,KACfD,UAAYC,EACbrb,KAAK4D,QAAQlC,SAAS,CAAA,IACpB2X,EAAe,IAAI1Y,YAAAA,kBAAAA,OAA8B0a,CAAAA,CAAAA,EAAAA,KAChDzX,QAAQlC,QAAQgL,cAAc2M,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,IAAAA,wBAAAA,MAAAA,SAKZ3T,EAAAA,CAAAA,OAChBA,IADgBA,OAChBA,GAAAA,OACC1F,KAAK4D,QAAQc,WAAWJ,OAAAA,EAAAA,OAAUtE,KAAK4D,QAAQa,WAAAA,EACvDzE,KAAKgF,MAAM4E,kBAAkB5J,KAAK4D,QAAQlC,OAAAA,EAE1C,kCACC1B,KAAK4D,QAAQc,WAAWJ,QACvBoB,EAAK+P,SAASzV,KAAK4D,QAAQc,WAAWqS,QAAAA,GACxC,UAKF/W,KAAK4D,QAAQc,WAAWJ,QACxBoB,EAAK+P,SAASzV,KAAK4D,QAAQc,WAAWqS,QAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,0BAAAA,MAAAA,SAIXuE,EAAAA,CAAAA,OACtBA,EAAUvH,MAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAAAA,UAAAA,CAAAA,MAIV,CAAC,WAAY,OAAA,CAAA,CAAA,CAAA,CAAA,EAAA/L,CAAA,EAAA,CAAA,CAAA,IC3MxB,IAAAuT,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,EAGzBD,EAAO,UAAYC,EAAQ,CAG/B,GAAG,OAAO,OAAU,IAAc,OAASH,GAAM,UAAW,CAE5D,SAASI,GAAY,CAAC,CAEtB,IAAIC,EAAQD,EAAU,UAEtB,OAAAC,EAAM,GAAK,SAAUC,EAAWC,EAAW,CACzC,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,IAAIC,EAAS,KAAK,QAAU,KAAK,SAAW,CAAC,EAEzCC,EAAYD,EAAQF,CAAU,EAAIE,EAAQF,CAAU,GAAK,CAAC,EAE9D,OAAMG,EAAU,SAAUF,CAAS,GACjCE,EAAU,KAAMF,CAAS,EAGpB,IACT,EAEAF,EAAM,KAAO,SAAUC,EAAWC,EAAW,CAC3C,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,KAAK,GAAID,EAAWC,CAAS,EAG7B,IAAIG,EAAa,KAAK,YAAc,KAAK,aAAe,CAAC,EAErDC,EAAgBD,EAAYJ,CAAU,EAAII,EAAYJ,CAAU,GAAK,CAAC,EAE1E,OAAAK,EAAeJ,CAAS,EAAI,GAErB,IACT,EAEAF,EAAM,IAAM,SAAUC,EAAWC,EAAW,CAC1C,IAAIE,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAE9C,IAAIG,EAAQH,EAAU,QAASF,CAAS,EACxC,OAAKK,GAAS,IACZH,EAAU,OAAQG,EAAO,CAAE,EAGtB,IACT,EAEAP,EAAM,UAAY,SAAUC,EAAWO,EAAO,CAC5C,IAAIJ,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAG9CA,EAAYA,EAAU,MAAO,CAAE,EAC/BI,EAAOA,GAAQ,CAAC,EAEhB,IAAIF,EAAgB,KAAK,aAAe,KAAK,YAAaL,CAAU,EAEpE,QAAUC,KAAYE,EACPE,GAAiBA,EAAeJ,CAAS,IAIpD,KAAK,IAAKD,EAAWC,CAAS,EAE9B,OAAOI,EAAeJ,CAAS,GAGjCA,EAAS,MAAO,KAAMM,CAAK,EAG7B,OAAO,IACT,EAEAR,EAAM,OAAS,UAAW,CACxB,cAAO,KAAK,QACZ,OAAO,KAAK,YACL,IACT,EAEOD,CAEP,CAAE,ICnGF,IAAAU,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CACvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,EAGzBD,EAAO,QAAUC,EAAQ,CAG7B,GAAK,OAAQ,UAAmB,CAKhC,SAASC,EAAcC,EAAQ,CAC7B,IAAIC,EAAM,WAAYD,CAAM,EAG5B,OADcA,EAAM,QAAQ,GAAG,GAAK,IAAM,CAAC,MAAOC,CAAI,GACpCA,CACpB,CAIA,IAAIC,EAAe,CACjB,cACA,eACA,aACA,gBACA,aACA,cACA,YACA,eACA,kBACA,mBACA,iBACA,mBACF,EAEIC,EAAqBD,EAAa,OAEtC,SAASE,GAAc,CACrB,IAAIC,EAAO,CACT,MAAO,EACP,OAAQ,EACR,WAAY,EACZ,YAAa,EACb,WAAY,EACZ,YAAa,CACf,EACA,OAAAH,EAAa,QAAWI,GAAiB,CACvCD,EAAMC,CAAY,EAAI,CACxB,CAAE,EACKD,CACT,CAIA,SAASE,EAASC,EAAO,CAMvB,GAJK,OAAOA,GAAQ,WAAWA,EAAO,SAAS,cAAeA,CAAK,GAI9D,EADWA,GAAQ,OAAOA,GAAQ,UAAYA,EAAK,UACtC,OAElB,IAAIC,EAAQ,iBAAkBD,CAAK,EAGnC,GAAKC,EAAM,SAAW,OAAS,OAAOL,EAAY,EAElD,IAAIC,EAAO,CAAC,EACZA,EAAK,MAAQG,EAAK,YAClBH,EAAK,OAASG,EAAK,aAEnB,IAAIE,EAAcL,EAAK,YAAcI,EAAM,WAAa,aAGxDP,EAAa,QAAWI,GAAiB,CACvC,IAAIN,EAAQS,EAAOH,CAAY,EAC3BL,EAAM,WAAYD,CAAM,EAE5BK,EAAMC,CAAY,EAAK,MAAOL,CAAI,EAAU,EAANA,CACxC,CAAE,EAEF,IAAIU,EAAeN,EAAK,YAAcA,EAAK,aACvCO,EAAgBP,EAAK,WAAaA,EAAK,cACvCQ,EAAcR,EAAK,WAAaA,EAAK,YACrCS,EAAeT,EAAK,UAAYA,EAAK,aACrCU,EAAcV,EAAK,gBAAkBA,EAAK,iBAC1CW,EAAeX,EAAK,eAAiBA,EAAK,kBAG1CY,EAAalB,EAAcU,EAAM,KAAM,EACtCQ,IAAe,KAClBZ,EAAK,MAAQY,GAETP,EAAc,EAAIC,EAAeI,IAGvC,IAAIG,EAAcnB,EAAcU,EAAM,MAAO,EAC7C,OAAKS,IAAgB,KACnBb,EAAK,OAASa,GAEVR,EAAc,EAAIE,EAAgBI,IAGxCX,EAAK,WAAaA,EAAK,OAAUM,EAAeI,GAChDV,EAAK,YAAcA,EAAK,QAAWO,EAAgBI,GAEnDX,EAAK,WAAaA,EAAK,MAAQQ,EAC/BR,EAAK,YAAcA,EAAK,OAASS,EAE1BT,CACT,CAEA,OAAOE,CAEP,CAAE,IC3HF,IAAAY,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAKE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAASD,CAAO,EAGjCA,EAAO,aAAeC,EAASD,CAAO,CAG1C,GAAGF,GAAM,SAAkBE,EAAS,CAEpC,IAAIE,EAAQ,CAAC,EAKbA,EAAM,OAAS,SAAUC,EAAGC,EAAI,CAC9B,OAAO,OAAO,OAAQD,EAAGC,CAAE,CAC7B,EAIAF,EAAM,OAAS,SAAUG,EAAKC,EAAM,CAClC,OAAWD,EAAMC,EAAQA,GAAQA,CACnC,EAKAJ,EAAM,UAAY,SAAUK,EAAM,CAEhC,OAAK,MAAM,QAASA,CAAI,EAAWA,EAG9BA,GAAQ,KAAmC,CAAC,EAE/B,OAAOA,GAAO,UAAY,OAAOA,EAAI,QAAU,SAEvC,CAAE,GAAGA,CAAI,EAG5B,CAAEA,CAAI,CACf,EAIAL,EAAM,WAAa,SAAUM,EAAKD,EAAM,CACtC,IAAIE,EAAQD,EAAI,QAASD,CAAI,EACxBE,GAAS,IACZD,EAAI,OAAQC,EAAO,CAAE,CAEzB,EAIAP,EAAM,UAAY,SAAUQ,EAAMC,EAAW,CAC3C,KAAQD,EAAK,YAAcA,GAAQ,SAAS,MAE1C,GADAA,EAAOA,EAAK,WACPA,EAAK,QAASC,CAAS,EAAI,OAAOD,CAE3C,EAKAR,EAAM,gBAAkB,SAAUQ,EAAO,CACvC,OAAK,OAAOA,GAAQ,SACX,SAAS,cAAeA,CAAK,EAE/BA,CACT,EAKAR,EAAM,YAAc,SAAUU,EAAQ,CACpC,IAAIC,EAAS,KAAOD,EAAM,KACrB,KAAMC,CAAO,GAChB,KAAMA,CAAO,EAAGD,CAAM,CAE1B,EAIAV,EAAM,mBAAqB,SAAUY,EAAOH,EAAW,CAErD,OAAAG,EAAQZ,EAAM,UAAWY,CAAM,EAExBA,EAEJ,OAAUJ,GAAUA,aAAgB,WAAY,EAChD,OAAQ,CAAEK,EAASL,IAAU,CAE5B,GAAK,CAACC,EACJ,OAAAI,EAAQ,KAAML,CAAK,EACZK,EAIJL,EAAK,QAASC,CAAS,GAC1BI,EAAQ,KAAML,CAAK,EAGrB,IAAIM,EAAaN,EAAK,iBAAkBC,CAAS,EAEjD,OAAAI,EAAUA,EAAQ,OAAQ,GAAGC,CAAW,EACjCD,CACT,EAAG,CAAC,CAAE,CACV,EAIAb,EAAM,eAAiB,SAAUe,EAAQC,EAAYC,EAAY,CAC/DA,EAAYA,GAAa,IAEzB,IAAIN,EAASI,EAAO,UAAWC,CAAW,EACtCE,EAAcF,EAAa,UAE/BD,EAAO,UAAWC,CAAW,EAAI,UAAW,CAC1C,aAAc,KAAME,CAAY,CAAE,EAElC,IAAIC,EAAO,UACX,KAAMD,CAAY,EAAI,WAAY,IAAM,CACtCP,EAAO,MAAO,KAAMQ,CAAK,EACzB,OAAO,KAAMD,CAAY,CAC3B,EAAGD,CAAU,CACf,CACF,EAIAjB,EAAM,SAAW,SAAUoB,EAAa,CACtC,IAAIC,EAAa,SAAS,WACrBA,GAAc,YAAcA,GAAc,cAE7C,WAAYD,CAAW,EAEvB,SAAS,iBAAkB,mBAAoBA,CAAW,CAE9D,EAKApB,EAAM,SAAW,SAAUsB,EAAM,CAC/B,OAAOA,EAAI,QAAS,cAAe,SAAUC,EAAOC,EAAIC,EAAK,CAC3D,OAAOD,EAAK,IAAMC,CACpB,CAAE,EAAE,YAAY,CAClB,EAEA,IAAIC,EAAU5B,EAAO,QAKrB,OAAAE,EAAM,SAAW,SAAU2B,EAAaC,EAAY,CAClD5B,EAAM,SAAU,UAAW,CAEzB,IAAI6B,EAAW,QADO7B,EAAM,SAAU4B,CAAU,EAE5CE,EAAgB,SAAS,iBAAkB,IAAID,CAAQ,GAAI,EAC3DE,EAASjC,EAAO,OAEpB,CAAE,GAAGgC,CAAc,EAAE,QAAWtB,GAAU,CACxC,IAAIwB,EAAOxB,EAAK,aAAcqB,CAAS,EACnCI,EACJ,GAAI,CACFA,EAAUD,GAAQ,KAAK,MAAOA,CAAK,CACrC,OAAUE,EAAQ,CAEXR,GACHA,EAAQ,MAAO,iBAAiBG,CAAQ,OAAOrB,EAAK,SAAS,KAAK0B,CAAK,EAAG,EAE5E,MACF,CAEA,IAAIC,EAAW,IAAIR,EAAanB,EAAMyB,CAAQ,EAEzCF,GACHA,EAAO,KAAMvB,EAAMoB,EAAWO,CAAS,CAE3C,CAAE,CAEJ,CAAE,CACJ,EAIOnC,CAEP,CAAE,ICnMF,IAAAoC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAS,IAAoB,GAG9CD,EAAO,SAAWA,EAAO,UAAY,CAAC,EACtCA,EAAO,SAAS,KAAOC,EAASD,EAAO,OAAQ,EAGnD,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAU,CAE7E,IAAMC,EAAgB,gBAEtB,SAASC,EAAMC,EAAO,CACpB,KAAK,QAAUA,EACf,KAAK,QAAQ,UAAU,IAAKF,CAAc,EAE1C,KAAK,EAAI,EACT,KAAK,SAAS,CAChB,CAEA,IAAIG,EAAQF,EAAK,UAEjB,OAAAE,EAAM,QAAU,UAAW,CAEzB,KAAK,SAAS,EACd,KAAK,QAAQ,UAAU,OAAQH,CAAc,EAC7C,KAAK,QAAQ,MAAM,UAAY,GAC/B,KAAK,QAAQ,gBAAgB,aAAa,CAC5C,EAEAG,EAAM,QAAU,UAAW,CACzB,KAAK,KAAOJ,EAAS,KAAK,OAAQ,CACpC,EAEAI,EAAM,OAAS,UAAW,CACxB,KAAK,QAAQ,UAAU,IAAI,aAAa,EACxC,KAAK,QAAQ,gBAAgB,aAAa,CAC5C,EAEAA,EAAM,SAAW,UAAW,CAC1B,KAAK,QAAQ,UAAU,OAAO,aAAa,EAC3C,KAAK,QAAQ,aAAc,cAAe,MAAO,CACnD,EAEAA,EAAM,OAAS,UAAW,CACxB,KAAK,QAAQ,OAAO,CACtB,EAEOF,CAEP,CAAE,ICtDF,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,GAGzBD,EAAO,SAAWA,EAAO,UAAY,CAAC,EACtCA,EAAO,SAAS,MAAQC,EAAQ,EAGpC,GAAG,OAAO,OAAU,IAAc,OAASH,GAAM,UAAmB,CAEpE,SAASI,EAAOC,EAAaC,EAAWC,EAAY,CAClD,KAAK,YAAcF,EACnB,KAAK,UAAYC,EACjB,KAAK,UAAYC,EACjB,KAAK,MAAQ,CAAC,EACd,KAAK,WAAa,EAClB,KAAK,OAAS,CAChB,CAEA,IAAIC,EAAQJ,EAAM,UAElB,OAAAI,EAAM,QAAU,SAAUC,EAAO,CAC/B,KAAK,MAAM,KAAMA,CAAK,EACtB,KAAK,YAAcA,EAAK,KAAK,WAC7B,KAAK,OAAS,KAAK,IAAKA,EAAK,KAAK,YAAa,KAAK,MAAO,EAEtD,KAAK,MAAM,SAAW,IACzB,KAAK,EAAIA,EAAK,EACd,KAAK,YAAcA,EAAK,KAAM,KAAK,WAAY,EAEnD,EAEAD,EAAM,aAAe,UAAW,CAC9B,IAAIE,EAAW,KAAK,YAAY,EAC5BC,EAAaD,EAAWA,EAAS,KAAM,KAAK,SAAU,EAAI,EAC1DE,EAAa,KAAK,YAAe,KAAK,YAAcD,GACxD,KAAK,OAAS,KAAK,EAAI,KAAK,YAAcC,EAAa,KAAK,SAC9D,EAEAJ,EAAM,YAAc,UAAW,CAC7B,OAAO,KAAK,MAAO,KAAK,MAAM,OAAS,CAAE,CAC3C,EAEAA,EAAM,OAAS,UAAW,CACxB,KAAK,MAAM,QAAWC,GAAUA,EAAK,OAAO,CAAE,CAChD,EAEAD,EAAM,SAAW,UAAW,CAC1B,KAAK,MAAM,QAAWC,GAAUA,EAAK,SAAS,CAAE,CAClD,EAEAD,EAAM,gBAAkB,UAAW,CACjC,OAAO,KAAK,MAAM,IAAOC,GAAUA,EAAK,OAAQ,CAClD,EAEOL,CAEP,CAAE,IC7DF,IAAAS,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAS,IAA0B,GAGpDD,EAAO,SAAWA,EAAO,UAAY,CAAC,EACtCA,EAAO,SAAS,iBAAmBC,EAASD,EAAO,YAAa,EAGpE,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAQ,CAI3E,IAAIC,EAAQ,CAAC,EAEb,OAAAA,EAAM,eAAiB,UAAW,CAC3B,KAAK,cAEV,KAAK,YAAc,GACnB,KAAK,cAAgB,EACrB,KAAK,QAAQ,EACf,EAEAA,EAAM,QAAU,UAAW,CACzB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAE7B,IAAIC,EAAY,KAAK,EAErB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,OAAQA,CAAU,EAElB,KAAK,aAAc,sBAAuB,IAAM,KAAK,QAAQ,CAAE,CACtE,EAEAD,EAAM,eAAiB,UAAW,CAChC,IAAIE,EAAI,KAAK,EAER,KAAK,aACRA,EAAIH,EAAM,OAAQG,EAAG,KAAK,cAAe,EAAI,KAAK,eAClD,KAAK,eAAgBA,CAAE,GAGzB,KAAK,cAAeA,EAAG,KAAK,WAAY,EACxC,KAAK,oBAAoB,CAC3B,EAEAF,EAAM,cAAgB,SAAUE,EAAGC,EAAO,CACxCD,GAAK,KAAK,eAEL,KAAK,QAAQ,cAAcA,EAAI,CAACA,GACrC,IAAIE,EAAa,KAAK,iBAAkBF,CAAE,EAG1C,KAAK,OAAO,MAAM,UAAYC,EAC5B,eAAeC,CAAU,QAAU,cAAcA,CAAU,GAC/D,EAEAJ,EAAM,oBAAsB,UAAW,CACrC,IAAIK,EAAa,KAAK,OAAO,CAAC,EAC9B,GAAK,CAACA,EAAa,OAEnB,IAAIC,EAAY,CAAC,KAAK,EAAID,EAAW,OACjCE,EAAWD,EAAY,KAAK,YAChC,KAAK,cAAe,SAAU,KAAM,CAAEC,EAAUD,CAAU,CAAE,CAC9D,EAEAN,EAAM,yBAA2B,UAAW,CACpC,KAAK,MAAM,SAEjB,KAAK,EAAI,CAAC,KAAK,cAAc,OAC7B,KAAK,SAAW,EAChB,KAAK,eAAe,EACtB,EAEAA,EAAM,iBAAmB,SAAUQ,EAAW,CAC5C,OAAK,KAAK,QAAQ,gBAEP,KAAK,MAASA,EAAW,KAAK,KAAK,WAAe,GAAM,EAAI,IAAS,IAGvE,KAAK,MAAOA,CAAS,EAAI,IAEpC,EAEAR,EAAM,OAAS,SAAUC,EAAY,CAEnB,CAAC,KAAK,eAClB,KAAK,MAAO,KAAK,EAAI,GAAI,IAAM,KAAK,MAAOA,EAAY,GAAI,GAC9C,KAAK,gBAEjB,KAAK,cAAgB,IACxB,KAAK,YAAc,GACnB,OAAO,KAAK,gBAEZ,KAAK,eAAe,EACpB,KAAK,cAAe,SAAU,KAAM,CAAE,KAAK,aAAc,CAAE,EAE/D,EAEAD,EAAM,eAAiB,SAAUE,EAAI,CAEnC,IAAIO,EAAY,KAAK,eAAiBP,EACtC,KAAK,YAAa,KAAK,iBAAkBO,EAAW,EAAG,EAEvD,IAAIC,EAAW,KAAK,KAAK,YAAeR,EAAI,KAAK,eAAiB,KAAK,gBACvE,KAAK,YAAa,KAAK,gBAAiBQ,EAAU,CAAE,CACtD,EAEAV,EAAM,YAAc,SAAUW,EAAOC,EAAKC,EAAQ,CAChDF,EAAM,QAAWG,GAAU,CACzB,IAAIC,EAAYH,EAAM,EAAIC,EAAQ,EAClC,KAAK,eAAgBC,EAAMC,CAAU,EACrCH,GAAOE,EAAK,KAAK,UACnB,CAAE,CACJ,EAEAd,EAAM,cAAgB,SAAUW,EAAQ,CACjC,CAACA,GAAS,CAACA,EAAM,QAEtBA,EAAM,QAAWG,GAAU,KAAK,eAAgBA,EAAM,CAAE,CAAE,CAC5D,EAGAd,EAAM,eAAiB,SAAUc,EAAMD,EAAQ,CAC7C,KAAK,oBAAqBC,EAAMA,EAAK,EAAI,KAAK,eAAiBD,CAAM,CACvE,EAIAb,EAAM,iBAAmB,UAAW,CAClC,KAAK,GAAK,KAAK,SACf,KAAK,UAAY,KAAK,kBAAkB,CAC1C,EAEAA,EAAM,WAAa,SAAUgB,EAAQ,CACnC,KAAK,UAAYA,CACnB,EAEAhB,EAAM,kBAAoB,UAAW,CACnC,MAAO,GAAI,KAAK,QAAS,KAAK,gBAAkB,qBAAuB,UAAW,CACpF,EAEAA,EAAM,mBAAqB,UAAW,CAEpC,OAAO,KAAK,EAAI,KAAK,UAAa,EAAI,KAAK,kBAAkB,EAC/D,EAEAA,EAAM,eAAiB,UAAW,CAChC,GAAK,CAAC,KAAK,aAAe,CAAC,KAAK,cAAgB,OAIhD,IAAIiB,EADe,KAAK,MAAQ,KAAK,EACN,KAAK,SACpC,KAAK,WAAYA,CAAU,CAC7B,EAEAjB,EAAM,wBAA0B,UAAW,CAGzC,GADe,KAAK,aAAe,KAAK,eACvB,KAAK,iBAAmB,CAAC,KAAK,OAAO,OAAS,OAG/D,IAAIgB,GADW,KAAK,cAAc,OAAS,GAAK,KAAK,GAC9B,KAAK,QAAQ,mBACpC,KAAK,WAAYA,CAAM,CACzB,EAEOhB,CAEP,CAAE,IC7KF,IAAAkB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAEE,SAAUC,EAAQC,EAAU,CAE5B,GAAK,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,KACA,KACA,KACA,KACA,IACJ,MACK,CAEL,IAAIE,EAAYF,EAAO,SAEvBA,EAAO,SAAWC,EACdD,EACAA,EAAO,UACPA,EAAO,QACPA,EAAO,aACPE,EAAU,KACVA,EAAU,MACVA,EAAU,gBACd,CACF,CAEF,GAAG,OAAO,OAAU,IAAc,OAASJ,GACvC,SAAkBE,EAAQG,EAAWC,EAASC,EAAOC,EAAMC,EAAOC,EAAmB,CAIzF,GAAM,CAAE,iBAAAC,EAAkB,QAAAC,CAAQ,EAAIV,EAClC,CAAE,OAAAW,CAAO,EAAIX,EAKbY,EAAO,EAEPC,EAAY,CAAC,EAEjB,SAASC,EAAUC,EAASC,EAAU,CACpC,IAAIC,EAAeZ,EAAM,gBAAiBU,CAAQ,EAClD,GAAK,CAACE,EAAe,CACdP,GAAUA,EAAQ,MAAM,6BAA6BO,GAAgBF,CAAO,EAAE,EACnF,MACF,CAGA,GAFA,KAAK,QAAUE,EAEV,KAAK,QAAQ,aAAe,CAC/B,IAAIC,EAAWL,EAAW,KAAK,QAAQ,YAAa,EACpD,OAAKK,GAAWA,EAAS,OAAQF,CAAQ,EAClCE,CACT,CAGKP,IACH,KAAK,SAAWA,EAAQ,KAAK,OAAQ,GAGvC,KAAK,QAAU,CAAE,GAAG,KAAK,YAAY,QAAS,EAC9C,KAAK,OAAQK,CAAQ,EAGrB,KAAK,QAAQ,CACf,CAEAF,EAAS,SAAW,CAClB,cAAe,GAEf,UAAW,SAGX,mBAAoB,KACpB,SAAU,IACV,sBAAuB,GAEvB,gBAAiB,GACjB,OAAQ,GACR,mBAAoB,KACpB,eAAgB,EAGlB,EAGAA,EAAS,OAAS,CAAC,EAEnB,IAAIK,EAAQL,EAAS,UAErB,OAAO,OAAQK,EAAOhB,EAAU,SAAU,EAE1CgB,EAAM,QAAU,UAAW,CACzB,GAAI,CAAE,OAAAC,EAAQ,SAAAC,EAAU,YAAAC,CAAY,EAAI,KAAK,QAEzCC,EAAK,KAAK,KAAO,EAAEX,EACvB,KAAK,QAAQ,aAAeW,EAC5BV,EAAWU,CAAG,EAAI,KAElB,KAAK,cAAgB,EAErB,KAAK,cAAgB,EAErB,KAAK,EAAI,EACT,KAAK,SAAW,EAChB,KAAK,YAAcD,EAAc,cAAgB,aACjD,KAAK,UAAYA,EAAc,aAAe,cAE9C,KAAK,SAAW,SAAS,cAAc,KAAK,EAC5C,KAAK,SAAS,UAAY,oBAC1B,KAAK,cAAc,EAEnB,KAAK,eAAiB,CAAE,KAAK,OAAQ,GAEhCF,GAAUC,IACbrB,EAAO,iBAAkB,SAAU,IAAK,EAI1C,QAAUwB,KAAa,KAAK,QAAQ,GAAK,CACvC,IAAIC,EAAW,KAAK,QAAQ,GAAID,CAAU,EAC1C,KAAK,GAAIA,EAAWC,CAAS,CAC/B,CAEA,QAAUC,KAAUZ,EAAS,OAC3BA,EAAS,OAAQY,CAAO,EAAE,KAAM,IAAK,EAGlCL,EACH,KAAK,SAAS,EAEd,KAAK,SAAS,CAElB,EAMAF,EAAM,OAAS,SAAUQ,EAAO,CAC9B,OAAO,OAAQ,KAAK,QAASA,CAAK,CACpC,EAEAR,EAAM,SAAW,UAAW,CAC1B,GAAK,KAAK,SAAW,OAErB,KAAK,SAAW,GAChB,KAAK,QAAQ,UAAU,IAAI,kBAAkB,EACxC,KAAK,QAAQ,aAChB,KAAK,QAAQ,UAAU,IAAI,cAAc,EAG3C,KAAK,QAAQ,EAEb,IAAIS,EAAY,KAAK,wBAAyB,KAAK,QAAQ,QAAS,EACpE,KAAK,OAAO,OAAQ,GAAGA,CAAU,EACjC,KAAK,SAAS,OAAQ,KAAK,MAAO,EAClC,KAAK,QAAQ,OAAQ,KAAK,QAAS,EAEnC,KAAK,YAAY,EAEZ,KAAK,QAAQ,gBAEhB,KAAK,QAAQ,SAAW,EAExB,KAAK,QAAQ,iBAAkB,UAAW,IAAK,GAGjD,KAAK,UAAU,UAAU,EACzB,KAAK,mBAAmB,EAExB,KAAK,gBAAkB,GAEvB,KAAK,cAAc,OAAO,CAC5B,EAGAT,EAAM,cAAgB,UAAW,CAE/B,IAAIU,EAAS,SAAS,cAAc,KAAK,EACzCA,EAAO,UAAY,kBACnB,KAAK,OAASA,CAChB,EAEAV,EAAM,wBAA0B,SAAUW,EAAQ,CAChD,OAAOzB,EAAM,mBAAoByB,EAAO,KAAK,QAAQ,YAAa,CACpE,EAGAX,EAAM,YAAc,UAAW,CAE7B,KAAK,MAAQ,KAAK,WAAY,KAAK,OAAO,QAAS,EACnD,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,CACtB,EAOAA,EAAM,WAAa,SAAUW,EAAQ,CAInC,OAHgB,KAAK,wBAAyBA,CAAM,EAGnC,IAAOC,GAAc,IAAIzB,EAAMyB,CAAS,CAAE,CAC7D,EAEAZ,EAAM,YAAc,UAAW,CAC7B,OAAO,KAAK,MAAO,KAAK,MAAM,OAAS,CAAE,CAC3C,EAEAA,EAAM,aAAe,UAAW,CAC9B,OAAO,KAAK,OAAQ,KAAK,OAAO,OAAS,CAAE,CAC7C,EAGAA,EAAM,cAAgB,UAAW,CAE/B,KAAK,WAAY,KAAK,KAAM,EAE5B,KAAK,eAAgB,CAAE,CACzB,EAMAA,EAAM,eAAiB,SAAUa,EAAQ,CACvCA,EAAQA,GAAS,EAGjB,KAAK,cAAgBA,GAAQ,KAAK,eAAiB,EACnD,IAAIC,EAAQ,EAEZ,GAAKD,EAAQ,EAAI,CACf,IAAIE,EAAY,KAAK,MAAOF,EAAQ,CAAE,EACtCC,EAAQC,EAAU,EAAIA,EAAU,KAAK,UACvC,CAEA,KAAK,MAAM,MAAOF,CAAM,EAAE,QAAWG,GAAU,CAC7CA,EAAK,EAAIF,EACT,KAAK,oBAAqBE,EAAMF,CAAM,EACtCA,GAASE,EAAK,KAAK,WACnB,KAAK,cAAgB,KAAK,IAAKA,EAAK,KAAK,YAAa,KAAK,aAAc,CAC3E,CAAE,EAEF,KAAK,eAAiBF,EAEtB,KAAK,aAAa,EAElB,KAAK,eAAe,EAEpB,KAAK,YAAc,KAAK,MAAM,OAC5B,KAAK,aAAa,EAAE,OAAS,KAAK,OAAO,CAAC,EAAE,OAAS,CACzD,EAEAd,EAAM,oBAAsB,SAAUgB,EAAMC,EAAI,CAE9C,IAAIC,EAAa,KAAK,QAAQ,YAAc,GAAK,EAC7CC,EAAUF,EAAIC,EACb,KAAK,QAAQ,kBAAkBC,GAAW,KAAK,KAAK,WAAaH,EAAK,KAAK,OAChF,IAAII,EAAgB,KAAK,iBAAkBD,CAAQ,EACnDH,EAAK,QAAQ,MAAM,UAAY,eAAeI,CAAa,IAC7D,EAMApB,EAAM,WAAa,SAAUqB,EAAQ,CACnCA,EAAM,QAAWL,GAAUA,EAAK,QAAQ,CAAE,CAC5C,EAIAhB,EAAM,aAAe,UAAW,CAE9B,GADA,KAAK,OAAS,CAAC,EACV,CAAC,KAAK,MAAM,OAAS,OAE1B,GAAI,CAAE,YAAAsB,EAAa,UAAAC,CAAU,EAAI,KAC7BC,EAAQ,IAAIpC,EAAOkC,EAAaC,EAAW,KAAK,SAAU,EAC9D,KAAK,OAAO,KAAMC,CAAM,EAExB,IAAIC,EAAa,KAAK,eAAe,EAErC,KAAK,MAAM,QAAS,CAAET,EAAMU,IAAO,CAEjC,GAAK,CAACF,EAAM,MAAM,OAAS,CACzBA,EAAM,QAASR,CAAK,EACpB,MACF,CAEA,IAAIW,EAAeH,EAAM,WAAaA,EAAM,aACxCR,EAAK,KAAK,WAAaA,EAAK,KAAMO,CAAU,GAE3CE,EAAYC,EAAGC,CAAW,IAI7BH,EAAM,aAAa,EAEnBA,EAAQ,IAAIpC,EAAOkC,EAAaC,EAAW,KAAK,SAAU,EAC1D,KAAK,OAAO,KAAMC,CAAM,GACxBA,EAAM,QAASR,CAAK,CAExB,CAAE,EAEFQ,EAAM,aAAa,EAEnB,KAAK,oBAAoB,CAC3B,EAEAxB,EAAM,eAAiB,UAAW,CAChC,GAAI,CAAE,WAAA4B,CAAW,EAAI,KAAK,QAC1B,GAAK,CAACA,EAAa,MAAO,IAAM,GAEhC,GAAK,OAAOA,GAAc,SAAW,CAEnC,IAAIC,EAAS,SAAUD,EAAY,EAAG,EACtC,OAASF,GAASA,EAAIG,IAAa,CACrC,CAEA,IAAIC,EAAU,EAEVC,EAAe,OAAOH,GAAc,UAAYA,EAAW,MAAO,UAAW,EAC5EG,IAAeD,EAAU,SAAUC,EAAa,CAAC,EAAG,EAAG,EAAI,KAChE,IAAIC,GAAe,KAAK,KAAK,WAAa,GAAMF,EAChD,MAAO,CAAEJ,EAAGC,IAAgBA,GAAcK,CAC5C,EAGAhC,EAAM,MACNA,EAAM,WAAa,UAAW,CAC5B,KAAK,cAAc,EACnB,KAAK,yBAAyB,CAChC,EAEAA,EAAM,QAAU,UAAW,CACzB,KAAK,KAAOf,EAAS,KAAK,OAAQ,EAClC,KAAK,aAAa,EAClB,KAAK,eAAiB,KAAK,KAAK,WAAa,KAAK,SACpD,EAEA,IAAIgD,EAAsB,CACxB,KAAM,EACN,OAAQ,GACR,MAAO,CACT,EAEAjC,EAAM,aAAe,UAAW,CAC9B,GAAI,CAAE,UAAAkC,EAAW,YAAA/B,CAAY,EAAI,KAAK,QAClCgC,EAAYF,EAAqBC,CAAU,EAC/C,KAAK,UAAYC,IAAc,OAAYA,EAAYD,EAClD/B,IAAc,KAAK,UAAY,EAAI,KAAK,UAC/C,EAEAH,EAAM,eAAiB,UAAW,CAChC,GAAK,CAAC,KAAK,QAAQ,eAAiB,OAEpC,IAAIoC,EAAS,KAAK,QAAQ,gBAAkB,KAAK,cAC/C,KAAK,cAAc,OAAS,KAAK,cACnC,KAAK,SAAS,MAAM,OAAS,GAAGA,CAAM,IACxC,EAEApC,EAAM,sBAAwB,UAAW,CAIvC,GAFA,KAAK,WAAa,KAAK,cAAc,EAEhC,CAAC,KAAK,WAAa,OAGxB,KAAK,cAAe,KAAK,gBAAiB,EAC1C,KAAK,cAAe,KAAK,eAAgB,EAGzC,IAAIqC,EAAa,KAAK,eAClBC,EAAY,KAAK,MAAM,OAAS,EACpC,KAAK,iBAAmB,KAAK,aAAcD,EAAYC,EAAW,EAAG,EAGrE,IAAIC,EAAY,KAAK,KAAK,WAAa,KAAK,eAE5C,KAAK,gBAAkB,KAAK,aAAcA,EAAW,EAAG,CAAE,CAC5D,EAEAvC,EAAM,cAAgB,UAAW,CAC/B,GAAI,CAAE,WAAAwC,CAAW,EAAI,KAAK,QAC1B,GAAK,CAACA,GAAc,KAAK,OAAO,OAAS,EAAI,MAAO,GAEpD,GAAKA,IAAe,OAAS,MAAO,GAGpC,IAAIC,EAAW,KAAK,eAAiB,KAAK,KAAK,WAC/C,GAAKA,EAAW,KAAK,KAAK,WAAa,MAAO,GAE9C,QAAUzB,KAAQ,KAAK,MACrB,GAAKA,EAAK,KAAK,WAAayB,EAAW,MAAO,GAEhD,MAAO,EACT,EAEAzC,EAAM,aAAe,SAAU0C,EAAMC,EAAWC,EAAY,CAE1D,IAAIvB,EAAQ,CAAC,EACb,KAAQqB,EAAO,GAAI,CACjB,IAAI1B,EAAO,KAAK,MAAO2B,CAAU,EACjC,GAAK,CAAC3B,EAAO,MAEbK,EAAM,KAAML,CAAK,EACjB2B,GAAaC,EACbF,GAAQ1B,EAAK,KAAK,UACpB,CACA,OAAOK,CACT,EAKArB,EAAM,eAAiB,UAAW,CAGhC,GAAK,EAFc,KAAK,QAAQ,SAAW,CAAC,KAAK,YAC7C,KAAK,MAAM,QACM,OAErB,IAAI6C,EAAe,KAAK,eAAiB,KAAK,YAAY,EAAE,KAAM,KAAK,SAAU,EAGjF,GADuBA,EAAe,KAAK,KAAK,WAG9C,KAAK,OAAO,QAAWrB,GAAW,CAChCA,EAAM,OAASqB,EAAe,KAAK,SACrC,CAAE,MACG,CAEL,IAAIC,EAAa,KAAK,eAAiB,KAAK,MAAM,CAAC,EAAE,KAAM,KAAK,WAAY,EACxEC,EAAWF,EAAe,KAAK,KAAK,YAAe,EAAI,KAAK,WAChE,KAAK,OAAO,QAAWrB,GAAW,CAChCA,EAAM,OAAS,KAAK,IAAKA,EAAM,OAAQsB,CAAW,EAClDtB,EAAM,OAAS,KAAK,IAAKA,EAAM,OAAQuB,CAAS,CAClD,CAAE,CACJ,CACF,EAUA/C,EAAM,cAAgB,SAAUgD,EAAMC,EAAOC,EAAO,CAClD,IAAIC,EAAWF,EAAQ,CAAEA,CAAM,EAAE,OAAQC,CAAK,EAAIA,EAGlD,GAFA,KAAK,UAAWF,EAAMG,CAAS,EAE1B3D,GAAU,KAAK,SAAW,CAE7BwD,GAAQ,KAAK,QAAQ,sBAAwB,YAAc,GAC3D,IAAII,EAASJ,EACb,GAAKC,EAAQ,CAEX,IAAII,EAAU,IAAI7D,EAAO,MAAOyD,CAAM,EACtCI,EAAQ,KAAOL,EACfI,EAASC,CACX,CACA,KAAK,SAAS,QAASD,EAAQF,CAAK,CACtC,CACF,EAEA,IAAMI,EAAmB,CACvB,YACA,WACA,UACA,cACA,cACA,aACA,aACF,EAEIC,EAAavD,EAAM,UACvBA,EAAM,UAAY,SAAUK,EAAW6C,EAAO,CAC5C,GAAK7C,IAAc,cAAgB,CAEjC,IAAImD,EAAc,KAAK,cAAeN,EAAK,CAAC,EAAE,MAAO,EACjDtC,EAAW4C,GAAeA,EAAY,QACtCb,EAAYa,GAAe,KAAK,MAAM,QAASA,CAAY,EAC/DN,EAAOA,EAAK,OAAQtC,EAAU+B,CAAU,CAC1C,CAKA,GAHAY,EAAW,KAAM,KAAMlD,EAAW6C,CAAK,EAGlC,CADmBI,EAAiB,SAAUjD,CAAU,GAClC,CAACb,GAAU,CAAC,KAAK,SAAW,OAEvDa,GAAa,KAAK,QAAQ,sBAAwB,YAAc,GAChE,IAAI4C,EAAQC,EAAK,MAAO,CAAE,EACtBG,EAAU,IAAI7D,EAAO,MAAOyD,CAAM,EACtCI,EAAQ,KAAOhD,EACf,KAAK,SAAS,QAASgD,EAASH,CAAK,CACvC,EASAlD,EAAM,OAAS,SAAUa,EAAO4C,EAAQC,EAAY,CAUlD,GATK,CAAC,KAAK,WAEX7C,EAAQ,SAAUA,EAAO,EAAG,EAC5B,KAAK,YAAaA,CAAM,GAEnB,KAAK,YAAc4C,KACtB5C,EAAQ3B,EAAM,OAAQ2B,EAAO,KAAK,OAAO,MAAO,GAG7C,CAAC,KAAK,OAAQA,CAAM,GAAI,OAE7B,IAAI8C,EAAY,KAAK,cACrB,KAAK,cAAgB9C,EACrB,KAAK,oBAAoB,EACpB6C,EACH,KAAK,yBAAyB,EAE9B,KAAK,eAAe,EAEjB,KAAK,QAAQ,gBAChB,KAAK,eAAe,EAGtB,KAAK,cAAe,SAAU,KAAM,CAAE7C,CAAM,CAAE,EAEzCA,IAAU8C,GACb,KAAK,cAAe,SAAU,KAAM,CAAE9C,CAAM,CAAE,CAElD,EAGAb,EAAM,YAAc,SAAUa,EAAQ,CACpC,GAAK,CAAC,KAAK,WAAa,OAExB,GAAM,CAAE,cAAA+C,EAAe,eAAAC,EAAgB,OAAQ,CAAE,OAAAC,CAAO,CAAE,EAAI,KAE9D,GAAK,CAAC,KAAK,aAAe,CACxB,IAAIC,EAAY7E,EAAM,OAAQ2B,EAAOiD,CAAO,EAExCE,EAAQ,KAAK,IAAKD,EAAYH,CAAc,EAC5CK,EAAgB,KAAK,IAAOF,EAAYD,EAAWF,CAAc,EACjEM,EAAoB,KAAK,IAAOH,EAAYD,EAAWF,CAAc,EACpEK,EAAgBD,EACnBnD,GAASiD,EACCI,EAAoBF,IAC9BnD,GAASiD,EAEb,CAGKjD,EAAQ,EACX,KAAK,GAAKgD,EACAhD,GAASiD,IACnB,KAAK,GAAKD,EAEd,EAEA7D,EAAM,SAAW,SAAUyD,EAAQC,EAAY,CAC7C,KAAK,OAAQ,KAAK,cAAgB,EAAGD,EAAQC,CAAU,CACzD,EAEA1D,EAAM,KAAO,SAAUyD,EAAQC,EAAY,CACzC,KAAK,OAAQ,KAAK,cAAgB,EAAGD,EAAQC,CAAU,CACzD,EAEA1D,EAAM,oBAAsB,UAAW,CACrC,IAAIwB,EAAQ,KAAK,OAAQ,KAAK,aAAc,EAEtCA,IAGN,KAAK,sBAAsB,EAE3B,KAAK,cAAgBA,EACrBA,EAAM,OAAO,EACb,KAAK,cAAgBA,EAAM,MAC3B,KAAK,iBAAmBA,EAAM,gBAAgB,EAE9C,KAAK,aAAeA,EAAM,MAAM,CAAC,EACjC,KAAK,gBAAkB,KAAK,iBAAiB,CAAC,EAChD,EAEAxB,EAAM,sBAAwB,UAAW,CAClC,KAAK,eAAgB,KAAK,cAAc,SAAS,CACxD,EAEAA,EAAM,mBAAqB,UAAW,CACpC,IAAImE,EAAe,KAAK,QAAQ,aAEhC,GAAK,KAAK,gBAAkB,CAC1B,KAAK,OAAQ,KAAK,cAAe,GAAO,EAAK,EAC7C,MACF,CAEA,GAAKA,GAAgB,OAAOA,GAAgB,UAC/B,KAAK,UAAWA,CAAa,EAC5B,CACV,KAAK,WAAYA,EAAc,GAAO,EAAK,EAC3C,MACF,CAGF,IAAItD,EAAQ,EAEPsD,GAAgB,KAAK,OAAQA,CAAa,IAC7CtD,EAAQsD,GAGV,KAAK,OAAQtD,EAAO,GAAO,EAAK,CAClC,EAQAb,EAAM,WAAa,SAAUoE,EAAOX,EAAQC,EAAY,CAEtD,IAAI1C,EAAO,KAAK,UAAWoD,CAAM,EACjC,GAAK,CAACpD,EAAO,OAEb,IAAIH,EAAQ,KAAK,kBAAmBG,CAAK,EACzC,KAAK,OAAQH,EAAO4C,EAAQC,CAAU,CACxC,EAEA1D,EAAM,kBAAoB,SAAUgB,EAAO,CAEzC,IAAIqD,EAAY,KAAK,OAAO,KAAQ7C,GAAWA,EAAM,MAAM,SAAUR,CAAK,CAAE,EAC5E,OAAO,KAAK,OAAO,QAASqD,CAAU,CACxC,EASArE,EAAM,QAAU,SAAUsE,EAAO,CAE/B,QAAUtD,KAAQ,KAAK,MACrB,GAAKA,EAAK,UAAYsD,EAAO,OAAOtD,CAExC,EAOAhB,EAAM,SAAW,SAAUW,EAAQ,CACjC,OAAAA,EAAQzB,EAAM,UAAWyB,CAAM,EACxBA,EAAM,IAAO2D,GAAU,KAAK,QAASA,CAAK,CAAE,EAAE,OAAQ,OAAQ,CACvE,EAMAtE,EAAM,gBAAkB,UAAW,CACjC,OAAO,KAAK,MAAM,IAAOgB,GAAUA,EAAK,OAAQ,CAClD,EAOAhB,EAAM,cAAgB,SAAUsE,EAAO,CAErC,IAAItD,EAAO,KAAK,QAASsD,CAAK,EAC9B,GAAKtD,EAAO,OAAOA,EAGnB,IAAIuD,EAAUD,EAAK,QAAQ,sBAAsB,EACjD,OAAO,KAAK,QAASC,CAAQ,CAC/B,EAQAvE,EAAM,wBAA0B,SAAUwE,EAAU3D,EAAQ,CAC1D,GAAK,CAAC2D,EAAW,OAAO,KAAK,cAAc,gBAAgB,EAE3D3D,EAAQA,IAAU,OAAY,KAAK,cAAgBA,EAEnD,IAAI4D,EAAM,KAAK,OAAO,OACtB,GAAK,EAAMD,EAAW,GAAOC,EAC3B,OAAO,KAAK,gBAAgB,EAG9B,IAAIhE,EAAY,CAAC,EACjB,QAAUiB,EAAIb,EAAQ2D,EAAU9C,GAAKb,EAAQ2D,EAAU9C,IAAM,CAC3D,IAAIgD,EAAa,KAAK,WAAaxF,EAAM,OAAQwC,EAAG+C,CAAI,EAAI/C,EACxDF,EAAQ,KAAK,OAAQkD,CAAW,EAC/BlD,IACHf,EAAYA,EAAU,OAAQe,EAAM,gBAAgB,CAAE,EAE1D,CACA,OAAOf,CACT,EAOAT,EAAM,UAAY,SAAU2E,EAAW,CACrC,OAAK,OAAOA,GAAY,SAEf,KAAK,MAAOA,CAAS,GAGP,OAAOA,GAAY,UAAY,CAACA,EAAS,MAAO,aAAc,IAGnFA,EAAW,KAAK,QAAQ,cAAeA,CAAS,GAG3C,KAAK,QAASA,CAAS,EAChC,EAIA3E,EAAM,SAAW,UAAW,CAC1B,KAAK,UAAU,UAAU,CAC3B,EAIAA,EAAM,SAAW,UAAW,CAC1B,KAAK,SAAS,EACd,KAAK,OAAO,CACd,EAEAd,EAAM,eAAgBS,EAAU,WAAY,GAAI,EAEhDK,EAAM,OAAS,UAAW,CAExB,GAAK,CAAC,KAAK,UAAY,KAAK,aAAe,KAAK,WAAa,OAC7D,KAAK,QAAQ,EAER,KAAK,aACR,KAAK,EAAId,EAAM,OAAQ,KAAK,EAAG,KAAK,cAAe,GAErD,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,UAAU,QAAQ,EAGvB,IAAI0F,EAAkB,KAAK,kBAAoB,KAAK,iBAAiB,CAAC,EACtE,KAAK,WAAYA,EAAiB,GAAO,EAAK,CAChD,EAGA5E,EAAM,SAAW,UAAW,CAC1B,GAAK,CAAC,KAAK,QAAQ,SAAW,OAEXV,EAAkB,KAAK,QAAS,QAAS,EAAE,QAE5C,SAAS,UAAU,EACnC,KAAK,SAAS,EAEd,KAAK,WAAW,CAEpB,EAKAU,EAAM,UAAY,SAAUiD,EAAQ,CAClC,GAAI,CAAE,cAAA4B,CAAc,EAAI,SACpBC,EAAUnF,EAAS,iBAAkBsD,EAAM,GAAI,EAEnD,GAAK,CAAC,KAAK,QAAQ,eAAiB,CAAC4B,GAAiB,CAACC,EAAU,OAEjD,KAAK,eAAe,KAAQR,GAAUO,IAAkBP,CAAK,GAC5DQ,EAAQ,KAAM,IAAK,CACtC,EAEAnF,EAAS,iBAAmB,CAC1B,UAAW,UAAW,CACpB,KAAK,SAAS,EACd,IAAIoF,EAAa,KAAK,QAAQ,YAAc,OAAS,WACrD,KAAMA,CAAW,EAAE,CACrB,EACA,WAAY,UAAW,CACrB,KAAK,SAAS,EACd,IAAIC,EAAc,KAAK,QAAQ,YAAc,WAAa,OAC1D,KAAMA,CAAY,EAAE,CACtB,CACF,EAIAhF,EAAM,MAAQ,UAAW,CACvB,KAAK,QAAQ,MAAM,CAAE,cAAe,EAAK,CAAC,CAC5C,EAKAA,EAAM,WAAa,UAAW,CACtB,KAAK,WAEX,KAAK,QAAQ,UAAU,OAAO,kBAAkB,EAChD,KAAK,QAAQ,UAAU,OAAO,cAAc,EAC5C,KAAK,sBAAsB,EAE3B,KAAK,MAAM,QAAWgB,GAAUA,EAAK,QAAQ,CAAE,EAC/C,KAAK,SAAS,OAAO,EAErB,KAAK,QAAQ,OAAQ,GAAG,KAAK,OAAO,QAAS,EACxC,KAAK,QAAQ,gBAChB,KAAK,QAAQ,gBAAgB,UAAU,EACvC,KAAK,QAAQ,oBAAqB,UAAW,IAAK,GAGpD,KAAK,SAAW,GAChB,KAAK,UAAU,YAAY,EAC7B,EAEAhB,EAAM,QAAU,UAAW,CACzB,KAAK,WAAW,EAChBnB,EAAO,oBAAqB,SAAU,IAAK,EAC3C,KAAK,OAAO,EACZ,KAAK,UAAU,SAAS,EACnBW,GAAU,KAAK,UAClBA,EAAO,WAAY,KAAK,QAAS,UAAW,EAE9C,OAAO,KAAK,QAAQ,aACpB,OAAOE,EAAW,KAAK,IAAK,CAC9B,EAIA,OAAO,OAAQM,EAAOX,CAAiB,EASvCM,EAAS,KAAO,SAAU2E,EAAO,CAE/B,GADAA,EAAOpF,EAAM,gBAAiBoF,CAAK,EAC9BA,EAAO,OAAO5E,EAAW4E,EAAK,YAAa,CAClD,EAEApF,EAAM,SAAUS,EAAU,UAAW,EAErC,GAAI,CAAE,cAAAsF,CAAc,EAAIpG,EACxB,OAAKW,GAAUyF,GACbA,EAAe,WAAYtF,EAAUH,CAAO,EAI9CG,EAAS,UAAY,SAAUuF,EAAK,CAClC1F,EAAS0F,CACX,EAEAvF,EAAS,KAAOR,EAChBQ,EAAS,MAAQP,EAEVO,CAEP,CAAE,ICt3BF,IAAAwF,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,EAGzBD,EAAO,UAAYC,EAAQ,CAG/B,GAAG,OAAO,OAAU,IAAc,OAASH,GAAM,UAAW,CAE5D,SAASI,GAAY,CAAC,CAEtB,IAAIC,EAAQD,EAAU,UAEtB,OAAAC,EAAM,GAAK,SAAUC,EAAWC,EAAW,CACzC,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,IAAIC,EAAS,KAAK,QAAU,KAAK,SAAW,CAAC,EAEzCC,EAAYD,EAAQF,CAAU,EAAIE,EAAQF,CAAU,GAAK,CAAC,EAE9D,OAAMG,EAAU,SAAUF,CAAS,GACjCE,EAAU,KAAMF,CAAS,EAGpB,IACT,EAEAF,EAAM,KAAO,SAAUC,EAAWC,EAAW,CAC3C,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,KAAK,GAAID,EAAWC,CAAS,EAG7B,IAAIG,EAAa,KAAK,YAAc,KAAK,aAAe,CAAC,EAErDC,EAAgBD,EAAYJ,CAAU,EAAII,EAAYJ,CAAU,GAAK,CAAC,EAE1E,OAAAK,EAAeJ,CAAS,EAAI,GAErB,IACT,EAEAF,EAAM,IAAM,SAAUC,EAAWC,EAAW,CAC1C,IAAIE,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAE9C,IAAIG,EAAQH,EAAU,QAASF,CAAS,EACxC,OAAKK,GAAS,IACZH,EAAU,OAAQG,EAAO,CAAE,EAGtB,IACT,EAEAP,EAAM,UAAY,SAAUC,EAAWO,EAAO,CAC5C,IAAIJ,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAG9CA,EAAYA,EAAU,MAAO,CAAE,EAC/BI,EAAOA,GAAQ,CAAC,EAEhB,IAAIF,EAAgB,KAAK,aAAe,KAAK,YAAaL,CAAU,EAEpE,QAAUC,KAAYE,EACPE,GAAiBA,EAAeJ,CAAS,IAIpD,KAAK,IAAKD,EAAWC,CAAS,EAE9B,OAAOI,EAAeJ,CAAS,GAGjCA,EAAS,MAAO,KAAMM,CAAK,EAG7B,OAAO,IACT,EAEAR,EAAM,OAAS,UAAW,CACxB,cAAO,KAAK,QACZ,OAAO,KAAK,YACL,IACT,EAEOD,CAEP,CAAE,ICnGF,IAAAU,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,IACJ,EAGAA,EAAO,WAAaC,EAChBD,EACAA,EAAO,SACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBE,EAAQE,EAAY,CAEvF,SAASC,GAAa,CAAC,CAGvB,IAAIC,EAAQD,EAAW,UAAY,OAAO,OAAQD,EAAU,SAAU,EAKtEE,EAAM,YAAc,SAAUC,EAAQ,CACpC,IAAIC,EAAS,KAAOD,EAAM,KACrB,KAAMC,CAAO,GAChB,KAAMA,CAAO,EAAGD,CAAM,CAE1B,EAEA,IAAIE,EAAYC,EACX,iBAAkBR,GAGrBO,EAAa,aACbC,EAAe,CAAE,YAAa,WAAY,aAAc,GAC9CR,EAAO,cAEjBO,EAAa,cACbC,EAAe,CAAE,cAAe,YAAa,eAAgB,IAG7DD,EAAa,YACbC,EAAe,CAAE,YAAa,SAAU,GAI1CJ,EAAM,iBAAmB,OAEzBA,EAAM,YAAc,UAAW,CAC7B,KAAK,aAAc,mBAAoB,KAAK,gBAAiB,CAC/D,EAEAA,EAAM,cAAgB,UAAW,CAC/B,KAAK,aAAc,sBAAuB,EAAG,CAC/C,EAOAA,EAAM,aAAe,SAAUK,EAAYC,EAAc,CACvD,KAAK,QAAQ,QAAWC,GAAY,CAClCA,EAAQF,CAAW,EAAGF,EAAY,IAAK,EACvCI,EAAQF,CAAW,EAAG,QAAS,IAAK,EAE/BT,EAAO,eAAeW,EAAO,MAAM,YAAcD,EACxD,CAAE,CACJ,EAEAN,EAAM,wBAA0B,UAAW,CACzCI,EAAa,QAAWI,GAAe,CACrCZ,EAAO,iBAAkBY,EAAW,IAAK,CAC3C,CAAE,CACJ,EAEAR,EAAM,0BAA4B,UAAW,CAC3CI,EAAa,QAAWI,GAAe,CACrCZ,EAAO,oBAAqBY,EAAW,IAAK,CAC9C,CAAE,CACJ,EAKAR,EAAM,YAAc,SAAUS,EAAYR,EAAQ,CAC3CA,EAAM,YAAc,KAAK,mBAC5B,KAAMQ,CAAW,EAAGR,EAAOA,CAAM,CAErC,EAGAD,EAAM,UAAY,SAAUS,EAAYR,EAAQ,CAC9C,IAAIS,EACJ,QAAUC,KAAgBV,EAAM,eACzBU,EAAa,aAAe,KAAK,oBACpCD,EAAQC,GAGPD,GAAQ,KAAMD,CAAW,EAAGR,EAAOS,CAAM,CAChD,EAIAV,EAAM,YAAc,SAAUC,EAAQ,CACpC,KAAK,YAAaA,EAAOA,CAAM,CACjC,EAEAD,EAAM,aAAe,SAAUC,EAAQ,CACrC,KAAK,YAAaA,EAAOA,EAAM,eAAe,CAAC,CAAE,CACnD,EAEAD,EAAM,cAAgB,SAAUC,EAAQ,CACtC,KAAK,YAAaA,EAAOA,CAAM,CACjC,EAGA,IAAMW,EAAc,CAAE,WAAY,QAAS,SAAU,QAAS,EAExDC,EAAa,CAAE,QAAS,WAAY,SAAU,SAAU,QAAS,MAAO,EAO9E,OAAAb,EAAM,YAAc,SAAUC,EAAOa,EAAU,CAE7C,IAAIC,EAAeH,EAAY,SAAUX,EAAM,OAAO,QAAS,EAC3De,EAAcH,EAAW,SAAUZ,EAAM,OAAO,IAAK,EACrDgB,EAAgB,CAACF,GAAgBC,EACxB,CAAC,KAAK,eAAiB,CAACf,EAAM,QAAUgB,IAGrD,KAAK,cAAgB,GAErB,KAAK,kBAAoBH,EAAQ,YAAc,OAE7CA,EAAQ,UAAYA,EAAQ,WAE9B,KAAK,mBAAqB,CACxB,MAAOA,EAAQ,MACf,MAAOA,EAAQ,KACjB,EAEA,KAAK,wBAAwB,EAC7B,KAAK,UAAW,cAAe,CAAEb,EAAOa,CAAQ,CAAE,EACpD,EAIAd,EAAM,YAAc,SAAUC,EAAQ,CACpC,KAAK,YAAaA,EAAOA,CAAM,CACjC,EAEAD,EAAM,cAAgB,SAAUC,EAAQ,CACtC,KAAK,YAAa,cAAeA,CAAM,CACzC,EAEAD,EAAM,YAAc,SAAUC,EAAQ,CACpC,KAAK,UAAW,cAAeA,CAAM,CACvC,EAEAD,EAAM,YAAc,SAAUC,EAAOa,EAAU,CAC7C,IAAII,EAAa,CACf,EAAGJ,EAAQ,MAAQ,KAAK,mBAAmB,MAC3C,EAAGA,EAAQ,MAAQ,KAAK,mBAAmB,KAC7C,EACA,KAAK,UAAW,cAAe,CAAEb,EAAOa,EAASI,CAAW,CAAE,EAEzC,CAAC,KAAK,YAAc,KAAK,eAAgBA,CAAW,GACnD,KAAK,UAAWjB,EAAOa,CAAQ,EAChD,KAAK,YAAa,KAAK,SAAUb,EAAOa,EAASI,CAAW,CACnE,EAGAlB,EAAM,eAAiB,SAAUkB,EAAa,CAC5C,OAAO,KAAK,IAAKA,EAAW,CAAE,EAAI,GAAK,KAAK,IAAKA,EAAW,CAAE,EAAI,CACpE,EAIAlB,EAAM,UAAY,SAAUC,EAAOa,EAAU,CAC3C,KAAK,WAAa,GAClB,KAAK,mBAAqB,GAC1B,KAAK,UAAW,YAAa,CAAEb,EAAOa,CAAQ,CAAE,CAClD,EAEAd,EAAM,SAAW,SAAUC,EAAOa,EAASI,EAAa,CACtD,KAAK,UAAW,WAAY,CAAEjB,EAAOa,EAASI,CAAW,CAAE,CAC7D,EAIAlB,EAAM,UAAY,SAAUC,EAAQ,CAClC,KAAK,UAAWA,EAAOA,CAAM,CAC/B,EAEAD,EAAM,YAAc,SAAUC,EAAQ,CACpC,KAAK,YAAa,YAAaA,CAAM,CACvC,EAEAD,EAAM,WAAa,SAAUC,EAAQ,CACnC,KAAK,UAAW,YAAaA,CAAM,CACrC,EAEAD,EAAM,UAAY,SAAUC,EAAOa,EAAU,CAC3C,KAAK,YAAY,EACjB,KAAK,UAAW,YAAa,CAAEb,EAAOa,CAAQ,CAAE,EAE3C,KAAK,WACR,KAAK,QAASb,EAAOa,CAAQ,EAG7B,KAAK,YAAab,EAAOa,CAAQ,CAErC,EAEAd,EAAM,QAAU,SAAUC,EAAOa,EAAU,CACzC,KAAK,WAAa,GAElB,WAAY,IAAM,OAAO,KAAK,kBAAmB,EAEjD,KAAK,UAAW,UAAW,CAAEb,EAAOa,CAAQ,CAAE,CAChD,EAGAd,EAAM,YAAc,UAAW,CAC7B,KAAK,cAAgB,GACrB,OAAO,KAAK,kBACZ,KAAK,0BAA0B,EAC/B,KAAK,UAAU,aAAa,CAC9B,EAIAA,EAAM,gBAAkB,SAAUC,EAAQ,CACxC,KAAK,YAAa,gBAAiBA,CAAM,CAC3C,EAEAD,EAAM,cAAgB,SAAUC,EAAQ,CACtC,KAAK,UAAW,gBAAiBA,CAAM,CACzC,EAEAD,EAAM,cAAgB,SAAUC,EAAOa,EAAU,CAC/C,KAAK,YAAY,EACjB,KAAK,UAAW,gBAAiB,CAAEb,EAAOa,CAAQ,CAAE,CACtD,EAKAd,EAAM,QAAU,SAAUC,EAAQ,CAC3B,KAAK,oBAAqBA,EAAM,eAAe,CACtD,EAGAD,EAAM,YAAc,SAAUC,EAAOa,EAAU,CAE7C,IAAIK,EAAYlB,EAAM,OAAS,UAC1BkB,GAAa,KAAK,oBAEvB,KAAK,UAAW,cAAe,CAAElB,EAAOa,CAAQ,CAAE,EAG7CK,IACH,KAAK,kBAAoB,GAEzB,WAAY,IAAM,CAChB,OAAO,KAAK,iBACd,EAAG,GAAI,GAEX,EAIOpB,CAEP,CAAE,IChSF,IAAAqB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,KACA,IACJ,EAGAA,EAAO,SAAWC,EACdD,EACAA,EAAO,SACPA,EAAO,WACPA,EAAO,YACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GACvC,SAAkBE,EAAQE,EAAUC,EAAYC,EAAQ,CAI5D,OAAO,OAAQF,EAAS,SAAU,CAChC,UAAW,KACX,cAAe,CACjB,CAAE,EAIF,IAAIG,EAAQH,EAAS,UACrB,OAAO,OAAQG,EAAOF,EAAW,SAAU,EAC3CE,EAAM,iBAAmB,GAIzBH,EAAS,OAAO,KAAO,UAAW,CAChC,KAAK,GAAI,WAAY,KAAK,cAAe,EACzC,KAAK,GAAI,WAAY,KAAK,aAAc,EACxC,KAAK,GAAI,aAAc,KAAK,gBAAiB,EAC7C,KAAK,GAAI,aAAc,KAAK,eAAgB,EAC5C,KAAK,GAAI,cAAe,KAAK,iBAAkB,EAC/C,KAAK,GAAI,YAAa,KAAK,eAAgB,EAC3C,KAAK,GAAI,cAAe,KAAK,iBAAkB,EAC/C,KAAK,GAAI,YAAa,KAAK,eAAgB,EAC3C,KAAK,GAAI,WAAY,KAAK,cAAe,EACzC,KAAK,GAAI,UAAW,KAAK,aAAc,EACvC,KAAK,GAAI,cAAe,KAAK,iBAAkB,CAEjD,EAEAG,EAAM,eAAiB,UAAW,CAChC,KAAK,QAAU,CAAE,KAAK,QAAS,EAC/B,KAAK,YAAY,EACjB,KAAK,gBAAgB,CACvB,EAEAA,EAAM,iBAAmB,UAAW,CAClC,KAAK,cAAc,EACnB,KAAK,QAAQ,UAAU,OAAO,cAAc,CAC9C,EAEAA,EAAM,gBAAkB,UAAW,CAE5B,KAAK,QAAQ,YAAc,KAC9B,KAAK,YAAc,KAAK,OAAO,OAAS,EAExC,KAAK,YAAc,KAAK,QAAQ,UAElC,KAAK,QAAQ,UAAU,OAAQ,eAAgB,KAAK,WAAY,CAClE,EAEAA,EAAM,cAAgB,UAAW,CAC/B,OAAO,KAAK,eACd,EAIAA,EAAM,kBAAoB,SAAUC,EAAQ,CAC1C,GAAK,CAAC,KAAK,YAAc,CAEvB,KAAK,wBAAyBA,CAAM,EACpC,MACF,CAEA,IAAIC,EAAeD,EAAM,OAAS,aAC9BE,EAAiBF,EAAM,cAAgB,QACvCG,EAAcH,EAAM,OAAO,QAAQ,yBAAyB,EAC3D,CAACC,GAAgB,CAACC,GAAkB,CAACC,GAAcH,EAAM,eAAe,EACvEG,GAAc,KAAK,MAAM,EAE1B,SAAS,gBAAkB,KAAK,SAAU,SAAS,cAAc,KAAK,EAE3E,KAAK,MAAQ,KAAK,EAClB,KAAK,SAAS,UAAU,IAAI,iBAAiB,EAE7C,KAAK,kBAAoBC,EAAkB,EAC3CV,EAAO,iBAAkB,SAAU,IAAK,EACxC,KAAK,wBAAyBM,CAAM,CACtC,EAIAD,EAAM,eAAiB,SAAUM,EAAa,CAC5C,OAAO,KAAK,IAAKA,EAAW,CAAE,EAAI,KAAK,QAAQ,aACjD,EAIAN,EAAM,gBAAkB,UAAW,CACjC,OAAO,KAAK,iBACZ,KAAK,SAAS,UAAU,OAAO,iBAAiB,CAClD,EAEAA,EAAM,kBAAoB,UAAW,CACnCL,EAAO,oBAAqB,SAAU,IAAK,EAC3C,OAAO,KAAK,iBACd,EAIAK,EAAM,gBAAkB,UAAW,CAC3B,KAAK,cAEX,KAAK,kBAAoB,KAAK,EAC9B,KAAK,eAAe,EACpBL,EAAO,oBAAqB,SAAU,IAAK,EAC7C,EAEAK,EAAM,eAAiB,SAAUC,EAAOM,EAASD,EAAa,CAC5D,GAAK,CAAC,KAAK,YAAc,OAEzBL,EAAM,eAAe,EAErB,KAAK,cAAgB,KAAK,MAE1B,IAAIO,EAAY,KAAK,QAAQ,YAAc,GAAK,EAE3C,KAAK,aAAaF,EAAW,GAAK,KAAK,gBAC5C,IAAIG,EAAQ,KAAK,kBAAoBH,EAAW,EAAIE,EAEpD,GAAK,CAAC,KAAK,WAAa,CAEtB,IAAIE,EAAc,KAAK,IAAK,CAAC,KAAK,OAAO,CAAC,EAAE,OAAQ,KAAK,iBAAkB,EAC3ED,EAAQA,EAAQC,GAAgBD,EAAQC,GAAgB,GAAMD,EAC9D,IAAIE,EAAW,KAAK,IAAK,CAAC,KAAK,aAAa,EAAE,OAAQ,KAAK,iBAAkB,EAC7EF,EAAQA,EAAQE,GAAaF,EAAQE,GAAa,GAAMF,CAC1D,CAEA,KAAK,MAAQA,EACb,KAAK,aAAe,IAAI,IAC1B,EAEAT,EAAM,cAAgB,UAAW,CAC/B,GAAK,CAAC,KAAK,YAAc,OAEzB,GAAI,CAAE,WAAAY,CAAW,EAAI,KAAK,QACrBA,IAAa,KAAK,gBAAkB,IAEzC,IAAIC,EAAQ,KAAK,qBAAqB,EAEtC,GAAKD,GAAc,CAAC,KAAK,WAAa,CAIpC,IAAIE,EAAW,KAAK,mBAAmB,EACvC,KAAK,gBAAkB,CAACA,EAAW,KAAK,OAAO,CAAC,EAAE,QAChD,CAACA,EAAW,KAAK,aAAa,EAAE,MACpC,KAAY,CAACF,GAAcC,IAAU,KAAK,gBAExCA,GAAS,KAAK,mBAAmB,GAEnC,OAAO,KAAK,cAGZ,KAAK,aAAe,KAAK,WACzB,KAAK,OAAQA,CAAM,EACnB,OAAO,KAAK,YACd,EAEAb,EAAM,qBAAuB,UAAW,CACtC,IAAIc,EAAW,KAAK,mBAAmB,EAEnCC,EAAW,KAAK,IAAK,KAAK,iBAAkB,CAACD,EAAU,KAAK,aAAc,CAAE,EAE5EE,EAAkB,KAAK,mBAAoBF,EAAUC,EAAU,CAAE,EACjEE,EAAkB,KAAK,mBAAoBH,EAAUC,EAAU,EAAG,EAEtE,OAAOC,EAAgB,SAAWC,EAAgB,SAChDD,EAAgB,MAAQC,EAAgB,KAC5C,EAUAjB,EAAM,mBAAqB,SAAUc,EAAUC,EAAUG,EAAY,CACnE,IAAIL,EAAQ,KAAK,cACbM,EAAc,IACdC,EAAY,KAAK,QAAQ,SAAW,CAAC,KAAK,WAE5C,CAAEC,EAAMC,IAAaD,GAAQC,EAC7B,CAAED,EAAMC,IAAaD,EAAOC,EAE9B,KAAQF,EAAWL,EAAUI,CAAY,IAEvCN,GAASK,EACTC,EAAcJ,EACdA,EAAW,KAAK,iBAAkB,CAACD,EAAUD,CAAM,EAC9CE,IAAa,OAElBA,EAAW,KAAK,IAAKA,CAAS,EAEhC,MAAO,CACL,SAAUI,EAEV,MAAON,EAAQK,CACjB,CACF,EAQAlB,EAAM,iBAAmB,SAAUuB,EAAGV,EAAQ,CAC5C,IAAIW,EAAM,KAAK,OAAO,OAElBC,EAAe,KAAK,QAAQ,YAAcD,EAAM,EAChDE,EAAaD,EAAe1B,EAAM,OAAQc,EAAOW,CAAI,EAAIX,EACzDc,EAAQ,KAAK,OAAQD,CAAW,EACpC,GAAK,CAACC,EAAQ,OAAO,KAGrB,IAAIC,EAAOH,EAAe,KAAK,eAAiB,KAAK,MAAOZ,EAAMW,CAAI,EAAI,EAC1E,OAAOD,GAAMI,EAAM,OAASC,EAC9B,EAEA5B,EAAM,mBAAqB,UAAW,CAEpC,GAAK,KAAK,gBAAkB,QAAa,CAAC,KAAK,cAE7C,IAAI,KAAS,KAAK,aAAe,IACjC,MAAO,GAGT,IAAIe,EAAW,KAAK,iBAAkB,CAAC,KAAK,MAAO,KAAK,aAAc,EAClEc,EAAQ,KAAK,cAAgB,KAAK,MACtC,OAAKd,EAAW,GAAKc,EAAQ,EAEpB,EACGd,EAAW,GAAKc,EAAQ,EAE3B,GAEF,CACT,EAIA7B,EAAM,SAAW,UAAW,CAC1B,IAAI8B,EAASzB,EAAkB,EAC3B0B,EAAc,KAAK,kBAAkB,EAAID,EAAO,EAChDE,EAAc,KAAK,kBAAkB,EAAIF,EAAO,GAE/C,KAAK,IAAKC,CAAY,EAAI,GAAK,KAAK,IAAKC,CAAY,EAAI,IAC5D,KAAK,YAAY,CAErB,EAIA,SAAS3B,GAAoB,CAC3B,MAAO,CACL,EAAGV,EAAO,YACV,EAAGA,EAAO,WACZ,CACF,CAIA,OAAOE,CAEP,CAAE,ICnSF,IAAAoC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAS,IAAkB,EAG5CA,EAASD,EAAO,QAAS,CAG7B,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAW,CAE9E,IAAMC,EAAS,6BAIf,SAASC,EAAgBC,EAAWC,EAAWC,EAAa,CAC1D,KAAK,UAAYF,EACjB,KAAK,UAAYC,EACjB,KAAK,WAAaD,IAAc,WAChC,KAAK,OAASC,IAAc,OAC5B,KAAK,QAASC,CAAW,CAC3B,CAEAH,EAAe,UAAU,QAAU,SAAUG,EAAa,CAExD,IAAIC,EAAU,KAAK,QAAU,SAAS,cAAc,QAAQ,EAC5DA,EAAQ,UAAY,6CAA6C,KAAK,SAAS,GAC/E,IAAIC,EAAQ,KAAK,WAAa,WAAa,OAE3CD,EAAQ,aAAc,OAAQ,QAAS,EACvCA,EAAQ,aAAc,aAAcC,CAAM,EAE1C,KAAK,QAAQ,EAEb,IAAIC,EAAM,KAAK,UAAWD,EAAOF,CAAW,EAC5CC,EAAQ,OAAQE,CAAI,CACtB,EAEAN,EAAe,UAAU,UAAY,SAAUK,EAAOF,EAAa,CACjE,IAAIG,EAAM,SAAS,gBAAiBP,EAAQ,KAAM,EAClDO,EAAI,aAAc,QAAS,sBAAuB,EAClDA,EAAI,aAAc,UAAW,aAAc,EAE3C,IAAIC,EAAQ,SAAS,gBAAiBR,EAAQ,OAAQ,EACtDQ,EAAM,OAAQF,CAAM,EAEpB,IAAIG,EAAO,SAAS,gBAAiBT,EAAQ,MAAO,EAChDU,EAAgBC,EAAmBP,CAAW,EAClD,OAAAK,EAAK,aAAc,IAAKC,CAAc,EACtCD,EAAK,aAAc,QAAS,OAAQ,EAE9B,KAAK,QACTA,EAAK,aAAc,YAAa,iCAAkC,EAEpEF,EAAI,OAAQC,EAAOC,CAAK,EACjBF,CACT,EAGA,SAASI,EAAmBC,EAAQ,CAElC,GAAK,OAAOA,GAAS,SAAW,OAAOA,EAEvC,GAAI,CAAE,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIN,EAGjC,MAAO,KAAKC,CAAE;AAAA,QACRC,CAAE,KAAKG,EAAK,EAAE;AAAA,QACdF,CAAE,KAAKG,EAAK,EAAE;AAAA,QACdF,CAAE;AAAA,QACFD,CAAE,KAAK,GAAKG,CAAE;AAAA,QACdJ,CAAE,KAAK,GAAKG,CAAE;AAAA,MAEtB,CAIAhB,EAAe,UAAU,OAAS,UAAW,CAC3C,KAAK,QAAQ,gBAAgB,UAAU,CACzC,EAEAA,EAAe,UAAU,QAAU,UAAW,CAC5C,KAAK,QAAQ,aAAc,WAAY,EAAK,CAC9C,EAIA,OAAO,OAAQF,EAAS,SAAU,CAChC,gBAAiB,GACjB,WAAY,CACV,GAAI,GACJ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,EACN,CACF,CAAE,EAEFA,EAAS,OAAO,gBAAkB,UAAW,CAC3C,GAAK,CAAC,KAAK,QAAQ,gBAAkB,OAErC,GAAI,CAAE,YAAAoB,EAAa,WAAAf,CAAW,EAAI,KAAK,QACnCgB,EAAgBD,EAAc,QAAU,OACxCE,EAAgBF,EAAc,OAAS,QAC3C,KAAK,WAAa,IAAIlB,EAAgB,WAAYmB,EAAehB,CAAW,EAC5E,KAAK,WAAa,IAAIH,EAAgB,OAAQoB,EAAejB,CAAW,EACxE,KAAK,eAAe,KAAM,KAAK,WAAW,OAAQ,EAClD,KAAK,eAAe,KAAM,KAAK,WAAW,OAAQ,EAElD,KAAK,sBAAwB,IAAM,CACjC,KAAK,SAAS,EACd,KAAK,SAAS,CAChB,EAEA,KAAK,sBAAwB,IAAM,CACjC,KAAK,SAAS,EACd,KAAK,KAAK,CACZ,EAEA,KAAK,GAAI,WAAY,KAAK,uBAAwB,EAClD,KAAK,GAAI,SAAU,KAAK,qBAAsB,CAChD,EAEA,IAAIkB,EAAQvB,EAAS,UAErB,OAAAuB,EAAM,sBAAwB,UAAW,CACvC,IAAIC,EAAY,KAAK,OAAO,OAAS,KAAK,OAAO,OAAS,EAAI,EAC9D,KAAK,qBAAsB,KAAK,WAAY,CAAE,EAC9C,KAAK,qBAAsB,KAAK,WAAYA,CAAU,CACxD,EAEAD,EAAM,qBAAuB,SAAUE,EAAQC,EAAgB,CAE7D,GAAK,KAAK,YAAc,KAAK,OAAO,OAAS,EAAI,CAC/CD,EAAO,OAAO,EACd,MACF,CAEA,IAAIE,EAAY,KAAK,gBAAkBD,EACvCD,EAAQE,EAAY,SAAW,SAAU,EAAE,EAGnB,CAACA,GAAa,SAAS,gBAAkBF,EAAO,SAC/C,KAAK,MAAM,CACtC,EAEAF,EAAM,wBAA0B,UAAW,CACzC,KAAK,WAAW,QAAQ,iBAAkB,QAAS,KAAK,qBAAsB,EAC9E,KAAK,WAAW,QAAQ,iBAAkB,QAAS,KAAK,qBAAsB,EAC9E,KAAK,QAAQ,OAAQ,KAAK,WAAW,QAAS,KAAK,WAAW,OAAQ,EACtE,KAAK,GAAI,aAAc,KAAK,yBAA0B,CACxD,EAEAA,EAAM,0BAA4B,UAAW,CAC3C,KAAK,WAAW,QAAQ,OAAO,EAC/B,KAAK,WAAW,QAAQ,OAAO,EAC/B,KAAK,WAAW,QAAQ,oBAAqB,QAAS,KAAK,qBAAsB,EACjF,KAAK,WAAW,QAAQ,oBAAqB,QAAS,KAAK,qBAAsB,EACjF,KAAK,IAAK,aAAc,KAAK,yBAA0B,CACzD,EAIAvB,EAAS,eAAiBE,EAEnBF,CAEP,CAAE,ICxKF,IAAA4B,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACb,KACA,IACJ,EAGAA,EACID,EAAO,SACPA,EAAO,YACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAUC,EAAQ,CAIrF,SAASC,GAAW,CAElB,KAAK,OAAS,SAAS,cAAc,KAAK,EAC1C,KAAK,OAAO,UAAY,qBAExB,KAAK,KAAO,CAAC,CACf,CAEAA,EAAS,UAAU,QAAU,SAAUC,EAAe,CAEpD,IAAIC,EAAQD,EAAe,KAAK,KAAK,OAChCC,EAAQ,EACX,KAAK,QAASA,CAAM,EACVA,EAAQ,GAClB,KAAK,WAAY,CAACA,CAAM,CAE5B,EAEAF,EAAS,UAAU,QAAU,SAAUG,EAAQ,CAC7C,IAAIC,EAAU,IAAI,MAAOD,CAAM,EAAE,KAAK,EACnC,IAAK,CAAEE,EAAMC,IAAO,CACnB,IAAIC,EAAM,SAAS,cAAc,QAAQ,EACzCA,EAAI,aAAc,OAAQ,QAAS,EACnC,IAAIC,EAAMF,EAAI,EAAI,KAAK,KAAK,OAC5B,OAAAC,EAAI,UAAY,oBAChBA,EAAI,YAAc,cAAcC,CAAG,GAC5BD,CACT,CAAE,EAEJ,KAAK,OAAO,OAAQ,GAAGH,CAAQ,EAC/B,KAAK,KAAO,KAAK,KAAK,OAAQA,CAAQ,CACxC,EAEAJ,EAAS,UAAU,WAAa,SAAUG,EAAQ,CAE/B,KAAK,KAAK,OAAQ,KAAK,KAAK,OAASA,EAAOA,CAAM,EAExD,QAAWI,GAASA,EAAI,OAAO,CAAE,CAC9C,EAEAP,EAAS,UAAU,eAAiB,SAAUS,EAAQ,CAE/C,KAAK,cACR,KAAK,YAAY,UAAU,OAAO,aAAa,EAC/C,KAAK,YAAY,gBAAgB,cAAc,GAG3C,KAAK,KAAK,SAEhB,KAAK,YAAc,KAAK,KAAMA,CAAM,EACpC,KAAK,YAAY,UAAU,IAAI,aAAa,EAC5C,KAAK,YAAY,aAAc,eAAgB,MAAO,EACxD,EAEAX,EAAS,SAAWE,EAIpB,OAAO,OAAQF,EAAS,SAAU,CAChC,SAAU,EACZ,CAAE,EAEFA,EAAS,OAAO,SAAW,UAAW,CAC9B,KAAK,QAAQ,WAEnB,KAAK,SAAW,IAAIE,EACpB,KAAK,oBAAsB,KAAK,gBAAgB,KAAM,IAAK,EAE3D,KAAK,GAAI,WAAY,KAAK,gBAAiB,EAC3C,KAAK,GAAI,SAAU,KAAK,sBAAuB,EAC/C,KAAK,GAAI,aAAc,KAAK,cAAe,EAC3C,KAAK,GAAI,SAAU,KAAK,cAAe,EACvC,KAAK,GAAI,aAAc,KAAK,kBAAmB,EACjD,EAEA,IAAIU,EAAQZ,EAAS,UAErB,OAAAY,EAAM,iBAAmB,UAAW,CAClC,KAAK,SAAS,QAAS,KAAK,OAAO,MAAO,EAC1C,KAAK,eAAe,KAAM,GAAG,KAAK,SAAS,IAAK,EAChD,KAAK,SAAS,OAAO,iBAAkB,QAAS,KAAK,mBAAoB,EACzE,KAAK,QAAQ,OAAQ,KAAK,SAAS,MAAO,CAC5C,EAEAA,EAAM,gBAAkB,SAAUC,EAAQ,CACxC,IAAIF,EAAQ,KAAK,SAAS,KAAK,QAASE,EAAM,MAAO,EAChDF,IAAU,KAEf,KAAK,SAAS,EACd,KAAK,OAAQA,CAAM,EACrB,EAEAC,EAAM,uBAAyB,UAAW,CACxC,KAAK,SAAS,eAAgB,KAAK,aAAc,CACnD,EAEAA,EAAM,eAAiB,UAAW,CAChC,KAAK,SAAS,KAAK,QAAWH,GAAS,CACrCR,EAAM,WAAY,KAAK,eAAgBQ,CAAI,CAC7C,CAAE,EACF,KAAK,SAAS,QAAS,KAAK,OAAO,MAAO,EAC1C,KAAK,eAAe,KAAM,GAAG,KAAK,SAAS,IAAK,CAClD,EAEAG,EAAM,mBAAqB,UAAW,CACpC,KAAK,SAAS,OAAO,OAAO,EAC5B,KAAK,SAAS,OAAO,oBAAqB,QAAS,KAAK,mBAAoB,CAC9E,EAIAZ,EAAS,SAAWE,EAEbF,CAEP,CAAE,ICxIF,IAAAc,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAS,IAAkB,EAG5CA,EAASD,EAAO,QAAS,CAG7B,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAW,CAI9E,SAASC,EAAQC,EAAUC,EAAS,CAClC,KAAK,SAAWD,EAChB,KAAK,OAASC,EACd,KAAK,MAAQ,UAEb,KAAK,mBAAqB,KAAK,iBAAiB,KAAM,IAAK,EAC3D,KAAK,iBAAmB,KAAK,eAAe,KAAM,IAAK,CACzD,CAGAF,EAAO,UAAU,KAAO,UAAW,CACjC,GAAK,KAAK,QAAU,UAAY,OAIhC,GADmB,SAAS,OACR,CAClB,SAAS,iBAAkB,mBAAoB,KAAK,gBAAiB,EACrE,MACF,CAEA,KAAK,MAAQ,UAEb,SAAS,iBAAkB,mBAAoB,KAAK,kBAAmB,EAEvE,KAAK,KAAK,CACZ,EAEAA,EAAO,UAAU,KAAO,UAAW,CAEjC,GAAK,KAAK,QAAU,UAAY,OAGhC,IAAIG,EAAO,OAAO,KAAK,UAAY,SAAW,KAAK,SAAW,IAE9D,KAAK,MAAM,EACX,KAAK,QAAU,WAAY,IAAM,CAC/B,KAAK,OAAO,EACZ,KAAK,KAAK,CACZ,EAAGA,CAAK,CACV,EAEAH,EAAO,UAAU,KAAO,UAAW,CACjC,KAAK,MAAQ,UACb,KAAK,MAAM,EAEX,SAAS,oBAAqB,mBAAoB,KAAK,kBAAmB,CAC5E,EAEAA,EAAO,UAAU,MAAQ,UAAW,CAClC,aAAc,KAAK,OAAQ,CAC7B,EAEAA,EAAO,UAAU,MAAQ,UAAW,CAC7B,KAAK,QAAU,YAClB,KAAK,MAAQ,SACb,KAAK,MAAM,EAEf,EAEAA,EAAO,UAAU,QAAU,UAAW,CAE/B,KAAK,QAAU,UAAW,KAAK,KAAK,CAC3C,EAGAA,EAAO,UAAU,iBAAmB,UAAW,CAC7C,IAAII,EAAe,SAAS,OAC5B,KAAMA,EAAe,QAAU,SAAU,EAAE,CAC7C,EAEAJ,EAAO,UAAU,eAAiB,UAAW,CAC3C,KAAK,KAAK,EACV,SAAS,oBAAqB,mBAAoB,KAAK,gBAAiB,CAC1E,EAIA,OAAO,OAAQD,EAAS,SAAU,CAChC,qBAAsB,EACxB,CAAE,EAEFA,EAAS,OAAO,OAAS,UAAW,CAClC,KAAK,OAAS,IAAIC,EAAQ,KAAK,QAAQ,SAAU,IAAM,CACrD,KAAK,KAAM,EAAK,CAClB,CAAE,EAEF,KAAK,GAAI,WAAY,KAAK,cAAe,EACzC,KAAK,GAAI,WAAY,KAAK,UAAW,EACrC,KAAK,GAAI,cAAe,KAAK,UAAW,EACxC,KAAK,GAAI,aAAc,KAAK,gBAAiB,CAC/C,EAEA,IAAIK,EAAQN,EAAS,UAErB,OAAAM,EAAM,eAAiB,UAAW,CAC1B,KAAK,QAAQ,WAEnB,KAAK,OAAO,KAAK,EACjB,KAAK,QAAQ,iBAAkB,aAAc,IAAK,EACpD,EAIAA,EAAM,WAAa,UAAW,CAC5B,KAAK,OAAO,KAAK,CACnB,EAEAA,EAAM,WAAa,UAAW,CAC5B,KAAK,OAAO,KAAK,CACnB,EAEAA,EAAM,YAAc,UAAW,CAC7B,KAAK,OAAO,MAAM,CACpB,EAEAA,EAAM,cAAgB,UAAW,CAC/B,KAAK,OAAO,QAAQ,CACtB,EAEAA,EAAM,iBAAmB,UAAW,CAClC,KAAK,OAAO,KAAK,EACjB,KAAK,QAAQ,oBAAqB,aAAc,IAAK,CACvD,EAKAA,EAAM,aAAe,UAAW,CACxB,KAAK,QAAQ,uBAEnB,KAAK,OAAO,MAAM,EAClB,KAAK,QAAQ,iBAAkB,aAAc,IAAK,EACpD,EAGAA,EAAM,aAAe,UAAW,CAC9B,KAAK,OAAO,QAAQ,EACpB,KAAK,QAAQ,oBAAqB,aAAc,IAAK,CACvD,EAIAN,EAAS,OAASC,EAEXD,CAEP,CAAE,ICjKF,IAAAO,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACb,KACA,IACJ,EAGAA,EACID,EAAO,SACPA,EAAO,YACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAUC,EAAQ,CAGrF,SAASC,EAAkBC,EAAQ,CACjC,IAAIC,EAAW,SAAS,uBAAuB,EAC/C,OAAAD,EAAM,QAAWE,GAAUD,EAAS,YAAaC,EAAK,OAAQ,CAAE,EACzDD,CACT,CAIA,IAAIE,EAAQN,EAAS,UAOrB,OAAAM,EAAM,OAAS,SAAUC,EAAOC,EAAQ,CACtC,IAAIL,EAAQ,KAAK,WAAYI,CAAM,EACnC,GAAK,CAACJ,GAAS,CAACA,EAAM,OAAS,OAE/B,IAAIM,EAAM,KAAK,MAAM,OAErBD,EAAQA,IAAU,OAAYC,EAAMD,EAEpC,IAAIJ,EAAWF,EAAkBC,CAAM,EAEnCO,EAAWF,IAAUC,EACzB,GAAKC,EACH,KAAK,OAAO,YAAaN,CAAS,MAC7B,CACL,IAAIO,EAAoB,KAAK,MAAOH,CAAM,EAAE,QAC5C,KAAK,OAAO,aAAcJ,EAAUO,CAAkB,CACxD,CAEA,GAAKH,IAAU,EAEb,KAAK,MAAQL,EAAM,OAAQ,KAAK,KAAM,UAC5BO,EAEV,KAAK,MAAQ,KAAK,MAAM,OAAQP,CAAM,MACjC,CAEL,IAAIS,EAAW,KAAK,MAAM,OAAQJ,EAAOC,EAAMD,CAAM,EACrD,KAAK,MAAQ,KAAK,MAAM,OAAQL,CAAM,EAAE,OAAQS,CAAS,CAC3D,CAEA,KAAK,WAAYT,CAAM,EACvB,KAAK,WAAYK,CAAM,EACvB,KAAK,yBAAyB,CAChC,EAEAF,EAAM,OAAS,SAAUC,EAAQ,CAC/B,KAAK,OAAQA,EAAO,KAAK,MAAM,MAAO,CACxC,EAEAD,EAAM,QAAU,SAAUC,EAAQ,CAChC,KAAK,OAAQA,EAAO,CAAE,CACxB,EAMAD,EAAM,OAAS,SAAUC,EAAQ,CAC/B,IAAIJ,EAAQ,KAAK,SAAUI,CAAM,EACjC,GAAK,CAACJ,GAAS,CAACA,EAAM,OAAS,OAE/B,IAAIU,EAAe,KAAK,MAAM,OAAS,EAEvCV,EAAM,QAAWE,GAAU,CACzBA,EAAK,OAAO,EACZ,IAAIG,EAAQ,KAAK,MAAM,QAASH,CAAK,EACrCQ,EAAe,KAAK,IAAKL,EAAOK,CAAa,EAC7CZ,EAAM,WAAY,KAAK,MAAOI,CAAK,CACrC,CAAE,EAEF,KAAK,WAAYQ,CAAa,EAC9B,KAAK,yBAAyB,CAChC,EAMAP,EAAM,eAAiB,SAAUQ,EAAO,CACtC,IAAIT,EAAO,KAAK,QAASS,CAAK,EAC9B,GAAK,CAACT,EAAO,OAEbA,EAAK,QAAQ,EAEb,IAAIG,EAAQ,KAAK,MAAM,QAASH,CAAK,EACrC,KAAK,WAAYG,CAAM,CAEzB,EAMAF,EAAM,WAAa,SAAUS,EAAmB,CAC9C,IAAIC,EAAmB,KAAK,gBAC5B,KAAK,eAAgBD,CAAiB,EACtC,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EAEpB,IAAIV,EAAO,KAAK,QAASW,CAAiB,EACrCX,IAAO,KAAK,cAAgB,KAAK,kBAAmBA,CAAK,GAC9D,KAAK,cAAgB,KAAK,IAAK,KAAK,OAAO,OAAS,EAAG,KAAK,aAAc,EAE1E,KAAK,UAAW,aAAc,CAAEU,CAAiB,CAAE,EAEnD,KAAK,OAAQ,KAAK,aAAc,CAClC,EAIOf,CAEP,CAAE,ICzIF,IAAAiB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACb,KACA,IACJ,EAGAA,EACID,EAAO,SACPA,EAAO,YACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GAAM,SAAkBI,EAAUC,EAAQ,CAErF,IAAMC,EAAW,yBACXC,EAAc,GAAGD,CAAQ,OACzBE,EAAiB,GAAGF,CAAQ,UAC5BG,EAAc,OAAOH,CAAQ,UAAUC,CAAW,UAC/CC,CAAc,aAAaA,CAAc,IAElDJ,EAAS,OAAO,SAAW,UAAW,CACpC,KAAK,GAAI,SAAU,KAAK,QAAS,EAEjC,KAAK,uBAAyB,KAAK,mBAAmB,KAAM,IAAK,CACnE,EAEA,IAAIM,EAAQN,EAAS,UAErBM,EAAM,SAAW,UAAW,CAC1B,GAAI,CAAE,SAAAC,CAAS,EAAI,KAAK,QACxB,GAAK,CAACA,EAAW,OAGjB,IAAIC,EAAW,OAAOD,GAAY,SAAWA,EAAW,EAExD,KAAK,wBAAyBC,CAAS,EACpC,IAAKC,CAAkB,EACvB,KAAK,EACL,QAAWC,GAAS,IAAIC,EAAYD,EAAK,KAAK,sBAAuB,CAAE,CAC5E,EAEA,SAASD,EAAmBG,EAAW,CAErC,GAAKA,EAAS,QAAQ,KAAK,EAAI,CAC7B,IAAIC,EAAWD,EAAS,aAAcV,CAAS,EAC3CY,EAAcF,EAAS,aAAcT,CAAY,EACjDY,EAAiBH,EAAS,aAAcR,CAAe,EAC3D,GAAKS,GAAYC,GAAeC,EAC9B,OAAOH,CAEX,CAEA,MAAO,CAAE,GAAGA,EAAS,iBAAkBP,CAAY,CAAE,CACvD,CAEAC,EAAM,mBAAqB,SAAUI,EAAKM,EAAQ,CAChD,IAAIC,EAAO,KAAK,cAAeP,CAAI,EAC/BE,EAAWK,GAAQA,EAAK,QAC5B,KAAK,eAAgBL,CAAS,EAE9B,KAAK,cAAe,WAAYI,EAAOJ,CAAS,CAClD,EASA,SAASD,EAAYD,EAAKQ,EAAa,CACrC,KAAK,IAAMR,EACX,KAAK,WAAaQ,EAClB,KAAK,KAAK,CACZ,CAEA,OAAAP,EAAW,UAAU,YAAcV,EAAM,YAEzCU,EAAW,UAAU,KAAO,UAAW,CACrC,KAAK,IAAI,iBAAkB,OAAQ,IAAK,EACxC,KAAK,IAAI,iBAAkB,QAAS,IAAK,EAEzC,IAAIQ,EAAM,KAAK,IAAI,aAAcjB,CAAS,GACxC,KAAK,IAAI,aAAcC,CAAY,EACjCiB,EAAS,KAAK,IAAI,aAAchB,CAAe,EAEnD,KAAK,IAAI,IAAMe,EACVC,GAAS,KAAK,IAAI,aAAc,SAAUA,CAAO,EAEtD,KAAK,IAAI,gBAAiBlB,CAAS,EACnC,KAAK,IAAI,gBAAiBC,CAAY,EACtC,KAAK,IAAI,gBAAiBC,CAAe,CAC3C,EAEAO,EAAW,UAAU,OAAS,SAAUK,EAAQ,CAC9C,KAAK,SAAUA,EAAO,qBAAsB,CAC9C,EAEAL,EAAW,UAAU,QAAU,SAAUK,EAAQ,CAC/C,KAAK,SAAUA,EAAO,oBAAqB,CAC7C,EAEAL,EAAW,UAAU,SAAW,SAAUK,EAAOK,EAAY,CAE3D,KAAK,IAAI,oBAAqB,OAAQ,IAAK,EAC3C,KAAK,IAAI,oBAAqB,QAAS,IAAK,GAC5B,KAAK,IAAI,WAAW,QAAQ,SAAS,EAAI,KAAK,IAAI,WAAa,KAAK,KAC1E,UAAU,IAAKA,CAAU,EAEnC,KAAK,WAAY,KAAK,IAAKL,CAAM,CACnC,EAIAhB,EAAS,WAAaW,EAEfX,CAEP,CAAE,IC3HF,IAAAsB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,EAGzBD,EAAO,UAAYC,EAAQ,CAG/B,GAAG,OAAO,OAAU,IAAc,OAASH,GAAM,UAAW,CAE5D,SAASI,GAAY,CAAC,CAEtB,IAAIC,EAAQD,EAAU,UAEtB,OAAAC,EAAM,GAAK,SAAUC,EAAWC,EAAW,CACzC,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,IAAIC,EAAS,KAAK,QAAU,KAAK,SAAW,CAAC,EAEzCC,EAAYD,EAAQF,CAAU,EAAIE,EAAQF,CAAU,GAAK,CAAC,EAE9D,OAAMG,EAAU,SAAUF,CAAS,GACjCE,EAAU,KAAMF,CAAS,EAGpB,IACT,EAEAF,EAAM,KAAO,SAAUC,EAAWC,EAAW,CAC3C,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,KAAK,GAAID,EAAWC,CAAS,EAG7B,IAAIG,EAAa,KAAK,YAAc,KAAK,aAAe,CAAC,EAErDC,EAAgBD,EAAYJ,CAAU,EAAII,EAAYJ,CAAU,GAAK,CAAC,EAE1E,OAAAK,EAAeJ,CAAS,EAAI,GAErB,IACT,EAEAF,EAAM,IAAM,SAAUC,EAAWC,EAAW,CAC1C,IAAIE,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAE9C,IAAIG,EAAQH,EAAU,QAASF,CAAS,EACxC,OAAKK,GAAS,IACZH,EAAU,OAAQG,EAAO,CAAE,EAGtB,IACT,EAEAP,EAAM,UAAY,SAAUC,EAAWO,EAAO,CAC5C,IAAIJ,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAG9CA,EAAYA,EAAU,MAAO,CAAE,EAC/BI,EAAOA,GAAQ,CAAC,EAEhB,IAAIF,EAAgB,KAAK,aAAe,KAAK,YAAaL,CAAU,EAEpE,QAAUC,KAAYE,EACPE,GAAiBA,EAAeJ,CAAS,IAIpD,KAAK,IAAKD,EAAWC,CAAS,EAE9B,OAAOI,EAAeJ,CAAS,GAGjCA,EAAS,MAAO,KAAMM,CAAK,EAG7B,OAAO,IACT,EAEAR,EAAM,OAAS,UAAW,CACxB,cAAO,KAAK,QACZ,OAAO,KAAK,YACL,IACT,EAEOD,CAEP,CAAE,ICnGF,IAAAU,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAASD,EAAQ,IAAsB,EAGxDA,EAAO,aAAeC,EAASD,EAAQA,EAAO,SAAU,CAG5D,GAAK,OAAO,OAAW,IAAc,OAASF,GAC1C,SAAkBE,EAAQE,EAAY,CAE1C,IAAIC,EAAIH,EAAO,OACXI,EAAUJ,EAAO,QAKrB,SAASK,EAAWC,EAAM,CAExB,OAAK,MAAM,QAASA,CAAI,EAAWA,EAEjB,OAAOA,GAAO,UAAY,OAAOA,EAAI,QAAU,SAEvC,CAAE,GAAGA,CAAI,EAG5B,CAAEA,CAAI,CACf,CAUA,SAASC,EAAcC,EAAMC,EAASC,EAAW,CAE/C,GAAK,EAAG,gBAAgBH,GACtB,OAAO,IAAIA,EAAcC,EAAMC,EAASC,CAAS,EAGnD,IAAIC,EAAYH,EAKhB,GAJK,OAAOA,GAAQ,WAClBG,EAAY,SAAS,iBAAkBH,CAAK,GAGzC,CAACG,EAAY,CAChBP,EAAQ,MAAM,gCAAgCO,GAAaH,CAAI,EAAE,EACjE,MACF,CAEA,KAAK,SAAWH,EAAWM,CAAU,EACrC,KAAK,QAAU,CAAC,EAEX,OAAOF,GAAW,WACrBC,EAAWD,EAEX,OAAO,OAAQ,KAAK,QAASA,CAAQ,EAGlCC,GAAW,KAAK,GAAI,SAAUA,CAAS,EAE5C,KAAK,UAAU,EAEVP,IAAI,KAAK,WAAa,IAAIA,EAAE,UAGjC,WAAY,KAAK,MAAM,KAAM,IAAK,CAAE,CACtC,CAEAI,EAAa,UAAY,OAAO,OAAQL,EAAU,SAAU,EAE5DK,EAAa,UAAU,UAAY,UAAW,CAC5C,KAAK,OAAS,CAAC,EAGf,KAAK,SAAS,QAAS,KAAK,iBAAkB,IAAK,CACrD,EAEA,IAAMK,EAAmB,CAAE,EAAG,EAAG,EAAG,EAKpCL,EAAa,UAAU,iBAAmB,SAAUC,EAAO,CAEpDA,EAAK,WAAa,OACrB,KAAK,SAAUA,CAAK,EAGjB,KAAK,QAAQ,aAAe,IAC/B,KAAK,2BAA4BA,CAAK,EAKxC,GAAI,CAAE,SAAAK,CAAS,EAAIL,EACnB,GAAK,CAACK,GAAY,CAACD,EAAiB,SAAUC,CAAS,EAAI,OAE3D,IAAIC,EAAYN,EAAK,iBAAiB,KAAK,EAE3C,QAAUO,KAAOD,EACf,KAAK,SAAUC,CAAI,EAIrB,GAAK,OAAO,KAAK,QAAQ,YAAc,SAAW,CAChD,IAAIC,EAAWR,EAAK,iBAAkB,KAAK,QAAQ,UAAW,EAC9D,QAAUS,KAASD,EACjB,KAAK,2BAA4BC,CAAM,CAE3C,CACF,EAEA,IAAMC,EAAQ,0BAEdX,EAAa,UAAU,2BAA6B,SAAUC,EAAO,CACnE,IAAIW,EAAQ,iBAAkBX,CAAK,EAEnC,GAAK,CAACW,EAAQ,OAGd,IAAIC,EAAUF,EAAM,KAAMC,EAAM,eAAgB,EAChD,KAAQC,IAAY,MAAO,CACzB,IAAIC,EAAMD,GAAWA,EAAQ,CAAC,EACzBC,GACH,KAAK,cAAeA,EAAKb,CAAK,EAEhCY,EAAUF,EAAM,KAAMC,EAAM,eAAgB,CAC9C,CACF,EAKAZ,EAAa,UAAU,SAAW,SAAUQ,EAAM,CAChD,IAAIO,EAAe,IAAIC,EAAcR,CAAI,EACzC,KAAK,OAAO,KAAMO,CAAa,CACjC,EAEAf,EAAa,UAAU,cAAgB,SAAUc,EAAKb,EAAO,CAC3D,IAAIgB,EAAa,IAAIC,EAAYJ,EAAKb,CAAK,EAC3C,KAAK,OAAO,KAAMgB,CAAW,CAC/B,EAEAjB,EAAa,UAAU,MAAQ,UAAW,CAIxC,GAHA,KAAK,gBAAkB,EACvB,KAAK,aAAe,GAEf,CAAC,KAAK,OAAO,OAAS,CACzB,KAAK,SAAS,EACd,MACF,CAGA,IAAImB,EAAa,CAAEC,EAAOnB,EAAMoB,IAAa,CAE3C,WAAY,IAAM,CAChB,KAAK,SAAUD,EAAOnB,EAAMoB,CAAQ,CACtC,CAAE,CACJ,EAEA,KAAK,OAAO,QAAS,SAAUN,EAAe,CAC5CA,EAAa,KAAM,WAAYI,CAAW,EAC1CJ,EAAa,MAAM,CACrB,CAAE,CACJ,EAEAf,EAAa,UAAU,SAAW,SAAUoB,EAAOnB,EAAMoB,EAAU,CACjE,KAAK,kBACL,KAAK,aAAe,KAAK,cAAgB,CAACD,EAAM,SAEhD,KAAK,UAAW,WAAY,CAAE,KAAMA,EAAOnB,CAAK,CAAE,EAC7C,KAAK,YAAc,KAAK,WAAW,QACtC,KAAK,WAAW,OAAQ,KAAMmB,CAAM,EAGjC,KAAK,kBAAoB,KAAK,OAAO,QACxC,KAAK,SAAS,EAGX,KAAK,QAAQ,OAASvB,GACzBA,EAAQ,IAAK,aAAawB,CAAO,GAAID,EAAOnB,CAAK,CAErD,EAEAD,EAAa,UAAU,SAAW,UAAW,CAC3C,IAAIsB,EAAY,KAAK,aAAe,OAAS,OAI7C,GAHA,KAAK,WAAa,GAClB,KAAK,UAAWA,EAAW,CAAE,IAAK,CAAE,EACpC,KAAK,UAAW,SAAU,CAAE,IAAK,CAAE,EAC9B,KAAK,WAAa,CACrB,IAAIC,EAAW,KAAK,aAAe,SAAW,UAC9C,KAAK,WAAYA,CAAS,EAAG,IAAK,CACpC,CACF,EAIA,SAASP,EAAcR,EAAM,CAC3B,KAAK,IAAMA,CACb,CAEAQ,EAAa,UAAY,OAAO,OAAQrB,EAAU,SAAU,EAE5DqB,EAAa,UAAU,MAAQ,UAAW,CAIxC,GADiB,KAAK,mBAAmB,EACvB,CAEhB,KAAK,QAAS,KAAK,IAAI,eAAiB,EAAG,cAAe,EAC1D,MACF,CAGA,KAAK,WAAa,IAAI,MAEjB,KAAK,IAAI,cACZ,KAAK,WAAW,YAAc,KAAK,IAAI,aAEzC,KAAK,WAAW,iBAAkB,OAAQ,IAAK,EAC/C,KAAK,WAAW,iBAAkB,QAAS,IAAK,EAEhD,KAAK,IAAI,iBAAkB,OAAQ,IAAK,EACxC,KAAK,IAAI,iBAAkB,QAAS,IAAK,EACzC,KAAK,WAAW,IAAM,KAAK,IAAI,YAAc,KAAK,IAAI,GACxD,EAEAA,EAAa,UAAU,mBAAqB,UAAW,CAGrD,OAAO,KAAK,IAAI,UAAY,KAAK,IAAI,YACvC,EAEAA,EAAa,UAAU,QAAU,SAAUQ,EAAUH,EAAU,CAC7D,KAAK,SAAWG,EAChB,GAAI,CAAE,WAAAC,CAAW,EAAI,KAAK,IAEtBxB,EAAOwB,EAAW,WAAa,UAAYA,EAAa,KAAK,IACjE,KAAK,UAAW,WAAY,CAAE,KAAMxB,EAAMoB,CAAQ,CAAE,CACtD,EAKAL,EAAa,UAAU,YAAc,SAAUU,EAAQ,CACrD,IAAIC,EAAS,KAAOD,EAAM,KACrB,KAAMC,CAAO,GAChB,KAAMA,CAAO,EAAGD,CAAM,CAE1B,EAEAV,EAAa,UAAU,OAAS,UAAW,CACzC,KAAK,QAAS,GAAM,QAAS,EAC7B,KAAK,aAAa,CACpB,EAEAA,EAAa,UAAU,QAAU,UAAW,CAC1C,KAAK,QAAS,GAAO,SAAU,EAC/B,KAAK,aAAa,CACpB,EAEAA,EAAa,UAAU,aAAe,UAAW,CAC/C,KAAK,WAAW,oBAAqB,OAAQ,IAAK,EAClD,KAAK,WAAW,oBAAqB,QAAS,IAAK,EACnD,KAAK,IAAI,oBAAqB,OAAQ,IAAK,EAC3C,KAAK,IAAI,oBAAqB,QAAS,IAAK,CAC9C,EAIA,SAASE,EAAYJ,EAAKc,EAAU,CAClC,KAAK,IAAMd,EACX,KAAK,QAAUc,EACf,KAAK,IAAM,IAAI,KACjB,CAGA,OAAAV,EAAW,UAAY,OAAO,OAAQF,EAAa,SAAU,EAE7DE,EAAW,UAAU,MAAQ,UAAW,CACtC,KAAK,IAAI,iBAAkB,OAAQ,IAAK,EACxC,KAAK,IAAI,iBAAkB,QAAS,IAAK,EACzC,KAAK,IAAI,IAAM,KAAK,IAEH,KAAK,mBAAmB,IAEvC,KAAK,QAAS,KAAK,IAAI,eAAiB,EAAG,cAAe,EAC1D,KAAK,aAAa,EAEtB,EAEAA,EAAW,UAAU,aAAe,UAAW,CAC7C,KAAK,IAAI,oBAAqB,OAAQ,IAAK,EAC3C,KAAK,IAAI,oBAAqB,QAAS,IAAK,CAC9C,EAEAA,EAAW,UAAU,QAAU,SAAUM,EAAUH,EAAU,CAC3D,KAAK,SAAWG,EAChB,KAAK,UAAW,WAAY,CAAE,KAAM,KAAK,QAASH,CAAQ,CAAE,CAC9D,EAIArB,EAAa,iBAAmB,SAAU6B,EAAS,CACjDA,EAASA,GAAUpC,EAAO,OACpBoC,IAGNjC,EAAIiC,EAEJjC,EAAE,GAAG,aAAe,SAAUM,EAASC,EAAW,CAEhD,OADe,IAAIH,EAAc,KAAME,EAASC,CAAS,EACzC,WAAW,QAASP,EAAG,IAAK,CAAE,CAChD,EACF,EAEAI,EAAa,iBAAiB,EAIvBA,CAEP,CAAE,IC9UF,IAAA8B,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACb,KACA,IACJ,EAGAA,EACID,EAAO,SACPA,EAAO,YACX,CAGJ,GAAG,OAAO,OAAU,IAAc,OAASF,GACvC,SAAkBI,EAAUC,EAAe,CAE/C,OAAAD,EAAS,OAAO,aAAe,UAAW,CACxC,KAAK,GAAI,WAAY,KAAK,YAAa,CACzC,EAEAA,EAAS,UAAU,aAAe,UAAW,CAC3C,GAAK,CAAC,KAAK,QAAQ,aAAe,OAElC,IAAIE,EAAyB,CAAEC,EAAUC,IAAW,CAClD,IAAIC,EAAO,KAAK,cAAeD,EAAM,GAAI,EACzC,KAAK,eAAgBC,GAAQA,EAAK,OAAQ,EACpC,KAAK,QAAQ,YAAa,KAAK,yBAAyB,CAChE,EACAJ,EAAc,KAAK,MAAO,EAAE,GAAI,WAAYC,CAAuB,CACrE,EAEOF,CAEP,CAAE,ICrCF,IAAAM,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAWA,GAAK,OAAOA,IAAU,UAAYA,GAAO,QAAU,CACjD,IAAMC,EAAW,KACjB,KACA,KACA,KACA,KACA,KACA,KACA,KAEAD,GAAO,QAAUC,CACnB,ICtBA,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAKE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAASD,CAAO,EAGjCA,EAAO,aAAeC,EAASD,CAAO,CAG1C,GAAGF,GAAM,SAAkBE,EAAS,CAEpC,IAAIE,EAAQ,CAAC,EAKbA,EAAM,OAAS,SAAUC,EAAGC,EAAI,CAC9B,OAAO,OAAO,OAAQD,EAAGC,CAAE,CAC7B,EAIAF,EAAM,OAAS,SAAUG,EAAKC,EAAM,CAClC,OAAWD,EAAMC,EAAQA,GAAQA,CACnC,EAKAJ,EAAM,UAAY,SAAUK,EAAM,CAEhC,OAAK,MAAM,QAASA,CAAI,EAAWA,EAG9BA,GAAQ,KAAmC,CAAC,EAE/B,OAAOA,GAAO,UAAY,OAAOA,EAAI,QAAU,SAEvC,CAAE,GAAGA,CAAI,EAG5B,CAAEA,CAAI,CACf,EAIAL,EAAM,WAAa,SAAUM,EAAKD,EAAM,CACtC,IAAIE,EAAQD,EAAI,QAASD,CAAI,EACxBE,GAAS,IACZD,EAAI,OAAQC,EAAO,CAAE,CAEzB,EAIAP,EAAM,UAAY,SAAUQ,EAAMC,EAAW,CAC3C,KAAQD,EAAK,YAAcA,GAAQ,SAAS,MAE1C,GADAA,EAAOA,EAAK,WACPA,EAAK,QAASC,CAAS,EAAI,OAAOD,CAE3C,EAKAR,EAAM,gBAAkB,SAAUQ,EAAO,CACvC,OAAK,OAAOA,GAAQ,SACX,SAAS,cAAeA,CAAK,EAE/BA,CACT,EAKAR,EAAM,YAAc,SAAUU,EAAQ,CACpC,IAAIC,EAAS,KAAOD,EAAM,KACrB,KAAMC,CAAO,GAChB,KAAMA,CAAO,EAAGD,CAAM,CAE1B,EAIAV,EAAM,mBAAqB,SAAUY,EAAOH,EAAW,CAErD,OAAAG,EAAQZ,EAAM,UAAWY,CAAM,EAExBA,EAEJ,OAAUJ,GAAUA,aAAgB,WAAY,EAChD,OAAQ,CAAEK,EAASL,IAAU,CAE5B,GAAK,CAACC,EACJ,OAAAI,EAAQ,KAAML,CAAK,EACZK,EAIJL,EAAK,QAASC,CAAS,GAC1BI,EAAQ,KAAML,CAAK,EAGrB,IAAIM,EAAaN,EAAK,iBAAkBC,CAAS,EAEjD,OAAAI,EAAUA,EAAQ,OAAQ,GAAGC,CAAW,EACjCD,CACT,EAAG,CAAC,CAAE,CACV,EAIAb,EAAM,eAAiB,SAAUe,EAAQC,EAAYC,EAAY,CAC/DA,EAAYA,GAAa,IAEzB,IAAIN,EAASI,EAAO,UAAWC,CAAW,EACtCE,EAAcF,EAAa,UAE/BD,EAAO,UAAWC,CAAW,EAAI,UAAW,CAC1C,aAAc,KAAME,CAAY,CAAE,EAElC,IAAIC,EAAO,UACX,KAAMD,CAAY,EAAI,WAAY,IAAM,CACtCP,EAAO,MAAO,KAAMQ,CAAK,EACzB,OAAO,KAAMD,CAAY,CAC3B,EAAGD,CAAU,CACf,CACF,EAIAjB,EAAM,SAAW,SAAUoB,EAAa,CACtC,IAAIC,EAAa,SAAS,WACrBA,GAAc,YAAcA,GAAc,cAE7C,WAAYD,CAAW,EAEvB,SAAS,iBAAkB,mBAAoBA,CAAW,CAE9D,EAKApB,EAAM,SAAW,SAAUsB,EAAM,CAC/B,OAAOA,EAAI,QAAS,cAAe,SAAUC,EAAOC,EAAIC,EAAK,CAC3D,OAAOD,EAAK,IAAMC,CACpB,CAAE,EAAE,YAAY,CAClB,EAEA,IAAIC,EAAU5B,EAAO,QAKrB,OAAAE,EAAM,SAAW,SAAU2B,EAAaC,EAAY,CAClD5B,EAAM,SAAU,UAAW,CAEzB,IAAI6B,EAAW,QADO7B,EAAM,SAAU4B,CAAU,EAE5CE,EAAgB,SAAS,iBAAkB,IAAID,CAAQ,GAAI,EAC3DE,EAASjC,EAAO,OAEpB,CAAE,GAAGgC,CAAc,EAAE,QAAWtB,GAAU,CACxC,IAAIwB,EAAOxB,EAAK,aAAcqB,CAAS,EACnCI,EACJ,GAAI,CACFA,EAAUD,GAAQ,KAAK,MAAOA,CAAK,CACrC,OAAUE,EAAQ,CAEXR,GACHA,EAAQ,MAAO,iBAAiBG,CAAQ,OAAOrB,EAAK,SAAS,KAAK0B,CAAK,EAAG,EAE5E,MACF,CAEA,IAAIC,EAAW,IAAIR,EAAanB,EAAMyB,CAAQ,EAEzCF,GACHA,EAAO,KAAMvB,EAAMoB,EAAWO,CAAS,CAE3C,CAAE,CAEJ,CAAE,CACJ,EAIOnC,CAEP,CAAE,ICnMF,IAAAoC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAKE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACb,KACA,IACJ,EAGAD,EAAO,SAAWC,EACdD,EAAO,SACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBE,EAAUC,EAAQ,CAM/CD,EAAS,OAAO,SAAW,UAAW,CACpC,KAAK,GAAI,WAAY,KAAK,gBAAiB,EAC3C,KAAK,GAAI,aAAc,KAAK,kBAAmB,EAC/C,KAAK,GAAI,UAAW,KAAK,eAAgB,EAEzC,IAAIE,EAAiB,KAAK,QAAQ,SAC5BA,GAGN,WAAY,IAAM,CAChB,KAAK,gBAAiBA,CAAe,CACvC,CAAE,CACJ,EAEA,IAAIC,EAAQH,EAAS,UAErBG,EAAM,gBAAkB,SAAUC,EAAO,CACvCA,EAAOH,EAAM,gBAAiBG,CAAK,EACnC,IAAIC,EAAYL,EAAS,KAAMI,CAAK,EAE/B,CAACC,GAAaA,IAAc,OAEjC,KAAK,aAAeA,EAEpB,KAAK,qBAAuB,IAAM,CAChC,KAAK,mBAAmB,CAC1B,EACAA,EAAU,GAAI,SAAU,KAAK,oBAAqB,EAElD,KAAK,GAAI,cAAe,KAAK,gBAAiB,EAE9C,KAAK,mBAAoB,EAAK,EAChC,EAEAF,EAAM,mBAAqB,SAAUG,EAAY,CAE/C,IAAIC,EAAiB,KAAK,cAAgB,KAAK,aAAa,cAC5D,GAAK,CAACA,EAAiB,OAGvB,IAAIC,EAAeD,EAAe,CAAC,EAC/BE,EAAa,KAAK,aAAa,MAAM,QAASD,CAAa,EAC3DE,EAAYD,EAAaF,EAAe,OAAS,EACjDI,EAAc,KAAK,MAAOC,EAAMH,EAAYC,EAC5C,KAAK,aAAa,SAAU,CAAE,EAKlC,GAJA,KAAK,WAAYC,EAAa,GAAOL,CAAU,EAE/C,KAAK,0BAA0B,EAE1BK,GAAe,KAAK,MAAM,OAAS,OAExC,IAAIE,EAAgB,KAAK,MAAM,MAAOJ,EAAYC,EAAY,CAAE,EAChE,KAAK,oBAAsBG,EAAc,IAAOC,GAAUA,EAAK,OAAQ,EACvE,KAAK,uBAAuB,KAAK,CACnC,EAEA,SAASF,EAAMG,EAAGC,EAAGC,EAAI,CACvB,OAASD,EAAID,GAAME,EAAIF,CACzB,CAEA,OAAAZ,EAAM,uBAAyB,SAAUe,EAAS,CAChD,KAAK,oBAAoB,QAAS,SAAUC,EAAU,CACpDA,EAAQ,UAAWD,CAAO,EAAE,iBAAiB,CAC/C,CAAE,CACJ,EAEAf,EAAM,iBAAmB,UAAW,CAClC,KAAK,mBAAoB,EAAK,CAChC,EAEAA,EAAM,0BAA4B,UAAW,CACrC,KAAK,sBAEX,KAAK,uBAAuB,QAAQ,EACpC,OAAO,KAAK,oBACd,EAEAA,EAAM,iBAAmB,SAAUiB,EAAOC,EAASC,EAAaC,EAAY,CACrE,OAAOA,GAAa,UACvB,KAAK,aAAa,WAAYA,CAAU,CAE5C,EAEApB,EAAM,mBAAqB,UAAW,CACpC,KAAK,0BAA0B,CACjC,EAEAA,EAAM,gBAAkB,UAAW,CAC3B,KAAK,eAEX,KAAK,aAAa,IAAK,SAAU,KAAK,oBAAqB,EAC3D,KAAK,IAAK,cAAe,KAAK,gBAAiB,EAC/C,OAAO,KAAK,aACd,EAIOH,CAEP,CAAE,IC9HF,IAAAwB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAAQ,EAGzBD,EAAO,UAAYC,EAAQ,CAG/B,GAAG,OAAO,OAAU,IAAc,OAASH,GAAM,UAAW,CAE5D,SAASI,GAAY,CAAC,CAEtB,IAAIC,EAAQD,EAAU,UAEtB,OAAAC,EAAM,GAAK,SAAUC,EAAWC,EAAW,CACzC,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,IAAIC,EAAS,KAAK,QAAU,KAAK,SAAW,CAAC,EAEzCC,EAAYD,EAAQF,CAAU,EAAIE,EAAQF,CAAU,GAAK,CAAC,EAE9D,OAAMG,EAAU,SAAUF,CAAS,GACjCE,EAAU,KAAMF,CAAS,EAGpB,IACT,EAEAF,EAAM,KAAO,SAAUC,EAAWC,EAAW,CAC3C,GAAK,CAACD,GAAa,CAACC,EAAW,OAAO,KAGtC,KAAK,GAAID,EAAWC,CAAS,EAG7B,IAAIG,EAAa,KAAK,YAAc,KAAK,aAAe,CAAC,EAErDC,EAAgBD,EAAYJ,CAAU,EAAII,EAAYJ,CAAU,GAAK,CAAC,EAE1E,OAAAK,EAAeJ,CAAS,EAAI,GAErB,IACT,EAEAF,EAAM,IAAM,SAAUC,EAAWC,EAAW,CAC1C,IAAIE,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAE9C,IAAIG,EAAQH,EAAU,QAASF,CAAS,EACxC,OAAKK,GAAS,IACZH,EAAU,OAAQG,EAAO,CAAE,EAGtB,IACT,EAEAP,EAAM,UAAY,SAAUC,EAAWO,EAAO,CAC5C,IAAIJ,EAAY,KAAK,SAAW,KAAK,QAASH,CAAU,EACxD,GAAK,CAACG,GAAa,CAACA,EAAU,OAAS,OAAO,KAG9CA,EAAYA,EAAU,MAAO,CAAE,EAC/BI,EAAOA,GAAQ,CAAC,EAEhB,IAAIF,EAAgB,KAAK,aAAe,KAAK,YAAaL,CAAU,EAEpE,QAAUC,KAAYE,EACPE,GAAiBA,EAAeJ,CAAS,IAIpD,KAAK,IAAKD,EAAWC,CAAS,EAE9B,OAAOI,EAAeJ,CAAS,GAGjCA,EAAS,MAAO,KAAMM,CAAK,EAG7B,OAAO,IACT,EAEAR,EAAM,OAAS,UAAW,CACxB,cAAO,KAAK,QACZ,OAAO,KAAK,YACL,IACT,EAEOD,CAEP,CAAE,ICnGF,IAAAU,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAKE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EAASD,CAAO,EAGjCA,EAAO,aAAeC,EAASD,CAAO,CAG1C,GAAGF,GAAM,SAAkBE,EAAS,CAEpC,IAAIE,EAAQ,CAAC,EAKbA,EAAM,OAAS,SAAUC,EAAGC,EAAI,CAC9B,OAAO,OAAO,OAAQD,EAAGC,CAAE,CAC7B,EAIAF,EAAM,OAAS,SAAUG,EAAKC,EAAM,CAClC,OAAWD,EAAMC,EAAQA,GAAQA,CACnC,EAKAJ,EAAM,UAAY,SAAUK,EAAM,CAEhC,OAAK,MAAM,QAASA,CAAI,EAAWA,EAG9BA,GAAQ,KAAmC,CAAC,EAE/B,OAAOA,GAAO,UAAY,OAAOA,EAAI,QAAU,SAEvC,CAAE,GAAGA,CAAI,EAG5B,CAAEA,CAAI,CACf,EAIAL,EAAM,WAAa,SAAUM,EAAKD,EAAM,CACtC,IAAIE,EAAQD,EAAI,QAASD,CAAI,EACxBE,GAAS,IACZD,EAAI,OAAQC,EAAO,CAAE,CAEzB,EAIAP,EAAM,UAAY,SAAUQ,EAAMC,EAAW,CAC3C,KAAQD,EAAK,YAAcA,GAAQ,SAAS,MAE1C,GADAA,EAAOA,EAAK,WACPA,EAAK,QAASC,CAAS,EAAI,OAAOD,CAE3C,EAKAR,EAAM,gBAAkB,SAAUQ,EAAO,CACvC,OAAK,OAAOA,GAAQ,SACX,SAAS,cAAeA,CAAK,EAE/BA,CACT,EAKAR,EAAM,YAAc,SAAUU,EAAQ,CACpC,IAAIC,EAAS,KAAOD,EAAM,KACrB,KAAMC,CAAO,GAChB,KAAMA,CAAO,EAAGD,CAAM,CAE1B,EAIAV,EAAM,mBAAqB,SAAUY,EAAOH,EAAW,CAErD,OAAAG,EAAQZ,EAAM,UAAWY,CAAM,EAExBA,EAEJ,OAAUJ,GAAUA,aAAgB,WAAY,EAChD,OAAQ,CAAEK,EAASL,IAAU,CAE5B,GAAK,CAACC,EACJ,OAAAI,EAAQ,KAAML,CAAK,EACZK,EAIJL,EAAK,QAASC,CAAS,GAC1BI,EAAQ,KAAML,CAAK,EAGrB,IAAIM,EAAaN,EAAK,iBAAkBC,CAAS,EAEjD,OAAAI,EAAUA,EAAQ,OAAQ,GAAGC,CAAW,EACjCD,CACT,EAAG,CAAC,CAAE,CACV,EAIAb,EAAM,eAAiB,SAAUe,EAAQC,EAAYC,EAAY,CAC/DA,EAAYA,GAAa,IAEzB,IAAIN,EAASI,EAAO,UAAWC,CAAW,EACtCE,EAAcF,EAAa,UAE/BD,EAAO,UAAWC,CAAW,EAAI,UAAW,CAC1C,aAAc,KAAME,CAAY,CAAE,EAElC,IAAIC,EAAO,UACX,KAAMD,CAAY,EAAI,WAAY,IAAM,CACtCP,EAAO,MAAO,KAAMQ,CAAK,EACzB,OAAO,KAAMD,CAAY,CAC3B,EAAGD,CAAU,CACf,CACF,EAIAjB,EAAM,SAAW,SAAUoB,EAAa,CACtC,IAAIC,EAAa,SAAS,WACrBA,GAAc,YAAcA,GAAc,cAE7C,WAAYD,CAAW,EAEvB,SAAS,iBAAkB,mBAAoBA,CAAW,CAE9D,EAKApB,EAAM,SAAW,SAAUsB,EAAM,CAC/B,OAAOA,EAAI,QAAS,cAAe,SAAUC,EAAOC,EAAIC,EAAK,CAC3D,OAAOD,EAAK,IAAMC,CACpB,CAAE,EAAE,YAAY,CAClB,EAEA,IAAIC,EAAU5B,EAAO,QAKrB,OAAAE,EAAM,SAAW,SAAU2B,EAAaC,EAAY,CAClD5B,EAAM,SAAU,UAAW,CAEzB,IAAI6B,EAAW,QADO7B,EAAM,SAAU4B,CAAU,EAE5CE,EAAgB,SAAS,iBAAkB,IAAID,CAAQ,GAAI,EAC3DE,EAASjC,EAAO,OAEpB,CAAE,GAAGgC,CAAc,EAAE,QAAWtB,GAAU,CACxC,IAAIwB,EAAOxB,EAAK,aAAcqB,CAAS,EACnCI,EACJ,GAAI,CACFA,EAAUD,GAAQ,KAAK,MAAOA,CAAK,CACrC,OAAUE,EAAQ,CAEXR,GACHA,EAAQ,MAAO,iBAAiBG,CAAQ,OAAOrB,EAAK,SAAS,KAAK0B,CAAK,EAAG,EAE5E,MACF,CAEA,IAAIC,EAAW,IAAIR,EAAanB,EAAMyB,CAAQ,EAEzCF,GACHA,EAAO,KAAMvB,EAAMoB,EAAWO,CAAS,CAE3C,CAAE,CAEJ,CAAE,CACJ,EAIOnC,CAEP,CAAE,ICnMF,IAAAoC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,IACJ,EAGAA,EAAO,eAAiBC,EACpBD,EACAA,EAAO,UACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAWC,EAAQ,CAExD,IAAIC,EAASJ,EAAO,OAEhBK,EAAY,CAAC,EAEjB,SAASC,EAAgBC,EAASC,EAAU,CAC1C,IAAIC,EAAYN,EAAM,gBAAiBI,CAAQ,EAE/C,GAAK,CAACE,EAAY,CAChB,QAAQ,MAAO,oCAAuCA,GAAaF,EAAU,EAC7E,MACF,CAGA,GAFAA,EAAUE,EAELF,EAAQ,mBAAqB,CAChC,IAAIG,EAAWL,EAAWE,EAAQ,kBAAmB,EACrD,OAAAG,EAAS,OAAQF,CAAQ,EAClBE,CACT,CAEA,KAAK,QAAUH,EAEf,KAAK,QAAU,CAAE,GAAGD,EAAe,QAAS,EAC5C,KAAK,OAAQE,CAAQ,EAEhBJ,IACH,KAAK,SAAWA,EAAQ,KAAK,OAAQ,GAGvC,KAAK,OAAO,CACd,CAGAE,EAAe,SAAW,CAI1B,EAGAA,EAAe,OAAS,CAAC,EACzBA,EAAe,QAAU,CAAC,EAE1B,IAAIK,EAAQL,EAAe,UAE3B,OAAO,OAAQK,EAAOT,EAAU,SAAU,EAK1C,IAAIU,EAAO,EAEXD,EAAM,OAAS,UAAW,CAGxB,IAAIE,EAAK,KAAK,KAAO,EAAED,EASvB,GARA,KAAK,QAAQ,mBAAqBC,EAClCR,EAAWQ,CAAG,EAAI,KAElB,KAAK,UAAY,EACjB,KAAK,UAAY,EACjB,KAAK,cAAc,EAGd,EADS,KAAK,SAAW,KAAK,QAAQ,GAC3B,CACd,QAAQ,MAAM,0BAA0B,EACxC,MACF,CACA,KAAK,sBAAsB,EAC3B,KAAK,IAAK,cAAe,CAAE,KAAK,QAAQ,SAAU,CAAE,EACpD,KAAK,WAAW,EAEhB,QAAUC,KAAUR,EAAe,OACjCA,EAAe,OAAQQ,CAAO,EAAE,KAAM,IAAK,CAE/C,EAEAH,EAAM,OAAS,SAAUI,EAAO,CAC9B,OAAO,OAAQ,KAAK,QAASA,CAAK,CACpC,EAGAJ,EAAM,WAAa,UAAW,CAC5B,IAAIK,EAAS,KAAK,QAAQ,OACrBA,GACHA,EAAO,KAAM,KAAM,IAAK,CAE5B,EAIAL,EAAM,cAAgB,SAAUM,EAAMC,EAAOC,EAAO,CAClD,KAAK,IAAKF,EAAME,CAAK,EACrB,IAAIC,EAAWF,EAAQ,CAAEA,CAAM,EAAE,OAAQC,CAAK,EAAIA,EAGlD,GAFA,KAAK,UAAWF,EAAMG,CAAS,EAE1B,CAAChB,GAAU,CAAC,KAAK,SACpB,OAGFa,GAAQ,kBACR,IAAII,EAASJ,EACb,GAAKC,EAAQ,CAGX,IAAII,EAAUlB,EAAO,MAAOc,CAAM,EAClCI,EAAQ,KAAOL,EACfI,EAASC,CACX,CACA,KAAK,SAAS,QAASD,EAAQF,CAAK,CACtC,EAEA,IAAII,EAAU,CACZ,YAAeC,GAAe,MAAMA,CAAS,GAC7C,QAAWC,GAAU,QAAQA,CAAI,GACjC,KAAM,CAAEC,EAAUD,IAAU,GAAGC,EAAS,OAAS,EAAE,UAAUD,CAAI,GACjE,MAAO,CAAEE,EAAOF,IAAU,GAAGE,CAAK,UAAUF,CAAI,GAChD,OAAQ,CAAEC,EAAUD,EAAMG,IAAW,GAAGA,EAAM,MAAM,gBAAgBH,CAAI,GACxE,KAAM,CAAEC,EAAUD,IAAU,QAAQA,CAAI,GACxC,QAAS,CAAEI,EAAOJ,IAAU,QAAQA,CAAI,GACxC,UAAW,SAAUK,EAAOC,EAAS,CACnC,MAAO,kCAAkCD,CAAK,SAASC,CAAM,EAC/D,CACF,EAGApB,EAAM,IAAM,SAAUM,EAAME,EAAO,CACjC,GAAK,CAAC,KAAK,QAAQ,MAAQ,OAE3B,IAAIa,EAAU,oBAAoBf,CAAI,GAClCgB,EAASV,EAASN,CAAK,EACtBgB,IAASD,GAAW,KAAOC,EAAO,MAAO,KAAMd,CAAK,GACzD,QAAQ,IAAKa,CAAQ,CACvB,EAIArB,EAAM,mBAAqB,UAAW,CACpC,KAAK,aAAeX,EAAO,YAC3B,IAAIkC,EAAO,KAAK,QAAQ,sBAAsB,EAC9C,KAAK,IAAMA,EAAK,IAAMlC,EAAO,OAC/B,EAEAW,EAAM,eAAiB,UAAW,CAChC,IAAIwB,EAAgB,KAAK,QAAQ,cACjC,GAAK,CAACA,EAAgB,CAEpB,KAAK,SAAWnC,EAChB,MACF,CAIA,GAFA,KAAK,SAAWmC,IAAkB,GAAO,KAAK,QAC5ChC,EAAM,gBAAiBgC,CAAc,EAClC,CAAC,KAAK,SACT,MAAM,IAAI,MAAM,iCAAiCA,CAAa,EAAE,CAEpE,EAIAxB,EAAM,cAAgB,UAAW,CAC/B,IAAIyB,EAAU,KAAK,QAAQ,KAC3B,GAAK,CAACA,EAAU,CACd,QAAQ,MAAM,gDAAgDA,CAAO,EAAE,EACvE,MACF,CAEA,IAAInB,EAAO,OAAOmB,EAClB,GAAKnB,GAAQ,WAAa,CACxB,KAAK,QAAUmB,EACf,MACF,CAGA,GADoBnB,GAAQ,UAAYmB,EAAQ,MAAM,OAAO,EACxC,CACnB,KAAK,sBAAuBA,CAAQ,EACpC,MACF,CAEA,KAAK,sBAAuBA,CAAQ,CACtC,EAEAzB,EAAM,sBAAwB,SAAUyB,EAAU,CAEhD,KAAK,QAAU,IAAM,CACnB,IAAIC,EAAY,KAAK,UAAY,EACjC,OAAOD,EAAQ,QAAS,QAASC,CAAU,CAC7C,EAIA,IAAIC,EAAcF,EACf,QAAS,YAAa,KAAM,EAC5B,QAAS,QAAS,eAAgB,EACjCG,EAAa,IAAI,OAAQD,CAAY,EACrCE,EAAQ,SAAS,KAAK,MAAOD,CAAW,EAEvCC,IACH,KAAK,UAAY,SAAUA,EAAM,CAAC,EAAG,EAAG,EACxC,KAAK,IAAK,YAAa,CAAE,KAAK,UAAW,iBAAkB,CAAE,EAEjE,EAEA,IAAIC,EAAc,CAGhB,mCAEA,mCAEA,+BACF,EAGIC,EAAepC,EAAe,aAAe,SAAUqC,EAAO,CAChE,GAAMA,EACN,QAAUC,KAASH,EAAc,CAC/B,IAAID,EAAQG,EAAK,MAAOC,CAAM,EAC9B,GAAKJ,EAAQ,CACX,GAAI,CAAE,CAAEK,EAAOf,EAAOgB,CAAI,EAAIN,EAC9B,MAAO,CAAE,MAAAK,EAAO,MAAAf,EAAO,IAAAgB,CAAI,CAC7B,CACF,CACF,EAEAnC,EAAM,sBAAwB,SAAUyB,EAAU,CAEhD,IAAIW,EAAW,SAAS,cAAeX,CAAQ,EAC/C,GAAK,CAACW,EAAW,CACf,QAAQ,MAAM,wDAAwDX,CAAO,EAAE,EAC/E,MACF,CAEA,IAAIO,EAAOI,EAAS,aAAa,MAAM,EACnCC,EAAYN,EAAcC,CAAK,EACnC,GAAK,CAACK,EAAY,CAChB,QAAQ,MAAM,kDAAkDL,CAAI,EAAE,EACtE,MACF,CAEA,GAAI,CAAE,MAAAE,EAAO,MAAAf,EAAO,IAAAgB,CAAI,EAAIE,EAC5B,KAAK,eAAiB,GACtB,KAAK,QAAU,IAAMH,GAAU,KAAK,UAAY,GAAMC,EAEtD,KAAK,UAAY,SAAUhB,EAAO,EAAG,EAAI,EACzC,KAAK,IAAK,YAAa,CAAE,KAAK,UAAW,WAAY,CAAE,CACzD,EAEAnB,EAAM,sBAAwB,UAAW,CACvC,IAAIc,EAAO,KAAK,QAAQ,EAGxB,GADiBA,EAAK,MAAO,OAAQ,GAAKA,EAAK,MAAO,KAAM,EAC1C,CAChB,KAAK,gBAAkB,KAAK,QAC5B,MACF,CAEA,GAAI,CAAE,SAAAwB,CAAS,EAAI,SAEfC,EAAUzB,EAAK,MAAO,KAAM,EAE5B0B,EAAYF,EAAS,UAAW,EAAGA,EAAS,YAAY,GAAG,CAAE,EAC7DG,EAAYF,EAAUD,EAAWE,EAAY,IAEjD,KAAK,gBAAkB,IAAMC,EAAY,KAAK,QAAQ,CACxD,EAKA9C,EAAe,OAAO,QAAU,UAAW,CACzC,IAAI+C,EAAMlD,EAAM,gBAAiB,KAAK,QAAQ,OAAQ,EAChDkD,IAENA,EAAI,MAAM,QAAU,OACpB,KAAK,IAAMA,EACb,EAEA/C,EAAe,QAAQ,QAAU,UAAW,CACrC,KAAK,MAAM,KAAK,IAAI,MAAM,QAAU,GAC3C,EAIAK,EAAM,QAAU,UAAW,CACzB,KAAK,OAAO,EAEZ,QAAUG,KAAUR,EAAe,QACjCA,EAAe,QAASQ,CAAO,EAAE,KAAM,IAAK,EAG9C,OAAO,KAAK,QAAQ,mBACpB,OAAOT,EAAW,KAAK,IAAK,EAEvBD,GAAU,KAAK,UAClBA,EAAO,WAAY,KAAK,QAAS,gBAAiB,CAEtD,EAKAE,EAAe,SAAW,SAAUgD,EAAIC,EAAY,CAClDA,EAAYA,GAAa,IACzB,IAAIC,EAAMC,EAEV,OAAO,UAAW,CAChB,IAAIC,EAAM,CAAC,IAAI,KACXvC,EAAO,UACPwC,EAAU,IAAM,CAClBH,EAAOE,EACPJ,EAAG,MAAO,KAAMnC,CAAK,CACvB,EACKqC,GAAQE,EAAMF,EAAOD,GAExB,aAAcE,CAAQ,EACtBA,EAAU,WAAYE,EAASJ,CAAU,GAEzCI,EAAQ,CAEZ,CACF,EAEArD,EAAe,KAAO,SAAUsD,EAAO,CACrCA,EAAOzD,EAAM,gBAAiByD,CAAK,EACnC,IAAI/C,EAAK+C,GAAQA,EAAK,mBACtB,OAAO/C,GAAMR,EAAWQ,CAAG,CAC7B,EAGAP,EAAe,UAAY,SAAUuD,EAAO,CAC1CzD,EAASyD,CACX,EAIA1D,EAAM,SAAUG,EAAgB,iBAAkB,EAGlDK,EAAM,MAAQ,UAAW,CAAC,EAE1B,GAAI,CAAE,cAAAmD,CAAc,EAAI9D,EACxB,OAAKI,GAAU0D,GACbA,EAAe,iBAAkBxD,EAAgBF,CAAO,EAKnDE,CAEP,CAAE,IClXF,IAAAyD,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,IACJ,EAGAC,EACID,EACAA,EAAO,cACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAiB,CAEtD,IAAIC,EAAQD,EAAe,UAE3B,OAAO,OAAQA,EAAe,SAAU,CAEtC,aAAc,GACd,cAAe,GACf,aAAc,OACd,iBAAkB,EAGpB,CAAE,EAEFA,EAAe,OAAO,SAAW,UAAW,CAC1C,KAAK,QAAU,GACf,KAAK,GAAI,kBAAmB,KAAK,qBAAsB,EACvD,KAAK,GAAI,OAAQ,KAAK,aAAc,EAC/B,KAAK,QAAQ,UAChB,KAAK,GAAI,SAAU,KAAK,gBAAiB,CAE7C,EAEAC,EAAM,sBAAwB,UAAW,CAClC,KAAK,QAAQ,cAAe,KAAK,aAAa,CACrD,EAEA,IAAIC,EAAY,IAAI,UAEpBD,EAAM,aAAe,UAAW,CAC9B,GAAK,KAAK,WAAa,CAAC,KAAK,QAAU,OAEvC,GAAI,CAAE,aAAAE,EAAc,iBAAAC,EAAkB,aAAAC,CAAa,EAAI,KAAK,QACxDC,EAAO,KAAK,gBAAgB,EAChC,KAAK,UAAY,GACZ,OAAOD,GAAgB,aAAaA,EAAeA,EAAa,GAErE,IAAIE,EAAe,MAAOD,EAAMD,CAAa,EAC1C,KAAQG,GAAc,CACrB,GAAK,CAACA,EAAS,GAAK,CAClB,IAAIC,EAAQ,IAAI,MAAOD,EAAS,UAAW,EAC3C,YAAK,YAAaC,EAAOH,EAAME,CAAS,EACjC,CAAE,SAAAA,CAAS,CACpB,CAEA,OAAOA,EAAUL,CAAa,EAAE,EAAE,KAAQO,IACtBP,GAAgB,QAAUC,IAE1CM,EAAOR,EAAU,gBAAiBQ,EAAM,WAAY,GAEjDF,EAAS,QAAU,KACtB,KAAK,gBAAiBE,EAAMJ,CAAK,EAC1B,CAAE,KAAAI,EAAM,SAAAF,CAAS,GAEjB,KAAK,WAAYE,EAAMJ,EAAME,CAAS,EAE/C,CACJ,CAAE,EACD,MAASC,GAAW,CACnB,KAAK,YAAaA,EAAOH,CAAK,CAChC,CAAE,EAEJ,YAAK,cAAe,UAAW,KAAM,CAAEA,EAAMC,CAAa,CAAE,EAErDA,CACT,EAEAN,EAAM,WAAa,SAAUS,EAAMJ,EAAME,EAAW,CAElD,OAAM,KAAK,QAAQ,SACjB,KAAK,UAAY,IAEnB,KAAK,YACL,KAAK,YACL,KAAK,cAAe,OAAQ,KAAM,CAAEE,EAAMJ,EAAME,CAAS,CAAE,EACpD,KAAK,eAAgBE,EAAMJ,EAAME,CAAS,CACnD,EAEAP,EAAM,eAAiB,SAAUS,EAAMJ,EAAME,EAAW,CACtD,GAAI,CAAE,OAAAG,EAAQ,aAAAR,EAAc,iBAAAC,CAAiB,EAAI,KAAK,QAGtD,GAAK,EADYD,GAAgB,QAAUC,IACvB,CAACO,EAAS,MAAO,CAAE,KAAAD,EAAM,SAAAF,CAAS,EAEtD,IAAII,EAAQF,EAAK,iBAAkBC,CAAO,EACtCE,EAAe,CAAE,KAAAH,EAAM,SAAAF,EAAU,MAAAI,CAAM,EAE3C,GAAK,CAACA,GAAS,CAACA,EAAM,OACpB,YAAK,gBAAiBF,EAAMJ,CAAK,EAC1BO,EAGT,IAAIC,EAAWC,EAAkBH,CAAM,EACnCI,EAAc,KAChB,KAAK,YAAaJ,EAAOE,CAAS,EAClC,KAAK,UAAY,GACjB,KAAK,cAAe,SAAU,KAAM,CAAEJ,EAAMJ,EAAMM,EAAOJ,CAAS,CAAE,EAC7DK,GAIT,OAAK,KAAK,QAAQ,SACT,KAAK,oBAAqBC,EAAUE,CAAY,EAEhDA,EAAY,CAEvB,EAEAf,EAAM,YAAc,SAAUW,EAAOE,EAAW,CACzC,CAACF,GAAS,CAACA,EAAM,SAGtBE,EAAWA,GAAYC,EAAkBH,CAAM,EAC/CK,EAAgBH,CAAS,EACzB,KAAK,QAAQ,YAAaA,CAAS,EACrC,EAEA,SAASC,EAAkBH,EAAQ,CAEjC,IAAIE,EAAW,SAAS,uBAAuB,EAC/C,OAAKF,GAAQE,EAAS,OAAQ,GAAGF,CAAM,EAChCE,CACT,CAKA,SAASG,EAAgBH,EAAW,CAClC,IAAII,EAAUJ,EAAS,iBAAiB,QAAQ,EAChD,QAAUK,KAAUD,EAAU,CAC5B,IAAIE,EAAc,SAAS,cAAc,QAAQ,EAE7CC,EAAQF,EAAO,WACnB,QAAUG,KAAQD,EAChBD,EAAY,aAAcE,EAAK,KAAMA,EAAK,KAAM,EAGlDF,EAAY,UAAYD,EAAO,UAC/BA,EAAO,WAAW,aAAcC,EAAaD,CAAO,CACtD,CACF,CAIA,OAAAlB,EAAM,oBAAsB,SAAUa,EAAUE,EAAc,CAC5D,IAAIO,EAAevB,EAAe,cAAgBF,EAAO,aACzD,GAAK,CAACyB,EAAe,CACnB,QAAQ,MAAM,4DAA4D,EAC1E,KAAK,UAAY,GACjB,MACF,CAEA,OAAO,IAAI,QAAS,SAAUC,EAAU,CACtCD,EAAcT,EAAU,UAAW,CACjC,IAAIW,EAAeT,EAAY,EAC/BQ,EAASC,CAAa,CACxB,CAAE,CACJ,CAAE,CACJ,EAEAxB,EAAM,iBAAmB,SAAUO,EAAUF,EAAMM,EAAQ,CACzD,KAAK,QAAQ,SAAS,SAAUA,CAAM,CACxC,EAKAX,EAAM,cAAgB,SAAUS,EAAMJ,EAAO,CAC3C,GAAI,CAAE,cAAAoB,EAAe,KAAMC,CAAQ,EAAI,KAAK,QAC5C,GAAK,CAACD,EAAgB,OAGtB,GAAK,OAAOC,GAAW,YAEhB,CADU,KAAK,QAAQ,EACX,CACf,KAAK,gBAAiBjB,EAAMJ,CAAK,EACjC,MACF,CAGF,IAAIsB,EASJ,GARK,OAAOF,GAAiB,SAC3BE,EAAWF,EACD,KAAK,iBAEfE,EAAWD,GAIR,CAACC,GAAY,CAAClB,EAAK,cAAgB,OAGzBA,EAAK,cAAekB,CAAS,GAC3B,KAAK,gBAAiBlB,EAAMJ,CAAK,CACpD,EAEAL,EAAM,gBAAkB,SAAUS,EAAMJ,EAAO,CAC7C,KAAK,QAAU,GACf,KAAK,cAAe,OAAQ,KAAM,CAAEI,EAAMJ,CAAK,CAAE,CACnD,EAIAL,EAAM,YAAc,SAAUQ,EAAOH,EAAME,EAAW,CACpD,YAAK,UAAY,GACjB,KAAK,QAAU,GACf,KAAK,cAAe,QAAS,KAAM,CAAEC,EAAOH,EAAME,CAAS,CAAE,EACtDC,CACT,EAIAT,EAAe,OAAO,QAAU,UAAW,CACzC,GAAK,CAAC,KAAK,QAAQ,QAAU,OAE7B,IAAIW,EAAS,KAAK,QAAQ,OAC1B,GAAK,CAACA,EAAS,CACb,QAAQ,MAAM,+CAA+CA,CAAM,EAAE,EACrE,MACF,CACA,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,aAAe,GACpB,KAAK,GAAI,SAAU,KAAK,OAAQ,EAChC,KAAK,KAAM,QAAS,KAAK,WAAY,EACrC,KAAK,KAAM,OAAQ,KAAK,WAAY,EACpC,KAAK,QAAQ,CACf,EAEAV,EAAM,QAAU,UAAW,CACzB,IAAI4B,EAAW,KAAK,mBAAmB,EACvC,KAAK,aAAeA,GAAY,EAC3B,KAAK,cACR,KAAK,IAAI,SAAS,EAClB,KAAK,aAAa,GAElB,KAAK,YAAY,CAErB,EAEA5B,EAAM,mBAAqB,UAAW,CAEpC,OAAK,KAAK,QAAQ,cACT,KAAK,SAAS,aAAe,KAAK,SAAS,aAG7C,KAAK,aAAe,KAAK,QAAQ,YAC1C,EAEAA,EAAM,YAAc,UAAW,CAC7B,KAAK,IAAI,aAAa,EACtB,KAAK,IAAK,SAAU,KAAK,OAAQ,CACnC,EAIOD,CAEP,CAAE,ICnRF,IAAA8B,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,IACJ,EAGAC,EACID,EACAA,EAAO,eACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAgBC,EAAQ,CAE7D,IAAIC,EAAQF,EAAe,UAG3B,cAAO,OAAQA,EAAe,SAAU,CACtC,gBAAiB,GAEnB,CAAE,EAEFA,EAAe,OAAO,YAAc,UAAW,CAE7C,KAAK,kBAAoB,KAAK,aAAa,KAAM,IAAK,EACtD,KAAK,cAAgB,KAAK,SAAS,KAAM,IAAK,EAE9C,IAAIG,EAAkB,KAAK,QAAQ,iBACpBA,GAAmBA,IAAoB,IACtC,KAAK,kBAAkB,CACzC,EAEAH,EAAe,QAAQ,YAAc,UAAW,CAC9C,KAAK,mBAAmB,CAC1B,EAEAE,EAAM,kBAAoB,UAAW,CAC9B,KAAK,mBAEV,KAAK,iBAAmB,GACxB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAEpB,KAAK,GAAI,OAAQ,KAAK,kBAAmB,EACzC,KAAK,sBAAuB,EAAK,EACnC,EAEAA,EAAM,mBAAqB,UAAW,CAC9B,KAAK,mBAEX,KAAK,sBAAuB,EAAM,EAClC,OAAO,KAAK,iBACd,EAEAA,EAAM,sBAAwB,SAAUE,EAAS,CAC/C,IAAIC,EAAYD,EAAS,mBAAqB,sBAC9C,KAAK,SAAUC,CAAU,EAAG,SAAU,KAAK,iBAAkB,EAC7DP,EAAQO,CAAU,EAAG,SAAU,KAAK,aAAc,CACpD,EAEAH,EAAM,aAAeF,EAAe,SAAU,UAAW,CACxC,KAAK,kBAAkB,GACrB,KAAK,QAAQ,iBAC5B,KAAK,cAAc,iBAAiB,CAExC,CAAE,EAEFE,EAAM,kBAAoB,UAAW,CACnC,IAAII,EAAQC,EACZ,OAAK,KAAK,QAAQ,eAChBD,EAAS,KAAK,SAAS,aACvBC,EAAU,KAAK,SAAS,UAAY,KAAK,SAAS,eAElDD,EAAS,KAAK,IAAM,KAAK,QAAQ,aACjCC,EAAUT,EAAO,QAAU,KAAK,cAE3BQ,EAASC,CAClB,EAEAL,EAAM,SAAW,UAAW,CAC1B,KAAK,mBAAmB,CAC1B,EAEAD,EAAM,eAAgBD,EAAgB,WAAY,GAAI,EAI/CA,CAEP,CAAE,IChGF,IAAAQ,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,IACJ,EAGAC,EACID,EACAA,EAAO,eACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAgBC,EAAQ,CAE7D,IAAIC,EAAQF,EAAe,UAE3B,OAAO,OAAQA,EAAe,SAAU,CACtC,QAAS,SAEX,CAAE,EAEF,IAAIG,EAAO,SAAS,cAAc,GAAG,EAIrC,OAAAH,EAAe,OAAO,QAAU,UAAW,CACzC,GAAK,CAAC,KAAK,QAAQ,QAAU,OAQ7B,GALAG,EAAK,KAAO,KAAK,gBAAgB,EAK5B,GAFYA,EAAK,QAAUA,EAAK,SAAW,KAAOA,EAAK,OAC3B,SAAS,QACrB,CACnB,QAAQ,MAAO,8DACVA,EAAK,MAAM,OAAO,SAAS,MAAM,+BAAgC,EACtE,MACF,CAGK,KAAK,QAAQ,OAChB,KAAK,oBAAoB,EAEzB,KAAK,sBAAsB,CAE/B,EAEAD,EAAM,oBAAsB,UAAW,CACrC,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAEpB,KAAK,YAAc,CAEjB,CACE,IAAK,EACL,KAAM,SAAS,KACf,MAAO,SAAS,KAClB,CACF,EACA,KAAK,WAAa,KAAK,YAAY,CAAC,EAEpC,KAAK,qBAAuB,KAAK,gBAAgB,KAAM,IAAK,EAC5D,KAAK,cAAgB,KAAK,SAAS,KAAM,IAAK,EAC9C,KAAK,SAAS,iBAAkB,SAAU,KAAK,oBAAqB,EACpE,KAAK,GAAI,SAAU,KAAK,eAAgB,EACxC,KAAK,wBAAyB,EAAK,CACrC,EAEAA,EAAM,wBAA0B,SAAUE,EAAS,CACjD,IAAIC,EAAYD,EAAS,mBAAqB,sBAC9C,KAAK,SAAUC,CAAU,EAAG,SAAU,KAAK,oBAAqB,EAChEP,EAAQO,CAAU,EAAG,SAAU,KAAK,aAAc,CACpD,EAEAH,EAAM,sBAAwB,UAAW,CACvC,KAAK,GAAI,OAAQ,KAAK,iBAAkB,CAC1C,EAEAF,EAAe,QAAQ,QACvBE,EAAM,eAAiB,UAAW,CACV,KAAK,QAAQ,SAAW,KAAK,QAAQ,QAEzD,KAAK,wBAAyB,EAAM,CAExC,EAIAA,EAAM,gBAAkB,SAAUI,EAAUC,EAAMC,EAAQ,CAExD,GAAK,CAACA,GAAS,CAACA,EAAM,OAAS,OAE/B,IAAIC,EAAYD,EAAM,CAAC,EACnBE,EAAc,KAAK,kBAAmBD,CAAU,EAEpDN,EAAK,KAAOI,EAEZ,KAAK,YAAY,KAAK,CACpB,IAAKG,EACL,KAAMP,EAAK,KACX,MAAOG,EAAS,KAClB,CAAC,CACH,EAEAJ,EAAM,kBAAoB,SAAUS,EAAO,CACzC,OAAK,KAAK,QAAQ,cACTA,EAAK,UAAY,KAAK,IAElBA,EAAK,sBAAsB,EAC1B,IAAMb,EAAO,OAE7B,EAEAI,EAAM,gBAAkB,UAAW,CAEjC,IAAIU,EAAa,KAAK,qBAAqB,EAEtCA,GAAc,KAAK,aACtB,KAAK,WAAaA,EAClB,KAAK,WAAYA,EAAW,MAAOA,EAAW,IAAK,EAEvD,EAEAX,EAAM,eAAgBD,EAAgB,kBAAmB,GAAI,EAE7DE,EAAM,qBAAuB,UAAW,CACtC,IAAIW,EACC,KAAK,QAAQ,cAChBA,EAAc,KAAK,SAAS,UAAY,KAAK,SAAS,aAAe,EAErEA,EAAcf,EAAO,QAAU,KAAK,aAAe,EAGrD,IAAIc,EACJ,QAAUE,KAAQ,KAAK,YAAc,CACnC,GAAKA,EAAK,KAAOD,EAAc,MAE/BD,EAAaE,CACf,CACA,OAAOF,CACT,EAEAV,EAAM,WAAa,SAAUa,EAAOR,EAAO,CACzC,IAAIS,EAAa,KAAK,QAAQ,QACVA,GAAc,QAASA,EAAa,OAAQ,IAGhE,QAASA,EAAa,OAAQ,EAAG,KAAMD,EAAOR,CAAK,EAC9C,KAAK,QAAQ,eAAe,SAAS,MAAQQ,GAClD,KAAK,cAAe,UAAW,KAAM,CAAEA,EAAOR,CAAK,CAAE,EACvD,EAIAL,EAAM,SAAW,UAAW,CAC1B,GAAK,KAAK,WAAW,MAAQ,EAAI,OAGjC,IAAIe,EAAUnB,EAAO,QAAU,KAAK,WAAW,IAAM,KAAK,IAE1D,KAAK,eAAe,EACpB,SAAU,EAAGmB,CAAQ,CACvB,EAKAf,EAAM,kBAAoB,SAAUI,EAAUC,EAAO,CACnD,KAAK,WAAYD,EAAS,MAAOC,CAAK,CACxC,EAIOP,CAEP,CAAE,ICvLF,IAAAkB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,IACJ,EAGAC,EACID,EACAA,EAAO,eACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAgBC,EAAQ,CAI7D,MAAMC,CAAqB,CACzB,YAAaC,EAASC,EAAY,CAChC,KAAK,QAAUD,EACf,KAAK,UAAYC,EAEjB,KAAK,aAAe,KAAK,QAAQ,KAAM,IAAK,EAC5C,KAAK,QAAQ,iBAAkB,QAAS,KAAK,YAAa,EAC1DA,EAAU,GAAI,UAAW,KAAK,QAAQ,KAAM,IAAK,CAAE,EACnDA,EAAU,GAAI,OAAQ,KAAK,OAAO,KAAM,IAAK,CAAE,EAC/CA,EAAU,GAAI,QAAS,KAAK,KAAK,KAAM,IAAK,CAAE,EAC9CA,EAAU,GAAI,OAAQ,KAAK,KAAK,KAAM,IAAK,CAAE,CAC/C,CAEA,QAASC,EAAQ,CACfA,EAAM,eAAe,EACrB,KAAK,UAAU,aAAa,CAC9B,CAEA,QAAS,CACP,KAAK,QAAQ,gBAAgB,UAAU,CACzC,CAEA,SAAU,CACR,KAAK,QAAQ,SAAW,UAC1B,CAEA,MAAO,CACL,KAAK,QAAQ,MAAM,QAAU,MAC/B,CAEA,SAAU,CACR,KAAK,QAAQ,oBAAqB,QAAS,KAAK,YAAa,CAC/D,CAEF,CAMA,OAAAL,EAAe,OAAO,OAAS,UAAW,CACxC,IAAIM,EAAaL,EAAM,gBAAiB,KAAK,QAAQ,MAAO,EACvDK,IACH,KAAK,OAAS,IAAIJ,EAAsBI,EAAY,IAAK,EAE7D,EAEAN,EAAe,QAAQ,OAAS,UAAW,CACpC,KAAK,QAAS,KAAK,OAAO,QAAQ,CACzC,EAIAA,EAAe,OAASE,EAEjBF,CAEP,CAAE,IChFF,IAAAO,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EACE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,QAEvCA,GAAO,QAAUE,EACbD,EACA,KACA,IACJ,EAGAC,EACID,EACAA,EAAO,eACPA,EAAO,YACX,CAGJ,GAAG,OAAQ,SAAkBA,EAAQE,EAAgBC,EAAQ,CAE7D,IAAIC,EAAQF,EAAe,UAI3BA,EAAe,OAAO,OAAS,UAAW,CACxC,IAAIG,EAAaF,EAAM,gBAAiB,KAAK,QAAQ,MAAO,EACtDE,IAGN,KAAK,cAAgBA,EACrB,KAAK,oBAAsB,CACzB,QAASA,EAAW,cAAc,0BAA0B,EAC5D,MAAOA,EAAW,cAAc,wBAAwB,EACxD,KAAMA,EAAW,cAAc,uBAAuB,CACxD,EAEA,KAAK,GAAI,UAAW,KAAK,iBAAkB,EAC3C,KAAK,GAAI,QAAS,KAAK,eAAgB,EACvC,KAAK,GAAI,OAAQ,KAAK,cAAe,EACrC,KAAK,eAAe,IAAI,EAC1B,EAEAD,EAAM,eAAiB,SAAUE,EAAa,CAC5C,IAAIC,EAAY,KAAK,QAAQ,OAAS,SAAW,OACjD,KAAMD,CAAW,EAAGC,EAAW,KAAK,aAAc,CACpD,EAEAH,EAAM,kBAAoB,UAAW,CACnC,KAAK,WAAW,SAAS,CAC3B,EAEAA,EAAM,gBAAkB,UAAW,CACjC,KAAK,WAAW,OAAO,CACzB,EAEAA,EAAM,eAAiB,UAAW,CAChC,KAAK,WAAW,MAAM,EAEtB,KAAK,eAAe,KAAK,CAC3B,EAEAA,EAAM,WAAa,SAAUI,EAAY,CACvCC,EAAM,KAAK,aAAc,EACzB,KAAK,wBAAwB,EAC7B,IAAIC,EAAY,KAAK,oBAAqBF,CAAU,EACpDC,EAAMC,CAAU,CAClB,EAEAN,EAAM,cAAgB,UAAW,CAC/BO,EAAM,KAAK,aAAc,EACzB,KAAK,wBAAwB,CAC/B,EAEAP,EAAM,wBAA0B,UAAW,CACzC,QAAUQ,KAAQ,KAAK,oBAAsB,CAC3C,IAAIF,EAAY,KAAK,oBAAqBE,CAAK,EAC/CD,EAAMD,CAAU,CAClB,CACF,EAIA,SAASC,EAAME,EAAO,CACpBC,EAAYD,EAAM,MAAO,CAC3B,CAEA,SAASJ,EAAMI,EAAO,CACpBC,EAAYD,EAAM,OAAQ,CAC5B,CAEA,SAASC,EAAYD,EAAME,EAAQ,CAC5BF,IACHA,EAAK,MAAM,QAAUE,EAEzB,CAIA,OAAOb,CAEP,CAAE,ICrGF,IAAAc,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAWE,SAAUC,EAAQC,EAAU,CAEvB,OAAOF,IAAU,UAAYA,GAAO,UAEvCA,GAAO,QAAUE,EACb,KACA,KACA,KACA,KACA,KACA,IACJ,EAGJ,GAAK,OAAQ,SAAkBC,EAAiB,CAC9C,OAAOA,CACT,CAAE,IC3BF,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAEC,EAAE,CAAC,GAAa,OAAOH,IAAjB,UAAoC,OAAOC,IAAjB,SAAwBA,GAAO,QAAQE,EAAE,UAAsB,OAAO,QAAnB,YAA2B,OAAO,IAAI,OAAO,CAAC,EAAEA,CAAC,MAAM,CAAC,IAAIC,EAAED,EAAE,EAAE,QAAQE,KAAKD,GAAa,OAAOJ,IAAjB,SAAyBA,GAAQE,GAAGG,CAAC,EAAED,EAAEC,CAAC,CAAC,CAAC,GAAE,OAAQ,UAAU,CAAC,OAAO,SAASH,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAE,SAASC,EAAEC,EAAE,CAAC,GAAGF,EAAEE,CAAC,EAAE,OAAOF,EAAEE,CAAC,EAAE,QAAQ,IAAIC,EAAEH,EAAEE,CAAC,EAAE,CAACA,EAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAOH,EAAEG,CAAC,EAAE,KAAKC,EAAE,QAAQA,EAAEA,EAAE,QAAQF,CAAC,EAAEE,EAAE,EAAE,GAAGA,EAAE,OAAO,CAAC,OAAOF,EAAE,EAAEF,EAAEE,EAAE,EAAED,EAAEC,EAAE,EAAE,SAASF,EAAEC,EAAEE,EAAE,CAACD,EAAE,EAAEF,EAAEC,CAAC,GAAG,OAAO,eAAeD,EAAEC,EAAE,CAAC,WAAW,GAAG,IAAIE,CAAC,CAAC,CAAC,EAAED,EAAE,EAAE,SAASF,EAAE,CAAc,OAAO,OAApB,KAA4B,OAAO,aAAa,OAAO,eAAeA,EAAE,OAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,EAAE,OAAO,eAAeA,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAEE,EAAE,EAAE,SAASF,EAAEC,EAAE,CAA+B,GAA3B,EAAEA,IAAID,EAAEE,EAAEF,CAAC,GAAG,EAAEC,GAAc,EAAEA,GAAa,OAAOD,GAAjB,UAAoBA,GAAGA,EAAE,WAAW,OAAOA,EAAE,IAAIG,EAAE,OAAO,OAAO,IAAI,EAAE,GAAGD,EAAE,EAAEC,CAAC,EAAE,OAAO,eAAeA,EAAE,UAAU,CAAC,WAAW,GAAG,MAAMH,CAAC,CAAC,EAAE,EAAEC,GAAa,OAAOD,GAAjB,SAAmB,QAAQI,KAAKJ,EAAEE,EAAE,EAAEC,EAAEC,EAAE,SAASH,EAAE,CAAC,OAAOD,EAAEC,CAAC,CAAC,EAAE,KAAK,KAAKG,CAAC,CAAC,EAAE,OAAOD,CAAC,EAAED,EAAE,EAAE,SAASF,EAAE,CAAC,IAAIC,EAAED,GAAGA,EAAE,WAAW,UAAU,CAAC,OAAOA,EAAE,OAAO,EAAE,UAAU,CAAC,OAAOA,CAAC,EAAE,OAAOE,EAAE,EAAED,EAAE,IAAIA,CAAC,EAAEA,CAAC,EAAEC,EAAE,EAAE,SAASF,EAAEC,EAAE,CAAC,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAEC,CAAC,CAAC,EAAEC,EAAE,EAAE,GAAGA,EAAEA,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAASF,EAAEC,EAAE,CAAC,IAAIC,EAAEF,EAAE,QAAqB,OAAO,OAApB,KAA4B,OAAO,MAAM,KAAK,OAAoB,OAAO,KAApB,KAA0B,KAAK,MAAM,KAAK,KAAK,SAAS,aAAa,EAAE,EAAY,OAAO,KAAjB,WAAuB,IAAIE,EAAE,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAE,KAAK,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,CAAC,EAAE,OAAOI,EAAc,OAAOD,GAAnB,YAAsBL,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOG,EAAEH,CAAC,IAAIG,EAAEH,CAAC,EAAEM,GAAGD,EAAEL,CAAC,IAAIM,EAAED,EAAED,GAAG,UAAUJ,CAAC,EAAE,GAAG,MAAMG,CAAC,EAAE,SAASH,EAAEC,EAAE,CAAC,IAAIC,EAAEF,EAAE,QAAQ,CAAC,QAAQ,QAAQ,EAAY,OAAO,KAAjB,WAAuB,IAAIE,EAAE,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,GAAG,CAACG,EAAEH,CAAC,EAAE,MAAM,UAAUA,EAAE,oBAAoB,EAAE,OAAOA,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAE,CAAC,OAAgB,OAAO,GAAjB,SAA0B,IAAP,KAAqB,OAAO,GAAnB,UAAoB,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAACF,EAAE,QAAQ,CAACE,EAAE,EAAE,EAAG,UAAU,CAAC,OAAU,OAAO,eAAe,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,MAAO,EAAC,CAAC,CAAC,EAAE,GAA5D,CAA6D,CAAE,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAE,CAAC,GAAGC,EAAEH,CAAC,EAAWC,IAAT,OAAW,OAAOD,EAAE,OAAOE,EAAE,CAAC,IAAK,GAAE,OAAO,SAASA,EAAE,CAAC,OAAOF,EAAE,KAAKC,EAAEC,CAAC,CAAC,EAAE,IAAK,GAAE,OAAO,SAASA,EAAEC,EAAE,CAAC,OAAOH,EAAE,KAAKC,EAAEC,EAAEC,CAAC,CAAC,EAAE,IAAK,GAAE,OAAO,SAASD,EAAEC,EAAEC,EAAE,CAAC,OAAOJ,EAAE,KAAKC,EAAEC,EAAEC,EAAEC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAOJ,EAAE,MAAMC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAE,CAAC,GAAe,OAAO,GAAnB,WAAqB,MAAM,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAE,SAASF,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOE,EAAE,KAAKF,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAEC,EAAE,CAAC,GAAG,EAAE,aAAaA,GAAG,MAAM,IAAI,UAAU,mCAAmC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAE,CAAC,SAASC,EAAEF,EAAEC,EAAE,CAAC,QAAQC,EAAE,EAAEA,EAAED,EAAE,OAAOC,IAAI,CAAC,IAAIC,EAAEF,EAAEC,CAAC,EAAEC,EAAE,WAAWA,EAAE,YAAY,GAAGA,EAAE,aAAa,GAAG,UAAUA,IAAIA,EAAE,SAAS,IAAI,OAAO,eAAeH,EAAEG,EAAE,IAAIA,CAAC,CAAC,CAAC,CAACH,EAAE,QAAQ,SAASA,EAAEC,EAAEE,EAAE,CAAC,OAAOF,GAAGC,EAAEF,EAAE,UAAUC,CAAC,EAAEE,GAAGD,EAAEF,EAAEG,CAAC,EAAEH,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,aAAa,EAAEG,EAAeF,EAAE,UAAU,CAAC,OAAO,SAAS,EAAE,CAAC,GAA7C,YAA+CH,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIC,EAAEC,EAAEI,EAAE,OAAgBN,IAAT,OAAW,YAAmBA,IAAP,KAAS,OAAiB,OAAOE,EAAE,SAASF,EAAEC,EAAE,CAAC,GAAG,CAAC,OAAOD,EAAEC,CAAC,CAAC,MAAS,CAAC,CAAC,EAAEA,EAAE,OAAOD,CAAC,EAAEI,CAAC,IAA1E,SAA6EF,EAAEG,EAAEF,EAAEF,CAAC,GAAaK,EAAEH,EAAEF,CAAC,IAAhB,UAAgC,OAAOA,EAAE,QAArB,WAA4B,YAAYK,CAAC,CAAC,EAAE,SAASN,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAEG,EAAED,EAAE,oBAAoB,IAAIA,EAAE,oBAAoB,EAAE,CAAC,IAAIJ,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,OAAOI,EAAEL,CAAC,IAAIK,EAAEL,CAAC,EAAWC,IAAT,OAAWA,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQE,EAAE,QAAQ,KAAKD,EAAE,EAAE,EAAE,OAAO,SAAS,UAAU,yCAAsC,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAE,CAAC,IAAIC,EAAE,EAAEC,EAAE,KAAK,OAAO,EAAEH,EAAE,QAAQ,SAASA,EAAE,CAAC,MAAM,UAAU,OAAgBA,IAAT,OAAW,GAAGA,EAAE,MAAM,EAAEE,EAAEC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,SAASH,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAEG,EAAEH,EAAE,EAAE,EAAEI,EAAEJ,EAAE,EAAE,EAAEK,EAAEL,EAAE,CAAC,EAAEM,EAAE,SAASR,EAAEC,EAAEC,EAAE,CAAC,IAAIO,EAAEC,EAAEC,EAAEC,EAAEC,EAAEb,EAAEQ,EAAE,EAAEM,EAAEd,EAAEQ,EAAE,EAAEO,EAAEf,EAAEQ,EAAE,EAAEQ,EAAEhB,EAAEQ,EAAE,EAAES,EAAEjB,EAAEQ,EAAE,EAAEU,EAAEJ,EAAEX,EAAEY,EAAEZ,EAAEF,CAAC,IAAIE,EAAEF,CAAC,EAAE,CAAC,IAAIE,EAAEF,CAAC,GAAG,CAAC,GAAG,UAAUkB,EAAEL,EAAEV,EAAEA,EAAEH,CAAC,IAAIG,EAAEH,CAAC,EAAE,CAAC,GAAGmB,EAAED,EAAE,YAAYA,EAAE,UAAU,CAAC,GAAG,IAAIV,KAAKK,IAAIZ,EAAED,GAAGC,EAAES,IAAID,EAAE,CAACG,GAAGK,GAAYA,EAAET,CAAC,IAAZ,QAAeS,EAAEhB,GAAGO,CAAC,EAAEG,EAAEK,GAAGP,EAAEH,EAAEI,EAAER,CAAC,EAAEa,GAAe,OAAOL,GAAnB,WAAqBJ,EAAE,SAAS,KAAKI,CAAC,EAAEA,EAAEO,GAAGZ,EAAEY,EAAET,EAAEE,EAAEX,EAAEQ,EAAE,CAAC,EAAEW,EAAEV,CAAC,GAAGE,GAAGN,EAAEc,EAAEV,EAAEG,CAAC,EAAEI,GAAGI,EAAEX,CAAC,GAAGE,IAAIS,EAAEX,CAAC,EAAEE,EAAE,EAAER,EAAE,KAAKC,EAAEI,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,GAAGA,EAAE,EAAE,GAAGA,EAAE,EAAE,GAAGA,EAAE,EAAE,IAAIR,EAAE,QAAQQ,CAAC,EAAE,SAASR,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEF,EAAE,QAAQE,EAAE,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,OAAOC,EAAE,EAAEH,EAAEC,EAAEG,EAAE,EAAEF,CAAC,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,OAAOF,EAAEC,CAAC,EAAEC,EAAEF,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEI,EAAE,OAAO,eAAeL,EAAE,EAAEC,EAAE,CAAC,EAAE,OAAO,eAAe,SAASF,EAAEC,EAAEC,EAAE,CAAC,GAAGC,EAAEH,CAAC,EAAEC,EAAEI,EAAEJ,EAAE,EAAE,EAAEE,EAAED,CAAC,EAAEE,EAAE,GAAG,CAAC,OAAOE,EAAEN,EAAEC,EAAEC,CAAC,CAAC,MAAS,CAAC,CAAC,GAAG,QAAQA,GAAG,QAAQA,EAAE,MAAM,UAAU,0BAA0B,EAAE,MAAM,UAAUA,IAAIF,EAAEC,CAAC,EAAEC,EAAE,OAAOF,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEI,EAAEJ,EAAE,EAAE,EAAE,KAAK,EAAEK,EAAEL,EAAE,EAAE,EAAEM,GAAG,GAAGD,GAAG,MAAM,UAAU,EAAEL,EAAE,CAAC,EAAE,cAAc,SAASF,EAAE,CAAC,OAAOO,EAAE,KAAKP,CAAC,CAAC,GAAGA,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAEK,EAAE,CAAC,IAAIE,EAAc,OAAOP,GAAnB,WAAqBO,IAAIJ,EAAEH,EAAE,MAAM,GAAGE,EAAEF,EAAE,OAAOD,CAAC,GAAGD,EAAEC,CAAC,IAAIC,IAAIO,IAAIJ,EAAEH,EAAEI,CAAC,GAAGF,EAAEF,EAAEI,EAAEN,EAAEC,CAAC,EAAE,GAAGD,EAAEC,CAAC,EAAEO,EAAE,KAAK,OAAOP,CAAC,CAAC,CAAC,GAAGD,IAAIG,EAAEH,EAAEC,CAAC,EAAEC,EAAEK,EAAEP,EAAEC,CAAC,EAAED,EAAEC,CAAC,EAAEC,EAAEE,EAAEJ,EAAEC,EAAEC,CAAC,GAAG,OAAOF,EAAEC,CAAC,EAAEG,EAAEJ,EAAEC,EAAEC,CAAC,GAAG,GAAG,SAAS,UAAU,WAAY,UAAU,CAAC,OAAkB,OAAO,MAAnB,YAAyB,KAAKI,CAAC,GAAGC,EAAE,KAAK,IAAI,CAAC,CAAE,CAAC,EAAE,SAASP,EAAEC,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAE,eAAeF,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,OAAOC,EAAE,KAAKF,EAAEC,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAE,KAAK,IAAIJ,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOA,EAAE,EAAEI,EAAED,EAAEH,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEL,EAAE,EAAE,EAAEM,EAAEN,EAAE,CAAC,EAAEO,EAAEP,EAAE,CAAC,EAAEQ,EAAER,EAAE,EAAE,EAAES,EAAET,EAAE,EAAE,EAAEU,EAAEV,EAAE,CAAC,EAAEW,EAAEX,EAAE,CAAC,EAAEY,EAAEZ,EAAE,EAAE,EAAEa,EAAEb,EAAE,EAAE,EAAEc,EAAEd,EAAE,EAAE,EAAEe,EAAEf,EAAE,EAAE,EAAE,IAAIgB,EAAEhB,EAAE,EAAE,EAAE,EAAEiB,EAAEjB,EAAE,EAAE,EAAEkB,EAAElB,EAAE,EAAE,EAAEmB,EAAEnB,EAAE,EAAE,EAAEoB,EAAEpB,EAAE,EAAE,EAAEqB,EAAEf,EAAE,UAAUgB,EAAEhB,EAAE,QAAQiB,EAAED,GAAGA,EAAE,SAAS,EAAEC,GAAGA,EAAE,IAAI,GAAGC,EAAElB,EAAE,QAAQmB,EAAajB,EAAEc,CAAC,GAAd,UAAgBI,GAAE,UAAU,CAAC,EAAEC,GAAEzB,EAAEe,EAAE,EAAEW,GAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI9B,GAAE0B,EAAE,QAAQ,CAAC,EAAEzB,IAAGD,GAAE,YAAY,CAAC,GAAGE,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,SAASF,EAAE,CAACA,EAAE4B,GAAEA,EAAC,CAAC,EAAE,OAAOD,GAAe,OAAO,uBAAnB,aAA2C3B,GAAE,KAAK4B,EAAC,YAAY3B,IAAO,EAAE,QAAQ,KAAK,IAAnB,GAA2BoB,EAAE,QAAQ,WAAW,IAA1B,EAA2B,MAAS,CAAC,CAAC,EAAE,EAAEU,GAAE,SAAS/B,GAAE,CAAC,IAAIC,GAAE,MAAM,EAAE,CAACW,EAAEZ,EAAC,GAAe,OAAOC,GAAED,GAAE,OAAvB,aAA+BC,EAAC,EAAE+B,GAAE,SAAShC,GAAEC,GAAE,CAAC,GAAG,CAACD,GAAE,GAAG,CAACA,GAAE,GAAG,GAAG,IAAIE,EAAEF,GAAE,GAAGkB,EAAG,UAAU,CAAC,QAAQf,EAAEH,GAAE,GAAGI,EAAKJ,GAAE,IAAL,EAAQK,EAAE,EAAEC,EAAE,SAASL,GAAE,CAAC,IAAIC,GAAEG,GAAEC,GAAEC,GAAEH,EAAEH,GAAE,GAAGA,GAAE,KAAKO,GAAEP,GAAE,QAAQQ,GAAER,GAAE,OAAOS,GAAET,GAAE,OAAO,GAAG,CAACM,IAAGH,IAAOJ,GAAE,IAAL,GAASiC,GAAEjC,EAAC,EAAEA,GAAE,GAAG,GAAQO,KAAL,GAAOL,GAAEC,GAAGO,IAAGA,GAAE,MAAM,EAAER,GAAEK,GAAEJ,CAAC,EAAEO,KAAIA,GAAE,KAAK,EAAEJ,GAAE,KAAKJ,KAAID,GAAE,QAAQQ,GAAEc,EAAE,qBAAqB,CAAC,GAAGlB,GAAE0B,GAAE7B,EAAC,GAAGG,GAAE,KAAKH,GAAEM,GAAEC,EAAC,EAAED,GAAEN,EAAC,GAAGO,GAAEN,CAAC,CAAC,OAAOH,GAAE,CAACU,IAAG,CAACJ,IAAGI,GAAE,KAAK,EAAED,GAAET,EAAC,CAAC,CAAC,EAAEE,EAAE,OAAOG,GAAGC,EAAEJ,EAAEG,GAAG,CAAC,EAAEL,GAAE,GAAG,CAAC,EAAEA,GAAE,GAAG,GAAGC,IAAG,CAACD,GAAE,IAAIkC,GAAElC,EAAC,CAAC,CAAE,CAAC,CAAC,EAAEkC,GAAE,SAASlC,GAAE,CAACiB,EAAE,KAAKT,EAAG,UAAU,CAAC,IAAIP,GAAEC,EAAEC,EAAEC,EAAEJ,GAAE,GAAGK,EAAE8B,GAAEnC,EAAC,EAAE,GAAGK,IAAIJ,GAAEmB,EAAG,UAAU,CAACO,EAAEH,EAAE,KAAK,qBAAqBpB,EAAEJ,EAAC,GAAGE,EAAEM,EAAE,sBAAsBN,EAAE,CAAC,QAAQF,GAAE,OAAOI,CAAC,CAAC,GAAGD,EAAEK,EAAE,UAAUL,EAAE,OAAOA,EAAE,MAAM,8BAA8BC,CAAC,CAAC,CAAE,EAAEJ,GAAE,GAAG2B,GAAGQ,GAAEnC,EAAC,EAAE,EAAE,GAAGA,GAAE,GAAG,OAAOK,GAAGJ,GAAE,EAAE,MAAMA,GAAE,CAAC,CAAE,CAAC,EAAEkC,GAAE,SAASnC,GAAE,CAAC,OAAWA,GAAE,KAAN,IAAeA,GAAE,IAAIA,GAAE,IAAI,SAAjB,CAAuB,EAAEiC,GAAE,SAASjC,GAAE,CAACiB,EAAE,KAAKT,EAAG,UAAU,CAAC,IAAIP,GAAE0B,EAAEH,EAAE,KAAK,mBAAmBxB,EAAC,GAAGC,GAAEO,EAAE,qBAAqBP,GAAE,CAAC,QAAQD,GAAE,OAAOA,GAAE,EAAE,CAAC,CAAC,CAAE,CAAC,EAAEoC,GAAE,SAASpC,GAAE,CAAC,IAAIC,GAAE,KAAKA,GAAE,KAAKA,GAAE,GAAG,IAAIA,GAAEA,GAAE,IAAIA,IAAG,GAAGD,GAAEC,GAAE,GAAG,EAAEA,GAAE,KAAKA,GAAE,GAAGA,GAAE,GAAG,MAAM,GAAG+B,GAAE/B,GAAE,EAAE,EAAE,EAAEoC,GAAE,SAASrC,GAAE,CAAC,IAAIC,GAAEC,EAAE,KAAK,GAAG,CAACA,EAAE,GAAG,CAACA,EAAE,GAAG,GAAGA,EAAEA,EAAE,IAAIA,EAAE,GAAG,CAAC,GAAGA,IAAIF,GAAE,MAAMuB,EAAE,kCAAkC,GAAGtB,GAAE8B,GAAE/B,EAAC,GAAGkB,EAAG,UAAU,CAAC,IAAIf,EAAE,CAAC,GAAGD,EAAE,GAAG,EAAE,EAAE,GAAG,CAACD,GAAE,KAAKD,GAAES,EAAE4B,GAAElC,EAAE,CAAC,EAAEM,EAAE2B,GAAEjC,EAAE,CAAC,CAAC,CAAC,OAAOH,EAAE,CAACoC,GAAE,KAAKjC,EAAEH,CAAC,CAAC,CAAC,CAAE,GAAGE,EAAE,GAAGF,GAAEE,EAAE,GAAG,EAAE8B,GAAE9B,EAAE,EAAE,EAAE,OAAOF,EAAE,CAACoC,GAAE,KAAK,CAAC,GAAGlC,EAAE,GAAG,EAAE,EAAEF,CAAC,CAAC,CAAC,CAAC,EAAE8B,KAAIJ,EAAE,SAAS1B,GAAE,CAACc,EAAE,KAAKY,EAAE,UAAU,IAAI,EAAEb,EAAEb,EAAC,EAAEG,EAAE,KAAK,IAAI,EAAE,GAAG,CAACH,GAAES,EAAE4B,GAAE,KAAK,CAAC,EAAE5B,EAAE2B,GAAE,KAAK,CAAC,CAAC,CAAC,OAAOpC,GAAE,CAACoC,GAAE,KAAK,KAAKpC,EAAC,CAAC,CAAC,GAAGG,EAAE,SAASH,GAAE,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,KAAK,GAAG,EAAE,KAAK,GAAG,GAAG,KAAK,GAAG,OAAO,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,UAAUE,EAAE,EAAE,EAAEwB,EAAE,UAAU,CAAC,KAAK,SAAS1B,GAAEC,GAAE,CAAC,IAAIC,EAAE2B,GAAEb,EAAE,KAAKU,CAAC,CAAC,EAAE,OAAOxB,EAAE,GAAe,OAAOF,IAAnB,YAAsBA,GAAEE,EAAE,KAAiB,OAAOD,IAAnB,YAAsBA,GAAEC,EAAE,OAAOyB,EAAEH,EAAE,OAAO,OAAO,KAAK,GAAG,KAAKtB,CAAC,EAAE,KAAK,IAAI,KAAK,GAAG,KAAKA,CAAC,EAAE,KAAK,IAAI8B,GAAE,KAAK,EAAE,EAAE9B,EAAE,OAAO,EAAE,MAAM,SAASF,GAAE,CAAC,OAAO,KAAK,KAAK,OAAOA,EAAC,CAAC,CAAC,CAAC,EAAEK,EAAE,UAAU,CAAC,IAAIL,GAAE,IAAIG,EAAE,KAAK,QAAQH,GAAE,KAAK,QAAQS,EAAE4B,GAAErC,GAAE,CAAC,EAAE,KAAK,OAAOS,EAAE2B,GAAEpC,GAAE,CAAC,CAAC,EAAEmB,EAAE,EAAEU,GAAE,SAAS7B,GAAE,CAAC,OAAOA,KAAI0B,GAAG1B,KAAIM,EAAE,IAAID,EAAEL,EAAC,EAAEI,EAAEJ,EAAC,CAAC,GAAGW,EAAEA,EAAE,EAAEA,EAAE,EAAEA,EAAE,EAAE,CAACmB,GAAE,CAAC,QAAQJ,CAAC,CAAC,EAAExB,EAAE,EAAE,EAAEwB,EAAE,SAAS,EAAExB,EAAE,EAAE,EAAE,SAAS,EAAEI,EAAEJ,EAAE,CAAC,EAAE,QAAQS,EAAEA,EAAE,EAAEA,EAAE,EAAE,CAACmB,GAAE,UAAU,CAAC,OAAO,SAAS9B,GAAE,CAAC,IAAIC,GAAE4B,GAAE,IAAI,EAAE,SAAS5B,GAAE,QAAQD,EAAC,EAAEC,GAAE,OAAO,CAAC,CAAC,EAAEU,EAAEA,EAAE,EAAEA,EAAE,GAAGJ,GAAG,CAACuB,IAAG,UAAU,CAAC,QAAQ,SAAS9B,GAAE,CAAC,OAAOsB,EAAEf,GAAG,OAAOD,EAAEoB,EAAE,KAAK1B,EAAC,CAAC,CAAC,CAAC,EAAEW,EAAEA,EAAE,EAAEA,EAAE,EAAE,EAAEmB,IAAG5B,EAAE,EAAE,EAAG,SAASF,GAAE,CAAC0B,EAAE,IAAI1B,EAAC,EAAE,MAAM4B,EAAC,CAAC,CAAE,GAAG,UAAU,CAAC,IAAI,SAAS5B,GAAE,CAAC,IAAIC,GAAE,KAAKC,EAAE2B,GAAE5B,EAAC,EAAEE,EAAED,EAAE,QAAQE,EAAEF,EAAE,OAAOG,EAAEe,EAAG,UAAU,CAAC,IAAIlB,EAAE,CAAC,EAAEG,GAAE,EAAEC,GAAE,EAAES,EAAEf,GAAE,GAAI,SAASA,GAAE,CAAC,IAAIO,GAAEF,KAAIG,GAAE,GAAGN,EAAE,KAAK,MAAM,EAAEI,KAAIL,GAAE,QAAQD,EAAC,EAAE,KAAM,SAASA,GAAE,CAACQ,KAAIA,GAAE,GAAGN,EAAEK,EAAC,EAAEP,GAAE,EAAEM,IAAGH,EAAED,CAAC,EAAE,EAAGE,CAAC,CAAC,CAAE,EAAE,EAAEE,IAAGH,EAAED,CAAC,CAAC,CAAE,EAAE,OAAOG,EAAE,GAAGD,EAAEC,EAAE,CAAC,EAAEH,EAAE,OAAO,EAAE,KAAK,SAASF,GAAE,CAAC,IAAIC,GAAE,KAAKC,EAAE2B,GAAE5B,EAAC,EAAEE,EAAED,EAAE,OAAOE,EAAEgB,EAAG,UAAU,CAACL,EAAEf,GAAE,GAAI,SAASA,EAAE,CAACC,GAAE,QAAQD,CAAC,EAAE,KAAKE,EAAE,QAAQC,CAAC,CAAC,CAAE,CAAC,CAAE,EAAE,OAAOC,EAAE,GAAGD,EAAEC,EAAE,CAAC,EAAEF,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAE,CAACD,EAAE,QAAQ,EAAE,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,SAASG,EAAEF,EAAEC,CAAC,GAAGD,EAAEC,EAAE,aAAa,EAAEJ,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOK,EAAED,EAAE,cAAcJ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAE,KAAK,KAAKC,EAAE,KAAK,MAAMH,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAO,MAAMA,EAAE,CAACA,CAAC,EAAE,GAAGA,EAAE,EAAEG,EAAED,GAAGF,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAEC,EAAEC,EAAEJ,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,EAAEM,EAAEN,EAAE,EAAE,EAAEO,EAAEP,EAAE,EAAE,EAAEQ,EAAER,EAAE,CAAC,EAAES,EAAED,EAAE,QAAQE,EAAEF,EAAE,aAAaG,EAAEH,EAAE,eAAeI,EAAEJ,EAAE,eAAeK,EAAEL,EAAE,SAASM,EAAE,EAAEC,EAAE,CAAC,EAAEC,EAAE,UAAU,CAAC,IAAIlB,EAAE,CAAC,KAAK,GAAGiB,EAAE,eAAejB,CAAC,EAAE,CAAC,IAAIC,EAAEgB,EAAEjB,CAAC,EAAE,OAAOiB,EAAEjB,CAAC,EAAEC,EAAE,CAAC,CAAC,EAAEkB,EAAE,SAASnB,EAAE,CAACkB,EAAE,KAAKlB,EAAE,IAAI,CAAC,EAAEY,GAAGC,IAAID,EAAE,SAASZ,EAAE,CAAC,QAAQC,EAAE,CAAC,EAAEC,EAAE,EAAE,UAAU,OAAOA,GAAGD,EAAE,KAAK,UAAUC,GAAG,CAAC,EAAE,OAAOe,EAAE,EAAED,CAAC,EAAE,UAAU,CAACT,EAAc,OAAOP,GAAnB,WAAqBA,EAAE,SAASA,CAAC,EAAEC,CAAC,CAAC,EAAEE,EAAEa,CAAC,EAAEA,CAAC,EAAEH,EAAE,SAASb,EAAE,CAAC,OAAOiB,EAAEjB,CAAC,CAAC,EAAaE,EAAE,CAAC,EAAES,CAAC,GAAjB,UAAmBR,EAAE,SAASH,EAAE,CAACW,EAAE,SAASL,EAAEY,EAAElB,EAAE,CAAC,CAAC,CAAC,EAAEe,GAAGA,EAAE,IAAIZ,EAAE,SAASH,EAAE,CAACe,EAAE,IAAIT,EAAEY,EAAElB,EAAE,CAAC,CAAC,CAAC,EAAEc,GAAGT,GAAGD,EAAE,IAAIU,GAAG,MAAMV,EAAE,MAAM,UAAUe,EAAEhB,EAAEG,EAAED,EAAE,YAAYA,EAAE,CAAC,GAAGK,EAAE,kBAA8B,OAAO,aAAnB,YAAgC,CAACA,EAAE,eAAeP,EAAE,SAASH,EAAE,CAACU,EAAE,YAAYV,EAAE,GAAG,GAAG,CAAC,EAAEU,EAAE,iBAAiB,UAAUS,EAAE,EAAE,GAAGhB,EAAE,uBAAuBM,EAAE,QAAQ,EAAE,SAAST,EAAE,CAACQ,EAAE,YAAYC,EAAE,QAAQ,CAAC,EAAE,mBAAmB,UAAU,CAACD,EAAE,YAAY,IAAI,EAAEU,EAAE,KAAKlB,CAAC,CAAC,CAAC,EAAE,SAASA,EAAE,CAAC,WAAWM,EAAEY,EAAElB,EAAE,CAAC,EAAE,CAAC,CAAC,GAAGA,EAAE,QAAQ,CAAC,IAAIY,EAAE,MAAMC,CAAC,CAAC,EAAE,SAASb,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAED,EAAE,CAAC,EAAE,SAASE,EAAEJ,EAAE,CAAC,IAAIC,EAAEC,EAAE,KAAK,QAAQ,IAAIF,EAAG,SAASA,EAAEG,EAAE,CAAC,GAAYF,IAAT,QAAqBC,IAAT,OAAW,MAAM,UAAU,yBAAyB,EAAED,EAAED,EAAEE,EAAEC,CAAC,CAAE,EAAE,KAAK,QAAQA,EAAEF,CAAC,EAAE,KAAK,OAAOE,EAAED,CAAC,CAAC,CAACF,EAAE,QAAQ,EAAE,SAASA,EAAE,CAAC,OAAO,IAAII,EAAEJ,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAE,CAAC,EAAEA,EAAEF,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,IAAIE,EAAE,IAAI,cAAcF,EAAE,EAAE,EAAE,OAAO,UAAU,WAAY,UAAU,CAAC,MAAM,WAAWC,EAAE,IAAI,EAAE,GAAG,EAAG,EAAE,CAAC,EAAE,SAASH,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOG,EAAEC,EAAEJ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEF,EAAE,QAAQ,OAAO,GAAG,EAAE,qBAAqB,CAAC,EAAE,OAAO,SAASA,EAAE,CAAC,OAAgBG,EAAEH,CAAC,GAAb,SAAeA,EAAE,MAAM,EAAE,EAAE,OAAOA,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAE,CAAC,GAAS,GAAN,KAAQ,MAAM,UAAU,yBAAyB,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAE,KAAK,IAAIC,EAAE,KAAK,IAAIL,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,OAAOD,EAAEG,EAAEH,CAAC,GAAG,EAAEI,EAAEJ,EAAEC,EAAE,CAAC,EAAEI,EAAEL,EAAEC,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAO,OAAOG,EAAEH,CAAC,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAACF,EAAE,QAAQ,CAACE,EAAE,CAAC,GAAG,CAACA,EAAE,EAAE,EAAG,UAAU,CAAC,OAAU,OAAO,eAAeA,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,MAAO,EAAC,CAAC,CAAC,EAAE,GAAtE,CAAuE,CAAE,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,GAAG,CAACE,EAAEH,CAAC,EAAE,OAAOA,EAAE,IAAIE,EAAEE,EAAgI,GAA3HH,GAAe,OAAOC,EAAEF,EAAE,WAAvB,YAAkC,CAACG,EAAEC,EAAEF,EAAE,KAAKF,CAAC,CAAC,GAA0B,OAAOE,EAAEF,EAAE,UAAvB,YAAiC,CAACG,EAAEC,EAAEF,EAAE,KAAKF,CAAC,CAAC,GAAc,CAACC,GAAe,OAAOC,EAAEF,EAAE,WAAvB,YAAkC,CAACG,EAAEC,EAAEF,EAAE,KAAKF,CAAC,CAAC,EAAE,OAAOI,EAAE,MAAM,UAAU,yCAAyC,CAAC,CAAC,EAAE,SAASJ,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAEC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,MAAMA,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAACF,EAAE,QAAQE,EAAE,EAAE,EAAE,4BAA4B,SAAS,QAAQ,CAAC,EAAE,SAASF,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAEC,EAAEC,EAAEC,EAAE,CAAC,GAAG,EAAE,aAAaF,IAAaE,IAAT,QAAYA,KAAK,EAAE,MAAM,UAAUD,EAAE,yBAAyB,EAAE,OAAO,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEI,EAAEJ,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,EAAEM,EAAEN,EAAE,EAAE,EAAEO,EAAE,CAAC,EAAEC,EAAE,CAAC,GAAGT,EAAED,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAES,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEL,EAAE,UAAU,CAAC,OAAOZ,CAAC,EAAEQ,EAAER,CAAC,EAAEkB,EAAEf,EAAED,EAAES,EAAEV,EAAE,EAAE,CAAC,EAAEkB,EAAE,EAAE,GAAe,OAAOF,GAAnB,WAAqB,MAAM,UAAUjB,EAAE,mBAAmB,EAAE,GAAGK,EAAEY,CAAC,GAAG,IAAIJ,EAAEN,EAAEP,EAAE,MAAM,EAAEa,EAAEM,EAAEA,IAAI,IAAIH,EAAEf,EAAEiB,EAAEZ,EAAEQ,EAAEd,EAAEmB,CAAC,CAAC,EAAE,CAAC,EAAEL,EAAE,CAAC,CAAC,EAAEI,EAAElB,EAAEmB,CAAC,CAAC,KAAKV,GAAGO,IAAIN,EAAE,OAAOM,MAAO,KAAID,EAAEE,EAAE,KAAKjB,CAAC,EAAE,EAAEc,EAAEC,EAAE,KAAK,GAAG,MAAM,IAAIC,EAAEZ,EAAEW,EAAEG,EAAEJ,EAAE,MAAMb,CAAC,KAAKQ,GAAGO,IAAIN,EAAE,OAAOM,CAAC,GAAG,MAAMP,EAAER,EAAE,OAAOS,CAAC,EAAE,SAASV,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAEE,EAAE,CAAC,GAAG,CAAC,OAAOA,EAAEH,EAAEE,EAAED,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAED,EAAEC,CAAC,CAAC,OAAOD,EAAE,CAAC,IAAII,EAAEL,EAAE,OAAO,MAAeK,IAAT,QAAYF,EAAEE,EAAE,KAAKL,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,CAAC,EAAE,UAAU,EAAEG,EAAE,MAAM,UAAUL,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAgBA,IAAT,SAAaG,EAAE,QAAQH,GAAGK,EAAED,CAAC,IAAIJ,EAAE,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,CAAC,EAAE,UAAU,EAAEG,EAAEH,EAAE,EAAE,EAAEF,EAAE,QAAQE,EAAE,CAAC,EAAE,kBAAkB,SAASF,EAAE,CAAC,GAASA,GAAN,KAAQ,OAAOA,EAAEI,CAAC,GAAGJ,EAAE,YAAY,GAAGK,EAAEF,EAAEH,CAAC,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAEG,EAAEH,EAAE,CAAC,EAAE,SAAS,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAEI,EAAEH,EAAEH,CAAC,EAAE,YAAY,OAAgBM,IAAT,SAAmBJ,EAAEC,EAAEG,CAAC,EAAED,CAAC,IAAf,KAAkBJ,EAAEG,EAAEF,CAAC,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAWD,IAAT,OAAW,OAAOD,EAAE,OAAO,CAAC,IAAK,GAAE,OAAOE,EAAE,EAAE,EAAE,EAAE,KAAKD,CAAC,EAAE,IAAK,GAAE,OAAOC,EAAE,EAAEF,EAAE,CAAC,CAAC,EAAE,EAAE,KAAKC,EAAED,EAAE,CAAC,CAAC,EAAE,IAAK,GAAE,OAAOE,EAAE,EAAEF,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,EAAE,KAAKC,EAAED,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,IAAK,GAAE,OAAOE,EAAE,EAAEF,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,EAAE,KAAKC,EAAED,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,IAAK,GAAE,OAAOE,EAAE,EAAEF,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,EAAE,KAAKC,EAAED,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAMC,EAAED,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAE,SAASF,EAAE,QAAQG,GAAGA,EAAE,eAAe,EAAE,SAASH,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAE,IAAIG,EAAEF,EAAE,kBAAkBA,EAAE,uBAAuBG,EAAEH,EAAE,QAAQI,EAAEJ,EAAE,QAAQK,EAAaN,EAAE,CAAC,EAAEI,CAAC,GAAjB,UAAmBN,EAAE,QAAQ,UAAU,CAAC,IAAIA,EAAEC,EAAEC,EAAEO,EAAE,UAAU,CAAC,IAAIN,EAAEC,EAAE,IAAII,IAAIL,EAAEG,EAAE,SAASH,EAAE,KAAK,EAAEH,GAAG,CAACI,EAAEJ,EAAE,GAAGA,EAAEA,EAAE,KAAK,GAAG,CAACI,EAAE,CAAC,OAAOD,EAAE,CAAC,MAAMH,EAAEE,EAAE,EAAED,EAAE,OAAOE,CAAC,CAAC,CAACF,EAAE,OAAOE,GAAGA,EAAE,MAAM,CAAC,EAAE,GAAGK,EAAEN,EAAE,UAAU,CAACI,EAAE,SAASG,CAAC,CAAC,UAAU,CAACJ,GAAGF,EAAE,WAAWA,EAAE,UAAU,WAAW,GAAGI,GAAGA,EAAE,QAAQ,CAAC,IAAIG,EAAEH,EAAE,QAAQ,MAAM,EAAEL,EAAE,UAAU,CAACQ,EAAE,KAAKD,CAAC,CAAC,CAAC,MAAMP,EAAE,UAAU,CAACE,EAAE,KAAKD,EAAEM,CAAC,CAAC,MAAM,CAAC,IAAIE,EAAE,GAAGC,EAAE,SAAS,eAAe,EAAE,EAAE,IAAIP,EAAEI,CAAC,EAAE,QAAQG,EAAE,CAAC,cAAc,EAAE,CAAC,EAAEV,EAAE,UAAU,CAACU,EAAE,KAAKD,EAAE,CAACA,CAAC,CAAC,CAAC,OAAO,SAASR,EAAE,CAAC,IAAIC,EAAE,CAAC,GAAGD,EAAE,KAAK,MAAM,EAAEF,IAAIA,EAAE,KAAKG,GAAGJ,IAAIA,EAAEI,EAAEF,EAAE,GAAGD,EAAEG,CAAC,CAAC,CAAC,EAAE,SAASJ,EAAEC,EAAE,CAACD,EAAE,QAAQ,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAOA,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAE,UAAUF,EAAE,QAAQG,GAAGA,EAAE,WAAW,EAAE,EAAE,SAASH,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAEG,EAAEH,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,GAAGE,EAAEH,CAAC,EAAEI,EAAEH,CAAC,GAAGA,EAAE,cAAcD,EAAE,OAAOC,EAAE,IAAIC,EAAEG,EAAE,EAAEL,CAAC,EAAE,SAASE,EAAE,SAASD,CAAC,EAAEC,EAAE,OAAO,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAE,CAAC,QAAQE,KAAKH,EAAEE,EAAEH,EAAEI,EAAEH,EAAEG,CAAC,EAAEF,CAAC,EAAE,OAAOF,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,CAAC,EAAE,aAAa,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAEC,EAAE,CAACF,GAAG,CAACI,EAAEJ,EAAEE,EAAEF,EAAEA,EAAE,UAAUK,CAAC,GAAGF,EAAEH,EAAEK,EAAE,CAAC,aAAa,GAAG,MAAMJ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,CAAC,EAAEI,EAAEJ,EAAE,CAAC,EAAE,SAAS,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIC,EAAEE,EAAEH,CAAC,EAAEK,GAAGJ,GAAG,CAACA,EAAEK,CAAC,GAAGF,EAAE,EAAEH,EAAEK,EAAE,CAAC,aAAa,GAAG,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAASN,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAE,UAAU,EAAEE,EAAE,GAAG,GAAG,CAAC,IAAIC,EAAE,CAAC,CAAC,EAAEF,CAAC,EAAE,EAAEE,EAAE,OAAO,UAAU,CAACD,EAAE,EAAE,EAAE,MAAM,KAAKC,EAAG,UAAU,CAAC,KAAM,EAAC,CAAE,CAAC,MAAS,CAAC,CAACL,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,GAAG,CAACA,GAAG,CAACG,EAAE,MAAM,GAAG,IAAIF,EAAE,GAAG,GAAG,CAAC,IAAIG,EAAE,CAAC,CAAC,EAAEC,EAAED,EAAEF,CAAC,EAAE,EAAEG,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,KAAKJ,EAAE,EAAE,CAAC,EAAEG,EAAEF,CAAC,EAAE,UAAU,CAAC,OAAOG,CAAC,EAAEN,EAAEK,CAAC,CAAC,MAAS,CAAC,CAAC,OAAOH,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEC,EAAEA,EAAE,EAAEA,EAAE,EAAE,SAAS,CAAC,OAAOD,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEI,EAAEJ,EAAE,EAAE,EAAEK,EAAEL,EAAE,EAAE,EAAEM,EAAEN,EAAE,EAAE,EAAEO,EAAE,OAAO,OAAOT,EAAE,QAAQ,CAACS,GAAGP,EAAE,EAAE,EAAG,UAAU,CAAC,IAAIF,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEC,EAAE,OAAO,EAAEC,EAAE,uBAAuB,OAAOH,EAAEE,CAAC,EAAE,EAAEC,EAAE,MAAM,EAAE,EAAE,QAAS,SAASH,EAAE,CAACC,EAAED,CAAC,EAAEA,CAAC,CAAE,EAAKS,EAAE,CAAC,EAAET,CAAC,EAAEE,CAAC,GAAZ,GAAe,OAAO,KAAKO,EAAE,CAAC,EAAER,CAAC,CAAC,EAAE,KAAK,EAAE,GAAGE,CAAC,CAAE,EAAE,SAASH,EAAEC,EAAE,CAAC,QAAQC,EAAEK,EAAEP,CAAC,EAAES,EAAE,UAAU,OAAOC,EAAE,EAAEC,EAAEN,EAAE,EAAEO,EAAEN,EAAE,EAAEG,EAAEC,GAAG,QAAQG,EAAEC,EAAEN,EAAE,UAAUE,GAAG,CAAC,EAAEK,EAAEJ,EAAEP,EAAEU,CAAC,EAAE,OAAOH,EAAEG,CAAC,CAAC,EAAEV,EAAEU,CAAC,EAAEE,EAAED,EAAE,OAAOE,EAAE,EAAED,EAAEC,GAAGJ,EAAEE,EAAEE,GAAG,EAAEd,GAAG,CAACS,EAAE,KAAKE,EAAED,CAAC,IAAIX,EAAEW,CAAC,EAAEC,EAAED,CAAC,GAAG,OAAOX,CAAC,EAAEO,CAAC,EAAE,SAAST,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEF,EAAE,QAAQ,OAAO,MAAM,SAASA,EAAE,CAAC,OAAOG,EAAEH,EAAEI,CAAC,CAAC,CAAC,EAAE,SAASJ,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAE,EAAE,EAAEI,EAAEJ,EAAE,EAAE,EAAE,UAAU,EAAEF,EAAE,QAAQ,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAEK,EAAEH,EAAEJ,CAAC,EAAEQ,EAAE,EAAEC,EAAE,CAAC,EAAE,IAAIP,KAAKK,EAAEL,GAAGI,GAAGH,EAAEI,EAAEL,CAAC,GAAGO,EAAE,KAAKP,CAAC,EAAE,KAAKD,EAAE,OAAOO,GAAGL,EAAEI,EAAEL,EAAED,EAAEO,GAAG,CAAC,IAAI,CAACH,EAAEI,EAAEP,CAAC,GAAGO,EAAE,KAAKP,CAAC,GAAG,OAAOO,CAAC,CAAC,EAAE,SAAST,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAO,SAASC,EAAEC,EAAEI,EAAE,CAAC,IAAIC,EAAEC,EAAEL,EAAEF,CAAC,EAAEQ,EAAEL,EAAEI,EAAE,MAAM,EAAEE,EAAEL,EAAEC,EAAEG,CAAC,EAAE,GAAGT,GAAGE,GAAGA,GAAG,KAAKO,EAAEC,GAAG,IAAIH,EAAEC,EAAEE,GAAG,IAAIH,EAAE,MAAM,OAAQ,MAAKE,EAAEC,EAAEA,IAAI,IAAIV,GAAGU,KAAKF,IAAIA,EAAEE,CAAC,IAAIR,EAAE,OAAOF,GAAGU,GAAG,EAAE,MAAM,CAACV,GAAG,EAAE,CAAC,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAE,MAAM,EAAEE,EAAEF,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOG,EAAEH,CAAC,IAAIG,EAAEH,CAAC,EAAEI,EAAEJ,CAAC,EAAE,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACD,EAAE,QAAQ,gGAAgG,MAAM,GAAG,CAAC,EAAE,SAASA,EAAEC,EAAE,CAACA,EAAE,EAAE,OAAO,qBAAqB,EAAE,SAASD,EAAEC,EAAE,CAACA,EAAE,EAAE,CAAC,EAAE,oBAAoB,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,EAAE,EAAEC,EAAEA,EAAE,EAAE,QAAQ,CAAC,KAAKD,EAAE,EAAE,CAAC,CAAC,EAAEA,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,SAASF,EAAEC,EAAEC,EAAE,CAAC,aAAa,IAAIC,EAAED,EAAE,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAEG,EAAEH,EAAE,EAAE,EAAEF,EAAE,QAAQ,SAASA,EAAE,CAAC,QAAQC,EAAEE,EAAE,IAAI,EAAED,EAAEG,EAAEJ,EAAE,MAAM,EAAEK,EAAE,UAAU,OAAOC,EAAEH,EAAEE,EAAE,EAAE,UAAU,CAAC,EAAE,OAAOJ,CAAC,EAAEM,EAAEF,EAAE,EAAE,UAAU,CAAC,EAAE,OAAOG,EAAWD,IAAT,OAAWN,EAAEE,EAAEI,EAAEN,CAAC,EAAEO,EAAEF,GAAGN,EAAEM,GAAG,EAAEP,EAAE,OAAOC,CAAC,CAAC,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAE,aAAa,EAAEE,EAAE,MAAM,UAAgBA,EAAED,CAAC,GAAT,MAAYD,EAAE,EAAE,EAAEE,EAAED,EAAE,CAAC,CAAC,EAAEH,EAAE,QAAQ,SAASA,EAAE,CAACI,EAAED,CAAC,EAAEH,CAAC,EAAE,EAAE,CAAC,EAAE,SAASA,EAAEC,EAAEC,EAAE,CAAC,aAAaA,EAAE,EAAED,CAAC,EAAEC,EAAE,EAAED,EAAE,cAAe,UAAU,CAAC,OAAOU,CAAC,CAAE,EAAET,EAAE,EAAED,EAAE,eAAgB,UAAU,CAAC,OAAOE,CAAC,CAAE,EAAED,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAE,IAAIC,EAAEC,EAAEF,EAAE,CAAC,EAAEG,EAAEH,EAAE,EAAEE,CAAC,EAAEE,EAAEJ,EAAE,EAAE,EAAEK,EAAEL,EAAE,EAAEI,CAAC,EAAEE,GAAGN,EAAE,EAAE,EAAE,UAAU,CAAC,SAASF,EAAEC,EAAEC,EAAEC,EAAE,CAACE,EAAE,EAAE,KAAKL,CAAC,EAAE,KAAK,IAAIC,EAAE,KAAK,OAAOC,EAAE,KAAK,OAAOC,CAAC,CAAC,OAAOI,EAAE,EAAEP,EAAE,CAAC,CAAC,IAAI,sBAAsB,MAAM,SAASA,EAAEC,EAAE,CAAC,KAAK,OAAOD,EAAE,KAAK,OAAOC,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,MAAM,SAASD,EAAE,CAAC,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,IAAI,KAAK,OAAOA,EAAE,KAAK,OAAOA,EAAEA,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,UAAU,UAAU,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,SAASA,EAAE,CAAC,IAAIC,EAAED,EAAEE,EAAE,EAAE,KAAK,OAAO,EAAED,EAAEA,EAAEE,EAAE,KAAK,KAAKF,EAAEA,EAAEC,EAAEA,CAAC,EAAEE,EAAE,EAAE,KAAK,OAAO,EAAED,EAAEA,EAAE,OAAOD,GAAGD,EAAEG,GAAGH,EAAE,CAACC,GAAG,KAAK,OAAOE,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,MAAM,SAASJ,EAAEC,EAAEC,EAAE,CAAC,QAAQC,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,IAAIC,EAAE,KAAK,WAAWJ,EAAE,CAAC,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,IAAII,EAAE,CAAC,EAAEJ,EAAE,EAAEI,EAAE,CAAC,EAAEJ,EAAE,EAAEC,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,UAAU,UAAU,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,MAAM,SAASD,EAAE,CAAC,GAAUA,IAAP,KAAS,CAAC,IAAIC,EAAE,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,KAAK,OAAO,KAAK,MAAM,EAAE,KAAK,IAAI,OAAOA,CAAC,EAAE,KAAK,IAAI,UAAUD,EAAE,CAACA,EAAE,MAAM,EAAE,CAACA,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAIE,EAAE,IAAI,MAAM,gCAAgC,EAAE,QAAQ,IAAIA,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,SAASF,EAAE,CAAC,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,YAAY,QAAQ,KAAK,IAAI,UAAUA,EAAE,KAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,QAAQ,KAAK,IAAI,OAAO,KAAK,OAAOA,EAAE,KAAK,OAAOA,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,MAAM,SAASA,EAAE,CAAC,KAAK,IAAI,OAAO,YAAY,KAAK,IAAI,OAAO,KAAK,OAAOA,EAAE,KAAK,OAAOA,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,EAAE,GAAG,SAASS,EAAET,EAAE,CAAC,OAAO,IAAI,QAAS,SAASC,EAAEC,EAAE,CAAC,IAAIC,EAAE,IAAI,MAAMA,EAAE,YAAY,YAAYA,EAAE,OAAO,UAAU,CAACF,EAAEE,CAAC,CAAC,EAAEA,EAAE,IAAIH,EAAEG,EAAE,QAAQ,SAASF,EAAE,CAAC,IAAIE,EAAE,IAAI,MAAM,SAAS,OAAOH,EAAE,iBAAiB,CAAC,EAAEE,EAAEC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,SAASO,EAAEV,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAE,OAAO,UAAU,CAAC,IAAIC,EAAE,KAAKC,EAAE,CAAC,IAAI,KAAKC,EAAE,UAAUJ,GAAGG,EAAEH,EAAED,GAAG,aAAaE,CAAC,EAAEA,EAAE,OAAO,WAAY,UAAU,CAACD,EAAEG,EAAEL,EAAE,MAAMI,EAAEE,CAAC,CAAC,EAAGL,CAAC,IAAIC,EAAEG,EAAEL,EAAE,MAAMI,EAAEE,CAAC,EAAE,CAAC,EAAE,SAASN,EAAE,CAACA,EAAEA,EAAE,MAAM,CAAC,EAAE,QAAQA,EAAEA,EAAE,MAAM,CAAC,EAAE,QAAQA,EAAEA,EAAE,OAAO,CAAC,EAAE,SAASA,EAAEA,EAAE,KAAK,CAAC,EAAE,MAAM,GAAEG,IAAIA,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,GAAe,OAAO,OAAO,aAA1B,WAAsC,MAAM,GAAG,SAASH,EAAEA,EAAEC,EAAE,CAACA,EAAEA,GAAG,CAAC,QAAQ,GAAG,WAAW,GAAG,OAAO,MAAM,EAAE,IAAIC,EAAE,SAAS,YAAY,aAAa,EAAE,OAAOA,EAAE,gBAAgBF,EAAEC,EAAE,QAAQA,EAAE,WAAWA,EAAE,MAAM,EAAEC,CAAC,CAACF,EAAE,UAAU,OAAO,MAAM,UAAU,OAAO,YAAYA,CAAC,EAAE,EAAE,IAAIW,EAAE,UAAU,CAAC,SAASX,EAAEC,EAAEC,EAAE,CAAC,IAAIE,EAAE,KAAKC,EAAE,EAAE,KAAKL,CAAC,EAAE,IAAIM,EAAE,KAAKC,EAAE,CAAC,YAAYJ,EAAE,KAAK,eAAe,IAAI,gBAAgB,IAAI,gBAAgB,GAAG,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,UAAU,CAAC,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG,gBAAgB,2BAA2B,mBAAmB,sCAAsC,eAAe,GAAG,gBAAgB,EAAE,qBAAqB,EAAE,EAAE,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAEI,CAAC,EAAEL,CAAC,EAAE,KAAK,YAAY,KAAK,OAAO,YAAY,KAAK,UAAU,KAAK,SAASD,CAAC,EAAE,SAAS,cAAc,OAAOA,CAAC,CAAC,EAAEA,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,aAAa,GAAG,KAAK,QAAQ,EAAE,KAAK,aAAa,GAAG,KAAK,eAAe,EAAE,KAAK,IAAI,KAAK,OAAO,WAAW,IAAI,EAAE,KAAK,MAAM,IAAIO,EAAE,KAAK,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,EAAE,KAAK,OAAO,cAAcL,EAAE,OAAOM,EAAE,KAAK,OAAO,QAAQ,EAAE,KAAM,SAAST,EAAE,CAACI,EAAE,WAAWJ,CAAC,CAAE,EAAE,IAAIW,EAAED,EAAG,SAASV,EAAE,CAACA,EAAE,eAAe,EAAEM,EAAE,cAAc,UAAU,MAAM,EAAEA,EAAE,SAASA,EAAE,cAAcN,CAAC,EAAEM,EAAE,MAAM,oBAAoBA,EAAE,SAAS,CAAC,EAAEA,EAAE,SAAS,CAAC,CAAC,EAAEA,EAAE,QAAQ,EAAEF,EAAE,OAAO,uBAAuBE,EAAE,QAAQA,EAAE,cAAc,EAAE,EAAG,EAAE,EAAE,KAAK,OAAO,iBAAiB,YAAa,SAASN,EAAE,CAACA,EAAE,eAAe,EAAEM,EAAE,oBAAoB,EAAEA,EAAE,cAAcH,EAAE,OAAOG,EAAE,SAASA,EAAE,cAAcN,CAAC,EAAEM,EAAE,MAAM,oBAAoBA,EAAE,SAAS,CAAC,EAAEA,EAAE,SAAS,CAAC,CAAC,EAAEA,EAAE,MAAM,UAAUA,EAAE,OAAO,eAAe,GAAGA,EAAE,OAAO,iBAAiB,YAAYK,CAAC,EAAE,SAAS,KAAK,iBAAiB,UAAW,SAASX,EAAEC,EAAE,CAACK,EAAE,OAAO,oBAAoB,YAAYK,CAAC,EAAEL,EAAE,OAAO,EAAE,KAAK,oBAAoB,UAAUN,CAAC,CAAC,CAAE,CAAC,CAAE,EAAE,KAAK,OAAO,iBAAiB,aAAc,SAASA,EAAE,CAACA,EAAE,eAAe,EAAEM,EAAE,oBAAoB,EAAEA,EAAE,cAAcH,EAAE,OAAOG,EAAE,SAASA,EAAE,cAAcN,CAAC,EAAEM,EAAE,MAAM,oBAAoBA,EAAE,SAAS,CAAC,EAAEA,EAAE,SAAS,CAAC,CAAC,EAAEA,EAAE,MAAM,UAAUA,EAAE,OAAO,eAAe,GAAGA,EAAE,OAAO,iBAAiB,YAAYK,CAAC,EAAE,SAAS,KAAK,iBAAiB,WAAY,SAASX,GAAG,CAACM,EAAE,OAAO,oBAAoB,YAAYK,CAAC,EAAEL,EAAE,OAAO,EAAE,KAAK,oBAAoB,WAAWN,CAAC,CAAC,CAAE,CAAC,CAAE,EAAE,OAAO,iBAAiB,SAASU,EAAG,UAAU,CAACN,EAAE,oBAAoB,CAAC,EAAG,GAAG,CAAC,EAAE,OAAO,iBAAiB,SAASM,EAAG,UAAU,CAACN,EAAE,oBAAoB,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,OAAOG,EAAE,EAAEP,EAAE,CAAC,CAAC,IAAI,WAAW,MAAM,SAASA,EAAE,CAAC,OAAgB,OAAOA,GAAjB,UAAoBA,aAAa,MAAM,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC,IAAI,sBAAsB,MAAM,UAAU,CAAC,KAAK,KAAK,SAASA,EAAE,CAAC,QAAQC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAEC,EAAEF,EAAE,sBAAsB,EAAEA,GAAGC,EAAE,KAAKD,EAAE,UAAUC,EAAE,MAAMD,EAAE,WAAWA,EAAEA,EAAE,aAAa,IAAIG,EAAEF,EAAE,KAAKC,EAAE,KAAKE,EAAEH,EAAE,IAAIC,EAAE,IAAI,MAAM,CAAC,KAAKC,EAAE,EAAEF,EAAE,KAAK,KAAK,IAAIE,CAAC,EAAEF,EAAE,KAAK,KAAK,IAAIE,CAAC,EAAE,IAAIC,EAAE,EAAEH,EAAE,IAAI,KAAK,IAAIG,CAAC,EAAEH,EAAE,IAAI,KAAK,IAAIG,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,MAAM,UAAU,CAAC,CAAC,KAAK,cAAc,KAAK,QAAQ,KAAK,OAAO,kBAAkB,KAAK,MAAM,EAAE,KAAK,OAAO,MAAM,cAAc,OAAgB,KAAK,OAAO,WAArB,SAAgC,KAAK,aAAa,GAAG,KAAK,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,SAASJ,EAAEC,EAAE,EAAE,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAE,IAAI,YAAYF,EAAE,CAAC,QAAQ,GAAG,WAAW,GAAG,OAAOC,CAAC,CAAC,EAAEF,EAAE,cAAcG,CAAC,CAAC,GAAE,KAAK,OAAO,GAAG,OAAOH,EAAE,GAAG,EAAE,OAAOC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,MAAM,UAAU,CAAC,IAAID,EAAE,KAAK,OAAO,IAAI,QAAS,SAASC,EAAEC,EAAE,CAACO,EAAET,EAAE,OAAO,eAAe,EAAE,KAAM,SAASE,EAAE,CAACF,EAAE,aAAaE,EAAEF,EAAE,IAAI,UAAUA,EAAE,aAAa,EAAE,EAAEA,EAAE,OAAO,MAAMA,EAAE,OAAO,MAAM,EAAEA,EAAE,cAAc,EAAEC,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,OAAOC,EAAED,CAAC,EAAE,IAAI,UAAU,GAAG,OAAOD,EAAE,OAAO,gBAAgB,iBAAiB,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC,IAAI,iBAAiB,MAAM,UAAU,CAAC,KAAK,OAAO,SAAS,cAAc,QAAQ,EAAE,KAAK,OAAO,UAAU,IAAI,YAAY,EAAE,KAAK,OAAO,MAAM,KAAK,OAAO,eAAe,KAAK,OAAO,OAAO,KAAK,OAAO,gBAAgB,KAAK,UAAU,YAAY,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,UAAU,CAAC,IAAIA,EAAE,KAAK,GAAO,KAAK,OAAO,eAAe,SAA/B,GAAuC,SAASA,EAAEC,EAAE,CAAC,IAAIC,EAAE,IAAI,UAAUC,EAAE,SAAS,cAAc,KAAK,EAAEA,EAAE,UAAU,IAAI,WAAW,EAAE,IAAIC,EAAEF,EAAE,gBAAgBF,EAAE,WAAW,EAAEG,EAAE,UAAUC,EAAE,KAAK,UAAUH,EAAE,aAAaE,EAAEF,EAAE,iBAAiB,CAAC,GAAE,KAAK,OAAO,eAAe,KAAK,SAAS,MAAM,CAAC,IAAIA,EAAE,SAAS,cAAc,KAAK,EAAEQ,EAAE,KAAK,OAAO,kBAAkB,EAAE,KAAM,SAASP,EAAE,CAACD,EAAE,IAAIC,EAAE,IAAIF,EAAE,UAAU,aAAaC,EAAED,EAAE,MAAM,CAAC,EAAI,SAASA,EAAE,CAAC,QAAQ,IAAIA,EAAE,OAAO,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,SAASA,EAAE,CAAC,IAAIC,EAAEC,EAAE,OAAOF,EAAE,KAAK,CAAC,IAAI,YAAYC,EAAED,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,gBAAgB,KAAK,KAAK,KAAKE,EAAEF,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,gBAAgB,KAAK,KAAK,IAAI,MAAM,IAAI,YAAYC,EAAED,EAAE,QAAQ,KAAK,OAAO,gBAAgB,KAAK,KAAK,KAAKE,EAAEF,EAAE,QAAQ,KAAK,OAAO,gBAAgB,KAAK,KAAK,GAAG,CAAC,MAAM,CAACC,EAAEC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,MAAM,UAAU,CAAmC,OAAlC,KAAK,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,EAAS,KAAK,IAAI,yBAAyB,kBAAkB,KAAK,IAAI,KAAK,EAAE,KAAK,OAAO,YAAY,CAAC,KAAKC,EAAE,MAAM,KAAK,MAAM,MAAM,KAAK,UAAU,EAAE,MAAM,KAAKA,EAAE,OAAO,KAAK,MAAM,OAAO,KAAK,OAAO,eAAe,EAAE,MAAM,KAAKA,EAAE,MAAM,KAAK,MAAM,MAAM,KAAK,OAAO,gBAAgB,KAAK,OAAO,UAAU,KAAK,OAAO,OAAO,EAAE,MAAM,KAAKA,EAAE,KAAK,KAAK,MAAM,SAAS,KAAK,OAAO,eAAe,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,UAAU,CAAC,QAAQH,EAAE,EAAEC,EAAE,KAAK,IAAI,aAAa,EAAE,EAAE,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,EAAEC,EAAED,EAAE,KAAK,OAAOE,EAAE,EAAEA,EAAED,EAAEC,GAAG,EAAMF,EAAE,KAAKE,CAAC,IAAZ,GAAmBF,EAAE,KAAKE,EAAE,CAAC,IAAd,GAAqBF,EAAE,KAAKE,EAAE,CAAC,IAAd,GAAqBF,EAAE,KAAKE,EAAE,CAAC,IAAd,GAAiBH,IAAI,OAAOA,GAAG,EAAEA,GAAG,KAAK,OAAO,MAAM,KAAK,OAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,MAAM,UAAU,CAAC,KAAK,IAAI,UAAU,EAAE,EAAE,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,EAAE,EAAE,OAAO,YAAYW,EAAE,OAAO,aAAaR,CAAC,CAAC,CAAC,CAAC,CAAE,ICAx1uB,IAAAmC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAOC,SAASC,EAAS,CACX,OAAOD,IAAW,UAAYA,GAAO,QAASA,GAAO,QAAUC,EAAQ,EAAQ,OAAO,aAAeA,EAAQ,CACrH,GAAG,SAASC,EAAW,CACnB,aACA,OAAO,UAAW,CAiBd,QAFIC,EAAe,CAAE,CAAE,yFAA8B,KAAM,IAAK,EAAG,CAAE,wBAAsB,KAAM,KAAM,EAAG,CAAE,yEAAwB,KAAM,KAAM,EAAG,CAAE,iBAAkB,KAAM,IAAK,EAAG,CAAE,KAAM,CAAE,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,IAAK,EAAG,CAAE,KAAM,CAAE,EAAG,CAAE,sBAAuB,KAAM,IAAK,EAAG,CAAE,KAAM,CAAE,EAAG,CAAE,YAAa,KAAM,IAAK,EAAG,CAAE,6DAAsB,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,mBAAoB,KAAM,KAAM,EAAG,CAAE,YAAa,KAAM,KAAM,CAAE,EAAG,CAAE,0BAAwB,KAAM,IAAK,EAAG,CAAE,+BAA2B,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,IAAK,EAAG,CAAE,KAAM,CAAE,EAAG,CAAE,yEAAwB,KAAM,KAAM,EAAG,CAAE,gEAAyB,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,IAAK,EAAG,CAAE,KAAM,CAAE,EAAG,CAAE,6DAAsB,KAAM,KAAM,EAAG,CAAE,sBAAoB,KAAM,IAAK,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,mBAAiB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,0CAAkB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,oIAAgD,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,kBAAmB,KAAM,IAAK,EAAG,CAAE,iCAAkC,KAAM,KAAM,EAAG,CAAE,yBAA0B,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,8DAAuB,KAAM,KAAM,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,qBAAsB,KAAM,KAAM,EAAG,CAAE,wDAAsB,KAAM,KAAM,EAAG,CAAE,sBAAuB,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,IAAK,EAAG,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,CAAE,EAAG,CAAE,0BAA2B,KAAM,KAAM,EAAG,CAAE,wBAAyB,KAAM,MAAO,EAAG,CAAE,IAAK,IAAK,GAAI,CAAE,EAAG,CAAE,iBAAkB,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,0DAAwD,KAAM,KAAM,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,IAAK,EAAG,CAAE,uBAAc,KAAM,IAAK,EAAG,CAAE,mBAAoB,KAAM,KAAM,EAAG,CAAE,OAAQ,CAAE,EAAG,CAAE,0BAA2B,KAAM,KAAM,EAAG,CAAE,OAAQ,CAAE,EAAG,CAAE,WAAY,KAAM,IAAK,EAAG,CAAE,gFAA0B,KAAM,KAAM,EAAG,CAAE,iDAAkD,KAAM,KAAM,EAAG,CAAE,uCAAwC,KAAM,KAAM,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,wBAAiB,KAAM,KAAM,EAAG,CAAE,qBAAsB,KAAM,KAAM,EAAG,CAAE,OAAQ,KAAM,IAAK,EAAG,CAAE,aAAW,KAAM,MAAO,CAAE,EAAG,CAAE,gDAAmB,KAAM,KAAM,EAAG,CAAE,2CAAoC,KAAM,KAAM,EAAG,CAAE,oBAAqB,KAAM,IAAK,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,+CAA6C,KAAM,IAAK,EAAG,CAAE,MAAO,MAAO,KAAM,CAAE,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,+CAAkB,KAAM,IAAK,EAAG,CAAE,cAAe,KAAM,KAAM,EAAG,CAAE,wCAAyC,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,kBAAmB,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,oCAAqC,KAAM,KAAM,EAAG,CAAE,6BAA2B,KAAM,KAAM,EAAG,CAAE,OAAQ,KAAM,KAAM,EAAG,CAAE,kBAAmB,KAAM,MAAO,CAAE,EAAG,CAAE,SAAU,KAAM,IAAK,EAAG,CAAE,sCAAoC,KAAM,KAAM,EAAG,CAAE,+CAA0C,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,yEAAwB,KAAM,KAAM,EAAG,CAAE,wBAAyB,KAAM,IAAK,EAAG,CAAE,gBAAiB,KAAM,KAAM,EAAG,CAAE,YAAa,KAAM,KAAM,EAAG,CAAE,gDAAmB,KAAM,IAAK,EAAG,CAAE,+BAAgC,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,aAAc,KAAM,MAAO,CAAE,EAAG,CAAE,OAAQ,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,YAAa,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,OAAQ,OAAQ,OAAQ,MAAO,CAAE,EAAG,CAAE,qBAAmB,KAAM,KAAM,EAAG,CAAE,kCAAgC,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,2BAAkB,KAAM,KAAM,EAAG,CAAE,4BAA0B,KAAM,IAAK,EAAG,CAAE,sBAAoB,KAAM,KAAM,EAAG,CAAE,mCAAgB,KAAM,IAAK,EAAG,CAAE,YAAa,KAAM,IAAK,EAAG,CAAE,0DAAmB,KAAM,IAAK,EAAG,CAAE,gEAAoB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,cAAe,KAAM,KAAM,EAAG,CAAE,OAAQ,QAAS,OAAQ,OAAQ,MAAO,CAAE,EAAG,CAAE,4DAAqB,KAAM,KAAM,EAAG,CAAE,iBAAkB,KAAM,KAAM,CAAE,EAAG,CAAE,UAAW,KAAM,IAAK,EAAG,CAAE,MAAO,KAAM,CAAE,EAAG,CAAE,uBAAc,KAAM,IAAK,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,CAAE,EAAG,CAAE,kEAAsB,KAAM,KAAM,EAAG,CAAE,sEAA0B,KAAM,IAAK,EAAG,CAAE,KAAM,GAAI,CAAE,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,kEAAsB,KAAM,KAAM,EAAG,CAAE,4EAA2B,KAAM,KAAM,EAAG,CAAE,4BAAc,KAAM,KAAM,EAAG,CAAE,mBAAoB,KAAM,KAAM,EAAG,CAAE,6DAAsB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,2DAAoB,KAAM,KAAM,EAAG,CAAE,gBAAiB,KAAM,KAAM,EAAG,CAAE,sBAAuB,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,uBAAc,KAAM,KAAM,EAAG,CAAE,4BAA6B,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,IAAK,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,OAAQ,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,mBAAoB,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,wFAA6B,KAAM,KAAM,EAAG,CAAE,oBAAqB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,MAAO,EAAG,CAAE,MAAO,KAAM,CAAE,EAAG,CAAE,qBAAmB,KAAM,IAAK,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,8BAA+B,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,kDAAqB,KAAM,KAAM,EAAG,CAAE,yBAA0B,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,mEAAuB,KAAM,MAAO,CAAE,EAAG,CAAE,6BAA2B,KAAM,KAAM,EAAG,CAAE,yDAA4B,KAAM,IAAK,EAAG,CAAE,uBAAqB,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,yCAAiB,KAAM,KAAM,EAAG,CAAE,0BAA2B,KAAM,IAAK,EAAG,CAAE,wCAAsC,KAAM,KAAM,EAAG,CAAE,cAAe,KAAM,IAAK,EAAG,CAAE,YAAa,KAAM,KAAM,EAAG,CAAE,gBAAiB,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,OAAQ,KAAM,KAAM,EAAG,CAAE,iBAAkB,KAAM,KAAM,EAAG,CAAE,sFAAgC,KAAM,KAAM,EAAG,CAAE,4HAAwC,KAAM,KAAM,EAAG,CAAE,2BAA4B,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,iBAAkB,KAAM,KAAM,CAAE,EAAG,CAAE,0DAAmB,KAAM,KAAM,EAAG,CAAE,0EAAyB,KAAM,IAAK,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,qEAAyB,KAAM,KAAM,EAAG,CAAE,qBAAmB,KAAM,KAAM,EAAG,CAAE,mBAAoB,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,iBAAe,KAAM,IAAK,EAAG,CAAE,cAAe,KAAM,IAAK,EAAG,CAAE,kBAAmB,KAAM,IAAK,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,cAAe,KAAM,IAAK,EAAG,CAAE,MAAO,KAAM,CAAE,EAAG,CAAE,+CAAkB,KAAM,KAAM,EAAG,CAAE,6BAAwB,KAAM,MAAO,CAAE,EAAG,CAAE,uBAAqB,KAAM,IAAK,EAAG,CAAE,gDAAmB,KAAM,IAAK,CAAE,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,sBAAoB,KAAM,MAAO,CAAE,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,wBAAyB,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,cAAe,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,oDAAkD,KAAM,MAAO,CAAE,EAAG,CAAE,uDAAwD,KAAM,KAAM,EAAG,CAAE,mCAAoC,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,gEAA+C,KAAM,KAAM,EAAG,CAAE,0KAA8C,KAAM,KAAM,EAAG,CAAE,0BAAqB,KAAM,KAAM,EAAG,CAAE,gDAAmB,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,YAAa,KAAM,IAAK,EAAG,CAAE,eAAgB,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,uBAAwB,KAAM,KAAM,EAAG,CAAE,uBAAwB,KAAM,KAAM,EAAG,CAAE,kBAAmB,KAAM,KAAM,EAAG,CAAE,uBAAwB,KAAM,KAAM,EAAG,CAAE,eAAgB,KAAM,IAAK,EAAG,CAAE,yCAAsB,KAAM,IAAK,EAAG,CAAE,sGAAiC,KAAM,KAAM,EAAG,CAAE,oBAAkB,KAAM,IAAK,EAAG,CAAE,4EAA2B,KAAM,IAAK,EAAG,CAAE,uEAAsB,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,yBAA0B,KAAM,KAAM,EAAG,CAAE,IAAK,CAAE,EAAG,CAAE,mBAAoB,KAAM,IAAK,EAAG,CAAE,wBAAyB,KAAM,IAAK,EAAG,CAAE,2DAAoB,KAAM,KAAM,EAAG,CAAE,wBAAe,KAAM,KAAM,EAAG,CAAE,aAAc,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,gCAAkB,KAAM,IAAK,EAAG,CAAE,cAAe,KAAM,KAAM,EAAG,CAAE,OAAQ,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,QAAS,KAAM,KAAM,EAAG,CAAE,sBAAuB,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,uDAAqB,KAAM,KAAM,EAAG,CAAE,sBAAoB,KAAM,IAAK,EAAG,CAAE,eAAgB,KAAM,KAAM,EAAG,CAAE,2BAA4B,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,sBAAuB,KAAM,IAAK,GAAI,CAAE,KAAM,CAAE,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,uDAAqB,KAAM,KAAM,EAAG,CAAE,kLAAsD,KAAM,KAAM,EAAG,CAAE,iBAAkB,KAAM,KAAM,CAAE,EAAG,CAAE,gBAAiB,KAAM,IAAK,CAAE,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,gCAA4B,KAAM,KAAM,EAAG,CAAE,UAAW,KAAM,KAAM,EAAG,CAAE,uCAAqC,KAAM,KAAM,EAAG,CAAE,OAAQ,CAAE,EAAG,CAAE,YAAa,KAAM,IAAK,EAAG,CAAE,0BAAsB,KAAM,IAAK,EAAG,CAAE,uCAAwC,KAAM,KAAM,EAAG,CAAE,2HAAuC,KAAM,MAAO,EAAG,CAAE,OAAQ,MAAO,CAAE,EAAG,CAAE,2DAAoB,KAAM,KAAM,EAAG,CAAE,SAAU,KAAM,KAAM,EAAG,CAAE,WAAY,KAAM,KAAM,EAAG,CAAE,mBAAiB,KAAM,MAAO,EAAG,CAAE,IAAK,CAAE,CAAE,EAEtuTC,EAAI,EAAGA,EAAID,EAAa,OAAQC,IAAK,CAC1C,IAAIC,EAAIF,EAAaC,CAAC,EACtBD,EAAaC,CAAC,EAAI,CACd,KAAMC,EAAE,CAAC,EACT,KAAMA,EAAE,CAAC,EACT,SAAUA,EAAE,CAAC,EACb,SAAUA,EAAE,CAAC,GAAK,EAClB,UAAWA,EAAE,CAAC,GAAK,IACvB,CACJ,CAEA,SAASC,EAAcC,EAAQ,CAC3B,QAASH,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACvC,IAAII,EAAS,UAAUJ,CAAC,GAAK,KAAO,OAAO,UAAUA,CAAC,CAAC,EAAI,CAAC,EACxDK,EAAU,OAAO,KAAKD,CAAM,EAC5B,OAAO,OAAO,uBAA0B,YACxCC,EAAQ,KAAK,MAAMA,EAAS,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAASE,EAAK,CAClF,OAAO,OAAO,yBAAyBF,EAAQE,CAAG,EAAE,UACxD,CAAC,CAAC,EAEND,EAAQ,QAAQ,SAASE,EAAK,CAC1BC,EAAgBL,EAAQI,EAAKH,EAAOG,CAAG,CAAC,CAC5C,CAAC,CACL,CACA,OAAOJ,CACX,CACA,SAASK,EAAgBC,EAAKF,EAAKG,EAAO,CACtC,OAAAH,EAAMI,EAAeJ,CAAG,EACpBA,KAAOE,EACP,OAAO,eAAeA,EAAKF,EAAK,CAC5B,MAAOG,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACd,CAAC,EAEDD,EAAIF,CAAG,EAAIG,EAERD,CACX,CACA,SAASG,EAAgBC,EAAUC,EAAa,CAC5C,GAAI,EAAED,aAAoBC,GACtB,MAAM,IAAI,UAAU,mCAAmC,CAE/D,CACA,SAASC,EAAkBZ,EAAQa,EAAO,CACtC,QAAShB,EAAI,EAAGA,EAAIgB,EAAM,OAAQhB,IAAK,CACnC,IAAIiB,EAAaD,EAAMhB,CAAC,EACxBiB,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAed,EAAQQ,EAAeM,EAAW,GAAG,EAAGA,CAAU,CAC5E,CACJ,CACA,SAASC,EAAaJ,EAAaK,EAAYC,EAAa,CACxD,OAAID,GAAYJ,EAAkBD,EAAY,UAAWK,CAAU,EAC/DC,GAAaL,EAAkBD,EAAaM,CAAW,EAC3D,OAAO,eAAeN,EAAa,YAAa,CAC5C,SAAU,EACd,CAAC,EACMA,CACX,CACA,SAASH,EAAeU,EAAK,CACzB,IAAId,EAAMe,EAAaD,EAAK,QAAQ,EACpC,OAAO,OAAOd,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CACrD,CACA,SAASe,EAAaC,EAAOC,EAAM,CAC/B,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EACxD,IAAIE,EAAOF,EAAM,OAAO,WAAW,EACnC,GAAIE,IAAS3B,EAAW,CACpB,IAAI4B,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAC5C,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EACpC,MAAM,IAAI,UAAU,8CAA8C,CACtE,CACA,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CACtD,CACA,IAAII,EAAsB,CACtB,YAAa,SAAqBJ,EAAO,CACrC,IAAIK,EAAKL,EAAM,aAAa,wBAAwB,EACpD,OAAO,OAAO,oBAAoB,UAAUK,CAAE,CAClD,EACA,UAAW,CAAC,EAEZ,cAAe,UAAyB,CACpC,OAAO,SAAS,aAAe,UACnC,CACJ,EACI,OAAO,QAAW,WAClB,OAAO,oBAAsBD,GAGjC,IAAIC,EAAK,EACLC,EAAW,CAEX,cAAe,GAGf,mBAAoB,GAEpB,gBAAiB,SAEjB,gBAAiB,GAEjB,kBAAmB,KAEnB,kBAAmB,KAEnB,iBAAkB,CAAC,EAEnB,gBAAiB,GAEjB,YAAa,KAEb,YAAa,GAEb,eAAgB,GAEhB,mBAAoB,KAEpB,aAAc,GAEd,cAAe,CAAC,EAEhB,sBAAuB,SAEvB,mBAAoB,CAAE,KAAM,IAAK,EAEjC,iBAAkB,GAElB,UAAW,GAEX,YAAa,EACjB,EAEIC,EAAwB,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,EAGhJC,EAAc,SAAqBtB,EAAKuB,EAAU,CAElD,QADIC,EAAO,OAAO,KAAKxB,CAAG,EACjBT,EAAI,EAAGA,EAAIiC,EAAK,OAAQjC,IAC7BgC,EAASC,EAAKjC,CAAC,EAAGS,EAAIwB,EAAKjC,CAAC,CAAC,CAAC,CAEtC,EAEIkC,EAAkB,SAAyBC,EAAQ,CACnDJ,EAAY,OAAO,oBAAoB,UAAW,SAASxB,EAAK,CAC5D,OAAO,oBAAoB,UAAUA,CAAG,EAAE4B,CAAM,EAAE,CACtD,CAAC,CACL,EAGIC,EAAoB,UAAW,CAC/B,SAASA,EAAIb,EAAOc,EAAS,CACzB,IAAIC,EAAQ,KACZ1B,EAAgB,KAAMwB,CAAG,EACzB,KAAK,GAAKR,IACV,KAAK,SAAWL,EAChB,KAAK,WAAa,KAClB,KAAK,gBAAkB,KAGvB,IAAIgB,EAAgBF,GAAW,CAAC,EAChC,KAAK,QAAU,CAAC,EAChBN,EAAYF,EAAU,SAAStB,EAAKG,EAAO,CACvC4B,EAAM,QAAQ/B,CAAG,EAAIgC,EAAc,eAAehC,CAAG,EAAIgC,EAAchC,CAAG,EAAIG,CAClF,CAAC,EACD,KAAK,sBAAwB,EAAQa,EAAM,aAAa,aAAa,CACzE,CACA,OAAAL,EAAakB,EAAK,CAAE,CAChB,IAAK,QACL,MAAO,UAAiB,CACpB,IAAII,EAAS,KAET,KAAK,QAAQ,eACb,KAAK,QAAQ,mBAAqB,IAGlC,KAAK,QAAQ,mBACb,KAAK,QAAQ,mBAAqB,IAItC,IAAIC,EAAiB,KAAK,QAAQ,eAAiB,CAAC,KAAK,QAAQ,iBAqBjE,GApBI,CAAC,KAAK,QAAQ,WAAaA,IAC3B,KAAK,QAAQ,UAAY,IAO7B,KAAK,SAAW,oEAAoE,KAAK,UAAU,SAAS,EACxG,KAAK,WAEL,SAAS,KAAK,UAAU,IAAI,YAAY,EAEnC,KAAK,QAAQ,oBACd,KAAK,QAAQ,kBAAoB,SAAS,OAM9C,OAAO,QAAY,IAAa,CAChC,IAAIC,EAAqB,IAAI,QAAQ,SAASC,EAASC,EAAQ,CAC3DJ,EAAO,0BAA4BG,EACnCH,EAAO,yBAA2BI,CACtC,CAAC,EACGC,EAAqB,IAAI,QAAQ,SAASF,EAASC,EAAQ,CAC3DJ,EAAO,0BAA4BG,EACnCH,EAAO,yBAA2BI,CACtC,CAAC,EACD,KAAK,QAAU,QAAQ,IAAI,CAAEF,EAAoBG,CAAmB,CAAC,CACzE,MAEI,KAAK,0BAA4B,KAAK,yBAA2B,UAAW,CAAC,EAC7E,KAAK,0BAA4B,KAAK,yBAA2B,UAAW,CAAC,EAIjF,KAAK,oBAAsB,CAAC,EAE5B,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAEpB,KAAK,cAAc,CACvB,CACJ,EAAG,CACC,IAAK,sBACL,MAAO,UAA+B,CAElC,KAAK,qBAAqB,EAE1B,KAAK,qBAAqB,EAE1B,KAAK,2BAA2B,EAE5B,KAAK,QAAQ,oBACb,KAAK,4BAA4B,GAGjC,KAAK,QAAQ,cAAc,QAAU,KAAK,QAAQ,qBAClD,KAAK,UAAU,KAAK,KAAK,gBAAgB,CAEjD,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,SAAyBC,EAAMC,EAAaC,EAAU,CACrDD,EAAY,OAAS,KAAK,oBAC1B,KAAK,kBAAoBA,EAAY,QAEpC,KAAK,aAAa,eAAeA,CAAW,IAC7C,KAAK,aAAaA,CAAW,EAAI,CAAC,GAGtC,QAAS/C,EAAI,EAAGA,EAAI,KAAK,aAAa+C,CAAW,EAAE,OAAQ/C,IACvD,GAAI,KAAK,aAAa+C,CAAW,EAAE/C,CAAC,IAAM8C,EACtC,OAIR,IAAIG,EAAQD,IAAalD,EAAYkD,EAAW,KAAK,aAAaD,CAAW,EAAE,OAC/E,KAAK,aAAaA,CAAW,EAAEE,CAAK,EAAIH,CAC5C,CACJ,EAAG,CACC,IAAK,uBACL,MAAO,UAAgC,CACnC,GAAI,KAAK,QAAQ,cAAc,OAAQ,CACnC,IAAII,EAAyB,KAAK,QAAQ,cAAc,IAAI,SAASC,EAAS,CAC1E,OAAOA,EAAQ,YAAY,CAC/B,CAAC,EACD,KAAK,UAAYpD,EAAa,OAAO,SAASoD,EAAS,CACnD,OAAOD,EAAuB,QAAQC,EAAQ,IAAI,EAAI,EAC1D,CAAC,CACL,SAAW,KAAK,QAAQ,iBAAiB,OAAQ,CAC7C,IAAIC,EAA4B,KAAK,QAAQ,iBAAiB,IAAI,SAASD,EAAS,CAChF,OAAOA,EAAQ,YAAY,CAC/B,CAAC,EACD,KAAK,UAAYpD,EAAa,OAAO,SAASoD,EAAS,CACnD,OAAOC,EAA0B,QAAQD,EAAQ,IAAI,IAAM,EAC/D,CAAC,CACL,MACI,KAAK,UAAYpD,CAEzB,CACJ,EAAG,CACC,IAAK,8BACL,MAAO,UAAuC,CAC1C,QAASC,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAAK,CAC5C,IAAIqD,EAAM,KAAK,UAAUrD,CAAC,EAAE,KAAK,YAAY,EACzC,KAAK,QAAQ,mBAAmB,eAAeqD,CAAG,IAClD,KAAK,UAAUrD,CAAC,EAAE,KAAO,KAAK,QAAQ,mBAAmBqD,CAAG,EAEpE,CACJ,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,SAA0BC,EAAGC,EAAG,CACnC,OAAID,EAAE,KAAOC,EAAE,KACJ,GAEPD,EAAE,KAAOC,EAAE,KACJ,EAEJ,CACX,CACJ,EAAG,CACC,IAAK,uBACL,MAAO,UAAgC,CACnC,KAAK,kBAAoB,EAEzB,KAAK,UAAY,CAAC,EAElB,KAAK,aAAe,CAAC,EAErB,QAASvD,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAAK,CAC5C,IAAIC,EAAI,KAAK,UAAUD,CAAC,EACnB,KAAK,UAAUC,EAAE,QAAQ,IAC1B,KAAK,UAAUA,EAAE,QAAQ,EAAI,IAEjC,KAAK,gBAAgBA,EAAE,KAAMA,EAAE,SAAUA,EAAE,QAAQ,CACvD,CAKA,QAASuD,EAAK,EAAGA,EAAK,KAAK,UAAU,OAAQA,IAAM,CAC/C,IAAIC,EAAK,KAAK,UAAUD,CAAE,EAE1B,GAAIC,EAAG,UAGH,QAFIC,EAAkB,KAAK,aAAaD,EAAG,QAAQ,EAAE,CAAC,EAE7C,EAAI,EAAG,EAAIA,EAAG,UAAU,OAAQ,IAAK,CAG1C,QAFIE,EAAWF,EAAG,UAAU,CAAC,EAEpBG,EAAI,EAAGA,EAAID,EAAS,OAAQC,IAAK,CACtC,IAAIC,GAAkBJ,EAAG,SAAWE,EAAS,OAAO,EAAGC,CAAC,EAExD,KAAK,gBAAgBF,EAAiBG,EAAe,EACrD,KAAK,gBAAgBJ,EAAG,KAAMI,EAAe,CACjD,CAEA,KAAK,gBAAgBJ,EAAG,KAAMA,EAAG,SAAWE,CAAQ,CACxD,CAER,CACJ,CACJ,EAAG,CACC,IAAK,6BACL,MAAO,UAAsC,CACzC,KAAK,mBAAqB,CAAC,EAC3B,QAAS3D,EAAI,EAAGA,EAAI,KAAK,QAAQ,mBAAmB,OAAQA,IAAK,CAC7D,IAAI+C,EAAc,KAAK,QAAQ,mBAAmB/C,CAAC,EAAE,YAAY,EAC7D8D,EAAc,KAAK,gBAAgBf,EAAa,GAAO,EAAI,EAC3De,GACA,KAAK,mBAAmB,KAAKA,CAAW,CAEhD,CACJ,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmBC,EAAMC,EAAOC,EAAW,CAC9C,IAAIC,EAAK,SAAS,cAAcH,CAAI,EACpC,OAAIC,GACAjC,EAAYiC,EAAO,SAASzD,EAAKG,EAAO,CACpC,OAAOwD,EAAG,aAAa3D,EAAKG,CAAK,CACrC,CAAC,EAEDuD,GACAA,EAAU,YAAYC,CAAE,EAErBA,CACX,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,UAA2B,CAK1B,CAAC,KAAK,SAAS,aAAa,cAAc,GAAK,EAAE,KAAK,SAAS,MAAQ,KAAK,SAAS,KAAK,aAAa,cAAc,IACrH,KAAK,SAAS,aAAa,eAAgB,KAAK,EAEpD,IAAIC,EAAgB,KAAK,QAASC,EAAgBD,EAAc,cAAeE,EAAmBF,EAAc,iBAAkBG,EAAYH,EAAc,UAAWI,EAAkBJ,EAAc,gBAAiBK,EAAcL,EAAc,YAAaM,EAAoBN,EAAc,kBAE/RO,EAAc,MACdN,IACAM,GAAe,wBAEfL,IACAK,GAAe,4BAEfJ,IACAI,GAAe,oBAEfH,IACAG,GAAe,IAAI,OAAOH,CAAe,GAE7C,IAAII,GAAU,KAAK,UAAU,MAAO,CAChC,MAASD,CACb,CAAC,EACD,KAAK,SAAS,WAAW,aAAaC,GAAS,KAAK,QAAQ,EAE5D,IAAIC,GAAqBR,GAAiBE,GAAaD,EAoEvD,GAnEIO,KACA,KAAK,eAAiB,KAAK,UAAU,MAAO,CACxC,MAAS,qBACb,EAAGD,EAAO,GAEdA,GAAQ,YAAY,KAAK,QAAQ,EAI7BC,KACA,KAAK,aAAe,KAAK,UAAU,MAAO1E,EAAc,CACpD,MAAS,oBACb,EAAGkE,GAAiB,CAChB,KAAM,WACN,gBAAiB,UACjB,gBAAiB,OAAO,OAAO,KAAK,GAAI,mBAAmB,EAC3D,gBAAiB,QACjB,aAAc,wBAClB,CAAC,EAAG,KAAK,cAAc,GAEvBE,IACA,KAAK,kBAAoB,KAAK,UAAU,MAAO,CAC3C,MAAS,WACb,EAAG,KAAK,YAAY,GAEpB,KAAK,cAAgB,KAAK,SAAS,UACnC,KAAK,aAAa,aAAa,gBAAiB,MAAM,EAEtDD,IACA,KAAK,iBAAmB,KAAK,UAAU,MAAO,CAC1C,MAAS,yBACb,EAAG,KAAK,YAAY,GAEpBD,IACK,KAAK,SAAS,UAEf,KAAK,aAAa,aAAa,WAAY,GAAG,EAElD,KAAK,cAAgB,KAAK,UAAU,MAAO,CACvC,MAAS,YACb,EAAG,KAAK,YAAY,EAEpB,KAAK,YAAc,KAAK,UAAU,KAAM,CACpC,MAAS,8BACT,GAAI,OAAO,OAAO,KAAK,GAAI,mBAAmB,EAC9C,KAAM,UACN,aAAc,mBAClB,CAAC,EACG,KAAK,mBAAmB,SACxB,KAAK,iBAAiB,KAAK,mBAAoB,iBAAkB,EAAI,EACrE,KAAK,UAAU,KAAM,CACjB,MAAS,eACT,KAAM,YACN,gBAAiB,MACrB,EAAG,KAAK,WAAW,GAEvB,KAAK,iBAAiB,KAAK,UAAW,eAAe,EAEjDK,GACA,KAAK,SAAW,KAAK,UAAU,MAAO,CAClC,MAAS,oBACb,CAAC,EACD,KAAK,SAAS,YAAY,KAAK,WAAW,GAE1C,KAAK,eAAe,YAAY,KAAK,WAAW,GAGpDD,EAAa,CACb,IAAIK,GAAkBL,EAClBT,GAAO,KAAK,SAAS,aAAa,MAAM,EAC5C,GAAIA,GAAM,CACN,IAAI/D,GAAI+D,GAAK,YAAY,GAAG,EAGxB/D,KAAM,KACN6E,GAAkB,GAAG,OAAOd,GAAK,OAAO,EAAG/D,EAAC,EAAG,GAAG,EAAE,OAAO6E,GAAiB,GAAG,EAEvF,CACA,KAAK,YAAc,KAAK,UAAU,QAAS,CACvC,KAAM,SACN,KAAMA,EACV,CAAC,EACDF,GAAQ,YAAY,KAAK,WAAW,CACxC,CACJ,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,SAA0BG,EAAWC,EAAWC,EAAW,CAK9D,QAFIC,EAAM,GAEDjF,EAAI,EAAGA,EAAI8E,EAAU,OAAQ9E,IAAK,CACvC,IAAIC,EAAI6E,EAAU9E,CAAC,EACfkF,EAAWF,EAAY,aAAe,GAE1CC,GAAO,2BAA2B,OAAOF,EAAW,0BAA0B,EAAE,OAAO,KAAK,GAAI,SAAS,EAAE,OAAO9E,EAAE,IAAI,EAAE,OAAOiF,EAAU,kCAAkC,EAAE,OAAOjF,EAAE,SAAU,uBAAuB,EAAE,OAAOA,EAAE,KAAM,0BAA0B,EAEhQ,KAAK,QAAQ,YACbgF,GAAO,yDAAyD,OAAOhF,EAAE,KAAM,gBAAgB,GAGnGgF,GAAO,mCAAmC,OAAOhF,EAAE,KAAM,SAAS,EAClEgF,GAAO,iCAAiC,OAAOhF,EAAE,SAAU,SAAS,EAEpEgF,GAAO,OACX,CACA,KAAK,YAAY,mBAAmB,YAAaA,CAAG,CACxD,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,UAA4B,CAI/B,IAAIE,EAAiB,KAAK,SAAS,aAAa,OAAO,EACnDC,EAAa,KAAK,SAAS,MAC3BC,EAAeF,GAAkBA,EAAe,OAAO,CAAC,IAAM,MAAQ,CAACC,GAAcA,EAAW,OAAO,CAAC,IAAM,KAC9GE,EAAMD,EAAeF,EAAiBC,EACtCG,EAAW,KAAK,aAAaD,CAAG,EAChCE,EAAmB,KAAK,kBAAkBF,CAAG,EAC7CG,EAAiB,KAAK,QAASC,EAAiBD,EAAe,eAAgBE,GAAqBF,EAAe,mBAGnHF,GAAY,CAACC,EACb,KAAK,sBAAsBF,CAAG,EACvBI,IAAmB,SAEtBA,EACA,KAAK,SAASA,EAAe,YAAY,CAAC,EAEtCH,GAAYC,EAEZ,KAAK,SAAS,IAAI,GAGlB,KAAK,eAAiB,KAAK,mBAAmB,OAAS,KAAK,mBAAmB,CAAC,EAAE,KAAO,KAAK,UAAU,CAAC,EAAE,KACtGF,GACD,KAAK,SAAS,KAAK,cAAc,GAKzC,CAACA,GAAOK,KACR,KAAK,SAAS,MAAQ,IAAI,OAAO,KAAK,oBAAoB,QAAQ,IAKtEL,GACA,KAAK,qBAAqBA,CAAG,CAErC,CACJ,EAAG,CACC,IAAK,iBACL,MAAO,UAA0B,CAC7B,KAAK,kBAAkB,EACnB,KAAK,QAAQ,oBACb,KAAK,mBAAmB,EAExB,KAAK,QAAQ,eACb,KAAK,uBAAuB,EAE5B,KAAK,aACL,KAAK,yBAAyB,CAEtC,CACJ,EAAG,CACC,IAAK,2BACL,MAAO,UAAoC,CACvC,IAAIM,EAAS,KACb,KAAK,yBAA2B,UAAW,CACvCA,EAAO,YAAY,MAAQA,EAAO,UAAU,CAChD,EACI,KAAK,SAAS,MACd,KAAK,SAAS,KAAK,iBAAiB,SAAU,KAAK,wBAAwB,CAEnF,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,UAA4B,CAE/B,QADI1B,EAAK,KAAK,SACPA,GAAMA,EAAG,UAAY,SACxBA,EAAKA,EAAG,WAEZ,OAAOA,CACX,CACJ,EAAG,CACC,IAAK,yBACL,MAAO,UAAkC,CACrC,IAAI2B,EAAS,KAIb,KAAK,kBAAoB,SAASC,EAAG,CAE7BD,EAAO,YAAY,UAAU,SAAS,WAAW,EACjDA,EAAO,SAAS,MAAM,EAEtBC,EAAE,eAAe,CAEzB,EACA,IAAIC,EAAQ,KAAK,iBAAiB,EAC9BA,GACAA,EAAM,iBAAiB,QAAS,KAAK,iBAAiB,EAG1D,KAAK,yBAA2B,UAAW,CAInCF,EAAO,YAAY,UAAU,SAAS,WAAW,GAAK,CAACA,EAAO,SAAS,UAAY,CAACA,EAAO,SAAS,UACpGA,EAAO,cAAc,CAE7B,EACA,KAAK,aAAa,iBAAiB,QAAS,KAAK,wBAAwB,EAEzE,KAAK,6BAA+B,SAASC,EAAG,CAC5C,IAAIE,EAAmBH,EAAO,YAAY,UAAU,SAAS,WAAW,EACpEG,GAAoB,CAAE,UAAW,KAAM,YAAa,OAAQ,IAAK,OAAQ,EAAE,QAAQF,EAAE,GAAG,IAAM,KAE9FA,EAAE,eAAe,EAEjBA,EAAE,gBAAgB,EAClBD,EAAO,cAAc,GAGrBC,EAAE,MAAQ,OACVD,EAAO,eAAe,CAE9B,EACA,KAAK,eAAe,iBAAiB,UAAW,KAAK,4BAA4B,CACrF,CACJ,EAAG,CACC,IAAK,gBACL,MAAO,UAAyB,CAC5B,IAAII,EAAS,KAET,KAAK,QAAQ,aAAe,CAAC,OAAO,kBAEhC,OAAO,oBAAoB,cAAc,EACzC,OAAO,oBAAoB,UAAU,KAAK,QAAQ,WAAW,EAG7D,OAAO,iBAAiB,OAAQ,UAAW,CACvC,OAAO,oBAAoB,UAAUA,EAAO,QAAQ,WAAW,CACnE,CAAC,EAGL,KAAK,0BAA0B,EAE/B,KAAK,QAAQ,iBAAmB,OAChC,KAAK,iBAAiB,EAEtB,KAAK,0BAA0B,CAEvC,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,UAA4B,CAK3B,OAAO,oBAAoB,YAC3B,KAAK,kBAAkB,EACf,OAAO,oBAAoB,4BAEnC,OAAO,oBAAoB,0BAA4B,GACnD,OAAO,KAAK,QAAQ,aAAgB,YACpC,KAAK,QAAQ,YAAY,SAASlD,EAAa,CAC3C,OAAO,oBAAoB,YAAcA,EAAY,YAAY,EAOjE,WAAW,UAAW,CAClB,OAAOb,EAAgB,mBAAmB,CAC9C,CAAC,CACL,EAAG,UAAW,CACV,OAAOA,EAAgB,0BAA0B,CACrD,CAAC,EAGb,CACJ,EAAG,CACC,IAAK,oBACL,MAAO,UAA6B,CAChC,IAAIgE,EAAS,KAEb,KAAK,kBAAoB,UAAW,CAC5BA,EAAO,sBAAsBA,EAAO,SAAS,KAAK,GAClDA,EAAO,sBAAsB,CAErC,EACA,KAAK,SAAS,iBAAiB,QAAS,KAAK,iBAAiB,EAE9D,KAAK,sBAAwB,UAAW,CAEpC,WAAWA,EAAO,iBAAiB,CACvC,EACA,KAAK,SAAS,iBAAiB,MAAO,KAAK,qBAAqB,EAChE,KAAK,SAAS,iBAAiB,QAAS,KAAK,qBAAqB,CACtE,CACJ,EAAG,CACC,IAAK,OACL,MAAO,SAAcC,EAAQ,CACzB,IAAIC,EAAM,KAAK,SAAS,aAAa,WAAW,EAChD,OAAOA,GAAOD,EAAO,OAASC,EAAMD,EAAO,OAAO,EAAGC,CAAG,EAAID,CAChE,CACJ,EAAG,CACC,IAAK,qBACL,MAAO,UAA8B,CACjC,IAAIE,EAAS,KAEb,KAAK,yBAA2B,UAAW,CACvCA,EAAO,qBAAqB,CAChC,EACI,KAAK,SAAS,MACd,KAAK,SAAS,KAAK,iBAAiB,SAAU,KAAK,wBAAwB,EAE/E,KAAK,SAAS,iBAAiB,OAAQ,KAAK,wBAAwB,CACxE,CACJ,EAAG,CACC,IAAK,uBACL,MAAO,UAAgC,CACnC,GAAI,KAAK,SAAS,MAAM,OAAO,CAAC,IAAM,IAAK,CACvC,IAAIC,EAAU,KAAK,YAAY,KAAK,SAAS,KAAK,GAE9C,CAACA,GAAW,KAAK,oBAAoB,WAAaA,KAClD,KAAK,SAAS,MAAQ,GAE9B,CACJ,CACJ,EAAG,CACC,IAAK,cACL,MAAO,SAAqBC,EAAG,CAC3B,OAAOA,EAAE,QAAQ,MAAO,EAAE,CAC9B,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkBxC,EAAM,CAE3B,IAAI+B,EAAI,SAAS,YAAY,OAAO,EACpCA,EAAE,UAAU/B,EAAM,GAAM,EAAI,EAE5B,KAAK,SAAS,cAAc+B,CAAC,CACjC,CACJ,EAAG,CACC,IAAK,gBACL,MAAO,UAAyB,CAC5B,KAAK,YAAY,UAAU,OAAO,WAAW,EAC7C,KAAK,aAAa,aAAa,gBAAiB,MAAM,EACtD,KAAK,qBAAqB,EAEtB,KAAK,aACL,KAAK,mBAAmB,KAAK,WAAY,EAAK,EAC9C,KAAK,UAAU,KAAK,WAAY,EAAI,GAGxC,KAAK,uBAAuB,EAE5B,KAAK,cAAc,UAAU,IAAI,gBAAgB,EACjD,KAAK,SAAS,sBAAsB,CACxC,CACJ,EAAG,CACC,IAAK,eACL,MAAO,SAAsB5B,EAAIa,EAAWyB,EAAiB,CACrDA,GAAmB,CAACtC,EAAG,UAAU,SAASa,CAAS,EACnDb,EAAG,UAAU,IAAIa,CAAS,EACnB,CAACyB,GAAmBtC,EAAG,UAAU,SAASa,CAAS,GAC1Db,EAAG,UAAU,OAAOa,CAAS,CAErC,CACJ,EAAG,CACC,IAAK,uBACL,MAAO,UAAgC,CACnC,IAAI0B,EAAS,KAIb,GAHI,KAAK,QAAQ,mBACb,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,EAExD,CAAC,KAAK,SAAU,CAChB,IAAIC,EAAM,KAAK,SAAS,sBAAsB,EAE1CC,EAAY,OAAO,aAAe,SAAS,gBAAgB,UAC3DC,EAAWF,EAAI,IAAMC,EACrBE,EAAiB,KAAK,YAAY,aAElCC,EAAoBF,EAAW,KAAK,SAAS,aAAeC,EAAiBF,EAAY,OAAO,YAChGI,EAAoBH,EAAWC,EAAiBF,EAKpD,GAFA,KAAK,aAAa,KAAK,YAAa,4BAA6B,CAACG,GAAqBC,CAAiB,EAEpG,KAAK,QAAQ,kBAAmB,CAGhC,IAAIC,EAAW,CAACF,GAAqBC,EAAoB,EAAI,KAAK,SAAS,aAE3E,KAAK,SAAS,MAAM,IAAM,GAAG,OAAOH,EAAWI,EAAU,IAAI,EAC7D,KAAK,SAAS,MAAM,KAAO,GAAG,OAAON,EAAI,KAAO,SAAS,KAAK,WAAY,IAAI,EAE9E,KAAK,oBAAsB,UAAW,CAClC,OAAOD,EAAO,eAAe,CACjC,EACA,OAAO,iBAAiB,SAAU,KAAK,mBAAmB,CAC9D,CACJ,CACJ,CACJ,EAAG,CACC,IAAK,sBACL,MAAO,SAA6BtG,EAAQ,CAExC,QADI+D,EAAK/D,EACF+D,GAAMA,IAAO,KAAK,aAAe,CAACA,EAAG,UAAU,SAAS,cAAc,GACzEA,EAAKA,EAAG,WAGZ,OAAOA,IAAO,KAAK,YAAc,KAAOA,CAC5C,CACJ,EAAG,CACC,IAAK,yBACL,MAAO,UAAkC,CACrC,IAAI+C,EAAS,KAGb,KAAK,4BAA8B,SAASnB,EAAG,CAE3C,IAAIoB,EAAWD,EAAO,oBAAoBnB,EAAE,MAAM,EAC9CoB,GACAD,EAAO,mBAAmBC,EAAU,EAAK,CAEjD,EACA,KAAK,YAAY,iBAAiB,YAAa,KAAK,2BAA2B,EAE/E,KAAK,wBAA0B,SAASpB,EAAG,CACvC,IAAIoB,EAAWD,EAAO,oBAAoBnB,EAAE,MAAM,EAC9CoB,GACAD,EAAO,gBAAgBC,CAAQ,CAEvC,EACA,KAAK,YAAY,iBAAiB,QAAS,KAAK,uBAAuB,EAIvE,IAAIC,EAAY,GAChB,KAAK,uBAAyB,UAAW,CAChCA,GACDF,EAAO,eAAe,EAE1BE,EAAY,EAChB,EACA,SAAS,gBAAgB,iBAAiB,QAAS,KAAK,sBAAsB,EAK9E,IAAIC,EAAQ,GACRC,EAAa,KACjB,KAAK,yBAA2B,SAASvB,EAAG,CAGxCA,EAAE,eAAe,EAEbA,EAAE,MAAQ,WAAaA,EAAE,MAAQ,MAAQA,EAAE,MAAQ,aAAeA,EAAE,MAAQ,OAC5EmB,EAAO,iBAAiBnB,EAAE,GAAG,EACtBA,EAAE,MAAQ,QACjBmB,EAAO,gBAAgB,EAChBnB,EAAE,MAAQ,SACjBmB,EAAO,eAAe,EACf,uBAAuB,KAAKnB,EAAE,GAAG,IAEpCuB,GACA,aAAaA,CAAU,EAE3BD,GAAStB,EAAE,IAAI,YAAY,EAC3BmB,EAAO,kBAAkBG,CAAK,EAE9BC,EAAa,WAAW,UAAW,CAC/BD,EAAQ,EACZ,EAAG,GAAG,EAEd,EACA,SAAS,iBAAiB,UAAW,KAAK,wBAAwB,CACtE,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,SAA0B7G,EAAK,CAClC,IAAI+G,EAAO/G,IAAQ,WAAaA,IAAQ,KAAO,KAAK,gBAAgB,uBAAyB,KAAK,gBAAgB,mBAC9G+G,IAEIA,EAAK,UAAU,SAAS,cAAc,IACtCA,EAAO/G,IAAQ,WAAaA,IAAQ,KAAO+G,EAAK,uBAAyBA,EAAK,oBAElF,KAAK,mBAAmBA,EAAM,EAAI,EAE1C,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,UAA2B,CAC1B,KAAK,iBACL,KAAK,gBAAgB,KAAK,eAAe,CAEjD,CACJ,EAAG,CACC,IAAK,oBACL,MAAO,SAA2BF,EAAO,CACrC,QAASpH,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IACvC,GAAI,KAAK,YAAY,KAAK,UAAUA,CAAC,EAAE,KAAMoH,CAAK,EAAG,CACjD,IAAIF,EAAW,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAO,KAAK,UAAUlH,CAAC,EAAE,IAAI,CAAC,EAE/G,KAAK,mBAAmBkH,EAAU,EAAK,EACvC,KAAK,UAAUA,EAAU,EAAI,EAC7B,KACJ,CAER,CACJ,EAAG,CACC,IAAK,cACL,MAAO,SAAqB5D,EAAGC,EAAG,CAC9B,OAAOD,EAAE,OAAO,EAAGC,EAAE,MAAM,EAAE,YAAY,IAAMA,CACnD,CACJ,EAAG,CACC,IAAK,uBACL,MAAO,SAA8BgE,EAAgB,CACjD,IAAIpB,EAASoB,EACb,GAAI,KAAK,QAAQ,iBAAmB,OAAO,mBAAqB,KAAK,oBAAqB,CACtF,IAAIC,EAAc,KAAK,QAAQ,cAAgBrB,EAAO,OAAO,CAAC,IAAM,KAAO,CAAC,KAAK,QAAQ,iBACrFsB,EAAwB,kBAAkB,aAAcC,EAAWD,EAAsB,SAAUE,EAAgBF,EAAsB,cACzIG,EAASJ,EAAcE,EAAWC,EACtCxB,EAAS,kBAAkB,aAAaA,EAAQ,KAAK,oBAAoB,KAAMyB,CAAM,CACzF,CACAzB,EAAS,KAAK,iBAAiBA,CAAM,EACrC,KAAK,SAAS,MAAQA,CAC1B,CACJ,EAAG,CACC,IAAK,wBACL,MAAO,SAA+BoB,EAAgB,CAMlD,IAAIpB,EAASoB,EACTM,EAAmB,KAAK,oBAAoB,SAC5CC,EAASD,IAAqB,IAC9B1B,GAAU2B,GAAU3B,EAAO,OAAO,CAAC,IAAM,MACrCA,EAAO,OAAO,CAAC,IAAM,MACrBA,EAAS,IAAI,OAAOA,CAAM,GAE9BA,EAAS,IAAI,OAAOA,CAAM,GAG1B,KAAK,QAAQ,kBAAoB0B,GAAoB1B,EAAO,OAAO,CAAC,IAAM,MAC1EA,EAAS,IAAI,OAAO0B,CAAgB,EAAE,OAAO1B,CAAM,GAGvD,IAAIZ,EAAW,KAAK,aAAaY,EAAQ,EAAI,EACzCG,EAAU,KAAK,YAAYH,CAAM,EACjCpD,EAAc,KAClB,GAAIwC,EAAU,CACV,IAAIwC,EAAe,KAAK,aAAa,KAAK,YAAYxC,CAAQ,CAAC,EAK3DyC,GAAkBD,EAAa,QAAQ,KAAK,oBAAoB,IAAI,IAAM,IAAMzB,EAAQ,QAAUf,EAAS,OAAS,EACpH0C,GAAyBJ,IAAqB,KAAO,KAAK,kBAAkBvB,CAAO,EAKvF,GAAI,CAAC2B,IAA0B,CAACD,IAG5B,QAASE,GAAI,EAAGA,GAAIH,EAAa,OAAQG,KACrC,GAAIH,EAAaG,EAAC,EAAG,CACjBnF,EAAcgF,EAAaG,EAAC,EAC5B,KACJ,EAGZ,MAAW/B,EAAO,OAAO,CAAC,IAAM,KAAOG,EAAQ,OAI3CvD,EAAc,IACP,CAACoD,GAAUA,IAAW,OAE7BpD,EAAc,KAAK,gBAEvB,OAAIA,IAAgB,KACT,KAAK,SAASA,CAAW,EAE7B,EACX,CACJ,EAAG,CACC,IAAK,oBACL,MAAO,SAA2BoD,EAAQ,CACtC,IAAIG,EAAU,KAAK,YAAYH,CAAM,EACrC,GAAIG,EAAQ,OAAO,CAAC,IAAM,IAAK,CAC3B,IAAI3C,EAAW2C,EAAQ,OAAO,EAAG,CAAC,EAClC,OAAOxE,EAAsB,QAAQ6B,CAAQ,IAAM,EACvD,CACA,MAAO,EACX,CACJ,EAAG,CACC,IAAK,qBACL,MAAO,SAA4BuD,EAAUiB,EAAa,CACtD,IAAIC,EAAW,KAAK,gBAChBA,GACAA,EAAS,UAAU,OAAO,gBAAgB,EAE9C,KAAK,gBAAkBlB,EACvB,KAAK,gBAAgB,UAAU,IAAI,gBAAgB,EACnD,KAAK,aAAa,aAAa,wBAAyBA,EAAS,aAAa,IAAI,CAAC,EAC/EiB,GACA,KAAK,gBAAgB,MAAM,CAEnC,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,SAAyBpF,EAAasF,EAA2BC,EAAW,CAE/E,QADIC,EAAcF,EAA4BtI,EAAe,KAAK,UACzDC,EAAI,EAAGA,EAAIuI,EAAY,OAAQvI,IACpC,GAAIuI,EAAYvI,CAAC,EAAE,OAAS+C,EACxB,OAAOwF,EAAYvI,CAAC,EAG5B,GAAIsI,EACA,OAAO,KAEX,MAAM,IAAI,MAAM,wBAAwB,OAAOvF,EAAa,GAAG,CAAC,CACpE,CACJ,EAAG,CACC,IAAK,WACL,MAAO,SAAkBA,EAAa,CAClC,IAAIyF,EAAiB,KAAK,QAASpE,EAAgBoE,EAAe,cAAenE,EAAmBmE,EAAe,iBAAkBlE,EAAYkE,EAAe,UAC5JC,EAAc,KAAK,oBAAoB,KAAO,KAAK,oBAAsB,CAAC,EAW9E,GATA,KAAK,oBAAsB1F,EAAc,KAAK,gBAAgBA,EAAa,GAAO,EAAK,EAAI,CAAC,EAExF,KAAK,oBAAoB,OACzB,KAAK,eAAiB,KAAK,oBAAoB,MAE/CuB,GACA,KAAK,kBAAkB,aAAa,QAAS,kBAAkB,OAAOvB,CAAW,CAAC,EAEtF,KAAK,sCAAsCA,EAAasB,CAAgB,EACpEA,EAAkB,CAClB,IAAIkB,EAAW,KAAK,oBAAoB,SAAW,IAAI,OAAO,KAAK,oBAAoB,QAAQ,EAAI,GACnG,KAAK,iBAAiB,UAAYA,EAElC,IAAImD,EAAoB,KAAK,aAAa,aAAe,KAAK,4BAA4B,EAE1F,KAAK,SAAS,MAAM,YAAc,GAAG,OAAOA,EAAoB,EAAG,IAAI,CAC3E,CAIA,GAFA,KAAK,mBAAmB,EAEpBtE,EAAe,CACf,IAAIgE,GAAW,KAAK,WAKpB,GAJIA,KACAA,GAAS,UAAU,OAAO,aAAa,EACvCA,GAAS,aAAa,gBAAiB,OAAO,GAE9CrF,EAAa,CAEb,IAAI4F,GAAW,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAO5F,EAAa,YAAY,CAAC,GAAK,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAOA,CAAW,CAAC,EAC5M4F,GAAS,aAAa,gBAAiB,MAAM,EAC7CA,GAAS,UAAU,IAAI,aAAa,EACpC,KAAK,WAAaA,EACtB,CACJ,CAEA,OAAOF,EAAY,OAAS1F,CAChC,CACJ,EAAG,CACC,IAAK,wCACL,MAAO,SAA+CA,EAAasB,EAAkB,CACjF,GAAK,KAAK,aAGV,KAAIuE,EACA7F,GAAe,CAACsB,EAChBuE,EAAQ,GAAG,OAAO,KAAK,oBAAoB,KAAM,KAAK,EAAE,OAAO,KAAK,oBAAoB,QAAQ,EACzF7F,EAGP6F,EAAQ,KAAK,oBAAoB,KAEjCA,EAAQ,UAEZ,KAAK,aAAa,aAAa,QAASA,CAAK,EACjD,CACJ,EAAG,CACC,IAAK,8BACL,MAAO,UAAuC,CAG1C,IAAIC,EAAiB,KAAK,SAAS,WAAW,UAAU,EACxDA,EAAe,MAAM,WAAa,SAClC,SAAS,KAAK,YAAYA,CAAc,EACxC,IAAIC,EAAsB,KAAK,eAAe,UAAU,EACxDD,EAAe,YAAYC,CAAmB,EAC9C,IAAIC,EAAoB,KAAK,aAAa,UAAU,EAAI,EACxDD,EAAoB,YAAYC,CAAiB,EACjD,IAAIC,EAAQD,EAAkB,YAC9B,OAAAF,EAAe,WAAW,YAAYA,CAAc,EAC7CG,CACX,CACJ,EAAG,CACC,IAAK,qBACL,MAAO,UAA8B,CACjC,IAAIC,EAAuB,KAAK,QAAQ,kBAAoB,cAAgB,CAAC,KAAK,uBAAyB,KAAK,QAAQ,kBAAoB,SAC5I,GAAI,OAAO,mBAAqBA,EAAsB,CAClD,IAAIC,EAAa,kBAAkB,WAAW,KAAK,QAAQ,qBAAqB,EAC5EC,EAAc,KAAK,oBAAoB,KAAO,kBAAkB,iBAAiB,KAAK,oBAAoB,KAAM,KAAK,QAAQ,aAAcD,CAAU,EAAI,GAC7JC,EAAc,KAAK,iBAAiBA,CAAW,EAC3C,OAAO,KAAK,QAAQ,mBAAsB,aAC1CA,EAAc,KAAK,QAAQ,kBAAkBA,EAAa,KAAK,mBAAmB,GAEtF,KAAK,SAAS,aAAa,cAAeA,CAAW,CACzD,CACJ,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,SAAyBjC,EAAU,CAEtC,IAAIkC,EAAc,KAAK,SAASlC,EAAS,aAAa,mBAAmB,CAAC,EAC1E,KAAK,eAAe,EACpB,KAAK,gBAAgBA,EAAS,aAAa,gBAAgB,CAAC,EAE5D,KAAK,SAAS,MAAM,EAGpB,IAAImC,EAAM,KAAK,SAAS,MAAM,OAC9B,KAAK,SAAS,kBAAkBA,EAAKA,CAAG,EACpCD,GACA,KAAK,sBAAsB,CAEnC,CACJ,EAAG,CACC,IAAK,iBACL,MAAO,UAA0B,CAC7B,KAAK,YAAY,UAAU,IAAI,WAAW,EAC1C,KAAK,aAAa,aAAa,gBAAiB,OAAO,EACvD,KAAK,aAAa,gBAAgB,uBAAuB,EAEzD,KAAK,cAAc,UAAU,OAAO,gBAAgB,EAEpD,SAAS,oBAAoB,UAAW,KAAK,wBAAwB,EACrE,SAAS,gBAAgB,oBAAoB,QAAS,KAAK,sBAAsB,EACjF,KAAK,YAAY,oBAAoB,YAAa,KAAK,2BAA2B,EAClF,KAAK,YAAY,oBAAoB,QAAS,KAAK,uBAAuB,EAEtE,KAAK,QAAQ,oBACR,KAAK,UACN,OAAO,oBAAoB,SAAU,KAAK,mBAAmB,EAE7D,KAAK,SAAS,YACd,KAAK,SAAS,WAAW,YAAY,KAAK,QAAQ,GAG1D,KAAK,SAAS,uBAAuB,CACzC,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmBE,EAASC,EAAQ,CACvC,IAAItF,EAAY,KAAK,YAEjB0C,EAAY,OAAO,aAAe,SAAS,gBAAgB,UAC3D6C,EAAkBvF,EAAU,aAC5BwF,EAAexF,EAAU,sBAAsB,EAAE,IAAM0C,EACvD+C,EAAkBD,EAAeD,EACjCG,EAAgBL,EAAQ,aACxBM,GAAaN,EAAQ,sBAAsB,EAAE,IAAM3C,EACnDkD,GAAgBD,GAAaD,EAC7BG,GAAeF,GAAaH,EAAexF,EAAU,UACrD8F,GAAeP,EAAkB,EAAIG,EAAgB,EACzD,GAAIC,GAAaH,EAETF,IACAO,IAAgBC,IAEpB9F,EAAU,UAAY6F,WACfD,GAAgBH,EAAiB,CAEpCH,IACAO,IAAgBC,IAEpB,IAAIC,GAAmBR,EAAkBG,EACzC1F,EAAU,UAAY6F,GAAeE,EACzC,CACJ,CACJ,EAAG,CACC,IAAK,kBACL,MAAO,SAAyBC,EAAiB,CAC7C,IAAIC,EAAW,KAAK,SAAS,MAEzBC,EAAc,IAAI,OAAOF,CAAe,EACxCG,EACJ,GAAIF,EAAS,OAAO,CAAC,IAAM,IAAK,CAE5B,IAAIG,EAAe,KAAK,aAAaH,CAAQ,EACzCG,EAEAD,EAAYF,EAAS,QAAQG,EAAcF,CAAW,EAItDC,EAAYD,EAEhB,KAAK,SAAS,MAAQC,CAC1B,MAAW,KAAK,QAAQ,qBAChBF,EAEAE,EAAYD,EAAcD,EAE1BE,EAAYD,EAEhB,KAAK,SAAS,MAAQC,EAE9B,CACJ,EAAG,CACC,IAAK,eACL,MAAO,SAAsBjE,EAAQmE,EAAiB,CAClD,IAAI/E,EAAW,GAEf,GAAIY,EAAO,OAAO,CAAC,IAAM,IAGrB,QAFIoE,EAAe,GAEVvK,EAAI,EAAGA,EAAImG,EAAO,OAAQnG,IAAK,CACpC,IAAIC,EAAIkG,EAAO,OAAOnG,CAAC,EAEvB,GAAI,CAAC,MAAM,SAASC,EAAG,EAAE,CAAC,EAAG,CAGzB,GAFAsK,GAAgBtK,EAEZqK,EACI,KAAK,aAAaC,CAAY,IAE9BhF,EAAWY,EAAO,OAAO,EAAGnG,EAAI,CAAC,WAGjC,KAAK,UAAUuK,CAAY,EAAG,CAC9BhF,EAAWY,EAAO,OAAO,EAAGnG,EAAI,CAAC,EAEjC,KACJ,CAGJ,GAAIuK,EAAa,SAAW,KAAK,kBAC7B,KAER,CACJ,CAEJ,OAAOhF,CACX,CACJ,EAAG,CACC,IAAK,iBACL,MAAO,UAA0B,CAC7B,IAAID,EAAM,KAAK,SAAS,MAAM,KAAK,EAC/BC,EAAW,KAAK,oBAAoB,SACpCiF,EACAC,EAAa,KAAK,YAAYnF,CAAG,EACrC,OAAI,KAAK,QAAQ,kBAAoBA,EAAI,OAAO,CAAC,IAAM,KAAOC,GAAYkF,EAEtED,EAAS,IAAI,OAAOjF,CAAQ,EAE5BiF,EAAS,GAENA,EAASlF,CACpB,CACJ,EAAG,CACC,IAAK,mBACL,MAAO,SAA0BiC,EAAgB,CAC7C,IAAIpB,EAASoB,EACb,GAAI,KAAK,QAAQ,iBAAkB,CAC/B,IAAIhC,EAAW,KAAK,aAAaY,CAAM,EAEvC,GAAIZ,EAAU,CAEVA,EAAW,IAAI,OAAO,KAAK,oBAAoB,QAAQ,EAKvD,IAAImF,EAAQvE,EAAOZ,EAAS,MAAM,IAAM,KAAOY,EAAOZ,EAAS,MAAM,IAAM,IAAMA,EAAS,OAAS,EAAIA,EAAS,OAChHY,EAASA,EAAO,OAAOuE,CAAK,CAChC,CACJ,CACA,OAAO,KAAK,KAAKvE,CAAM,CAC3B,CACJ,EAAG,CACC,IAAK,wBACL,MAAO,UAAiC,CACpC,KAAK,SAAS,eAAe,CACjC,CACJ,EAAG,CACC,IAAK,oBACL,MAAO,UAA6B,CAC5B,KAAK,QAAQ,iBAAmB,SAGhC,KAAK,eAAiB,OAAO,oBAAoB,YAE5C,KAAK,SAAS,OACf,KAAK,WAAW,KAAK,cAAc,EAEvC,KAAK,0BAA0B,EAEvC,CACJ,EAAG,CACC,IAAK,cACL,MAAO,UAAuB,CAEtB,OAAO,oBAEH,KAAK,SAAS,OACd,KAAK,qBAAqB,KAAK,SAAS,KAAK,EAEjD,KAAK,mBAAmB,GAE5B,KAAK,0BAA0B,CACnC,CACJ,EAAG,CACC,IAAK,UACL,MAAO,UAAmB,CACtB,IAAIwE,EAAO,KAAK,SAAS,KACzB,GAAI,KAAK,QAAQ,cAAe,CAE5B,KAAK,eAAe,EACpB,KAAK,aAAa,oBAAoB,QAAS,KAAK,wBAAwB,EAC5E,KAAK,eAAe,oBAAoB,UAAW,KAAK,4BAA4B,EAEpF,IAAI5E,EAAQ,KAAK,iBAAiB,EAC9BA,GACAA,EAAM,oBAAoB,QAAS,KAAK,iBAAiB,CAEjE,CAEI,KAAK,aAAe4E,GACpBA,EAAK,oBAAoB,SAAU,KAAK,wBAAwB,EAGhE,KAAK,QAAQ,qBACTA,GACAA,EAAK,oBAAoB,SAAU,KAAK,wBAAwB,EAEpE,KAAK,SAAS,oBAAoB,OAAQ,KAAK,wBAAwB,GAG3E,KAAK,SAAS,oBAAoB,QAAS,KAAK,iBAAiB,EACjE,KAAK,SAAS,oBAAoB,MAAO,KAAK,qBAAqB,EACnE,KAAK,SAAS,oBAAoB,QAAS,KAAK,qBAAqB,EAErE,KAAK,SAAS,gBAAgB,wBAAwB,EAEtD,IAAIhG,EAAU,KAAK,SAAS,WAC5BA,EAAQ,WAAW,aAAa,KAAK,SAAUA,CAAO,EACtDA,EAAQ,WAAW,YAAYA,CAAO,EACtC,OAAO,OAAO,oBAAoB,UAAU,KAAK,EAAE,CACvD,CACJ,EAAG,CACC,IAAK,eACL,MAAO,UAAwB,CAC3B,OAAI,OAAO,kBACA,kBAAkB,aAAa,KAAK,eAAe,EAAG,KAAK,oBAAoB,IAAI,EAEvF,EACX,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmBiD,EAAQ,CAC9B,GAAI,OAAO,kBAAmB,CAC1B,IAAI9E,EAAO,KAAK,oBAAoB,KACpC,OAAO,kBAAkB,aAAa,KAAK,eAAe,EAAGA,EAAM8E,CAAM,CAC7E,CACA,MAAO,EACX,CACJ,EAAG,CACC,IAAK,gBACL,MAAO,UAAyB,CAC5B,OAAI,OAAO,kBACA,kBAAkB,cAAc,KAAK,eAAe,EAAG,KAAK,oBAAoB,IAAI,EAExF,GACX,CACJ,EAAG,CACC,IAAK,yBACL,MAAO,UAAkC,CACrC,OAAO,KAAK,mBAChB,CACJ,EAAG,CACC,IAAK,qBACL,MAAO,UAA8B,CACjC,GAAI,OAAO,kBAAmB,CAC1B,IAAI9E,EAAO,KAAK,oBAAoB,KACpC,OAAO,kBAAkB,mBAAmB,KAAK,eAAe,EAAGA,CAAI,CAC3E,CACA,MAAO,GACX,CACJ,EAAG,CACC,IAAK,gBACL,MAAO,UAAyB,CAC5B,IAAIwC,EAAM,KAAK,eAAe,EAAE,KAAK,EACrC,OAAO,OAAO,kBAAoB,kBAAkB,cAAcA,EAAK,KAAK,oBAAoB,IAAI,EAAI,IAC5G,CACJ,EAAG,CACC,IAAK,aACL,MAAO,SAAoBsF,EAAqB,CAC5C,IAAI7H,EAAc6H,EAAoB,YAAY,EAE9C,KAAK,oBAAoB,OAAS7H,IAClC,KAAK,SAASA,CAAW,EACzB,KAAK,gBAAgB,KAAK,oBAAoB,QAAQ,EACtD,KAAK,sBAAsB,EAEnC,CACJ,EAAG,CACC,IAAK,YACL,MAAO,SAAmBoD,EAAQ,CAG9B,IAAIiD,EAAc,KAAK,sBAAsBjD,CAAM,EACnD,KAAK,qBAAqBA,CAAM,EAC5BiD,GACA,KAAK,sBAAsB,CAEnC,CACJ,EAAG,CACC,IAAK,2BACL,MAAO,SAAkCyB,EAAM,CAC3C,KAAK,QAAQ,sBAAwBA,EACrC,KAAK,mBAAmB,CAC5B,CACJ,CAAE,CAAC,EACIzI,CACX,EAAE,EAKFT,EAAoB,eAAiB,UAAW,CAC5C,OAAO5B,CACX,EAEA,IAAI+K,EAAe,SAAsBC,EAAMC,EAAeC,EAAe,CAEzE,IAAIC,EAAS,SAAS,cAAc,QAAQ,EAC5CA,EAAO,OAAS,UAAW,CACvBhJ,EAAgB,aAAa,EACzB8I,GACAA,EAAc,CAEtB,EACAE,EAAO,QAAU,UAAW,CACxBhJ,EAAgB,0BAA0B,EACtC+I,GACAA,EAAc,CAEtB,EACAC,EAAO,UAAY,iBACnBA,EAAO,MAAQ,GACfA,EAAO,IAAMH,EACb,SAAS,KAAK,YAAYG,CAAM,CACpC,EAEA,OAAAvJ,EAAoB,UAAY,SAASoJ,EAAM,CAK3C,GAAI,CAAC,OAAO,mBAAqB,CAAC,OAAO,oBAAoB,0BAA2B,CAIpF,GAFA,OAAO,oBAAoB,0BAA4B,GAEnD,OAAO,QAAY,IACnB,OAAO,IAAI,QAAQ,SAASpI,EAASC,EAAQ,CACzC,OAAOkI,EAAaC,EAAMpI,EAASC,CAAM,CAC7C,CAAC,EAELkI,EAAaC,CAAI,CACrB,CACA,OAAO,IACX,EAEApJ,EAAoB,SAAWE,EAE/BF,EAAoB,QAAU,SAEvB,SAASJ,EAAOc,EAAS,CAC5B,IAAI8I,EAAM,IAAI/I,EAAIb,EAAOc,CAAO,EAChC,OAAA8I,EAAI,MAAM,EACV5J,EAAM,aAAa,yBAA0B4J,EAAI,EAAE,EACnD,OAAO,oBAAoB,UAAUA,EAAI,EAAE,EAAIA,EACxCA,CACX,CACJ,EAAE,CACN,CAAC,IClgDD,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAGAA,GAAO,QAAU,OCHjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAiBA,IAAIC,GAAS,UAAW,CAWtB,IAAIA,EAAS,SAASC,EAAYC,EAAsB,CAEtD,IAAIC,EAAO,IACPC,EAAO,GAEPC,EAAcJ,EACdK,EAAwBC,EAAuBL,CAAoB,EACnEM,EAAW,KACXC,EAAe,EACfC,EAAa,KACbC,EAAY,CAAC,EAEbC,EAAQ,CAAC,EAETC,GAAW,SAASC,EAAMC,EAAa,CAEzCN,EAAeJ,EAAc,EAAI,GACjCG,EAAW,SAASQ,EAAa,CAE/B,QADIC,EAAU,IAAI,MAAMD,CAAW,EAC1BE,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAAG,CAC7CD,EAAQC,CAAG,EAAI,IAAI,MAAMF,CAAW,EACpC,QAASG,GAAM,EAAGA,GAAMH,EAAaG,IAAO,EAC1CF,EAAQC,CAAG,EAAEC,EAAG,EAAI,IAExB,CACA,OAAOF,CACT,EAAER,CAAY,EAEdW,GAA0B,EAAG,CAAC,EAC9BA,GAA0BX,EAAe,EAAG,CAAC,EAC7CW,GAA0B,EAAGX,EAAe,CAAC,EAC7CY,GAA2B,EAC3BC,GAAmB,EACnBC,GAAcT,EAAMC,CAAW,EAE3BV,GAAe,GACjBmB,GAAgBV,CAAI,EAGlBJ,GAAc,OAChBA,EAAae,GAAWpB,EAAaC,EAAuBK,CAAS,GAGvEe,GAAQhB,EAAYK,CAAW,CACjC,EAEIK,GAA4B,SAASF,EAAKC,EAAK,CAEjD,QAASQ,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAE5B,GAAI,EAAAT,EAAMS,GAAK,IAAMlB,GAAgBS,EAAMS,GAE3C,QAASC,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAExBT,EAAMS,GAAK,IAAMnB,GAAgBU,EAAMS,IAErC,GAAKD,GAAKA,GAAK,IAAMC,GAAK,GAAKA,GAAK,IAClC,GAAKA,GAAKA,GAAK,IAAMD,GAAK,GAAKA,GAAK,IACpC,GAAKA,GAAKA,GAAK,GAAK,GAAKC,GAAKA,GAAK,EACzCpB,EAASU,EAAMS,CAAC,EAAER,EAAMS,CAAC,EAAI,GAE7BpB,EAASU,EAAMS,CAAC,EAAER,EAAMS,CAAC,EAAI,GAIrC,EAEIC,GAAqB,UAAW,CAKlC,QAHIC,EAAe,EACfC,EAAU,EAELC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAE7BnB,GAAS,GAAMmB,CAAC,EAEhB,IAAIC,EAAYC,EAAO,aAAatB,CAAK,GAErCoB,GAAK,GAAKF,EAAeG,KAC3BH,EAAeG,EACfF,EAAUC,EAEd,CAEA,OAAOD,CACT,EAEIT,GAAqB,UAAW,CAElC,QAASK,EAAI,EAAGA,EAAIlB,EAAe,EAAGkB,GAAK,EACrCnB,EAASmB,CAAC,EAAE,CAAC,GAAK,OAGtBnB,EAASmB,CAAC,EAAE,CAAC,EAAKA,EAAI,GAAK,GAG7B,QAASC,EAAI,EAAGA,EAAInB,EAAe,EAAGmB,GAAK,EACrCpB,EAAS,CAAC,EAAEoB,CAAC,GAAK,OAGtBpB,EAAS,CAAC,EAAEoB,CAAC,EAAKA,EAAI,GAAK,EAE/B,EAEIP,GAA6B,UAAW,CAI1C,QAFIc,EAAMD,EAAO,mBAAmB7B,CAAW,EAEtC2B,EAAI,EAAGA,EAAIG,EAAI,OAAQH,GAAK,EAEnC,QAASI,EAAI,EAAGA,EAAID,EAAI,OAAQC,GAAK,EAAG,CAEtC,IAAIlB,EAAMiB,EAAIH,CAAC,EACXb,EAAMgB,EAAIC,CAAC,EAEf,GAAI5B,EAASU,CAAG,EAAEC,CAAG,GAAK,KAI1B,QAASQ,GAAI,GAAIA,IAAK,EAAGA,IAAK,EAE5B,QAASC,GAAI,GAAIA,IAAK,EAAGA,IAAK,EAExBD,IAAK,IAAMA,IAAK,GAAKC,IAAK,IAAMA,IAAK,GACjCD,IAAK,GAAKC,IAAK,EACrBpB,EAASU,EAAMS,EAAC,EAAER,EAAMS,EAAC,EAAI,GAE7BpB,EAASU,EAAMS,EAAC,EAAER,EAAMS,EAAC,EAAI,EAIrC,CAEJ,EAEIJ,GAAkB,SAASV,EAAM,CAInC,QAFIuB,EAAOH,EAAO,iBAAiB7B,CAAW,EAErC2B,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAIM,EAAO,CAACxB,IAAWuB,GAAQL,EAAK,IAAM,EAC1CxB,EAAS,KAAK,MAAMwB,EAAI,CAAC,CAAC,EAAEA,EAAI,EAAIvB,EAAe,EAAI,CAAC,EAAI6B,CAC9D,CAEA,QAASN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAIM,EAAO,CAACxB,IAAWuB,GAAQL,EAAK,IAAM,EAC1CxB,EAASwB,EAAI,EAAIvB,EAAe,EAAI,CAAC,EAAE,KAAK,MAAMuB,EAAI,CAAC,CAAC,EAAIM,CAC9D,CACF,EAEIf,GAAgB,SAAST,EAAMC,EAAa,CAM9C,QAJIwB,EAAQjC,GAAyB,EAAKS,EACtCsB,EAAOH,EAAO,eAAeK,CAAI,EAG5BP,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAE9B,IAAIM,GAAO,CAACxB,IAAWuB,GAAQL,EAAK,IAAM,EAEtCA,EAAI,EACNxB,EAASwB,CAAC,EAAE,CAAC,EAAIM,GACRN,EAAI,EACbxB,EAASwB,EAAI,CAAC,EAAE,CAAC,EAAIM,GAErB9B,EAASC,EAAe,GAAKuB,CAAC,EAAE,CAAC,EAAIM,EAEzC,CAGA,QAASN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAE9B,IAAIM,GAAO,CAACxB,IAAWuB,GAAQL,EAAK,IAAM,EAEtCA,EAAI,EACNxB,EAAS,CAAC,EAAEC,EAAeuB,EAAI,CAAC,EAAIM,GAC3BN,EAAI,EACbxB,EAAS,CAAC,EAAE,GAAKwB,EAAI,EAAI,CAAC,EAAIM,GAE9B9B,EAAS,CAAC,EAAE,GAAKwB,EAAI,CAAC,EAAIM,EAE9B,CAGA9B,EAASC,EAAe,CAAC,EAAE,CAAC,EAAK,CAACK,CACpC,EAEIY,GAAU,SAASa,EAAMxB,EAAa,CAQxC,QANIyB,EAAM,GACNtB,EAAMT,EAAe,EACrBgC,EAAW,EACXC,GAAY,EACZC,GAAWT,EAAO,gBAAgBnB,CAAW,EAExCI,GAAMV,EAAe,EAAGU,GAAM,EAAGA,IAAO,EAI/C,IAFIA,IAAO,IAAGA,IAAO,KAER,CAEX,QAASS,GAAI,EAAGA,GAAI,EAAGA,IAAK,EAE1B,GAAIpB,EAASU,CAAG,EAAEC,GAAMS,EAAC,GAAK,KAAM,CAElC,IAAIgB,GAAO,GAEPF,GAAYH,EAAK,SACnBK,IAAYL,EAAKG,EAAS,IAAMD,EAAY,IAAM,GAGpD,IAAII,GAAOF,GAASzB,EAAKC,GAAMS,EAAC,EAE5BiB,KACFD,GAAO,CAACA,IAGVpC,EAASU,CAAG,EAAEC,GAAMS,EAAC,EAAIgB,GACzBH,GAAY,EAERA,GAAY,KACdC,IAAa,EACbD,EAAW,EAEf,CAKF,GAFAvB,GAAOsB,EAEHtB,EAAM,GAAKT,GAAgBS,EAAK,CAClCA,GAAOsB,EACPA,EAAM,CAACA,EACP,KACF,CACF,CAEJ,EAEIM,GAAc,SAASC,EAAQC,EAAU,CAU3C,QARIC,EAAS,EAETC,EAAa,EACbC,EAAa,EAEbC,GAAS,IAAI,MAAMJ,EAAS,MAAM,EAClCK,GAAS,IAAI,MAAML,EAAS,MAAM,EAE7BrB,GAAI,EAAGA,GAAIqB,EAAS,OAAQrB,IAAK,EAAG,CAE3C,IAAI2B,GAAUN,EAASrB,EAAC,EAAE,UACtB4B,GAAUP,EAASrB,EAAC,EAAE,WAAa2B,GAEvCJ,EAAa,KAAK,IAAIA,EAAYI,EAAO,EACzCH,EAAa,KAAK,IAAIA,EAAYI,EAAO,EAEzCH,GAAOzB,EAAC,EAAI,IAAI,MAAM2B,EAAO,EAE7B,QAAStB,GAAI,EAAGA,GAAIoB,GAAOzB,EAAC,EAAE,OAAQK,IAAK,EACzCoB,GAAOzB,EAAC,EAAEK,EAAC,EAAI,IAAOe,EAAO,UAAU,EAAEf,GAAIiB,CAAM,EAErDA,GAAUK,GAEV,IAAIE,GAAStB,EAAO,0BAA0BqB,EAAO,EACjDE,GAAUC,EAAaN,GAAOzB,EAAC,EAAG6B,GAAO,UAAU,EAAI,CAAC,EAExDG,GAAUF,GAAQ,IAAID,EAAM,EAChCH,GAAO1B,EAAC,EAAI,IAAI,MAAM6B,GAAO,UAAU,EAAI,CAAC,EAC5C,QAASxB,GAAI,EAAGA,GAAIqB,GAAO1B,EAAC,EAAE,OAAQK,IAAK,EAAG,CAC5C,IAAI4B,GAAW5B,GAAI2B,GAAQ,UAAU,EAAIN,GAAO1B,EAAC,EAAE,OACnD0B,GAAO1B,EAAC,EAAEK,EAAC,EAAK4B,IAAY,EAAID,GAAQ,MAAMC,EAAQ,EAAI,CAC5D,CACF,CAGA,QADIC,GAAiB,EACZ7B,GAAI,EAAGA,GAAIgB,EAAS,OAAQhB,IAAK,EACxC6B,IAAkBb,EAAShB,EAAC,EAAE,WAMhC,QAHIO,GAAO,IAAI,MAAMsB,EAAc,EAC/BC,GAAQ,EAEH9B,GAAI,EAAGA,GAAIkB,EAAYlB,IAAK,EACnC,QAASL,GAAI,EAAGA,GAAIqB,EAAS,OAAQrB,IAAK,EACpCK,GAAIoB,GAAOzB,EAAC,EAAE,SAChBY,GAAKuB,EAAK,EAAIV,GAAOzB,EAAC,EAAEK,EAAC,EACzB8B,IAAS,GAKf,QAAS9B,GAAI,EAAGA,GAAImB,EAAYnB,IAAK,EACnC,QAASL,GAAI,EAAGA,GAAIqB,EAAS,OAAQrB,IAAK,EACpCK,GAAIqB,GAAO1B,EAAC,EAAE,SAChBY,GAAKuB,EAAK,EAAIT,GAAO1B,EAAC,EAAEK,EAAC,EACzB8B,IAAS,GAKf,OAAOvB,EACT,EAEId,GAAa,SAASxB,EAAYC,EAAsB6D,EAAU,CAMpE,QAJIf,EAAWgB,EAAU,YAAY/D,EAAYC,CAAoB,EAEjE6C,EAASkB,EAAY,EAEhBjC,GAAI,EAAGA,GAAI+B,EAAS,OAAQ/B,IAAK,EAAG,CAC3C,IAAIO,GAAOwB,EAAS/B,EAAC,EACrBe,EAAO,IAAIR,GAAK,QAAQ,EAAG,CAAC,EAC5BQ,EAAO,IAAIR,GAAK,UAAU,EAAGL,EAAO,gBAAgBK,GAAK,QAAQ,EAAGtC,CAAU,CAAE,EAChFsC,GAAK,MAAMQ,CAAM,CACnB,CAIA,QADImB,GAAiB,EACZlC,GAAI,EAAGA,GAAIgB,EAAS,OAAQhB,IAAK,EACxCkC,IAAkBlB,EAAShB,EAAC,EAAE,UAGhC,GAAIe,EAAO,gBAAgB,EAAImB,GAAiB,EAC9C,KAAM,0BACFnB,EAAO,gBAAgB,EACvB,IACAmB,GAAiB,EACjB,IASN,IALInB,EAAO,gBAAgB,EAAI,GAAKmB,GAAiB,GACnDnB,EAAO,IAAI,EAAG,CAAC,EAIVA,EAAO,gBAAgB,EAAI,GAAK,GACrCA,EAAO,OAAO,EAAK,EAIrB,KAEM,EAAAA,EAAO,gBAAgB,GAAKmB,GAAiB,IAGjDnB,EAAO,IAAI5C,EAAM,CAAC,EAEd4C,EAAO,gBAAgB,GAAKmB,GAAiB,KAGjDnB,EAAO,IAAI3C,EAAM,CAAC,EAGpB,OAAO0C,GAAYC,EAAQC,CAAQ,CACrC,EAEApC,EAAM,QAAU,SAAS2B,EAAM4B,EAAM,CAEnCA,EAAOA,GAAQ,OAEf,IAAIC,EAAU,KAEd,OAAOD,EAAM,CACb,IAAK,UACHC,EAAUC,EAAS9B,CAAI,EACvB,MACF,IAAK,eACH6B,EAAUE,EAAW/B,CAAI,EACzB,MACF,IAAK,OACH6B,EAAUG,EAAWhC,CAAI,EACzB,MACF,IAAK,QACH6B,EAAUI,EAAQjC,CAAI,EACtB,MACF,QACE,KAAM,QAAU4B,CAClB,CAEAxD,EAAU,KAAKyD,CAAO,EACtB1D,EAAa,IACf,EAEAE,EAAM,OAAS,SAASM,EAAKC,EAAK,CAChC,GAAID,EAAM,GAAKT,GAAgBS,GAAOC,EAAM,GAAKV,GAAgBU,EAC/D,MAAMD,EAAM,IAAMC,EAEpB,OAAOX,EAASU,CAAG,EAAEC,CAAG,CAC1B,EAEAP,EAAM,eAAiB,UAAW,CAChC,OAAOH,CACT,EAEAG,EAAM,KAAO,UAAW,CACtB,GAAIP,EAAc,EAAG,CAGnB,QAFIJ,EAAa,EAEVA,EAAa,GAAIA,IAAc,CAIpC,QAHI+C,EAAWgB,EAAU,YAAY/D,EAAYK,CAAqB,EAClEyC,EAASkB,EAAY,EAEhBjC,EAAI,EAAGA,EAAIrB,EAAU,OAAQqB,IAAK,CACzC,IAAIO,EAAO5B,EAAUqB,CAAC,EACtBe,EAAO,IAAIR,EAAK,QAAQ,EAAG,CAAC,EAC5BQ,EAAO,IAAIR,EAAK,UAAU,EAAGL,EAAO,gBAAgBK,EAAK,QAAQ,EAAGtC,CAAU,CAAE,EAChFsC,EAAK,MAAMQ,CAAM,CACnB,CAGA,QADImB,GAAiB,EACZlC,EAAI,EAAGA,EAAIgB,EAAS,OAAQhB,IACnCkC,IAAkBlB,EAAShB,CAAC,EAAE,UAGhC,GAAIe,EAAO,gBAAgB,GAAKmB,GAAiB,EAC/C,KAEJ,CAEA7D,EAAcJ,CAChB,CAEAY,GAAS,GAAOgB,GAAmB,CAAE,CACvC,EAEAjB,EAAM,eAAiB,SAAS6D,EAAUC,EAAQ,CAEhDD,EAAWA,GAAY,EACvBC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAExD,IAAIC,EAAS,GAEbA,GAAU,iBACVA,GAAU,0CACVA,GAAU,8BACVA,GAAU,0BAA4BD,EAAS,MAC/CC,GAAU,KACVA,GAAU,UAEV,QAAShD,EAAI,EAAGA,EAAIf,EAAM,eAAe,EAAGe,GAAK,EAAG,CAElDgD,GAAU,OAEV,QAAS/C,EAAI,EAAGA,EAAIhB,EAAM,eAAe,EAAGgB,GAAK,EAC/C+C,GAAU,cACVA,GAAU,0CACVA,GAAU,8BACVA,GAAU,8BACVA,GAAU,WAAaF,EAAW,MAClCE,GAAU,YAAcF,EAAW,MACnCE,GAAU,sBACVA,GAAU/D,EAAM,OAAOe,EAAGC,CAAC,EAAG,UAAY,UAC1C+C,GAAU,IACVA,GAAU,MAGZA,GAAU,OACZ,CAEA,OAAAA,GAAU,WACVA,GAAU,WAEHA,CACT,EAEA/D,EAAM,aAAe,SAAS6D,EAAUC,EAAQE,EAAKC,EAAO,CAE1D,IAAIC,EAAO,CAAC,EACR,OAAO,UAAU,CAAC,GAAK,WAEzBA,EAAO,UAAU,CAAC,EAElBL,EAAWK,EAAK,SAChBJ,EAASI,EAAK,OACdF,EAAME,EAAK,IACXD,EAAQC,EAAK,OAGfL,EAAWA,GAAY,EACvBC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAGxDE,EAAO,OAAOA,GAAQ,SAAY,CAAC,KAAMA,CAAG,EAAIA,GAAO,CAAC,EACxDA,EAAI,KAAOA,EAAI,MAAQ,KACvBA,EAAI,GAAMA,EAAI,KAAQA,EAAI,IAAM,qBAAuB,KAGvDC,EAAS,OAAOA,GAAU,SAAY,CAAC,KAAMA,CAAK,EAAIA,GAAS,CAAC,EAChEA,EAAM,KAAOA,EAAM,MAAQ,KAC3BA,EAAM,GAAMA,EAAM,KAAQA,EAAM,IAAM,eAAiB,KAEvD,IAAIE,GAAOnE,EAAM,eAAe,EAAI6D,EAAWC,EAAS,EACpD9C,GAAGoD,GAAIrD,GAAGsD,GAAIC,GAAM,GAAIC,GAmB5B,IAjBAA,GAAO,IAAMV,EAAW,QAAUA,EAChC,KAAOA,EAAW,SAAWA,EAAW,KAE1CS,IAAS,wDACTA,IAAUJ,EAAK,SAA+D,GAApD,WAAaC,GAAO,eAAiBA,GAAO,MACtEG,IAAS,iBAAmBH,GAAO,IAAMA,GAAO,KAChDG,IAAS,uCACTA,IAAUL,EAAM,MAAQD,EAAI,KAAQ,gCAChCQ,GAAU,CAACP,EAAM,GAAID,EAAI,EAAE,EAAE,KAAK,GAAG,EAAE,KAAK,CAAE,EAAI,IAAM,GAC5DM,IAAS,IACTA,IAAUL,EAAM,KAAQ,cAAgBO,GAAUP,EAAM,EAAE,EAAI,KAC1DO,GAAUP,EAAM,IAAI,EAAI,WAAa,GACzCK,IAAUN,EAAI,KAAQ,oBAAsBQ,GAAUR,EAAI,EAAE,EAAI,KAC5DQ,GAAUR,EAAI,IAAI,EAAI,iBAAmB,GAC7CM,IAAS,gEACTA,IAAS,YAEJvD,GAAI,EAAGA,GAAIf,EAAM,eAAe,EAAGe,IAAK,EAE3C,IADAsD,GAAKtD,GAAI8C,EAAWC,EACf9C,GAAI,EAAGA,GAAIhB,EAAM,eAAe,EAAGgB,IAAK,EACvChB,EAAM,OAAOe,GAAGC,EAAC,IACnBoD,GAAKpD,GAAE6C,EAASC,EAChBQ,IAAS,IAAMF,GAAK,IAAMC,GAAKE,IAKrC,OAAAD,IAAS,wCACTA,IAAS,SAEFA,EACT,EAEAtE,EAAM,cAAgB,SAAS6D,EAAUC,EAAQ,CAE/CD,EAAWA,GAAY,EACvBC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAExD,IAAIK,EAAOnE,EAAM,eAAe,EAAI6D,EAAWC,EAAS,EACpDW,EAAMX,EACNY,EAAMP,EAAOL,EAEjB,OAAOa,EAAcR,EAAMA,EAAM,SAASS,GAAGC,GAAG,CAC9C,GAAIJ,GAAOG,IAAKA,GAAIF,GAAOD,GAAOI,IAAKA,GAAIH,EAAK,CAC9C,IAAI1D,GAAI,KAAK,OAAQ4D,GAAIH,GAAOZ,CAAQ,EACpC9C,GAAI,KAAK,OAAQ8D,GAAIJ,GAAOZ,CAAQ,EACxC,OAAO7D,EAAM,OAAOe,GAAGC,EAAC,EAAG,EAAI,CACjC,KACE,OAAO,EAEX,CAAE,CACJ,EAEAhB,EAAM,aAAe,SAAS6D,EAAUC,EAAQE,EAAK,CAEnDH,EAAWA,GAAY,EACvBC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAExD,IAAIK,EAAOnE,EAAM,eAAe,EAAI6D,EAAWC,EAAS,EAEpDgB,EAAM,GACV,OAAAA,GAAO,OACPA,GAAO,SACPA,GAAO9E,EAAM,cAAc6D,EAAUC,CAAM,EAC3CgB,GAAO,IACPA,GAAO,WACPA,GAAOX,EACPW,GAAO,IACPA,GAAO,YACPA,GAAOX,EACPW,GAAO,IACHd,IACFc,GAAO,SACPA,GAAON,GAAUR,CAAG,EACpBc,GAAO,KAETA,GAAO,KAEAA,CACT,EAEA,IAAIN,GAAY,SAASO,EAAG,CAE1B,QADIC,EAAU,GACL5D,EAAI,EAAGA,EAAI2D,EAAE,OAAQ3D,GAAK,EAAG,CACpC,IAAIJ,EAAI+D,EAAE,OAAO3D,CAAC,EAClB,OAAOJ,EAAG,CACV,IAAK,IAAKgE,GAAW,OAAQ,MAC7B,IAAK,IAAKA,GAAW,OAAQ,MAC7B,IAAK,IAAKA,GAAW,QAAS,MAC9B,IAAK,IAAKA,GAAW,SAAU,MAC/B,QAAUA,GAAWhE,EAAG,KACxB,CACF,CACA,OAAOgE,CACT,EAEIC,GAAmB,SAASnB,EAAQ,CACtC,IAAID,EAAW,EACfC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAExD,IAAIK,EAAOnE,EAAM,eAAe,EAAI6D,EAAWC,EAAS,EACpDW,EAAMX,EACNY,EAAMP,EAAOL,EAEbe,GAAGD,GAAGM,GAAIC,GAAIC,GAEdC,GAAS,CACX,eAAM,SACN,UAAM,SACN,UAAM,SACN,KAAM,GACR,EAEIC,GAAyB,CAC3B,eAAM,SACN,UAAM,SACN,UAAM,IACN,KAAM,GACR,EAEIC,GAAQ,GACZ,IAAKV,GAAI,EAAGA,GAAIV,EAAMU,IAAK,EAAG,CAG5B,IAFAK,GAAK,KAAK,OAAOL,GAAIJ,GAAOZ,CAAQ,EACpCsB,GAAK,KAAK,OAAON,GAAI,EAAIJ,GAAOZ,CAAQ,EACnCe,GAAI,EAAGA,GAAIT,EAAMS,IAAK,EACzBQ,GAAI,SAEAX,GAAOG,IAAKA,GAAIF,GAAOD,GAAOI,IAAKA,GAAIH,GAAO1E,EAAM,OAAOkF,GAAI,KAAK,OAAON,GAAIH,GAAOZ,CAAQ,CAAC,IACjGuB,GAAI,KAGFX,GAAOG,IAAKA,GAAIF,GAAOD,GAAOI,GAAE,GAAKA,GAAE,EAAIH,GAAO1E,EAAM,OAAOmF,GAAI,KAAK,OAAOP,GAAIH,GAAOZ,CAAQ,CAAC,EACrGuB,IAAK,IAGLA,IAAK,SAIPG,IAAUzB,EAAS,GAAKe,GAAE,GAAKH,EAAOY,GAAuBF,EAAC,EAAIC,GAAOD,EAAC,EAG5EG,IAAS;AAAA,CACX,CAEA,OAAIpB,EAAO,GAAKL,EAAS,EAChByB,GAAM,UAAU,EAAGA,GAAM,OAASpB,EAAO,CAAC,EAAI,MAAMA,EAAK,CAAC,EAAE,KAAK,QAAG,EAGtEoB,GAAM,UAAU,EAAGA,GAAM,OAAO,CAAC,CAC1C,EAEA,OAAAvF,EAAM,YAAc,SAAS6D,EAAUC,EAAQ,CAG7C,GAFAD,EAAWA,GAAY,EAEnBA,EAAW,EACb,OAAOoB,GAAiBnB,CAAM,EAGhCD,GAAY,EACZC,EAAU,OAAOA,EAAU,IAAcD,EAAW,EAAIC,EAExD,IAAIK,EAAOnE,EAAM,eAAe,EAAI6D,EAAWC,EAAS,EACpDW,EAAMX,EACNY,EAAMP,EAAOL,EAEbe,GAAGD,GAAG7D,GAAGqE,GAETI,GAAQ,MAAM3B,EAAS,CAAC,EAAE,KAAK,cAAI,EACnC4B,GAAQ,MAAM5B,EAAS,CAAC,EAAE,KAAK,IAAI,EAEnC0B,GAAQ,GACRG,GAAO,GACX,IAAKb,GAAI,EAAGA,GAAIV,EAAMU,IAAK,EAAG,CAG5B,IAFA9D,GAAI,KAAK,OAAQ8D,GAAIJ,GAAOZ,CAAQ,EACpC6B,GAAO,GACFd,GAAI,EAAGA,GAAIT,EAAMS,IAAK,EACzBQ,GAAI,EAEAX,GAAOG,IAAKA,GAAIF,GAAOD,GAAOI,IAAKA,GAAIH,GAAO1E,EAAM,OAAOe,GAAG,KAAK,OAAO6D,GAAIH,GAAOZ,CAAQ,CAAC,IAChGuB,GAAI,GAINM,IAAQN,GAAII,GAAQC,GAGtB,IAAK1E,GAAI,EAAGA,GAAI8C,EAAU9C,IAAK,EAC7BwE,IAASG,GAAO;AAAA,CAEpB,CAEA,OAAOH,GAAM,UAAU,EAAGA,GAAM,OAAO,CAAC,CAC1C,EAEAvF,EAAM,kBAAoB,SAAS2F,EAAS9B,EAAU,CACpDA,EAAWA,GAAY,EAEvB,QADI+B,EAAS5F,EAAM,eAAe,EACzBM,EAAM,EAAGA,EAAMsF,EAAQtF,IAC9B,QAASC,EAAM,EAAGA,EAAMqF,EAAQrF,IAC9BoF,EAAQ,UAAY3F,EAAM,OAAOM,EAAKC,CAAG,EAAI,QAAU,QACvDoF,EAAQ,SAASrF,EAAMuD,EAAUtD,EAAMsD,EAAUA,EAAUA,CAAQ,CAGzE,EAEO7D,CACT,EAMAZ,EAAO,mBAAqB,CAC1B,QAAY,SAAS2F,EAAG,CAEtB,QADIc,EAAQ,CAAC,EACJzE,EAAI,EAAGA,EAAI2D,EAAE,OAAQ3D,GAAK,EAAG,CACpC,IAAIJ,EAAI+D,EAAE,WAAW3D,CAAC,EACtByE,EAAM,KAAK7E,EAAI,GAAI,CACrB,CACA,OAAO6E,CACT,CACF,EAEAzG,EAAO,cAAgBA,EAAO,mBAAmB,QAWjDA,EAAO,oBAAsB,SAAS0G,EAAaC,EAAU,CAI3D,IAAIC,EAAa,UAAW,CAW1B,QATIC,EAAMC,EAAwBJ,CAAW,EACzCK,EAAO,UAAW,CACpB,IAAIC,GAAIH,EAAI,KAAK,EACjB,GAAIG,IAAK,GAAI,KAAM,MACnB,OAAOA,EACT,EAEIC,EAAQ,EACRL,EAAa,CAAC,IACL,CACX,IAAIM,EAAKL,EAAI,KAAK,EAClB,GAAIK,GAAM,GAAI,MACd,IAAIC,EAAKJ,EAAK,EACVK,EAAKL,EAAK,EACVM,GAAKN,EAAK,EACVO,GAAI,OAAO,aAAeJ,GAAM,EAAKC,CAAE,EACvCI,GAAKH,GAAM,EAAKC,GACpBT,EAAWU,EAAC,EAAIC,GAChBN,GAAS,CACX,CACA,GAAIA,GAASN,EACX,MAAMM,EAAQ,OAASN,EAGzB,OAAOC,CACT,EAAE,EAEEY,EAAc,GAElB,OAAO,SAAS7B,EAAG,CAEjB,QADIc,EAAQ,CAAC,EACJzE,EAAI,EAAGA,EAAI2D,EAAE,OAAQ3D,GAAK,EAAG,CACpC,IAAIJ,EAAI+D,EAAE,WAAW3D,CAAC,EACtB,GAAIJ,EAAI,IACN6E,EAAM,KAAK7E,CAAC,MACP,CACL,IAAIoF,EAAIJ,EAAWjB,EAAE,OAAO3D,CAAC,CAAC,EAC1B,OAAOgF,GAAK,UACRA,EAAI,MAASA,EAEjBP,EAAM,KAAKO,CAAC,GAGZP,EAAM,KAAKO,IAAM,CAAC,EAClBP,EAAM,KAAKO,EAAI,GAAI,GAGrBP,EAAM,KAAKe,CAAW,CAE1B,CACF,CACA,OAAOf,CACT,CACF,EAMA,IAAIgB,EAAS,CACX,YAAiB,EACjB,eAAiB,EACjB,eAAiB,EACjB,WAAiB,CACnB,EAMIlH,EAAyB,CAC3B,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAI,CACN,EAMImH,EAAgB,CAClB,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,CACf,EAMIxF,EAAS,UAAW,CAEtB,IAAIyF,EAAyB,CAC3B,CAAC,EACD,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,CAC/B,EACIC,EAAO,KACPC,EAAO,KACPC,EAAY,MAEZlH,EAAQ,CAAC,EAETmH,EAAc,SAASxF,EAAM,CAE/B,QADIyF,EAAQ,EACLzF,GAAQ,GACbyF,GAAS,EACTzF,KAAU,EAEZ,OAAOyF,CACT,EAEA,OAAApH,EAAM,eAAiB,SAAS2B,EAAM,CAEpC,QADI0F,EAAI1F,GAAQ,GACTwF,EAAYE,CAAC,EAAIF,EAAYH,CAAG,GAAK,GAC1CK,GAAML,GAAQG,EAAYE,CAAC,EAAIF,EAAYH,CAAG,EAEhD,OAAUrF,GAAQ,GAAM0F,GAAKH,CAC/B,EAEAlH,EAAM,iBAAmB,SAAS2B,EAAM,CAEtC,QADI0F,EAAI1F,GAAQ,GACTwF,EAAYE,CAAC,EAAIF,EAAYF,CAAG,GAAK,GAC1CI,GAAMJ,GAAQE,EAAYE,CAAC,EAAIF,EAAYF,CAAG,EAEhD,OAAQtF,GAAQ,GAAM0F,CACxB,EAEArH,EAAM,mBAAqB,SAASX,EAAY,CAC9C,OAAO0H,EAAuB1H,EAAa,CAAC,CAC9C,EAEAW,EAAM,gBAAkB,SAASG,EAAa,CAE5C,OAAQA,EAAa,CAErB,KAAK2G,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAQA,EAAI,GAAK,GAAK,CAAG,EACnD,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAOA,EAAI,GAAK,CAAG,EAC7C,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAO,EAAI,GAAK,CAAG,EAC7C,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAQA,EAAI,GAAK,GAAK,CAAG,EACnD,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAQ,KAAK,MAAMA,EAAI,CAAC,EAAI,KAAK,MAAM,EAAI,CAAC,GAAM,GAAK,CAAG,EACpF,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAQA,EAAI,EAAK,EAAKA,EAAI,EAAK,GAAK,CAAG,EACjE,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAUA,EAAI,EAAK,EAAKA,EAAI,EAAK,GAAK,GAAK,CAAG,EACxE,KAAK0F,EAAc,WACjB,OAAO,SAAS1F,EAAG,EAAG,CAAE,OAAUA,EAAI,EAAK,GAAKA,EAAI,GAAK,GAAK,GAAK,CAAG,EAExE,QACE,KAAM,mBAAqBjB,CAC7B,CACF,EAEAH,EAAM,0BAA4B,SAASsH,EAAoB,CAE7D,QADIC,EAAIzE,EAAa,CAAC,CAAC,EAAG,CAAC,EAClB1B,EAAI,EAAGA,EAAIkG,EAAoBlG,GAAK,EAC3CmG,EAAIA,EAAE,SAASzE,EAAa,CAAC,EAAG0E,EAAO,KAAKpG,CAAC,CAAC,EAAG,CAAC,CAAE,EAEtD,OAAOmG,CACT,EAEAvH,EAAM,gBAAkB,SAASuD,EAAMkE,EAAM,CAE3C,GAAI,GAAKA,GAAQA,EAAO,GAItB,OAAOlE,EAAM,CACb,KAAKsD,EAAO,YAAiB,MAAO,IACpC,KAAKA,EAAO,eAAiB,MAAO,GACpC,KAAKA,EAAO,eAAiB,MAAO,GACpC,KAAKA,EAAO,WAAiB,MAAO,GACpC,QACE,KAAM,QAAUtD,CAClB,SAESkE,EAAO,GAIhB,OAAOlE,EAAM,CACb,KAAKsD,EAAO,YAAiB,MAAO,IACpC,KAAKA,EAAO,eAAiB,MAAO,IACpC,KAAKA,EAAO,eAAiB,MAAO,IACpC,KAAKA,EAAO,WAAiB,MAAO,IACpC,QACE,KAAM,QAAUtD,CAClB,SAESkE,EAAO,GAIhB,OAAOlE,EAAM,CACb,KAAKsD,EAAO,YAAiB,MAAO,IACpC,KAAKA,EAAO,eAAiB,MAAO,IACpC,KAAKA,EAAO,eAAiB,MAAO,IACpC,KAAKA,EAAO,WAAiB,MAAO,IACpC,QACE,KAAM,QAAUtD,CAClB,KAGA,MAAM,QAAUkE,CAEpB,EAEAzH,EAAM,aAAe,SAASZ,EAAQ,CAQpC,QANIgB,EAAchB,EAAO,eAAe,EAEpCiC,EAAY,EAIPf,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAC1C,QAASC,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAAG,CAK7C,QAHImH,GAAY,EACZ1F,GAAO5C,EAAO,OAAOkB,EAAKC,CAAG,EAExBQ,GAAI,GAAIA,IAAK,EAAGA,IAAK,EAE5B,GAAI,EAAAT,EAAMS,GAAI,GAAKX,GAAeE,EAAMS,IAIxC,QAASC,GAAI,GAAIA,IAAK,EAAGA,IAAK,EAExBT,EAAMS,GAAI,GAAKZ,GAAeG,EAAMS,IAIpCD,IAAK,GAAKC,IAAK,GAIfgB,IAAQ5C,EAAO,OAAOkB,EAAMS,GAAGR,EAAMS,EAAC,IACxC0G,IAAa,GAKfA,GAAY,IACdrG,GAAc,EAAIqG,GAAY,EAElC,CAKF,QAASpH,EAAM,EAAGA,EAAMF,EAAc,EAAGE,GAAO,EAC9C,QAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,GAAO,EAAG,CACjD,IAAI8F,GAAQ,EACRjH,EAAO,OAAOkB,EAAKC,CAAG,IAAI8F,IAAS,GACnCjH,EAAO,OAAOkB,EAAM,EAAGC,CAAG,IAAI8F,IAAS,GACvCjH,EAAO,OAAOkB,EAAKC,EAAM,CAAC,IAAI8F,IAAS,GACvCjH,EAAO,OAAOkB,EAAM,EAAGC,EAAM,CAAC,IAAI8F,IAAS,IAC3CA,IAAS,GAAKA,IAAS,KACzBhF,GAAa,EAEjB,CAKF,QAASf,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EAC1C,QAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,GAAO,EAC1CnB,EAAO,OAAOkB,EAAKC,CAAG,GACnB,CAACnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,GAC1BnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,GAC1BnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,GAC1BnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,GAC3B,CAACnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,GAC1BnB,EAAO,OAAOkB,EAAKC,EAAM,CAAC,IAChCc,GAAa,IAKnB,QAASd,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAC1C,QAASD,EAAM,EAAGA,EAAMF,EAAc,EAAGE,GAAO,EAC1ClB,EAAO,OAAOkB,EAAKC,CAAG,GACnB,CAACnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,GAC1BnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,GAC1BnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,GAC1BnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,GAC3B,CAACnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,GAC1BnB,EAAO,OAAOkB,EAAM,EAAGC,CAAG,IAChCc,GAAa,IASnB,QAFIsG,GAAY,EAEPpH,EAAM,EAAGA,EAAMH,EAAaG,GAAO,EAC1C,QAASD,EAAM,EAAGA,EAAMF,EAAaE,GAAO,EACtClB,EAAO,OAAOkB,EAAKC,CAAG,IACxBoH,IAAa,GAKnB,IAAIC,GAAQ,KAAK,IAAI,IAAMD,GAAYvH,EAAcA,EAAc,EAAE,EAAI,EACzE,OAAAiB,GAAauG,GAAQ,GAEdvG,CACT,EAEOrB,CACT,EAAE,EAMEwH,EAAS,UAAW,CAMtB,QAJIK,EAAY,IAAI,MAAM,GAAG,EACzBC,EAAY,IAAI,MAAM,GAAG,EAGpB1G,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAC1ByG,EAAUzG,CAAC,EAAI,GAAKA,EAEtB,QAASA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC5ByG,EAAUzG,CAAC,EAAIyG,EAAUzG,EAAI,CAAC,EAC1ByG,EAAUzG,EAAI,CAAC,EACfyG,EAAUzG,EAAI,CAAC,EACfyG,EAAUzG,EAAI,CAAC,EAErB,QAASA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC5B0G,EAAUD,EAAUzG,CAAC,CAAE,EAAIA,EAG7B,IAAIpB,EAAQ,CAAC,EAEb,OAAAA,EAAM,KAAO,SAAS+H,EAAG,CAEvB,GAAIA,EAAI,EACN,KAAM,QAAUA,EAAI,IAGtB,OAAOD,EAAUC,CAAC,CACpB,EAEA/H,EAAM,KAAO,SAAS+H,EAAG,CAEvB,KAAOA,EAAI,GACTA,GAAK,IAGP,KAAOA,GAAK,KACVA,GAAK,IAGP,OAAOF,EAAUE,CAAC,CACpB,EAEO/H,CACT,EAAE,EAMF,SAAS8C,EAAakF,EAAKC,EAAO,CAEhC,GAAI,OAAOD,EAAI,OAAU,IACvB,MAAMA,EAAI,OAAS,IAAMC,EAG3B,IAAIC,EAAO,UAAW,CAEpB,QADI7F,EAAS,EACNA,EAAS2F,EAAI,QAAUA,EAAI3F,CAAM,GAAK,GAC3CA,GAAU,EAGZ,QADI6F,EAAO,IAAI,MAAMF,EAAI,OAAS3F,EAAS4F,CAAK,EACvC7G,EAAI,EAAGA,EAAI4G,EAAI,OAAS3F,EAAQjB,GAAK,EAC5C8G,EAAK9G,CAAC,EAAI4G,EAAI5G,EAAIiB,CAAM,EAE1B,OAAO6F,CACT,EAAE,EAEElI,EAAQ,CAAC,EAEb,OAAAA,EAAM,MAAQ,SAASkD,EAAO,CAC5B,OAAOgF,EAAKhF,CAAK,CACnB,EAEAlD,EAAM,UAAY,UAAW,CAC3B,OAAOkI,EAAK,MACd,EAEAlI,EAAM,SAAW,SAASmI,EAAG,CAI3B,QAFIH,EAAM,IAAI,MAAMhI,EAAM,UAAU,EAAImI,EAAE,UAAU,EAAI,CAAC,EAEhD/G,EAAI,EAAGA,EAAIpB,EAAM,UAAU,EAAGoB,GAAK,EAC1C,QAASI,EAAI,EAAGA,EAAI2G,EAAE,UAAU,EAAG3G,GAAK,EACtCwG,EAAI5G,EAAII,CAAC,GAAKgG,EAAO,KAAKA,EAAO,KAAKxH,EAAM,MAAMoB,CAAC,CAAE,EAAIoG,EAAO,KAAKW,EAAE,MAAM3G,CAAC,CAAE,CAAE,EAItF,OAAOsB,EAAakF,EAAK,CAAC,CAC5B,EAEAhI,EAAM,IAAM,SAASmI,EAAG,CAEtB,GAAInI,EAAM,UAAU,EAAImI,EAAE,UAAU,EAAI,EACtC,OAAOnI,EAMT,QAHI4H,EAAQJ,EAAO,KAAKxH,EAAM,MAAM,CAAC,CAAE,EAAIwH,EAAO,KAAKW,EAAE,MAAM,CAAC,CAAE,EAE9DH,EAAM,IAAI,MAAMhI,EAAM,UAAU,CAAE,EAC7BoB,EAAI,EAAGA,EAAIpB,EAAM,UAAU,EAAGoB,GAAK,EAC1C4G,EAAI5G,CAAC,EAAIpB,EAAM,MAAMoB,CAAC,EAGxB,QAASA,EAAI,EAAGA,EAAI+G,EAAE,UAAU,EAAG/G,GAAK,EACtC4G,EAAI5G,CAAC,GAAKoG,EAAO,KAAKA,EAAO,KAAKW,EAAE,MAAM/G,CAAC,CAAE,EAAIwG,CAAK,EAIxD,OAAO9E,EAAakF,EAAK,CAAC,EAAE,IAAIG,CAAC,CACnC,EAEOnI,CACT,CAMA,IAAIoD,EAAY,UAAW,CAEzB,IAAIgF,EAAiB,CAQnB,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,EAAE,EAGX,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,GAAG,EACb,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,CACzB,EAEIC,EAAY,SAASC,EAAYC,EAAW,CAC9C,IAAIvI,EAAQ,CAAC,EACb,OAAAA,EAAM,WAAasI,EACnBtI,EAAM,UAAYuI,EACXvI,CACT,EAEIA,EAAQ,CAAC,EAETwI,EAAkB,SAASnJ,EAAYC,EAAsB,CAE/D,OAAOA,EAAsB,CAC7B,KAAKK,EAAuB,EAC1B,OAAOyI,GAAgB/I,EAAa,GAAK,EAAI,CAAC,EAChD,KAAKM,EAAuB,EAC1B,OAAOyI,GAAgB/I,EAAa,GAAK,EAAI,CAAC,EAChD,KAAKM,EAAuB,EAC1B,OAAOyI,GAAgB/I,EAAa,GAAK,EAAI,CAAC,EAChD,KAAKM,EAAuB,EAC1B,OAAOyI,GAAgB/I,EAAa,GAAK,EAAI,CAAC,EAChD,QACE,MACF,CACF,EAEA,OAAAW,EAAM,YAAc,SAASX,EAAYC,EAAsB,CAE7D,IAAImJ,EAAUD,EAAgBnJ,EAAYC,CAAoB,EAE9D,GAAI,OAAOmJ,EAAW,IACpB,KAAM,6BAA+BpJ,EACjC,yBAA2BC,EAOjC,QAJIsG,EAAS6C,EAAQ,OAAS,EAE1BC,EAAO,CAAC,EAEHtH,EAAI,EAAGA,EAAIwE,EAAQxE,GAAK,EAM/B,QAJIiF,EAAQoC,EAAQrH,EAAI,EAAI,CAAC,EACzBkH,GAAaG,EAAQrH,EAAI,EAAI,CAAC,EAC9BmH,GAAYE,EAAQrH,EAAI,EAAI,CAAC,EAExBI,GAAI,EAAGA,GAAI6E,EAAO7E,IAAK,EAC9BkH,EAAK,KAAKL,EAAUC,GAAYC,EAAS,CAAE,EAI/C,OAAOG,CACT,EAEO1I,CACT,EAAE,EAMEqD,EAAc,UAAW,CAE3B,IAAIsF,EAAU,CAAC,EACXC,EAAU,EAEV5I,EAAQ,CAAC,EAEb,OAAAA,EAAM,UAAY,UAAW,CAC3B,OAAO2I,CACT,EAEA3I,EAAM,MAAQ,SAASkD,EAAO,CAC5B,IAAI2F,EAAW,KAAK,MAAM3F,EAAQ,CAAC,EACnC,OAAUyF,EAAQE,CAAQ,IAAO,EAAI3F,EAAQ,EAAO,IAAM,CAC5D,EAEAlD,EAAM,IAAM,SAASgI,EAAKpC,EAAQ,CAChC,QAASxE,EAAI,EAAGA,EAAIwE,EAAQxE,GAAK,EAC/BpB,EAAM,QAAWgI,IAASpC,EAASxE,EAAI,EAAO,IAAM,CAAC,CAEzD,EAEApB,EAAM,gBAAkB,UAAW,CACjC,OAAO4I,CACT,EAEA5I,EAAM,OAAS,SAAS8I,EAAK,CAE3B,IAAID,EAAW,KAAK,MAAMD,EAAU,CAAC,EACjCD,EAAQ,QAAUE,GACpBF,EAAQ,KAAK,CAAC,EAGZG,IACFH,EAAQE,CAAQ,GAAM,MAAUD,EAAU,GAG5CA,GAAW,CACb,EAEO5I,CACT,EAMIyD,EAAW,SAAS9B,EAAM,CAE5B,IAAIoH,EAAQlC,EAAO,YACfmC,EAAQrH,EAER3B,EAAQ,CAAC,EAEbA,EAAM,QAAU,UAAW,CACzB,OAAO+I,CACT,EAEA/I,EAAM,UAAY,SAASmC,EAAQ,CACjC,OAAO6G,EAAM,MACf,EAEAhJ,EAAM,MAAQ,SAASmC,EAAQ,CAM7B,QAJIR,EAAOqH,EAEP5H,EAAI,EAEDA,EAAI,EAAIO,EAAK,QAClBQ,EAAO,IAAI8G,EAAStH,EAAK,UAAUP,EAAGA,EAAI,CAAC,CAAE,EAAG,EAAE,EAClDA,GAAK,EAGHA,EAAIO,EAAK,SACPA,EAAK,OAASP,GAAK,EACrBe,EAAO,IAAI8G,EAAStH,EAAK,UAAUP,EAAGA,EAAI,CAAC,CAAE,EAAG,CAAC,EACxCO,EAAK,OAASP,GAAK,GAC5Be,EAAO,IAAI8G,EAAStH,EAAK,UAAUP,EAAGA,EAAI,CAAC,CAAE,EAAG,CAAC,EAGvD,EAEA,IAAI6H,EAAW,SAASlE,EAAG,CAEzB,QADIiD,EAAM,EACD5G,EAAI,EAAGA,EAAI2D,EAAE,OAAQ3D,GAAK,EACjC4G,EAAMA,EAAM,GAAKkB,EAAUnE,EAAE,OAAO3D,CAAC,CAAE,EAEzC,OAAO4G,CACT,EAEIkB,EAAY,SAASlI,EAAG,CAC1B,GAAI,KAAOA,GAAKA,GAAK,IACnB,OAAOA,EAAE,WAAW,CAAC,EAAI,GAE3B,KAAM,iBAAmBA,CAC3B,EAEA,OAAOhB,CACT,EAMI0D,EAAa,SAAS/B,EAAM,CAE9B,IAAIoH,EAAQlC,EAAO,eACfmC,EAAQrH,EAER3B,EAAQ,CAAC,EAEbA,EAAM,QAAU,UAAW,CACzB,OAAO+I,CACT,EAEA/I,EAAM,UAAY,SAASmC,EAAQ,CACjC,OAAO6G,EAAM,MACf,EAEAhJ,EAAM,MAAQ,SAASmC,EAAQ,CAM7B,QAJI4C,EAAIiE,EAEJ5H,EAAI,EAEDA,EAAI,EAAI2D,EAAE,QACf5C,EAAO,IACLgH,EAAQpE,EAAE,OAAO3D,CAAC,CAAE,EAAI,GACxB+H,EAAQpE,EAAE,OAAO3D,EAAI,CAAC,CAAE,EAAG,EAAE,EAC/BA,GAAK,EAGHA,EAAI2D,EAAE,QACR5C,EAAO,IAAIgH,EAAQpE,EAAE,OAAO3D,CAAC,CAAE,EAAG,CAAC,CAEvC,EAEA,IAAI+H,EAAU,SAASnI,EAAG,CAExB,GAAI,KAAOA,GAAKA,GAAK,IACnB,OAAOA,EAAE,WAAW,CAAC,EAAI,GACpB,GAAI,KAAOA,GAAKA,GAAK,IAC1B,OAAOA,EAAE,WAAW,CAAC,EAAI,GAAoB,GAE7C,OAAQA,EAAG,CACX,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,IAAK,IAAM,MAAO,IAClB,QACE,KAAM,iBAAmBA,CAC3B,CAEJ,EAEA,OAAOhB,CACT,EAMI2D,EAAa,SAAShC,EAAM,CAE9B,IAAIoH,EAAQlC,EAAO,eACfmC,EAAQrH,EACRyH,EAAShK,EAAO,cAAcuC,CAAI,EAElC3B,EAAQ,CAAC,EAEb,OAAAA,EAAM,QAAU,UAAW,CACzB,OAAO+I,CACT,EAEA/I,EAAM,UAAY,SAASmC,EAAQ,CACjC,OAAOiH,EAAO,MAChB,EAEApJ,EAAM,MAAQ,SAASmC,EAAQ,CAC7B,QAASf,EAAI,EAAGA,EAAIgI,EAAO,OAAQhI,GAAK,EACtCe,EAAO,IAAIiH,EAAOhI,CAAC,EAAG,CAAC,CAE3B,EAEOpB,CACT,EAMI4D,EAAU,SAASjC,EAAM,CAE3B,IAAIoH,EAAQlC,EAAO,WACfmC,EAAQrH,EAER0H,EAAgBjK,EAAO,mBAAmB,KAC9C,GAAI,CAACiK,EACH,KAAM,uBAEP,SAASrI,EAAGsI,EAAM,CAEjB,IAAIpJ,EAAOmJ,EAAcrI,CAAC,EAC1B,GAAId,EAAK,QAAU,IAAQA,EAAK,CAAC,GAAK,EAAKA,EAAK,CAAC,IAAMoJ,EACrD,KAAM,qBAEV,GAAE,SAAU,KAAM,EAElB,IAAIF,EAASC,EAAc1H,CAAI,EAE3B3B,EAAQ,CAAC,EAEb,OAAAA,EAAM,QAAU,UAAW,CACzB,OAAO+I,CACT,EAEA/I,EAAM,UAAY,SAASmC,EAAQ,CACjC,MAAO,CAAC,EAAEiH,EAAO,OAAS,EAC5B,EAEApJ,EAAM,MAAQ,SAASmC,EAAQ,CAM7B,QAJIR,EAAOyH,EAEPhI,EAAI,EAEDA,EAAI,EAAIO,EAAK,QAAQ,CAE1B,IAAIX,GAAO,IAAOW,EAAKP,CAAC,IAAM,EAAM,IAAOO,EAAKP,EAAI,CAAC,EAErD,GAAI,OAAUJ,GAAKA,GAAK,MACtBA,GAAK,cACI,OAAUA,GAAKA,GAAK,MAC7BA,GAAK,UAEL,MAAM,oBAAsBI,EAAI,GAAK,IAAMJ,EAG7CA,GAAOA,IAAM,EAAK,KAAQ,KAAQA,EAAI,KAEtCmB,EAAO,IAAInB,EAAG,EAAE,EAEhBI,GAAK,CACP,CAEA,GAAIA,EAAIO,EAAK,OACX,KAAM,oBAAsBP,EAAI,EAEpC,EAEOpB,CACT,EAUIuJ,EAAwB,UAAW,CAErC,IAAIH,EAAS,CAAC,EAEVpJ,EAAQ,CAAC,EAEb,OAAAA,EAAM,UAAY,SAASoG,EAAG,CAC5BgD,EAAO,KAAKhD,EAAI,GAAI,CACtB,EAEApG,EAAM,WAAa,SAASoB,EAAG,CAC7BpB,EAAM,UAAUoB,CAAC,EACjBpB,EAAM,UAAUoB,IAAM,CAAC,CACzB,EAEApB,EAAM,WAAa,SAASoG,EAAGoD,EAAKC,EAAK,CACvCD,EAAMA,GAAO,EACbC,EAAMA,GAAOrD,EAAE,OACf,QAAShF,EAAI,EAAGA,EAAIqI,EAAKrI,GAAK,EAC5BpB,EAAM,UAAUoG,EAAEhF,EAAIoI,CAAG,CAAC,CAE9B,EAEAxJ,EAAM,YAAc,SAAS+E,EAAG,CAC9B,QAAS3D,EAAI,EAAGA,EAAI2D,EAAE,OAAQ3D,GAAK,EACjCpB,EAAM,UAAU+E,EAAE,WAAW3D,CAAC,CAAE,CAEpC,EAEApB,EAAM,YAAc,UAAW,CAC7B,OAAOoJ,CACT,EAEApJ,EAAM,SAAW,UAAW,CAC1B,IAAI+E,EAAI,GACRA,GAAK,IACL,QAAS3D,EAAI,EAAGA,EAAIgI,EAAO,OAAQhI,GAAK,EAClCA,EAAI,IACN2D,GAAK,KAEPA,GAAKqE,EAAOhI,CAAC,EAEf,OAAA2D,GAAK,IACEA,CACT,EAEO/E,CACT,EAMI0J,EAA2B,UAAW,CAExC,IAAIf,EAAU,EACVgB,EAAU,EACVf,EAAU,EACVgB,EAAU,GAEV5J,EAAQ,CAAC,EAET6J,EAAe,SAASzD,EAAG,CAC7BwD,GAAW,OAAO,aAAaE,EAAO1D,EAAI,EAAI,CAAE,CAClD,EAEI0D,EAAS,SAAS/B,EAAG,CACvB,GAAI,EAAAA,EAAI,GAED,IAAIA,EAAI,GACb,MAAO,IAAOA,EACT,GAAIA,EAAI,GACb,MAAO,KAAQA,EAAI,IACd,GAAIA,EAAI,GACb,MAAO,KAAQA,EAAI,IACd,GAAIA,GAAK,GACd,MAAO,IACF,GAAIA,GAAK,GACd,MAAO,IAET,KAAM,KAAOA,CACf,EAEA,OAAA/H,EAAM,UAAY,SAAS+H,EAAG,CAM5B,IAJAY,EAAWA,GAAW,EAAMZ,EAAI,IAChC4B,GAAW,EACXf,GAAW,EAEJe,GAAW,GAChBE,EAAalB,IAAagB,EAAU,CAAG,EACvCA,GAAW,CAEf,EAEA3J,EAAM,MAAQ,UAAW,CAQvB,GANI2J,EAAU,IACZE,EAAalB,GAAY,EAAIgB,CAAS,EACtChB,EAAU,EACVgB,EAAU,GAGRf,EAAU,GAAK,EAGjB,QADImB,EAAS,EAAInB,EAAU,EAClBxH,EAAI,EAAGA,EAAI2I,EAAQ3I,GAAK,EAC/BwI,GAAW,GAGjB,EAEA5J,EAAM,SAAW,UAAW,CAC1B,OAAO4J,CACT,EAEO5J,CACT,EAMIkG,EAA0B,SAAS8D,EAAK,CAE1C,IAAIC,EAAOD,EACPE,EAAO,EACPvB,EAAU,EACVgB,EAAU,EAEV3J,EAAQ,CAAC,EAEbA,EAAM,KAAO,UAAW,CAEtB,KAAO2J,EAAU,GAAG,CAElB,GAAIO,GAAQD,EAAK,OAAQ,CACvB,GAAIN,GAAW,EACb,MAAO,GAET,KAAM,2BAA6BA,CACrC,CAEA,IAAI3I,EAAIiJ,EAAK,OAAOC,CAAI,EAGxB,GAFAA,GAAQ,EAEJlJ,GAAK,IACP,OAAA2I,EAAU,EACH,GACF,GAAI3I,EAAE,MAAM,MAAM,EAEvB,SAGF2H,EAAWA,GAAW,EAAKwB,EAAOnJ,EAAE,WAAW,CAAC,CAAE,EAClD2I,GAAW,CACb,CAEA,IAAI5B,EAAKY,IAAagB,EAAU,EAAO,IACvC,OAAAA,GAAW,EACJ5B,CACT,EAEA,IAAIoC,EAAS,SAASnJ,EAAG,CACvB,GAAI,IAAQA,GAAKA,GAAK,GACpB,OAAOA,EAAI,GACN,GAAI,IAAQA,GAAKA,GAAK,IAC3B,OAAOA,EAAI,GAAO,GACb,GAAI,IAAQA,GAAKA,GAAK,GAC3B,OAAOA,EAAI,GAAO,GACb,GAAIA,GAAK,GACd,MAAO,IACF,GAAIA,GAAK,GACd,MAAO,IAEP,KAAM,KAAOA,CAEjB,EAEA,OAAOhB,CACT,EAMIoK,EAAW,SAASC,EAAOC,EAAQ,CAErC,IAAIC,EAASF,EACTG,EAAUF,EACVtB,EAAQ,IAAI,MAAMqB,EAAQC,CAAM,EAEhCtK,EAAQ,CAAC,EAEbA,EAAM,SAAW,SAAS4E,EAAGC,EAAG4F,GAAO,CACrCzB,EAAMnE,EAAI0F,EAAS3F,CAAC,EAAI6F,EAC1B,EAEAzK,EAAM,MAAQ,SAAS0K,EAAK,CAK1BA,EAAI,YAAY,QAAQ,EAKxBA,EAAI,WAAWH,CAAM,EACrBG,EAAI,WAAWF,CAAO,EAEtBE,EAAI,UAAU,GAAI,EAClBA,EAAI,UAAU,CAAC,EACfA,EAAI,UAAU,CAAC,EAMfA,EAAI,UAAU,CAAI,EAClBA,EAAI,UAAU,CAAI,EAClBA,EAAI,UAAU,CAAI,EAGlBA,EAAI,UAAU,GAAI,EAClBA,EAAI,UAAU,GAAI,EAClBA,EAAI,UAAU,GAAI,EAKlBA,EAAI,YAAY,GAAG,EACnBA,EAAI,WAAW,CAAC,EAChBA,EAAI,WAAW,CAAC,EAChBA,EAAI,WAAWH,CAAM,EACrBG,EAAI,WAAWF,CAAO,EACtBE,EAAI,UAAU,CAAC,EAQf,IAAIC,EAAiB,EACjBC,GAASC,EAAaF,CAAc,EAExCD,EAAI,UAAUC,CAAc,EAI5B,QAFItI,GAAS,EAENuI,GAAO,OAASvI,GAAS,KAC9BqI,EAAI,UAAU,GAAG,EACjBA,EAAI,WAAWE,GAAQvI,GAAQ,GAAG,EAClCA,IAAU,IAGZqI,EAAI,UAAUE,GAAO,OAASvI,EAAM,EACpCqI,EAAI,WAAWE,GAAQvI,GAAQuI,GAAO,OAASvI,EAAM,EACrDqI,EAAI,UAAU,CAAI,EAIlBA,EAAI,YAAY,GAAG,CACrB,EAEA,IAAII,EAAkB,SAASJ,EAAK,CAElC,IAAIK,EAAOL,EACPM,GAAa,EACbC,GAAa,EAEbjL,GAAQ,CAAC,EAEb,OAAAA,GAAM,MAAQ,SAAS2B,GAAMiE,GAAQ,CAEnC,GAAMjE,KAASiE,GACb,KAAM,cAGR,KAAOoF,GAAapF,IAAU,GAC5BmF,EAAK,UAAU,KAAUpJ,IAAQqJ,GAAcC,GAAY,EAC3DrF,IAAW,EAAIoF,GACfrJ,MAAW,EAAIqJ,GACfC,GAAa,EACbD,GAAa,EAGfC,GAActJ,IAAQqJ,GAAcC,GACpCD,GAAaA,GAAapF,EAC5B,EAEA5F,GAAM,MAAQ,UAAW,CACnBgL,GAAa,GACfD,EAAK,UAAUE,EAAU,CAE7B,EAEOjL,EACT,EAEI6K,EAAe,SAASF,EAAgB,CAS1C,QAPIO,EAAY,GAAKP,EACjBQ,IAAW,GAAKR,GAAkB,EAClCS,GAAYT,EAAiB,EAG7BU,GAAQC,EAAS,EAEZlK,GAAI,EAAGA,GAAI8J,EAAW9J,IAAK,EAClCiK,GAAM,IAAI,OAAO,aAAajK,EAAC,CAAE,EAEnCiK,GAAM,IAAI,OAAO,aAAaH,CAAS,CAAE,EACzCG,GAAM,IAAI,OAAO,aAAaF,EAAO,CAAE,EAEvC,IAAII,GAAUhC,EAAsB,EAChCiC,GAASV,EAAgBS,EAAO,EAGpCC,GAAO,MAAMN,EAAWE,EAAS,EAEjC,IAAIK,GAAY,EAEZ1G,GAAI,OAAO,aAAaiE,EAAMyC,EAAS,CAAC,EAG5C,IAFAA,IAAa,EAENA,GAAYzC,EAAM,QAAQ,CAE/B,IAAIhI,GAAI,OAAO,aAAagI,EAAMyC,EAAS,CAAC,EAC5CA,IAAa,EAETJ,GAAM,SAAStG,GAAI/D,EAAC,EAEtB+D,GAAIA,GAAI/D,IAIRwK,GAAO,MAAMH,GAAM,QAAQtG,EAAC,EAAGqG,EAAS,EAEpCC,GAAM,KAAK,EAAI,OAEbA,GAAM,KAAK,GAAM,GAAKD,KACxBA,IAAa,GAGfC,GAAM,IAAItG,GAAI/D,EAAC,GAGjB+D,GAAI/D,GAER,CAEA,OAAAwK,GAAO,MAAMH,GAAM,QAAQtG,EAAC,EAAGqG,EAAS,EAGxCI,GAAO,MAAML,GAASC,EAAS,EAE/BI,GAAO,MAAM,EAEND,GAAQ,YAAY,CAC7B,EAEID,EAAW,UAAW,CAExB,IAAII,EAAO,CAAC,EACRC,EAAQ,EAER3L,GAAQ,CAAC,EAEb,OAAAA,GAAM,IAAM,SAAS4L,GAAK,CACxB,GAAI5L,GAAM,SAAS4L,EAAG,EACpB,KAAM,WAAaA,GAErBF,EAAKE,EAAG,EAAID,EACZA,GAAS,CACX,EAEA3L,GAAM,KAAO,UAAW,CACtB,OAAO2L,CACT,EAEA3L,GAAM,QAAU,SAAS4L,GAAK,CAC5B,OAAOF,EAAKE,EAAG,CACjB,EAEA5L,GAAM,SAAW,SAAS4L,GAAK,CAC7B,OAAO,OAAOF,EAAKE,EAAG,EAAK,GAC7B,EAEO5L,EACT,EAEA,OAAOA,CACT,EAEI2E,EAAgB,SAAS0F,EAAOC,EAAQuB,EAAU,CAEpD,QADIC,EAAM1B,EAASC,EAAOC,CAAM,EACvBzF,EAAI,EAAGA,EAAIyF,EAAQzF,GAAK,EAC/B,QAASD,EAAI,EAAGA,EAAIyF,EAAOzF,GAAK,EAC9BkH,EAAI,SAASlH,EAAGC,EAAGgH,EAASjH,EAAGC,CAAC,CAAE,EAItC,IAAIuB,EAAImD,EAAsB,EAC9BuC,EAAI,MAAM1F,CAAC,EAIX,QAFI2F,EAASrC,EAAyB,EAClC7D,EAAQO,EAAE,YAAY,EACjBhF,EAAI,EAAGA,EAAIyE,EAAM,OAAQzE,GAAK,EACrC2K,EAAO,UAAUlG,EAAMzE,CAAC,CAAC,EAE3B,OAAA2K,EAAO,MAAM,EAEN,yBAA2BA,CACpC,EAKA,OAAO3M,CACT,EAAE,GAGD,UAAW,CAEVA,GAAO,mBAAmB,OAAO,EAAI,SAAS2F,EAAG,CAE/C,SAASiH,EAAYhC,EAAK,CAExB,QADIiC,EAAO,CAAC,EACH7K,EAAE,EAAGA,EAAI4I,EAAI,OAAQ5I,IAAK,CACjC,IAAI8K,EAAWlC,EAAI,WAAW5I,CAAC,EAC3B8K,EAAW,IAAMD,EAAK,KAAKC,CAAQ,EAC9BA,EAAW,KAClBD,EAAK,KAAK,IAAQC,GAAY,EAC1B,IAAQA,EAAW,EAAK,EAErBA,EAAW,OAAUA,GAAY,MACxCD,EAAK,KAAK,IAAQC,GAAY,GAC1B,IAASA,GAAU,EAAK,GACxB,IAAQA,EAAW,EAAK,GAI5B9K,IAIA8K,EAAW,QAAaA,EAAW,OAAQ,GACtClC,EAAI,WAAW5I,CAAC,EAAI,MACzB6K,EAAK,KAAK,IAAQC,GAAW,GACzB,IAASA,GAAU,GAAM,GACzB,IAASA,GAAU,EAAK,GACxB,IAAQA,EAAW,EAAK,EAEhC,CACA,OAAOD,CACT,CACA,OAAOD,EAAYjH,CAAC,CACtB,CAEF,GAAE,GAED,SAAUoH,EAAS,CACd,OAAO,QAAW,YAAc,OAAO,IACvC,OAAO,CAAC,EAAGA,CAAO,EACX,OAAOjN,IAAY,WAC1BC,GAAO,QAAUgN,EAAQ,EAE/B,GAAE,UAAY,CACV,OAAO/M,EACX,CAAC,ICpvED,IAAMgN,GAAN,KAAoB,CAChB,YAAYC,EAAaC,EAAWC,EAAc,CAC9C,KAAK,YAAcF,EACnB,KAAK,UAAYC,EACjB,KAAK,aAAeC,EACpB,KAAK,kBAAoB,IAAI,GACjC,CACA,SAAU,CACN,KAAK,YAAY,iBAAiB,KAAK,UAAW,KAAM,KAAK,YAAY,CAC7E,CACA,YAAa,CACT,KAAK,YAAY,oBAAoB,KAAK,UAAW,KAAM,KAAK,YAAY,CAChF,CACA,iBAAiBC,EAAS,CACtB,KAAK,kBAAkB,IAAIA,CAAO,CACtC,CACA,oBAAoBA,EAAS,CACzB,KAAK,kBAAkB,OAAOA,CAAO,CACzC,CACA,YAAYC,EAAO,CACf,IAAMC,EAAgBC,GAAYF,CAAK,EACvC,QAAWD,KAAW,KAAK,SAAU,CACjC,GAAIE,EAAc,4BACd,MAGAF,EAAQ,YAAYE,CAAa,CAEzC,CACJ,CACA,aAAc,CACV,OAAO,KAAK,kBAAkB,KAAO,CACzC,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,EAAE,KAAK,CAACE,EAAMC,IAAU,CAC5D,IAAMC,EAAYF,EAAK,MAAOG,EAAaF,EAAM,MACjD,OAAOC,EAAYC,EAAa,GAAKD,EAAYC,EAAa,EAAI,CACtE,CAAC,CACL,CACJ,EACA,SAASJ,GAAYF,EAAO,CACxB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,GAAM,CAAE,yBAAAO,CAAyB,EAAIP,EACrC,OAAO,OAAO,OAAOA,EAAO,CACxB,4BAA6B,GAC7B,0BAA2B,CACvB,KAAK,4BAA8B,GACnCO,EAAyB,KAAK,IAAI,CACtC,CACJ,CAAC,CACL,CACJ,CAEA,IAAMC,GAAN,KAAiB,CACb,YAAYC,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,QAAU,EACnB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,eAAe,QAASC,GAAkBA,EAAc,QAAQ,CAAC,EAE9E,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,eAAe,QAASA,GAAkBA,EAAc,WAAW,CAAC,EAEjF,CACA,IAAI,gBAAiB,CACjB,OAAO,MAAM,KAAK,KAAK,kBAAkB,OAAO,CAAC,EAAE,OAAO,CAACC,EAAWC,IAAQD,EAAU,OAAO,MAAM,KAAKC,EAAI,OAAO,CAAC,CAAC,EAAG,CAAC,CAAC,CAChI,CACA,iBAAiBb,EAAS,CACtB,KAAK,6BAA6BA,CAAO,EAAE,iBAAiBA,CAAO,CACvE,CACA,oBAAoBA,EAASc,EAAsB,GAAO,CACtD,KAAK,6BAA6Bd,CAAO,EAAE,oBAAoBA,CAAO,EAClEc,GACA,KAAK,8BAA8Bd,CAAO,CAClD,CACA,YAAYe,EAAOC,EAASC,EAAS,CAAC,EAAG,CACrC,KAAK,YAAY,YAAYF,EAAO,SAASC,CAAO,GAAIC,CAAM,CAClE,CACA,8BAA8BjB,EAAS,CACnC,IAAMW,EAAgB,KAAK,6BAA6BX,CAAO,EAC1DW,EAAc,YAAY,IAC3BA,EAAc,WAAW,EACzB,KAAK,6BAA6BX,CAAO,EAEjD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EAC3CkB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EACtDmB,EAAiB,OAAOC,CAAQ,EAC5BD,EAAiB,MAAQ,GACzB,KAAK,kBAAkB,OAAOrB,CAAW,CACjD,CACA,6BAA6BG,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EACjD,OAAO,KAAK,mBAAmBH,EAAaC,EAAWC,CAAY,CACvE,CACA,mBAAmBF,EAAaC,EAAWC,EAAc,CACrD,IAAMmB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EAClDY,EAAgBO,EAAiB,IAAIC,CAAQ,EACjD,OAAKR,IACDA,EAAgB,KAAK,oBAAoBd,EAAaC,EAAWC,CAAY,EAC7EmB,EAAiB,IAAIC,EAAUR,CAAa,GAEzCA,CACX,CACA,oBAAoBd,EAAaC,EAAWC,EAAc,CACtD,IAAMY,EAAgB,IAAIf,GAAcC,EAAaC,EAAWC,CAAY,EAC5E,OAAI,KAAK,SACLY,EAAc,QAAQ,EAEnBA,CACX,CACA,oCAAoCd,EAAa,CAC7C,IAAIqB,EAAmB,KAAK,kBAAkB,IAAIrB,CAAW,EAC7D,OAAKqB,IACDA,EAAmB,IAAI,IACvB,KAAK,kBAAkB,IAAIrB,EAAaqB,CAAgB,GAErDA,CACX,CACA,SAASpB,EAAWC,EAAc,CAC9B,IAAMqB,EAAQ,CAACtB,CAAS,EACxB,cAAO,KAAKC,CAAY,EACnB,KAAK,EACL,QAASsB,GAAQ,CAClBD,EAAM,KAAK,GAAGrB,EAAasB,CAAG,EAAI,GAAK,GAAG,GAAGA,CAAG,EAAE,CACtD,CAAC,EACMD,EAAM,KAAK,GAAG,CACzB,CACJ,EAEME,GAAiC,CACnC,KAAK,CAAE,MAAArB,EAAO,MAAAsB,CAAM,EAAG,CACnB,OAAIA,GACAtB,EAAM,gBAAgB,EACnB,EACX,EACA,QAAQ,CAAE,MAAAA,EAAO,MAAAsB,CAAM,EAAG,CACtB,OAAIA,GACAtB,EAAM,eAAe,EAClB,EACX,EACA,KAAK,CAAE,MAAAA,EAAO,MAAAsB,EAAO,QAAAC,CAAQ,EAAG,CAC5B,OAAID,EACOC,IAAYvB,EAAM,OAGlB,EAEf,CACJ,EACMwB,GAAoB,+FAC1B,SAASC,GAA4BC,EAAkB,CAEnD,IAAMC,EADSD,EAAiB,KAAK,EACd,MAAMF,EAAiB,GAAK,CAAC,EAChD3B,EAAY8B,EAAQ,CAAC,EACrBC,EAAYD,EAAQ,CAAC,EACzB,OAAIC,GAAa,CAAC,CAAC,UAAW,QAAS,UAAU,EAAE,SAAS/B,CAAS,IACjEA,GAAa,IAAI+B,CAAS,GAC1BA,EAAY,IAET,CACH,YAAaC,GAAiBF,EAAQ,CAAC,CAAC,EACxC,UAAA9B,EACA,aAAc8B,EAAQ,CAAC,EAAIG,GAAkBH,EAAQ,CAAC,CAAC,EAAI,CAAC,EAC5D,WAAYA,EAAQ,CAAC,EACrB,WAAYA,EAAQ,CAAC,EACrB,UAAWA,EAAQ,CAAC,GAAKC,CAC7B,CACJ,CACA,SAASC,GAAiBE,EAAiB,CACvC,GAAIA,GAAmB,SACnB,OAAO,OAEN,GAAIA,GAAmB,WACxB,OAAO,QAEf,CACA,SAASD,GAAkBhC,EAAc,CACrC,OAAOA,EACF,MAAM,GAAG,EACT,OAAO,CAACkC,EAASC,IAAU,OAAO,OAAOD,EAAS,CAAE,CAACC,EAAM,QAAQ,KAAM,EAAE,CAAC,EAAG,CAAC,KAAK,KAAKA,CAAK,CAAE,CAAC,EAAG,CAAC,CAAC,CAChH,CACA,SAASC,GAAqBtC,EAAa,CACvC,GAAIA,GAAe,OACf,MAAO,SAEN,GAAIA,GAAe,SACpB,MAAO,UAEf,CAEA,SAASuC,GAASb,EAAO,CACrB,OAAOA,EAAM,QAAQ,sBAAuB,CAACc,EAAGC,IAASA,EAAK,YAAY,CAAC,CAC/E,CACA,SAASC,GAAkBhB,EAAO,CAC9B,OAAOa,GAASb,EAAM,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,CAAC,CACjE,CACA,SAASiB,GAAWjB,EAAO,CACvB,OAAOA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,CACxD,CACA,SAASkB,GAAUlB,EAAO,CACtB,OAAOA,EAAM,QAAQ,WAAY,CAACc,EAAGC,IAAS,IAAIA,EAAK,YAAY,CAAC,EAAE,CAC1E,CACA,SAASI,GAASnB,EAAO,CACrB,OAAOA,EAAM,MAAM,SAAS,GAAK,CAAC,CACtC,CAEA,SAASoB,GAAYC,EAAQ,CACzB,OAAOA,GAAW,IACtB,CACA,SAASC,GAAYD,EAAQE,EAAU,CACnC,OAAO,OAAO,UAAU,eAAe,KAAKF,EAAQE,CAAQ,CAChE,CAEA,IAAMC,GAAe,CAAC,OAAQ,OAAQ,MAAO,OAAO,EAC9CC,GAAN,KAAa,CACT,YAAYxB,EAASyB,EAAOC,EAAYC,EAAQ,CAC5C,KAAK,QAAU3B,EACf,KAAK,MAAQyB,EACb,KAAK,YAAcC,EAAW,aAAe1B,EAC7C,KAAK,UAAY0B,EAAW,WAAaE,GAA8B5B,CAAO,GAAKT,GAAM,oBAAoB,EAC7G,KAAK,aAAemC,EAAW,cAAgB,CAAC,EAChD,KAAK,WAAaA,EAAW,YAAcnC,GAAM,oBAAoB,EACrE,KAAK,WAAamC,EAAW,YAAcnC,GAAM,qBAAqB,EACtE,KAAK,UAAYmC,EAAW,WAAa,GACzC,KAAK,OAASC,CAClB,CACA,OAAO,SAASjB,EAAOiB,EAAQ,CAC3B,OAAO,IAAI,KAAKjB,EAAM,QAASA,EAAM,MAAOR,GAA4BQ,EAAM,OAAO,EAAGiB,CAAM,CAClG,CACA,UAAW,CACP,IAAME,EAAc,KAAK,UAAY,IAAI,KAAK,SAAS,GAAK,GACtDxD,EAAc,KAAK,gBAAkB,IAAI,KAAK,eAAe,GAAK,GACxE,MAAO,GAAG,KAAK,SAAS,GAAGwD,CAAW,GAAGxD,CAAW,KAAK,KAAK,UAAU,IAAI,KAAK,UAAU,EAC/F,CACA,0BAA0BI,EAAO,CAC7B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,KAAK,UAAU,MAAM,GAAG,EACxC,GAAI,KAAK,sBAAsBrD,EAAOqD,CAAO,EACzC,MAAO,GAEX,IAAMC,EAAiBD,EAAQ,OAAQjC,GAAQ,CAAC0B,GAAa,SAAS1B,CAAG,CAAC,EAAE,CAAC,EAC7E,OAAKkC,GAGAV,GAAY,KAAK,YAAaU,CAAc,GAC7CxC,GAAM,gCAAgC,KAAK,SAAS,EAAE,EAEnD,KAAK,YAAYwC,CAAc,EAAE,YAAY,IAAMtD,EAAM,IAAI,YAAY,GALrE,EAMf,CACA,uBAAuBA,EAAO,CAC1B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,CAAC,KAAK,SAAS,EAC/B,MAAI,OAAK,sBAAsBrD,EAAOqD,CAAO,CAIjD,CACA,IAAI,QAAS,CACT,IAAME,EAAS,CAAC,EACVC,EAAU,IAAI,OAAO,SAAS,KAAK,UAAU,eAAgB,GAAG,EACtE,OAAW,CAAE,KAAAC,EAAM,MAAAnC,CAAM,IAAK,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAG,CAC/D,IAAMoC,EAAQD,EAAK,MAAMD,CAAO,EAC1BpC,EAAMsC,GAASA,EAAM,CAAC,EACxBtC,IACAmC,EAAOpB,GAASf,CAAG,CAAC,EAAIuC,GAASrC,CAAK,EAE9C,CACA,OAAOiC,CACX,CACA,IAAI,iBAAkB,CAClB,OAAOrB,GAAqB,KAAK,WAAW,CAChD,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,sBAAsBlC,EAAOqD,EAAS,CAClC,GAAM,CAACO,EAAMC,EAAMC,EAAKC,CAAK,EAAIjB,GAAa,IAAKkB,GAAaX,EAAQ,SAASW,CAAQ,CAAC,EAC1F,OAAOhE,EAAM,UAAY4D,GAAQ5D,EAAM,UAAY6D,GAAQ7D,EAAM,SAAW8D,GAAO9D,EAAM,WAAa+D,CAC1G,CACJ,EACME,GAAoB,CACtB,EAAG,IAAM,QACT,OAAQ,IAAM,QACd,KAAM,IAAM,SACZ,QAAS,IAAM,SACf,MAAQC,GAAOA,EAAE,aAAa,MAAM,GAAK,SAAW,QAAU,QAC9D,OAAQ,IAAM,SACd,SAAU,IAAM,OACpB,EACA,SAASf,GAA8B5B,EAAS,CAC5C,IAAM4C,EAAU5C,EAAQ,QAAQ,YAAY,EAC5C,GAAI4C,KAAWF,GACX,OAAOA,GAAkBE,CAAO,EAAE5C,CAAO,CAEjD,CACA,SAAST,GAAMC,EAAS,CACpB,MAAM,IAAI,MAAMA,CAAO,CAC3B,CACA,SAAS4C,GAASrC,EAAO,CACrB,GAAI,CACA,OAAO,KAAK,MAAMA,CAAK,CAC3B,MACY,CACR,OAAOA,CACX,CACJ,CAEA,IAAM8C,GAAN,KAAc,CACV,YAAYC,EAASC,EAAQ,CACzB,KAAK,QAAUD,EACf,KAAK,OAASC,CAClB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,OAAO,KACvB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,cAAe,CACf,OAAO,KAAK,OAAO,YACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,YAAYtE,EAAO,CACf,IAAMuE,EAAc,KAAK,mBAAmBvE,CAAK,EAC7C,KAAK,qBAAqBA,CAAK,GAAK,KAAK,oBAAoBuE,CAAW,GACxE,KAAK,gBAAgBA,CAAW,CAExC,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,OAAO,SACvB,CACA,IAAI,QAAS,CACT,IAAMC,EAAS,KAAK,WAAW,KAAK,UAAU,EAC9C,GAAI,OAAOA,GAAU,WACjB,OAAOA,EAEX,MAAM,IAAI,MAAM,WAAW,KAAK,MAAM,kCAAkC,KAAK,UAAU,GAAG,CAC9F,CACA,oBAAoBxE,EAAO,CACvB,GAAM,CAAE,QAAAuB,CAAQ,EAAI,KAAK,OACnB,CAAE,wBAAAkD,CAAwB,EAAI,KAAK,QAAQ,YAC3C,CAAE,WAAAC,CAAW,EAAI,KAAK,QACxBC,EAAS,GACb,OAAW,CAAClB,EAAMnC,CAAK,IAAK,OAAO,QAAQ,KAAK,YAAY,EACxD,GAAImC,KAAQgB,EAAyB,CACjC,IAAMG,EAASH,EAAwBhB,CAAI,EAC3CkB,EAASA,GAAUC,EAAO,CAAE,KAAAnB,EAAM,MAAAnC,EAAO,MAAAtB,EAAO,QAAAuB,EAAS,WAAAmD,CAAW,CAAC,CACzE,KAEI,UAGR,OAAOC,CACX,CACA,mBAAmB3E,EAAO,CACtB,OAAO,OAAO,OAAOA,EAAO,CAAE,OAAQ,KAAK,OAAO,MAAO,CAAC,CAC9D,CACA,gBAAgBA,EAAO,CACnB,GAAM,CAAE,OAAA6E,EAAQ,cAAAC,CAAc,EAAI9E,EAClC,GAAI,CACA,KAAK,OAAO,KAAK,KAAK,WAAYA,CAAK,EACvC,KAAK,QAAQ,iBAAiB,KAAK,WAAY,CAAE,MAAAA,EAAO,OAAA6E,EAAQ,cAAAC,EAAe,OAAQ,KAAK,UAAW,CAAC,CAC5G,OACOhE,EAAO,CACV,GAAM,CAAE,WAAAiE,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,CAAM,EAAI,KAC7ChC,EAAS,CAAE,WAAA+D,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,EAAO,MAAAhD,CAAM,EAC/D,KAAK,QAAQ,YAAYc,EAAO,oBAAoB,KAAK,MAAM,IAAKE,CAAM,CAC9E,CACJ,CACA,qBAAqBhB,EAAO,CACxB,IAAMJ,EAAcI,EAAM,OAI1B,OAHIA,aAAiB,eAAiB,KAAK,OAAO,0BAA0BA,CAAK,GAG7EA,aAAiB,YAAc,KAAK,OAAO,uBAAuBA,CAAK,EAChE,GAEP,KAAK,UAAYJ,EACV,GAEFA,aAAuB,SAAW,KAAK,QAAQ,SAASA,CAAW,EACjE,KAAK,MAAM,gBAAgBA,CAAW,EAGtC,KAAK,MAAM,gBAAgB,KAAK,OAAO,OAAO,CAE7D,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEMoF,GAAN,KAAsB,CAClB,YAAYzD,EAAS0D,EAAU,CAC3B,KAAK,qBAAuB,CAAE,WAAY,GAAM,UAAW,GAAM,QAAS,EAAK,EAC/E,KAAK,QAAU1D,EACf,KAAK,QAAU,GACf,KAAK,SAAW0D,EAChB,KAAK,SAAW,IAAI,IACpB,KAAK,iBAAmB,IAAI,iBAAkBC,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAQ,EAErB,CACA,MAAMC,EAAU,CACR,KAAK,UACL,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,IAEnBA,EAAS,EACJ,KAAK,UACN,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QAAS,CACd,IAAMxD,EAAU,IAAI,IAAI,KAAK,oBAAoB,CAAC,EAClD,QAAWJ,KAAW,MAAM,KAAK,KAAK,QAAQ,EACrCI,EAAQ,IAAIJ,CAAO,GACpB,KAAK,cAAcA,CAAO,EAGlC,QAAWA,KAAW,MAAM,KAAKI,CAAO,EACpC,KAAK,WAAWJ,CAAO,CAE/B,CACJ,CACA,iBAAiB2D,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CAClBA,EAAS,MAAQ,aACjB,KAAK,uBAAuBA,EAAS,OAAQA,EAAS,aAAa,EAE9DA,EAAS,MAAQ,cACtB,KAAK,oBAAoBA,EAAS,YAAY,EAC9C,KAAK,kBAAkBA,EAAS,UAAU,EAElD,CACA,uBAAuB7D,EAAS8D,EAAe,CACvC,KAAK,SAAS,IAAI9D,CAAO,EACrB,KAAK,SAAS,yBAA2B,KAAK,aAAaA,CAAO,EAClE,KAAK,SAAS,wBAAwBA,EAAS8D,CAAa,EAG5D,KAAK,cAAc9D,CAAO,EAGzB,KAAK,aAAaA,CAAO,GAC9B,KAAK,WAAWA,CAAO,CAE/B,CACA,oBAAoB+D,EAAO,CACvB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GACA,KAAK,YAAYA,EAAS,KAAK,aAAa,CAEpD,CACJ,CACA,kBAAkB+D,EAAO,CACrB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GAAW,KAAK,gBAAgBA,CAAO,GACvC,KAAK,YAAYA,EAAS,KAAK,UAAU,CAEjD,CACJ,CACA,aAAaA,EAAS,CAClB,OAAO,KAAK,SAAS,aAAaA,CAAO,CAC7C,CACA,oBAAoBiE,EAAO,KAAK,QAAS,CACrC,OAAO,KAAK,SAAS,oBAAoBA,CAAI,CACjD,CACA,YAAYA,EAAMC,EAAW,CACzB,QAAWlE,KAAW,KAAK,oBAAoBiE,CAAI,EAC/CC,EAAU,KAAK,KAAMlE,CAAO,CAEpC,CACA,gBAAgBgE,EAAM,CAClB,GAAIA,EAAK,UAAY,KAAK,aACtB,OAAOA,CAEf,CACA,gBAAgBhE,EAAS,CACrB,OAAIA,EAAQ,aAAe,KAAK,QAAQ,YAC7B,GAGA,KAAK,QAAQ,SAASA,CAAO,CAE5C,CACA,WAAWA,EAAS,CACX,KAAK,SAAS,IAAIA,CAAO,GACtB,KAAK,gBAAgBA,CAAO,IAC5B,KAAK,SAAS,IAAIA,CAAO,EACrB,KAAK,SAAS,gBACd,KAAK,SAAS,eAAeA,CAAO,EAIpD,CACA,cAAcA,EAAS,CACf,KAAK,SAAS,IAAIA,CAAO,IACzB,KAAK,SAAS,OAAOA,CAAO,EACxB,KAAK,SAAS,kBACd,KAAK,SAAS,iBAAiBA,CAAO,EAGlD,CACJ,EAEMmE,GAAN,KAAwB,CACpB,YAAYnE,EAAS8D,EAAeJ,EAAU,CAC1C,KAAK,cAAgBI,EACrB,KAAK,SAAWJ,EAChB,KAAK,gBAAkB,IAAID,GAAgBzD,EAAS,IAAI,CAC5D,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,MAAO,IAAI,KAAK,aAAa,GACjC,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAM4D,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAa5D,EAAS,CAClB,OAAOA,EAAQ,aAAa,KAAK,aAAa,CAClD,CACA,oBAAoBiE,EAAM,CACtB,IAAM9B,EAAQ,KAAK,aAAa8B,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5C7D,EAAU,MAAM,KAAK6D,EAAK,iBAAiB,KAAK,QAAQ,CAAC,EAC/D,OAAO9B,EAAM,OAAO/B,CAAO,CAC/B,CACA,eAAeJ,EAAS,CAChB,KAAK,SAAS,yBACd,KAAK,SAAS,wBAAwBA,EAAS,KAAK,aAAa,CAEzE,CACA,iBAAiBA,EAAS,CAClB,KAAK,SAAS,2BACd,KAAK,SAAS,0BAA0BA,EAAS,KAAK,aAAa,CAE3E,CACA,wBAAwBA,EAAS8D,EAAe,CACxC,KAAK,SAAS,8BAAgC,KAAK,eAAiBA,GACpE,KAAK,SAAS,6BAA6B9D,EAAS8D,CAAa,CAEzE,CACJ,EAEA,SAASM,GAAI/E,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,IAAIE,CAAK,CAC7B,CACA,SAASuE,GAAIjF,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,OAAOE,CAAK,EAC5BwE,GAAMlF,EAAKQ,CAAG,CAClB,CACA,SAASwE,GAAMhF,EAAKQ,EAAK,CACrB,IAAI2E,EAASnF,EAAI,IAAIQ,CAAG,EACxB,OAAK2E,IACDA,EAAS,IAAI,IACbnF,EAAI,IAAIQ,EAAK2E,CAAM,GAEhBA,CACX,CACA,SAASD,GAAMlF,EAAKQ,EAAK,CACrB,IAAM2E,EAASnF,EAAI,IAAIQ,CAAG,EACtB2E,GAAU,MAAQA,EAAO,MAAQ,GACjCnF,EAAI,OAAOQ,CAAG,CAEtB,CAEA,IAAM4E,GAAN,KAAe,CACX,aAAc,CACV,KAAK,YAAc,IAAI,GAC3B,CACA,IAAI,MAAO,CACP,OAAO,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAC7C,CACA,IAAI,QAAS,CAET,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACD,EAAQE,IAAQF,EAAO,OAAO,MAAM,KAAKE,CAAG,CAAC,EAAG,CAAC,CAAC,CAC1E,CACA,IAAI,MAAO,CAEP,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACC,EAAMD,IAAQC,EAAOD,EAAI,KAAM,CAAC,CACxD,CACA,IAAI7E,EAAKE,EAAO,CACZqE,GAAI,KAAK,YAAavE,EAAKE,CAAK,CACpC,CACA,OAAOF,EAAKE,EAAO,CACfuE,GAAI,KAAK,YAAazE,EAAKE,CAAK,CACpC,CACA,IAAIF,EAAKE,EAAO,CACZ,IAAMyE,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,GAAU,MAAQA,EAAO,IAAIzE,CAAK,CAC7C,CACA,OAAOF,EAAK,CACR,OAAO,KAAK,YAAY,IAAIA,CAAG,CACnC,CACA,SAASE,EAAO,CAEZ,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,KAAM2E,GAAQA,EAAI,IAAI3E,CAAK,CAAC,CAC5C,CACA,gBAAgBF,EAAK,CACjB,IAAM2E,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,EAAS,MAAM,KAAKA,CAAM,EAAI,CAAC,CAC1C,CACA,gBAAgBzE,EAAO,CACnB,OAAO,MAAM,KAAK,KAAK,WAAW,EAC7B,OAAO,CAAC,CAAC6E,EAAMJ,CAAM,IAAMA,EAAO,IAAIzE,CAAK,CAAC,EAC5C,IAAI,CAAC,CAACF,EAAKgF,CAAO,IAAMhF,CAAG,CACpC,CACJ,EA2BA,IAAMiF,GAAN,KAAuB,CACnB,YAAYC,EAASC,EAAUC,EAAUC,EAAS,CAC9C,KAAK,UAAYF,EACjB,KAAK,QAAUE,EACf,KAAK,gBAAkB,IAAIC,GAAgBJ,EAAS,IAAI,EACxD,KAAK,SAAWE,EAChB,KAAK,iBAAmB,IAAIG,EAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,SAChB,CACA,IAAI,SAASJ,EAAU,CACnB,KAAK,UAAYA,EACjB,KAAK,QAAQ,CACjB,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAMK,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAaN,EAAS,CAClB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAUP,EAAQ,QAAQC,CAAQ,EACxC,OAAI,KAAK,SAAS,qBACPM,GAAW,KAAK,SAAS,qBAAqBP,EAAS,KAAK,OAAO,EAEvEO,CACX,KAEI,OAAO,EAEf,CACA,oBAAoBC,EAAM,CACtB,GAAM,CAAE,SAAAP,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMQ,EAAQ,KAAK,aAAaD,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5CD,EAAU,MAAM,KAAKC,EAAK,iBAAiBP,CAAQ,CAAC,EAAE,OAAQQ,GAAU,KAAK,aAAaA,CAAK,CAAC,EACtG,OAAOA,EAAM,OAAOF,CAAO,CAC/B,KAEI,OAAO,CAAC,CAEhB,CACA,eAAeP,EAAS,CACpB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACjBA,GACA,KAAK,gBAAgBD,EAASC,CAAQ,CAE9C,CACA,iBAAiBD,EAAS,CACtB,IAAMU,EAAY,KAAK,iBAAiB,gBAAgBV,CAAO,EAC/D,QAAWC,KAAYS,EACnB,KAAK,kBAAkBV,EAASC,CAAQ,CAEhD,CACA,wBAAwBD,EAASW,EAAgB,CAC7C,GAAM,CAAE,SAAAV,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAU,KAAK,aAAaP,CAAO,EACnCY,EAAgB,KAAK,iBAAiB,IAAIX,EAAUD,CAAO,EAC7DO,GAAW,CAACK,EACZ,KAAK,gBAAgBZ,EAASC,CAAQ,EAEjC,CAACM,GAAWK,GACjB,KAAK,kBAAkBZ,EAASC,CAAQ,CAEhD,CACJ,CACA,gBAAgBD,EAASC,EAAU,CAC/B,KAAK,SAAS,gBAAgBD,EAASC,EAAU,KAAK,OAAO,EAC7D,KAAK,iBAAiB,IAAIA,EAAUD,CAAO,CAC/C,CACA,kBAAkBA,EAASC,EAAU,CACjC,KAAK,SAAS,kBAAkBD,EAASC,EAAU,KAAK,OAAO,EAC/D,KAAK,iBAAiB,OAAOA,EAAUD,CAAO,CAClD,CACJ,EAEMa,GAAN,KAAwB,CACpB,YAAYb,EAASE,EAAU,CAC3B,KAAK,QAAUF,EACf,KAAK,SAAWE,EAChB,KAAK,QAAU,GACf,KAAK,UAAY,IAAI,IACrB,KAAK,iBAAmB,IAAI,iBAAkBY,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,CAAE,WAAY,GAAM,kBAAmB,EAAK,CAAC,EACzF,KAAK,QAAQ,EAErB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QACL,QAAWC,KAAiB,KAAK,oBAC7B,KAAK,iBAAiBA,EAAe,IAAI,CAGrD,CACA,iBAAiBD,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CACtB,IAAMD,EAAgBC,EAAS,cAC3BD,GACA,KAAK,iBAAiBA,EAAeC,EAAS,QAAQ,CAE9D,CACA,iBAAiBD,EAAeE,EAAU,CACtC,IAAMC,EAAM,KAAK,SAAS,4BAA4BH,CAAa,EACnE,GAAIG,GAAO,KAAM,CACR,KAAK,UAAU,IAAIH,CAAa,GACjC,KAAK,kBAAkBG,EAAKH,CAAa,EAE7C,IAAMI,EAAQ,KAAK,QAAQ,aAAaJ,CAAa,EAIrD,GAHI,KAAK,UAAU,IAAIA,CAAa,GAAKI,GACrC,KAAK,sBAAsBA,EAAOD,EAAKD,CAAQ,EAE/CE,GAAS,KAAM,CACf,IAAMF,EAAW,KAAK,UAAU,IAAIF,CAAa,EACjD,KAAK,UAAU,OAAOA,CAAa,EAC/BE,GACA,KAAK,oBAAoBC,EAAKH,EAAeE,CAAQ,CAC7D,MAEI,KAAK,UAAU,IAAIF,EAAeI,CAAK,CAE/C,CACJ,CACA,kBAAkBD,EAAKH,EAAe,CAC9B,KAAK,SAAS,mBACd,KAAK,SAAS,kBAAkBG,EAAKH,CAAa,CAE1D,CACA,sBAAsBI,EAAOD,EAAKD,EAAU,CACpC,KAAK,SAAS,uBACd,KAAK,SAAS,sBAAsBE,EAAOD,EAAKD,CAAQ,CAEhE,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC1C,KAAK,SAAS,qBACd,KAAK,SAAS,oBAAoBC,EAAKH,EAAeE,CAAQ,CAEtE,CACA,IAAI,qBAAsB,CACtB,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,sBAAsB,OAAO,KAAK,sBAAsB,CAAC,CAAC,CAC7F,CACA,IAAI,uBAAwB,CACxB,OAAO,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAE,IAAKG,GAAcA,EAAU,IAAI,CAChF,CACA,IAAI,wBAAyB,CACzB,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC,CAC3C,CACJ,EAEMC,GAAN,KAAwB,CACpB,YAAYrB,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAIoB,GAAkBtB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,gBAAkB,IAAIG,EAC/B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAMC,EAAU,CACZ,KAAK,kBAAkB,MAAMA,CAAQ,CACzC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,wBAAwBN,EAAS,CAC7B,KAAK,cAAc,KAAK,qBAAqBA,CAAO,CAAC,CACzD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAACuB,EAAiBC,CAAa,EAAI,KAAK,wBAAwBxB,CAAO,EAC7E,KAAK,gBAAgBuB,CAAe,EACpC,KAAK,cAAcC,CAAa,CACpC,CACA,0BAA0BxB,EAAS,CAC/B,KAAK,gBAAgB,KAAK,gBAAgB,gBAAgBA,CAAO,CAAC,CACtE,CACA,cAAcyB,EAAQ,CAClBA,EAAO,QAASC,GAAU,KAAK,aAAaA,CAAK,CAAC,CACtD,CACA,gBAAgBD,EAAQ,CACpBA,EAAO,QAASC,GAAU,KAAK,eAAeA,CAAK,CAAC,CACxD,CACA,aAAaA,EAAO,CAChB,KAAK,SAAS,aAAaA,CAAK,EAChC,KAAK,gBAAgB,IAAIA,EAAM,QAASA,CAAK,CACjD,CACA,eAAeA,EAAO,CAClB,KAAK,SAAS,eAAeA,CAAK,EAClC,KAAK,gBAAgB,OAAOA,EAAM,QAASA,CAAK,CACpD,CACA,wBAAwB1B,EAAS,CAC7B,IAAM2B,EAAiB,KAAK,gBAAgB,gBAAgB3B,CAAO,EAC7D4B,EAAgB,KAAK,qBAAqB5B,CAAO,EACjD6B,EAAsBC,GAAIH,EAAgBC,CAAa,EAAE,UAAU,CAAC,CAACG,EAAeC,CAAY,IAAM,CAACC,GAAeF,EAAeC,CAAY,CAAC,EACxJ,OAAIH,GAAuB,GAChB,CAAC,CAAC,EAAG,CAAC,CAAC,EAGP,CAACF,EAAe,MAAME,CAAmB,EAAGD,EAAc,MAAMC,CAAmB,CAAC,CAEnG,CACA,qBAAqB7B,EAAS,CAC1B,IAAMe,EAAgB,KAAK,cACrBmB,EAAclC,EAAQ,aAAae,CAAa,GAAK,GAC3D,OAAOoB,GAAiBD,EAAalC,EAASe,CAAa,CAC/D,CACJ,EACA,SAASoB,GAAiBD,EAAalC,EAASe,EAAe,CAC3D,OAAOmB,EACF,KAAK,EACL,MAAM,KAAK,EACX,OAAQE,GAAYA,EAAQ,MAAM,EAClC,IAAI,CAACA,EAASC,KAAW,CAAE,QAAArC,EAAS,cAAAe,EAAe,QAAAqB,EAAS,MAAAC,CAAM,EAAE,CAC7E,CACA,SAASP,GAAIQ,EAAMC,EAAO,CACtB,IAAMC,EAAS,KAAK,IAAIF,EAAK,OAAQC,EAAM,MAAM,EACjD,OAAO,MAAM,KAAK,CAAE,OAAAC,CAAO,EAAG,CAACC,EAAGJ,IAAU,CAACC,EAAKD,CAAK,EAAGE,EAAMF,CAAK,CAAC,CAAC,CAC3E,CACA,SAASJ,GAAeK,EAAMC,EAAO,CACjC,OAAOD,GAAQC,GAASD,EAAK,OAASC,EAAM,OAASD,EAAK,SAAWC,EAAM,OAC/E,CAEA,IAAMG,GAAN,KAAwB,CACpB,YAAY1C,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAImB,GAAkBrB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,oBAAsB,IAAI,QAC/B,KAAK,uBAAyB,IAAI,OACtC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,aAAawB,EAAO,CAChB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,IAAI0B,EAAOP,CAAK,EAC3D,KAAK,SAAS,oBAAoBnB,EAASmB,CAAK,EAExD,CACA,eAAeO,EAAO,CAClB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,OAAO0B,CAAK,EACvD,KAAK,SAAS,sBAAsB1B,EAASmB,CAAK,EAE1D,CACA,yBAAyBO,EAAO,CAC5B,IAAIiB,EAAc,KAAK,oBAAoB,IAAIjB,CAAK,EACpD,OAAKiB,IACDA,EAAc,KAAK,WAAWjB,CAAK,EACnC,KAAK,oBAAoB,IAAIA,EAAOiB,CAAW,GAE5CA,CACX,CACA,6BAA6B3C,EAAS,CAClC,IAAI4C,EAAgB,KAAK,uBAAuB,IAAI5C,CAAO,EAC3D,OAAK4C,IACDA,EAAgB,IAAI,IACpB,KAAK,uBAAuB,IAAI5C,EAAS4C,CAAa,GAEnDA,CACX,CACA,WAAWlB,EAAO,CACd,GAAI,CAEA,MAAO,CAAE,MADK,KAAK,SAAS,mBAAmBA,CAAK,CACrC,CACnB,OACOmB,EAAO,CACV,MAAO,CAAE,MAAAA,CAAM,CACnB,CACJ,CACJ,EAEMC,GAAN,KAAsB,CAClB,YAAYC,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,iBAAmB,IAAI,GAChC,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,gBAAiB,IAAI,EACvF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBACZ,KAAK,qBAAqB,EAElC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,OAAO,eACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,OAAO,CAAC,CACpD,CACA,cAAcM,EAAQ,CAClB,IAAMC,EAAU,IAAIC,GAAQ,KAAK,QAASF,CAAM,EAChD,KAAK,iBAAiB,IAAIA,EAAQC,CAAO,EACzC,KAAK,SAAS,iBAAiBA,CAAO,CAC1C,CACA,iBAAiBD,EAAQ,CACrB,IAAMC,EAAU,KAAK,iBAAiB,IAAID,CAAM,EAC5CC,IACA,KAAK,iBAAiB,OAAOD,CAAM,EACnC,KAAK,SAAS,oBAAoBC,CAAO,EAEjD,CACA,sBAAuB,CACnB,KAAK,SAAS,QAASA,GAAY,KAAK,SAAS,oBAAoBA,EAAS,EAAI,CAAC,EACnF,KAAK,iBAAiB,MAAM,CAChC,CACA,mBAAmBvB,EAAO,CACtB,IAAMsB,EAASG,GAAO,SAASzB,EAAO,KAAK,MAAM,EACjD,GAAIsB,EAAO,YAAc,KAAK,WAC1B,OAAOA,CAEf,CACA,oBAAoBhD,EAASgD,EAAQ,CACjC,KAAK,cAAcA,CAAM,CAC7B,CACA,sBAAsBhD,EAASgD,EAAQ,CACnC,KAAK,iBAAiBA,CAAM,CAChC,CACJ,EAEMI,GAAN,KAAoB,CAChB,YAAYL,EAASM,EAAU,CAC3B,KAAK,QAAUN,EACf,KAAK,SAAWM,EAChB,KAAK,kBAAoB,IAAIxC,GAAkB,KAAK,QAAS,IAAI,EACjE,KAAK,mBAAqB,KAAK,WAAW,kBAC9C,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,EAC7B,KAAK,uCAAuC,CAChD,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,4BAA4BE,EAAe,CACvC,GAAIA,KAAiB,KAAK,mBACtB,OAAO,KAAK,mBAAmBA,CAAa,EAAE,IAEtD,CACA,kBAAkBG,EAAKH,EAAe,CAClC,IAAMuC,EAAa,KAAK,mBAAmBvC,CAAa,EACnD,KAAK,SAASG,CAAG,GAClB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,CAAG,CAAC,EAAGoC,EAAW,OAAOA,EAAW,YAAY,CAAC,CAEzH,CACA,sBAAsBnC,EAAOoC,EAAMtC,EAAU,CACzC,IAAMqC,EAAa,KAAK,uBAAuBC,CAAI,EAC/CpC,IAAU,OAEVF,IAAa,OACbA,EAAWqC,EAAW,OAAOA,EAAW,YAAY,GAExD,KAAK,sBAAsBC,EAAMpC,EAAOF,CAAQ,EACpD,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC9C,IAAMqC,EAAa,KAAK,uBAAuBpC,CAAG,EAC9C,KAAK,SAASA,CAAG,EACjB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,CAAG,CAAC,EAAGD,CAAQ,EAG/E,KAAK,sBAAsBC,EAAKoC,EAAW,OAAOA,EAAW,YAAY,EAAGrC,CAAQ,CAE5F,CACA,wCAAyC,CACrC,OAAW,CAAE,IAAAC,EAAK,KAAAqC,EAAM,aAAAC,EAAc,OAAAC,CAAO,IAAK,KAAK,iBAC/CD,GAAgB,MAAa,CAAC,KAAK,WAAW,KAAK,IAAItC,CAAG,GAC1D,KAAK,sBAAsBqC,EAAME,EAAOD,CAAY,EAAG,MAAS,CAG5E,CACA,sBAAsBD,EAAMG,EAAUC,EAAa,CAC/C,IAAMC,EAAoB,GAAGL,CAAI,UAC3BM,EAAgB,KAAK,SAASD,CAAiB,EACrD,GAAI,OAAOC,GAAiB,WAAY,CACpC,IAAMP,EAAa,KAAK,uBAAuBC,CAAI,EACnD,GAAI,CACA,IAAMpC,EAAQmC,EAAW,OAAOI,CAAQ,EACpCzC,EAAW0C,EACXA,IACA1C,EAAWqC,EAAW,OAAOK,CAAW,GAE5CE,EAAc,KAAK,KAAK,SAAU1C,EAAOF,CAAQ,CACrD,OACO4B,EAAO,CACV,MAAIA,aAAiB,YACjBA,EAAM,QAAU,mBAAmB,KAAK,QAAQ,UAAU,IAAIS,EAAW,IAAI,OAAOT,EAAM,OAAO,IAE/FA,CACV,CACJ,CACJ,CACA,IAAI,kBAAmB,CACnB,GAAM,CAAE,mBAAAiB,CAAmB,EAAI,KAC/B,OAAO,OAAO,KAAKA,CAAkB,EAAE,IAAK5C,GAAQ4C,EAAmB5C,CAAG,CAAC,CAC/E,CACA,IAAI,wBAAyB,CACzB,IAAM6C,EAAc,CAAC,EACrB,cAAO,KAAK,KAAK,kBAAkB,EAAE,QAAS7C,GAAQ,CAClD,IAAMoC,EAAa,KAAK,mBAAmBpC,CAAG,EAC9C6C,EAAYT,EAAW,IAAI,EAAIA,CACnC,CAAC,EACMS,CACX,CACA,SAAShD,EAAe,CACpB,IAAMuC,EAAa,KAAK,uBAAuBvC,CAAa,EACtDiD,EAAgB,MAAMC,GAAWX,EAAW,IAAI,CAAC,GACvD,OAAO,KAAK,SAASU,CAAa,CACtC,CACJ,EAEME,GAAN,KAAqB,CACjB,YAAYnB,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,EAC7B,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIgB,GAAkB,KAAK,QAAS,KAAK,cAAe,IAAI,EACrF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBAEpB,CACA,aAAa,CAAE,QAAArB,EAAS,QAASuD,CAAK,EAAG,CACjC,KAAK,MAAM,gBAAgBvD,CAAO,GAClC,KAAK,cAAcA,EAASuD,CAAI,CAExC,CACA,eAAe,CAAE,QAAAvD,EAAS,QAASuD,CAAK,EAAG,CACvC,KAAK,iBAAiBvD,EAASuD,CAAI,CACvC,CACA,cAAcvD,EAASuD,EAAM,CACzB,IAAIY,EACC,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACrC,KAAK,cAAc,IAAIuD,EAAMvD,CAAO,GACnCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBnE,EAASuD,CAAI,CAAC,EAEtI,CACA,iBAAiBvD,EAASuD,EAAM,CAC5B,IAAIY,EACA,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACpC,KAAK,cAAc,OAAOuD,EAAMvD,CAAO,GACtCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBnE,EAASuD,CAAI,CAAC,EAEzI,CACA,sBAAuB,CACnB,QAAWA,KAAQ,KAAK,cAAc,KAClC,QAAWvD,KAAW,KAAK,cAAc,gBAAgBuD,CAAI,EACzD,KAAK,iBAAiBvD,EAASuD,CAAI,CAG/C,CACA,IAAI,eAAgB,CAChB,MAAO,QAAQ,KAAK,QAAQ,UAAU,SAC1C,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEA,SAASa,GAAiCC,EAAaC,EAAc,CACjE,IAAMC,EAAYC,GAA2BH,CAAW,EACxD,OAAO,MAAM,KAAKE,EAAU,OAAO,CAACE,EAAQJ,KACxCK,GAAwBL,EAAaC,CAAY,EAAE,QAASf,GAASkB,EAAO,IAAIlB,CAAI,CAAC,EAC9EkB,GACR,IAAI,GAAK,CAAC,CACjB,CACA,SAASE,GAAiCN,EAAaC,EAAc,CAEjE,OADkBE,GAA2BH,CAAW,EACvC,OAAO,CAACO,EAAOP,KAC5BO,EAAM,KAAK,GAAGC,GAAwBR,EAAaC,CAAY,CAAC,EACzDM,GACR,CAAC,CAAC,CACT,CACA,SAASJ,GAA2BH,EAAa,CAC7C,IAAME,EAAY,CAAC,EACnB,KAAOF,GACHE,EAAU,KAAKF,CAAW,EAC1BA,EAAc,OAAO,eAAeA,CAAW,EAEnD,OAAOE,EAAU,QAAQ,CAC7B,CACA,SAASG,GAAwBL,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,CAAY,EAC3C,OAAO,MAAM,QAAQQ,CAAU,EAAIA,EAAa,CAAC,CACrD,CACA,SAASD,GAAwBR,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,CAAY,EAC3C,OAAOQ,EAAa,OAAO,KAAKA,CAAU,EAAE,IAAK5D,GAAQ,CAACA,EAAK4D,EAAW5D,CAAG,CAAC,CAAC,EAAI,CAAC,CACxF,CAEA,IAAM6D,GAAN,KAAqB,CACjB,YAAYhC,EAAS7C,EAAU,CAC3B,KAAK,QAAU,GACf,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,GACzB,KAAK,qBAAuB,IAAIA,GAChC,KAAK,oBAAsB,IAAI,IAC/B,KAAK,qBAAuB,IAAI,GACpC,CACA,OAAQ,CACC,KAAK,UACN,KAAK,kBAAkB,QAAS2E,GAAe,CAC3C,KAAK,+BAA+BA,CAAU,EAC9C,KAAK,gCAAgCA,CAAU,CACnD,CAAC,EACD,KAAK,QAAU,GACf,KAAK,kBAAkB,QAASjC,GAAYA,EAAQ,QAAQ,CAAC,EAErE,CACA,SAAU,CACN,KAAK,oBAAoB,QAASkC,GAAaA,EAAS,QAAQ,CAAC,EACjE,KAAK,qBAAqB,QAASA,GAAaA,EAAS,QAAQ,CAAC,CACtE,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAEpC,CACA,uBAAwB,CAChB,KAAK,oBAAoB,KAAO,IAChC,KAAK,oBAAoB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC9D,KAAK,oBAAoB,MAAM,EAEvC,CACA,wBAAyB,CACjB,KAAK,qBAAqB,KAAO,IACjC,KAAK,qBAAqB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC/D,KAAK,qBAAqB,MAAM,EAExC,CACA,gBAAgBjF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAChD,IAAMG,EAAS,KAAK,UAAUnF,EAASgF,CAAU,EAC7CG,GACA,KAAK,cAAcA,EAAQnF,EAASgF,CAAU,CAEtD,CACA,kBAAkBhF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAClD,IAAMG,EAAS,KAAK,iBAAiBnF,EAASgF,CAAU,EACpDG,GACA,KAAK,iBAAiBA,EAAQnF,EAASgF,CAAU,CAEzD,CACA,qBAAqBhF,EAAS,CAAE,WAAAgF,CAAW,EAAG,CAC1C,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCI,EAAY,KAAK,UAAUpF,EAASgF,CAAU,EAC9CK,EAAsBrF,EAAQ,QAAQ,IAAI,KAAK,OAAO,mBAAmB,KAAKgF,CAAU,GAAG,EACjG,OAAI/E,EACOmF,GAAaC,GAAuBrF,EAAQ,QAAQC,CAAQ,EAG5D,EAEf,CACA,wBAAwBqF,EAAUvE,EAAe,CAC7C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,6BAA6BM,EAAUvE,EAAe,CAClD,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,0BAA0BM,EAAUvE,EAAe,CAC/C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,cAAcG,EAAQnF,EAASgF,EAAY,CACvC,IAAIb,EACC,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IAClD,KAAK,cAAc,IAAIgF,EAAYG,CAAM,EACzC,KAAK,qBAAqB,IAAIH,EAAYhF,CAAO,GAChDmE,EAAK,KAAK,oBAAoB,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBgB,EAAQnF,EAASgF,CAAU,CAAC,EAEtK,CACA,iBAAiBG,EAAQnF,EAASgF,EAAY,CAC1C,IAAIb,EACA,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IACjD,KAAK,cAAc,OAAOgF,EAAYG,CAAM,EAC5C,KAAK,qBAAqB,OAAOH,EAAYhF,CAAO,GACnDmE,EAAK,KAAK,oBACN,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBgB,EAAQnF,EAASgF,CAAU,CAAC,EAE/I,CACA,sBAAuB,CACnB,QAAWA,KAAc,KAAK,qBAAqB,KAC/C,QAAWhF,KAAW,KAAK,qBAAqB,gBAAgBgF,CAAU,EACtE,QAAWG,KAAU,KAAK,cAAc,gBAAgBH,CAAU,EAC9D,KAAK,iBAAiBG,EAAQnF,EAASgF,CAAU,CAIjE,CACA,gCAAgCA,EAAY,CACxC,IAAMC,EAAW,KAAK,oBAAoB,IAAID,CAAU,EACpDC,IACAA,EAAS,SAAW,KAAK,SAASD,CAAU,EAEpD,CACA,+BAA+BA,EAAY,CACvC,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCO,EAAmB,IAAIxF,GAAiB,SAAS,KAAME,EAAU,KAAM,CAAE,WAAA+E,CAAW,CAAC,EAC3F,KAAK,oBAAoB,IAAIA,EAAYO,CAAgB,EACzDA,EAAiB,MAAM,CAC3B,CACA,gCAAgCP,EAAY,CACxC,IAAMjE,EAAgB,KAAK,2BAA2BiE,CAAU,EAC1DQ,EAAoB,IAAIlE,GAAkB,KAAK,MAAM,QAASP,EAAe,IAAI,EACvF,KAAK,qBAAqB,IAAIiE,EAAYQ,CAAiB,EAC3DA,EAAkB,MAAM,CAC5B,CACA,SAASR,EAAY,CACjB,OAAO,KAAK,MAAM,QAAQ,yBAAyBA,CAAU,CACjE,CACA,2BAA2BA,EAAY,CACnC,OAAO,KAAK,MAAM,OAAO,wBAAwB,KAAK,WAAYA,CAAU,CAChF,CACA,qCAAqCjE,EAAe,CAChD,OAAO,KAAK,kBAAkB,KAAMiE,GAAe,KAAK,2BAA2BA,CAAU,IAAMjE,CAAa,CACpH,CACA,IAAI,oBAAqB,CACrB,IAAM0E,EAAe,IAAIpF,GACzB,YAAK,OAAO,QAAQ,QAASqF,GAAW,CACpC,IAAMrB,EAAcqB,EAAO,WAAW,sBACtBtB,GAAiCC,EAAa,SAAS,EAC/D,QAASc,GAAWM,EAAa,IAAIN,EAAQO,EAAO,UAAU,CAAC,CAC3E,CAAC,EACMD,CACX,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,gCAAiC,CACjC,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,mBAAoB,CACpB,IAAME,EAAc,KAAK,+BACzB,OAAO,KAAK,OAAO,SAAS,OAAQ5C,GAAY4C,EAAY,SAAS5C,EAAQ,UAAU,CAAC,CAC5F,CACA,UAAU/C,EAASgF,EAAY,CAC3B,MAAO,CAAC,CAAC,KAAK,UAAUhF,EAASgF,CAAU,GAAK,CAAC,CAAC,KAAK,iBAAiBhF,EAASgF,CAAU,CAC/F,CACA,UAAUhF,EAASgF,EAAY,CAC3B,OAAO,KAAK,YAAY,qCAAqChF,EAASgF,CAAU,CACpF,CACA,iBAAiBhF,EAASgF,EAAY,CAClC,OAAO,KAAK,cAAc,gBAAgBA,CAAU,EAAE,KAAMG,GAAWA,EAAO,UAAYnF,CAAO,CACrG,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACJ,EAEM4F,GAAN,KAAc,CACV,YAAYF,EAAQG,EAAO,CACvB,KAAK,iBAAmB,CAACC,EAAcC,EAAS,CAAC,IAAM,CACnD,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,iBAAiB,KAAK,WAAYD,EAAcC,CAAM,CAC3E,EACA,KAAK,OAASL,EACd,KAAK,MAAQG,EACb,KAAK,WAAa,IAAIH,EAAO,sBAAsB,IAAI,EACvD,KAAK,gBAAkB,IAAI5C,GAAgB,KAAM,KAAK,UAAU,EAChE,KAAK,cAAgB,IAAIM,GAAc,KAAM,KAAK,UAAU,EAC5D,KAAK,eAAiB,IAAIc,GAAe,KAAM,IAAI,EACnD,KAAK,eAAiB,IAAIa,GAAe,KAAM,IAAI,EACnD,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOlC,EAAO,CACV,KAAK,YAAYA,EAAO,yBAAyB,CACrD,CACJ,CACA,SAAU,CACN,KAAK,gBAAgB,MAAM,EAC3B,KAAK,cAAc,MAAM,EACzB,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,MAAM,EAC1B,GAAI,CACA,KAAK,WAAW,QAAQ,EACxB,KAAK,iBAAiB,SAAS,CACnC,OACOA,EAAO,CACV,KAAK,YAAYA,EAAO,uBAAuB,CACnD,CACJ,CACA,SAAU,CACN,KAAK,eAAe,QAAQ,CAChC,CACA,YAAa,CACT,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOA,EAAO,CACV,KAAK,YAAYA,EAAO,0BAA0B,CACtD,CACA,KAAK,eAAe,KAAK,EACzB,KAAK,eAAe,KAAK,EACzB,KAAK,cAAc,KAAK,EACxB,KAAK,gBAAgB,KAAK,CAC9B,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,UAC5B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,QAAQ,aACxB,CACA,YAAYA,EAAOqD,EAASH,EAAS,CAAC,EAAG,CACrC,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,YAAYlD,EAAO,SAASqD,CAAO,GAAIH,CAAM,CAClE,CACA,gBAAgB/F,EAASuD,EAAM,CAC3B,KAAK,uBAAuB,GAAGA,CAAI,kBAAmBvD,CAAO,CACjE,CACA,mBAAmBA,EAASuD,EAAM,CAC9B,KAAK,uBAAuB,GAAGA,CAAI,qBAAsBvD,CAAO,CACpE,CACA,gBAAgBmF,EAAQnF,EAASuD,EAAM,CACnC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,CAAC,kBAAmB4B,EAAQnF,CAAO,CAC5F,CACA,mBAAmBmF,EAAQnF,EAASuD,EAAM,CACtC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,CAAC,qBAAsB4B,EAAQnF,CAAO,CAC/F,CACA,uBAAuBoG,KAAeC,EAAM,CACxC,IAAMJ,EAAa,KAAK,WACpB,OAAOA,EAAWG,CAAU,GAAK,YACjCH,EAAWG,CAAU,EAAE,GAAGC,CAAI,CAEtC,CACJ,EAEA,SAASC,GAAMjC,EAAa,CACxB,OAAOkC,GAAOlC,EAAamC,GAAqBnC,CAAW,CAAC,CAChE,CACA,SAASkC,GAAOlC,EAAaoC,EAAY,CACrC,IAAMC,EAAoBC,GAAOtC,CAAW,EACtCuC,EAAmBC,GAAoBxC,EAAY,UAAWoC,CAAU,EAC9E,cAAO,iBAAiBC,EAAkB,UAAWE,CAAgB,EAC9DF,CACX,CACA,SAASF,GAAqBnC,EAAa,CAEvC,OADkBD,GAAiCC,EAAa,WAAW,EAC1D,OAAO,CAACyC,EAAmBC,IAAa,CACrD,IAAMN,EAAaM,EAAS1C,CAAW,EACvC,QAAWnD,KAAOuF,EAAY,CAC1B,IAAMnD,EAAawD,EAAkB5F,CAAG,GAAK,CAAC,EAC9C4F,EAAkB5F,CAAG,EAAI,OAAO,OAAOoC,EAAYmD,EAAWvF,CAAG,CAAC,CACtE,CACA,OAAO4F,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASD,GAAoBG,EAAWP,EAAY,CAChD,OAAOQ,GAAWR,CAAU,EAAE,OAAO,CAACG,EAAkB1F,IAAQ,CAC5D,IAAMoC,EAAa4D,GAAsBF,EAAWP,EAAYvF,CAAG,EACnE,OAAIoC,GACA,OAAO,OAAOsD,EAAkB,CAAE,CAAC1F,CAAG,EAAGoC,CAAW,CAAC,EAElDsD,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASM,GAAsBF,EAAWP,EAAYvF,EAAK,CACvD,IAAMiG,EAAsB,OAAO,yBAAyBH,EAAW9F,CAAG,EAE1E,GAAI,EADoBiG,GAAuB,UAAWA,GACpC,CAClB,IAAM7D,EAAa,OAAO,yBAAyBmD,EAAYvF,CAAG,EAAE,MACpE,OAAIiG,IACA7D,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,IACvDA,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,KAEpDA,CACX,CACJ,CACA,IAAM2D,GACE,OAAO,OAAO,uBAAyB,WAC/BG,GAAW,CAAC,GAAG,OAAO,oBAAoBA,CAAM,EAAG,GAAG,OAAO,sBAAsBA,CAAM,CAAC,EAG3F,OAAO,oBAGhBT,IAAU,IAAM,CAClB,SAASU,EAAkBhD,EAAa,CACpC,SAASiD,GAAW,CAChB,OAAO,QAAQ,UAAUjD,EAAa,UAAW,UAAU,CAC/D,CACA,OAAAiD,EAAS,UAAY,OAAO,OAAOjD,EAAY,UAAW,CACtD,YAAa,CAAE,MAAOiD,CAAS,CACnC,CAAC,EACD,QAAQ,eAAeA,EAAUjD,CAAW,EACrCiD,CACX,CACA,SAASC,GAAuB,CAI5B,IAAMC,EAAIH,EAHA,UAAY,CAClB,KAAK,EAAE,KAAK,IAAI,CACpB,CAC6B,EAC7B,OAAAG,EAAE,UAAU,EAAI,UAAY,CAAE,EACvB,IAAIA,CACf,CACA,GAAI,CACA,OAAAD,EAAqB,EACdF,CACX,MACc,CACV,OAAQhD,GAAgB,cAAuBA,CAAY,CAC3D,CACJ,CACJ,GAAG,EAEH,SAASoD,GAAgB3C,EAAY,CACjC,MAAO,CACH,WAAYA,EAAW,WACvB,sBAAuBwB,GAAMxB,EAAW,qBAAqB,CACjE,CACJ,CAEA,IAAM4C,GAAN,KAAa,CACT,YAAYC,EAAa7C,EAAY,CACjC,KAAK,YAAc6C,EACnB,KAAK,WAAaF,GAAgB3C,CAAU,EAC5C,KAAK,gBAAkB,IAAI,QAC3B,KAAK,kBAAoB,IAAI,GACjC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,WAAW,UAC3B,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,WAAW,qBAC3B,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,CAC5C,CACA,uBAAuBe,EAAO,CAC1B,IAAM9C,EAAU,KAAK,qBAAqB8C,CAAK,EAC/C,KAAK,kBAAkB,IAAI9C,CAAO,EAClCA,EAAQ,QAAQ,CACpB,CACA,0BAA0B8C,EAAO,CAC7B,IAAM9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC1C9C,IACA,KAAK,kBAAkB,OAAOA,CAAO,EACrCA,EAAQ,WAAW,EAE3B,CACA,qBAAqB8C,EAAO,CACxB,IAAI9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC5C,OAAK9C,IACDA,EAAU,IAAI6C,GAAQ,KAAMC,CAAK,EACjC,KAAK,gBAAgB,IAAIA,EAAO9C,CAAO,GAEpCA,CACX,CACJ,EAEM6E,GAAN,KAAe,CACX,YAAY/B,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAItC,EAAM,CACN,OAAO,KAAK,KAAK,IAAI,KAAK,WAAWA,CAAI,CAAC,CAC9C,CACA,IAAIA,EAAM,CACN,OAAO,KAAK,OAAOA,CAAI,EAAE,CAAC,CAC9B,CACA,OAAOA,EAAM,CACT,IAAMrB,EAAc,KAAK,KAAK,IAAI,KAAK,WAAWqB,CAAI,CAAC,GAAK,GAC5D,OAAOsE,GAAS3F,CAAW,CAC/B,CACA,iBAAiBqB,EAAM,CACnB,OAAO,KAAK,KAAK,uBAAuB,KAAK,WAAWA,CAAI,CAAC,CACjE,CACA,WAAWA,EAAM,CACb,MAAO,GAAGA,CAAI,QAClB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACJ,EAEMuE,GAAN,KAAc,CACV,YAAYjC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI3E,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,IAAIrC,EAAKC,EAAO,CACZ,IAAMoC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,aAAaqC,EAAMpC,CAAK,EAC9B,KAAK,IAAID,CAAG,CACvB,CACA,IAAIA,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,OAAOrC,EAAK,CACR,GAAI,KAAK,IAAIA,CAAG,EAAG,CACf,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,gBAAgBqC,CAAI,EAC1B,EACX,KAEI,OAAO,EAEf,CACA,uBAAuBrC,EAAK,CACxB,MAAO,QAAQ,KAAK,UAAU,IAAI6G,GAAU7G,CAAG,CAAC,EACpD,CACJ,EAEM8G,GAAN,KAAY,CACR,YAAYC,EAAQ,CAChB,KAAK,mBAAqB,IAAI,QAC9B,KAAK,OAASA,CAClB,CACA,KAAKb,EAAQlG,EAAKgF,EAAS,CACvB,IAAIgC,EAAa,KAAK,mBAAmB,IAAId,CAAM,EAC9Cc,IACDA,EAAa,IAAI,IACjB,KAAK,mBAAmB,IAAId,EAAQc,CAAU,GAE7CA,EAAW,IAAIhH,CAAG,IACnBgH,EAAW,IAAIhH,CAAG,EAClB,KAAK,OAAO,KAAKgF,EAASkB,CAAM,EAExC,CACJ,EAEA,SAASe,GAA4BpH,EAAeW,EAAO,CACvD,MAAO,IAAIX,CAAa,MAAMW,CAAK,IACvC,CAEA,IAAM0G,GAAN,KAAgB,CACZ,YAAYvC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAIwC,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQC,EAAa,CACjB,OAAOA,EAAY,OAAO,CAACC,EAAQF,IAAeE,GAAU,KAAK,WAAWF,CAAU,GAAK,KAAK,iBAAiBA,CAAU,EAAG,MAAS,CAC3I,CACA,WAAWC,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACE,EAASH,IAAe,CAC/C,GAAGG,EACH,GAAG,KAAK,eAAeH,CAAU,EACjC,GAAG,KAAK,qBAAqBA,CAAU,CAC3C,EAAG,CAAC,CAAC,CACT,CACA,WAAWA,EAAY,CACnB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,YAAYpI,CAAQ,CAC1C,CACA,eAAeoI,EAAY,CACvB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,CAC9C,CACA,yBAAyBoI,EAAY,CACjC,IAAMtH,EAAgB,KAAK,OAAO,wBAAwB,KAAK,UAAU,EACzE,OAAOoH,GAA4BpH,EAAesH,CAAU,CAChE,CACA,iBAAiBA,EAAY,CACzB,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,UAAU,KAAK,MAAM,YAAYpI,CAAQ,EAAGoI,CAAU,CACtE,CACA,qBAAqBA,EAAY,CAC7B,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,EAAE,IAAKD,GAAY,KAAK,UAAUA,EAASqI,CAAU,CAAC,CACpG,CACA,+BAA+BA,EAAY,CACvC,IAAMI,EAAmB,GAAG,KAAK,UAAU,IAAIJ,CAAU,GACzD,OAAOF,GAA4B,KAAK,OAAO,gBAAiBM,CAAgB,CACpF,CACA,UAAUzI,EAASqI,EAAY,CAC3B,GAAIrI,EAAS,CACT,GAAM,CAAE,WAAAgG,CAAW,EAAI,KACjBjF,EAAgB,KAAK,OAAO,gBAC5B2H,EAAuB,KAAK,OAAO,wBAAwB1C,CAAU,EAC3E,KAAK,MAAM,KAAKhG,EAAS,UAAUqI,CAAU,GAAI,kBAAkBtH,CAAa,KAAKiF,CAAU,IAAIqC,CAAU,UAAUK,CAAoB,KAAKL,CAAU,UAC/ItH,CAAa,+EAA+E,CAC3G,CACA,OAAOf,CACX,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,MAAM,KACtB,CACJ,EAEM2I,GAAN,KAAgB,CACZ,YAAY9C,EAAO+C,EAAmB,CAClC,KAAK,MAAQ/C,EACb,KAAK,kBAAoB+C,CAC7B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAI5D,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQ6D,EAAa,CACjB,OAAOA,EAAY,OAAO,CAAC1D,EAAQH,IAAeG,GAAU,KAAK,WAAWH,CAAU,EAAG,MAAS,CACtG,CACA,WAAW6D,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACC,EAAS9D,IAAe,CAAC,GAAG8D,EAAS,GAAG,KAAK,eAAe9D,CAAU,CAAC,EAAG,CAAC,CAAC,CAC3G,CACA,yBAAyBA,EAAY,CACjC,IAAMjE,EAAgB,KAAK,OAAO,wBAAwB,KAAK,WAAYiE,CAAU,EACrF,OAAO,KAAK,kBAAkB,aAAajE,CAAa,CAC5D,CACA,WAAWiE,EAAY,CACnB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,GAAI/E,EACA,OAAO,KAAK,YAAYA,EAAU+E,CAAU,CACpD,CACA,eAAeA,EAAY,CACvB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,OAAO/E,EAAW,KAAK,gBAAgBA,EAAU+E,CAAU,EAAI,CAAC,CACpE,CACA,YAAY/E,EAAU+E,EAAY,CAE9B,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,EAAE,CAAC,CAC7F,CACA,gBAAgB/E,EAAU+E,EAAY,CAElC,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,CAC1F,CACA,eAAehF,EAASC,EAAU+E,EAAY,CAC1C,IAAM+D,EAAsB/I,EAAQ,aAAa,KAAK,MAAM,OAAO,mBAAmB,GAAK,GAC3F,OAAOA,EAAQ,QAAQC,CAAQ,GAAK8I,EAAoB,MAAM,GAAG,EAAE,SAAS/D,CAAU,CAC1F,CACJ,EAEMgE,GAAN,MAAMC,CAAM,CACR,YAAYC,EAAQlJ,EAASgG,EAAYiC,EAAQ,CAC7C,KAAK,QAAU,IAAIG,GAAU,IAAI,EACjC,KAAK,QAAU,IAAIR,GAAS,IAAI,EAChC,KAAK,KAAO,IAAIE,GAAQ,IAAI,EAC5B,KAAK,gBAAmB9H,GACbA,EAAQ,QAAQ,KAAK,kBAAkB,IAAM,KAAK,QAE7D,KAAK,OAASkJ,EACd,KAAK,QAAUlJ,EACf,KAAK,WAAagG,EAClB,KAAK,MAAQ,IAAIgC,GAAMC,CAAM,EAC7B,KAAK,QAAU,IAAIU,GAAU,KAAK,cAAe3I,CAAO,CAC5D,CACA,YAAYC,EAAU,CAClB,OAAO,KAAK,QAAQ,QAAQA,CAAQ,EAAI,KAAK,QAAU,KAAK,cAAcA,CAAQ,EAAE,KAAK,KAAK,eAAe,CACjH,CACA,gBAAgBA,EAAU,CACtB,MAAO,CACH,GAAI,KAAK,QAAQ,QAAQA,CAAQ,EAAI,CAAC,KAAK,OAAO,EAAI,CAAC,EACvD,GAAG,KAAK,cAAcA,CAAQ,EAAE,OAAO,KAAK,eAAe,CAC/D,CACJ,CACA,cAAcA,EAAU,CACpB,OAAO,MAAM,KAAK,KAAK,QAAQ,iBAAiBA,CAAQ,CAAC,CAC7D,CACA,IAAI,oBAAqB,CACrB,OAAOkI,GAA4B,KAAK,OAAO,oBAAqB,KAAK,UAAU,CACvF,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,UAAY,SAAS,eACrC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,gBACN,KACA,IAAIc,EAAM,KAAK,OAAQ,SAAS,gBAAiB,KAAK,WAAY,KAAK,MAAM,MAAM,CAC7F,CACJ,EAEME,GAAN,KAAoB,CAChB,YAAYnJ,EAASkJ,EAAQhJ,EAAU,CACnC,KAAK,QAAUF,EACf,KAAK,OAASkJ,EACd,KAAK,SAAWhJ,EAChB,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,oBAAqB,IAAI,EAC3F,KAAK,4BAA8B,IAAI,QACvC,KAAK,qBAAuB,IAAI,OACpC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,mBAAmBhB,EAAO,CACtB,GAAM,CAAE,QAAA1B,EAAS,QAASgG,CAAW,EAAItE,EACzC,OAAO,KAAK,kCAAkC1B,EAASgG,CAAU,CACrE,CACA,kCAAkChG,EAASgG,EAAY,CACnD,IAAMoD,EAAqB,KAAK,kCAAkCpJ,CAAO,EACrE6F,EAAQuD,EAAmB,IAAIpD,CAAU,EAC7C,OAAKH,IACDA,EAAQ,KAAK,SAAS,mCAAmC7F,EAASgG,CAAU,EAC5EoD,EAAmB,IAAIpD,EAAYH,CAAK,GAErCA,CACX,CACA,oBAAoB7F,EAASmB,EAAO,CAChC,IAAMkI,GAAkB,KAAK,qBAAqB,IAAIlI,CAAK,GAAK,GAAK,EACrE,KAAK,qBAAqB,IAAIA,EAAOkI,CAAc,EAC/CA,GAAkB,GAClB,KAAK,SAAS,eAAelI,CAAK,CAE1C,CACA,sBAAsBnB,EAASmB,EAAO,CAClC,IAAMkI,EAAiB,KAAK,qBAAqB,IAAIlI,CAAK,EACtDkI,IACA,KAAK,qBAAqB,IAAIlI,EAAOkI,EAAiB,CAAC,EACnDA,GAAkB,GAClB,KAAK,SAAS,kBAAkBlI,CAAK,EAGjD,CACA,kCAAkCnB,EAAS,CACvC,IAAIoJ,EAAqB,KAAK,4BAA4B,IAAIpJ,CAAO,EACrE,OAAKoJ,IACDA,EAAqB,IAAI,IACzB,KAAK,4BAA4B,IAAIpJ,EAASoJ,CAAkB,GAE7DA,CACX,CACJ,EAEME,GAAN,KAAa,CACT,YAAY3B,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,cAAgB,IAAIwB,GAAc,KAAK,QAAS,KAAK,OAAQ,IAAI,EACtE,KAAK,mBAAqB,IAAI9I,GAC9B,KAAK,oBAAsB,IAAI,GACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,IAAI,SAAU,CACV,OAAO,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC,CACvD,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,OAAO,CAACkJ,EAAU7D,IAAW6D,EAAS,OAAO7D,EAAO,QAAQ,EAAG,CAAC,CAAC,CACzF,CACA,OAAQ,CACJ,KAAK,cAAc,MAAM,CAC7B,CACA,MAAO,CACH,KAAK,cAAc,KAAK,CAC5B,CACA,eAAeZ,EAAY,CACvB,KAAK,iBAAiBA,EAAW,UAAU,EAC3C,IAAMY,EAAS,IAAIgC,GAAO,KAAK,YAAa5C,CAAU,EACtD,KAAK,cAAcY,CAAM,EACzB,IAAM8D,EAAY1E,EAAW,sBAAsB,UAC/C0E,GACAA,EAAU,KAAK1E,EAAW,sBAAuBA,EAAW,WAAY,KAAK,WAAW,CAEhG,CACA,iBAAiBkB,EAAY,CACzB,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EAClDN,GACA,KAAK,iBAAiBA,CAAM,CAEpC,CACA,kCAAkC1F,EAASgG,EAAY,CACnD,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EACtD,GAAIN,EACA,OAAOA,EAAO,SAAS,KAAM3C,GAAYA,EAAQ,SAAW/C,CAAO,CAE3E,CACA,6CAA6CA,EAASgG,EAAY,CAC9D,IAAMH,EAAQ,KAAK,cAAc,kCAAkC7F,EAASgG,CAAU,EAClFH,EACA,KAAK,cAAc,oBAAoBA,EAAM,QAASA,CAAK,EAG3D,QAAQ,MAAM,kDAAkDG,CAAU,iBAAkBhG,CAAO,CAE3G,CACA,YAAY6C,EAAOqD,EAASH,EAAQ,CAChC,KAAK,YAAY,YAAYlD,EAAOqD,EAASH,CAAM,CACvD,CACA,mCAAmC/F,EAASgG,EAAY,CACpD,OAAO,IAAIgD,GAAM,KAAK,OAAQhJ,EAASgG,EAAY,KAAK,MAAM,CAClE,CACA,eAAeH,EAAO,CAClB,KAAK,mBAAmB,IAAIA,EAAM,WAAYA,CAAK,EACnD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,uBAAuBG,CAAK,CAE3C,CACA,kBAAkBA,EAAO,CACrB,KAAK,mBAAmB,OAAOA,EAAM,WAAYA,CAAK,EACtD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,0BAA0BG,CAAK,CAE9C,CACA,cAAcH,EAAQ,CAClB,KAAK,oBAAoB,IAAIA,EAAO,WAAYA,CAAM,EACvC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,uBAAuBG,CAAK,CAAC,CAClE,CACA,iBAAiBH,EAAQ,CACrB,KAAK,oBAAoB,OAAOA,EAAO,UAAU,EAClC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,0BAA0BG,CAAK,CAAC,CACrE,CACJ,EAEM4D,GAAgB,CAClB,oBAAqB,kBACrB,gBAAiB,cACjB,gBAAiB,cACjB,wBAA0BzD,GAAe,QAAQA,CAAU,UAC3D,wBAAyB,CAACA,EAAYb,IAAW,QAAQa,CAAU,IAAIb,CAAM,UAC7E,YAAa,OAAO,OAAO,OAAO,OAAO,CAAE,MAAO,QAAS,IAAK,MAAO,IAAK,SAAU,MAAO,IAAK,GAAI,UAAW,KAAM,YAAa,KAAM,YAAa,MAAO,aAAc,KAAM,OAAQ,IAAK,MAAO,QAAS,SAAU,UAAW,UAAW,EAAGuE,GAAkB,6BAA6B,MAAM,EAAE,EAAE,IAAKC,GAAM,CAACA,EAAGA,CAAC,CAAC,CAAC,CAAC,EAAGD,GAAkB,aAAa,MAAM,EAAE,EAAE,IAAK,GAAM,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CACjY,EACA,SAASA,GAAkBE,EAAO,CAC9B,OAAOA,EAAM,OAAO,CAACC,EAAM,CAACC,EAAGC,CAAC,IAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAI,EAAG,CAAE,CAACC,CAAC,EAAGC,CAAE,CAAC,EAAI,CAAC,CAAC,CAClG,CAEA,IAAMC,GAAN,KAAkB,CACd,YAAYhK,EAAU,SAAS,gBAAiBkJ,EAASO,GAAe,CACpE,KAAK,OAAS,QACd,KAAK,MAAQ,GACb,KAAK,iBAAmB,CAACzD,EAAYF,EAAcC,EAAS,CAAC,IAAM,CAC3D,KAAK,OACL,KAAK,oBAAoBC,EAAYF,EAAcC,CAAM,CAEjE,EACA,KAAK,QAAU/F,EACf,KAAK,OAASkJ,EACd,KAAK,WAAa,IAAIe,GAAW,IAAI,EACrC,KAAK,OAAS,IAAIX,GAAO,IAAI,EAC7B,KAAK,wBAA0B,OAAO,OAAO,CAAC,EAAGY,EAA8B,CACnF,CACA,OAAO,MAAMlK,EAASkJ,EAAQ,CAC1B,IAAMvB,EAAc,IAAI,KAAK3H,EAASkJ,CAAM,EAC5C,OAAAvB,EAAY,MAAM,EACXA,CACX,CACA,MAAM,OAAQ,CACV,MAAMwC,GAAS,EACf,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,MAAM,EACtB,KAAK,OAAO,MAAM,EAClB,KAAK,iBAAiB,cAAe,OAAO,CAChD,CACA,MAAO,CACH,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,KAAK,EACrB,KAAK,OAAO,KAAK,EACjB,KAAK,iBAAiB,cAAe,MAAM,CAC/C,CACA,SAASnE,EAAYoE,EAAuB,CACxC,KAAK,KAAK,CAAE,WAAApE,EAAY,sBAAAoE,CAAsB,CAAC,CACnD,CACA,qBAAqB7G,EAAM8G,EAAQ,CAC/B,KAAK,wBAAwB9G,CAAI,EAAI8G,CACzC,CACA,KAAKC,KAASC,EAAM,EACI,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAASzF,GAAe,CAC5BA,EAAW,sBAAsB,YACjC,KAAK,OAAO,eAAeA,CAAU,CAE7C,CAAC,CACL,CACA,OAAOwF,KAASC,EAAM,EACE,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAASvE,GAAe,KAAK,OAAO,iBAAiBA,CAAU,CAAC,CAChF,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,SAAS,IAAKjD,GAAYA,EAAQ,UAAU,CACnE,CACA,qCAAqC/C,EAASgG,EAAY,CACtD,IAAMjD,EAAU,KAAK,OAAO,kCAAkC/C,EAASgG,CAAU,EACjF,OAAOjD,EAAUA,EAAQ,WAAa,IAC1C,CACA,YAAYF,EAAOqD,EAASH,EAAQ,CAChC,IAAI5B,EACJ,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,IAAkB+B,EAASrD,EAAOkD,CAAM,GACzD5B,EAAK,OAAO,WAAa,MAAQA,IAAO,QAAkBA,EAAG,KAAK,OAAQ+B,EAAS,GAAI,EAAG,EAAGrD,CAAK,CACvG,CACA,oBAAoBmD,EAAYF,EAAcC,EAAS,CAAC,EAAG,CACvDA,EAAS,OAAO,OAAO,CAAE,YAAa,IAAK,EAAGA,CAAM,EACpD,KAAK,OAAO,eAAe,GAAGC,CAAU,KAAKF,CAAY,EAAE,EAC3D,KAAK,OAAO,IAAI,WAAY,OAAO,OAAO,CAAC,EAAGC,CAAM,CAAC,EACrD,KAAK,OAAO,SAAS,CACzB,CACJ,EACA,SAASoE,IAAW,CAChB,OAAO,IAAI,QAASK,GAAY,CACxB,SAAS,YAAc,UACvB,SAAS,iBAAiB,mBAAoB,IAAMA,EAAQ,CAAC,EAG7DA,EAAQ,CAEhB,CAAC,CACL,CAEA,SAASC,GAAwBpG,EAAa,CAE1C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYiE,IACxB,OAAO,OAAOjE,EAAYkE,GAA6BD,CAAe,CAAC,EAC/E,CAAC,CAAC,CACT,CACA,SAASC,GAA6BzJ,EAAK,CACvC,MAAO,CACH,CAAC,GAAGA,CAAG,OAAO,EAAG,CACb,KAAM,CACF,GAAM,CAAE,QAAA0J,CAAQ,EAAI,KACpB,GAAIA,EAAQ,IAAI1J,CAAG,EACf,OAAO0J,EAAQ,IAAI1J,CAAG,EAErB,CACD,IAAME,EAAYwJ,EAAQ,iBAAiB1J,CAAG,EAC9C,MAAM,IAAI,MAAM,sBAAsBE,CAAS,GAAG,CACtD,CACJ,CACJ,EACA,CAAC,GAAGF,CAAG,SAAS,EAAG,CACf,KAAM,CACF,OAAO,KAAK,QAAQ,OAAOA,CAAG,CAClC,CACJ,EACA,CAAC,MAAM+C,GAAW/C,CAAG,CAAC,OAAO,EAAG,CAC5B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAG,CAC/B,CACJ,CACJ,CACJ,CAEA,SAAS2J,GAAyBxG,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYqE,IACxB,OAAO,OAAOrE,EAAYsE,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASE,GAAoB/E,EAAYjG,EAASgG,EAAY,CAC1D,OAAOC,EAAW,YAAY,qCAAqCjG,EAASgG,CAAU,CAC1F,CACA,SAASiF,GAAqChF,EAAYjG,EAASgF,EAAY,CAC3E,IAAIkG,EAAmBF,GAAoB/E,EAAYjG,EAASgF,CAAU,EAK1E,GAJIkG,IAEJjF,EAAW,YAAY,OAAO,6CAA6CjG,EAASgF,CAAU,EAC9FkG,EAAmBF,GAAoB/E,EAAYjG,EAASgF,CAAU,EAClEkG,GACA,OAAOA,CACf,CACA,SAASH,GAA8BxH,EAAM,CACzC,IAAM4H,EAAgBhF,GAAkB5C,CAAI,EAC5C,MAAO,CACH,CAAC,GAAG4H,CAAa,QAAQ,EAAG,CACxB,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK7H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI6H,EAAe,CACf,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe7H,CAAI,EACvF,GAAI2H,EACA,OAAOA,EACX,MAAM,IAAI,MAAM,gEAAgE3H,CAAI,mCAAmC,KAAK,UAAU,GAAG,CAC7I,CACA,MAAM,IAAI,MAAM,2BAA2BA,CAAI,0BAA0B,KAAK,UAAU,uEAAuEtD,CAAQ,IAAI,CAC/K,CACJ,EACA,CAAC,GAAGkL,CAAa,SAAS,EAAG,CACzB,KAAM,CACF,IAAMrC,EAAU,KAAK,QAAQ,QAAQvF,CAAI,EACzC,OAAIuF,EAAQ,OAAS,EACVA,EACF,IAAKsC,GAAkB,CACxB,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe7H,CAAI,EACvF,GAAI2H,EACA,OAAOA,EACX,QAAQ,KAAK,gEAAgE3H,CAAI,mCAAmC,KAAK,UAAU,IAAK6H,CAAa,CACzJ,CAAC,EACI,OAAQnF,GAAeA,CAAU,EAEnC,CAAC,CACZ,CACJ,EACA,CAAC,GAAGkF,CAAa,eAAe,EAAG,CAC/B,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK7H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI6H,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2B7H,CAAI,0BAA0B,KAAK,UAAU,uEAAuEtD,CAAQ,IAAI,CAEnL,CACJ,EACA,CAAC,GAAGkL,CAAa,gBAAgB,EAAG,CAChC,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQ5H,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWkH,CAAa,CAAC,QAAQ,EAAG,CACvC,KAAM,CACF,OAAO,KAAK,QAAQ,IAAI5H,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAAS8H,GAAyBhH,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAY6E,IACxB,OAAO,OAAO7E,EAAY8E,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASC,GAA8BhI,EAAM,CACzC,MAAO,CACH,CAAC,GAAGA,CAAI,QAAQ,EAAG,CACf,KAAM,CACF,IAAMgF,EAAS,KAAK,QAAQ,KAAKhF,CAAI,EACrC,GAAIgF,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2BhF,CAAI,UAAU,KAAK,UAAU,cAAc,CAE9F,CACJ,EACA,CAAC,GAAGA,CAAI,SAAS,EAAG,CAChB,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQA,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWV,CAAI,CAAC,QAAQ,EAAG,CAC9B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAASiI,GAAwBnH,EAAa,CAC1C,IAAMoH,EAAuB9G,GAAiCN,EAAa,QAAQ,EAC7EqH,EAAwB,CAC1B,mBAAoB,CAChB,KAAM,CACF,OAAOD,EAAqB,OAAO,CAACE,EAAQC,IAAwB,CAChE,IAAMC,EAAkBC,GAAyBF,EAAqB,KAAK,UAAU,EAC/E7K,EAAgB,KAAK,KAAK,uBAAuB8K,EAAgB,GAAG,EAC1E,OAAO,OAAO,OAAOF,EAAQ,CAAE,CAAC5K,CAAa,EAAG8K,CAAgB,CAAC,CACrE,EAAG,CAAC,CAAC,CACT,CACJ,CACJ,EACA,OAAOJ,EAAqB,OAAO,CAAChF,EAAYmF,IACrC,OAAO,OAAOnF,EAAYsF,GAAiCH,CAAmB,CAAC,EACvFF,CAAqB,CAC5B,CACA,SAASK,GAAiCH,EAAqB3F,EAAY,CACvE,IAAMnB,EAAagH,GAAyBF,EAAqB3F,CAAU,EACrE,CAAE,IAAA/E,EAAK,KAAAqC,EAAM,OAAQyI,EAAM,OAAQC,CAAM,EAAInH,EACnD,MAAO,CACH,CAACvB,CAAI,EAAG,CACJ,KAAM,CACF,IAAMpC,EAAQ,KAAK,KAAK,IAAID,CAAG,EAC/B,OAAIC,IAAU,KACH6K,EAAK7K,CAAK,EAGV2D,EAAW,YAE1B,EACA,IAAI3D,EAAO,CACHA,IAAU,OACV,KAAK,KAAK,OAAOD,CAAG,EAGpB,KAAK,KAAK,IAAIA,EAAK+K,EAAM9K,CAAK,CAAC,CAEvC,CACJ,EACA,CAAC,MAAM8C,GAAWV,CAAI,CAAC,EAAE,EAAG,CACxB,KAAM,CACF,OAAO,KAAK,KAAK,IAAIrC,CAAG,GAAK4D,EAAW,qBAC5C,CACJ,CACJ,CACJ,CACA,SAASgH,GAAyB,CAACpK,EAAOwK,CAAc,EAAGjG,EAAY,CACnE,OAAOkG,GAAyC,CAC5C,WAAAlG,EACA,MAAAvE,EACA,eAAAwK,CACJ,CAAC,CACL,CACA,SAASE,GAAuBC,EAAU,CACtC,OAAQA,EAAU,CACd,KAAK,MACD,MAAO,QACX,KAAK,QACD,MAAO,UACX,KAAK,OACD,MAAO,SACX,KAAK,OACD,MAAO,SACX,KAAK,OACD,MAAO,QACf,CACJ,CACA,SAASC,GAAsB9I,EAAc,CACzC,OAAQ,OAAOA,EAAc,CACzB,IAAK,UACD,MAAO,UACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,QACf,CACA,GAAI,MAAM,QAAQA,CAAY,EAC1B,MAAO,QACX,GAAI,OAAO,UAAU,SAAS,KAAKA,CAAY,IAAM,kBACjD,MAAO,QACf,CACA,SAAS+I,GAAqBC,EAAS,CACnC,GAAM,CAAE,WAAAvG,EAAY,MAAAvE,EAAO,WAAA+K,CAAW,EAAID,EACpCE,EAAUC,GAAYF,EAAW,IAAI,EACrCG,EAAaD,GAAYF,EAAW,OAAO,EAC3CI,EAAaH,GAAWE,EACxBE,EAAWJ,GAAW,CAACE,EACvBG,EAAc,CAACL,GAAWE,EAC1BI,EAAiBZ,GAAuBK,EAAW,IAAI,EACvDQ,EAAuBX,GAAsBE,EAAQ,WAAW,OAAO,EAC7E,GAAIM,EACA,OAAOE,EACX,GAAID,EACA,OAAOE,EACX,GAAID,IAAmBC,EAAsB,CACzC,IAAMC,EAAejH,EAAa,GAAGA,CAAU,IAAIvE,CAAK,GAAKA,EAC7D,MAAM,IAAI,MAAM,uDAAuDwL,CAAY,kCAAkCF,CAAc,qCAAqCP,EAAW,OAAO,iBAAiBQ,CAAoB,IAAI,CACvO,CACA,GAAIJ,EACA,OAAOG,CACf,CACA,SAASG,GAAyBX,EAAS,CACvC,GAAM,CAAE,WAAAvG,EAAY,MAAAvE,EAAO,eAAAwK,CAAe,EAAIM,EAExCQ,EAAiBT,GADJ,CAAE,WAAAtG,EAAY,MAAAvE,EAAO,WAAYwK,CAAe,CACb,EAChDe,EAAuBX,GAAsBJ,CAAc,EAC3DkB,EAAmBhB,GAAuBF,CAAc,EACxDmB,EAAOL,GAAkBC,GAAwBG,EACvD,GAAIC,EACA,OAAOA,EACX,IAAMH,EAAejH,EAAa,GAAGA,CAAU,IAAIiG,CAAc,GAAKxK,EACtE,MAAM,IAAI,MAAM,uBAAuBwL,CAAY,UAAUxL,CAAK,SAAS,CAC/E,CACA,SAAS4L,GAA0BpB,EAAgB,CAC/C,IAAMG,EAAWD,GAAuBF,CAAc,EACtD,GAAIG,EACA,OAAOkB,GAAoBlB,CAAQ,EACvC,IAAMO,EAAaY,GAAYtB,EAAgB,SAAS,EAClDQ,EAAUc,GAAYtB,EAAgB,MAAM,EAC5CO,EAAaP,EACnB,GAAIU,EACA,OAAOH,EAAW,QACtB,GAAIC,EAAS,CACT,GAAM,CAAE,KAAAW,CAAK,EAAIZ,EACXgB,EAAmBrB,GAAuBiB,CAAI,EACpD,GAAII,EACA,OAAOF,GAAoBE,CAAgB,CACnD,CACA,OAAOvB,CACX,CACA,SAASC,GAAyCK,EAAS,CACvD,GAAM,CAAE,MAAA9K,EAAO,eAAAwK,CAAe,EAAIM,EAC5BtL,EAAM,GAAG6G,GAAUrG,CAAK,CAAC,SACzB2L,EAAOF,GAAyBX,CAAO,EAC7C,MAAO,CACH,KAAAa,EACA,IAAAnM,EACA,KAAMwM,GAASxM,CAAG,EAClB,IAAI,cAAe,CACf,OAAOoM,GAA0BpB,CAAc,CACnD,EACA,IAAI,uBAAwB,CACxB,OAAOI,GAAsBJ,CAAc,IAAM,MACrD,EACA,OAAQyB,GAAQN,CAAI,EACpB,OAAQO,GAAQP,CAAI,GAAKO,GAAQ,OACrC,CACJ,CACA,IAAML,GAAsB,CACxB,IAAI,OAAQ,CACR,MAAO,CAAC,CACZ,EACA,QAAS,GACT,OAAQ,EACR,IAAI,QAAS,CACT,MAAO,CAAC,CACZ,EACA,OAAQ,EACZ,EACMI,GAAU,CACZ,MAAMxM,EAAO,CACT,IAAMyI,EAAQ,KAAK,MAAMzI,CAAK,EAC9B,GAAI,CAAC,MAAM,QAAQyI,CAAK,EACpB,MAAM,IAAI,UAAU,yDAAyDzI,CAAK,cAAcmL,GAAsB1C,CAAK,CAAC,GAAG,EAEnI,OAAOA,CACX,EACA,QAAQzI,EAAO,CACX,MAAO,EAAEA,GAAS,KAAO,OAAOA,CAAK,EAAE,YAAY,GAAK,QAC5D,EACA,OAAOA,EAAO,CACV,OAAO,OAAOA,EAAM,QAAQ,KAAM,EAAE,CAAC,CACzC,EACA,OAAOA,EAAO,CACV,IAAMiG,EAAS,KAAK,MAAMjG,CAAK,EAC/B,GAAIiG,IAAW,MAAQ,OAAOA,GAAU,UAAY,MAAM,QAAQA,CAAM,EACpE,MAAM,IAAI,UAAU,0DAA0DjG,CAAK,cAAcmL,GAAsBlF,CAAM,CAAC,GAAG,EAErI,OAAOA,CACX,EACA,OAAOjG,EAAO,CACV,OAAOA,CACX,CACJ,EACMyM,GAAU,CACZ,QAASC,GACT,MAAOC,GACP,OAAQA,EACZ,EACA,SAASA,GAAU3M,EAAO,CACtB,OAAO,KAAK,UAAUA,CAAK,CAC/B,CACA,SAAS0M,GAAY1M,EAAO,CACxB,MAAO,GAAGA,CAAK,EACnB,CAEA,IAAM4M,GAAN,KAAiB,CACb,YAAYhL,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,WAAW,YAAa,CACpB,MAAO,EACX,CACA,OAAO,UAAUiL,EAAaC,EAAc,CAE5C,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACA,YAAa,CACb,CACA,SAAU,CACV,CACA,YAAa,CACb,CACA,SAASC,EAAW,CAAE,OAAA3F,EAAS,KAAK,QAAS,OAAAxC,EAAS,CAAC,EAAG,OAAAoI,EAAS,KAAK,WAAY,QAAAC,EAAU,GAAM,WAAAC,EAAa,EAAM,EAAI,CAAC,EAAG,CAC3H,IAAMhB,EAAOc,EAAS,GAAGA,CAAM,IAAID,CAAS,GAAKA,EAC3CI,EAAQ,IAAI,YAAYjB,EAAM,CAAE,OAAAtH,EAAQ,QAAAqI,EAAS,WAAAC,CAAW,CAAC,EACnE,OAAA9F,EAAO,cAAc+F,CAAK,EACnBA,CACX,CACJ,EACAP,GAAW,UAAY,CACnBtD,GACAY,GACAG,GACAX,EACJ,EACAkD,GAAW,QAAU,CAAC,EACtBA,GAAW,QAAU,CAAC,EACtBA,GAAW,OAAS,CAAC,EC//ErB,IAAAQ,GAA4B,SAErBC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,IAAK,MACT,CACJ,CAEA,IAAI,qBAAsB,CACtB,OAAO,KAAK,WAAa,KAAK,UAClC,CAEA,YAAYC,EAAS,CACjB,MAAMA,CAAO,EACb,KAAK,iCAAmC,IAAI,GAAAC,OAChD,CAEA,SAAU,CACN,KAAK,QAAU,IAAI,UAAU,QACzB,KAAK,QACL,CACI,QAAS,aACT,YAAa,mBACb,KAAM,GACN,UAAW,QACX,QAAS,QACb,CACJ,EACA,KAAK,QAAQ,iBAAiB,aAAcC,GAAK,KAAK,WAAW,CAAC,EAClE,KAAK,QAAQ,iBAAiB,aAAcA,GAAK,KAAK,aAAa,CAAC,EACpE,KAAK,QAAQ,iBAAiB,QAASA,GAAK,KAAK,YAAY,CAAC,EAC9D,KAAK,QAAQ,iBAAiB,OAAQA,GAAK,KAAK,cAAc,CAAC,CACnE,CAEA,YAAa,CACL,KAAK,UACL,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,KAEvB,CAEA,MAAM,YAAa,CACf,KAAK,UAAY,GACjB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,cAAe,CACjB,KAAK,UAAY,GACjB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,aAAc,CAChB,KAAK,WAAa,GAClB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,eAAgB,CAClB,KAAK,WAAa,GAClB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,yBAA0B,CAC5B,MAAM,KAAK,iCAAiC,MAAM,EAE9C,KAAK,UACD,KAAK,oBACA,KAAK,QAAQ,KAAK,UAAU,SAAS,MAAM,IAC5C,MAAM,IAAI,QAAQC,GAAK,CAAE,WAAWA,EAAG,GAAG,CAAE,CAAC,EAEzC,KAAK,SAAW,KAAK,sBACrB,KAAK,QAAQ,KAAK,EAClB,KAAK,QAAQ,IAAI,iBACb,aACA,IAAM,CACE,KAAK,QAAQ,IAAI,UAAU,SAAS,MAAM,GAC1C,KAAK,WAAW,CAExB,CACJ,EACA,KAAK,QAAQ,IAAI,iBACb,aACA,IAAM,CACE,KAAK,QAAQ,IAAI,UAAU,SAAS,MAAM,GAC1C,KAAK,aAAa,CAE1B,CACJ,EAEK,KAAK,UACN,KAAK,QAAU,MAAM,MAAM,KAAK,QAAQ,EAAE,KAAKA,GAAKA,EAAE,KAAK,CAAC,GAG5D,KAAK,UACL,KAAK,QAAQ,IAAI,cAAc,eAAe,EAAE,UAAY,KAAK,WAItE,KAAK,QAAQ,KAAK,UAAU,SAAS,MAAM,IAClD,MAAM,IAAI,QAAQA,GAAK,CAAE,WAAWA,EAAG,GAAG,CAAE,CAAC,EAEzC,KAAK,SAAW,CAAC,KAAK,qBACtB,KAAK,QAAQ,KAAK,IAK9B,KAAK,iCAAiC,MAAM,CAChD,CACJ,EC5GA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,UAAU,CACtB,CAEA,SAAU,CACN,KAAK,iBAAiB,CAC1B,CAEA,kBAAmB,CACf,IAAMC,EAAyB,KAAK,gBAAgB,OAAOC,GAAMA,EAAG,OAAO,EAE3E,GAAID,EAAuB,SAAW,EAAG,CACrC,IAAME,EAAwBF,EAAuB,CAAC,EACtDE,EAAsB,SAAW,GACjC,IAAMC,EAAc,SAAS,cAAc,OAAO,EAClDA,EAAY,KAAO,SACnBA,EAAY,KAAOD,EAAsB,KACzCC,EAAY,MAAQD,EAAsB,MAC1CA,EAAsB,WAAW,aAAaC,EAAaD,CAAqB,EAChFA,EAAsB,YAAcC,CACxC,KACI,SAAWD,KAAyBF,EAChCE,EAAsB,SAAW,GACjCA,EAAsB,aAAa,OAAO,CAGtD,CACJ,EC5BA,IAAOE,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,oBAAqB,KACzB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,OAAO,CACnB,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,oBAAoB,CAChC,CAEA,SAAU,CACN,KAAK,aAAa,QAAQC,GAAMA,EAAG,MAAM,UAAY,EAAE,CAC3D,CAEA,aAAaC,EAAG,CACZA,EAAE,eAAe,EACjB,KAAK,QAAQ,OAAO,EAEpB,KAAK,yBAAyB,QAAQC,GAAO,CACzC,KAAK,wBAAwB,6BAA6BA,CAAG,CACjE,CAAC,CACL,CACJ,EC3BA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,sBAAyB,MAC7B,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,SAAU,cAAe,mBAAoB,eAAgB,eAAgB,OAAQ,WAAY,SAAS,CACtH,CAEA,MAAM,SAAU,CACZ,GAAM,CAAE,QAAAC,CAAQ,EAAI,KAAM,QAAO,iBAAiB,EAClC,IAAIA,EAChB,CACI,CAAE,QAAS,KAAK,aAAc,MAAO,EAAG,EACxC,CAAE,QAAS,KAAK,kBAAmB,MAAO,UAAW,KAAM,IAAI,UAAU,QAAS,EAClF,CAAE,QAAS,KAAK,mBAAoB,MAAO,QAAS,KAAM,IAAI,UAAU,QAAS,EACjF,CAAE,QAAS,KAAK,mBAAoB,MAAO,QAAS,KAAM,IAAI,UAAU,QAAS,EACjF,CAAE,QAAS,KAAK,WAAY,MAAO,OAAQ,KAAM,IAAI,UAAU,QAAS,EACxE,CAAE,QAAS,KAAK,eAAgB,MAAO,aAAc,KAAM,IAAI,UAAU,QAAS,EAClF,CAAE,QAAS,KAAK,cAAe,MAAO,cAAe,KAAM,IAAI,UAAU,OAAQ,CACrF,EACA,CACI,UAAW,CAAE,UAAW,KAAK,0BAA2B,EACxD,eAAgB,EACpB,CACJ,EACQ,OAAO,WAAY,IAAM,CAC7B,KAAK,uBAAuB,UAAU,IAAI,QAAQ,CACtD,CAAC,CACL,CAEA,8BAA+B,CAC3B,KAAK,kBAAkB,MAAQ,KAAK,kBAAkB,QAAQ,aAC9D,KAAK,uBAAuB,UAAU,OAAO,QAAQ,EACrD,KAAK,mBAAmB,MAAQ,KAAK,mBAAmB,QAAQ,aAChE,KAAK,mBAAmB,MAAQ,KAAK,mBAAmB,QAAQ,aAChE,KAAK,WAAW,MAAQ,KAAK,WAAW,QAAQ,aAChD,KAAK,eAAe,MAAQ,KAAK,eAAe,QAAQ,aACxD,KAAK,cAAc,MAAQ,KAAK,cAAc,QAAQ,aAElD,KAAK,cAAc,cAAgB,IACnC,KAAK,cAAc,cAAgB,EAE3C,CACJ,EAEA,SAAS,iBACL,UACAC,GAAK,CACGA,EAAE,OAAO,QAAQ,MAAM,IAAMA,EAAE,OAAS,WAAaA,EAAE,OAAS,cAChEA,EAAE,eAAe,CAEzB,CACJ,ECvDA,IAAOC,GAAP,cAA6BC,EAAW,CAEpC,WAAW,SAAU,CACjB,MAAO,CAAC,WAAW,UAAU,OAAO,CACxC,CAEA,WAAW,QAAS,CAChB,MAAO,CACH,QAAW,MACf,CACJ,CAEA,uBAAuB,CAAE,cAAAC,EAAe,OAAQ,CAAE,YAAAC,CAAY,CAAE,EAAG,CAC/D,IAAIC,EAAgBF,EAAc,QAAQA,EAAc,aAAa,EAAE,MACvE,KAAK,YAAY,UAAU,QAAQC,CAAW,EAAE,OAAOC,CAAa,EAAE,KAAK,CAC/E,CAEA,sBAAsB,CAAE,OAAAC,CAAO,EAAG,CAC9B,KAAK,YAAY,UAAU,OAAOA,EAAO,KAAK,EAAE,KAAK,CACzD,CAEA,MAAM,SAAU,CACZ,GAAI,CAAC,KAAK,YAAY,UAAW,CAC7B,GAAM,CAAE,UAAAC,CAAU,EAAI,KAAM,QAAO,oBAAoB,EACvD,KAAK,YAAY,UAAY,IAAIA,EAAU,KAAK,YAAa,CACzD,IAAK,mFACL,WAAY,GACZ,SAAU,GACV,SAAU,GACV,KAAM,CACF,IAAK,KAAK,YACd,EACA,WAAY,GACZ,WAAY,GACZ,WAAY,CACR,CACI,QAAS,EACT,KAAM,KACV,EACA,CACI,QAAS,EACT,KAAM,UACV,EACA,CACI,QAAS,EACT,KAAM,MACV,EACA,CACI,QAAS,EACT,KAAM,QACV,CACJ,CACJ,CAAC,CACL,CAWJ,CACJ,ECjEA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,SAAU,CACN,KAAK,QAAQ,iBAAiB,QAASC,GAAK,KAAK,UAAUA,CAAC,CAAC,EAC7D,KAAK,QAAQ,iBAAiB,QAASA,GAAK,KAAK,oBAAoBA,CAAC,CAAC,CAC3E,CAEA,MAAM,UAAUA,EAAG,CACf,IAAMC,EAAa,MAAM,KAAK,KAAK,QAAQ,iBAAiB,kBAAkB,CAAC,EAE/E,GAAIA,EAAW,QAAQD,EAAE,MAAM,IAAM,GAAKA,EAAE,OAAO,QAAU,GAAI,CAC7DA,EAAE,eAAe,EACjB,IAAME,EAAYF,EAAE,cAAc,QAAQ,YAAY,EACjD,QAAQ,KAAM,EAAE,EAChB,MAAM,SAAS,EAEpB,QAAS,EAAI,EAAG,EAAIC,EAAW,QACvBA,EAAW,CAAC,EAAE,QAAU,GADO,IAE/BA,EAAW,CAAC,EAAE,MAAQC,EAAU,CAAC,CAK7C,CACJ,CAEA,oBAAoBF,EAAG,CACnB,GAAIA,EAAE,OAAO,MAAM,SAAWA,EAAE,OAAO,UAAW,CAC9C,IAAMC,EAAa,MAAM,KAAK,KAAK,QAAQ,iBAAiB,kBAAkB,CAAC,EACzEE,EAAgBF,EAAWA,EAAW,QAAQD,EAAE,MAAM,EAAI,CAAC,EAE7DG,GACAA,EAAc,MAAM,CAE5B,CACJ,CACJ,ECnCA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,gCAAiC,MACrC,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CACH,gBACA,4BACA,kCACA,qCACA,2BACA,2BACA,8BACA,YACJ,CACJ,CAEA,uBAAwB,CACpB,CACI,CAAC,KAAK,yCAA0C,QAAQ,KAAK,KAAK,oBAAoB,KAAK,GAAK,QAAQ,KAAK,KAAK,oBAAoB,KAAK,CAAC,EAC5I,CAAC,KAAK,+BAAgC,QAAQ,KAAK,KAAK,oBAAoB,KAAK,CAAC,EAClF,CAAC,KAAK,+BAAgC,0BAA0B,KAAK,KAAK,oBAAoB,KAAK,CAAC,EACpG,CAAC,KAAK,kCAAmC,KAAK,oBAAoB,MAAM,QAAU,CAAC,CACvF,EAAE,QAAQ,CAAC,CAACC,EAAYC,CAAO,IAAM,CACjCD,EAAW,YAAcC,EAAU,eAAiB,SACpDD,EAAW,UAAU,OAAO,eAAgBC,CAAO,CACvD,CAAC,EACD,KAAK,iBAAiB,CAC1B,CAEA,qBAAsB,CAClB,IAAMC,EAAuB,KAAK,oBAAoB,MAAM,OAAS,GAAK,KAAK,oBAAoB,QAAU,KAAK,gCAAgC,MAClJ,KAAK,sCAAsC,YAAcA,EAAuB,KAAK,qCAAuC,GAC5H,KAAK,sCAAsC,UAAU,OAAO,yBAA0BA,CAAoB,EAC1G,KAAK,iBAAiB,CAC1B,CAEA,kBAAmB,CACf,KAAK,iBAAiB,SAClB,CAAC,CACG,KAAK,yCACL,KAAK,+BACL,KAAK,+BACL,KAAK,iCACT,EAAE,MAAMC,GAAMA,EAAG,UAAU,SAAS,cAAc,CAAC,GAAK,KAAK,sCAAsC,UAAU,SAAS,wBAAwB,CACtJ,CACJ,ECjDA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,OAAQ,OACR,UAAW,MACf,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,MAAO,QAAQ,CAC3B,CAEA,MAAM,IAAIC,EAAG,CACTA,EAAE,eAAe,EACjB,MAAM,MAAM,KAAK,YAAa,CAAE,OAAQ,MAAO,CAAC,EAChD,KAAK,UAAU,UAAU,OAAO,sBAAsB,EACtD,KAAK,aAAa,UAAU,IAAI,sBAAsB,CAC1D,CAEA,MAAM,OAAOA,EAAG,CACZA,EAAE,eAAe,EACjB,MAAM,MAAM,KAAK,eAAgB,CAAE,OAAQ,MAAO,CAAC,EACnD,KAAK,UAAU,UAAU,IAAI,sBAAsB,EACnD,KAAK,aAAa,UAAU,OAAO,sBAAsB,CAC7D,CACJ,ECzBA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,gBAAiB,eAAgB,aAAc,yBAA0B,qBAAsB,oBAAoB,CAC/H,CAEA,SAAU,CACN,KAAK,cAAc,CACvB,CAEA,QAAQC,EAAG,CACPA,EAAE,eAAe,EACjB,KAAK,6BAA6B,QAAU,GAC5C,KAAK,6BAA6B,SAAW,GAC7C,CAAC,GAAG,KAAK,0BAA2B,GAAG,KAAK,yBAAyB,EAAE,QAAQC,GAAO,CAClFA,EAAI,QAAU,EAClB,CAAC,EACD,KAAK,cAAc,EACnB,KAAK,iBAAiB,cAAc,IAAI,YAAY,qBAAqB,CAAC,CAC9E,CAEA,cAAcD,EAAG,EACTA,EAAE,SAAW,KAAK,8BAAgC,KAAK,0BAA0B,KAAKE,GAAQA,IAASF,EAAE,MAAM,KAC3GA,EAAE,SAAW,KAAK,6BAClB,KAAK,0BAA0B,QAAQE,GAAQ,CAC3CA,EAAK,QAAU,EACnB,CAAC,EAED,KAAK,6BAA6B,QAAU,KAAK,0BAA0B,MAAMA,GAAQ,CAACA,EAAK,OAAO,EAG1G,KAAK,6BAA6B,SAAW,KAAK,6BAA6B,SAGnF,KAAK,cAAc,EACnB,KAAK,iBAAiB,cAAc,IAAI,YAAY,qBAAqB,CAAC,CAC9E,CAEA,eAAgB,CACZ,IAAMC,EAAa,KAAK,0BAA0B,KAAKD,GAAQA,EAAK,OAAO,GAAK,KAAK,0BAA0B,KAAKA,GAAQA,EAAK,OAAO,EACxI,KAAK,oBAAoB,UAAU,OAAO,kBAAmB,CAACC,CAAU,EACxE,KAAK,mBAAmB,UAAU,OAAO,kBAAmBA,CAAU,CAC1E,CACJ,EC3CA,IAAAC,GAAO,SAEAC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,0BAA2B,MAC/B,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,eAAe,CAC3B,CAEA,SAAU,CACF,UAAU,UACV,KAAK,oBAAoB,UAAU,OAAO,QAAQ,CAE1D,CAEA,MAAM,SAASC,EAAG,CACdA,EAAE,eAAe,EACjB,MAAM,UAAU,UAAU,UAAUA,EAAE,OAAO,IAAI,EACjD,OAAO,QAAQ,KAAK,8BAA8B,CACtD,CAEA,MAAM,UAAUA,EAAG,CACfA,EAAE,eAAe,EACjB,MAAM,UAAU,MAAM,CAAE,IAAKA,EAAE,OAAO,IAAK,CAAC,CAChD,CACJ,EC7BA,IAAAC,GAA4B,SAErBC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,SAAY,MAChB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,gBAAgB,CAC5B,CAEA,IAAI,qBAAsB,CACtB,OAAO,KAAK,WAAa,KAAK,UAClC,CAEA,YAAYC,EAAS,CACjB,MAAMA,CAAO,EACb,KAAK,iCAAmC,IAAI,GAAAC,OAChD,CAEA,SAAU,CACF,KAAK,0BACL,KAAK,QAAU,IAAI,UAAU,QACzB,KAAK,QACL,CACI,YAAa,wBACb,KAAM,GACN,MAAO,IAAM,KAAK,qBAAqB,QAAQ,UAAU,EAAI,EAC7D,QAAS,QACb,CACJ,EAER,CAEA,YAAa,CACL,KAAK,UACL,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,KAEvB,CAEA,MAAM,YAAa,CACf,KAAK,UAAY,GACjB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,cAAe,CACjB,KAAK,UAAY,GACjB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,aAAc,CAChB,KAAK,WAAa,GAClB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,eAAgB,CAClB,KAAK,WAAa,GAClB,MAAM,KAAK,wBAAwB,CACvC,CAEA,MAAM,yBAA0B,CAC5B,MAAM,KAAK,iCAAiC,MAAM,EAE9C,KAAK,UACD,KAAK,oBACA,KAAK,QAAQ,KAAK,UAAU,SAAS,MAAM,IAC5C,MAAM,IAAI,QAAQC,GAAK,CAAE,WAAWA,EAAG,GAAG,CAAE,CAAC,EAEzC,KAAK,SAAW,KAAK,sBACrB,KAAK,QAAQ,KAAK,EAClB,KAAK,QAAQ,IAAI,iBACb,aACA,IAAM,CACE,KAAK,QAAQ,IAAI,UAAU,SAAS,MAAM,GAC1C,KAAK,WAAW,CAExB,CACJ,EACA,KAAK,QAAQ,IAAI,iBACb,aACA,IAAM,CACE,KAAK,QAAQ,IAAI,UAAU,SAAS,MAAM,GAC1C,KAAK,aAAa,CAE1B,CACJ,EAEK,KAAK,YACN,KAAK,UAAY,MAAM,MAAM,KAAK,aAAa,EAAE,KAAKA,GAAKA,EAAE,KAAK,CAAC,GAGnE,KAAK,UACL,KAAK,QAAQ,IAAI,cAAc,UAAU,EAAE,UAAY,KAAK,aAIjE,KAAK,QAAQ,KAAK,UAAU,SAAS,MAAM,IAClD,MAAM,IAAI,QAAQA,GAAK,CAAE,WAAWA,EAAG,GAAG,CAAE,CAAC,EAEzC,KAAK,SAAW,CAAC,KAAK,qBACtB,KAAK,QAAQ,KAAK,IAK9B,KAAK,iCAAiC,MAAM,CAChD,CACJ,EC9GA,IAAAC,GAAoB,SAEpB,SAASC,GAASC,EAAMC,EAAM,CAC1B,IAAIC,EACJ,OAAO,YAAaC,EAAM,CACtB,IAAMC,EAAU,KAChB,aAAaF,CAAO,EACpBA,EAAU,WAAW,IAAMF,EAAK,MAAMI,EAASD,CAAI,EAAGF,CAAI,CAC9D,CACJ,CAEA,IAAOI,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,sBAAuB,OACvB,OAAQ,MACR,cAAe,MACnB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,eAAgB,OAAQ,UAAW,cAAe,mBAAoB,mBAAoB,WAAY,OAAQ,WAAY,iBAAkB,YAAa,SAAU,gBAAiB,iBAAkB,QAAS,gBAAiB,gBAAiB,mBAAoB,cAAe,gBAAiB,sBAAuB,qBAAsB,YAAa,aAAc,mBAAoB,gBAAgB,CAC7Z,CAEA,MAAM,SAAU,CACZ,KAAK,qBAAqB,QAAQC,GAAO,IAAI,UAAU,QAAQA,CAAG,CAAC,EACnE,GAAM,CAAE,KAAAC,EAAM,OAAAC,CAAO,EAAI,KAAM,QAAO,oBAAoB,EACpDC,EAAS,IAAID,EAAO,CACtB,KAAAD,EACA,cAAgBG,GAAM,CAClB,KAAK,YAAYA,EAAE,MAAM,CAC7B,CACJ,CAAC,EACD,KAAK,kBAAkB,YAAYD,CAAM,EACzC,KAAK,WAAaX,GAAS,KAAK,WAAW,KAAK,IAAI,EAAG,GAAG,CAC9D,CAEA,MAAM,6BAA6Ba,EAAQ,CACvC,IAAMC,EAAoB,CAAC,EAEvB,KAAK,+BACLA,EAAkB,KAAK,CACnB,QAAS,IACT,OAAQ,MAAOC,EAAMC,IAAa,CAC9B,IAAMC,EAAkB,IAAI,gBAC5BA,EAAgB,OAAO,aAAcF,CAAI,EACzCE,EAAgB,OAAO,OAAQ,CAAC,EAChCA,EAAgB,OAAO,WAAY,EAAE,EACrC,IAAMC,EAAW,MAAM,MAAM,GAAG,KAAK,0BAA0B,IAAID,CAAe,EAAE,EACpFD,EAAS,MAAME,EAAS,KAAK,CAAC,CAClC,EACA,OAAQ,OACR,iBAAkB,SAAUC,EAAM,CAC9B,MAAO,aAAaA,EAAK,SAAS,QAAQ,YAAYA,EAAK,SAAS,IAAI,EAC5E,EACA,eAAgB,SAAUA,EAAM,CAC5B,MAAO,8DAA8DA,EAAK,SAAS,IAAI,QAAQA,EAAK,SAAS,EAAE,mBAAmBA,EAAK,SAAS,KAAK,CAAC,CAAC,IAAIA,EAAK,SAAS,EAAE,IAAIA,EAAK,SAAS,IAAI;AAAA,+BACtLA,EAAK,SAAS,IAAI;AAAA,gCAEjC,EACA,WAAY,CACR,KAAM,EACV,CACJ,CAAC,EAGD,KAAK,gBAAkB,KAAK,YAAY,OAAS,GACjDL,EAAkB,KAAK,CACnB,QAAS,IACT,OAAQ,KAAK,YAAY,IAAIM,IAAM,CAAC,MAAOA,EAAE,MAAO,KAAMA,EAAE,IAAI,EAAE,EAClE,OAAQ,OACR,cAAe,GACf,iBAAkB,SAAUD,EAAM,CAC9B,OAAOA,EAAK,SAAS,IACzB,EACA,eAAgB,SAAUA,EAAM,CAC5B,MAAO,8DAA8DA,EAAK,SAAS,KAAK,mBAAmBA,EAAK,SAAS,KAAK,IAAIA,EAAK,SAAS,IAAI;AAAA,wCACrIA,EAAK,SAAS,IAAI;AAAA,oCAErC,CACJ,CAAC,EAGD,KAAK,uBACLL,EAAkB,KAAK,CACnB,QAAS,IACT,OAAQ,MAAOC,EAAMC,IAAa,CAC9B,IAAMC,EAAkB,IAAI,gBAC5BA,EAAgB,OAAO,aAAcF,CAAI,EACzC,IAAMG,EAAW,MAAM,MAAM,GAAG,KAAK,kBAAkB,IAAID,CAAe,EAAE,EAC5ED,EAAS,MAAME,EAAS,KAAK,CAAC,CAClC,EACA,OAAQ,OACR,iBAAkB,SAAUC,EAAM,CAC9B,OAAOA,EAAK,SAAS,IACzB,EACA,eAAgB,SAAUA,EAAM,CAC5B,MAAO,yDAAyDA,EAAK,SAAS,IAAI,mBAAmBA,EAAK,SAAS,IAAI;AAAA,mCACxGA,EAAK,SAAS,IAAI;AAAA,oCAErC,EACA,WAAY,CACR,KAAM,EACV,CACJ,CAAC,EAGDL,EAAkB,OAAS,IAC3B,KAAK,oBAAoB,QAAU,IAAI,GAAAO,QAAQ,CAC3C,WAAYP,EACZ,eAAgB,4BAChB,UAAW,kCACX,YAAa,EACjB,CAAC,EACD,KAAK,oBAAoB,QAAQ,OAAOD,CAAM,EAEtD,CAEA,sBAAsBD,EAAG,CACjBA,EAAE,UAAY,IACdA,EAAE,eAAe,CAEzB,CAEA,kBAAkBA,EAAG,CACjBA,EAAE,OAAO,UAAU,OAAO,cAAeA,EAAE,OAAO,WAAW,CACjE,CAEA,oBAAqB,CACjB,IAAIU,EAAU,KAAK,oBAAoB,UAAU,EAAI,EACrDA,EAAQ,iBAAiB,QAAQ,GAAG,QAAQC,GAAKA,EAAE,YAAYA,EAAE,QAAQ,KAAK,CAAC,EAC/E,KAAK,cAAc,MAAQD,EAAQ,YACnC,KAAK,kBAAkB,MAAQ,KAAK,oBAAoB,UAEpD,KAAK,4BACL,KAAK,uBAAuB,MAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB,iBAAiB,0BAA0B,CAAC,EAAE,IAAIC,GAAKA,EAAE,QAAQ,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,GAGzK,KAAK,4BACL,KAAK,uBAAuB,MAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB,iBAAiB,0BAA0B,CAAC,EAAE,IAAIA,GAAKA,EAAE,QAAQ,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,GAGzK,KAAK,oBACL,KAAK,eAAe,MAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB,iBAAiB,iBAAiB,CAAC,EAAE,IAAIA,GAAKA,EAAE,QAAQ,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,GAGhJ,KAAK,gBACL,KAAK,WAAW,MAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,oBAAoB,iBAAiB,YAAY,CAAC,EAAE,IAAIA,GAAKA,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAE3I,CAEA,UAAUX,EAAG,CACTA,EAAE,eAAe,EACjB,IAAMG,EAAOH,EAAE,cAAc,QAAQ,MAAM,EACrCY,EAAY,OAAO,aAAa,EACjCA,EAAU,aACfA,EAAU,mBAAmB,EAC7BA,EAAU,WAAW,CAAC,EAAE,WAAW,SAAS,eAAeT,CAAI,CAAC,EAChES,EAAU,cAAc,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,UAAU,IAAI,aAAa,EACxD,CAEA,gBAAgBZ,EAAG,CACfA,EAAE,eAAe,CACrB,CAEA,YAAYA,EAAG,CACXA,EAAE,eAAe,CACrB,CAEA,eAAeA,EAAG,CACdA,EAAE,eAAe,EACjB,KAAK,sBAAsB,GAAG,CAClC,CAEA,UAAUA,EAAG,CACTA,EAAE,eAAe,EACjB,KAAK,sBAAsB,GAAG,CAClC,CAEA,QAAQA,EAAG,CACPA,EAAE,eAAe,EACjB,KAAK,sBAAsB,GAAG,CAClC,CAEA,QAAQA,EAAG,CAGP,MAAM,uGAAiF,EAClF,KAAKM,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAKT,GAAQ,CACV,IAAMgB,EAAa,KAAK,iBACxBA,EAAW,UAAY,GACvBhB,EAAK,KAAK,QAAQiB,GAAO,CACrB,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,IAAMD,EAAI,OAAO,aAAa,IAClCC,EAAI,IAAMD,EAAI,MACdC,EAAI,aAAa,aAAcD,EAAI,OAAO,mBAAmB,GAAG,EAChEC,EAAI,aAAa,WAAYD,EAAI,OAAO,aAAa,GAAG,EACxDC,EAAI,aAAa,UAAW,MAAM,EAClCA,EAAI,QAAU,IAAM,KAAK,UAAUD,EAAI,OAAO,aAAa,IAAKA,EAAI,OAAO,mBAAmB,GAAG,EACjGD,EAAW,YAAYE,CAAG,CAC9B,CAAC,CACL,CAAC,EACA,MAAMC,GAAS,QAAQ,MAAM,uBAAwBA,CAAK,CAAC,CACpE,CAEA,YAAa,CACT,IAAMC,EAAU,mCACZC,EAAQ,KAAK,gBAAgB,MAE7BA,IAAU,GAEV,MAAM,kDAAkDD,CAAO,wBAAwB,EAClF,KAAKX,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAKT,GAAQ,CACV,IAAMgB,EAAa,KAAK,iBACxBA,EAAW,UAAY,GACvBhB,EAAK,KAAK,QAAQiB,GAAO,CACrB,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,IAAMD,EAAI,OAAO,aAAa,IAClCC,EAAI,IAAMD,EAAI,MACdC,EAAI,aAAa,aAAcD,EAAI,OAAO,mBAAmB,GAAG,EAChEC,EAAI,aAAa,WAAYD,EAAI,OAAO,aAAa,GAAG,EACxDC,EAAI,aAAa,UAAW,MAAM,EAClCA,EAAI,QAAU,IAAM,KAAK,UAAUD,EAAI,OAAO,aAAa,IAAKA,EAAI,OAAO,mBAAmB,GAAG,EACjGD,EAAW,YAAYE,CAAG,CAC9B,CAAC,CACL,CAAC,EACA,MAAMC,GAAS,QAAQ,MAAM,uBAAwBA,CAAK,CAAC,EAGhE,MAAM,gDAAgDC,CAAO,MAAMC,CAAK,wBAAwB,EAC3F,KAAKZ,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAKT,GAAQ,CACV,IAAMgB,EAAa,KAAK,iBACxBA,EAAW,UAAY,GACvBhB,EAAK,KAAK,QAAQiB,GAAO,CACrB,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,IAAMD,EAAI,OAAO,aAAa,IAClCC,EAAI,IAAMD,EAAI,MACdC,EAAI,aAAa,aAAcD,EAAI,OAAO,mBAAmB,GAAG,EAChEC,EAAI,aAAa,WAAYD,EAAI,OAAO,aAAa,GAAG,EACxDC,EAAI,aAAa,UAAW,MAAM,EAClCA,EAAI,QAAU,IAAM,KAAK,UAAUD,EAAI,OAAO,aAAa,IAAKA,EAAI,OAAO,mBAAmB,GAAG,EACjGD,EAAW,YAAYE,CAAG,CAC9B,CAAC,CACL,CAAC,EACA,MAAMC,GAAS,QAAQ,MAAM,uBAAwBA,CAAK,CAAC,CAGxE,CAEA,gBAAgBhB,EAAG,CACfA,EAAE,eAAe,CACrB,CAEA,UAAUmB,EAAKC,EAAW,CACtB,KAAK,WAAW,EAChB,IAAMC,EAAmB,KAAK,eACxBC,EAAyB,KAAK,qBACpCD,EAAiB,MAAQF,EACzBG,EAAuB,MAAQF,EAE/B,IAAMG,EAAmB,KAAK,QAAQ,cAAc,2BAA2B,EACzEC,EAAcD,EAAiB,cAAc,MAAM,EAErDC,EACAA,EAAY,IAAML,EAElBI,EAAiB,mBAAmB,YAAa,aAAaJ,CAAG,iBAAiBC,CAAS,mCAAmC,EAGlI,KAAK,0BAA0B,UAAU,OAAO,QAAQ,EACxD,KAAK,yBAAyB,UAAU,OAAO,QAAQ,EACvD,UAAU,SAAS,oBAAoB,KAAK,mBAAmB,EAAE,KAAK,CAC1E,CAEA,UAAUpB,EAAG,CACTA,EAAE,eAAe,EACjB,KAAK,SAAS,CAClB,CAEA,iCAAkC,CAC9B,IAAMY,EAAY,aAAa,EAE3B,KAAK,oBAAoB,SAASA,EAAU,UAAU,EACtD,KAAK,4BAA8BA,EAAU,WAAW,CAAC,GAEzD,KAAK,4BAA8B,SAAS,YAAY,EACxD,KAAK,4BAA4B,mBAAmB,KAAK,mBAAmB,EAC5E,KAAK,4BAA4B,SAAS,EAElD,CAEA,YAAYa,EAAO,CACf,IAAMb,EAAY,OAAO,aAAa,EACtCA,EAAU,gBAAgB,EAC1BA,EAAU,SAAS,KAAK,2BAA2B,EACnD,KAAK,4BAA4B,eAAe,EAChD,KAAK,4BAA4B,WAAW,SAAS,eAAea,EAAQ,MAAQ,CAAC,EACrF,KAAK,4BAA4B,SAAS,EAC1C,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,UAAU,IAAI,aAAa,EACpD,UAAU,SAAS,oBAAoB,KAAK,sBAAsB,EAAE,KAAK,CAC7E,CAEA,sBAAsBC,EAAS,CAEtB,KAAK,oBAAoB,UAAU,SAAS,aAAa,IAC1D,KAAK,oBAAoB,UAAY,iBAGzC,KAAK,oBAAoB,QAAQ,sBAAsB,KAAK,oBAAqB,KAAK,oBAAoB,QAAQ,WAAW,UAAUC,GAAKA,EAAE,UAAYD,CAAO,CAAC,EAClK,KAAK,oBAAoB,UAAU,IAAI,aAAa,CACxD,CAEA,kBAAmB,CACX,KAAK,mBAAmB,MAAM,OAAS,GACvC,KAAK,SAAS,EAGlB,KAAK,YAAY,EACjB,UAAU,QAAQ,YAAY,KAAK,sBAAsB,EAAE,KAAK,CACpE,CAEA,oBAAoBzB,EAAQ,CACxB,GAAK,KAAK,sBAIV,IAAI,CAAC,KAAK,mBAAmB,KAAM,CAC/B,KAAK,mBAAmB,MAAQ,KAChC,KAAK,mBAAmB,aAAa,OAAQA,EAAO,EAAE,EACtD,MACJ,CAEA,KAAK,YAAY,EACrB,CAEA,YAAYD,EAAG,CACXA,EAAE,eAAe,EACjB,KAAK,WAAW,CACpB,CAEA,WAAWA,EAAG,CACVA,EAAE,eAAe,EACjB,KAAK,mBAAmB,MAAM,CAClC,CAEA,UAAW,CACP,GAAI,CAAC,KAAK,kBACN,OAGJ,IAAMqB,EAAmB,KAAK,eAC9BA,EAAiB,MAAQ,GAGzB,IAAMG,EADmB,KAAK,QAAQ,cAAc,2BAA2B,EAC1C,cAAc,MAAM,EAErDA,GACAA,EAAY,OAAO,EAGvB,KAAK,0BAA0B,UAAU,IAAI,QAAQ,EACrD,KAAK,yBAAyB,UAAU,IAAI,QAAQ,CACxD,CAEA,aAAc,CACV,GAAI,KAAK,mBAAmB,MAAM,OAAS,EAAG,CAC1C,IAAMI,EAAO,KAAK,mBAAmB,MAAM,CAAC,EACtCC,EAAa,IAAI,WACvBA,EAAW,iBACP,OACAC,GAAK,CACD,KAAK,YAAY,IAAMD,EAAW,OAClC,KAAK,qBAAqB,UAAU,OAAO,QAAQ,CACvD,CACJ,EACAA,EAAW,cAAcD,CAAI,CACjC,MAAW,CAAC,KAAK,oBAAsB,KAAK,gBAAgB,QAAU,MAClE,KAAK,qBAAqB,UAAU,IAAI,QAAQ,EAChD,KAAK,YAAY,IAAM,GAE/B,CAEA,YAAa,CACJ,KAAK,wBAIV,KAAK,mBAAmB,MAAQ,KAE5B,KAAK,qBACL,KAAK,gBAAgB,MAAQ,MAGjC,KAAK,YAAY,EACrB,CAEA,SAAS5B,EAAG,CACRA,EAAE,eAAe,EACjB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,oBAAoB,SAAW,GACpC,KAAK,uBAAuB,SAAW,GACvC,KAAK,qBAAqB,SAAW,GACrC,KAAK,aAAa,MAAQ,OAC1B,KAAK,oBAAoB,UAAU,OAAO,QAAQ,CACtD,CAEA,WAAWA,EAAG,CACVA,EAAE,eAAe,EACjB,KAAK,oBAAoB,UAAU,IAAI,QAAQ,EAC/C,KAAK,aAAa,MAAQ,QAC1B,KAAK,qBAAqB,SAAW,GACrC,KAAK,uBAAuB,SAAW,GACvC,KAAK,oBAAoB,SAAW,EACxC,CACJ,ECpaA,IAAO+B,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,WAAY,QAAQ,CAChC,CAEA,YAAYC,EAAO,CACfA,EAAM,eAAe,EAErB,IAAMC,EAAM,KAAK,eACXC,EAAS,KAAK,aAEdC,EAAaF,EAAI,aAAa,KAAK,EACnCG,EAAWH,EAAI,aAAa,YAAY,EACxCI,EAASJ,EAAI,aAAa,UAAU,EAEtCE,IAAeE,GACfJ,EAAI,aAAa,MAAOG,CAAQ,EAChCF,EAAO,YAAc,gBAErBD,EAAI,aAAa,MAAOI,CAAM,EAC9BH,EAAO,YAAc,eAE7B,CACJ,ECvBA,IAAOI,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,UAAW,CACP,KAAM,OACN,QAAU,IACd,CACJ,CACJ,CAEA,SAAU,CACN,KAAK,QAAQ,iBAAiB,SAAU,IAAM,KAAK,qBAAqB,CAAC,EACzE,KAAK,oBAAoB,CAC7B,CAEA,sBAAuB,CACnB,KAAK,QAAQ,iBAAiB,2DAA2D,EAAE,QAAQC,GAAM,CACrGA,EAAG,SAAW,EAClB,CAAC,CACL,CAEA,qBAAsB,CAClB,GAAI,KAAK,iBAAmB,MAAO,CAC/B,IAAMC,EACF,KAAK,QAAQ,cAAc,4DAA4D,GAEnF,KAAK,iBAAmB,MACxB,KAAK,QAAQ,cAAc,iEAAiE,EAGhGA,IACIA,EAAe,UAAU,SAAS,wBAAwB,GAC1D,KAAK,QAAQ,eAAe,EAAI,EAGpCA,EAAe,MAAM,EAE7B,CACJ,CACJ,ECvCA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,UAAW,OACX,gBAAiB,OACjB,UAAW,OACX,YAAa,OACb,4BAA6B,MACjC,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,SAAU,sBAAuB,cAAc,CAC3D,CAEA,MAAM,kCAAmC,CACrC,KAAK,SAAS,sBAAuB,CAAE,QAAS,EAAK,CAAC,CAC1D,CAEA,sBAAsBC,EAAQ,CAC1B,OAAOA,CAAM,EACR,UACG,CACI,UAAW,CACf,EACA,CACI,OAAQ,MAAOC,EAAOC,EAAGC,IAAiB,CAEtC,IAAMC,EAAO,MADI,MAAM,MAAM,GAAG,KAAK,cAAc,IAAI,IAAI,gBAAgB,CAAC,CAAC,OAAQH,CAAK,CAAC,CAAC,CAAC,EAAE,GACnE,KAAK,EACjCE,EAAaC,CAAI,CACrB,EACA,SAAU,KACV,WAAY,UAChB,CACJ,EACC,GAAG,6CAA8C,MAAOF,EAAG,CAAE,GAAAG,CAAG,IAAM,CACnE,IAAMC,EAAW,MAAM,MAAM,GAAG,KAAK,oBAAoB,IAAI,IAAI,gBAAgB,CAAC,CAAC,YAAaD,CAAE,CAAC,CAAC,CAAC,EAAE,EAEnGC,EAAS,KACT,KAAK,0BAA0B,UAAU,OAAO,QAAQ,EACxD,KAAK,mBAAmB,UAAY,MAAMA,EAAS,KAAK,EACxD,KAAK,mBAAmB,cAAc,iBAAiB,EAAE,UAAU,IAAI,MAAM,EAErF,CAAC,CACT,CAEA,MAAM,OAAO,CAAE,cAAAC,EAAe,OAAQ,CAAE,UAAAC,CAAU,CAAE,EAAG,EAC9C,MAAM,MAAM,GAAG,KAAK,cAAc,cAAcA,CAAS,GAAI,CAAE,OAAQ,MAAO,CAAC,GAAG,KACnFD,EAAc,WAAW,YAAc,KAAK,iCAEpD,CAEA,MAAM,SAAS,CAAE,cAAAA,EAAe,OAAQ,CAAE,UAAAC,CAAU,CAAE,EAAG,EAChD,MAAM,MAAM,GAAG,KAAK,gBAAgB,cAAcA,CAAS,GAAI,CAAE,OAAQ,MAAO,CAAC,GAAG,KACrFD,EAAc,WAAW,YAAc,KAAK,iCAEpD,CACJ,ECzDA,IAAOE,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,kBAAmB,MACvB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,gBAAgB,CAC5B,CAEA,uBAAwB,CACpB,KAAK,sBAAsB,QAAQC,GAAO,CACtCA,EAAI,IAAM,GAAG,KAAK,sBAAsB,UAAUA,EAAI,aAAa,OAAO,CAAC,WAAWA,EAAI,aAAa,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,QAAQ,CAAC,EAC5I,CAAC,CACL,CACJ,ECjBA,IAAAC,GAAO,SAEAC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,iBAAkB,OAClB,8BAA+B,OAC/B,kBAAmB,OACnB,wBAAyB,OACzB,8BAA+B,OAC/B,0BAA2B,MAC/B,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,qBAAsB,mBAAoB,YAAY,CAClE,CAEA,MAAM,SAAU,CACZ,KAAK,aAAa,EAClB,KAAK,QAAQ,iBAAiB,QAASC,GAAK,KAAK,WAAWA,CAAC,CAAC,EAC9D,MAAM,KAAK,2BAA2B,EACtC,MAAM,KAAK,eAAe,EAC1B,MAAM,KAAK,qBAAqB,EAChC,MAAM,KAAK,2BAA2B,CAC1C,CAEA,cAAe,CAEf,CAEA,WAAWA,EAAG,CACV,KAAK,yBAAyB,UAAU,OAAO,SAAS,EACxD,KAAK,QAAQ,UAAU,OAAO,WAAW,EACzCA,EAAE,eAAe,CACrB,CAEA,UAAUA,EAAG,CACT,KAAK,yBAAyB,UAAU,OAAO,SAAS,EACxD,KAAK,QAAQ,UAAU,OAAO,WAAW,EACzCA,EAAE,eAAe,CACrB,CAEA,WAAWA,EAAG,CACNA,EAAE,OAAO,UAAY,MAAQA,EAAE,OAAO,KAAO,eAAiBA,EAAE,OAAO,UAAU,SAAS,aAAa,KACvG,UAAU,UAAU,oBAAoB,KAAK,gBAAgB,EAAE,KAAK,EACpEA,EAAE,eAAe,EAEzB,CAEA,MAAM,gBAAiB,CACnB,IAAMC,EAAgB,IAAI,QAAQC,GAAW,CACzC,KAAK,iBAAiB,iBAClB,sBACA,IAAM,CACFA,EAAQ,CACZ,EACA,CAAE,KAAM,EAAK,CACjB,CACJ,CAAC,EACD,iBAAU,UAAU,YAAY,KAAK,gBAAgB,EAAE,KAAK,EACrDD,CACX,CAEA,MAAM,oBAAqB,CACvB,OAAO,IAAI,QAAQC,GAAW,CAC1B,OAAO,iBAAmB,KAAK,sBAC/B,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAM,qCAAqC,KAAK,sBAAsB,MAAM,GACnFA,EAAO,iBAAiB,OAAQ,IAAM,CAClCD,EAAQ,CACZ,CAAC,EACD,SAAS,KAAK,YAAYC,CAAM,CACpC,CAAC,CACL,CAEA,MAAM,gBAAiB,CACnB,KAAK,uBAAuB,UAAU,IAAI,QAAQ,EAClD,IAAMC,EAAW,CAAC,KAAK,eAAe,CAAC,EAElC,OAAO,UACRA,EAAS,KAAK,KAAK,mBAAmB,CAAC,EAG3C,MAAM,QAAQ,WAAWA,CAAQ,EACjC,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,SAAU,IAAM,CAC5B,KAAK,uBAAuB,UAAU,OAAO,QAAQ,EACrD,KAAK,uBAAuB,MAAM,CACtC,CAAC,CACL,CAEA,MAAM,qBAAqBC,EAAa,CACpC,IAAMC,EAAa,2CAA2CD,CAAW,GAEzE,GAAI,eAAeC,CAAU,EACzB,OAGJ,IAAMC,EAAW,MAAM,MAAMF,CAAW,EAClCG,EAAW,SAAS,cAAc,UAAU,EAGlD,GAFAA,EAAS,UAAY,MAAMD,EAAS,KAAK,EAErC,CAACC,EAAS,QAAQ,kBAClB,OAGJ,IAAMC,EAAe,KAAK,QAAQ,YAAYD,EAAS,QAAQ,kBAAkB,UAAU,EAAI,CAAC,EAChG,KAAK,QAAQC,CAAY,EACzB,IAAMC,EAAQ,IAAI,UAAU,MAAMD,CAAY,EAC1CE,EACJF,EAAa,cAAc,kBAAkB,GAAG,iBAC5C,QACAG,GAAK,CACDD,EAAW,GACXD,EAAM,KAAK,CACf,EACA,CAAE,KAAM,EAAK,CACjB,EACA,IAAMT,EAAgB,IAAI,QAAQY,GAAK,CACnCJ,EAAa,iBAAiB,kBAAmBI,EAAG,CAAE,KAAM,EAAK,CAAC,CACtE,CAAC,EACD,OAAAH,EAAM,KAAK,EACX,MAAMT,EAEFU,IACA,eAAeL,CAAU,EAAI,IAG1B,CAACK,CACZ,CAEA,MAAM,4BAA6B,CAC/B,KAAO,MAAM,KAAK,qBAAqB,KAAK,kCAAkC,GAAG,CACrF,CAEA,gBAAiB,CACb,OAAO,KAAK,qBAAqB,KAAK,sBAAsB,CAChE,CAEA,MAAM,sBAAuB,CACzB,KAAO,MAAM,KAAK,qBAAqB,KAAK,4BAA4B,GAAG,CAC/E,CAEA,MAAM,uBAAuBG,EAAI,CAC7B,IAAMC,EAAO,IAAI,gBACjBA,EAAK,IAAI,KAAMD,CAAE,EACjB,MAAM,MACF,KAAK,+BACL,CACI,OAAQ,OACR,KAAMC,CACV,CACJ,CACJ,CAEA,MAAM,4BAA6B,EAET,MADL,MAAM,MAAM,KAAK,kCAAkC,GAC/B,KAAK,GAC5B,QAAQC,GAAK,CACvB,IAAIC,EAAU,CACV,QAAS,IAAM,KAAK,uBAAuBD,EAAE,EAAE,EAC/C,aAAc,IAAM,KAAK,uBAAuBA,EAAE,EAAE,CACxD,EAEIA,EAAE,mBACFC,EAAU,CACN,GAAGA,EACH,YAAa,GACb,QAAS,EACT,gBAAiB,CACrB,GAGJ,OAAOD,EAAE,IAAI,EAAEA,EAAE,KAAMA,EAAE,MAAOC,CAAO,CAC3C,CAAC,CACL,CACJ,EChLA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,SAAU,MACd,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,kBAAkB,CAC9B,CAEA,MAAM,oBAAqB,CACvB,OAAO,IAAI,QAAQC,GAAW,CAC1B,OAAO,iBAAmB,KAAK,cAC/B,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAM,qCAAqC,KAAK,cAAc,MAAM,GAC3EA,EAAO,iBAAiB,OAAQ,IAAM,CAClCD,EAAQ,CACZ,CAAC,EACD,SAAS,KAAK,YAAYC,CAAM,CACpC,CAAC,CACL,CAEA,MAAM,gBAAiB,CACnB,KAAK,uBAAuB,UAAU,IAAI,QAAQ,EAClD,IAAMC,EAAW,CAAC,EAEb,OAAO,UACRA,EAAS,KAAK,KAAK,mBAAmB,CAAC,EAG3C,MAAM,QAAQ,WAAWA,CAAQ,EACjC,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,SAAU,IAAM,CAC5B,KAAK,uBAAuB,UAAU,OAAO,QAAQ,EACrD,KAAK,uBAAuB,MAAM,CACtC,CAAC,CACL,CAEA,MAAM,SAAU,CACZ,MAAM,IAAI,QAAQF,GAAW,WAAWA,EAAS,GAAK,CAAC,EACvD,KAAK,uBAAuB,iBAAiB,QAASG,GAAK,KAAK,WAAWA,CAAC,CAAC,EAC7E,KAAK,uBAAuB,MAAM,UAAY,EAClD,CAEA,WAAWA,EAAG,CACV,KAAK,eAAe,EACpBA,EAAE,eAAe,CACrB,CACJ,ECjDA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,QAAQ,CACpB,CAEA,WAAW,QAAS,CAChB,MAAO,CACH,IAAK,MACT,CACJ,CAEA,sBAAsBC,EAAQ,CAC1B,IAAIC,EAAM,KAAK,SAEf,OAAOD,CAAM,EAAE,UAAU,CACrB,KAAM,GACN,UAAW,GACX,UAAW,CACf,EAAG,CACC,WAAY,OACZ,SAAU,KACV,UAAW,CACP,WAAY,SAAUE,EAAM,CAExB,OAAIA,EAAK,OAAS,KAEVA,EAAK,IAAM,IACJ,mFAAqFA,EAAK,KAAO,sCAAwCA,EAAK,EAAE,YAAY,EAAI,iBAStKA,EAAK,IAAM,IACT,iGAAmGA,EAAK,KAAO,oCAAsCA,EAAK,EAAE,YAAY,EAAI,gBAG9KA,EAAK,IAAM,MAAQA,EAAK,KAAO,IAC7B,0FAA4FA,EAAK,KAAO,iCAAmCA,EAAK,EAAE,YAAY,EAAI,gBAGpKA,EAAK,IAAM,OAASA,EAAK,KAAO,IAC9B,kGAAoGA,EAAK,KAAO,iCAAmCA,EAAK,EAAE,YAAY,EAAI,gBAI1K,kHAAoHA,EAAK,KAAO,oCAAsCA,EAAK,EAAE,YAAY,EAAI,eAE5M,CASJ,EACA,MAAO,GAAI,OAAQ,SAAUC,EAAOC,EAAaC,EAAc,CAC3D,MAAMJ,EAAK,CACP,OAAQ,OACR,QAAS,CACL,eAAgB,kBACpB,EACA,KAAM,KAAK,UAAU,CAAE,KAAME,CAAM,CAAC,CACxC,CAAC,EACI,KAAMG,GAAaA,EAAS,KAAK,CAAC,EAClC,KAAMJ,GAAS,CACZG,EAAaH,CAAI,CACrB,CAAC,EACA,MAAOK,GAAU,CACd,QAAQ,MAAM,SAAUA,CAAK,CACjC,CAAC,CACT,CACJ,CAAC,EAAE,GAAG,6CAA8C,SAAUC,EAAGC,EAAO,CACpE,OAAO,SAAS,KAAOA,EAAM,GACjC,CAAC,CAEL,CACJ,EClFA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,WAAY,OACZ,SAAU,OACV,UAAW,MACf,CACJ,CAEA,SAAU,CACN,KAAK,QAAQ,iBAAiB,QAASC,GAAK,KAAK,cAAcA,CAAC,CAAC,CACrE,CAEA,MAAM,cAAcA,EAAG,CACnB,MAAM,MACF,kBACA,CACI,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CACjB,WAAY,KAAK,gBACjB,SAAU,KAAK,cACf,UAAW,KAAK,cACpB,CAAC,CACL,CACJ,CACJ,CACJ,EC3BA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,WAAY,gCAAgC,CACxD,CAEA,sCAAsC,CAAE,OAAAC,CAAO,EAAG,CAC9C,IAAMC,EAAW,SAAS,KAAK,eAAe,KAAK,EAC7CC,EAAkBF,EAAO,QAAQA,EAAO,aAAa,EAAE,MAC7D,KAAK,qCAAqC,UAAU,OAChD,SACA,CAACE,IAAqBD,IAAa,KAAOC,IAAoB,QAAUD,IAAa,KAAOC,IAAoB,KACpH,CACJ,CACJ,MCWaC,GCfPC,GCRFC,GA6FSC,GCiDFC,GC4BPC,GAWAC,GAEEC,GCxLKC,GCFEC,GAAY,CAAlB,EACMC,GAAY,CAAA,EACZC,GAAqB,oENOlBC,SAAAA,GAAOC,EAAKC,EAAAA,CAE3B,QAASN,KAAKM,EAAOD,EAAIL,CAAAA,EAAKM,EAAMN,CAAAA,EACpC,OAA6BK,CAC7B,CAQM,SAASE,GAAWC,EAAAA,CAC1B,IAAIC,EAAaD,EAAKC,WAClBA,GAAYA,EAAWC,YAAYF,CAAAA,CACvC,CEXM,SAASG,EAAcC,EAAMN,EAAOO,EAAAA,CAC1C,IACCC,EACAC,EACAf,EAHGgB,EAAkB,CAAA,EAItB,IAAKhB,KAAKM,EACLN,GAAK,MAAOc,EAAMR,EAAMN,CAAAA,EACnBA,GAAK,MAAOe,EAAMT,EAAMN,CAAAA,EAC5BgB,EAAgBhB,CAAAA,EAAKM,EAAMN,CAAAA,EAUjC,GAPIiB,UAAUC,OAAS,IACtBF,EAAgBH,SACfI,UAAUC,OAAS,EAAI1B,GAAM2B,KAAKF,UAAW,CAAA,EAAKJ,GAKjC,OAARD,GAAQ,YAAcA,EAAKQ,cAAgB,KACrD,IAAKpB,KAAKY,EAAKQ,aACVJ,EAAgBhB,CAAAA,IADNoB,SAEbJ,EAAgBhB,CAAAA,EAAKY,EAAKQ,aAAapB,CAAAA,GAK1C,OAAOqB,GAAYT,EAAMI,EAAiBF,EAAKC,EAAK,IAAA,CACpD,CAAA,SAceM,GAAYT,EAAMN,EAAOQ,EAAKC,EAAKO,EAAAA,CAGlD,IAAMC,EAAQ,CACbX,KAAAA,EACAN,MAAAA,EACAQ,IAAAA,EACAC,IAAAA,EACAS,IAAW,KACXC,GAAS,KACTC,IAAQ,EACRC,IAAM,KAKNC,IAAAA,OACAC,IAAY,KACZC,IAAY,KACZC,YAAAA,OACAC,IAAWV,GAAAA,EAAqB5B,EAAU4B,EAM3C,OAFIA,GAAY,MAAQ7B,GAAQ8B,OAAS,MAAM9B,GAAQ8B,MAAMA,CAAAA,EAEtDA,CACP,CAEM,SAASU,IAAAA,CACf,MAAO,CAAEC,QAAS,IAAA,CAClB,CAEM,SAASC,GAAS7B,EAAAA,CACxB,OAAOA,EAAMO,QACb,CC7EM,SAASuB,GAAUC,EAAKC,EAAUC,EAAUC,EAAOC,EAAAA,CACzD,IAAIzC,EAEJ,IAAKA,KAAKuC,EACLvC,IAAM,YAAcA,IAAM,OAAWA,KAAKsC,GAC7CI,GAAYL,EAAKrC,EAAG,KAAMuC,EAASvC,CAAAA,EAAIwC,CAAAA,EAIzC,IAAKxC,KAAKsC,EAENG,GAAiC,OAAfH,EAAStC,CAAAA,GAAM,YACnCA,IAAM,YACNA,IAAM,OACNA,IAAM,SACNA,IAAM,WACNuC,EAASvC,CAAAA,IAAOsC,EAAStC,CAAAA,GAEzB0C,GAAYL,EAAKrC,EAAGsC,EAAStC,CAAAA,EAAIuC,EAASvC,CAAAA,EAAIwC,CAAAA,CAGhD,CAED,SAASG,GAASC,EAAO9B,EAAK+B,EAAAA,CACzB/B,EAAI,CAAA,IAAO,IACd8B,EAAMF,YAAY5B,EAAK+B,GAAgB,EAAKA,EAE5CD,EAAM9B,CAAAA,EADI+B,GAAS,KACN,GACa,OAATA,GAAS,UAAY1C,GAAmB2C,KAAKhC,CAAAA,EACjD+B,EAEAA,EAAQ,IAEtB,CAAA,SAUeH,GAAYL,EAAKU,EAAMF,EAAOG,EAAUR,EAAAA,CAAAA,IACnDS,EAEJC,EAAG,GAAIH,IAAS,QACf,GAAoB,OAATF,GAAS,SACnBR,EAAIO,MAAMO,QAAUN,MACd,CAKN,GAJuB,OAAZG,GAAY,WACtBX,EAAIO,MAAMO,QAAUH,EAAW,IAG5BA,EACH,IAAKD,KAAQC,EACNH,GAASE,KAAQF,GACtBF,GAASN,EAAIO,MAAOG,EAAM,EAAA,EAK7B,GAAIF,EACH,IAAKE,KAAQF,EACPG,GAAYH,EAAME,CAAAA,IAAUC,EAASD,CAAAA,GACzCJ,GAASN,EAAIO,MAAOG,EAAMF,EAAME,CAAAA,CAAAA,CAInC,SAGOA,EAAK,CAAA,IAAO,KAAOA,EAAK,CAAA,IAAO,IACvCE,EAAaF,KAAUA,EAAOA,EAAKK,QAAQ,WAAY,EAAA,GAGxBL,EAA3BA,EAAKM,YAAAA,IAAiBhB,EAAYU,EAAKM,YAAAA,EAAc7D,MAAM,CAAA,EACnDuD,EAAKvD,MAAM,CAAA,EAElB6C,EAALiB,IAAqBjB,EAAGiB,EAAc,CAAA,GACtCjB,EAAAiB,EAAeP,EAAOE,CAAAA,EAAcJ,EAEhCA,EACEG,GAEJX,EAAIkB,iBAAiBR,EADLE,EAAaO,GAAoBC,GACbR,CAAAA,EAIrCZ,EAAIqB,oBAAoBX,EADRE,EAAaO,GAAoBC,GACVR,CAAAA,UAE9BF,IAAS,0BAA2B,CAC9C,GAAIP,EAIHO,EAAOA,EAAKK,QAAQ,cAAe,GAAA,EAAKA,QAAQ,SAAU,GAAA,UAE1DL,IAAS,SACTA,IAAS,UACTA,IAAS,QACTA,IAAS,QACTA,IAAS,QAGTA,IAAS,YACTA,IAAS,YACTA,KAAQV,EAER,GAAA,CACCA,EAAIU,CAAAA,EAAQF,GAAgB,GAE5B,MAAMK,CACK,MAAHS,CAAG,CAUQ,OAAVd,GAAU,aAEVA,GAAS,MAASA,IAAlBA,IAAqCE,EAAKa,QAAQ,GAAA,GAAhCf,GAG5BR,EAAIwB,gBAAgBd,CAAAA,EAFpBV,EAAIyB,aAAaf,EAAMF,CAAAA,EAIxB,CACD,CASD,SAASY,GAAWE,EAAAA,CACnB/D,GAAAA,GACA,GAAA,CACC,OAAOmE,KAAAT,EAAgBK,EAAE/C,KAAAA,EAAO,EAC/BnB,GAAQuE,MAAQvE,GAAQuE,MAAML,CAAAA,EAAKA,CAAAA,CAIpC,QAND,CAKC/D,GAAAA,EACA,CACD,CAED,SAAS4D,GAAkBG,EAAAA,CAC1B/D,GAAAA,GACA,GAAA,CACC,OAAuB+D,KAAAA,EAAAA,EAAE/C,KAAAA,EAAO,EAAMnB,GAAQuE,MAAQvE,GAAQuE,MAAML,CAAAA,EAAKA,CAAAA,CAGzE,QAJD,CAGC/D,GAAAA,EACA,CACD,CC7JeqE,SAAAA,GAAU3D,EAAO4D,EAAAA,CAChCH,KAAKzD,MAAQA,EACbyD,KAAKG,QAAUA,CACf,CA0EM,SAASC,GAAc5C,EAAO6C,EAAAA,CACpC,GAAIA,GAAc,KAEjB,OAAO7C,EAAAE,GACJ0C,GAAc5C,EAAeA,GAAAA,EAAAA,GAAwBqC,IAAAA,QAAQrC,CAAAA,EAAS,CAAA,EACtE,KAIJ,QADI8C,EACGD,EAAa7C,EAAKC,IAAWN,OAAQkD,IAG3C,IAFAC,EAAU9C,EAAKC,IAAW4C,CAAAA,IAEX,MAAQC,EAAO1C,KAAS,KAItC,OAAO0C,EAAP1C,IASF,OAA4B,OAAdJ,EAAMX,MAAQ,WAAauD,GAAc5C,CAAAA,EAAS,IAChE,CAsCD,SAAS+C,GAAwB/C,EAAAA,CAAjC,IAGWvB,EACJuE,EAHN,IAAKhD,EAAQA,EAAAA,KAAkB,MAAQA,EAAKM,KAAe,KAAM,CAEhE,IADAN,EAAAA,IAAaA,EAAAA,IAAiBiD,KAAO,KAC5BxE,EAAI,EAAGA,EAAIuB,EAAAC,IAAgBN,OAAQlB,IAE3C,IADIuE,EAAQhD,EAAAA,IAAgBvB,CAAAA,IACf,MAAQuE,EAAAA,KAAc,KAAM,CACxChD,EAAAA,IAAaA,EAAAM,IAAiB2C,KAAOD,EAAAA,IACrC,KACA,CAGF,OAAOD,GAAwB/C,CAAAA,CAC/B,CACD,CAuBD,SAASkD,GAAMC,EAAAA,CACV9E,GACH+E,WAAWD,CAAAA,EAEX3E,GAAU2E,CAAAA,CAEX,CAMeE,SAAAA,GAAcC,EAAAA,EAAAA,CAE1BA,EAAAA,MACAA,EAACjD,IAAAA,KACF/B,GAAciF,KAAKD,CAAAA,GAAAA,CAClBE,GAAAC,OACFlF,KAAiBL,GAAQwF,sBAEzBnF,GAAeL,GAAQwF,oBACNR,IAAOM,EAAAA,CAEzB,CAGD,SAASA,IAAAA,CAAT,IACKF,EAMEK,EArGkBC,EAMnBC,EACEC,EANH9D,EACH+D,EACAC,EAgGD,IAHA1F,GAAc2F,KAAK,SAACC,EAAGC,EAAAA,CAAJ,OAAUD,EAACzD,IAAAA,IAAiB0D,EAAlB1D,IAAAN,GAAV,CAAA,EAGXmD,EAAIhF,GAAc8F,MAAAA,GACrBd,EAAAA,MACCK,EAAoBrF,GAAcqB,OA/FnCkE,EAAAA,OACEC,EAAAA,OALNC,GADG/D,GADoB4D,EAsGNN,GAAAA,KApGXlD,KACN4D,EAAYJ,EAAHS,OAGLR,EAAc,CAAA,GACZC,EAAWjF,GAAO,CAAA,EAAImB,CAAAA,GAC5BS,IAAqBT,EAAAS,IAAkB,EAEvC6D,GACCN,EACAhE,EACA8D,EACAF,EACAI,IAAAA,EAAUO,kBAAVP,OACAhE,EAAAO,KAAoB,KAAO,CAACwD,CAAAA,EAAU,KACtCF,EACAE,GAAiBnB,GAAc5C,CAAAA,EAC/BA,EATDO,GAAAA,EAWAiE,GAAWX,EAAa7D,CAAAA,EAEpBA,EAAAI,KAAc2D,GACjBhB,GAAwB/C,CAAAA,GA+EpB1B,GAAcqB,OAASgE,GAI1BrF,GAAc2F,KAAK,SAACC,EAAGC,EAAAA,CAAMD,OAAAA,EAAAzD,IAAAN,IAAkBgE,EAA5B1D,IAAAN,GAAA,CAAA,GAItBqD,GAAAA,IAAyB,CACzB,CGjNM,SAASiB,GACfT,EACAU,EACAC,EACAC,EACAC,EACA5D,EACA6D,EACAjB,EACAE,EACAgB,EAAAA,CAVM,IAYFtG,EAAGuG,EAAGlB,EAAUmB,EAAYC,EAAQC,EAAeC,EAInDC,EAAeT,GAAkBA,EAAnB3E,KAAgDtB,GAE9D2G,EAAoBD,EAAY1F,OAGpC,IADAgF,EAAA1E,IAA2B,CAAA,EACtBxB,EAAI,EAAGA,EAAIiG,EAAa/E,OAAQlB,IAgDpC,IA5CCwG,EAAaN,EAAA1E,IAAyBxB,CAAAA,GAHvCwG,EAAaP,EAAajG,CAAAA,IAER,MAA6B,OAAdwG,GAAc,UACH,KAMtB,OAAdA,GAAc,UACA,OAAdA,GAAc,UAEA,OAAdA,GAAc,SAEsBnF,GAC1C,KACAmF,EACA,KACA,KACAA,CAAAA,EAESM,MAAMC,QAAQP,CAAAA,EACmBnF,GAC1Cc,GACA,CAAEtB,SAAU2F,CAAAA,EACZ,KACA,KACA,IAAA,EAESA,EAAA9E,IAAoB,EAKaL,GAC1CmF,EAAW5F,KACX4F,EAAWlG,MACXkG,EAAW1F,IACX0F,EAAWzF,IAAMyF,EAAWzF,IAAM,KAClCyF,EALqDxE,GAAAA,EAQXwE,IAK1B,KAAlB,CAaA,GATAA,EAAA/E,GAAqByE,EACrBM,EAAU9E,IAAUwE,EAAAxE,IAAwB,GAM5C2D,EAAWuB,EAAY5G,CAAAA,KAGT,MACZqF,GACAmB,EAAW1F,KAAOuE,EAASvE,KAC3B0F,EAAW5F,OAASyE,EAASzE,KAE9BgG,EAAY5G,CAAAA,EAAAA,WAIZ,KAAKuG,EAAI,EAAGA,EAAIM,EAAmBN,IAAK,CAIvC,IAHAlB,EAAWuB,EAAYL,CAAAA,IAKtBC,EAAW1F,KAAOuE,EAASvE,KAC3B0F,EAAW5F,OAASyE,EAASzE,KAC5B,CACDgG,EAAYL,CAAAA,EAAAA,OACZ,KACA,CACDlB,EAAW,IACX,CAMFQ,GACCN,EACAiB,EALDnB,EAAWA,GAAYpF,GAOtBmG,EACA5D,EACA6D,EACAjB,EACAE,EACAgB,CAAAA,EAGDG,EAASD,EAAH7E,KAED4E,EAAIC,EAAWzF,MAAQsE,EAAStE,KAAOwF,IACtCI,IAAMA,EAAO,CAAA,GACdtB,EAAStE,KAAK4F,EAAK7B,KAAKO,EAAStE,IAAK,KAAMyF,CAAAA,EAChDG,EAAK7B,KAAKyB,EAAGC,EAAAA,KAAyBC,EAAQD,CAAAA,GAG3CC,GAAU,MACTC,GAAiB,OACpBA,EAAgBD,GAIU,OAAnBD,EAAW5F,MAAQ,YAC1B4F,EAAAhF,MAAyB6D,EAF1B7D,IAICgF,EAAA5E,IAAsB0D,EAAS0B,GAC9BR,EACAlB,EACAC,CAAAA,EAGDD,EAAS2B,GACR1B,EACAiB,EACAnB,EACAuB,EACAH,EACAnB,CAAAA,EAIgC,OAAvBY,EAAetF,MAAQ,aAQjCsF,EAAAtE,IAA0B0D,IAG3BA,GACAD,EAAQ1D,KAAS2D,GACjBA,EAAO7E,YAAc8E,IAIrBD,EAASnB,GAAckB,CAAAA,EAtGvB,CA6GF,IAHAa,EAAAvE,IAAsB+E,EAGjB1G,EAAI6G,EAAmB7G,KACvB4G,EAAY5G,CAAAA,GAAM,OAEU,OAAvBkG,EAAetF,MAAQ,YAC9BgG,EAAY5G,CAAAA,EAAZ2B,KAAuB,MACvBiF,EAAY5G,CAAAA,EAAAA,KAAWkG,EAAvBtE,MAKAsE,EAActE,IAAYsF,GAAWf,CAAAA,EAAgBgB,aAGtDC,GAAQR,EAAY5G,CAAAA,EAAI4G,EAAY5G,CAAAA,CAAAA,GAKtC,GAAI2G,EACH,IAAK3G,EAAI,EAAGA,EAAI2G,EAAKzF,OAAQlB,IAC5BqH,GAASV,EAAK3G,CAAAA,EAAI2G,EAAAA,EAAO3G,CAAAA,EAAI2G,EAAAA,EAAO3G,CAAAA,CAAAA,CAGtC,CAED,SAASgH,GAAgBR,EAAYlB,EAAQC,EAAAA,CAI5C,QACKhE,EAHDsD,EAAI2B,EAAAA,IACJc,EAAM,EACHzC,GAAKyC,EAAMzC,EAAE3D,OAAQoG,KACvB/F,EAAQsD,EAAEyC,CAAAA,KAMb/F,EAAAE,GAAgB+E,EAGflB,EADwB,OAAd/D,EAAMX,MAAQ,WACfoG,GAAgBzF,EAAO+D,EAAQC,CAAAA,EAE/B0B,GAAW1B,EAAWhE,EAAOA,EAAOsD,EAAGtD,EAA7BI,IAAyC2D,CAAAA,GAK/D,OAAOA,CACP,CAAA,SAQeiC,GAAa1G,EAAU2G,EAAAA,CAUtC,OATAA,EAAMA,GAAO,CAAA,EACT3G,GAAY,MAA2B,OAAZA,GAAY,YAChCiG,MAAMC,QAAQlG,CAAAA,EACxBA,EAAS4G,KAAK,SAAAlD,EAAAA,CACbgD,GAAahD,EAAOiD,CAAAA,CACpB,CAAA,EAEDA,EAAI1C,KAAKjE,CAAAA,GAEH2G,CACP,CAED,SAASP,GACR1B,EACAiB,EACAnB,EACAuB,EACAH,EACAnB,EAAAA,CAND,IAQKoC,EAuBGC,EAAiBpB,EAtBxB,GAAIC,EAAA5E,MAAJ,OAIC8F,EAAUlB,EAAV5E,IAMA4E,EAAU5E,IAAAA,eAEVyD,GAAY,MACZoB,GAAUnB,GACVmB,EAAOhG,YAAc,KAErBmH,EAAO,GAAItC,GAAU,MAAQA,EAAO7E,aAAe8E,EAClDA,EAAUsC,YAAYpB,CAAAA,EACtBiB,EAAU,SACJ,CAEN,IACKC,EAASrC,EAAQiB,EAAI,GACxBoB,EAASA,EAAOR,cAAgBZ,EAAIK,EAAY1F,OACjDqF,GAAK,EAEL,GAAIoB,GAAUlB,EACb,MAAMmB,EAGRrC,EAAUuC,aAAarB,EAAQnB,CAAAA,EAC/BoC,EAAUpC,CACV,CAYF,OANIoC,IAMJ,OALUA,EAEAjB,EAAOU,WAIjB,CAKD,SAASD,GAAW3F,EAAAA,CAApB,IAMWvB,EACJuE,EAECwD,EARP,GAAIxG,EAAMX,MAAQ,MAA8B,OAAfW,EAAMX,MAAS,SAC/C,OAAOW,EACPI,IAED,GAAIJ,EAAiBC,KACpB,IAASxB,EAAIuB,EAAKC,IAAWN,OAAS,EAAGlB,GAAK,EAAGA,IAEhD,IADIuE,EAAQhD,EAAKC,IAAWxB,CAAAA,KAEvB+H,EAAUb,GAAW3C,CAAAA,GAExB,OAAOwD,EAMX,OACA,IAAA,CCtUelC,SAAAA,GACfN,EACAyC,EACA3C,EACAe,EACA5D,EACA6D,EACAjB,EACAE,EACAgB,EAAAA,CATeT,IAWXyB,EAoBEzC,EAAGoD,EAAO1F,EAAU2F,EAAUC,EAAUC,EACxC9F,EAKA+F,EACAC,EAmGOtI,EA2BPuI,EACHC,EASSxI,EA6BNiG,EA/LLwC,EAAUT,EAASpH,KAIpB,GAAIoH,EAASjG,cAAb,OAAwC,OAAA,KAGpCsD,EAAAvD,KAAuB,OAC1BwE,EAAcjB,EAAHvD,IACXwD,EAAS0C,EAAArG,IAAgB0D,EAAhB1D,IAETqG,EAAAlG,IAAsB,KACtBuE,EAAoB,CAACf,CAAAA,IAGjBgC,EAAM7H,GAAAA,MAAgB6H,EAAIU,CAAAA,EAE/B,GAAA,CACCJ,EAAO,GAAsB,OAAXa,GAAW,WAAY,CA6DxC,GA3DInG,EAAW0F,EAAS1H,MAKpB+H,GADJf,EAAMmB,EAAQC,cACQtC,EAAckB,EAApCzF,GAAAA,EACIyG,EAAmBhB,EACpBe,EACCA,EAAS/H,MAAMuC,MACfyE,EAHsB7F,GAIvB2E,EAGCf,EAAqBxD,IAExBuG,GADAvD,EAAImD,EAAQnG,IAAcwD,EAA1BxD,KAC4BJ,GAAwBoD,EACpD8D,KAEI,cAAeF,GAAWA,EAAQG,UAAUC,OAE/Cb,EAAQnG,IAAcgD,EAAI,IAAI4D,EAAQnG,EAAUgG,CAAAA,GAGhDN,EAAAnG,IAAsBgD,EAAI,IAAIZ,GAAU3B,EAAUgG,CAAAA,EAClDzD,EAAE9C,YAAc0G,EAChB5D,EAAEgE,OAASC,IAERT,GAAUA,EAASU,IAAIlE,CAAAA,EAE3BA,EAAEvE,MAAQgC,EACLuC,EAAEmE,QAAOnE,EAAEmE,MAAQ,CAAA,GACxBnE,EAAEX,QAAUoE,EACZzD,EAAAA,IAAmBuB,EACnB6B,EAAQpD,EAAAjD,IAAAA,GACRiD,EAAC/C,IAAoB,CAAA,EACrB+C,EAAAoE,IAAoB,CAAA,GAIjBpE,EAAAqE,KAAgB,OACnBrE,EAAAqE,IAAerE,EAAEmE,OAGdP,EAAQU,0BAA4B,OACnCtE,EAACqE,KAAerE,EAAEmE,QACrBnE,EAACqE,IAAc9I,GAAO,CAAA,EAAIyE,EAC1BqE,GAAAA,GAED9I,GACCyE,EACA4D,IAAAA,EAAQU,yBAAyB7G,EAAUuC,EAFtCqE,GAAAA,CAAAA,GAMP3G,EAAWsC,EAAEvE,MACb4H,EAAWrD,EAAEmE,MACbnE,EAAA7C,IAAWgG,EAGPC,EAEFQ,EAAQU,0BAA4B,MACpCtE,EAAEuE,oBAAsB,MAExBvE,EAAEuE,mBAAAA,EAGCvE,EAAEwE,mBAAqB,MAC1BxE,EAAA/C,IAAmBgD,KAAKD,EAAEwE,iBAAAA,MAErB,CASN,GAPCZ,EAAQU,0BAA4B,MACpC7G,IAAaC,GACbsC,EAAEyE,2BAA6B,MAE/BzE,EAAEyE,0BAA0BhH,EAAUgG,CAAAA,EAAAA,CAIpCzD,EACDA,KAAAA,EAAE0E,uBAAyB,MAC3B1E,EAAE0E,sBACDjH,EACAuC,EACAyD,IAAAA,CAAAA,IAJCiB,IAMHvB,EAAAA,MAAuB3C,EARxBrD,IASE,CAiBD,IAfIgG,EAAQhG,MAAeqD,EAA3BrD,MAKC6C,EAAEvE,MAAQgC,EACVuC,EAAEmE,MAAQnE,EACVA,IAAAA,EAAAjD,IAAAA,IAEDoG,EAAArG,IAAgB0D,EAAhB1D,IACAqG,EAAQxG,IAAa6D,EACrB2C,IAAAA,EAAAxG,IAAmBgI,QAAQ,SAAAjI,EAAAA,CACtBA,IAAOA,EAAAE,GAAgBuG,EAC3B,CAAA,EAEQhI,EAAI,EAAGA,EAAI6E,EAAAoE,IAAkB/H,OAAQlB,IAC7C6E,EAAC/C,IAAkBgD,KAAKD,EAAAoE,IAAkBjJ,CAAAA,CAAAA,EAE3C6E,EAACoE,IAAmB,CAAA,EAEhBpE,EAAA/C,IAAmBZ,QACtBkE,EAAYN,KAAKD,CAAAA,EAGlB,MAAM+C,CACN,CAEG/C,EAAE4E,qBAAuB,MAC5B5E,EAAE4E,oBAAoBnH,EAAUuC,EAAcyD,IAAAA,CAAAA,EAG3CzD,EAAE6E,oBAAsB,MAC3B7E,EAAC/C,IAAkBgD,KAAK,UAAA,CACvBD,EAAE6E,mBAAmBnH,EAAU2F,EAAUC,CAAAA,CACzC,CAAA,CAEF,CAQD,GANAtD,EAAEX,QAAUoE,EACZzD,EAAEvE,MAAQgC,EACVuC,EAACe,IAAcL,EAEXgD,EAAa9I,GAAjBuF,IACCwD,EAAQ,EACL,cAAeC,GAAWA,EAAQG,UAAUC,OAAQ,CAQvD,IAPAhE,EAAEmE,MAAQnE,EACVA,IAAAA,EAAAjD,IAAAA,GAEI2G,GAAYA,EAAWP,CAAAA,EAE3BV,EAAMzC,EAAEgE,OAAOhE,EAAEvE,MAAOuE,EAAEmE,MAAOnE,EAAEX,OAAAA,EAE1BlE,EAAI,EAAGA,EAAI6E,EAACoE,IAAiB/H,OAAQlB,IAC7C6E,EAAC/C,IAAkBgD,KAAKD,EAAAoE,IAAkBjJ,CAAAA,CAAAA,EAE3C6E,EAACoE,IAAmB,CAAA,CACpB,KACA,IACCpE,EAAAjD,IAAAA,GACI2G,GAAYA,EAAWP,CAAAA,EAE3BV,EAAMzC,EAAEgE,OAAOhE,EAAEvE,MAAOuE,EAAEmE,MAAOnE,EAAEX,OAAAA,EAGnCW,EAAEmE,MAAQnE,EACVqE,UAAQrE,EAAAjD,KAAAA,EAAc4G,EAAQ,IAIhC3D,EAAEmE,MAAQnE,EAAVqE,IAEIrE,EAAE8E,iBAAmB,OACxBvD,EAAgBhG,GAAOA,GAAO,CAAA,EAAIgG,CAAAA,EAAgBvB,EAAE8E,gBAAAA,CAAAA,GAGhD1B,GAASpD,EAAE+E,yBAA2B,OAC1CzB,EAAWtD,EAAE+E,wBAAwBrH,EAAU2F,CAAAA,GAK5CjC,EADHqB,GAAO,MAAQA,EAAI1G,OAASuB,IAAYmF,EAAIxG,KAAO,KACZwG,EAAIhH,MAAMO,SAAWyG,EAE7DtB,GACCT,EACAuB,MAAMC,QAAQd,CAAAA,EAAgBA,EAAe,CAACA,CAAAA,EAC9C+B,EACA3C,EACAe,EACA5D,EACA6D,EACAjB,EACAE,EACAgB,CAAAA,EAGDzB,EAAEL,KAAOwD,EAGTA,IAAAA,EAAAlG,IAAsB,KAElB+C,EAAA/C,IAAmBZ,QACtBkE,EAAYN,KAAKD,CAAAA,EAGduD,IACHvD,EAAC8D,IAAiB9D,EAAApD,GAAyB,MAG5CoD,EAAClD,IAAAA,EACD,MACA0E,GAAqB,MACrB2B,EAAAhG,MAAuBqD,EAAvBrD,KAEAgG,EAAAxG,IAAqB6D,EAArB7D,IACAwG,EAAQrG,IAAQ0D,EAChB1D,KACAqG,EAAQrG,IAAQkI,GACfxE,EACA2C,IAAAA,EACA3C,EACAe,EACA5D,EACA6D,EACAjB,EACAkB,CAAAA,GAIGgB,EAAM7H,GAAQqK,SAASxC,EAAIU,CAAAA,CAYhC,OAXQrE,EAAAA,CACRqE,EAAAhG,IAAqB,MAEjBsE,GAAeD,GAAqB,QACvC2B,EAAArG,IAAgB2D,EAChB0C,EAAQlG,IAAAA,CAAAA,CAAgBwE,EACxBD,EAAkBA,EAAkBzC,QAAQ0B,CAAAA,CAAAA,EAAW,MAIxD7F,GAAAkC,IAAoBgC,EAAGqE,EAAU3C,CAAAA,CACjC,CACD,CAOeU,SAAAA,GAAWX,EAAa2E,EAAAA,CACnCtK,GAAJoC,KAAqBpC,GAAOoC,IAASkI,EAAM3E,CAAAA,EAE3CA,EAAYqC,KAAK,SAAA5C,EAAAA,CAChB,GAAA,CAECO,EAAcP,EAAH/C,IACX+C,EAAA/C,IAAqB,CAAA,EACrBsD,EAAYqC,KAAK,SAAA/C,EAAAA,CAEhBA,EAAGvD,KAAK0D,CAAAA,CACR,CAAA,CAGD,OAFQlB,EAAAA,CACRlE,GAAOkC,IAAagC,EAAGkB,EACvB7C,GAAAA,CAAA,CACD,CAAA,CACD,CAgBD,SAAS6H,GACRxH,EACA2F,EACA3C,EACAe,EACA5D,EACA6D,EACAjB,EACAkB,EAAAA,CARD,IAoBS/B,EAsDHyF,EACAC,EAjED1H,EAAW8C,EAAS/E,MACpBgC,EAAW0F,EAAS1H,MACpB4J,EAAWlC,EAASpH,KACpBZ,EAAI,EAKR,GAFIkK,IAAa,QAAO1H,EAAAA,IAEpB6D,GAAqB,MACxB,KAAOrG,EAAIqG,EAAkBnF,OAAQlB,IAMpC,IALMuE,EAAQ8B,EAAkBrG,CAAAA,IAO/B,iBAAkBuE,GAAAA,CAAAA,CAAY2F,IAC7BA,EAAW3F,EAAM4F,YAAcD,EAAW3F,EAAM2F,WAAa,GAC7D,CACD7H,EAAMkC,EACN8B,EAAkBrG,CAAAA,EAAK,KACvB,KACA,EAIH,GAAIqC,GAAO,KAAM,CAChB,GAAI6H,IAAa,KAEhB,OAAOE,SAASC,eAAe/H,CAAAA,EAI/BD,EADGG,EACG4H,SAASE,gBACd,6BAEAJ,CAAAA,EAGKE,SAASzJ,cAEduJ,EACA5H,EAASiI,IAAMjI,CAAAA,EAKjB+D,EAAoB,KAEpBC,EAAAA,EACA,CAED,GAAI4D,IAAa,KAEZ3H,IAAaD,GAAcgE,GAAejE,EAAImI,OAASlI,IAC1DD,EAAImI,KAAOlI,OAEN,CAWN,GATA+D,EAAoBA,GAAqB7G,GAAM2B,KAAKkB,EAAIoI,UAAAA,EAIpDT,GAFJzH,EAAW8C,EAAS/E,OAASL,IAENyK,wBACnBT,EAAU3H,EAASoI,wBAAAA,CAIlBpE,EAAa,CAGjB,GAAID,GAAqB,KAExB,IADA9D,EAAW,CAAX,EACKvC,EAAI,EAAGA,EAAIqC,EAAIsI,WAAWzJ,OAAQlB,IACtCuC,EAASF,EAAIsI,WAAW3K,CAAAA,EAAG+C,IAAAA,EAAQV,EAAIsI,WAAW3K,CAAAA,EAAG6C,OAInDoH,GAAWD,KAGZC,IACED,GAAWC,EAAAW,QAAkBZ,EAA/BY,QACAX,EAAOW,SAAYvI,EAAIwI,aAExBxI,EAAIwI,UAAaZ,GAAWA,EAAJW,QAAuB,IAGjD,CAKD,GAHAxI,GAAUC,EAAKC,EAAUC,EAAUC,EAAO8D,CAAAA,EAGtC2D,EACHjC,EAAAxG,IAAqB,CAAA,UAErBxB,EAAIgI,EAAS1H,MAAMO,SACnBmF,GACC3D,EACAyE,MAAMC,QAAQ/G,CAAAA,EAAKA,EAAI,CAACA,CAAAA,EACxBgI,EACA3C,EACAe,EACA5D,GAAS0H,IAAa,gBACtB7D,EACAjB,EACAiB,EACGA,EAAkB,CAAA,EAClBhB,EAAA7D,KAAsB2C,GAAckB,EAAU,CAAA,EACjDiB,CAAAA,EAIGD,GAAqB,KACxB,IAAKrG,EAAIqG,EAAkBnF,OAAQlB,KAC9BqG,EAAkBrG,CAAAA,GAAM,MAAMO,GAAW8F,EAAkBrG,CAAAA,CAAAA,EAM7DsG,IAEH,UAAWhE,IACVtC,EAAIsC,EAASO,SADHP,SAMVtC,IAAMqC,EAAIQ,OACTqH,IAAa,YAAbA,CAA4BlK,GAI5BkK,IAAa,UAAYlK,IAAMuC,EAASM,QAE1CH,GAAYL,EAAK,QAASrC,EAAGuC,EAASM,MAAAA,EAAO,EAG7C,YAAaP,IACZtC,EAAIsC,EAASwI,WADDxI,QAEbtC,IAAMqC,EAAIyI,SAEVpI,GAAYL,EAAK,UAAWrC,EAAGuC,EAASuI,QAAAA,EAAS,EAGnD,CAED,OAAOzI,CACP,CAQegF,SAAAA,GAAStG,EAAK8B,EAAOtB,EAAAA,CACpC,GAAA,CACmB,OAAPR,GAAO,WAAYA,EAAI8B,CAAAA,EAC7B9B,EAAImB,QAAUW,CAGnB,OAFQc,EAAAA,CACRlE,GAAAkC,IAAoBgC,EAAGpC,CAAAA,CACvB,CACD,CAUM,SAAS6F,GAAQ7F,EAAOwJ,EAAaC,EAAAA,CAArC,IACFC,EAuBMjL,EAdV,GARIP,GAAQ2H,SAAS3H,GAAQ2H,QAAQ7F,CAAAA,GAEhC0J,EAAI1J,EAAMR,OACTkK,EAAE/I,SAAW+I,EAAE/I,UAAYX,EAAdI,KACjB0F,GAAS4D,EAAG,KAAMF,CAAAA,IAIfE,EAAI1J,EAAHM,MAAwB,KAAM,CACnC,GAAIoJ,EAAEC,qBACL,GAAA,CACCD,EAAEC,qBAAAA,CAGF,OAFQvH,EAAAA,CACRlE,GAAOkC,IAAagC,EAAGoH,CAAAA,CACvB,CAGFE,EAAEzG,KAAOyG,EAAArF,IAAe,KACxBrE,EAAKM,IAAAA,MACL,CAED,GAAKoJ,EAAI1J,EAAHC,IACL,IAASxB,EAAI,EAAGA,EAAIiL,EAAE/J,OAAQlB,IACzBiL,EAAEjL,CAAAA,GACLoH,GACC6D,EAAEjL,CAAAA,EACF+K,EACAC,GAAoC,OAAfzJ,EAAMX,MAAS,UAATA,EAM1BoK,GAAczJ,EAAKI,KAAS,MAChCpB,GAAWgB,EAADI,GAAAA,EAKXJ,EAAAE,GAAgBF,EAAKI,IAAQJ,EAAAK,IAAAA,MAC7B,CAGD,SAASkH,GAASxI,EAAO0I,EAAO9E,EAAAA,CAC/B,OAAYnC,KAAAA,YAAYzB,EAAO4D,CAAAA,CAC/B,CCjiBM,SAAS2E,GAAOtH,EAAOgE,EAAW4F,EAAAA,CAAlC,IAMF7E,EAOAjB,EAUAD,EAtBA3F,GAAeA,IAAAA,GAAAgC,GAAcF,EAAOgE,CAAAA,EAYpCF,GAPAiB,EAAqC,OAAhB6E,GAAgB,YAQtC,KACCA,GAAeA,EAAAA,KAA0B5F,EAAAA,IAQzCH,EAAc,CAAA,EAClBS,GACCN,EARDhE,GAAAA,CACG+E,GAAe6E,GACjB5F,GAFO/D,IAGMb,EAAcwB,GAAU,KAAM,CAACZ,CAAAA,CAAAA,EAS5C8D,GAAYpF,GACZA,GACAsF,EAAUO,kBADV7F,OACU6F,CACTQ,GAAe6E,EACb,CAACA,CAAAA,EACD9F,EACA,KACAE,EAAU6F,WACV5L,GAAM2B,KAAKoE,EAAUkF,UAAAA,EACrB,KACHrF,EAAAA,CACCkB,GAAe6E,EACbA,EACA9F,EACAA,EACAE,IAAAA,EAAU6F,WACb9E,CAAAA,EAIDP,GAAWX,EAAa7D,CAAAA,CACxB,CJ5De8J,SAAAA,GAAcC,EAAcC,EAAAA,CAG3C,IAAMC,EAAU,CACfC,IAHDF,EAAY,OAASG,KAIpBC,GAAeL,EAEfM,SAJe,SAINC,EAAOC,EAAAA,CAIf,OAAOD,EAAME,SAASD,CAAAA,CACtB,EAEDE,SAAAA,SAASH,EAAAA,CAAAA,IAGHI,EACAC,EAsCL,OAzCKC,KAAKC,kBAELH,EAAO,CAAA,GACPC,EAAM,CAAV,GACIX,CAAAA,EAAaY,KAEjBA,KAAKC,gBAAkB,UAAA,CAAA,OAAMF,CAAN,EAEvBC,KAAKE,sBAAwB,SAASC,EAAAA,CACjCH,KAAKN,MAAMU,QAAUD,EAAOC,OAe/BN,EAAKO,KAAK,SAAAC,EAAAA,CACTA,EAACC,IAAAA,GACDC,GAAcF,CAAAA,CACd,CAAA,CAEF,EAEDN,KAAKS,IAAM,SAAAH,EAAAA,CACVR,EAAKY,KAAKJ,CAAAA,EACV,IAAIK,EAAML,EAAEM,qBACZN,EAAEM,qBAAuB,UAAA,CACxBd,EAAKe,OAAOf,EAAKgB,QAAQR,CAAAA,EAAI,CAAA,EACzBK,GAAKA,EAAII,KAAKT,CAAAA,CAClB,CACD,GAGKZ,EAAME,QACb,CAAA,EASF,OAAQP,EAAQQ,SAAuBR,GAAAA,EAAQI,SAASuB,YAAc3B,CACtE,CL7CY4B,GAAQC,GAAUD,MCfzBE,GAAU,CACfZ,IUHM,SAAqBa,EAAOC,EAAOC,EAAUC,EAAAA,CAInD,QAFIC,EAAWC,EAAMC,EAEbL,EAAQA,EAAhB7B,IACC,IAAKgC,EAAYH,EAAH/B,MAAAA,CAAyBkC,EAADhC,GACrC,GAAA,CAcC,IAbAiC,EAAOD,EAAUG,cAELF,EAAKG,0BAA4B,OAC5CJ,EAAUK,SAASJ,EAAKG,yBAAyBR,CAAAA,CAAAA,EACjDM,EAAUF,EAAHM,KAGJN,EAAUO,mBAAqB,OAClCP,EAAUO,kBAAkBX,EAAOG,GAAa,CAAhD,CAAA,EACAG,EAAUF,EACVM,KAGGJ,EACH,OAAQF,EAASQ,IAAiBR,CAInC,OAFQS,EAAAA,CACRb,EAAQa,CACR,CAIH,MAAMb,CACN,CAAA,ETpCGc,GAAU,EA6FDC,GAAiB,SAAAd,EAAAA,CAAAA,OAC7BA,GAAS,MAAQA,EAAMM,cAAvBN,MADkC,ECiDxBe,GAAAA,GCtHXC,GAAUC,UAAUT,SAAW,SAASU,EAAQC,EAAAA,CAE/C,IAAIC,EAEHA,EADGzC,KAAA0C,KAAmB,MAAQ1C,KAAA0C,MAAoB1C,KAAK2C,MACnD3C,KAAH0C,IAEG1C,KAAA0C,IAAkBE,GAAO,CAAA,EAAI5C,KAAK2C,KAAAA,EAGlB,OAAVJ,GAAU,aAGpBA,EAASA,EAAOK,GAAO,CAAD,EAAKH,CAAAA,EAAIzC,KAAKN,KAAAA,GAGjC6C,GACHK,GAAOH,EAAGF,CAAAA,EAIPA,GAAU,MAEVvC,KAAJ6C,MACKL,GACHxC,KAAA8C,IAAqBpC,KAAK8B,CAAAA,EAE3BhC,GAAcR,IAAAA,EAEf,EAQDqC,GAAUC,UAAUS,YAAc,SAASP,EAAAA,CACtCxC,KAAAA,MAIHA,KAAAO,IAAAA,GACIiC,GAAUxC,KAAAgD,IAAsBtC,KAAK8B,CAAAA,EACzChC,GAAcR,IAAAA,EAEf,EAYDqC,GAAUC,UAAUW,OAASC,GAyFzBC,GAAgB,CAAA,EAadC,GACa,OAAXC,SAAW,WACfA,QAAQf,UAAUgB,KAAKC,KAAKF,QAAQG,QAAAA,CAAAA,EACpCC,WA+CJC,GAAOC,IAAkB,EC1OdpE,GAAI,EOCf,IAAIqE,GAGAC,GAGAC,GAiBAC,GAvBJ,IAYIC,GAAoB,CAAA,EAEpBC,GAAQ,CAAA,EAERC,GAAgBC,GAAAA,IAChBC,GAAkBD,GAAAA,IAClBE,GAAeF,GAAQG,OACvBC,GAAYJ,GAAhBK,IACIC,GAAmBN,GAAQO,QA6W/B,SAASC,IAAAA,CAER,QADIC,EACIA,EAAYC,GAAkBC,MAAAA,GACrC,GAAKF,EAAAA,KAAyBA,EAA9BG,IACA,GAAA,CACCH,EAASG,IAAyBC,IAAAA,QAAQC,EAAAA,EAC1CL,EAASG,IAAyBC,IAAAA,QAAQE,EAAAA,EAC1CN,EAASG,IAA2BI,IAAA,CAAA,CAIpC,OAHQC,EAAAA,CACRR,EAASG,IAA2BI,IAAA,CAAA,EACpCE,GAAOC,IAAaF,EAAGR,EAAAA,GAAAA,CACvB,CAEF,CArXDS,GAAAE,IAAgB,SAAAC,EAAAA,CACfC,GAAmB,KACfC,IAAeA,GAAcF,CAAAA,CACjC,EAEDH,GAAAA,IAAkB,SAAAG,EAAAA,CACbG,IAAiBA,GAAgBH,CAAAA,EAGrCI,GAAe,EAEf,IAAMC,GAHNJ,GAAmBD,EAAnBM,KAAAA,IAIID,IACCE,KAAsBN,IACzBI,EAAKV,IAAmB,CAAA,EACxBM,GAAgBN,IAAoB,CAAA,EACpCU,EAAKG,GAAOhB,QAAQ,SAAAiB,EAAAA,CACfA,EAAqBC,MACxBD,EAAAD,GAAkBC,EAAlBC,KAEDD,EAAAA,IAAyBE,GACzBF,EAAAC,IAAsBD,EAASG,EAAAA,MAC/B,CAAA,IAEDP,EAAKV,IAAiBH,QAAQC,EAAAA,EAC9BY,EAAKV,IAAiBH,QAAQE,EAAAA,EAC9BW,EAAKV,IAAmB,CAAA,IAG1BY,GAAoBN,EACpB,EAEDJ,GAAQgB,OAAS,SAAAb,EAAAA,CACZc,IAAcA,GAAad,CAAAA,EAE/B,IAAMe,EAAIf,EAAVM,IACIS,GAAKA,EAAAA,MACJA,EAAAxB,IAAAI,IAA0BqB,SAAmB3B,GAAkB4B,KAAKF,CAAAA,IAoXlD,GAAKG,KAAYrB,GAAQsB,yBAC/CD,GAAUrB,GAAQsB,wBACNC,IAAgBjC,EAAAA,GArX5B4B,EAACxB,IAAAA,GAAeC,QAAQ,SAAAiB,EAAAA,CACnBA,EAASG,IACZH,EAAAA,IAAiBA,EAASG,GAEvBH,EAAAY,MAA2BV,KAC9BF,EAAAA,GAAkBA,EAClBY,KACDZ,EAASG,EAAAA,OACTH,EAAAY,IAAyBV,EACzB,CAAA,GAEFJ,GAAoBN,GAAmB,IACvC,EAEDJ,GAAAS,IAAkB,SAACN,EAAOsB,EAAAA,CACzBA,EAAYC,KAAK,SAAAnC,EAAAA,CAChB,GAAA,CACCA,EAAAO,IAA2BH,QAAQC,EAAAA,EACnCL,EAAAO,IAA6BP,EAASO,IAAkB6B,OAAO,SAAAC,EAAAA,CAC9DA,MAAAA,CAAAA,EAAAjB,IAAYd,GAAa+B,CAAAA,CADuC,CAAA,CASjE,OANQ7B,EAAAA,CACR0B,EAAYC,KAAK,SAAAR,EAAAA,CACZA,EAAoBA,MAAAA,EAAAA,IAAqB,CAAA,EAC7C,CAAA,EACDO,EAAc,CAAA,EACdzB,GAAAC,IAAoBF,EAAGR,EACvBsC,GAAAA,CAAA,CACD,CAAA,EAEGC,IAAWA,GAAU3B,EAAOsB,CAAAA,CAChC,EAEDzB,GAAQ+B,QAAU,SAAA5B,EAAAA,CACb6B,IAAkBA,GAAiB7B,CAAAA,EAEvC,IAEK8B,EAFCf,EAAIf,EAAHM,IACHS,GAAKA,EAATxB,MAECwB,EAACxB,IAAAA,GAAeC,QAAQ,SAAAuC,EAAAA,CACvB,GAAA,CACCtC,GAAcsC,CAAAA,CAGd,OAFQnC,EAAAA,CACRkC,EAAalC,CACb,CACD,CAAA,EACDmB,EAAAxB,IAAAA,OACIuC,GAAYjC,GAAOC,IAAagC,EAAYf,EAAAA,GAAAA,EAEjD,EAgSD,IAAIiB,GAA0C,OAAzBb,uBAAyB,WAY9C,SAASC,GAAea,EAAAA,CACvB,IAOIC,EAPEC,EAAO,UAAA,CACZC,aAAaC,CAAAA,EACTL,IAASM,qBAAqBJ,CAAAA,EAClCK,WAAWN,CAAAA,CACX,EACKI,EAAUE,WAAWJ,EA5YR,GAAA,EA+YfH,KACHE,EAAMf,sBAAsBgB,CAAAA,EAE7B,CAmBD,SAAS1C,GAAc+C,EAAAA,CAGtB,IAAMC,EAAOxC,GACTyC,EAAUF,EAAdlC,IACsB,OAAXoC,GAAW,aACrBF,EAAAA,IAAAA,OACAE,EAAAA,GAGDzC,GAAmBwC,CACnB,CAMD,SAAS/C,GAAa8C,EAAAA,CAGrB,IAAMC,EAAOxC,GACbuC,EAAIlC,IAAYkC,EAAAA,GAAAA,EAChBvC,GAAmBwC,CACnB,CC9ceE,SAAAA,GAAOC,EAAKC,EAAAA,CAC3B,QAASC,KAAKD,EAAOD,EAAIE,CAAAA,EAAKD,EAAMC,CAAAA,EACpC,OAA6BF,CAC7B,CAQeG,SAAAA,GAAeC,EAAGC,EAAAA,CACjC,QAASH,KAAKE,EAAG,GAAIF,IAAM,YAANA,EAAsBA,KAAKG,GAAI,MAAA,GACpD,QAASH,KAAKG,EAAG,GAAIH,IAAM,YAAcE,EAAEF,CAAAA,IAAOG,EAAEH,CAAAA,EAAI,MAAA,GACxD,MAAA,EACA,CChBeI,SAAAA,GAAcC,EAAAA,CAC7BC,KAAKC,MAAQF,CACb,EACDG,GAAcC,UAAY,IAAIC,IAENC,qBAAAA,GACxBH,GAAcC,UAAUG,sBAAwB,SAASC,EAAOC,EAAAA,CAC/D,OAAOC,GAAeC,KAAKH,MAAOA,CAAAA,GAAUE,GAAeC,KAAKF,MAAOA,CAAAA,CACvE,EEXD,IAAIG,GAAcC,GAAlBC,IACAD,GAAAC,IAAgB,SAAAC,EAAAA,CACXA,EAAMC,MAAQD,EAAMC,KAApBC,KAAuCF,EAAMG,MAChDH,EAAMP,MAAMU,IAAMH,EAAMG,IACxBH,EAAMG,IAAM,MAETN,IAAaA,GAAYG,CAAAA,CAC7B,EAEYI,IAAAA,GACM,OAAVC,OAAU,KACjBA,OAAOC,KACPD,OAAOC,IAAI,mBAAA,GACZ,KCdD,ICCMC,GAAgBC,GAAHC,IACnBD,GAAAC,IAAsB,SAASC,EAAOC,EAAUC,EAAUC,EAAAA,CACzD,GAAIH,EAAMI,MAKT,QAHIC,EACAC,EAAQL,EAEJK,EAAQA,EAAAA,IACf,IAAKD,EAAYC,EAAbC,MAAkCF,EAAtCE,IAMC,OALIN,EAAQF,KAAS,OACpBE,EAAAF,IAAgBG,EAChBD,IAAAA,EAAAO,IAAqBN,EAArBM,KAGMH,EAASE,IAAkBP,EAAOC,CAAAA,EAI5CJ,GAAcG,EAAOC,EAAUC,EAAUC,CAAAA,CACzC,EAED,IAAMM,GAAaX,GAAQY,QAmB3B,SAASC,GAAcL,EAAOM,EAAgBC,EAAAA,CAyB7C,OAxBIP,IACCA,EAAKC,KAAeD,EAAAA,IAAAA,MACvBA,EAAKC,IAA0BO,IAAAA,GAAAA,QAAQ,SAAAC,EAAAA,CACR,OAAnBA,EAAPR,KAA0B,YAAYQ,EAAMR,IAAAA,CAChD,CAAA,EAEDD,EAAKC,IAAsBS,IAAA,OAG5BV,EAAQW,GAAO,CAAD,EAAKX,CAAAA,GACVC,KAAe,OACnBD,EAAKC,IAAAA,MAA2BM,IACnCP,EAAAC,IAAAW,IAA8BN,GAE/BN,EAAAA,IAAmB,MAGpBA,EAAKE,IACJF,EAAAE,KACAF,EAAAE,IAAgBW,IAAI,SAAAC,EAAAA,CAAAA,OACnBT,GAAcS,EAAOR,EAAgBC,CAAAA,CADb,CAAA,GAKpBP,CACP,CAED,SAASe,GAAef,EAAOM,EAAgBU,EAAAA,CAoB9C,OAnBIhB,IACHA,EAAKiB,IAAa,KAClBjB,EAAKE,IACJF,EAAAA,KACAA,EAAAE,IAAgBW,IAAI,SAAAC,EAAAA,CAAK,OACxBC,GAAeD,EAAOR,EAAgBU,CAAAA,CADd,CAAA,EAItBhB,EAAAA,KACCA,EAAAC,IAAAW,MAAgCN,IAC/BN,EAAYP,KACfuB,EAAeE,aAAalB,EAAYA,IAAAA,EACxCmB,GAAAA,EACDnB,EAAKC,IAAAA,IAAAA,GACLD,EAAKC,IAAyBe,IAAAA,IAK1BhB,CACP,CAGeoB,SAAAA,IAAAA,CAEfC,KAAAC,IAA+B,EAC/BD,KAAKE,EAAc,KACnBF,KAAAA,IAA2B,IAC3B,CAmIM,SAASG,GAAUxB,EAAAA,CAEzB,IAAID,EAAYC,EAAHyB,GAAAxB,IACb,OAAOF,GAAaA,EAAJ2B,KAA4B3B,EAAAA,IAAqBC,CAAAA,CACjE,CClOe2B,SAAAA,IAAAA,CACfC,KAAKC,EAAQ,KACbD,KAAKE,EAAO,IACZ,CDaDC,GAAQC,QAAU,SAASC,EAAAA,CAE1B,IAAMC,EAAYD,EAAlBE,IACID,GAAaA,EAAJE,KACZF,EAAAE,IAAAA,EAOGF,GAAaD,EAAAI,MAAbH,KACHD,EAAMK,KAAO,MAGVC,IAAYA,GAAWN,CAAAA,CAC3B,GAgEDO,GAASC,UAAY,IAAIC,IAOaP,IAAA,SAASQ,EAASC,EAAAA,CACvD,IAAMC,EAAsBD,EAAHT,IAGnBW,EAAIlB,KAENkB,EAAEC,GAAe,OACpBD,EAAEC,EAAc,CAAA,GAEjBD,EAAEC,EAAYC,KAAKH,CAAAA,EAEnB,IAAMI,EAAUC,GAAUJ,EAADK,GAAAA,EAErBC,EAAAA,GACEC,EAAa,UAAA,CACdD,IAEJA,EAAAA,GACAP,EAAAT,IAAiC,KAE7Ba,EACHA,EAAQK,CAAAA,EAERA,EAAAA,EAED,EAEDT,EAAAT,IAAiCiB,EAEjC,IAAMC,EAAuB,UAAA,CAC5B,GAAA,CAAA,EAAOR,EAAPS,IAAkC,CAGjC,GAAIT,EAAEU,MAAkBC,IAAA,CACvB,IAAMC,EAAiBZ,EAAEU,MAAAA,IACzBV,EAAAK,IAAAQ,IAAmB,CAAA,EAAKC,GACvBF,EACAA,EACAA,IAAAA,IAAAA,EAAAA,IAAAA,GAAAA,CAED,CAID,IAAIR,EACJ,IAHAJ,EAAEe,SAAS,CAAEJ,IAAaX,EAACgB,IAAuB,IAAA,CAAA,EAG1CZ,EAAYJ,EAAEC,EAAYgB,IAAAA,GACjCb,EAAUc,YAAAA,CAEX,CACD,EAOKC,EAAerB,EAAAP,MAAf4B,GACDnB,EAAAS,OAAgCU,GACpCnB,EAAEe,SAAS,CAAEJ,IAAaX,EAAAgB,IAAwBhB,EAAAK,IAAAQ,IAAmB,CAAA,CAAA,CAAA,EAEtEhB,EAAQuB,KAAKb,EAAYA,CAAAA,CACzB,EAEDb,GAASC,UAAU0B,qBAAuB,UAAA,CACzCvC,KAAKmB,EAAc,CAAA,CACnB,EAODP,GAASC,UAAU2B,OAAS,SAASC,EAAOb,EAAAA,CAC3C,GAAI5B,KAA0BkC,IAAA,CAI7B,GAAIlC,KAAuBuB,IAAAQ,IAAA,CAC1B,IAAMW,EAAiBC,SAASC,cAAc,KAAA,EACxCC,EAAoB7C,KAAAuB,IAAAQ,IAAsB,CAAA,EAAhDxB,IACAP,KAAAA,IAAAA,IAAsB,CAAA,EAAK8C,GAC1B9C,KADuCkC,IAEvCQ,EACCG,EAAAE,IAAuCF,EAAvCG,GAAAA,CAEF,CAEDhD,KAAAkC,IAA2B,IAC3B,CAID,IAAMe,EACLrB,EAAAC,KAAoBe,EAAcM,GAAU,KAAMT,EAAMQ,QAAAA,EAGzD,OAFIA,IAAUA,EAAAA,IAAsB,MAE7B,CACNL,EAAcM,GAAU,KAAMtB,EAAKC,IAAc,KAAOY,EAAMU,QAAAA,EAC9DF,CAAAA,CAED,EClMD,IAAM5B,GAAU,SAAC+B,EAAMC,EAAOC,EAAAA,CAc7B,GAAA,EAbMA,EAdgB,CAAA,IAcSA,EAfR,CAAA,GAqBtBF,EAAKlD,EAAKqD,OAAOF,CAAAA,EAQhBD,EAAKX,MAAMe,cACXJ,EAAKX,MAAMe,YAAY,CAAA,IAAO,KAAP,CAAcJ,EAAKlD,EAAKuD,MASjD,IADAH,EAAOF,EAAKnD,EACLqD,GAAM,CACZ,KAAOA,EAAKI,OAAS,GACpBJ,EAAKnB,IAAAA,EAALmB,EAED,GAAIA,EA1CiB,CAAA,EA0CMA,EA3CL,CAAA,EA4CrB,MAEDF,EAAKnD,EAAQqD,EAAOA,EA5CJ,CAAA,CA6ChB,CACD,EC/CD,SAASK,GAAgBlB,EAAAA,CAExB,OADAzC,KAAK4D,gBAAkB,UAAA,CAAA,OAAMnB,EAAMoB,OAAZ,EAChBpB,EAAMU,QACb,CASD,SAASW,GAAOrB,EAAAA,CACf,IAAMsB,EAAQ/D,KACVgE,EAAYvB,EAAMwB,EAEtBF,EAAMxB,qBAAuB,UAAA,CAC5BC,GAAO,KAAMuB,EAAMG,CAAAA,EACnBH,EAAMG,EAAQ,KACdH,EAAME,EAAa,IACnB,EAIGF,EAAME,GAAcF,EAAME,IAAeD,GAC5CD,EAAMxB,qBAAAA,EAKHE,EAAJlB,KACMwC,EAAMG,IACVH,EAAME,EAAaD,EAGnBD,EAAMG,EAAQ,CACbC,SAAU,EACVC,WAAYJ,EACZK,WAAY,CAAA,EACZC,YAAYjB,SAAAA,EAAAA,CACXrD,KAAKqE,WAAWjD,KAAKiC,CAAAA,EACrBU,EAAME,EAAWK,YAAYjB,CAAAA,CAC7B,EACDkB,aARa,SAQAlB,EAAOmB,EAAAA,CACnBxE,KAAKqE,WAAWjD,KAAKiC,CAAAA,EACrBU,EAAME,EAAWK,YAAYjB,CAAAA,CAC7B,EACDoB,YAAYpB,SAAAA,EAAAA,CACXrD,KAAKqE,WAAWK,OAAO1E,KAAKqE,WAAWM,QAAQtB,CAAAA,IAAW,EAAG,CAAA,EAC7DU,EAAME,EAAWQ,YAAYpB,CAAAA,CAC7B,CAAA,GAKHb,GACCI,EAAce,GAAiB,CAAEE,QAASE,EAAMF,OAAAA,EAAWpB,EAA9ClB,GAAAA,EACbwC,EAAMG,CAAAA,GAKCH,EAAMG,GACdH,EAAMxB,qBAAAA,CAEP,CAOM,SAASqC,GAAavE,EAAO2D,EAAAA,CACnC,IAAMa,EAAKjC,EAAckB,GAAQ,CAAEvC,IAAQlB,EAAO4D,EAAYD,CAAAA,CAAAA,EAE9D,OADAa,EAAGC,cAAgBd,EACZa,CACP,EDxBD9E,GAAac,UAAY,IAAIC,IAEOe,IAAA,SAASwB,EAAAA,CAC5C,IAAMD,EAAOpD,KACP+E,EAAYzD,GAAU8B,EAA5B7B,GAAAA,EAEI+B,EAAOF,EAAKlD,EAAK8E,IAAI3B,CAAAA,EAGzB,OAFAC,EA5DuB,CAAA,IAAA,SA8DhB2B,EAAAA,CACN,IAAMC,EAAmB,UAAA,CACnB9B,EAAKX,MAAMe,aAKfF,EAAKlC,KAAK6D,CAAAA,EACV5D,GAAQ+B,EAAMC,EAAOC,CAAAA,GAHrB2B,EAAAA,CAKD,EACGF,EACHA,EAAUG,CAAAA,EAEVA,EAAAA,CAED,CACD,EAEDnF,GAAac,UAAU2B,OAAS,SAASC,EAAAA,CACxCzC,KAAKC,EAAQ,KACbD,KAAKE,EAAO,IAAIiF,IAEhB,IAAMhC,EAAWiC,GAAa3C,EAAMU,QAAAA,EAChCV,EAAMe,aAAef,EAAMe,YAAY,CAAA,IAAO,KAIjDL,EAASkC,QAAAA,EAIV,QAASC,EAAInC,EAASO,OAAQ4B,KAY7BtF,KAAKE,EAAKqF,IAAIpC,EAASmC,CAAAA,EAAKtF,KAAKC,EAAQ,CAAC,EAAG,EAAGD,KAAKC,CAAAA,CAAAA,EAEtD,OAAOwC,EAAMU,QACb,EAEDpD,GAAac,UAAU2E,mBAAqBzF,GAAac,UAAU4E,kBAAoB,UAAA,CAAW,IAAA1B,EAAA/D,KAOjGA,KAAKE,EAAKwF,QAAQ,SAACpC,EAAMD,EAAAA,CACxBhC,GAAQ0C,EAAMV,EAAOC,CAAAA,CACrB,CAAA,CACD,EAAA,IErHYqC,GACM,OAAVC,OAAU,KAAeA,OAAOC,KAAOD,OAAOC,IAAI,eAAA,GAC1D,MAEKC,GAAc,0RAEdC,GAA6B,OAAbpD,SAAa,IAK7BqD,GAAoB,SAAAtF,EAAAA,CACzB,OAAkB,OAAVkF,OAAU,KAAkC,OAAZA,OAAAA,GAAY,SACjD,eACA,eACDK,KAAKvF,CAAAA,CAJsB,EAO9BwF,GAAUC,UAAUC,iBAAmB,CAAvC,EASA,CACC,qBACA,4BACA,qBAAA,EACCC,QAAQ,SAAAC,EAAAA,CACTC,OAAOC,eAAeN,GAAUC,UAAWG,EAAK,CAC/CG,aAAAA,GACAC,IAAM,UAAA,CACL,OAAOC,KAAK,UAAYL,CAAAA,CACxB,EACDM,IAL+C,SAK3CC,EAAAA,CACHN,OAAOC,eAAeG,KAAML,EAAK,CAChCG,aAAAA,GACAK,SAAAA,GACAC,MAAOF,CAAAA,CAAAA,CAER,CAAA,CAAA,CAEF,CAAA,EA6BD,IAAIG,GAAeC,GAAQC,MAS3B,SAASC,IAAAA,CAET,CAAA,SAASC,IAAAA,CACR,OAAOT,KAAKU,YACZ,CAED,SAASC,IAAAA,CACR,OAAOX,KAAKY,gBACZ,CAhBDN,GAAQC,MAAQ,SAAAM,EAAAA,CAKf,OAJIR,KAAcQ,EAAIR,GAAaQ,CAAAA,GACnCA,EAAEC,QAAUN,GACZK,EAAEJ,qBAAuBA,GACzBI,EAAEF,mBAAqBA,GACfE,EAAEE,YAAcF,CACxB,EAYD,IAmHIG,GAnHAC,GAAsB,CACzBnB,aAAAA,GACAC,IAFyB,UAAA,CAGxB,OAAYmB,KAAAA,KACZ,CAAA,EAGEC,GAAeb,GAAQc,MAC3Bd,GAAQc,MAAQ,SAAAA,EAAAA,CACf,IAAIC,EAAOD,EAAMC,KACbC,EAAQF,EAAME,MACdC,EAAkBD,EAGtB,GAAoB,OAATD,GAAS,SAAU,CAC7B,IAAMG,EAAmBH,EAAKI,QAAQ,GAAA,IAAhCD,GAGN,QAASE,KAFTH,EAAkB,CAAlB,EAEcD,EAAO,CACpB,IAAIlB,EAAQkB,EAAMI,CAAAA,EAEdC,IAAUD,IAAM,YAAcL,IAAS,YAGhCK,IAAM,SAAW,iBAAkBJ,GAASlB,GAAS,OAK/DsB,IAAM,gBACN,UAAWJ,GACXA,EAAMlB,OAAS,KAIfsB,EAAI,QACMA,IAAM,YAActB,IAApBsB,GAMVtB,EAAQ,GACE,iBAAiBwB,KAAKF,CAAAA,EAChCA,EAAI,aAEJ,6BAA6BE,KAAKF,EAAIL,CAAAA,GAAAA,CACrCQ,GAAkBP,EAAMD,IAAAA,EAEzBK,EAAI,UACM,aAAaE,KAAKF,CAAAA,EAC5BA,EAAI,YACM,YAAYE,KAAKF,CAAAA,EAC3BA,EAAI,aACM,mCAAmCE,KAAKF,CAAAA,EAClDA,EAAIA,EAAEI,YAAAA,EACIN,GAAoBO,GAAYH,KAAKF,CAAAA,EAC/CA,EAAIA,EAAEM,QAAQ,YAAa,KAAA,EAAOF,YAAAA,EACxB1B,IAAU,OACpBA,EAAAA,QAKG,aAAawB,KAAKF,CAAAA,IACrBA,EAAIA,EAAEI,YAAAA,EACFP,EAAgBG,CAAAA,IACnBA,EAAI,mBAINH,EAAgBG,CAAAA,EAAKtB,EACrB,CAIAiB,GAAQ,UACRE,EAAgBU,UAChBC,MAAMC,QAAQZ,EAAgBnB,KAAAA,IAG9BmB,EAAgBnB,MAAQgC,GAAad,EAAMe,QAAAA,EAAU3C,QAAQ,SAAA4C,EAAAA,CAC5DA,EAAMhB,MAAMiB,SACXhB,EAAgBnB,MAAMqB,QAAQa,EAAMhB,MAAMlB,KAAAA,GAD/BmC,EAEZ,CAAA,GAIElB,GAAQ,UAAYE,EAAgBiB,cAAgB,OACvDjB,EAAgBnB,MAAQgC,GAAad,EAAMe,QAAAA,EAAU3C,QAAQ,SAAA4C,EAAAA,CAE3DA,EAAMhB,MAAMiB,SADThB,EAAgBU,SAElBV,EAAgBiB,aAAaf,QAAQa,EAAMhB,MAAMlB,KAAAA,GAF/B6B,GAKlBV,EAAgBiB,cAAgBF,EAAMhB,MAAMlB,KAE9C,CAAA,GAGFgB,EAAME,MAAQC,EAEVD,EAAMJ,OAASI,EAAMmB,YACxBxB,GAAoByB,WAAa,cAAepB,EAC5CA,EAAMmB,WAAa,OAAMlB,EAAgBL,MAAQI,EAAMmB,WAC3D7C,OAAOC,eAAe0B,EAAiB,YAAaN,EAAAA,EAErD,CAEDG,EAAMuB,SAAWC,GAEbzB,IAAcA,GAAaC,CAAAA,CAC/B,EAID,IAAMyB,GAAkBvC,GAAHwC,IACrBxC,GAAAwC,IAAkB,SAAS1B,EAAAA,CACtByB,IACHA,GAAgBzB,CAAAA,EAEjBJ,GAAmBI,EACnB2B,GAAA,EE3ND,IAAMC,GAAa,CAAC,EACdC,GAAW,IAAI,IACrB,SAASC,GAAaC,EAAW,CAC7BH,GAAW,KAAKG,CAAS,EACzBF,GAAS,QAASG,GAAY,CAC1BC,GAAeD,EAASD,CAAS,CACrC,CAAC,CACL,CACA,SAASG,GAAkBC,EAAI,CACvBA,EAAG,aACHA,EAAG,aAEHC,GAAmBD,EAAG,YAAY,CAAC,CAE3C,CACA,SAASC,GAAmBC,EAAU,CAClC,IAAIL,EAAUH,GAAS,IAAIQ,CAAQ,EACnC,GAAI,CAACL,GAAW,CAACA,EAAQ,YAAa,CAElC,GADAA,EAAUK,EAAS,cAAc,0BAA0B,EACvD,CAACL,EAAS,CACVA,EAAU,SAAS,cAAc,OAAO,EACxCA,EAAQ,aAAa,oBAAqB,EAAE,EAC5C,IAAMM,EAAQC,GAAc,EACxBD,IACAN,EAAQ,MAAQM,GAEpB,IAAME,EAAWH,IAAa,SAAW,SAAS,KAAOA,EACnDI,EAAeJ,IAAa,SAC5BG,EAAS,cAAc,kDAAkD,EACzEA,EAAS,WACfA,EAAS,aAAaR,EAASS,CAAY,CAC/C,CACAZ,GAAS,IAAIQ,EAAUL,CAAO,EAC9BU,GAAkBV,CAAO,CAC7B,CACJ,CACA,SAASU,GAAkBV,EAAS,CAChC,QAAWD,KAAaH,GACpBK,GAAeD,EAASD,CAAS,CAEzC,CACA,SAASE,GAAeD,EAASD,EAAW,CACxC,GAAM,CAAE,MAAAY,CAAM,EAAIX,EACZY,EAAUD,EAAM,SAAS,OAC/BZ,EAAU,MAAM,GAAG,EAAE,QAAQ,CAACc,EAAUC,IAAM,CAC1CD,EAAWA,EAAS,KAAK,EACrBA,GACAF,EAAM,WAAWE,EAAW,IAAKD,EAAUE,CAAC,CAEpD,CAAC,CACL,CAGA,IAAIC,GACJ,SAASR,IAAgB,CACrB,OAAIQ,KAAsB,SACtBA,GAAoBC,GAAgB,GAEjCD,EACX,CAIA,SAASC,IAAkB,CACvB,IAAMC,EAAgB,SAAS,cAAc,wBAAwB,EACrE,GAAIA,GAAiBA,EAAc,aAAa,SAAS,EACrD,OAAOA,EAAc,aAAa,SAAS,EAE/C,IAAMC,EAAc,SAAS,cAAc,eAAe,EAC1D,OAAIA,GACOA,EAAY,OAAS,EAGpC,CAGI,OAAO,SAAa,KACpBd,GAAmB,QAAQ,EAG/B,IAAIe,GAAW,89bACfrB,GAAaqB,EAAQ,EAErB,IAAMC,GAAN,KAAoB,CAChB,YAAYC,EAAe,CACvB,KAAK,cAAgBA,EACrB,KAAK,UAAY,GACjB,KAAK,QAAU,GACf,KAAK,YAAc,CAAC,EACpB,KAAK,UAAY,CACrB,CACA,QAAQC,EAAO,CACX,KAAK,QAAU,GACV,KAAK,SAAS,IACf,KAAK,aAAa,EACdA,GAAS,KACT,KAAK,SAAS,EAGd,KAAK,UAAY,WACjB,KAAK,SAAS,KAAK,IAAI,EAAGA,CAAK,EAG3C,CACA,MAAMC,EAAQ,GAAI,CACd,GAAI,CAAE,YAAAC,CAAY,EAAI,KACtBA,EAAYD,CAAK,GAAKC,EAAYD,CAAK,GAAK,GAAK,EACjD,KAAK,aAAa,CACtB,CACA,OAAOA,EAAQ,GAAIE,EAAO,CACtB,GAAI,CAAE,YAAAD,CAAY,EAAI,KAClBD,KAASC,IACLC,EACA,OAAOD,EAAYD,CAAK,GAGxBC,EAAYD,CAAK,GAAK,EACVC,EAAYD,CAAK,GAChB,GACT,OAAOC,EAAYD,CAAK,GAGhC,KAAK,SAAS,EAEtB,CACA,UAAW,CACP,OAAO,OAAO,KAAK,KAAK,WAAW,EAAE,MACzC,CACA,UAAW,CACP,GAAI,CAAC,KAAK,WAAa,CAAC,KAAK,SAAS,EAAG,CAErC,IADA,KAAK,UAAY,GACV,KAAK,SACR,KAAK,QAAU,GACf,KAAK,QAAQ,EAEjB,KAAK,UAAY,EACrB,CACJ,CACA,OAAQ,CACJ,KAAK,aAAa,EAClB,KAAK,QAAU,GACf,KAAK,YAAc,CAAC,CACxB,CACA,cAAe,CACP,KAAK,YACL,aAAa,KAAK,SAAS,EAC3B,KAAK,UAAY,EAEzB,CACA,SAAU,CACF,KAAK,eACL,KAAK,cAAc,CAE3B,CACJ,EAEA,SAASG,GAAcvB,EAAI,CACnBA,EAAG,YACHA,EAAG,WAAW,YAAYA,CAAE,CAEpC,CAGA,SAASwB,GAAexB,EAAIyB,EAAU,CAClC,GAAIzB,EAAG,QACH,OAAOA,EAAG,QAAQyB,CAAQ,EAI9B,GAAI,CAAC,SAAS,gBAAgB,SAASzB,CAAE,EACrC,OAAO,KAEX,EAAG,CACC,GAAI0B,GAAe1B,EAAIyB,CAAQ,EAC3B,OAAOzB,EAEXA,EAAMA,EAAG,eAAiBA,EAAG,UACjC,OAASA,IAAO,MAAQA,EAAG,WAAa,GACxC,OAAO,IACX,CACA,SAAS0B,GAAe1B,EAAIyB,EAAU,CAElC,OADazB,EAAG,SAAWA,EAAG,iBAAmBA,EAAG,mBACtC,KAAKA,EAAIyB,CAAQ,CACnC,CAIA,SAASE,GAAaC,EAAWH,EAAU,CACvC,IAAII,EAAaD,aAAqB,YAAc,CAACA,CAAS,EAAIA,EAC9DE,EAAa,CAAC,EAClB,QAASnB,EAAI,EAAGA,EAAIkB,EAAW,OAAQlB,GAAK,EAAG,CAC3C,IAAIoB,EAAUF,EAAWlB,CAAC,EAAE,iBAAiBc,CAAQ,EACrD,QAASO,EAAI,EAAGA,EAAID,EAAQ,OAAQC,GAAK,EACrCF,EAAW,KAAKC,EAAQC,CAAC,CAAC,CAElC,CACA,OAAOF,CACX,CAmBA,IAAMG,GAAgB,yCACtB,SAASC,GAAWC,EAAIC,EAAO,CAC3B,QAASC,KAAYD,EACjBE,GAAeH,EAAIE,EAAUD,EAAMC,CAAQ,CAAC,CAEpD,CACA,SAASC,GAAeH,EAAII,EAAMC,EAAK,CAC/BA,GAAO,KACPL,EAAG,MAAMI,CAAI,EAAI,GAEZ,OAAOC,GAAQ,UAAYP,GAAc,KAAKM,CAAI,EACvDJ,EAAG,MAAMI,CAAI,EAAI,GAAGC,CAAG,KAGvBL,EAAG,MAAMI,CAAI,EAAIC,CAEzB,CAMA,SAASC,GAAsBC,EAAI,CAC/B,IAAIC,EAAIC,EACR,OAAQA,GAAMD,EAAKD,EAAG,gBAAkB,MAAQC,IAAO,OAAS,OAASA,EAAG,KAAKD,CAAE,EAAE,CAAC,KAAO,MAAQE,IAAO,OAASA,EAAKF,EAAG,MACjI,CAEA,IAAIG,GAAS,EACb,SAASC,IAAiB,CACtB,OAAAD,IAAU,EACH,UAAYA,EACvB,CAQA,SAASE,GAAuBC,EAAUC,EAAS,CAC/C,OAAQC,GAAO,CACX,IAAIC,EAAeC,GAAeF,EAAG,OAAQF,CAAQ,EACjDG,GACAF,EAAQ,KAAKE,EAAcD,EAAIC,CAAY,CAEnD,CACJ,CACA,SAASE,GAAiBC,EAAWC,EAAWP,EAAUC,EAAS,CAC/D,IAAIO,EAAkBT,GAAuBC,EAAUC,CAAO,EAC9D,OAAAK,EAAU,iBAAiBC,EAAWC,CAAe,EAC9C,IAAM,CACTF,EAAU,oBAAoBC,EAAWC,CAAe,CAC5D,CACJ,CACA,SAASC,GAAwBH,EAAWN,EAAUU,EAAcC,EAAc,CAC9E,IAAIC,EACJ,OAAOP,GAAiBC,EAAW,YAAaN,EAAU,CAACa,EAAaV,IAAiB,CACrF,GAAIA,IAAiBS,EAAqB,CACtCA,EAAsBT,EACtBO,EAAaG,EAAaV,CAAY,EACtC,IAAIW,EAAoBC,GAAiB,CACrCH,EAAsB,KACtBD,EAAaI,EAAcZ,CAAY,EACvCA,EAAa,oBAAoB,aAAcW,CAAgB,CACnE,EAEAX,EAAa,iBAAiB,aAAcW,CAAgB,CAChE,CACJ,CAAC,CACL,CAwBA,SAASE,GAAqBC,EAAS,CACnC,OAAO,OAAO,OAAO,CAAE,QAASA,CAAQ,EAAGC,GAAwBD,CAAO,CAAC,CAC/E,CACA,SAASC,GAAwBD,EAAS,CACtC,MAAO,CACH,SAAU,EACV,UAAUE,EAAI,EACNA,EAAG,MAAQ,SAAWA,EAAG,MAAQ,OACjCF,EAAQE,CAAE,EACVA,EAAG,eAAe,EAE1B,CACJ,CACJ,CAEA,IAAIC,GAAa,EACjB,SAASC,IAAO,CACZ,OAAAD,IAAc,EACP,OAAOA,EAAU,CAC5B,CA+BA,SAASE,GAAgBC,EAAO,CAC5B,IAAIC,EAAQ,CAAC,EACTC,EAAS,CAAC,EACV,EACAC,EAUJ,IATI,OAAOH,GAAU,SACjBE,EAASF,EAAM,MAAM,SAAS,EAEzB,OAAOA,GAAU,WACtBE,EAAS,CAACF,CAAK,EAEV,MAAM,QAAQA,CAAK,IACxBE,EAASF,GAER,EAAI,EAAG,EAAIE,EAAO,OAAQ,GAAK,EAChCC,EAAQD,EAAO,CAAC,EACZ,OAAOC,GAAU,SACjBF,EAAM,KAAKE,EAAM,OAAO,CAAC,IAAM,IAC3B,CAAE,MAAOA,EAAM,UAAU,CAAC,EAAG,MAAO,EAAG,EACvC,CAAE,MAAOA,EAAO,MAAO,CAAE,CAAC,EAEzB,OAAOA,GAAU,YACtBF,EAAM,KAAK,CAAE,KAAME,CAAM,CAAC,EAGlC,OAAOF,CACX,CACA,SAASG,GAAoBC,EAAMC,EAAMC,EAAY,CACjD,IAAI,EACAC,EACJ,IAAK,EAAI,EAAG,EAAID,EAAW,OAAQ,GAAK,EAEpC,GADAC,EAAMC,GAAmBJ,EAAMC,EAAMC,EAAW,CAAC,CAAC,EAC9CC,EACA,OAAOA,EAGf,MAAO,EACX,CACA,SAASC,GAAmBJ,EAAMC,EAAMI,EAAW,CAC/C,OAAIA,EAAU,KACHA,EAAU,KAAKL,EAAMC,CAAI,EAE7BK,GAAgBN,EAAKK,EAAU,KAAK,EAAGJ,EAAKI,EAAU,KAAK,CAAC,GAC5DA,EAAU,OAAS,EAC9B,CACA,SAASC,GAAgBC,EAAGC,EAAG,CAC3B,MAAI,CAACD,GAAK,CAACC,EACA,EAEPA,GAAK,KACE,GAEPD,GAAK,KACE,EAEP,OAAOA,GAAM,UAAY,OAAOC,GAAM,SAC/B,OAAOD,CAAC,EAAE,cAAc,OAAOC,CAAC,CAAC,EAErCD,EAAIC,CACf,CAGA,SAASC,GAASC,EAAKC,EAAK,CACxB,IAAIC,EAAI,OAAOF,CAAG,EAClB,MAAO,MAAM,OAAO,EAAGC,EAAMC,EAAE,MAAM,EAAIA,CAC7C,CACA,SAASC,GAAmBC,EAAWC,EAAMC,EAAc,CACvD,OAAI,OAAOF,GAAc,WACdA,EAAU,GAAGC,CAAI,EAExB,OAAOD,GAAc,SACdC,EAAK,OAAO,CAACE,EAAKC,EAAKC,IAAWF,EAAI,QAAQ,IAAME,EAAOD,GAAO,EAAE,EAAIJ,CAAS,EAErFE,CACX,CAMA,SAASI,GAAM,EAAG,CACd,OAAO,EAAI,IAAM,CACrB,CAGA,SAASC,GAAyBC,EAAQ,CACtC,IAAIC,EAAaD,EAAO,cAAc,6BAA6B,EAC/DE,EAAiBF,EAAO,cAAc,+BAA+B,EACzE,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,4CAA4C,EAEhE,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,8CAA8C,EAElE,OAAOF,EAAO,sBAAsB,EAAE,MAAQC,EAAW,sBAAsB,EAAE,MAC7EC,EAAe,sBAAsB,EAAE,KAC/C,CAEA,IAAMC,GAAiB,CAAC,QAAS,SAAU,OAAQ,cAAc,EAC3DC,GAAW,2DAEjB,SAASC,GAAeC,EAAOC,EAAM,CACjC,OAAI,OAAOD,GAAU,SACVE,GAAYF,CAAK,EAExB,OAAOA,GAAU,UAAYA,EACtBG,GAAYH,CAAK,EAExB,OAAOA,GAAU,SACVG,GAAY,CAAE,CAACF,GAAQ,cAAc,EAAGD,CAAM,CAAC,EAEnD,IACX,CACA,SAASE,GAAYE,EAAG,CACpB,IAAIC,EAAIP,GAAS,KAAKM,CAAC,EACvB,GAAIC,EAAG,CACH,IAAIC,EAAOD,EAAE,CAAC,EAAI,GAAK,EACvB,MAAO,CACH,MAAO,EACP,OAAQ,EACR,KAAMC,GAAQD,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,GAC1C,aAAcC,IAASD,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,GAAK,GAAK,GAAK,KAC7DA,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,GAAK,GAAK,KACtCA,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,GAAK,KACjCA,EAAE,CAAC,EAAI,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,GAErC,CACJ,CACA,OAAO,IACX,CACA,SAASF,GAAYI,EAAK,CACtB,IAAIC,EAAW,CACX,MAAOD,EAAI,OAASA,EAAI,MAAQ,EAChC,OAAQA,EAAI,QAAUA,EAAI,OAAS,EACnC,KAAMA,EAAI,MAAQA,EAAI,KAAO,EAC7B,cAAeA,EAAI,OAASA,EAAI,MAAQ,GAAK,GAAK,GAAK,KAClDA,EAAI,SAAWA,EAAI,QAAU,GAAK,GAAK,KACvCA,EAAI,SAAWA,EAAI,QAAU,GAAK,KAClCA,EAAI,cAAgBA,EAAI,aAAeA,EAAI,IAAM,EAC1D,EACIE,EAAQF,EAAI,OAASA,EAAI,KAC7B,OAAIE,IACAD,EAAS,MAAQC,EAAQ,EACzBD,EAAS,eAAiB,IAEvBA,CACX,CAEA,SAASE,GAAeC,EAAIC,EAAI,CAC5B,OAAOD,EAAG,QAAUC,EAAG,OACnBD,EAAG,SAAWC,EAAG,QACjBD,EAAG,OAASC,EAAG,MACfD,EAAG,eAAiBC,EAAG,YAC/B,CAQA,SAASC,GAAaC,EAAIC,EAAI,CAC1B,MAAO,CACH,MAAOD,EAAG,MAAQC,EAAG,MACrB,OAAQD,EAAG,OAASC,EAAG,OACvB,KAAMD,EAAG,KAAOC,EAAG,KACnB,aAAcD,EAAG,aAAeC,EAAG,YACvC,CACJ,CACA,SAASC,GAAkBD,EAAID,EAAI,CAC/B,MAAO,CACH,MAAOC,EAAG,MAAQD,EAAG,MACrB,OAAQC,EAAG,OAASD,EAAG,OACvB,KAAMC,EAAG,KAAOD,EAAG,KACnB,aAAcC,EAAG,aAAeD,EAAG,YACvC,CACJ,CACA,SAASG,GAAiBC,EAAGC,EAAG,CAC5B,MAAO,CACH,MAAOD,EAAE,MAAQC,EACjB,OAAQD,EAAE,OAASC,EACnB,KAAMD,EAAE,KAAOC,EACf,aAAcD,EAAE,aAAeC,CACnC,CACJ,CAGA,SAASC,GAAaC,EAAK,CACvB,OAAOC,GAAYD,CAAG,EAAI,GAC9B,CACA,SAASE,GAAcF,EAAK,CACxB,OAAOC,GAAYD,CAAG,EAAI,EAC9B,CACA,SAASC,GAAYD,EAAK,CACtB,OAAOG,GAAUH,CAAG,EAAI,KAC5B,CAOA,SAASI,GAAUC,EAAK,CACpB,OAAOA,EAAI,OAAS,IAAM,OACtBA,EAAI,QAAU,GAAK,OACnBA,EAAI,KAAO,MACXA,EAAI,YACZ,CAEA,SAASC,GAAqBC,EAAWC,EAAa,CAClD,IAAIC,EAAM,KACV,QAAS,EAAI,EAAG,EAAIC,GAAe,OAAQ,GAAK,EAAG,CAC/C,IAAIC,EAAOD,GAAe,CAAC,EAC3B,GAAIF,EAAYG,CAAI,EAAG,CACnB,IAAIC,EAAWL,EAAUI,CAAI,EAAIH,EAAYG,CAAI,EACjD,GAAI,CAACE,GAAMD,CAAQ,GAAMH,IAAQ,MAAQA,IAAQG,EAC7C,OAAO,KAEXH,EAAMG,CACV,SACSL,EAAUI,CAAI,EAEnB,OAAO,IAEf,CACA,OAAOF,CACX,CACA,SAASK,GAA4BT,EAAK,CACtC,IAAIU,EAAKV,EAAI,aACb,GAAIU,EAAI,CACJ,GAAIA,EAAK,MAAS,EACd,MAAO,CAAE,KAAM,cAAe,MAAOA,CAAG,EAE5C,GAAIA,GAAM,IAAO,MAAQ,EACrB,MAAO,CAAE,KAAM,SAAU,MAAOA,EAAK,GAAK,EAE9C,GAAIA,GAAM,IAAO,GAAK,MAAQ,EAC1B,MAAO,CAAE,KAAM,SAAU,MAAOA,GAAM,IAAO,GAAI,EAErD,GAAIA,EACA,MAAO,CAAE,KAAM,OAAQ,MAAOA,GAAM,IAAO,GAAK,GAAI,CAE5D,CACA,OAAIV,EAAI,KACAA,EAAI,gBAAkBA,EAAI,KAAO,IAAM,EAChC,CAAE,KAAM,OAAQ,MAAOA,EAAI,KAAO,CAAE,EAExC,CAAE,KAAM,MAAO,MAAOA,EAAI,IAAK,EAEtCA,EAAI,OACG,CAAE,KAAM,QAAS,MAAOA,EAAI,MAAO,EAE1CA,EAAI,MACG,CAAE,KAAM,OAAQ,MAAOA,EAAI,KAAM,EAErC,CAAE,KAAM,cAAe,MAAO,CAAE,CAC3C,CAiBA,SAASW,GAAcC,EAAIC,EAAIC,EAAc,CACzC,GAAIF,IAAOC,EACP,MAAO,GAEX,IAAIE,EAAMH,EAAG,OACTI,EACJ,GAAID,IAAQF,EAAG,OACX,MAAO,GAEX,IAAKG,EAAI,EAAGA,EAAID,EAAKC,GAAK,EACtB,GAAI,EAAEF,EAAeA,EAAaF,EAAGI,CAAC,EAAGH,EAAGG,CAAC,CAAC,EAAIJ,EAAGI,CAAC,IAAMH,EAAGG,CAAC,GAC5D,MAAO,GAGf,MAAO,EACX,CAEA,IAAMC,GAAU,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAEhE,SAASC,GAASC,EAAGC,EAAG,CACpB,IAAIC,EAAIC,GAAeH,CAAC,EACxB,OAAAE,EAAE,CAAC,GAAKD,EAAI,EACLG,GAAeF,CAAC,CAC3B,CACA,SAASG,GAAQL,EAAGC,EAAG,CACnB,IAAIC,EAAIC,GAAeH,CAAC,EACxB,OAAAE,EAAE,CAAC,GAAKD,EACDG,GAAeF,CAAC,CAC3B,CACA,SAASI,GAAMN,EAAGC,EAAG,CACjB,IAAIC,EAAIC,GAAeH,CAAC,EACxB,OAAAE,EAAE,CAAC,GAAKD,EACDG,GAAeF,CAAC,CAC3B,CAGA,SAASK,GAAUC,EAAIC,EAAI,CACvB,OAAOC,GAASF,EAAIC,CAAE,EAAI,CAC9B,CACA,SAASC,GAASF,EAAIC,EAAI,CACtB,OAAQA,EAAG,QAAQ,EAAID,EAAG,QAAQ,IAAM,IAAO,GAAK,GAAK,GAC7D,CACA,SAASG,GAAUH,EAAIC,EAAI,CACvB,OAAQA,EAAG,QAAQ,EAAID,EAAG,QAAQ,IAAM,IAAO,GAAK,GACxD,CACA,SAASI,GAAYJ,EAAIC,EAAI,CACzB,OAAQA,EAAG,QAAQ,EAAID,EAAG,QAAQ,IAAM,IAAO,GACnD,CACA,SAASK,GAAYL,EAAIC,EAAI,CACzB,OAAQA,EAAG,QAAQ,EAAID,EAAG,QAAQ,GAAK,GAC3C,CACA,SAASM,GAAeN,EAAIC,EAAI,CAC5B,IAAIM,EAAQC,GAAWR,CAAE,EACrBS,EAAQD,GAAWP,CAAE,EACzB,MAAO,CACH,MAAO,EACP,OAAQ,EACR,KAAM,KAAK,MAAMC,GAASK,EAAOE,CAAK,CAAC,EACvC,aAAeR,EAAG,QAAQ,EAAIQ,EAAM,QAAQ,GAAMT,EAAG,QAAQ,EAAIO,EAAM,QAAQ,EACnF,CACJ,CAEA,SAASG,GAAeV,EAAIC,EAAI,CAC5B,IAAIU,EAAIC,GAAcZ,EAAIC,CAAE,EAC5B,OAAIU,IAAM,MAAQA,EAAI,IAAM,EACjBA,EAAI,EAER,IACX,CACA,SAASC,GAAcZ,EAAIC,EAAI,CAC3B,OAAIY,GAASb,CAAE,IAAMa,GAASZ,CAAE,EACrB,KAAK,MAAMC,GAASF,EAAIC,CAAE,CAAC,EAE/B,IACX,CAEA,SAASO,GAAWhB,EAAG,CACnB,OAAOI,GAAe,CAClBJ,EAAE,eAAe,EACjBA,EAAE,YAAY,EACdA,EAAE,WAAW,CACjB,CAAC,CACL,CACA,SAASsB,GAAYtB,EAAG,CACpB,OAAOI,GAAe,CAClBJ,EAAE,eAAe,EACjBA,EAAE,YAAY,EACdA,EAAE,WAAW,EACbA,EAAE,YAAY,CAClB,CAAC,CACL,CACA,SAASuB,GAAcvB,EAAG,CACtB,OAAOI,GAAe,CAClBJ,EAAE,eAAe,EACjBA,EAAE,YAAY,EACdA,EAAE,WAAW,EACbA,EAAE,YAAY,EACdA,EAAE,cAAc,CACpB,CAAC,CACL,CACA,SAASwB,GAAcxB,EAAG,CACtB,OAAOI,GAAe,CAClBJ,EAAE,eAAe,EACjBA,EAAE,YAAY,EACdA,EAAE,WAAW,EACbA,EAAE,YAAY,EACdA,EAAE,cAAc,EAChBA,EAAE,cAAc,CACpB,CAAC,CACL,CAEA,SAASyB,GAAWC,EAAQC,EAAKC,EAAK,CAClC,IAAIC,EAAIH,EAAO,eAAe,EAC1BI,EAAIC,GAAgBL,EAAQG,EAAGF,EAAKC,CAAG,EAC3C,GAAIE,EAAI,EACJ,OAAOC,GAAgBL,EAAQG,EAAI,EAAGF,EAAKC,CAAG,EAElD,IAAII,EAAQD,GAAgBL,EAAQG,EAAI,EAAGF,EAAKC,CAAG,EACnD,OAAII,GAAS,EACF,KAAK,IAAIF,EAAGE,CAAK,EAErBF,CACX,CACA,SAASC,GAAgBL,EAAQO,EAAMN,EAAKC,EAAK,CAC7C,IAAIM,EAAiB9B,GAAe,CAAC6B,EAAM,EAAG,EAAIE,GAAgBF,EAAMN,EAAKC,CAAG,CAAC,CAAC,EAC9EQ,EAAWpB,GAAWU,CAAM,EAC5BW,EAAO,KAAK,MAAM3B,GAASwB,EAAgBE,CAAQ,CAAC,EACxD,OAAO,KAAK,MAAMC,EAAO,CAAC,EAAI,CAClC,CAEA,SAASF,GAAgBF,EAAMN,EAAKC,EAAK,CAErC,IAAIU,EAAM,EAAIX,EAAMC,EAGpB,MAAO,GADM,EAAIxB,GAAe,CAAC6B,EAAM,EAAGK,CAAG,CAAC,EAAE,UAAU,EAAIX,GAAO,GACrDW,EAAM,CAC1B,CAEA,SAASC,GAAiBC,EAAM,CAC5B,MAAO,CACHA,EAAK,YAAY,EACjBA,EAAK,SAAS,EACdA,EAAK,QAAQ,EACbA,EAAK,SAAS,EACdA,EAAK,WAAW,EAChBA,EAAK,WAAW,EAChBA,EAAK,gBAAgB,CACzB,CACJ,CACA,SAASC,GAAiBvC,EAAG,CACzB,OAAO,IAAI,KAAKA,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,KAAO,EAAIA,EAAE,CAAC,EACvDA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CACnC,CACA,SAASC,GAAeqC,EAAM,CAC1B,MAAO,CACHA,EAAK,eAAe,EACpBA,EAAK,YAAY,EACjBA,EAAK,WAAW,EAChBA,EAAK,YAAY,EACjBA,EAAK,cAAc,EACnBA,EAAK,cAAc,EACnBA,EAAK,mBAAmB,CAC5B,CACJ,CACA,SAASpC,GAAeF,EAAG,CAGvB,OAAIA,EAAE,SAAW,IACbA,EAAIA,EAAE,OAAO,CAAC,CAAC,CAAC,GAEb,IAAI,KAAK,KAAK,IAAI,GAAGA,CAAC,CAAC,CAClC,CAEA,SAASwC,GAAY1C,EAAG,CACpB,MAAO,CAAC,MAAMA,EAAE,QAAQ,CAAC,CAC7B,CACA,SAASqB,GAASrB,EAAG,CACjB,OAAOA,EAAE,YAAY,EAAI,IAAO,GAAK,GACjCA,EAAE,cAAc,EAAI,IAAO,GAC3BA,EAAE,cAAc,EAAI,IACpBA,EAAE,mBAAmB,CAC7B,CAGA,SAAS2C,GAAejB,EAAQkB,EAAgBC,EAAgB,GAAO,CACnE,IAAIC,EAAIpB,EAAO,YAAY,EAC3B,OAAAoB,EAAIA,EAAE,QAAQ,OAAQ,EAAE,EACpBD,IACAC,EAAIA,EAAE,QAAQ,aAAc,EAAE,GAE9BA,EAAE,OAAS,KACPF,GAAkB,KAClBE,EAAIA,EAAE,QAAQ,IAAK,EAAE,EAEhBF,IAAmB,IACxBE,EAAIA,EAAE,QAAQ,IAAKC,GAAqBH,EAAgB,EAAI,CAAC,IAI9DE,CACX,CAIA,SAASE,GAAgBtB,EAAQ,CAC7B,OAAOA,EAAO,YAAY,EAAE,QAAQ,OAAQ,EAAE,CAClD,CACA,SAASuB,GAAkBvB,EAAQ,CAC/B,OAAOA,EAAO,YAAY,EAAE,MAAM,cAAc,EAAE,CAAC,CACvD,CAEA,SAASwB,GAAoBxB,EAAQ,CACjC,OAAOyB,GAASzB,EAAO,YAAY,EAAG,CAAC,EAAI,IACvCyB,GAASzB,EAAO,cAAc,EAAG,CAAC,EAAI,IACtCyB,GAASzB,EAAO,cAAc,EAAG,CAAC,CAC1C,CACA,SAASqB,GAAqBK,EAASC,EAAQ,GAAO,CAClD,IAAIC,EAAOF,EAAU,EAAI,IAAM,IAC3BG,EAAM,KAAK,IAAIH,CAAO,EACtBI,EAAQ,KAAK,MAAMD,EAAM,EAAE,EAC3BE,EAAO,KAAK,MAAMF,EAAM,EAAE,EAC9B,OAAIF,EACO,GAAGC,EAAOH,GAASK,EAAO,CAAC,CAAC,IAAIL,GAASM,EAAM,CAAC,CAAC,GAErD,MAAMH,CAAI,GAAGE,CAAK,GAAGC,EAAO,IAAIN,GAASM,EAAM,CAAC,CAAC,GAAK,EAAE,EACnE,CAEA,SAASC,GAAQC,EAAYC,EAAaC,EAAc,CACpD,IAAIC,EACAC,EACJ,OAAO,YAAaC,EAAS,CACzB,GAAI,CAACF,EACDC,EAAaJ,EAAW,MAAM,KAAMK,CAAO,UAEtC,CAACxE,GAAcsE,EAAaE,CAAO,EAAG,CACvCH,GACAA,EAAaE,CAAU,EAE3B,IAAIE,EAAMN,EAAW,MAAM,KAAMK,CAAO,GACpC,CAACJ,GAAe,CAACA,EAAYK,EAAKF,CAAU,KAC5CA,EAAaE,EAErB,CACA,OAAAH,EAAcE,EACPD,CACX,CACJ,CACA,SAASG,GAAcP,EAAYC,EAAaC,EAAc,CAC1D,IAAIM,EACAJ,EACJ,OAAQK,GAAW,CACf,GAAI,CAACD,EACDJ,EAAaJ,EAAW,KAAK,KAAMS,CAAM,UAEpC,CAACC,GAAaF,EAAYC,CAAM,EAAG,CACpCP,GACAA,EAAaE,CAAU,EAE3B,IAAIE,EAAMN,EAAW,KAAK,KAAMS,CAAM,GAClC,CAACR,GAAe,CAACA,EAAYK,EAAKF,CAAU,KAC5CA,EAAaE,EAErB,CACA,OAAAE,EAAaC,EACNL,CACX,CACJ,CA6DA,IAAMO,GAAmC,CACrC,KAAM,EACN,UAAW,EACX,eAAgB,EAChB,SAAU,EACV,WAAY,CAChB,EACMC,GAAgC,CAClC,aAAc,EACd,IAAK,EACL,KAAM,EACN,MAAO,EACP,IAAK,EACL,QAAS,EACT,KAAM,EACN,OAAQ,EACR,OAAQ,CACZ,EACMC,GAAc,oBACdC,GAAW,KACXC,GAAiB,OACjBC,GAAS,UACTC,GAAS,UACTC,GAAN,KAAsB,CAClB,YAAYC,EAAgB,CACxB,IAAIC,EAAoB,CAAC,EACrBC,EAAmB,CAAC,EACpBC,EAAW,EACf,QAASC,KAAQJ,EACTI,KAAQZ,IACRU,EAAiBE,CAAI,EAAIJ,EAAeI,CAAI,EAC5CD,EAAW,KAAK,IAAIX,GAAiCY,CAAI,EAAGD,CAAQ,IAGpEF,EAAkBG,CAAI,EAAIJ,EAAeI,CAAI,EACzCA,KAAQX,KACRU,EAAW,KAAK,IAAIV,GAA8BW,CAAI,EAAGD,CAAQ,IAI7E,KAAK,kBAAoBF,EACzB,KAAK,iBAAmBC,EACxB,KAAK,SAAWC,EAChB,KAAK,oBAAsBE,GAAQC,EAAmB,CAC1D,CACA,OAAOC,EAAMC,EAAS,CAClB,OAAO,KAAK,oBAAoB,KAAK,kBAAmB,KAAK,iBAAkBA,CAAO,EAAED,CAAI,CAChG,CACA,YAAYE,EAAOC,EAAKF,EAASG,EAAwB,CACrD,GAAI,CAAE,kBAAAV,EAAmB,iBAAAC,CAAiB,EAAI,KAC1CU,EAAeC,GAA0BJ,EAAM,OAAQC,EAAI,OAAQF,EAAQ,cAAc,EAC7F,GAAI,CAACI,EACD,OAAO,KAAK,OAAOH,EAAOD,CAAO,EAErC,IAAIM,EAAwBF,EACxBE,EAAwB,IACvBb,EAAkB,OAAS,WAAaA,EAAkB,OAAS,aACnEA,EAAkB,QAAU,WAAaA,EAAkB,QAAU,aACrEA,EAAkB,MAAQ,WAAaA,EAAkB,MAAQ,aAClEa,EAAwB,GAE5B,IAAIC,EAAQ,KAAK,OAAON,EAAOD,CAAO,EAClCQ,EAAQ,KAAK,OAAON,EAAKF,CAAO,EACpC,GAAIO,IAAUC,EACV,OAAOD,EAEX,IAAIE,EAAmBC,GAAgCjB,EAAmBa,CAAqB,EAC3FK,EAAwBb,GAAoBW,EAAkBf,EAAkBM,CAAO,EACvFY,EAAWD,EAAsBV,CAAK,EACtCY,EAAWF,EAAsBT,CAAG,EACpCY,EAAYC,GAAoBR,EAAOK,EAAUJ,EAAOK,CAAQ,EAChEG,EAAYtB,EAAiB,WAAaS,GAA0BH,EAAQ,kBAAoB,GACpG,OAAIc,EACOA,EAAU,OAASF,EAAWI,EAAYH,EAAWC,EAAU,MAEnEP,EAAQS,EAAYR,CAC/B,CACA,gBAAiB,CACb,OAAQ,KAAK,SAAU,CACnB,IAAK,GACL,IAAK,GACL,IAAK,GACD,MAAO,OACX,IAAK,GACD,MAAO,QACX,IAAK,GACD,MAAO,OACX,IAAK,GACD,MAAO,MACX,QACI,MAAO,MACf,CACJ,CACJ,EACA,SAASV,GAAoBL,EAAmBC,EAAkBM,EAAS,CACvE,IAAIiB,EAAsB,OAAO,KAAKxB,CAAiB,EAAE,OACzD,OAAIwB,IAAwB,GAAKxB,EAAkB,eAAiB,QACxDM,GAAUmB,GAAqBnB,EAAK,cAAc,EAE1DkB,IAAwB,GAAKvB,EAAiB,KACtCK,GAAUoB,GAAiBnB,EAAQ,kBAAkBD,EAAK,MAAM,EAAGC,EAAQ,SAAUA,EAAQ,aAAcA,EAAQ,OAAQN,EAAiB,IAAI,EAErJ0B,GAA0B3B,EAAmBC,EAAkBM,CAAO,CACjF,CACA,SAASoB,GAA0B3B,EAAmBC,EAAkBM,EAAS,CAC7EP,EAAoB,OAAO,OAAO,CAAC,EAAGA,CAAiB,EACvDC,EAAmB,OAAO,OAAO,CAAC,EAAGA,CAAgB,EACrD2B,GAAiB5B,EAAmBC,CAAgB,EACpDD,EAAkB,SAAW,MAC7B,IAAI6B,EAAe,IAAI,KAAK,eAAetB,EAAQ,OAAO,MAAOP,CAAiB,EAC9E8B,EACJ,GAAI7B,EAAiB,eAAgB,CACjC,IAAI8B,EAAY,OAAO,OAAO,CAAC,EAAG/B,CAAiB,EACnD,OAAO+B,EAAU,OACjBD,EAAa,IAAI,KAAK,eAAevB,EAAQ,OAAO,MAAOwB,CAAS,CACxE,CACA,OAAQzB,GAAS,CACb,GAAI,CAAE,OAAA0B,CAAO,EAAI1B,EACb2B,EACAH,GAAc,CAACE,EAAO,cAAc,EACpCC,EAASH,EAGTG,EAASJ,EAEb,IAAIK,EAAID,EAAO,OAAOD,CAAM,EAC5B,OAAOG,GAAYD,EAAG5B,EAAMN,EAAmBC,EAAkBM,CAAO,CAC5E,CACJ,CACA,SAASqB,GAAiB5B,EAAmBC,EAAkB,CAGvDD,EAAkB,eACbA,EAAkB,OACnBA,EAAkB,KAAO,WAExBA,EAAkB,SACnBA,EAAkB,OAAS,YAI/BA,EAAkB,eAAiB,SACnCA,EAAkB,aAAe,SAGjCC,EAAiB,iBAAmBD,EAAkB,QAAUA,EAAkB,cAClF,OAAOC,EAAiB,cAEhC,CACA,SAASkC,GAAYD,EAAG5B,EAAMN,EAAmBC,EAAkBM,EAAS,CACxE,OAAA2B,EAAIA,EAAE,QAAQtC,GAAQ,EAAE,EACpBI,EAAkB,eAAiB,UACnCkC,EAAIE,GAAaF,EAAI3B,EAAQ,WAAa,OAASD,EAAK,gBAAkB,KACtE,MACAmB,GAAqBnB,EAAK,cAAc,CAAC,GAE7CL,EAAiB,aACjBiC,EAAIA,EAAE,QAAQxC,GAAU,EAAE,EAAE,KAAK,GAEjCO,EAAiB,iBACjBiC,EAAIA,EAAE,QAAQ,MAAO,EAAE,GAIvBjC,EAAiB,WAAa,GAC9BiC,EAAIA,EAAE,QAAQzC,GAAa,EAAE,EAAE,KAAK,EAE/BQ,EAAiB,WAAa,SACnCiC,EAAIA,EAAE,QAAQzC,GAAa,CAAC4C,EAAIC,IAAOA,EAAG,kBAAkB,CAAC,EAExDrC,EAAiB,WAAa,QACnCiC,EAAIA,EAAE,QAAQzC,GAAa,CAAC4C,EAAIC,IAAO,GAAGA,EAAG,kBAAkB,CAAC,GAAG,EAE9DrC,EAAiB,WAAa,cACnCiC,EAAIA,EAAE,QAAQzC,GAAc4C,GAAOA,EAAG,kBAAkB,CAAC,GAE7DH,EAAIA,EAAE,QAAQvC,GAAgB,GAAG,EACjCuC,EAAIA,EAAE,KAAK,EACJA,CACX,CACA,SAASE,GAAaF,EAAGK,EAAQ,CAC7B,IAAIC,EAAW,GACf,OAAAN,EAAIA,EAAE,QAAQrC,GAAQ,KAClB2C,EAAW,GACJD,EACV,EAEIC,IACDN,GAAK,IAAIK,CAAM,IAEZL,CACX,CACA,SAASR,GAAiBe,EAAKC,EAAUC,EAAcC,EAAQC,EAAS,CACpE,IAAIC,EAAQ,CAAC,EACb,OAAID,IAAY,OACZC,EAAM,KAAKH,CAAY,GAElBE,IAAY,SAAWA,IAAY,WACxCC,EAAM,KAAKJ,CAAQ,GAEnBG,IAAY,QAAUA,IAAY,UAClCC,EAAM,KAAK,GAAG,EAElBA,EAAM,KAAKF,EAAO,mBAAmB,OAAOH,CAAG,CAAC,EAC5CG,EAAO,QAAQ,YAAc,OAC7BE,EAAM,QAAQ,EAEXA,EAAM,KAAK,EAAE,CACxB,CAKA,SAASlC,GAA0BmC,EAAIC,EAAIC,EAAI,CAC3C,OAAIA,EAAG,cAAcF,CAAE,IAAME,EAAG,cAAcD,CAAE,EACrC,EAEPC,EAAG,eAAeF,CAAE,IAAME,EAAG,eAAeD,CAAE,EACvC,EAEPC,EAAG,aAAaF,CAAE,IAAME,EAAG,aAAaD,CAAE,EACnC,EAEPE,GAASH,CAAE,IAAMG,GAASF,CAAE,EACrB,EAEJ,CACX,CACA,SAAS/B,GAAgCkC,EAASC,EAAa,CAC3D,IAAIC,EAAiB,CAAC,EACtB,QAASlD,KAAQgD,GACT,EAAEhD,KAAQX,KACVA,GAA8BW,CAAI,GAAKiD,KACvCC,EAAelD,CAAI,EAAIgD,EAAQhD,CAAI,GAG3C,OAAOkD,CACX,CACA,SAAS/B,GAAoBR,EAAOK,EAAUJ,EAAOK,EAAU,CAC3D,IAAIkC,EAAK,EACT,KAAOA,EAAKxC,EAAM,QAAQ,CACtB,IAAIyC,EAASzC,EAAM,QAAQK,EAAUmC,CAAE,EACvC,GAAIC,IAAW,GACX,MAEJ,IAAIC,EAAU1C,EAAM,OAAO,EAAGyC,CAAM,EACpCD,EAAKC,EAASpC,EAAS,OACvB,IAAIsC,EAAS3C,EAAM,OAAOwC,CAAE,EACxBI,EAAK,EACT,KAAOA,EAAK3C,EAAM,QAAQ,CACtB,IAAI4C,EAAS5C,EAAM,QAAQK,EAAUsC,CAAE,EACvC,GAAIC,IAAW,GACX,MAEJ,IAAIC,EAAU7C,EAAM,OAAO,EAAG4C,CAAM,EACpCD,EAAKC,EAASvC,EAAS,OACvB,IAAIyC,EAAS9C,EAAM,OAAO2C,CAAE,EAC5B,GAAIF,IAAYI,GAAWH,IAAWI,EAClC,MAAO,CACH,OAAQL,EACR,MAAOC,CACX,CAER,CACJ,CACA,OAAO,IACX,CAEA,SAASK,GAAkBC,EAAUC,EAAgB,CACjD,IAAIC,EAAID,EAAe,cAAcD,EAAS,MAAM,EACpD,MAAO,CACH,OAAQA,EAAS,OACjB,eAAgBA,EAAS,eACzB,MAAOE,EACP,KAAMA,EAAE,CAAC,EACT,MAAOA,EAAE,CAAC,EACV,IAAKA,EAAE,CAAC,EACR,KAAMA,EAAE,CAAC,EACT,OAAQA,EAAE,CAAC,EACX,OAAQA,EAAE,CAAC,EACX,YAAaA,EAAE,CAAC,CACpB,CACJ,CAEA,SAASC,GAA2B1D,EAAOC,EAAKF,EAASG,EAAwB,CAC7E,IAAIyD,EAAYL,GAAkBtD,EAAOD,EAAQ,cAAc,EAC3D6D,EAAU3D,EAAMqD,GAAkBrD,EAAKF,EAAQ,cAAc,EAAI,KACrE,MAAO,CACH,KAAM4D,EACN,MAAOA,EACP,IAAKC,EACL,SAAU7D,EAAQ,SAClB,YAAaA,EAAQ,OAAO,MAC5B,iBAAkBG,GAA0BH,EAAQ,gBACxD,CACJ,CASA,IAAM8D,GAAN,KAAmB,CACf,YAAYC,EAAQ,CAChB,KAAK,OAASA,CAClB,CACA,OAAOhE,EAAMC,EAASG,EAAwB,CAC1C,OAAOH,EAAQ,aAAa,KAAK,OAAQ2D,GAA2B5D,EAAM,KAAMC,EAASG,CAAsB,CAAC,CACpH,CACA,YAAYF,EAAOC,EAAKF,EAASG,EAAwB,CACrD,OAAOH,EAAQ,aAAa,KAAK,OAAQ2D,GAA2B1D,EAAOC,EAAKF,EAASG,CAAsB,CAAC,CACpH,CACJ,EAEM6D,GAAN,KAAoB,CAChB,YAAYC,EAAM,CACd,KAAK,KAAOA,CAChB,CACA,OAAOlE,EAAMC,EAASG,EAAwB,CAC1C,OAAO,KAAK,KAAKwD,GAA2B5D,EAAM,KAAMC,EAASG,CAAsB,CAAC,CAC5F,CACA,YAAYF,EAAOC,EAAKF,EAASG,EAAwB,CACrD,OAAO,KAAK,KAAKwD,GAA2B1D,EAAOC,EAAKF,EAASG,CAAsB,CAAC,CAC5F,CACJ,EAEA,SAAS+D,GAAgBC,EAAO,CAC5B,OAAI,OAAOA,GAAU,UAAYA,EACtB,IAAI5E,GAAgB4E,CAAK,EAEhC,OAAOA,GAAU,SACV,IAAIL,GAAaK,CAAK,EAE7B,OAAOA,GAAU,WACV,IAAIH,GAAcG,CAAK,EAE3B,IACX,CAIA,IAAMC,GAAuB,CACzB,gBAAiBC,EACjB,iBAAkBA,EAClB,SAAUC,GACV,qBAAsBD,EACtB,YAAaA,EACb,cAAeA,EACf,2BAA4BC,GAC5B,0BAA2BA,GAC3B,iBAAkBA,GAClB,WAAYA,GACZ,gBAAiB,QACjB,YAAaA,GACb,YAAaA,GACb,iBAAkBJ,GAClB,aAAcI,GACd,aAAcA,GACd,cAAeD,EACf,cAAeA,EACf,sBAAuB,OACvB,oBAAqB,OACrB,mBAAoB,QACpB,WAAY,QACZ,gBAAiBH,GACjB,oBAAqBG,EACrB,iBAAkBA,EAClB,kBAAmBA,EACnB,qBAAsBA,EACtB,kBAAmBA,EACnB,eAAgBA,EAChB,gBAAiBA,EACjB,mBAAoBA,EACpB,YAAa,OACb,YAAa,OACb,SAAU,QACV,sBAAuBA,EACvB,YAAa,QACb,qBAAsBA,EACtB,kBAAmBA,EACnB,mBAAoBA,EACpB,sBAAuBA,EACvB,SAAU,QACV,eAAgBA,EAChB,aAAcA,EACd,gBAAiBA,EACjB,aAAc,QACd,uBAAwBA,EACxB,oBAAqBA,EACrB,qBAAsBA,EACtB,wBAAyBA,EACzB,oBAAqB,QACrB,aAAc,QACd,WAAY,OACZ,SAAU,OACV,cAAe,OACf,SAAU,OACV,QAASA,EACT,OAAQA,EACR,YAAa,OACb,mBAAoB,OACpB,WAAY,QACZ,uBAAwB,QACxB,aAAc,QACd,WAAYA,EACZ,WAAYE,GACZ,iBAAkB,QAClB,mBAAoB,QACpB,kBAAmB,OACnB,eAAgB,OAChB,qBAAsB,OACtB,WAAY,QACZ,OAAQF,EACR,cAAeA,EACf,UAAW,OACX,iBAAkBH,GAClB,wBAAyB,QACzB,iBAAkB,QAClB,gBAAiB,QACjB,SAAU,OACV,aAAc,OACd,0BAA2B,QAC3B,cAAeG,EACf,YAAaA,EACb,IAAKA,EACL,mBAAoBA,EACpB,kBAAmBA,EACnB,sBAAuBA,EACvB,WAAYA,EACZ,cAAe,QACf,mBAAoBA,EACpB,mBAAoBA,EACpB,aAAc,OACd,mBAAoB,QACpB,sBAAuB,QACvB,aAAcA,EACd,gBAAiBA,EACjB,WAAYA,EACZ,qBAAsB,OACtB,iBAAkB,OAClB,eAAgB,OAChB,WAAY,OACZ,gBAAiBA,EACjB,aAAcA,EACd,cAAeA,EACf,iBAAkBA,EAClB,iBAAkBA,EAClB,cAAeA,EACf,YAAaA,EACb,UAAW,QACX,eAAgB,OAChB,gBAAiBA,EACjB,mBAAoBA,EACpB,gBAAiBA,EACjB,iBAAkBA,EAClB,oBAAqBA,EACrB,oBAAqBA,EACrB,iBAAkBA,EAClB,kBAAmBA,EACnB,qBAAsBA,EACtB,aAAcA,EACd,gBAAiBA,EACjB,YAAa,OACb,kBAAmBC,GACnB,WAAY,OACZ,iBAAkBD,EAClB,cAAeA,EACf,eAAgBA,EAChB,kBAAmBA,EACnB,aAAc,OACd,SAAU,QACV,gBAAiBH,GACjB,cAAe,OACf,aAAcG,EACd,aAAcA,EACd,kBAAmB,OACnB,WAAY,QACZ,qBAAsB,OACtB,oBAAqB,OACrB,aAAc,QACd,cAAe,OACf,eAAgB,OAChB,cAAe,OACf,iBAAkB,OAClB,iBAAkB,QAClB,QAASA,EACT,SAAU,OACV,SAAU,OACV,cAAe,OACf,cAAeC,GACf,WAAYD,EACZ,eAAgB,QAChB,WAAYA,EACZ,aAAcA,EACd,YAAaA,EACb,iBAAkB,QAElB,aAAc,OACd,SAAUA,EACV,YAAaA,EACb,UAAW,OACX,SAAU,OACV,UAAW,OACX,cAAeA,EACf,mBAAoBA,EACpB,gBAAiBA,EACjB,iBAAkBA,EAClB,oBAAqBA,EACrB,iBAAkBH,GAGlB,sBAAuBG,EACvB,uBAAwBA,EACxB,wBAAyB,OAC7B,EAGMG,GAAuB,CACzB,aAAc,OACd,sBAAuB,MACvB,oBAAqB,WACrB,0BAA2B,WAC3B,2BAA4B,CAAE,IAAK,CAAE,EACrC,mBAAoB,GACpB,iBAAkB,WAClB,WAAY,GACZ,YAAa,GACb,YAAa,KACb,cAAe,CACX,MAAO,QACP,OAAQ,GACR,IAAK,iBACT,EACA,SAAU,GACV,YAAa,GACb,sBAAuB,QACvB,SAAU,GACV,aAAc,GACd,WAAY,WACZ,gBAAiB,GACjB,YAAa,WACb,YAAa,WACb,oBAAqB,GACrB,aAAc,GACd,WAAY,QACZ,SAAU,MACV,cAAe,WACf,SAAU,QACV,QAAS,CAAC,EACV,OAAQ,GACR,YAAa,WACb,mBAAoB,IACpB,WAAY,GACZ,uBAAwB,GACxB,aAAc,GACd,WAAY,IACZ,WAAY,+BACZ,iBAAkB,CAAE,MAAO,OAAQ,IAAK,UAAW,KAAM,SAAU,EACnE,mBAAoB,GACpB,kBAAmB,IACnB,eAAgB,IAChB,qBAAsB,EACtB,WAAY,GACZ,SAAU,GACV,WAAY,GACZ,eAAgB,GAChB,cAAe,GACf,iBAAkB,GAClB,iBAAkB,CAAE,MAAO,OAAQ,IAAK,SAAU,CACtD,EAGMC,GAA6B,CAC/B,SAAUJ,EACV,UAAWA,EACX,SAAUA,EACV,YAAaA,EACb,YAAaA,EACb,aAAcA,EACd,WAAYA,EACZ,gBAAiBA,EACjB,gBAAiBA,EACjB,OAAQA,EACR,SAAUA,EACV,QAASA,EAET,SAAUA,EACV,aAAcA,EACd,YAAaA,EACb,aAAcA,EACd,eAAgBA,EAChB,QAASA,EACT,eAAgBA,CACpB,EAGMK,GAA2B,CAC7B,WAAYL,EACZ,YAAaA,EACb,MAAOA,EACP,QAASA,EACT,cAAeA,EACf,OAAQA,EACR,aAAcA,CAClB,EACMM,GAA6B,CAC/B,cAAeC,GACf,cAAeA,GACf,WAAYA,GACZ,YAAaA,GACb,YAAaA,GACb,cAAeA,GACf,QAASC,GACT,OAAQA,GACR,aAAcA,GACb,UAAcA,EACnB,EACA,SAASD,GAAoBlB,EAAGoB,EAAG,CAC/B,OAAI,OAAOpB,GAAM,UAAY,OAAOoB,GAAM,UAAYpB,GAAKoB,EAChDC,GAAarB,EAAGoB,CAAC,EAErBpB,IAAMoB,CACjB,CACA,SAASD,GAAmBnB,EAAGoB,EAAG,CAC9B,OAAI,MAAM,QAAQpB,CAAC,GAAK,MAAM,QAAQoB,CAAC,EAC5BE,GAActB,EAAGoB,CAAC,EAEtBpB,IAAMoB,CACjB,CAGA,IAAMG,GAAuB,CACzB,KAAM,OACN,UAAWZ,EACX,WAAY,OACZ,cAAe,OACf,0BAA2BA,EAC3B,eAAgB,QAChB,WAAYA,EACZ,QAASA,EACT,SAAUA,EACV,YAAaA,CACjB,EAGA,SAASa,GAAgBC,EAAY,CACjC,OAAOC,GAAWD,EAAYR,EAA0B,CAC5D,CACA,SAASU,GAAYlB,EAAOmB,EAAU,CAClC,IAAIC,EAAU,CAAC,EACXC,EAAQ,CAAC,EACb,QAASC,KAAYH,EACbG,KAAYtB,IACZoB,EAAQE,CAAQ,EAAIH,EAASG,CAAQ,EAAEtB,EAAMsB,CAAQ,CAAC,GAG9D,QAASA,KAAYtB,EACXsB,KAAYH,IACdE,EAAMC,CAAQ,EAAItB,EAAMsB,CAAQ,GAGxC,MAAO,CAAE,QAAAF,EAAS,MAAAC,CAAM,CAC5B,CACA,SAASnB,EAASqB,EAAK,CACnB,OAAOA,CACX,CAEA,GAAM,CAAE,eAAAC,EAAe,EAAI,OAAO,UAGlC,SAASP,GAAWQ,EAAUC,EAAiB,CAC3C,IAAIC,EAAO,CAAC,EACZ,GAAID,GACA,QAASjG,KAAQiG,EACb,GAAIA,EAAgBjG,CAAI,IAAMgF,GAAqB,CAC/C,IAAImB,EAAc,CAAC,EAEnB,QAASC,EAAIJ,EAAS,OAAS,EAAGI,GAAK,EAAGA,GAAK,EAAG,CAC9C,IAAIC,EAAML,EAASI,CAAC,EAAEpG,CAAI,EAC1B,GAAI,OAAOqG,GAAQ,UAAYA,EAC3BF,EAAY,QAAQE,CAAG,UAElBA,IAAQ,OAAW,CACxBH,EAAKlG,CAAI,EAAIqG,EACb,KACJ,CACJ,CAEIF,EAAY,SACZD,EAAKlG,CAAI,EAAIwF,GAAWW,CAAW,EAE3C,EAIR,QAAS,EAAIH,EAAS,OAAS,EAAG,GAAK,EAAG,GAAK,EAAG,CAC9C,IAAIM,EAAQN,EAAS,CAAC,EACtB,QAAShG,KAAQsG,EACPtG,KAAQkG,IACVA,EAAKlG,CAAI,EAAIsG,EAAMtG,CAAI,EAGnC,CACA,OAAOkG,CACX,CACA,SAASK,GAAWC,EAAMnC,EAAM,CAC5B,IAAIoC,EAAW,CAAC,EAChB,QAASC,KAAOF,EACRnC,EAAKmC,EAAKE,CAAG,EAAGA,CAAG,IACnBD,EAASC,CAAG,EAAIF,EAAKE,CAAG,GAGhC,OAAOD,CACX,CACA,SAASE,GAAQH,EAAMnC,EAAM,CACzB,IAAIuC,EAAU,CAAC,EACf,QAASF,KAAOF,EACZI,EAAQF,CAAG,EAAIrC,EAAKmC,EAAKE,CAAG,EAAGA,CAAG,EAEtC,OAAOE,CACX,CACA,SAASC,GAAY/C,EAAG,CACpB,IAAI0C,EAAO,CAAC,EACZ,QAASM,KAAQhD,EACb0C,EAAKM,CAAI,EAAI,GAEjB,OAAON,CACX,CAGA,SAASO,GAAkBC,EAAK,CAC5B,IAAIlD,EAAI,CAAC,EACT,QAAS4C,KAAOM,EACZlD,EAAE,KAAKkD,EAAIN,CAAG,CAAC,EAEnB,OAAO5C,CACX,CACA,SAASqB,GAAa8B,EAAMC,EAAM,CAC9B,GAAID,IAASC,EACT,MAAO,GAEX,QAASR,KAAOO,EACZ,GAAIlB,GAAe,KAAKkB,EAAMP,CAAG,GACzB,EAAEA,KAAOQ,GACT,MAAO,GAInB,QAASR,KAAOQ,EACZ,GAAInB,GAAe,KAAKmB,EAAMR,CAAG,GACzBO,EAAKP,CAAG,IAAMQ,EAAKR,CAAG,EACtB,MAAO,GAInB,MAAO,EACX,CACA,IAAMS,GAAa,WACnB,SAASC,GAAuBH,EAAMC,EAAM,CACxC,IAAMG,EAAOC,GAAgBL,EAAMC,CAAI,EACvC,QAASR,KAAOW,EACZ,GAAI,CAACF,GAAW,KAAKT,CAAG,EACpB,MAAO,GAGf,MAAO,EACX,CACA,SAASY,GAAgBL,EAAMC,EAAM,CACjC,IAAIG,EAAO,CAAC,EACZ,QAASX,KAAOO,EACRlB,GAAe,KAAKkB,EAAMP,CAAG,IACvBA,KAAOQ,GACTG,EAAK,KAAKX,CAAG,GAIzB,QAASA,KAAOQ,EACRnB,GAAe,KAAKmB,EAAMR,CAAG,GACzBO,EAAKP,CAAG,IAAMQ,EAAKR,CAAG,GACtBW,EAAK,KAAKX,CAAG,EAIzB,OAAOW,CACX,CACA,SAASE,GAAYC,EAAUC,EAAUC,EAAgB,CAAC,EAAG,CACzD,GAAIF,IAAaC,EACb,MAAO,GAEX,QAASf,KAAOe,EACZ,GAAI,EAAAf,KAAOc,GAAYG,GAAeH,EAASd,CAAG,EAAGe,EAASf,CAAG,EAAGgB,EAAchB,CAAG,CAAC,GAElF,MAAO,GAIf,QAASA,KAAOc,EACZ,GAAI,EAAEd,KAAOe,GACT,MAAO,GAGf,MAAO,EACX,CAIA,SAASE,GAAeC,EAAMC,EAAMC,EAAY,CAC5C,OAAIF,IAASC,GAAQC,IAAe,GACzB,GAEPA,EACOA,EAAWF,EAAMC,CAAI,EAEzB,EACX,CACA,SAASE,GAAgBvB,EAAMwB,EAAa,EAAGC,EAAUC,EAAO,EAAG,CAC/D,IAAIC,EAAM,CAAC,EACPF,GAAY,OACZA,EAAW,OAAO,KAAKzB,CAAI,EAAE,QAEjC,QAASJ,EAAI4B,EAAY5B,EAAI6B,EAAU7B,GAAK8B,EAAM,CAC9C,IAAI7B,EAAMG,EAAKJ,CAAC,EACZC,IAAQ,QACR8B,EAAI,KAAK9B,CAAG,CAEpB,CACA,OAAO8B,CACX,CAEA,IAAIC,GAAyB,CAAC,EAC9B,SAASC,GAAuBrI,EAAMsI,EAAU,CAC5CF,GAAuBpI,CAAI,EAAIsI,CACnC,CACA,SAASC,GAAqBvI,EAAM,CAChC,OAAO,IAAIoI,GAAuBpI,CAAI,CAC1C,CACA,IAAMwI,GAAN,KAA8B,CAC1B,cAAcC,EAAG,CACb,OAAOA,EAAE,eAAe,CAC5B,CACA,eAAeA,EAAG,CACd,OAAOA,EAAE,YAAY,CACzB,CACA,aAAaA,EAAG,CACZ,OAAOA,EAAE,WAAW,CACxB,CACA,cAAcC,EAAK,CACf,OAAOC,GAAeD,CAAG,CAC7B,CACA,cAAc7G,EAAQ,CAClB,OAAO+G,GAAe/G,CAAM,CAChC,CACJ,EACAwG,GAAuB,UAAWG,EAAuB,EAEzD,IAAMK,GAAS,oHACf,SAASC,GAAMC,EAAK,CAChB,IAAIC,EAAIH,GAAO,KAAKE,CAAG,EACvB,GAAIC,EAAG,CACH,IAAInH,EAAS,IAAI,KAAK,KAAK,IAAI,OAAOmH,EAAE,CAAC,CAAC,EAAGA,EAAE,CAAC,EAAI,OAAOA,EAAE,CAAC,CAAC,EAAI,EAAI,EAAG,OAAOA,EAAE,CAAC,GAAK,CAAC,EAAG,OAAOA,EAAE,CAAC,GAAK,CAAC,EAAG,OAAOA,EAAE,CAAC,GAAK,CAAC,EAAG,OAAOA,EAAE,EAAE,GAAK,CAAC,EAAGA,EAAE,EAAE,EAAI,CAAO,KAAKA,EAAE,EAAE,CAAC,GAAM,IAAO,CAAC,CAAC,EAC/L,GAAIC,GAAYpH,CAAM,EAAG,CACrB,IAAIqH,EAAiB,KACrB,OAAIF,EAAE,EAAE,IACJE,GAAkBF,EAAE,EAAE,IAAM,IAAM,GAAK,IAAM,OAAOA,EAAE,EAAE,GAAK,CAAC,EAAI,GAC9D,OAAOA,EAAE,EAAE,GAAK,CAAC,IAElB,CACH,OAAAnH,EACA,kBAAmB,CAACmH,EAAE,CAAC,EACvB,eAAAE,CACJ,CACJ,CACJ,CACA,OAAO,IACX,CAEA,IAAMC,GAAN,KAAc,CACV,YAAYC,EAAU,CAClB,IAAIC,EAAW,KAAK,SAAWD,EAAS,SACpCE,EAAkBD,IAAa,SAAWA,IAAa,MACvDD,EAAS,mBAAqBE,IAC9B,KAAK,kBAAoB,IAAIF,EAAS,kBAAkBC,CAAQ,GAEpE,KAAK,iBAAmB,GAAQ,CAACC,GAAmB,KAAK,mBACzD,KAAK,eAAiBf,GAAqBa,EAAS,cAAc,EAClE,KAAK,OAASA,EAAS,OACvB,KAAK,QAAUA,EAAS,OAAO,KAAK,IACpC,KAAK,QAAUA,EAAS,OAAO,KAAK,IAChCA,EAAS,wBAA0B,QACnC,KAAK,QAAU,EACf,KAAK,QAAU,GAEf,OAAOA,EAAS,UAAa,WAC7B,KAAK,QAAUA,EAAS,UAExB,OAAOA,EAAS,uBAA0B,aAC1C,KAAK,eAAiBA,EAAS,uBAEnC,KAAK,SAAWA,EAAS,UAAY,KAAOA,EAAS,SAAWA,EAAS,OAAO,QAAQ,SACxF,KAAK,cAAgBA,EAAS,cAAgB,KAAOA,EAAS,aAAeA,EAAS,OAAO,QAAQ,eAAiB,KAAK,SAC3H,KAAK,aAAeA,EAAS,aAC7B,KAAK,iBAAmBA,EAAS,gBACrC,CAEA,aAAa7E,EAAO,CAChB,IAAIgF,EAAO,KAAK,iBAAiBhF,CAAK,EACtC,OAAIgF,IAAS,KACF,KAEJA,EAAK,MAChB,CACA,iBAAkB,CACd,OAAI,KAAK,iBACE,KAAK,kBAAkB,IAAI,KAAK,EAAE,QAAQ,CAAC,EAI/CZ,GAAea,GAAiB,IAAI,IAAM,CAAC,CACtD,CACA,iBAAiBjF,EAAO,CACpB,GAAI,OAAOA,GAAU,SACjB,OAAO,KAAK,MAAMA,CAAK,EAE3B,IAAI1C,EAAS,KAab,OAZI,OAAO0C,GAAU,SACjB1C,EAAS,KAAK,kBAAkB0C,CAAK,EAEhCA,aAAiB,MACtBA,EAAQA,EAAM,QAAQ,EACjB,MAAMA,CAAK,IACZ1C,EAAS,KAAK,kBAAkB0C,CAAK,IAGpC,MAAM,QAAQA,CAAK,IACxB1C,EAAS8G,GAAepE,CAAK,GAE7B1C,IAAW,MAAQ,CAACoH,GAAYpH,CAAM,EAC/B,KAEJ,CAAE,OAAAA,EAAQ,kBAAmB,GAAO,UAAW,IAAK,CAC/D,CACA,MAAME,EAAG,CACL,IAAIY,EAAQmG,GAAM/G,CAAC,EACnB,GAAIY,IAAU,KACV,OAAO,KAEX,GAAI,CAAE,OAAAd,CAAO,EAAIc,EACb8G,EAAY,KAChB,OAAI9G,EAAM,iBAAmB,OACrB,KAAK,iBACLd,EAAS,KAAK,kBAAkBA,EAAO,QAAQ,EAAIc,EAAM,eAAiB,GAAK,GAAI,EAGnF8G,EAAY9G,EAAM,gBAGnB,CAAE,OAAAd,EAAQ,kBAAmBc,EAAM,kBAAmB,UAAA8G,CAAU,CAC3E,CAEA,QAAQ5H,EAAQ,CACZ,OAAO,KAAK,eAAe,cAAcA,CAAM,CACnD,CACA,SAASA,EAAQ,CACb,OAAO,KAAK,eAAe,eAAeA,CAAM,CACpD,CACA,OAAOA,EAAQ,CACX,OAAO,KAAK,eAAe,aAAaA,CAAM,CAClD,CAEA,IAAIA,EAAQ6H,EAAK,CACb,IAAI5F,EAAI,KAAK,eAAe,cAAcjC,CAAM,EAChD,OAAAiC,EAAE,CAAC,GAAK4F,EAAI,MACZ5F,EAAE,CAAC,GAAK4F,EAAI,OACZ5F,EAAE,CAAC,GAAK4F,EAAI,KACZ5F,EAAE,CAAC,GAAK4F,EAAI,aACL,KAAK,eAAe,cAAc5F,CAAC,CAC9C,CACA,SAASjC,EAAQ6H,EAAK,CAClB,IAAI5F,EAAI,KAAK,eAAe,cAAcjC,CAAM,EAChD,OAAAiC,EAAE,CAAC,GAAK4F,EAAI,MACZ5F,EAAE,CAAC,GAAK4F,EAAI,OACZ5F,EAAE,CAAC,GAAK4F,EAAI,KACZ5F,EAAE,CAAC,GAAK4F,EAAI,aACL,KAAK,eAAe,cAAc5F,CAAC,CAC9C,CACA,SAASjC,EAAQ8H,EAAG,CAChB,IAAI7F,EAAI,KAAK,eAAe,cAAcjC,CAAM,EAChD,OAAAiC,EAAE,CAAC,GAAK6F,EACD,KAAK,eAAe,cAAc7F,CAAC,CAC9C,CACA,UAAUjC,EAAQ8H,EAAG,CACjB,IAAI7F,EAAI,KAAK,eAAe,cAAcjC,CAAM,EAChD,OAAAiC,EAAE,CAAC,GAAK6F,EACD,KAAK,eAAe,cAAc7F,CAAC,CAC9C,CAEA,eAAe5B,EAAIC,EAAI,CACnB,GAAI,CAAE,eAAA0B,CAAe,EAAI,KACzB,OAAId,GAASb,CAAE,IAAMa,GAASZ,CAAE,GAC5B0B,EAAe,aAAa3B,CAAE,IAAM2B,EAAe,aAAa1B,CAAE,GAClE0B,EAAe,eAAe3B,CAAE,IAAM2B,EAAe,eAAe1B,CAAE,EAC/D0B,EAAe,cAAc1B,CAAE,EAAI0B,EAAe,cAAc3B,CAAE,EAEtE,IACX,CACA,gBAAgBA,EAAIC,EAAI,CACpB,GAAI,CAAE,eAAA0B,CAAe,EAAI,KACzB,OAAId,GAASb,CAAE,IAAMa,GAASZ,CAAE,GAC5B0B,EAAe,aAAa3B,CAAE,IAAM2B,EAAe,aAAa1B,CAAE,EAC1D0B,EAAe,eAAe1B,CAAE,EAAI0B,EAAe,eAAe3B,CAAE,GACvE2B,EAAe,cAAc1B,CAAE,EAAI0B,EAAe,cAAc3B,CAAE,GAAK,GAEzE,IACX,CAEA,kBAAkBA,EAAIC,EAAI,CACtB,IAAIwH,EAAI,KAAK,eAAezH,EAAIC,CAAE,EAClC,OAAIwH,IAAM,KACC,CAAE,KAAM,OAAQ,MAAOA,CAAE,GAEpCA,EAAI,KAAK,gBAAgBzH,EAAIC,CAAE,EAC3BwH,IAAM,KACC,CAAE,KAAM,QAAS,MAAOA,CAAE,GAErCA,EAAIC,GAAe1H,EAAIC,CAAE,EACrBwH,IAAM,KACC,CAAE,KAAM,OAAQ,MAAOA,CAAE,GAEpCA,EAAIE,GAAc3H,EAAIC,CAAE,EACpBwH,IAAM,KACC,CAAE,KAAM,MAAO,MAAOA,CAAE,GAEnCA,EAAIG,GAAU5H,EAAIC,CAAE,EAChB4H,GAAMJ,CAAC,EACA,CAAE,KAAM,OAAQ,MAAOA,CAAE,GAEpCA,EAAIK,GAAY9H,EAAIC,CAAE,EAClB4H,GAAMJ,CAAC,EACA,CAAE,KAAM,SAAU,MAAOA,CAAE,GAEtCA,EAAIM,GAAY/H,EAAIC,CAAE,EAClB4H,GAAMJ,CAAC,EACA,CAAE,KAAM,SAAU,MAAOA,CAAE,EAE/B,CAAE,KAAM,cAAe,MAAOxH,EAAG,QAAQ,EAAID,EAAG,QAAQ,CAAE,OACrE,CACA,sBAAsBA,EAAIC,EAAIsG,EAAG,CAE7B,IAAIyB,EACJ,OAAIzB,EAAE,QACFyB,EAAO,KAAK,eAAehI,EAAIC,CAAE,EAC7B+H,IAAS,MACFA,EAAOC,GAAa1B,CAAC,EAGhCA,EAAE,SACFyB,EAAO,KAAK,gBAAgBhI,EAAIC,CAAE,EAC9B+H,IAAS,MACFA,EAAOE,GAAc3B,CAAC,EAGjCA,EAAE,OACFyB,EAAOL,GAAc3H,EAAIC,CAAE,EACvB+H,IAAS,MACFA,EAAOG,GAAY5B,CAAC,GAG3BtG,EAAG,QAAQ,EAAID,EAAG,QAAQ,GAAKoI,GAAU7B,CAAC,CACtD,CAGA,QAAQO,EAAGuB,EAAM,CACb,OAAIA,IAAS,OACF,KAAK,YAAYvB,CAAC,EAEzBuB,IAAS,QACF,KAAK,aAAavB,CAAC,EAE1BuB,IAAS,OACF,KAAK,YAAYvB,CAAC,EAEzBuB,IAAS,MACFC,GAAWxB,CAAC,EAEnBuB,IAAS,OACFE,GAAYzB,CAAC,EAEpBuB,IAAS,SACFG,GAAc1B,CAAC,EAEtBuB,IAAS,SACFI,GAAc3B,CAAC,EAEnB,IACX,CACA,YAAYA,EAAG,CACX,OAAO,KAAK,eAAe,cAAc,CACrC,KAAK,eAAe,cAAcA,CAAC,CACvC,CAAC,CACL,CACA,aAAaA,EAAG,CACZ,OAAO,KAAK,eAAe,cAAc,CACrC,KAAK,eAAe,cAAcA,CAAC,EACnC,KAAK,eAAe,eAAeA,CAAC,CACxC,CAAC,CACL,CACA,YAAYA,EAAG,CACX,OAAO,KAAK,eAAe,cAAc,CACrC,KAAK,eAAe,cAAcA,CAAC,EACnC,KAAK,eAAe,eAAeA,CAAC,EACpCA,EAAE,WAAW,GAAMA,EAAE,UAAU,EAAI,KAAK,QAAU,GAAK,CAC3D,CAAC,CACL,CAEA,kBAAkBnH,EAAQ,CACtB,OAAI,KAAK,eACE,KAAK,eAAe,KAAK,OAAOA,CAAM,CAAC,EAE3C+I,GAAW/I,EAAQ,KAAK,QAAS,KAAK,OAAO,CACxD,CAEA,OAAOA,EAAQgJ,EAAWC,EAAc,CAAC,EAAG,CACxC,OAAOD,EAAU,OAAO,CACpB,OAAAhJ,EACA,eAAgBiJ,EAAY,WAAa,KACrCA,EAAY,UACZ,KAAK,gBAAgBjJ,CAAM,CACnC,EAAG,IAAI,CACX,CACA,YAAYxB,EAAOC,EAAKuK,EAAWC,EAAc,CAAC,EAAG,CACjD,OAAIA,EAAY,iBACZxK,EAAMyK,GAAMzK,EAAK,EAAE,GAEhBuK,EAAU,YAAY,CACzB,OAAQxK,EACR,eAAgByK,EAAY,gBAAkB,KAC1CA,EAAY,eACZ,KAAK,gBAAgBzK,CAAK,CAClC,EAAG,CACC,OAAQC,EACR,eAAgBwK,EAAY,cAAgB,KACxCA,EAAY,aACZ,KAAK,gBAAgBxK,CAAG,CAChC,EAAG,KAAMwK,EAAY,gBAAgB,CACzC,CAKA,UAAUjJ,EAAQmJ,EAAe,CAAC,EAAG,CACjC,IAAI9B,EAAiB,KACrB,OAAK8B,EAAa,qBACVA,EAAa,WAAa,KAC1B9B,EAAiB8B,EAAa,UAG9B9B,EAAiB,KAAK,gBAAgBrH,CAAM,GAG7CoJ,GAAepJ,EAAQqH,EAAgB8B,EAAa,QAAQ,CACvE,CAEA,kBAAkBE,EAAI,CAClB,OAAI,KAAK,WAAa,QACXvC,GAAea,GAAiB,IAAI,KAAK0B,CAAE,CAAC,CAAC,EAEpD,KAAK,WAAa,OAAS,CAAC,KAAK,kBAC1B,IAAI,KAAKA,CAAE,EAEfvC,GAAe,KAAK,kBAAkB,iBAAiBuC,CAAE,CAAC,CACrE,CACA,gBAAgBlC,EAAG,CACf,OAAI,KAAK,WAAa,QACX,CAACmC,GAAiBvC,GAAeI,CAAC,CAAC,EAAE,kBAAkB,EAE9D,KAAK,WAAa,MACX,EAEP,KAAK,kBACE,KAAK,kBAAkB,eAAeJ,GAAeI,CAAC,CAAC,EAE3D,IACX,CAEA,OAAOA,EAAGS,EAAW,CACjB,OAAI,KAAK,WAAa,QACX0B,GAAiBvC,GAAeI,CAAC,CAAC,EAEzC,KAAK,WAAa,MACX,IAAI,KAAKA,EAAE,QAAQ,CAAC,EAE1B,KAAK,kBAGH,IAAI,KAAKA,EAAE,QAAQ,EACtB,KAAK,kBAAkB,eAAeJ,GAAeI,CAAC,CAAC,EAAI,IAAO,EAAE,EAH7D,IAAI,KAAKA,EAAE,QAAQ,GAAKS,GAAa,EAAE,CAItD,CACJ,EAEM2B,GAAN,KAAY,CACR,YAAYC,EAAiB,CACrB,KAAK,oBACL,KAAK,gBAAgBA,EAAgB,KAAK,kBAAkB,CAAC,CAErE,CACA,gBAAgBC,EAAkB,CAC9B,IAAIC,EACAC,EACJ,GAAI,OAAOF,GAAqB,UAAYA,EAAkB,CAC1DC,EAAkB,OAAO,OAAO,CAAC,EAAG,KAAK,WAAW,EACpD,IAAKC,KAAcF,EACfC,EAAgBC,CAAU,EAAI,KAAK,wBAAwBF,EAAiBE,CAAU,CAAC,EAE3F,KAAK,YAAcD,CACvB,MACSD,IAAqB,KAC1B,KAAK,YAAc,CAAC,EAE5B,CACA,wBAAwBG,EAAW,CAC/B,IAAIC,EAAS,KAAK,mBAClB,OAAIA,GAAUD,EAAU,QAAQC,CAAM,IAAM,IACxCD,EAAYC,EAASD,GAElBA,CACX,CACA,SAAS/E,EAAK,CACV,OAAO,KAAK,QAAQA,CAAG,GAAK,EAChC,CACA,aAAa8E,EAAYG,EAAO,CAC5B,IAAIF,EAOJ,OANIE,GAAS,KAAK,eACdF,EAAY,KAAK,eAAeD,CAAU,GAAK,KAAK,YAAYA,CAAU,EAG1EC,EAAY,KAAK,YAAYD,CAAU,EAEvCC,EACO,GAAG,KAAK,aAAa,IAAIA,CAAS,GAEtC,EACX,CACA,yBAAyBG,EAAmB,CACxC,IAAIH,EACJ,OAAI,KAAK,iCACLA,EAAYG,EAAkB,KAAK,8BAA8B,EAC7DH,GACO,GAAG,KAAK,aAAa,IAAI,KAAK,wBAAwBA,CAAS,CAAC,GAGxE,EACX,CACJ,EACAL,GAAM,UAAU,QAAU,CAAC,EAC3BA,GAAM,UAAU,YAAc,CAAC,EAC/BA,GAAM,UAAU,cAAgB,GAChCA,GAAM,UAAU,mBAAqB,GAMrC,SAASS,GAAUC,EAAgB,CAC/BA,EAAe,EACf,IAAIC,EAA8BC,GAAQ,kBACtCC,EAAY,CAAC,EACjB,SAASC,EAAiBC,EAAU,CAChCF,EAAU,KAAKE,CAAQ,CAC3B,CAGA,IAFOH,GAAQ,kBAAoBE,EAC5BE,GAAcC,EAAcC,GAAe,CAAC,CAAC,EAAG,SAAS,cAAc,KAAK,CAAC,EAC7EL,EAAU,QACbA,EAAU,MAAM,EAAE,EAEfD,GAAQ,kBAAoBD,CACvC,CACA,IAAMO,GAAN,cAAmCC,EAAU,CACzC,QAAS,CAAE,OAAcF,EAAc,MAAO,CAAC,CAAC,CAAG,CACnD,mBAAoB,CAAE,KAAK,SAAS,CAAC,CAAC,CAAG,CAC7C,EAEA,SAASG,GAAcC,EAAc,CACjC,IAAIC,EAAqBC,GAAcF,CAAY,EAC/CG,EAAeF,EAAY,SAC/B,OAAAA,EAAY,SAAW,UAAY,CAC/B,IAAIG,EAAQ,CAAC,KAAK,gBACdC,EAAWF,EAAa,MAAM,KAAM,SAAS,EACjD,GAAIC,EAAO,CACP,IAAIE,EAAO,CAAC,EACZ,KAAK,sBAAyBC,GAAW,CACjC,KAAK,MAAM,QAAUA,EAAO,OAC5BD,EAAK,QAASE,GAAM,CAChBA,EAAE,QAAUD,EAAO,MACnBC,EAAE,YAAY,CAClB,CAAC,CAET,EACA,KAAK,IAAOA,GAAM,CACdF,EAAK,KAAKE,CAAC,EACX,IAAIC,EAAMD,EAAE,qBACZA,EAAE,qBAAuB,IAAM,CAC3BF,EAAK,OAAOA,EAAK,QAAQE,CAAC,EAAG,CAAC,EAC9BC,GAAOA,EAAI,KAAKD,CAAC,CACrB,CACJ,CACJ,CACA,OAAOH,CACX,EACOJ,CACX,CAEA,IAAMS,GAAN,KAAsB,CAClB,YAAYC,EAAUC,EAASC,EAAYC,EAAiB,CACxD,KAAK,SAAWH,EAChB,KAAK,QAAUC,EACf,KAAK,WAAaC,EAClB,KAAK,gBAAkBC,EACvB,KAAK,oBAAuBC,GAAY,CACpC,KAAK,cAAgB,OAAO,OAAO,CAAC,EAAG,KAAK,eAAiB,CAAC,EAAGA,CAAO,EACxE,KAAK,MAAM,CACf,EACAH,EAAQ,GAAG,iBAAkB,KAAK,mBAAmB,EACrD,KAAK,kBAAkB,CAC3B,CACA,QAAS,CACL,KAAK,QAAQ,IAAI,iBAAkB,KAAK,mBAAmB,CAC/D,CACA,OAAOI,EAAY,CACXA,GAAc,KAAK,gBACnB,KAAK,kBAAkB,EAGvB,KAAK,MAAM,CAEnB,CACA,mBAAoB,CAChB,KAAK,oBAAoB,CACrB,KAAM,KAAK,UACf,CAAC,CACL,CACA,OAAQ,CACA,KAAK,eAAiB,KAAK,SAAS,KAAK,aAAa,IACtD,KAAK,cAAgB,KAE7B,CACJ,EAEMC,GAAkBlB,GAAc,CAAC,CAAC,EACxC,SAASmB,GAAiBC,EAAUC,EAASC,EAAaC,EAAsBC,EAASC,EAAOC,EAAaC,EAAUC,EAAgBf,EAASgB,EAAaC,EAA8BC,EAAgC,CACvN,MAAO,CACH,QAAAP,EACA,QAASF,EACT,YAAAI,EACA,QAAAb,EACA,SAAAc,EACA,eAAAC,EACA,YAAAC,EACA,SAAAT,EACA,QAAAC,EACA,qBAAAE,EACA,MAAAE,EACA,MAAOH,EAAY,YAAc,MACjC,iBAAiBU,EAAS,CACtBnB,EAAQ,GAAG,UAAWmB,CAAO,CACjC,EACA,oBAAoBA,EAAS,CACzBnB,EAAQ,IAAI,UAAWmB,CAAO,CAClC,EACA,sBAAsBpB,EAAU,CAC5B,OAAO,IAAID,GAAgBC,EAAUC,EAAS3I,GAAeoJ,EAAY,UAAU,EAAGA,EAAY,eAAe,CACrH,EACA,6BAAAQ,EACA,+BAAAC,CACJ,CACJ,CAGA,IAAME,GAAN,cAA4BlC,EAAU,CAClC,sBAAsBmC,EAAWC,EAAW,CACxC,OAAI,KAAK,OAEL,QAAQ,IAAIrH,GAAgBoH,EAAW,KAAK,KAAK,EAAGpH,GAAgBqH,EAAW,KAAK,KAAK,CAAC,EAEvF,CAACpH,GAAY,KAAK,MAAOmH,EAAW,KAAK,YAAY,GACxD,CAACnH,GAAY,KAAK,MAAOoH,EAAW,KAAK,aAAa,CAC9D,CAEA,aAAaC,EAAU,CACdrH,GAAY,KAAK,MAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,KAAK,EAAGqH,CAAQ,EAAG,KAAK,aAAa,GACnG,KAAK,SAASA,CAAQ,CAE9B,CACJ,EACAH,GAAc,iBAAmBI,GACjCJ,GAAc,iBAAmBK,GACjCL,GAAc,YAAcf,GAC5Be,GAAc,UAAU,aAAe,CAAC,EACxCA,GAAc,UAAU,cAAgB,CAAC,EACzC,IAAMM,GAAN,cAA4BN,EAAc,CAC1C,EACAM,GAAc,YAAcrB,GAC5B,SAASmB,GAAiBG,EAAc,CACpC,IAAIxI,EAAO,OAAO,OAAO,KAAK,UAAU,YAAY,EACpD,OAAO,OAAOA,EAAMwI,CAAY,EAChC,KAAK,UAAU,aAAexI,CAClC,CACA,SAASsI,GAAiBG,EAAe,CACrC,IAAIzI,EAAO,OAAO,OAAO,KAAK,UAAU,aAAa,EACrD,OAAO,OAAOA,EAAMyI,CAAa,EACjC,KAAK,UAAU,cAAgBzI,CACnC,CAEA,SAAS0I,GAAOC,EAAKC,EAAS,CACtB,OAAOD,GAAQ,WACfA,EAAIC,CAAO,EAEND,IAELA,EAAI,QAAUC,EAEtB,CAEA,IAAMC,GAAN,cAA8BN,EAAc,CACxC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,GAAKO,GAAK,EACf,KAAK,eAAiB,CAAC,EACvB,KAAK,gBAAkB,CAAC,EACxB,KAAK,SAAYC,GAAO,CACpB,GAAM,CAAE,QAAAvM,CAAQ,EAAI,KAAK,QACnB,CAAE,cAAAwM,CAAc,EAAI,KAAK,OAC3B,CAACxM,EAAQ,yBAA2B,CAACyM,GAA0BD,EAAexM,CAAO,IACrF,KAAK,YAAYuM,CAAE,CAE3B,EACA,KAAK,YAAeA,GAAO,CACnB,KAAK,MAAM,OACXL,GAAO,KAAK,MAAM,MAAOK,CAAE,CAEnC,CACJ,CACA,QAAS,CACL,GAAM,CAAE,MAAAjJ,EAAO,QAAAlG,CAAQ,EAAI,KACrB,CAAE,QAAA4C,CAAQ,EAAI5C,EACd,CAAE,gBAAAsP,EAAiB,iBAAAC,EAAkB,YAAAC,CAAY,EAAItJ,EACrDuJ,EAAQC,GAAaxJ,EAAO,CAAC,EAAG,KAAK,QAAQ,EAC/CyJ,EAAa,GACbC,EACAC,EAAiB,CAAC,EAClBC,EACJ,GAAIR,GAAmB,KAAM,CACzB,IAAMS,EAAqB,OAAOT,GAAoB,WAClDA,EAAgBE,EAAavD,CAAa,EAC1CqD,EACJ,GAAIS,IAAuB,GACvBJ,EAAa,OAEZ,CACD,IAAMK,EAAWD,GAAsB,OAAOA,GAAuB,SACjEC,GAAa,SAAUD,EACvBN,EAAM,wBAA0B,CAAE,OAAQM,EAAmB,IAAK,EAE7DC,GAAa,aAAcD,EAChCF,EAAiB,MAAM,UAAU,MAAM,KAAKE,EAAmB,QAAQ,GAElEC,EACHhK,GAAe+J,CAAkB,EACjC,OAAOA,GAAuB,YAGhCH,EAAeG,EAIfD,EAAuBC,CAE/B,CACJ,MAEIJ,EAAa,CAACN,GAA0BnJ,EAAM,cAAetD,CAAO,EAExE,OAAI+M,GAAcJ,IACdK,EAAeL,EAAiBC,CAAW,GAE/C,KAAK,eAAiBK,EACtB,KAAK,qBAAuBC,EACrB7D,EAAc/F,EAAM,MAAOuJ,EAAOG,CAAY,CACzD,CACA,mBAAoB,CAChB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAAI,CACpC,CACA,oBAAqB,CACjB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAAI,CACpC,CACA,sBAAuB,CACnB,KAAK,uBAAuB,EAAK,CACrC,CACA,uBAAuBK,EAAU,CAC7B,IAAIC,EACJ,GAAM,CAAE,MAAAhK,EAAO,QAAAlG,CAAQ,EAAI,KACrB,CAAE,sBAAAmQ,EAAuB,uBAAAC,CAAuB,EAAIpQ,EAAQ,QAClE,GAAImQ,EAAuB,CACvB,IAAME,GAAiBH,EAAK,KAAK,wBAA0B,MAAQA,IAAO,OAASA,EAAqFE,IAAuBlK,EAAM,aAAa,EAC9MmK,GACAF,EAAsB,OAAO,OAAO,OAAO,OAAO,CAAE,GAAI,KAAK,GAAI,SAAAF,EAAU,YAAa,KAAK,KAAM,qBAAsB,KAAK,YAC1H,cAAAI,CAAc,EAAGnK,CAAK,EAAG,CAAE,WAAYA,EAAM,WAAa,CAAC,GAAG,OAAOoK,EAAQ,CAAE,CAAC,CAAC,CAE7F,CACJ,CACA,sBAAuB,CACnB,GAAM,CAAE,eAAAT,EAAgB,gBAAAU,CAAgB,EAAI,KACtCpB,EAAK,KAAK,KAChB,GAAI,CAACnK,GAAc6K,EAAgBU,CAAe,EAAG,CACjDA,EAAgB,QAAQC,EAAa,EACrC,QAASC,KAAWZ,EAChBV,EAAG,YAAYsB,CAAO,EAE1B,KAAK,gBAAkBZ,CAC3B,CACJ,CACJ,EACAZ,GAAgB,iBAAiB,CAC7B,UAAWjK,GACX,QAASD,GACT,QAASiC,GACT,YAAajC,EACjB,CAAC,EAOD,SAASsK,GAA0BD,EAAexM,EAAS,CACvD,IAAIsN,EACJ,MAAO,GAAQtN,EAAQ,uBACnBwM,IACE,GAAAc,EAAKtN,EAAQ,0BAA4B,MAAQsN,IAAO,SAAkBA,EAAGd,CAAa,GACpG,CACA,SAASM,GAAaxJ,EAAOwK,EAAiBC,EAAO,CACjD,IAAMlB,EAAQ,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGvJ,EAAM,OAAO,EAAG,CAAE,IAAKyK,CAAM,CAAC,EAC5E,OAAIzK,EAAM,WAAawK,KACnBjB,EAAM,WAAavJ,EAAM,WAAa,CAAC,GAClC,OAAOwK,GAAmB,CAAC,CAAC,EAC5B,OAAOjB,EAAM,WAAa,CAAC,CAAC,EAC5B,OAAO,OAAO,EACd,KAAK,GAAG,GAEbvJ,EAAM,UACNuJ,EAAM,MAAQvJ,EAAM,SAEjBuJ,CACX,CACA,SAASa,GAASrK,EAAK,CACnB,MAAO,EAAQA,CACnB,CAEA,IAAM2K,GAAWxE,GAAc,CAAC,EAE1ByE,GAAN,cAA+B1E,EAAU,CACrC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,aAAe2E,GAAqB,KAAK,OAAW,IAAI,EAC7D,KAAK,SAAY3B,GAAO,CACpB,KAAK,GAAKA,EACN,KAAK,MAAM,QACXL,GAAO,KAAK,MAAM,MAAOK,CAAE,EACvBA,GAAM,KAAK,iBACX,KAAK,kBAAkB,EAGnC,CACJ,CACA,QAAS,CACL,GAAM,CAAE,MAAAjJ,CAAM,EAAI,KACZ6K,EAAsBC,GAAmB9K,EAAM,mBAAoBA,EAAM,WAAW,EAC1F,GAAIA,EAAM,SAAU,CAChB,IAAM+K,EAAUvB,GAAaxJ,EAAO6K,EAAqB,KAAK,QAAQ,EAChErE,EAAWxG,EAAM,SAAS,KAAK,aAAcA,EAAM,YAAa+K,CAAO,EAC7E,OAAI/K,EAAM,MACC+F,EAAc/F,EAAM,MAAO+K,EAASvE,CAAQ,EAG5CA,CAEf,KAEI,QAAOT,EAAegD,GAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG/I,CAAK,EAAG,CAAE,MAAO,KAAK,SAAU,MAAOA,EAAM,OAAS,MAAO,WAAYA,EAAM,WAAa,CAAC,GAAG,OAAO6K,CAAmB,EAAG,SAAU,KAAK,OAAQ,CAAC,CAAC,CAEtO,CACA,mBAAoB,CAChB,IAAIb,EAAIgB,EACJ,KAAK,IACJA,GAAMhB,EAAK,KAAK,OAAO,YAAc,MAAQgB,IAAO,QAAkBA,EAAG,KAAKhB,EAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,MAAM,WAAW,EAAG,CAAE,GAAI,KAAK,EAAG,CAAC,CAAC,EAG5J,KAAK,gBAAkB,EAE/B,CACA,sBAAuB,CACnB,IAAIA,EAAIgB,GACPA,GAAMhB,EAAK,KAAK,OAAO,eAAiB,MAAQgB,IAAO,QAAkBA,EAAG,KAAKhB,EAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,MAAM,WAAW,EAAG,CAAE,GAAI,KAAK,EAAG,CAAC,CAAC,CACnK,CACJ,EACAW,GAAiB,YAAcD,GAC/B,SAASE,GAAqBK,EAAoBjL,EAAO,CACrD,IAAMkL,EAAcD,EAAmB,MACvC,OAAOlF,EAAegD,GAAkB,OAAO,OAAO,CAAE,YAAamC,EAAY,YAAa,cAAeA,EAAY,cAAe,gBAAiBA,EAAY,gBAAiB,iBAAkBA,EAAY,iBAAkB,SAAUD,EAAmB,OAAQ,EAAGjL,CAAK,CAAC,CACxR,CAEA,SAAS8K,GAAmBK,EAAoB7B,EAAa,CACzD,IAAM8B,EAAa,OAAOD,GAAuB,WAC7CA,EAAmB7B,CAAW,EAC9B6B,GAAsB,CAAC,EAC3B,OAAO,OAAOC,GAAe,SAAW,CAACA,CAAU,EAAIA,CAC3D,CAEA,IAAMC,GAAN,cAA4B5C,EAAc,CACtC,QAAS,CACL,GAAI,CAAE,MAAAzI,EAAO,QAAAlG,CAAQ,EAAI,KACrB,CAAE,QAAA4C,CAAQ,EAAI5C,EACdwP,EAAc,CAAE,KAAMxP,EAAQ,OAAQ,EAC1C,OAAQiM,EAAc4E,GAAkB,OAAO,OAAO,CAAC,EAAG3K,EAAO,CAAE,MAAOA,EAAM,OAAS,MAAO,UAAW,CACnG,GAAGsL,GAAoBtL,EAAM,QAAQ,EACrC,GAAIA,EAAM,WAAa,CAAC,CAC5B,EAAG,YAAasJ,EAAa,mBAAoB5M,EAAQ,eAAgB,cAAe,OAAW,SAAUA,EAAQ,aAAc,YAAaA,EAAQ,eAAgB,CAAC,EAAG,IAAMsD,EAAM,QAAQ,CACxM,CACJ,EACA,SAASsL,GAAoBhE,EAAU,CACnC,MAAO,CACH,MAAMA,EAAS,IAAI,QACnB,SACJ,CACJ,CAEA,SAASiE,GAAWtN,EAAOyJ,EAAS,CAChC,IAAI3N,EAAQ,KACRC,EAAM,KAUV,OATIiE,EAAM,QACNlE,EAAQ2N,EAAQ,aAAazJ,EAAM,KAAK,GAExCA,EAAM,MACNjE,EAAM0N,EAAQ,aAAazJ,EAAM,GAAG,GAEpC,CAAClE,GAAS,CAACC,GAGXD,GAASC,GAAOA,EAAMD,EACf,KAEJ,CAAE,MAAAA,EAAO,IAAAC,CAAI,CACxB,CAGA,SAASwR,GAAaC,EAAQC,EAAiB,CAC3C,IAAIC,EAAiB,CAAC,EAClB,CAAE,MAAA5R,CAAM,EAAI2R,EACZ5L,EACA8L,EAGJ,IADAH,EAAO,KAAKI,EAAa,EACpB/L,EAAI,EAAGA,EAAI2L,EAAO,OAAQ3L,GAAK,EAChC8L,EAAYH,EAAO3L,CAAC,EAEhB8L,EAAU,MAAQ7R,GAClB4R,EAAe,KAAK,CAAE,MAAA5R,EAAO,IAAK6R,EAAU,KAAM,CAAC,EAEnDA,EAAU,IAAM7R,IAChBA,EAAQ6R,EAAU,KAI1B,OAAI7R,EAAQ2R,EAAgB,KACxBC,EAAe,KAAK,CAAE,MAAA5R,EAAO,IAAK2R,EAAgB,GAAI,CAAC,EAEpDC,CACX,CACA,SAASE,GAAcC,EAAQC,EAAQ,CACnC,OAAOD,EAAO,MAAM,QAAQ,EAAIC,EAAO,MAAM,QAAQ,CACzD,CACA,SAASC,GAAgBF,EAAQC,EAAQ,CACrC,GAAI,CAAE,MAAAhS,EAAO,IAAAC,CAAI,EAAI8R,EACjBG,EAAW,KACf,OAAIF,EAAO,QAAU,OACbhS,IAAU,KACVA,EAAQgS,EAAO,MAGfhS,EAAQ,IAAI,KAAK,KAAK,IAAIA,EAAM,QAAQ,EAAGgS,EAAO,MAAM,QAAQ,CAAC,CAAC,GAGtEA,EAAO,KAAO,OACV/R,IAAQ,KACRA,EAAM+R,EAAO,IAGb/R,EAAM,IAAI,KAAK,KAAK,IAAIA,EAAI,QAAQ,EAAG+R,EAAO,IAAI,QAAQ,CAAC,CAAC,IAGhEhS,IAAU,MAAQC,IAAQ,MAAQD,EAAQC,KAC1CiS,EAAW,CAAE,MAAAlS,EAAO,IAAAC,CAAI,GAErBiS,CACX,CAKA,SAASC,GAAgBC,EAAQC,EAAQ,CACrC,OAAQD,EAAO,MAAQ,MAAQC,EAAO,QAAU,MAAQD,EAAO,IAAMC,EAAO,SACvED,EAAO,QAAU,MAAQC,EAAO,MAAQ,MAAQD,EAAO,MAAQC,EAAO,IAC/E,CAKA,SAASC,GAAoBC,EAAOC,EAAM,CACtC,OAAQD,EAAM,QAAU,MAAQC,GAAQD,EAAM,SACzCA,EAAM,MAAQ,MAAQC,EAAOD,EAAM,IAC5C,CAGA,SAASE,GAAuBD,EAAMD,EAAO,CACzC,OAAIA,EAAM,OAAS,MAAQC,EAAOD,EAAM,MAC7BA,EAAM,MAEbA,EAAM,KAAO,MAAQC,GAAQD,EAAM,IAC5B,IAAI,KAAKA,EAAM,IAAI,QAAQ,EAAI,CAAC,EAEpCC,CACX,CAMA,SAASE,GAAuBC,EAAY,CACxC,IAAIC,EAAS,KAAK,MAAMC,GAASF,EAAW,MAAOA,EAAW,GAAG,CAAC,GAAK,EACnEG,EAAQC,GAAWJ,EAAW,KAAK,EACnCK,EAAMC,GAAQH,EAAOF,CAAM,EAC/B,MAAO,CAAE,MAAAE,EAAO,IAAAE,CAAI,CACxB,CAGA,SAASE,GAAuBP,EAAYQ,EAAmBC,GAAe,CAAC,EAAG,CAC9E,IAAIC,EAAW,KACXC,EAAS,KACb,GAAIX,EAAW,IAAK,CAChBW,EAASP,GAAWJ,EAAW,GAAG,EAClC,IAAIY,EAAYZ,EAAW,IAAI,QAAQ,EAAIW,EAAO,QAAQ,EAItDC,GAAaA,GAAaC,GAAUL,CAAgB,IACpDG,EAASL,GAAQK,EAAQ,CAAC,EAElC,CACA,OAAIX,EAAW,QACXU,EAAWN,GAAWJ,EAAW,KAAK,EAElCW,GAAUA,GAAUD,IACpBC,EAASL,GAAQI,EAAU,CAAC,IAG7B,CAAE,MAAOA,EAAU,IAAKC,CAAO,CAC1C,CAMA,SAASG,GAAUC,EAAOC,EAAOC,EAASC,EAAW,CACjD,OAAIA,IAAc,OACPC,GAAeF,EAAQ,eAAeF,EAAOC,CAAK,EAAG,MAAM,EAElEE,IAAc,QACPC,GAAeF,EAAQ,gBAAgBF,EAAOC,CAAK,EAAG,OAAO,EAEjEI,GAAeL,EAAOC,CAAK,CACtC,CAEA,SAASK,GAAkBC,EAAaC,EAAQ,CAC5C,OAAQA,EAAO,KAAM,CACjB,IAAK,cACD,OAAOA,EAAO,WAClB,QACI,OAAOD,CACf,CACJ,CACA,SAASE,GAAeC,EAASR,EAAS,CACtC,IAAIS,EAAmBD,EAAQ,YAE/B,OAAIC,GAAoB,KACbT,EAAQ,aAAaS,CAAgB,EAEzCC,GAAOF,EAAQ,IAAKR,CAAO,CACtC,CACA,SAASU,GAAOC,EAAUX,EAAS,CAI/B,OAHI,OAAOW,GAAa,aACpBA,EAAWA,EAAS,GAEpBA,GAAY,KACLX,EAAQ,gBAAgB,EAE5BA,EAAQ,aAAaW,CAAQ,CACxC,CAEA,IAAMC,GAAN,KAA2B,CACvB,YAAYC,EAAO,CACf,KAAK,MAAQA,EACb,KAAK,QAAUH,GAAOG,EAAM,SAAUA,EAAM,OAAO,EACnD,KAAK,eAAe,CACxB,CAIA,UAAUC,EAAoBT,EAAaU,EAAc,CACrD,GAAI,CAAE,QAAAf,CAAQ,EAAI,KAAK,MACnBgB,EAAWhB,EAAQ,SAASA,EAAQ,QAAQK,EAAaS,EAAmB,gBAAgB,EAChGA,EAAmB,aAAa,EAChC,OAAO,KAAK,MAAME,EAAU,GAAID,CAAY,CAChD,CAEA,UAAUD,EAAoBT,EAAaU,EAAc,CACrD,GAAI,CAAE,QAAAf,CAAQ,EAAI,KAAK,MACnBiB,EAAWjB,EAAQ,IAAIA,EAAQ,QAAQK,EAAaS,EAAmB,gBAAgB,EAC3FA,EAAmB,aAAa,EAChC,OAAO,KAAK,MAAMG,EAAU,EAAGF,CAAY,CAC/C,CAIA,MAAMV,EAAaa,EAAWH,EAAe,GAAM,CAC/C,GAAI,CAAE,MAAAF,CAAM,EAAI,KACZM,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,OAAAL,EAAa,KAAK,gBAAgB,EAClCA,EAAa,KAAK,eAAeA,CAAU,EACvCJ,IACAV,EAAcoB,GAAuBpB,EAAac,CAAU,GAEhEC,EAAc,KAAK,sBAAsBf,EAAaa,CAAS,EAC/DG,EAAgB,0BAA0B,KAAKD,EAAY,IAAI,EAC/DE,EAAc,KAAK,iBAAiB,KAAK,eAAeF,EAAY,KAAK,EAAGA,EAAY,KAAMC,CAAa,EAC3GC,EAAc,KAAK,eAAeA,CAAW,EAC7CC,EAAcD,EACTT,EAAM,sBACPU,EAAcG,GAAgBH,EAAaH,EAAY,KAAK,GAEhEG,EAAc,KAAK,kBAAkBA,CAAW,EAChDA,EAAcG,GAAgBH,EAAaJ,CAAU,EAGrDK,EAAUG,GAAgBP,EAAY,MAAOD,CAAU,EAElDS,GAAoBN,EAAajB,CAAW,IAC7CA,EAAciB,EAAY,OAEvB,CACH,YAAAjB,EAGA,WAAAc,EAGA,aAAcC,EAAY,MAE1B,iBAAkBA,EAAY,KAC9B,cAAAC,EAGA,YAAAE,EAGA,YAAAD,EAEA,YAAaT,EAAM,YAEnB,YAAaA,EAAM,YACnB,QAAAW,EAEA,cAAe,KAAK,mBAAmBJ,EAAY,QAAQ,CAE/D,CACJ,CAIA,iBAAkB,CACd,IAAIS,EAAQ,KAAK,MAAM,gBACnBC,EAAc,OAAOD,GAAU,WAC7BA,EAAM,KAAK,KAAK,MAAM,YAAa,KAAK,OAAO,EAC/CA,EACN,OAAO,KAAK,YAAYC,CAAW,GAC/B,CAAE,MAAO,KAAM,IAAK,IAAK,CACjC,CAKA,sBAAsBC,EAAMb,EAAW,CACnC,GAAI,CAAE,MAAAL,CAAM,EAAI,KACZmB,EAAW,KACXC,EAAO,KACPC,EAAQ,KACRC,EACJ,OAAItB,EAAM,UACNmB,EAAWnB,EAAM,SACjBoB,EAAOpB,EAAM,aACbqB,EAAQ,KAAK,uBAAuBH,EAAMb,EAAWc,EAAUC,CAAI,IAE7DE,EAAW,KAAK,MAAM,WAC5BF,EAAO,MACPC,EAAQ,KAAK,uBAAuBH,EAAMb,EAAWiB,CAAQ,IAEvDD,EAAQ,KAAK,wBAAwBH,CAAI,GAC/CE,EAAOpB,EAAM,QAAQ,kBAAkBqB,EAAM,MAAOA,EAAM,GAAG,EAAE,MAG/DF,EAAW,KAAK,oBAAoB,EACpCC,EAAOG,GAA4BJ,CAAQ,EAAE,KAC7CE,EAAQ,KAAK,uBAAuBH,EAAMb,EAAWc,EAAUC,CAAI,GAEhE,CAAE,SAAAD,EAAU,KAAAC,EAAM,MAAAC,CAAM,CACnC,CACA,qBAAsB,CAClB,OAAOhC,GAAe,CAAE,IAAK,CAAE,CAAC,CACpC,CAGA,kBAAkBgC,EAAO,CACrB,GAAI,CAAE,QAAAlC,EAAS,eAAAqC,EAAgB,YAAAC,EAAa,YAAAC,CAAY,EAAI,KAAK,MAC7D,CAAE,MAAAC,EAAO,IAAAC,CAAI,EAAIP,EACrB,OAAIG,IAEIK,GAAYJ,CAAW,EAAI,IAC3BE,EAAQG,GAAWH,CAAK,EACxBA,EAAQxC,EAAQ,IAAIwC,EAAOF,CAAW,GAGtCI,GAAYH,CAAW,EAAI,IAC3BE,EAAME,GAAWF,CAAG,EACpBA,EAAMG,GAAQH,EAAK,EAAE,EACrBA,EAAMzC,EAAQ,IAAIyC,EAAKF,CAAW,IAGnC,CAAE,MAAAC,EAAO,IAAAC,CAAI,CACxB,CAGA,uBAAuBV,EAAMb,EAAWc,EAAUC,EAAM,CACpD,GAAI,CAAE,QAAAjC,EAAS,cAAA6C,CAAc,EAAI,KAAK,MAClCL,EACAC,EACAK,EAEJ,GAAI,CAACD,EAAe,CAChB,GAAI,CAAE,cAAAE,CAAc,EAAI,KAAK,MACzBA,GAEIC,GAAUD,CAAa,EAAIC,GAAUhB,CAAQ,EAC7Ca,EAAgBT,GAA4BW,CAAa,EAAE,KAO/DF,EAAgBZ,CAExB,CAEIS,GAAYV,CAAQ,GAAK,GACrB,KAAK,YAAYQ,CAAK,IACtBA,EAAQ,KAAK,eAAeA,EAAOtB,CAAS,EAC5CsB,EAAQG,GAAWH,CAAK,GAGhC,SAASS,GAAa,CAClBT,EAAQxC,EAAQ,QAAQ+B,EAAMc,CAAa,EAC3CJ,EAAMzC,EAAQ,IAAIwC,EAAOR,CAAQ,EACjCc,EAAM,CAAE,MAAAN,EAAO,IAAAC,CAAI,CACvB,CACA,OAAAQ,EAAW,EAEN,KAAK,eAAeH,CAAG,IACxBf,EAAO,KAAK,eAAeA,EAAMb,CAAS,EAC1C+B,EAAW,GAERH,CACX,CAEA,uBAAuBf,EAAMb,EAAWiB,EAAU,CAC9C,GAAI,CAAE,QAAAnC,EAAS,cAAA6C,CAAc,EAAI,KAAK,MAClCK,EAAe,EACfV,EAAQT,EACRU,EACAI,IACAL,EAAQxC,EAAQ,QAAQwC,EAAOK,CAAa,GAEhDL,EAAQG,GAAWH,CAAK,EACxBA,EAAQ,KAAK,eAAeA,EAAOtB,CAAS,EAC5CuB,EAAMD,EACN,GACIC,EAAMG,GAAQH,EAAK,CAAC,EACf,KAAK,YAAYA,CAAG,IACrBS,GAAgB,SAEfA,EAAef,GACxB,MAAO,CAAE,MAAAK,EAAO,IAAAC,CAAI,CACxB,CAGA,wBAAwBV,EAAM,CAC1B,GAAI,CAAE,MAAAlB,CAAM,EAAI,KACZgB,EAAQhB,EAAM,kBACdiB,EAAc,OAAOD,GAAU,WAC7BA,EAAM,KAAKhB,EAAM,YAAaA,EAAM,QAAQ,OAAOkB,CAAI,CAAC,EACxDF,EACFK,EAAQ,KAAK,YAAYJ,CAAW,EACxC,OAAII,IAAUA,EAAM,OAAS,MAAQA,EAAM,KAAO,MACvC,KAEJA,CACX,CAIA,iBAAiBiB,EAAcC,EAAkB/B,EAAe,CAC5D,OAAO8B,CACX,CAGA,mBAAmBE,EAAU,CACzB,GAAI,CAAE,cAAAN,CAAc,EAAI,KAAK,MACzBO,EACJ,OAAIP,KAGCO,EAAkB,KAAK,MAAM,eACvBpD,GAAe,EAAGoD,CAAe,EAExCD,GAGGnD,GAAe,CAAE,KAAM,CAAE,CAAC,EACrC,CACA,YAAYqD,EAAY,CACpB,GAAIA,EAAY,CACZ,IAAIrB,EAAQsB,GAAWD,EAAY,KAAK,MAAM,OAAO,EACrD,OAAIrB,IACAA,EAAQuB,GAAuBvB,CAAK,GAEjCA,CACX,CACA,OAAO,IACX,CAIA,gBAAiB,CACb,IAAIwB,EAAa,KAAK,MAAM,YAAc,CAAC,EACvCC,EAAkB,CAAC,EACnBC,EAAS,EACTC,EAIJ,IAHI,KAAK,MAAM,WAAa,IACxBH,EAAW,KAAK,EAAG,CAAC,EAEnBG,EAAI,EAAGA,EAAI,EAAGA,GAAK,GACdF,EAAgBE,CAAC,EAAIH,EAAW,QAAQG,CAAC,IAAM,MACjDD,GAAU,GAGlB,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,oBAAoB,EAExC,KAAK,gBAAkBD,CAC3B,CAGA,eAAezB,EAAO,CAClB,GAAI,CAAE,MAAAM,EAAO,IAAAC,CAAI,EAAIP,EAOrB,OANIM,IACAA,EAAQ,KAAK,eAAeA,CAAK,GAEjCC,IACAA,EAAM,KAAK,eAAeA,EAAK,GAAI,EAAI,GAEvCD,GAAS,MAAQC,GAAO,MAAQD,EAAQC,EACjC,CAAE,MAAAD,EAAO,IAAAC,CAAI,EAEjB,IACX,CAGA,YAAYqB,EAAK,CACb,OAAIA,aAAe,OACfA,EAAMA,EAAI,UAAU,GAEjB,KAAK,gBAAgBA,CAAG,CACnC,CAMA,eAAe/B,EAAMgC,EAAM,EAAGC,EAAc,GAAO,CAC/C,KAAO,KAAK,iBAAiBjC,EAAK,UAAU,GAAKiC,EAAcD,EAAM,GAAK,GAAK,CAAC,GAC5EhC,EAAOa,GAAQb,EAAMgC,CAAG,EAE5B,OAAOhC,CACX,CACJ,EAEA,SAASkC,GAAoBC,EAAOhC,EAAOiC,EAAgBC,EAAc,CACrE,MAAO,CACH,WAAYC,GAAK,EACjB,MAAAH,EACA,MAAAhC,EACA,eAAgBiC,GAAyB,KACzC,aAAcC,GAAuB,IACzC,CACJ,CAEA,SAASE,GAAeC,EAASC,EAAexE,EAASyE,EAAgB,CACrE,QAASZ,EAAI,EAAGA,EAAIY,EAAe,OAAQZ,GAAK,EAAG,CAC/C,IAAIa,EAASD,EAAeZ,CAAC,EAAE,MAAMU,EAASvE,CAAO,EACrD,GAAI0E,EAAQ,CACR,GAAI,CAAE,OAAAC,CAAO,EAAIJ,EACjB,OAAII,GAAU,OACVA,EAASH,EACLG,GAAU,OACVA,EAASD,EAAO,YACZC,GAAU,OACVA,EAAS,MAId,CACH,OAAAA,EACA,SAAUD,EAAO,SACjB,SAAUA,EAAO,SACjB,OAAQb,CACZ,CACJ,CACJ,CACA,OAAO,IACX,CACA,SAASe,GAAgBC,EAAYC,EAAcC,EAAS,CACxD,GAAI,CAAE,QAAA/E,EAAS,YAAAgF,EAAa,QAAAxE,CAAQ,EAAIuE,EACpC,CAAE,KAAAE,EAAM,UAAAC,CAAU,EAAIL,EAG1BK,EAAYC,GAAWD,EAAYE,GAAa,CAACH,EAAKG,EAAS,KAAK,EAAE,YAAY,EAClF,QAASlB,KAASe,EAAM,CACpB,IAAII,EAAMJ,EAAKf,CAAK,EACpB,GAAImB,EAAI,aAAc,CAClB,GAAI,CAAE,SAAArD,CAAS,EAAIqD,EAAI,aAClBrD,IACDA,EAAWqD,EAAI,OACX7E,EAAQ,2BACRA,EAAQ,2BAEhB,IAAI8E,EAASC,GAAsBF,EAAKrD,EAAU8C,EAAc9E,EAASgF,EAAY,cAAc,EACnG,QAASxC,KAAS8C,EAAQ,CACtB,IAAIF,EAAWnB,GAAoBC,EAAO,CACtC,MAAA1B,EACA,IAAKxC,EAAQ,IAAIwC,EAAOR,CAAQ,CACpC,CAAC,EACDkD,EAAUE,EAAS,UAAU,EAAIA,CACrC,CACJ,CACJ,CACA,MAAO,CAAE,KAAAH,EAAM,UAAAC,CAAU,CAC7B,CAIA,SAASK,GAAsBC,EAAUxD,EAAU8C,EAAc9E,EAASyE,EAAgB,CAEtF,IAAIgB,EADUhB,EAAee,EAAS,aAAa,MAAM,EACnC,OAAOA,EAAS,aAAa,SAAU,CACzD,MAAOxF,EAAQ,SAAS8E,EAAa,MAAO9C,CAAQ,EACpD,IAAK8C,EAAa,GACtB,EAAG9E,CAAO,EAEV,OAAIwF,EAAS,SACTC,EAAUA,EAAQ,IAAI9C,EAAU,GAE7B8C,CACX,CAEA,IAAMC,GAA0B,CAC5B,GAAI,OACJ,QAAS,OACT,MAAO,OACP,IAAK,OACL,YAAa,OACjB,EACMC,GAAsB,CACxB,MAAOC,EACP,IAAKA,EACL,KAAMA,EACN,OAAQ,OACZ,EACMC,GAAiB,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,EAAuB,EAAGC,EAAmB,EAAG,CAAE,cAAeC,CAAS,CAAC,EAChJ,SAASE,GAAWC,EAAKC,EAAajB,EAASkB,EAAgBC,EAAWC,GAAmBpB,CAAO,EAAGqB,EAAUC,EAAe,CAC5H,GAAI,CAAE,QAAA9B,EAAS,MAAA+B,CAAM,EAAIC,GAAeR,EAAKhB,EAASmB,CAAQ,EAC1D1B,EAAgBgC,GAAuBR,EAAajB,CAAO,EAC3D0B,EAAenC,GAAeC,EAASC,EAAeO,EAAQ,QAASA,EAAQ,YAAY,cAAc,EAC7G,GAAI0B,EAAc,CACd,IAAIpB,EAAMqB,GAAcnC,EAAS+B,EAAON,EAAcA,EAAY,SAAW,GAAIS,EAAa,OAAQ,EAAQA,EAAa,SAAW1B,EAASqB,CAAQ,EACvJ,OAAAf,EAAI,aAAe,CACf,OAAQoB,EAAa,OACrB,SAAUA,EAAa,SACvB,SAAUA,EAAa,QAC3B,EACO,CAAE,IAAApB,EAAK,SAAU,IAAK,CACjC,CACA,IAAIsB,EAAYC,GAAYrC,EAASC,EAAeO,EAASkB,CAAc,EAC3E,GAAIU,EAAW,CACX,IAAItB,EAAMqB,GAAcnC,EAAS+B,EAAON,EAAcA,EAAY,SAAW,GAAIW,EAAU,OAAQA,EAAU,OAAQ5B,EAASqB,CAAQ,EAClIhB,EAAWnB,GAAoBoB,EAAI,MAAOsB,EAAU,MAAOA,EAAU,eAAgBA,EAAU,YAAY,EAC/G,OAAIN,GAAiBhB,EAAI,UAAYgB,EAAchB,EAAI,QAAQ,IAC3DD,EAAS,WAAaiB,EAAchB,EAAI,QAAQ,GAE7C,CAAE,IAAAA,EAAK,SAAAD,CAAS,CAC3B,CACA,OAAO,IACX,CACA,SAASmB,GAAeR,EAAKhB,EAASmB,EAAWC,GAAmBpB,CAAO,EAAG,CAC1E,OAAO8B,GAAYd,EAAKG,CAAQ,CACpC,CACA,SAASC,GAAmBpB,EAAS,CACjC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG+B,EAAiB,EAAGjB,EAAc,EAAGd,EAAQ,YAAY,aAAa,CAC/H,CAKA,SAAS2B,GAAcnC,EAAS+B,EAAOS,EAAUpC,EAAQqC,EAAQjC,EAASqB,EAAU,CAChF,IAAIf,EAAM,CACN,MAAOd,EAAQ,OAAS,GACxB,QAASA,EAAQ,SAAW,GAC5B,SAAUA,EAAQ,IAAM,GACxB,IAAKA,EAAQ,KAAO,GACpB,aAAc,KACd,OAAS6B,GAAY7B,EAAQ,GAAM6B,EAAS7B,EAAQ,EAAE,EAAI,KAAOF,GAAK,EACtE,SAAA0C,EACA,OAAApC,EACA,OAAAqC,EACA,YAAazC,EAAQ,YACrB,GAAI0C,GAAc1C,EAASQ,CAAO,EAClC,cAAe,OAAO,OAAO,OAAO,OAAO,CAAC,EAAIR,EAAQ,eAAiB,CAAC,CAAE,EAAG+B,CAAK,CACxF,EACA,QAASY,KAAenC,EAAQ,YAAY,qBACxC,OAAO,OAAOM,EAAK6B,EAAY3C,CAAO,CAAC,EAG3C,cAAO,OAAOc,EAAI,GAAG,UAAU,EAC/B,OAAO,OAAOA,EAAI,aAAa,EACxBA,CACX,CACA,SAASuB,GAAYrC,EAASC,EAAeO,EAASkB,EAAgB,CAClE,GAAI,CAAE,OAAAtB,CAAO,EAAIJ,EACb4C,EACAC,EAAc,KACdJ,EAAS,GACTK,EACAC,EAAY,KACZC,EAAahD,EAAQ,OAAS,KAAOA,EAAQ,MAAQA,EAAQ,KAEjE,GADA4C,EAAYpC,EAAQ,QAAQ,iBAAiBwC,CAAU,EACnDJ,EACAC,EAAcD,EAAU,eAEnB,CAAClB,EACN,OAAO,KAEX,OAAI1B,EAAQ,KAAO,OACf8C,EAAUtC,EAAQ,QAAQ,iBAAiBR,EAAQ,GAAG,GAEtDI,GAAU,OACNH,GAAiB,KACjBG,EAASH,EAITG,GAAU,CAACwC,GAAaA,EAAU,qBAC7B,CAACE,GAAWA,EAAQ,oBAG7B1C,GAAUyC,IACVA,EAAczE,GAAWyE,CAAW,GAEpCC,IACAC,EAAYD,EAAQ,OAChB1C,IACA2C,EAAY3E,GAAW2E,CAAS,GAEhCF,GAAeE,GAAaF,IAC5BE,EAAY,OAGhBA,EACAN,EAAS,GAEHf,IACNe,EAASjC,EAAQ,QAAQ,oBAAsB,GAC/CuC,EAAYvC,EAAQ,QAAQ,IAAIqC,EAAazC,EACzCI,EAAQ,QAAQ,2BAChBA,EAAQ,QAAQ,yBAAyB,GAE1C,CACH,OAAAJ,EACA,OAAAqC,EACA,MAAO,CAAE,MAAOI,EAAa,IAAKE,CAAU,EAC5C,eAAgBH,EAAYA,EAAU,UAAY,KAClD,aAAcE,EAAUA,EAAQ,UAAY,IAChD,CACJ,CACA,SAASb,GAAuBR,EAAajB,EAAS,CAClD,IAAIjC,EAAM,KACV,OAAIkD,IACAlD,EAAMkD,EAAY,eAElBlD,GAAO,OACPA,EAAMiC,EAAQ,QAAQ,eAEnBjC,CACX,CAEA,SAAS0E,GAAYC,EAAWzB,EAAajB,EAASkB,EAAgBG,EAAUC,EAAe,CAC3F,IAAIxB,EAAa6C,GAAsB,EACnCC,EAAgBxB,GAAmBpB,CAAO,EAC9C,QAAS6C,KAAYH,EAAW,CAC5B,IAAII,EAAQ/B,GAAW8B,EAAU5B,EAAajB,EAASkB,EAAgB0B,EAAevB,EAAUC,CAAa,EACzGwB,GACAC,GAAkBD,EAAOhD,CAAU,CAE3C,CACA,OAAOA,CACX,CACA,SAASiD,GAAkBD,EAAOhD,EAAa6C,GAAsB,EAAG,CACpE,OAAA7C,EAAW,KAAKgD,EAAM,IAAI,KAAK,EAAIA,EAAM,IACrCA,EAAM,WACNhD,EAAW,UAAUgD,EAAM,SAAS,UAAU,EAAIA,EAAM,UAErDhD,CACX,CAIA,SAASkD,GAAkBlD,EAAYmD,EAAY,CAC/C,IAAI5C,EAAWP,EAAW,UAAUmD,CAAU,EAC9C,GAAI5C,EAAU,CACV,IAAIC,EAAMR,EAAW,KAAKO,EAAS,KAAK,EAEpC6C,EAAWC,GAAqBrD,EAAasD,GAAYC,GAAmB/C,EAAK8C,CAAO,CAAC,EAG7F,OAAAF,EAAS,KAAK5C,EAAI,KAAK,EAAIA,EAC3B4C,EAAS,UAAU7C,EAAS,UAAU,EAAIA,EACnC6C,CACX,CACA,OAAOP,GAAsB,CACjC,CACA,SAASU,GAAmBC,EAAMC,EAAM,CACpC,MAAO,GAAQD,EAAK,SAAWA,EAAK,UAAYC,EAAK,QACzD,CACA,SAASZ,IAAwB,CAC7B,MAAO,CAAE,KAAM,CAAC,EAAG,UAAW,CAAC,CAAE,CACrC,CACA,SAASa,GAAiBC,EAAQC,EAAQ,CACtC,MAAO,CACH,KAAM,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,IAAI,EAAGC,EAAO,IAAI,EAC/D,UAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,SAAS,EAAGC,EAAO,SAAS,CAClF,CACJ,CACA,SAASP,GAAqBrD,EAAY6D,EAAY,CAClD,IAAIzD,EAAOE,GAAWN,EAAW,KAAM6D,CAAU,EAC7CxD,EAAYC,GAAWN,EAAW,UAAYO,GAAcH,EAAKG,EAAS,KAAK,CAClF,EACD,MAAO,CAAE,KAAAH,EAAM,UAAAC,CAAU,CAC7B,CACA,SAASyD,GAAqBC,EAAQC,EAAK,CACvC,GAAI,CAAE,KAAA5D,EAAM,UAAAC,CAAU,EAAI0D,EACtBE,EAAe,CAAC,EAChBC,EAAoB,CAAC,EACzB,QAAS7E,KAASe,EACT4D,EAAI,KAAK3E,CAAK,IACf4E,EAAa5E,CAAK,EAAIe,EAAKf,CAAK,GAGxC,QAAS8D,KAAc9C,EACf,CAAC2D,EAAI,UAAUb,CAAU,GACzBc,EAAa5D,EAAU8C,CAAU,EAAE,KAAK,IAExCe,EAAkBf,CAAU,EAAI9C,EAAU8C,CAAU,GAG5D,MAAO,CACH,KAAMc,EACN,UAAWC,CACf,CACJ,CAEA,SAASC,GAAoBnH,EAAOkD,EAAS,CACzC,OAAI,MAAM,QAAQlD,CAAK,EACZ2F,GAAY3F,EAAO,KAAMkD,EAAS,EAAI,EAE7C,OAAOlD,GAAU,UAAYA,EACtB2F,GAAY,CAAC3F,CAAK,EAAG,KAAMkD,EAAS,EAAI,EAE/ClD,GAAS,KACF,OAAOA,CAAK,EAEhB,IACX,CAEA,SAASoH,GAAgBlD,EAAK,CAC1B,OAAI,MAAM,QAAQA,CAAG,EACVA,EAEP,OAAOA,GAAQ,SACRA,EAAI,MAAM,KAAK,EAEnB,CAAC,CACZ,CAKA,IAAMe,GAAoB,CACtB,QAAS,OACT,SAAU,QACV,cAAe,QACf,iBAAkB,QAClB,WAAYlB,EACZ,QAASA,EACT,MAAOA,EACP,UAAWqD,GACX,WAAYA,GACZ,MAAO,OACP,gBAAiB,OACjB,YAAa,OACb,UAAW,MACf,EACMC,GAAiB,CACnB,QAAS,KACT,cAAe,KACf,iBAAkB,KAClB,YAAa,CAAC,EACd,QAAS,KACT,OAAQ,CAAC,EACT,gBAAiB,GACjB,YAAa,GACb,UAAW,GACX,WAAY,CAAC,CACjB,EACA,SAASjC,GAAc1C,EAASQ,EAAS,CACrC,IAAIoE,EAAaH,GAAoBzE,EAAQ,WAAYQ,CAAO,EAChE,MAAO,CACH,QAASR,EAAQ,SAAW,KAC5B,cAAeA,EAAQ,eAAiB,KAAOA,EAAQ,cAAgBA,EAAQ,SAC/E,iBAAkBA,EAAQ,kBAAoB,KAAOA,EAAQ,iBAAmBA,EAAQ,SACxF,YAAa4E,GAAc,KAAO,CAACA,CAAU,EAAI,CAAC,EAClD,QAAS5E,EAAQ,SAAW,KAAOA,EAAQ,QAAU,KACrD,OAAQA,EAAQ,OAAS,KAAO,CAACA,EAAQ,KAAK,EAAI,CAAC,EACnD,gBAAiBA,EAAQ,iBAAmBA,EAAQ,OAAS,GAC7D,YAAaA,EAAQ,aAAeA,EAAQ,OAAS,GACrD,UAAWA,EAAQ,WAAa,GAChC,YAAaA,EAAQ,WAAa,CAAC,GAAG,OAAOA,EAAQ,YAAc,CAAC,CAAC,CACzE,CACJ,CAEA,SAAS6E,GAAgBC,EAAK,CAC1B,OAAOA,EAAI,OAAOC,GAAoBJ,EAAc,CACxD,CACA,SAASI,GAAmBC,EAAOC,EAAO,CACtC,MAAO,CACH,QAASA,EAAM,SAAW,KAAOA,EAAM,QAAUD,EAAM,QACvD,cAAeC,EAAM,eAAiB,KAAOA,EAAM,cAAgBD,EAAM,cACzE,iBAAkBC,EAAM,kBAAoB,KAAOA,EAAM,iBAAmBD,EAAM,iBAClF,YAAaA,EAAM,YAAY,OAAOC,EAAM,WAAW,EACvD,QAAS,OAAOA,EAAM,SAAY,UAAYA,EAAM,QAAUD,EAAM,QACpE,OAAQA,EAAM,OAAO,OAAOC,EAAM,MAAM,EACxC,gBAAiBA,EAAM,iBAAmBD,EAAM,gBAChD,YAAaC,EAAM,aAAeD,EAAM,YACxC,UAAWC,EAAM,WAAaD,EAAM,UACpC,WAAYA,EAAM,WAAW,OAAOC,EAAM,UAAU,CACxD,CACJ,CAEA,IAAMC,GAAwB,CAC1B,GAAI,OACJ,cAAe,QACf,IAAK,OACL,OAAQ,OACR,OAAQ7D,EACR,mBAAoBA,EAEpB,QAASA,EACT,QAASA,CACb,EACA,SAAS8D,GAAiB3D,EAAKhB,EAASmB,EAAWyD,GAAyB5E,CAAO,EAAG,CAClF,IAAI6E,EAUJ,GATI,OAAO7D,GAAQ,SACf6D,EAAS,CAAE,IAAK7D,CAAI,EAEf,OAAOA,GAAQ,YAAc,MAAM,QAAQA,CAAG,EACnD6D,EAAS,CAAE,OAAQ7D,CAAI,EAElB,OAAOA,GAAQ,UAAYA,IAChC6D,EAAS7D,GAET6D,EAAQ,CACR,GAAI,CAAE,QAAArF,EAAS,MAAA+B,CAAM,EAAIO,GAAY+C,EAAQ1D,CAAQ,EACjD2D,EAAUC,GAAqBvF,EAASQ,CAAO,EACnD,GAAI8E,EACA,MAAO,CACH,KAAM9D,EACN,WAAY,GACZ,cAAe,GACf,WAAY,KACZ,cAAexB,EAAQ,cACvB,mBAAoBA,EAAQ,mBAC5B,QAASA,EAAQ,QACjB,QAASA,EAAQ,QACjB,SAAUA,EAAQ,IAAM,GACxB,SAAUF,GAAK,EACf,YAAawF,EAAQ,YACrB,KAAMA,EAAQ,KACd,GAAI5C,GAAc1C,EAASQ,CAAO,EAClC,cAAeuB,CACnB,CAER,CACA,OAAO,IACX,CACA,SAASqD,GAAyB5E,EAAS,CACvC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG+B,EAAiB,EAAG2C,EAAqB,EAAG1E,EAAQ,YAAY,mBAAmB,CAC5I,CACA,SAAS+E,GAAqB/D,EAAKhB,EAAS,CACxC,IAAIE,EAAOF,EAAQ,YAAY,gBAC/B,QAAS,EAAIE,EAAK,OAAS,EAAG,GAAK,EAAG,GAAK,EAAG,CAE1C,IAAI8E,EADM9E,EAAK,CAAC,EACD,UAAUc,CAAG,EAC5B,GAAIgE,EACA,MAAO,CAAE,YAAa,EAAG,KAAAA,CAAK,CAEtC,CACA,OAAO,IACX,CAEA,SAASC,GAAiBnF,EAAYvE,EAAQ2J,EAAcC,EAAanF,EAAS,CAC9E,OAAQzE,EAAO,KAAM,CACjB,IAAK,iBACD,OAAO6J,GAAiBtF,EAAYoF,EAAa3J,EAAO,QAAQ,EAAGA,EAAO,QAASA,EAAO,WAAYA,EAAO,UAAWyE,CAAO,EACnI,IAAK,mBACD,OAAOqF,GAAevF,EAAYoF,EAAa3J,EAAO,QAAQ,EAAGA,EAAO,UAAW4J,EAAY,YAAanF,CAAO,EACvH,IAAK,aACD,OAAOsF,GAASxF,EAAYvE,EAAO,WACnC4J,EAAcA,EAAY,YAAc,KAAMnF,CAAO,EACzD,IAAK,eACD,OAAOzE,EAAO,WAClB,IAAK,eACD,OAAOiI,GAAiB1D,EAAYvE,EAAO,UAAU,EACzD,IAAK,OACL,IAAK,OACL,IAAK,cACL,IAAK,mBACD,OAAI4J,EACOtF,GAAgBC,EAAYqF,EAAY,YAAanF,CAAO,EAEhEF,EACX,IAAK,gBACD,OAAO8D,GAAqB9D,EAAYvE,EAAO,UAAU,EAC7D,IAAK,sBACD,OAAOgK,GAAwBzF,EAAYvE,EAAO,QAAQ,EAC9D,IAAK,2BACD,OAAO4H,GAAqBrD,EAAaW,GAAc,CAACA,EAAS,QAChE,EACL,IAAK,oBACD,OAAOkC,GAAsB,EACjC,QACI,OAAO7C,CACf,CACJ,CACA,SAASsF,GAAiBtF,EAAYmB,EAAauE,EAASC,EAAY/C,EAAW1C,EAAS,CACxF,GAAIiB,GACAuE,IAAYvE,EAAY,cAC1B,CACE,IAAIyE,EAASjD,GAAYkD,GAAmBjD,EAAWzB,EAAajB,CAAO,EAAGiB,EAAajB,CAAO,EAClG,OAAIyF,IACAC,EAAS7F,GAAgB6F,EAAQD,EAAYzF,CAAO,GAEjDwD,GAAiB+B,GAAwBzF,EAAYmB,EAAY,QAAQ,EAAGyE,CAAM,CAC7F,CACA,OAAO5F,CACX,CACA,SAASuF,GAAeO,EAAoB3E,EAAayB,EAAWlG,EAAawD,EAAS,CACtF,GAAM,CAAE,SAAAqB,EAAU,cAAAC,CAAc,EAAIuE,GAAkBD,CAAkB,EACpEE,EAAgBrD,GAAYkD,GAAmBjD,EAAWzB,EAAajB,CAAO,EAAGiB,EAAajB,EAAS,GAAOqB,EAAUC,CAAa,EACzI,OAAOzB,GAAgBiG,EAAetJ,EAAawD,CAAO,CAC9D,CACA,SAAS2F,GAAmBjD,EAAWzB,EAAajB,EAAS,CACzD,IAAI+F,EAAmB/F,EAAQ,QAAQ,mBACnCgG,EAAsB/E,EAAcA,EAAY,mBAAqB,KACzE,OAAI+E,IACAtD,EAAYuD,GAAsBvD,EAAWsD,CAAmB,GAEhED,IACArD,EAAYuD,GAAsBvD,EAAWqD,CAAgB,GAE1DrD,CACX,CACA,SAASuD,GAAsBvD,EAAWwD,EAAM,CAC5C,IAAIC,EACJ,GAAI,CAACD,EACDC,EAAgBzD,MAEf,CACDyD,EAAgB,CAAC,EACjB,QAAStD,KAAYH,EAAW,CAC5B,IAAI0D,EAAeF,EAAKrD,CAAQ,EAC5BuD,EACAD,EAAc,KAAKC,CAAY,EAE1BA,GAAgB,MACrBD,EAAc,KAAKtD,CAAQ,CAEnC,CACJ,CACA,OAAOsD,CACX,CACA,SAASb,GAASxF,EAAY4F,EAAQW,EAAarG,EAAS,CACxD,OAAIqG,IACAX,EAAS7F,GAAgB6F,EAAQW,EAAarG,CAAO,GAElDwD,GAAiB1D,EAAY4F,CAAM,CAC9C,CACA,SAASY,GAAsBxG,EAAYyG,EAAYC,EAAY,CAC/D,GAAI,CAAE,KAAAtG,CAAK,EAAIJ,EACXK,EAAYsG,GAAQ3G,EAAW,UAAYO,GACjCH,EAAKG,EAAS,KAAK,EACrB,OACGA,EAEJ,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAQ,EAAG,CAAE,MAAO,CACnD,MAAOmG,EAAW,aAAaD,EAAW,OAAOlG,EAAS,MAAM,MAAOA,EAAS,cAAc,CAAC,EAC/F,IAAKmG,EAAW,aAAaD,EAAW,OAAOlG,EAAS,MAAM,IAAKA,EAAS,YAAY,CAAC,CAC7F,EAAG,eAAgBmG,EAAW,iBAAmB,KAAOnG,EAAS,eAAgB,aAAcmG,EAAW,iBAAmB,KAAOnG,EAAS,YAAa,CAAC,CAClK,EACD,MAAO,CAAE,KAAAH,EAAM,UAAAC,CAAU,CAC7B,CACA,SAASoF,GAAwBzF,EAAYkC,EAAU,CACnD,OAAOmB,GAAqBrD,EAAaW,GAAaA,EAAS,WAAauB,CAAQ,CACxF,CAQA,SAAS0E,GAAkBC,EAAY,CACnC,GAAM,CAAE,KAAAC,EAAM,UAAAC,CAAU,EAAIF,EACtBG,EAAW,CAAC,EACZC,EAAgB,CAAC,EACvB,QAASC,KAASJ,EAAM,CACpB,IAAMK,EAAML,EAAKI,CAAK,EAChB,CAAE,SAAAE,CAAS,EAAID,EACjBC,IACAJ,EAASI,CAAQ,EAAIF,EAE7B,CACA,QAASG,KAAcN,EAAW,CAC9B,IAAMO,EAAWP,EAAUM,CAAU,EAC/BF,EAAML,EAAKQ,EAAS,KAAK,EACzB,CAAE,SAAAF,CAAS,EAAID,EACjBC,IACAH,EAAcG,CAAQ,EAAIC,EAElC,CACA,MAAO,CAAE,SAAAL,EAAU,cAAAC,CAAc,CACrC,CAEA,IAAMM,GAAN,KAAc,CACV,aAAc,CACV,KAAK,SAAW,CAAC,EACjB,KAAK,YAAc,IACvB,CACA,eAAeC,EAAa,CACxB,KAAK,YAAcA,CACvB,CACA,WAAWC,EAAS,CAChB,KAAK,QAAUA,CACnB,CACA,GAAGC,EAAMC,EAAS,CACdC,GAAU,KAAK,SAAUF,EAAMC,CAAO,CAC1C,CACA,IAAID,EAAMC,EAAS,CACfE,GAAe,KAAK,SAAUH,EAAMC,CAAO,CAC/C,CACA,QAAQD,KAASI,EAAM,CACnB,IAAIC,EAAmB,KAAK,SAASL,CAAI,GAAK,CAAC,EAC3CM,EAAgB,KAAK,SAAW,KAAK,QAAQN,CAAI,EACjDO,EAAW,CAAC,EAAE,OAAOD,GAAiB,CAAC,EAAGD,CAAgB,EAC9D,QAASJ,KAAWM,EAChBN,EAAQ,MAAM,KAAK,YAAaG,CAAI,CAE5C,CACA,YAAYJ,EAAM,CACd,MAAO,GAAS,KAAK,SAASA,CAAI,GAAK,KAAK,SAASA,CAAI,EAAE,QACtD,KAAK,SAAW,KAAK,QAAQA,CAAI,EAC1C,CACJ,EACA,SAASE,GAAUM,EAAMR,EAAMC,EAAS,EACnCO,EAAKR,CAAI,IAAMQ,EAAKR,CAAI,EAAI,CAAC,IACzB,KAAKC,CAAO,CACrB,CACA,SAASE,GAAeK,EAAMR,EAAMC,EAAS,CACrCA,EACIO,EAAKR,CAAI,IACTQ,EAAKR,CAAI,EAAIQ,EAAKR,CAAI,EAAE,OAAQS,GAASA,IAASR,CAAO,GAI7D,OAAOO,EAAKR,CAAI,CAExB,CAEA,IAAMU,GAAe,CACjB,UAAW,QACX,QAAS,QACT,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAC1B,QAAS,qBACT,WAAY,kBACZ,QAAS,gBACb,EAIA,SAASC,GAAmBC,EAAOC,EAAS,CACxC,OAAOC,GAAYC,GAAaH,CAAK,EAAG,KAAMC,CAAO,CACzD,CACA,SAASE,GAAaH,EAAO,CACzB,IAAII,EACJ,OAAIJ,IAAU,GACVI,EAAU,CAAC,CAAC,CAAC,EAER,MAAM,QAAQJ,CAAK,EAExBI,EAAUJ,EAAM,OAAQK,GAAWA,EAAO,UAAU,EAE/C,OAAOL,GAAU,UAAYA,EAClCI,EAAU,CAACJ,CAAK,EAGhBI,EAAU,CAAC,EAEfA,EAAUA,EAAQ,IAAKC,GAAY,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGP,EAAY,EAAGO,CAAM,CAAE,EACnFD,CACX,CAEA,SAASE,GAAkBC,EAAWC,EAAKP,EAAS,CAChDA,EAAQ,QAAQ,QAAQ,SAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGQ,GAA4BF,EAAWN,CAAO,CAAC,EAAG,CAAE,QAASO,EAAMA,EAAI,UAAY,KAAM,KAAMP,EAAQ,SAAWA,EAAQ,YAAY,IAAK,CAAC,CAAC,CACnN,CACA,SAASS,GAAoBF,EAAKP,EAAS,CACvCA,EAAQ,QAAQ,QAAQ,WAAY,CAChC,QAASO,EAAMA,EAAI,UAAY,KAC/B,KAAMP,EAAQ,SAAWA,EAAQ,YAAY,IACjD,CAAC,CACL,CACA,SAASQ,GAA4BE,EAAUV,EAAS,CACpD,IAAIW,EAAQ,CAAC,EACb,QAASC,KAAaZ,EAAQ,YAAY,mBACtC,OAAO,OAAOW,EAAOC,EAAUF,EAAUV,CAAO,CAAC,EAErD,cAAO,OAAOW,EAAOE,GAAiBH,EAAUV,EAAQ,OAAO,CAAC,EACzDW,CACX,CAGA,SAASG,GAAmBC,EAAQC,EAAQhB,EAAS,CACjD,GAAI,CAAE,QAAAiB,EAAS,QAAA/B,CAAQ,EAAIc,EACvBkB,EAAMF,EACV,OAAID,GACAG,EAAMC,GAAWD,CAAG,EACpBA,EAAMD,EAAQ,IAAIC,EAAKhC,EAAQ,0BAA0B,GAGzDgC,EAAMD,EAAQ,IAAIC,EAAKhC,EAAQ,yBAAyB,EAErDgC,CACX,CAGA,SAASE,GAA0B9C,EAAY+C,EAAiBC,EAAUtB,EAAS,CAC/E,IAAIuB,EAAeC,GAAgBlD,EAAW,KAAM+C,CAAe,EAC/DI,EAAOC,GAAsB,EACjC,QAAS/C,KAASL,EAAW,KAAM,CAC/B,IAAIM,EAAMN,EAAW,KAAKK,CAAK,EAC/B8C,EAAK,KAAK9C,CAAK,EAAIgD,GAAwB/C,EAAK2C,EAAa5C,CAAK,EAAG2C,EAAUtB,CAAO,CAC1F,CACA,QAASlB,KAAcR,EAAW,UAAW,CACzC,IAAIS,EAAWT,EAAW,UAAUQ,CAAU,EAC1CF,EAAM6C,EAAK,KAAK1C,EAAS,KAAK,EAClC0C,EAAK,UAAU3C,CAAU,EAAI8C,GAA6B7C,EAAUH,EAAK2C,EAAaxC,EAAS,KAAK,EAAGuC,EAAUtB,CAAO,CAC5H,CACA,OAAOyB,CACX,CACA,SAASE,GAAwBE,EAAUC,EAAaR,EAAUtB,EAAS,CACvE,IAAI+B,EAAgBT,EAAS,eAAiB,CAAC,EAI3CS,EAAc,QAAU,MACxBD,EAAY,mBACXR,EAAS,YAAcA,EAAS,YACjCS,EAAc,OAAS,IAE3B,IAAIC,EAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,CAAQ,EAAGE,CAAa,EAAG,CAAE,GAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,EAAS,EAAE,EAAGE,EAAc,EAAE,CAAE,CAAC,EACvJT,EAAS,gBACTU,EAAK,cAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAK,aAAa,EAAGV,EAAS,aAAa,GAEpG,QAASW,KAAWjC,EAAQ,YAAY,yBACpCiC,EAAQD,EAAMV,EAAUtB,CAAO,EAEnC,MAAI,CAACgC,EAAK,QAAUhC,EAAQ,QAAQ,qBAChCgC,EAAK,OAAS,IAEXA,CACX,CACA,SAASJ,GAA6BM,EAAeL,EACrDC,EAAaR,EAAUtB,EAAS,CAC5B,GAAI,CAAE,QAAAiB,CAAQ,EAAIjB,EACdmC,EAAcb,EAAS,eAAiBA,EAAS,cAAc,SAAW,GAC1Ec,EAAWd,EAAS,eAAiBA,EAAS,cAAc,SAAW,GACvEU,EAAO,OAAO,OAAO,CAAC,EAAGE,CAAa,EAC1C,OAAIC,IACAH,EAAK,MAAQK,GAAuBL,EAAK,KAAK,GAE9CV,EAAS,YAAcQ,EAAY,gBACnCE,EAAK,MAAQ,CACT,MAAOf,EAAQ,IAAIe,EAAK,MAAM,MAAOV,EAAS,UAAU,EACxD,IAAKL,EAAQ,IAAIe,EAAK,MAAM,IAAKV,EAAS,UAAU,CACxD,GAEAA,EAAS,YAAcQ,EAAY,mBACnCE,EAAK,MAAQ,CACT,MAAOf,EAAQ,IAAIe,EAAK,MAAM,MAAOV,EAAS,UAAU,EACxD,IAAKU,EAAK,MAAM,GACpB,GAEAV,EAAS,UAAYQ,EAAY,mBACjCE,EAAK,MAAQ,CACT,MAAOA,EAAK,MAAM,MAClB,IAAKf,EAAQ,IAAIe,EAAK,MAAM,IAAKV,EAAS,QAAQ,CACtD,GAEAc,IACAJ,EAAK,MAAQ,CACT,MAAOA,EAAK,MAAM,MAClB,IAAKlB,GAAmBe,EAAS,OAAQG,EAAK,MAAM,MAAOhC,CAAO,CACtE,GAIA6B,EAAS,SACTG,EAAK,MAAQ,CACT,MAAOb,GAAWa,EAAK,MAAM,KAAK,EAClC,IAAKb,GAAWa,EAAK,MAAM,GAAG,CAClC,GAGAA,EAAK,MAAM,IAAMA,EAAK,MAAM,QAC5BA,EAAK,MAAM,IAAMlB,GAAmBe,EAAS,OAAQG,EAAK,MAAM,MAAOhC,CAAO,GAE3EgC,CACX,CAEA,IAAMM,GAAN,KAAsB,CAClB,YAAYtC,EAASuC,EAAqB,CACtC,KAAK,QAAUvC,EACf,KAAK,oBAAsBuC,CAC/B,CACA,QAAS,CACL,KAAK,QAAQ,SAAS,CAClB,KAAM,sBACN,SAAU,KAAK,oBAAoB,QACvC,CAAC,CACL,CACA,SAAU,CACN,KAAK,QAAQ,SAAS,CAClB,KAAM,sBACN,UAAW,CAAC,KAAK,oBAAoB,QAAQ,EAC7C,UAAW,EACf,CAAC,CACL,CACA,IAAI,IAAK,CACL,OAAO,KAAK,oBAAoB,QACpC,CACA,IAAI,KAAM,CACN,OAAO,KAAK,oBAAoB,KAAK,GACzC,CACA,IAAI,QAAS,CACT,OAAO,KAAK,oBAAoB,KAAK,MACzC,CACJ,EAEMC,GAAN,MAAMC,CAAU,CAGZ,YAAYzC,EAASpB,EAAKG,EAAU,CAChC,KAAK,SAAWiB,EAChB,KAAK,KAAOpB,EACZ,KAAK,UAAYG,GAAY,IACjC,CAIA,QAAQ2D,EAAMC,EAAK,CACf,GAAID,KAAQE,GACR,QAAQ,KAAK,sFAAwF,UAGhGF,IAAS,KACdC,EAAME,GAAwBH,CAAI,EAAEC,CAAG,EACvC,KAAK,OAAO,CACR,cAAe,CAAE,SAAUA,CAAI,CACnC,CAAC,UAEID,KAAQG,GACbF,EAAME,GAAwBH,CAAI,EAAEC,CAAG,EACvC,KAAK,OAAO,CACR,cAAe,CAAE,CAACD,CAAI,EAAGC,CAAI,CACjC,CAAC,UAEID,KAAQI,GAAmB,CAChC,IAAIC,EAAKD,GAAkBJ,CAAI,EAAEC,CAAG,EAChCD,IAAS,QACTK,EAAK,CAAE,gBAAiBJ,EAAK,YAAaA,CAAI,EAEzCD,IAAS,WACdK,EAAK,CAAE,cAAeJ,EAAK,iBAAkBA,CAAI,EAGjDI,EAAK,CAAE,CAACL,CAAI,EAAGC,CAAI,EAEvB,KAAK,OAAO,CACR,cAAe,CAAE,GAAAI,CAAG,CACxB,CAAC,CACL,MAEI,QAAQ,KAAK,uBAAuBL,CAAI,iCAAiC,CAEjF,CACA,gBAAgBA,EAAMC,EAAK,CACvB,KAAK,OAAO,CACR,cAAe,CAAE,CAACD,CAAI,EAAGC,CAAI,CACjC,CAAC,CACL,CACA,SAASK,EAAY9D,EAAU,CAAC,EAAG,CAC/B,GAAI,CAAE,QAAA+B,CAAQ,EAAI,KAAK,SACnBgC,EAAQhC,EAAQ,aAAa+B,CAAU,EAC3C,GAAIC,GAAS,KAAK,UAAW,CACzB,IAAIC,EAAgB,KAAK,UAAU,MAC/BC,EAAaC,GAAUF,EAAc,MAAOD,EAAOhC,EAAS/B,EAAQ,WAAW,EAC/EA,EAAQ,iBACR,KAAK,OAAO,CAAE,WAAYiE,CAAW,CAAC,EAGtC,KAAK,OAAO,CAAE,WAAAA,CAAW,CAAC,CAElC,CACJ,CACA,OAAOE,EAAUnE,EAAU,CAAC,EAAG,CAC3B,GAAI,CAAE,QAAA+B,CAAQ,EAAI,KAAK,SACnBC,EACJ,GAAI,EAAAmC,GAAY,OACZnC,EAAMD,EAAQ,aAAaoC,CAAQ,EAC/B,CAACnC,KAIL,KAAK,UACL,GAAIA,EAAK,CACL,IAAIoC,EAAWF,GAAU,KAAK,UAAU,MAAM,IAAKlC,EAAKD,EAAS/B,EAAQ,WAAW,EACpF,KAAK,OAAO,CAAE,SAAAoE,CAAS,CAAC,CAC5B,MAEI,KAAK,OAAO,CAAE,cAAe,CAAE,OAAQ,EAAM,CAAE,CAAC,CAG5D,CACA,SAASN,EAAYK,EAAUnE,EAAU,CAAC,EAAG,CACzC,GAAI,CAAE,QAAA+B,CAAQ,EAAI,KAAK,SACnBc,EAAgB,CAAE,OAAQ7C,EAAQ,MAAO,EACzC+D,EAAQhC,EAAQ,aAAa+B,CAAU,EACvC9B,EACJ,GAAK+B,GAGD,EAAAI,GAAY,OACZnC,EAAMD,EAAQ,aAAaoC,CAAQ,EAC/B,CAACnC,KAIL,KAAK,UAAW,CAChB,IAAIgC,EAAgB,KAAK,UAAU,MAG/BhE,EAAQ,SAAW,KACnBgE,EAAgBb,GAAuBa,CAAa,GAExD,IAAIC,EAAaC,GAAUF,EAAc,MAAOD,EAAOhC,EAAS/B,EAAQ,WAAW,EACnF,GAAIgC,EAAK,CACL,IAAIoC,EAAWF,GAAUF,EAAc,IAAKhC,EAAKD,EAAS/B,EAAQ,WAAW,EACzEqE,GAAeJ,EAAYG,CAAQ,EACnC,KAAK,OAAO,CAAE,WAAYH,EAAY,cAAApB,CAAc,CAAC,EAGrD,KAAK,OAAO,CAAE,WAAAoB,EAAY,SAAAG,EAAU,cAAAvB,CAAc,CAAC,CAE3D,MAEIA,EAAc,OAAS,GACvB,KAAK,OAAO,CAAE,WAAYoB,EAAY,cAAApB,CAAc,CAAC,CAE7D,CACJ,CACA,UAAUyB,EAAY,CAClB,IAAIC,EAAQC,GAAeF,CAAU,EACjCC,GACA,KAAK,OAAO,CAAE,WAAYA,CAAM,CAAC,CAEzC,CACA,QAAQD,EAAY,CAChB,IAAIC,EAAQC,GAAeF,CAAU,EACjCC,GACA,KAAK,OAAO,CAAE,SAAUA,CAAM,CAAC,CAEvC,CACA,UAAUD,EAAY,CAClB,IAAIC,EAAQC,GAAeF,CAAU,EACjCC,GACA,KAAK,OAAO,CAAE,WAAYA,CAAM,CAAC,CAEzC,CACA,UAAU1C,EAAQ7B,EAAU,CAAC,EAAG,CAC5B,IAAI6C,EAAgB,CAAE,OAAAhB,CAAO,EACzB,CAAE,iBAAA4C,CAAiB,EAAIzE,EACvByE,GAAoB,OACpBA,EAAmB,KAAK,SAAS,QAAQ,wBAEzC,KAAK,KAAK,SAAW5C,IACrBgB,EAAc,OAAS4B,GAE3B,KAAK,OAAO,CAAE,cAAA5B,CAAc,CAAC,CACjC,CACA,YAAY6B,EAAa,CACrB,GAAI,CAAE,QAAA3C,CAAQ,EAAI,KAAK,SACnBlC,EAAW,KAAK,UAChB8E,EAAYC,GAAgBF,CAAW,EAC3C,OAAI,KAAK,KAAK,OACH3C,EAAQ,YAAYlC,EAAS,MAAM,MAAOA,EAAS,MAAM,IAAK8E,EAAW,CAC5E,eAAgB9E,EAAS,eACzB,aAAcA,EAAS,YAC3B,CAAC,EAEEkC,EAAQ,OAAOlC,EAAS,MAAM,MAAO8E,EAAW,CACnD,UAAW9E,EAAS,cACxB,CAAC,CACL,CACA,OAAOuC,EAAU,CACb,IAAIvC,EAAW,KAAK,UACpB,GAAIA,EAAU,CACV,IAAIH,EAAM,KAAK,KACXoB,EAAU,KAAK,SACf,CAAE,WAAA1B,CAAW,EAAI0B,EAAQ,eAAe,EACxC+D,EAAiBC,GAAkB1F,EAAYS,EAAS,UAAU,EAetEgF,EAAiB3C,GAA0B2C,EAdrB,CAClB,GAAI,CACA,QAAS,GACT,cAAe,GACf,iBAAkB,GAClB,YAAa,CAAC,EACd,QAAS,KACT,OAAQ,CAAC,EACT,gBAAiB,GACjB,YAAa,GACb,UAAW,GACX,WAAY,CAAC,CACjB,CACJ,EAC4EzC,EAAUtB,CAAO,EAC7F,IAAIiE,EAAW,IAAIxB,EAAUzC,EAASpB,EAAKG,CAAQ,EACnD,KAAK,KAAOgF,EAAe,KAAKnF,EAAI,KAAK,EACzC,KAAK,UAAYmF,EAAe,UAAUhF,EAAS,UAAU,EAC7DiB,EAAQ,SAAS,CACb,KAAM,eACN,WAAY+D,CAChB,CAAC,EACD/D,EAAQ,QAAQ,QAAQ,cAAe,CACnC,SAAAiE,EACA,MAAO,KACP,cAAeC,GAAeH,EAAgB/D,EAASjB,CAAQ,EAC/D,QAAS,CACLiB,EAAQ,SAAS,CACb,KAAM,eACN,WAAA1B,CACJ,CAAC,CACL,CACJ,CAAC,CACL,CACJ,CACA,QAAS,CACL,IAAI0B,EAAU,KAAK,SACfmE,EAAUC,GAAgB,IAAI,EAClCpE,EAAQ,SAAS,CACb,KAAM,gBACN,WAAYmE,CAChB,CAAC,EACDnE,EAAQ,QAAQ,QAAQ,cAAe,CACnC,MAAO,KACP,cAAe,CAAC,EAChB,QAAS,CACLA,EAAQ,SAAS,CACb,KAAM,eACN,WAAYmE,CAChB,CAAC,CACL,CACJ,CAAC,CACL,CACA,IAAI,QAAS,CACT,GAAI,CAAE,SAAAE,CAAS,EAAI,KAAK,KACxB,OAAIA,EACO,IAAI/B,GAAgB,KAAK,SAAU,KAAK,SAAS,eAAe,EAAE,aAAa+B,CAAQ,CAAC,EAE5F,IACX,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,UACR,KAAK,SAAS,QAAQ,OAAO,KAAK,UAAU,MAAM,KAAK,EACvD,IACR,CACA,IAAI,KAAM,CACN,OAAQ,KAAK,WAAa,KAAK,KAAK,OAChC,KAAK,SAAS,QAAQ,OAAO,KAAK,UAAU,MAAM,GAAG,EACrD,IACR,CACA,IAAI,UAAW,CACX,IAAItF,EAAW,KAAK,UACpB,OAAIA,EACO,KAAK,SAAS,QAAQ,UAAUA,EAAS,MAAM,MAAO,CACzD,SAAU,KAAK,KAAK,OACpB,UAAWA,EAAS,cACxB,CAAC,EAEE,EACX,CACA,IAAI,QAAS,CACT,IAAIA,EAAW,KAAK,UACpB,OAAIA,GAAY,KAAK,KAAK,OACf,KAAK,SAAS,QAAQ,UAAUA,EAAS,MAAM,IAAK,CACvD,SAAU,KAAK,KAAK,OACpB,UAAWA,EAAS,YACxB,CAAC,EAEE,EACX,CAGA,IAAI,IAAK,CAAE,OAAO,KAAK,KAAK,QAAU,CACtC,IAAI,SAAU,CAAE,OAAO,KAAK,KAAK,OAAS,CAC1C,IAAI,QAAS,CAAE,OAAO,KAAK,KAAK,MAAQ,CACxC,IAAI,OAAQ,CAAE,OAAO,KAAK,KAAK,KAAO,CACtC,IAAI,KAAM,CAAE,OAAO,KAAK,KAAK,GAAK,CAClC,IAAI,SAAU,CAAE,OAAO,KAAK,KAAK,GAAG,SAAW,MAAQ,CACvD,IAAI,eAAgB,CAAE,OAAO,KAAK,KAAK,GAAG,aAAe,CACzD,IAAI,kBAAmB,CAAE,OAAO,KAAK,KAAK,GAAG,gBAAkB,CAC/D,IAAI,YAAa,CAAE,OAAO,KAAK,KAAK,GAAG,YAAY,CAAC,GAAK,IAAM,CAC/D,IAAI,SAAU,CAAE,OAAO,KAAK,KAAK,GAAG,OAAS,CAC7C,IAAI,OAAQ,CAAE,OAAO,KAAK,KAAK,GAAG,OAAO,CAAC,GAAK,IAAM,CACrD,IAAI,iBAAkB,CAAE,OAAO,KAAK,KAAK,GAAG,eAAiB,CAC7D,IAAI,aAAc,CAAE,OAAO,KAAK,KAAK,GAAG,WAAa,CACrD,IAAI,WAAY,CAAE,OAAO,KAAK,KAAK,GAAG,SAAW,CAEjD,IAAI,YAAa,CAAE,OAAO,KAAK,KAAK,GAAG,UAAY,CACnD,IAAI,eAAgB,CAAE,OAAO,KAAK,KAAK,aAAe,CACtD,cAAcuF,EAAW,CAAC,EAAG,CACzB,IAAI1F,EAAM,KAAK,KACX,CAAE,GAAAmE,CAAG,EAAInE,EACT,CAAE,SAAA2F,EAAU,OAAAC,CAAO,EAAI,KACvBC,EAAM,CACN,OAAQ7F,EAAI,MAChB,EACA,OAAIA,EAAI,QACJ6F,EAAI,MAAQ7F,EAAI,OAEhB2F,IACAE,EAAI,MAAQF,GAEZC,IACAC,EAAI,IAAMD,GAEV5F,EAAI,WACJ6F,EAAI,GAAK7F,EAAI,UAEbA,EAAI,UACJ6F,EAAI,QAAU7F,EAAI,SAElBA,EAAI,MACJ6F,EAAI,IAAM7F,EAAI,KAEdmE,EAAG,SAAWA,EAAG,UAAY,SAC7B0B,EAAI,QAAU1B,EAAG,SAIjBuB,EAAS,eAAiBvB,EAAG,iBAAmBA,EAAG,kBAAoBA,EAAG,YAC1E0B,EAAI,MAAQ1B,EAAG,iBAGXA,EAAG,kBACH0B,EAAI,gBAAkB1B,EAAG,iBAEzBA,EAAG,cACH0B,EAAI,YAAc1B,EAAG,cAGzBA,EAAG,YACH0B,EAAI,UAAY1B,EAAG,WAEnBA,EAAG,WAAW,SACd0B,EAAI,WAAa1B,EAAG,YAEpB,OAAO,KAAKnE,EAAI,aAAa,EAAE,SAC3B0F,EAAS,sBACT,OAAO,OAAOG,EAAK7F,EAAI,aAAa,EAGpC6F,EAAI,cAAgB7F,EAAI,eAGzB6F,CACX,CACA,QAAS,CACL,OAAO,KAAK,cAAc,CAC9B,CACJ,EACA,SAASL,GAAgBM,EAAU,CAC/B,IAAI9F,EAAM8F,EAAS,KACf3F,EAAW2F,EAAS,UACxB,MAAO,CACH,KAAM,CAAE,CAAC9F,EAAI,KAAK,EAAGA,CAAI,EACzB,UAAWG,EACL,CAAE,CAACA,EAAS,UAAU,EAAGA,CAAS,EAClC,CAAC,CACX,CACJ,CACA,SAASmF,GAAe5F,EAAY0B,EAAS2E,EAAiB,CAC1D,GAAI,CAAE,KAAApG,EAAM,UAAAC,CAAU,EAAIF,EACtBsG,EAAY,CAAC,EACbC,EAAoBF,EAAkBA,EAAgB,WAAa,GACvE,QAASG,KAAMtG,EAAW,CACtB,IAAIO,EAAWP,EAAUsG,CAAE,EACvBlG,EAAML,EAAKQ,EAAS,KAAK,EACzBA,EAAS,aAAe8F,GACxBD,EAAU,KAAK,IAAIpC,GAAUxC,EAASpB,EAAKG,CAAQ,CAAC,CAE5D,CACA,OAAO6F,CACX,CAKA,SAASG,GAAgBzG,EAAY0G,EAAcC,EAAcC,EAAkB,CAC/E,IAAIC,EAAqB,CAAC,EACtBC,EAAmB,CAAC,EACpBC,EAAe,CAAC,EAChBC,EAAW,CAAC,EACZC,EAAW,CAAC,EACZC,EAAWhE,GAAgBlD,EAAW,KAAM0G,CAAY,EAC5D,QAASrG,KAASL,EAAW,KAAM,CAC/B,IAAIM,EAAMN,EAAW,KAAKK,CAAK,EACtB6G,EAAS5G,EAAI,KAAK,EACpB,UAAY,uBACXA,EAAI,SACJuG,EAAmBvG,EAAI,OAAO,EAAI,CAAC,EAC9ByG,EAAazG,EAAI,OAAO,IACzByG,EAAazG,EAAI,OAAO,EAAIA,IAIhCwG,EAAiBzG,CAAK,EAAI,CAAC,EAGvC,CACA,QAASG,KAAcR,EAAW,UAAW,CACzC,IAAIS,EAAWT,EAAW,UAAUQ,CAAU,EAC1CF,EAAMN,EAAW,KAAKS,EAAS,KAAK,EACpCgE,EAAKyC,EAAS5G,EAAI,KAAK,EACvB6G,EAAY1G,EAAS,MACrB2G,EAAe,CAAC9G,EAAI,QAAUsG,EAC9BS,GAAuBF,EAAWP,CAAgB,EAClDO,EACAG,EAAcC,GAAgBH,EAAaT,CAAY,EACvDW,IACI7C,EAAG,UAAY,qBACXnE,EAAI,QACJuG,EAAmBvG,EAAI,OAAO,EAAE,KAAKgH,CAAW,EAGhDR,EAAiBrG,EAAS,KAAK,EAAE,KAAK6G,CAAW,EAGhD7C,EAAG,UAAY,SACnBA,EAAG,UAAY,aAAeuC,EAAWC,GAAU,KAAK,CACrD,IAAA3G,EACA,GAAAmE,EACA,SAAAhE,EACA,MAAO6G,EACP,QAASF,EAAY,OAASA,EAAY,MAAM,QAAQ,IAAME,EAAY,MAAM,QAAQ,EACxF,MAAOF,EAAY,KAAOA,EAAY,IAAI,QAAQ,IAAME,EAAY,IAAI,QAAQ,CACpF,CAAC,EAGb,CACA,QAASE,KAAWX,EAAoB,CACpC,IAAIY,EAASZ,EAAmBW,CAAO,EACnCE,EAAiBC,GAAaF,EAAQd,CAAY,EACtD,QAASiB,KAAiBF,EAAgB,CACtC,IAAIpH,EAAMyG,EAAaS,CAAO,EAC1B/C,EAAKyC,EAAS5G,EAAI,KAAK,EAC3B0G,EAAS,KAAK,CACV,IAAA1G,EACA,GAAAmE,EACA,SAAU,KACV,MAAOmD,EACP,QAAS,GACT,MAAO,EACX,CAAC,CACL,CACJ,CACA,QAASvH,KAASyG,EAAkB,CAChC,IAAIW,EAASX,EAAiBzG,CAAK,EAC/BqH,EAAiBC,GAAaF,EAAQd,CAAY,EACtD,QAASiB,KAAiBF,EACtBV,EAAS,KAAK,CACV,IAAKhH,EAAW,KAAKK,CAAK,EAC1B,GAAI6G,EAAS7G,CAAK,EAClB,SAAU,KACV,MAAOuH,EACP,QAAS,GACT,MAAO,EACX,CAAC,CAET,CACA,MAAO,CAAE,GAAIZ,EAAU,GAAIC,CAAS,CACxC,CACA,SAASY,GAAevH,EAAK,CACzB,OAAOA,EAAI,GAAG,UAAY,cAAgBA,EAAI,GAAG,UAAY,oBACjE,CACA,SAASwH,GAASC,EAAIC,EAAK,CACvBD,EAAG,MAAQC,CACf,CACA,SAASC,GAASF,EAAI,CAClB,OAAOA,EAAG,OACNA,EAAG,WAAW,OACd,IACR,CAEA,SAAS7E,GAAgBgF,EAAWxB,EAAc,CAC9C,OAAOyB,GAAQD,EAAY3E,GAAa6E,GAAe7E,EAAUmD,CAAY,CAAC,CAClF,CACA,SAAS0B,GAAe7E,EAAUmD,EAAc,CAC5C,IAAI2B,EAAM,CAAC,EACX,OAAI3B,EAAa,EAAE,GACf2B,EAAI,KAAK3B,EAAa,EAAE,CAAC,EAEzBA,EAAanD,EAAS,KAAK,GAC3B8E,EAAI,KAAK3B,EAAanD,EAAS,KAAK,CAAC,EAEzC8E,EAAI,KAAK9E,EAAS,EAAE,EACb+E,GAAgBD,CAAG,CAC9B,CACA,SAASE,GAAcC,EAAMC,EAAiB,CAC1C,IAAIC,EAAOF,EAAK,IAAIG,EAAkB,EACtC,OAAAD,EAAK,KAAK,CAACE,EAAMC,IAASC,GAAoBF,EAAMC,EAAMJ,CAAe,CAAC,EACnEC,EAAK,IAAKK,GAAMA,EAAE,IAAI,CACjC,CAEA,SAASJ,GAAmBX,EAAK,CAC7B,GAAI,CAAE,WAAAgB,CAAW,EAAIhB,EACjBzE,EAAWyF,EAAW,IACtBC,EAAQD,EAAW,SAAWA,EAAW,SAAS,MAAQA,EAAW,MACrErE,EAAQsE,EAAM,MAAQA,EAAM,MAAM,QAAQ,EAAI,EAC9CrG,EAAMqG,EAAM,IAAMA,EAAM,IAAI,QAAQ,EAAI,EAC5C,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG1F,EAAS,aAAa,EAAGA,CAAQ,EAAG,CAAE,GAAIA,EAAS,SAAU,MAAAoB,EAC9G,IAAA/B,EAAK,SAAUA,EAAM+B,EAAO,OAAQ,OAAOpB,EAAS,MAAM,EAAG,KAAMyE,CAAI,CAAC,CAChF,CACA,SAASkB,GAAoBlB,EAAKtG,EAAS,CACvC,GAAI,CAAE,YAAAyH,CAAY,EAAIzH,EAClB0H,EAAeD,EAAY,wBAC3B,CAAE,IAAA7I,EAAK,GAAAmE,CAAG,EAAIuD,EAAI,WAClB3D,EAAMI,EAAG,cACb,QAAS4E,KAAeD,EACpB/E,EAAMgF,EAAYhF,EAAK/D,EAAKmE,EAAI/C,CAAO,EAE3C,OAAO2C,CACX,CACA,SAASiF,GAAyBtB,EAAKtG,EAAS,CAC5C,OAAOsG,EAAI,SAAWA,EAAI,WAAW,GAAG,kBAAoBtG,EAAQ,QAAQ,uBAChF,CACA,SAAS6H,GAAuBvB,EAAKtG,EAAS,CAC1C,OAAOsG,EAAI,OAASA,EAAI,WAAW,GAAG,gBAC1C,CACA,SAASwB,GAAiBxB,EAAKyB,EAAY/H,EAASgI,EACpDC,EACAC,EAAeC,EAAa,CACxB,GAAI,CAAE,QAAAlH,EAAS,QAAA/B,CAAQ,EAAIc,EACvB,CAAE,iBAAAoI,EAAkB,gBAAAC,CAAgB,EAAInJ,EACxC2C,EAAWyE,EAAI,WAAW,IAC1BpE,EAAgBoE,EAAI,WAAW,SAC/B8B,GAAoB,OACpBA,EAAmBJ,IAA4B,IAE/CK,GAAmB,OACnBA,EAAkBJ,IAA2B,IAEjD,IAAIK,EAAkBpG,EAAc,MAAM,MACtCqG,EAAgBrG,EAAc,MAAM,IACpCsG,EAAWN,GAAiB5B,EAAI,OAASA,EAAI,WAAW,MAAM,MAC9DmC,EAASN,GAAe7B,EAAI,KAAOA,EAAI,WAAW,MAAM,IACxDoC,EAAavH,GAAWmH,CAAe,EAAE,QAAQ,IAAMnH,GAAWqH,CAAQ,EAAE,QAAQ,EACpFG,EAAWxH,GAAWyH,GAAML,EAAe,EAAE,CAAC,EAAE,QAAQ,IAAMpH,GAAWyH,GAAMH,EAAQ,EAAE,CAAC,EAAE,QAAQ,EACxG,OAAIL,GAAoB,CAACvG,EAAS,SAAW6G,GAAcC,IACvDH,EAAWE,EAAaJ,EAAkBE,EAC1CC,EAASE,EAAWJ,EAAgBE,EAChCJ,GAAmBxG,EAAS,OACrBZ,EAAQ,YAAYuH,EAAUC,EAAQV,EAAY,CACrD,eAAgBG,EAAgB,KAAOhG,EAAc,eACrD,aAAciG,EAAc,KAAOjG,EAAc,YACrD,CAAC,EAEEjB,EAAQ,OAAOuH,EAAUT,EAAY,CACxC,UAAWG,EAAgB,KAAOhG,EAAc,cACpD,CAAC,GAEE,EACX,CACA,SAAS2G,GAAWvC,EAAKwC,EAAYC,EAAS,CAC1C,IAAIC,EAAW1C,EAAI,WAAW,MAC9B,MAAO,CACH,OAAQ0C,EAAS,MAAQD,GAAWD,EAAW,OAC/C,SAAUE,EAAS,QAAUD,GAAWD,EAAW,KACnD,QAASA,GAAcG,GAAoBH,EAAYE,EAAS,KAAK,CACzE,CACJ,CACA,SAASE,GAAmBvI,EAAO,CAC/B,IAAIwI,EAAa,CAAC,UAAU,EAC5B,OAAIxI,EAAM,UACNwI,EAAW,KAAK,iBAAiB,EAEjCxI,EAAM,aACNwI,EAAW,KAAK,oBAAoB,GAEpCxI,EAAM,kBAAoBA,EAAM,iBAChCwI,EAAW,KAAK,oBAAoB,EAEpCxI,EAAM,YACNwI,EAAW,KAAK,mBAAmB,EAEnCxI,EAAM,YACNwI,EAAW,KAAK,mBAAmB,EAEnCxI,EAAM,YACNwI,EAAW,KAAK,mBAAmB,EAEnCxI,EAAM,SACNwI,EAAW,KAAK,gBAAgB,EAEhCxI,EAAM,OACNwI,EAAW,KAAK,cAAc,EAE9BxI,EAAM,QACNwI,EAAW,KAAK,eAAe,EAE/BxI,EAAM,SACNwI,EAAW,KAAK,gBAAgB,EAEhCxI,EAAM,UACNwI,EAAW,KAAK,iBAAiB,EAE9BA,CACX,CACA,SAASC,GAAmB9B,EAAY,CACpC,OAAOA,EAAW,SACZA,EAAW,SAAS,WACpB,GAAGA,EAAW,IAAI,KAAK,IAAIA,EAAW,MAAM,MAAM,YAAY,CAAC,EAEzE,CACA,SAAS+B,GAAkB/C,EAAKtG,EAAS,CACrC,GAAI,CAAE,IAAApB,EAAK,SAAAG,CAAS,EAAIuH,EAAI,WACxB,CAAE,IAAAgD,CAAI,EAAI1K,EACd,GAAI0K,EACA,MAAO,CAAE,KAAMA,CAAI,EAEvB,GAAI,CAAE,QAAAC,EAAS,QAAArK,CAAQ,EAAIc,EACvB,CAAE,iBAAAwJ,CAAiB,EAAItK,EAQ3B,OAPIsK,GAAoB,OACpBA,EAAmB5K,EAAI,YACnB4K,GAAoB,OACpBA,EAAmB,EAAQD,EAAQ,YAAY,YAAY,IAI/DC,EAEOC,GAAyBC,GAAO,CACnCH,EAAQ,QAAQ,aAAc,CAC1B,GAAIG,EAAG,OACP,MAAO,IAAIlH,GAAUxC,EAASpB,EAAKG,CAAQ,EAC3C,QAAS2K,EACT,KAAM1J,EAAQ,OAClB,CAAC,CACL,CAAC,EAEE,CAAC,CACZ,CAEA,IAAM2J,GAAiB,CACnB,MAAOC,EACP,IAAKA,EACL,OAAQ,OACZ,EACA,SAASC,GAAcC,EAAK7I,EAAS8I,EAAiB,CAClD,IAAIC,EAAOC,GAAkBH,EAAK7I,CAAO,EACrC,CAAE,MAAAsG,CAAM,EAAIyC,EAChB,GAAI,CAACzC,EAAM,MACP,OAAO,KAEX,GAAI,CAACA,EAAM,IAAK,CACZ,GAAIwC,GAAmB,KACnB,OAAO,KAEXxC,EAAM,IAAMtG,EAAQ,IAAIsG,EAAM,MAAOwC,CAAe,CACxD,CACA,OAAOC,CACX,CAKA,SAASC,GAAkBH,EAAK7I,EAAS,CACrC,GAAI,CAAE,QAASc,EAAe,MAAAmI,CAAM,EAAIC,GAAYL,EAAKH,EAAc,EACnES,EAAYrI,EAAc,MAAQd,EAAQ,iBAAiBc,EAAc,KAAK,EAAI,KAClFsI,EAAUtI,EAAc,IAAMd,EAAQ,iBAAiBc,EAAc,GAAG,EAAI,KAC5E,CAAE,OAAAhB,CAAO,EAAIgB,EACjB,OAAIhB,GAAU,OACVA,EAAUqJ,GAAaA,EAAU,oBAC5B,CAACC,GAAWA,EAAQ,oBAEtB,OAAO,OAAO,CAAE,MAAO,CACtB,MAAOD,EAAYA,EAAU,OAAS,KACtC,IAAKC,EAAUA,EAAQ,OAAS,IACpC,EAAG,OAAAtJ,CAAO,EAAGmJ,CAAK,CAC1B,CAwBA,SAASI,GAAiBC,EAAMC,EAAS,CACrC,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,GAAcF,EAAK,MAAOC,EAASD,EAAK,MAAM,CAAC,EAAG,CAAE,OAAQA,EAAK,MAAO,CAAC,CACpH,CACA,SAASG,GAA0BC,EAAOH,EAASI,EAAU,CACzD,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,GAAcE,EAAOH,EAASI,CAAQ,CAAC,EAAG,CAAE,SAAUJ,EAAQ,QAAS,CAAC,CACnH,CACA,SAASC,GAAcE,EAAOH,EAASI,EAAU,CAC7C,MAAO,CACH,MAAOJ,EAAQ,OAAOG,EAAM,KAAK,EACjC,IAAKH,EAAQ,OAAOG,EAAM,GAAG,EAC7B,SAAUH,EAAQ,UAAUG,EAAM,MAAO,CAAE,SAAAC,CAAS,CAAC,EACrD,OAAQJ,EAAQ,UAAUG,EAAM,IAAK,CAAE,SAAAC,CAAS,CAAC,CACrD,CACJ,CACA,SAASC,GAAoBC,EAAUC,EAAcC,EAAS,CAC1D,IAAIC,EAAMC,GAAe,CAAE,SAAU,EAAM,EAAGF,CAAO,EACjDG,EAAMC,GAAcH,EAAI,QAASA,EAAI,MAAO,GAChDH,EAAS,OAAQ,GACjBE,CAAO,EACP,MAAO,CACH,IAAAG,EACA,GAAIE,GAAeF,EAAKJ,CAAY,EACpC,SAAUO,GAAoBH,EAAI,MAAOL,EAAS,KAAK,EACvD,MAAOA,EAAS,MAChB,QAAS,GACT,MAAO,EACX,CACJ,CAQA,SAASS,GAAYC,EAAMC,EAA2BC,EAA2B,CAG7E,IAAIC,EAAa,GACbC,EAAiB,SAAUX,EAAK,CAC3BU,IACDA,EAAa,GACbF,EAA0BR,CAAG,EAErC,EACIY,EAAiB,SAAUC,EAAO,CAC7BH,IACDA,EAAa,GACbD,EAA0BI,CAAK,EAEvC,EACIb,EAAMO,EAAKI,EAAgBC,CAAc,EACzCZ,GAAO,OAAOA,EAAI,MAAS,YAC3BA,EAAI,KAAKW,EAAgBC,CAAc,CAE/C,CAEA,IAAME,GAAN,cAA+B,KAAM,CACjC,YAAYC,EAASC,EAAU,CAC3B,MAAMD,CAAO,EACb,KAAK,SAAWC,CACpB,CACJ,EACA,SAASC,GAAYC,EAAQC,EAAKC,EAAQ,CACtCF,EAASA,EAAO,YAAY,EAC5B,IAAMG,EAAe,CACjB,OAAAH,CACJ,EACA,OAAIA,IAAW,MACXC,IAAQA,EAAI,QAAQ,GAAG,IAAM,GAAK,IAAM,KACpC,IAAI,gBAAgBC,CAAM,GAG9BC,EAAa,KAAO,IAAI,gBAAgBD,CAAM,EAC9CC,EAAa,QAAU,CACnB,eAAgB,mCACpB,GAEG,MAAMF,EAAKE,CAAY,EAAE,KAAMC,GAAa,CAC/C,GAAIA,EAAS,GACT,OAAOA,EAAS,KAAK,EAAE,KAAMC,GAClB,CAACA,EAAgBD,CAAQ,EACjC,IAAM,CACL,MAAM,IAAIR,GAAiB,uBAAwBQ,CAAQ,CAC/D,CAAC,EAGD,MAAM,IAAIR,GAAiB,iBAAkBQ,CAAQ,CAE7D,CAAC,CACL,CAEA,IAAIE,GACJ,SAASC,IAAwB,CAC7B,OAAID,IAAsB,OACtBA,GAAqBE,GAA0B,GAE5CF,EACX,CACA,SAASE,IAA4B,CAGjC,GAAI,OAAO,SAAa,IACpB,MAAO,GAEX,IAAIC,EAAK,SAAS,cAAc,KAAK,EACrCA,EAAG,MAAM,SAAW,WACpBA,EAAG,MAAM,IAAM,MACfA,EAAG,MAAM,KAAO,MAChBA,EAAG,UAAY,+CACfA,EAAG,cAAc,OAAO,EAAE,MAAM,OAAS,QACzCA,EAAG,cAAc,KAAK,EAAE,MAAM,OAAS,OACvC,SAAS,KAAK,YAAYA,CAAE,EAE5B,IAAIC,EADMD,EAAG,cAAc,KAAK,EACb,aAAe,EAClC,gBAAS,KAAK,YAAYA,CAAE,EACrBC,CACX,CAEA,IAAMC,GAAN,cAA2BC,EAAc,CACrC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQ,CACT,SAAU,EACd,EACA,KAAK,kBAAoB,IAAM,CAC3BC,GAAU,IAAM,CACZ,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,CACpC,CAAC,CACL,EACA,KAAK,iBAAmB,IAAM,CAC1BA,GAAU,IAAM,CACZ,KAAK,SAAS,CAAE,SAAU,EAAM,CAAC,CACrC,CAAC,CACL,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAC,CAAM,EAAI,KACZ,CAAE,QAAAC,CAAQ,EAAID,EACd,CAAE,SAAAE,CAAS,EAAI,KAAK,MACpBC,EAAeD,GAAYD,EAAQ,SAAW,QAAUA,EAAQ,gBAAkB,OAClFG,EAAU,CAACD,GAAgBF,EAAQ,QAAU,KAAQA,EAAQ,OAAS,GACtEI,EAAa,CACb,KACAH,EAAW,iBAAmB,kBAC9B,gBAAgBD,EAAQ,SAAS,GACjCD,EAAM,MAAM,SAAS,MAAM,CAC/B,EACA,OAAKP,GAAsB,GACvBY,EAAW,KAAK,gBAAgB,EAE7BL,EAAM,SAASK,EAAYD,EAAQD,EAAcD,CAAQ,CACpE,CACA,mBAAoB,CAChB,GAAI,CAAE,QAAAI,CAAQ,EAAI,KAAK,MACvBA,EAAQ,GAAG,eAAgB,KAAK,iBAAiB,EACjDA,EAAQ,GAAG,cAAe,KAAK,gBAAgB,CACnD,CACA,sBAAuB,CACnB,GAAI,CAAE,QAAAA,CAAQ,EAAI,KAAK,MACvBA,EAAQ,IAAI,eAAgB,KAAK,iBAAiB,EAClDA,EAAQ,IAAI,cAAe,KAAK,gBAAgB,CACpD,CACJ,EAEMC,GAAN,KAAkB,CACd,YAAYC,EAAU,CAClB,KAAK,UAAYA,EAAS,UAC1B,KAAK,kBAAoBA,EAAS,mBAAqB,IAC3D,CACA,SAAU,CACV,CACJ,EACA,SAASC,GAAyBC,EAAWC,EAAO,CAChD,MAAO,CACH,UAAAD,EACA,GAAIC,EAAM,GACV,eAAgBA,EAAM,gBAAkB,KAAOA,EAAM,eAAiB,GACtE,kBAAmBA,EAAM,mBAAqB,IAClD,CACJ,CAOA,IAAMC,GAA2B,CAAC,EAE5BC,GAAN,KAAmB,CACf,gBAAiB,CACb,OAAO,KAAK,mBAAmB,eAAe,CAClD,CACA,SAASC,EAAQ,CACb,KAAK,mBAAmB,SAASA,CAAM,CAC3C,CACA,IAAI,MAAO,CAAE,OAAO,KAAK,eAAe,EAAE,OAAS,CACnD,eAAeC,EAAU,CACrBA,EAAS,CACb,CACA,YAAa,CACT,KAAK,QAAQ,UAAW,EAAI,CAChC,CAGA,UAAUC,EAAMC,EAAK,CACjB,KAAK,SAAS,CACV,KAAM,aACN,WAAYD,EACZ,eAAgBC,CACpB,CAAC,CACL,CACA,UAAUD,EAAM,CACZ,OAAO,KAAK,mBAAmB,4BAA4BA,CAAI,CACnE,CACA,yBAA0B,CACtB,OAAO,OAAO,KAAK,KAAK,eAAe,EAAE,mBAAmB,CAChE,CAGA,GAAGE,EAAaC,EAAS,CACrB,GAAI,CAAE,mBAAAC,CAAmB,EAAI,KACzBA,EAAmB,+BAA+BF,CAAW,EAC7DE,EAAmB,QAAQ,GAAGF,EAAaC,CAAO,EAGlD,QAAQ,KAAK,0BAA0BD,CAAW,GAAG,CAE7D,CACA,IAAIA,EAAaC,EAAS,CACtB,KAAK,mBAAmB,QAAQ,IAAID,EAAaC,CAAO,CAC5D,CAEA,QAAQD,KAAgBG,EAAM,CAC1B,KAAK,mBAAmB,QAAQ,QAAQH,EAAa,GAAGG,CAAI,CAChE,CAGA,WAAWC,EAAUC,EAAa,CAC9B,KAAK,eAAe,IAAM,CAEtB,GADA,KAAK,SAAS,EACVA,EACA,GAAIA,EAAY,OAASA,EAAY,IACjC,KAAK,SAAS,CACV,KAAM,mBACN,SAAAD,CACJ,CAAC,EACD,KAAK,SAAS,CACV,KAAM,aACN,WAAY,eACZ,eAAgBC,CACpB,CAAC,MAEA,CACD,GAAI,CAAE,QAAAC,CAAQ,EAAI,KAAK,eAAe,EACtC,KAAK,SAAS,CACV,KAAM,mBACN,SAAAF,EACA,WAAYE,EAAQ,aAAaD,CAAW,CAChD,CAAC,CACL,MAGA,KAAK,SAAS,CACV,KAAM,mBACN,SAAAD,CACJ,CAAC,CAET,CAAC,CACL,CAIA,OAAOG,EAAYH,EAAU,CACzB,IAAII,EAAQ,KAAK,eAAe,EAC5BC,EACJL,EAAWA,GAAY,MACvBK,EAAOD,EAAM,UAAUJ,CAAQ,GAAK,KAAK,gBAAgBA,CAAQ,EACjE,KAAK,SAAS,EACVK,EACA,KAAK,SAAS,CACV,KAAM,mBACN,SAAUA,EAAK,KACf,WAAAF,CACJ,CAAC,EAGD,KAAK,SAAS,CACV,KAAM,cACN,WAAAA,CACJ,CAAC,CAET,CAGA,gBAAgBG,EAAM,CAClB,GAAI,CAAE,UAAAC,EAAW,cAAAC,CAAc,EAAI,KAAK,eAAe,EACnDC,EAAY,CAAC,EAAE,OAAOD,EAAc,OAASA,EAAc,OAAO,iBAAmB,CAAC,EAAGA,EAAc,OAASA,EAAc,OAAO,iBAAmB,CAAC,CAAC,EAC1JE,EACAL,EACJ,QAASL,KAAYO,EACjBE,EAAU,KAAKT,CAAQ,EAE3B,IAAKU,EAAI,EAAGA,EAAID,EAAU,OAAQC,GAAK,EAEnC,GADAL,EAAOE,EAAUE,EAAUC,CAAC,CAAC,EACzBL,GACIA,EAAK,aAAeC,EACpB,OAAOD,EAInB,OAAO,IACX,CAGA,MAAO,CACH,KAAK,SAAS,EACd,KAAK,SAAS,CAAE,KAAM,MAAO,CAAC,CAClC,CACA,MAAO,CACH,KAAK,SAAS,EACd,KAAK,SAAS,CAAE,KAAM,MAAO,CAAC,CAClC,CACA,UAAW,CACP,IAAID,EAAQ,KAAK,eAAe,EAChC,KAAK,SAAS,EACd,KAAK,SAAS,CACV,KAAM,cACN,WAAYA,EAAM,QAAQ,SAASA,EAAM,YAAa,EAAE,CAC5D,CAAC,CACL,CACA,UAAW,CACP,IAAIA,EAAQ,KAAK,eAAe,EAChC,KAAK,SAAS,EACd,KAAK,SAAS,CACV,KAAM,cACN,WAAYA,EAAM,QAAQ,SAASA,EAAM,YAAa,CAAC,CAC3D,CAAC,CACL,CACA,OAAQ,CACJ,IAAIA,EAAQ,KAAK,eAAe,EAChC,KAAK,SAAS,EACd,KAAK,SAAS,CACV,KAAM,cACN,WAAYO,GAAOP,EAAM,gBAAgB,IAAKA,EAAM,OAAO,CAC/D,CAAC,CACL,CACA,SAASQ,EAAgB,CACrB,IAAIR,EAAQ,KAAK,eAAe,EAChC,KAAK,SAAS,EACd,KAAK,SAAS,CACV,KAAM,cACN,WAAYA,EAAM,QAAQ,aAAaQ,CAAc,CACzD,CAAC,CACL,CACA,cAAcC,EAAY,CACtB,IAAIT,EAAQ,KAAK,eAAe,EAC5BU,EAAQC,GAAeF,CAAU,EACjCC,IACA,KAAK,SAAS,EACd,KAAK,SAAS,CACV,KAAM,cACN,WAAYV,EAAM,QAAQ,IAAIA,EAAM,YAAaU,CAAK,CAC1D,CAAC,EAET,CACA,SAAU,CACN,IAAIV,EAAQ,KAAK,eAAe,EAChC,OAAOA,EAAM,QAAQ,OAAOA,EAAM,WAAW,CACjD,CAGA,WAAWY,EAAGC,EAAW,CACrB,GAAI,CAAE,QAAAf,CAAQ,EAAI,KAAK,eAAe,EACtC,OAAOA,EAAQ,OAAOA,EAAQ,aAAac,CAAC,EAAGE,GAAgBD,CAAS,CAAC,CAC7E,CAEA,YAAYE,EAAIC,EAAIC,EAAU,CAC1B,GAAI,CAAE,QAAAnB,CAAQ,EAAI,KAAK,eAAe,EACtC,OAAOA,EAAQ,YAAYA,EAAQ,aAAaiB,CAAE,EAAGjB,EAAQ,aAAakB,CAAE,EAAGF,GAAgBG,CAAQ,EAAGA,CAAQ,CACtH,CACA,UAAUL,EAAGM,EAAU,CACnB,GAAI,CAAE,QAAApB,CAAQ,EAAI,KAAK,eAAe,EACtC,OAAOA,EAAQ,UAAUA,EAAQ,aAAac,CAAC,EAAG,CAAE,SAAAM,CAAS,CAAC,CAClE,CAGA,OAAOC,EAAWC,EAAS,CACvB,IAAIC,EACAD,GAAW,KACPD,EAAU,OAAS,KACnBE,EAAiBF,EAGjBE,EAAiB,CACb,MAAOF,EACP,IAAK,IACT,EAIJE,EAAiB,CACb,MAAOF,EACP,IAAKC,CACT,EAEJ,IAAIpB,EAAQ,KAAK,eAAe,EAC5BsB,EAAYC,GAAcF,EAAgBrB,EAAM,QAASW,GAAe,CAAE,KAAM,CAAE,CAAC,CAAC,EACpFW,IACA,KAAK,SAAS,CAAE,KAAM,eAAgB,UAAAA,CAAU,CAAC,EACjDE,GAAkBF,EAAW,KAAMtB,CAAK,EAEhD,CACA,SAASyB,EAAK,CACV,IAAIzB,EAAQ,KAAK,eAAe,EAC5BA,EAAM,gBACN,KAAK,SAAS,CAAE,KAAM,gBAAiB,CAAC,EACxC0B,GAAoBD,EAAKzB,CAAK,EAEtC,CAGA,SAAS2B,EAAYC,EAAa,CAC9B,GAAID,aAAsBE,GAAW,CACjC,IAAIC,EAAMH,EAAW,KACjBI,EAAWJ,EAAW,UAG1B,OAFkB,KAAK,eAAe,EAErB,WAAW,KAAKG,EAAI,KAAK,IACtC,KAAK,SAAS,CACV,KAAM,aACN,WAAYE,GAAkB,CAAE,IAAAF,EAAK,SAAAC,CAAS,CAAC,CACnD,CAAC,EACD,KAAK,gBAAgBJ,CAAU,GAE5BA,CACX,CACA,IAAI3B,EAAQ,KAAK,eAAe,EAC5BiC,EACJ,GAAIL,aAAuBM,GACvBD,EAAcL,EAAY,4BAErB,OAAOA,GAAgB,UACxBA,IACA,CAACK,CAAW,EAAIE,GAAkBnC,EAAM,YAAY,WAGnD4B,GAAe,KAAM,CAC1B,IAAIQ,EAAY,KAAK,mBAAmBR,CAAW,EACnD,GAAI,CAACQ,EACD,eAAQ,KAAK,2CAA2CR,CAAW,GAAG,EAC/D,KAEXK,EAAcG,EAAU,mBAC5B,CACA,IAAIC,EAAQC,GAAWX,EAAYM,EAAajC,EAAO,EAAK,EAC5D,GAAIqC,EAAO,CACP,IAAIE,EAAc,IAAIV,GAAU7B,EAAOqC,EAAM,IAAKA,EAAM,IAAI,aAAe,KAAOA,EAAM,QAAQ,EAChG,YAAK,SAAS,CACV,KAAM,aACN,WAAYL,GAAkBK,CAAK,CACvC,CAAC,EACD,KAAK,gBAAgBE,CAAW,EACzBA,CACX,CACA,OAAO,IACX,CACA,gBAAgBC,EAAU,CACtB,GAAI,CAAE,QAAAC,CAAQ,EAAI,KAAK,eAAe,EACtCA,EAAQ,QAAQ,WAAY,CACxB,MAAOD,EACP,cAAe,CAAC,EAChB,OAAQ,IAAM,CACV,KAAK,SAAS,CACV,KAAM,gBACN,WAAYE,GAAgBF,CAAQ,CACxC,CAAC,CACL,CACJ,CAAC,CACL,CAEA,aAAaG,EAAI,CACb,IAAI3C,EAAQ,KAAK,eAAe,EAC5B,CAAE,KAAA4C,EAAM,UAAAC,CAAU,EAAI7C,EAAM,WAChC2C,EAAK,OAAOA,CAAE,EACd,QAASG,KAASF,EAAM,CACpB,IAAId,EAAMc,EAAKE,CAAK,EACpB,GAAIhB,EAAI,WAAaa,EAAI,CACrB,GAAIb,EAAI,aACJ,OAAO,IAAID,GAAU7B,EAAO8B,EAAK,IAAI,EAEzC,QAASiB,KAAcF,EAAW,CAC9B,IAAId,EAAWc,EAAUE,CAAU,EACnC,GAAIhB,EAAS,QAAUD,EAAI,MACvB,OAAO,IAAID,GAAU7B,EAAO8B,EAAKC,CAAQ,CAEjD,CACJ,CACJ,CACA,OAAO,IACX,CACA,WAAY,CACR,IAAIiB,EAAc,KAAK,eAAe,EACtC,OAAOC,GAAeD,EAAY,WAAYA,CAAW,CAC7D,CACA,iBAAkB,CACd,KAAK,SAAS,CAAE,KAAM,mBAAoB,CAAC,CAC/C,CAGA,iBAAkB,CACd,IAAIhD,EAAQ,KAAK,eAAe,EAC5BkD,EAAalD,EAAM,aACnBmD,EAAa,CAAC,EAClB,QAASC,KAAcF,EACnBC,EAAW,KAAK,IAAIjB,GAAgBlC,EAAOkD,EAAWE,CAAU,CAAC,CAAC,EAEtE,OAAOD,CACX,CACA,mBAAmBR,EAAI,CACnB,IAAI3C,EAAQ,KAAK,eAAe,EAC5BkD,EAAalD,EAAM,aACvB2C,EAAK,OAAOA,CAAE,EACd,QAASU,KAAYH,EACjB,GAAIA,EAAWG,CAAQ,EAAE,WAAaV,EAClC,OAAO,IAAIT,GAAgBlC,EAAOkD,EAAWG,CAAQ,CAAC,EAG9D,OAAO,IACX,CACA,eAAezB,EAAa,CACxB,IAAI5B,EAAQ,KAAK,eAAe,EAChC,GAAI4B,aAAuBM,GAEvB,OAAKlC,EAAM,aAAa4B,EAAY,oBAAoB,QAAQ,GAC5D,KAAK,SAAS,CACV,KAAM,oBACN,QAAS,CAACA,EAAY,mBAAmB,CAC7C,CAAC,EAEEA,EAEX,IAAIK,EAAcqB,GAAiB1B,EAAa5B,CAAK,EACrD,OAAIiC,GACA,KAAK,SAAS,CAAE,KAAM,oBAAqB,QAAS,CAACA,CAAW,CAAE,CAAC,EAC5D,IAAIC,GAAgBlC,EAAOiC,CAAW,GAE1C,IACX,CACA,uBAAwB,CACpB,KAAK,SAAS,CAAE,KAAM,0BAA2B,CAAC,CACtD,CACA,eAAgB,CACZ,KAAK,SAAS,CAAE,KAAM,sBAAuB,UAAW,EAAK,CAAC,CAClE,CAGA,aAAasB,EAAW,CACpB,IAAIC,EAAO7C,GAAe4C,CAAS,EAC/BC,GACA,KAAK,QAAQ,iBAAkB,CAAE,KAAAA,CAAK,CAAC,CAE/C,CACJ,EASA,SAASC,GAAeC,EAAOC,EAAO,CAClC,IAAIC,EAAM,CACN,KAAM,KAAK,IAAIF,EAAM,KAAMC,EAAM,IAAI,EACrC,MAAO,KAAK,IAAID,EAAM,MAAOC,EAAM,KAAK,EACxC,IAAK,KAAK,IAAID,EAAM,IAAKC,EAAM,GAAG,EAClC,OAAQ,KAAK,IAAID,EAAM,OAAQC,EAAM,MAAM,CAC/C,EACA,OAAIC,EAAI,KAAOA,EAAI,OAASA,EAAI,IAAMA,EAAI,OAC/BA,EAEJ,EACX,CA+BA,IAAMC,GAAoBC,GAAsB,EAC1CC,GAAN,KAAe,CACX,aAAc,CACV,KAAK,oBAAsBC,GAAQ,KAAK,oBAAoB,EAC5D,KAAK,mBAAqBA,GAAQ,KAAK,cAAc,EACrD,KAAK,gBAAkBA,GAAQ,KAAK,gBAAgB,EACpD,KAAK,kBAAoBA,GAAQ,KAAK,kBAAkB,EACxD,KAAK,eAAiBA,GAAQ,KAAK,iBAAiB,EACpD,KAAK,iBAAmBA,GAAQ,KAAK,iBAAiB,EACtD,KAAK,gBAAkB,CAAC,CAC5B,CACA,WAAWC,EAAO,CACd,IAAIC,EAAW,KAAK,WAAWD,CAAK,EAChCE,EAAU,KAAK,oBAAoBF,EAAM,UAAU,EACnDG,EAAiB,KAAK,mBAAmBH,EAAM,aAAa,EAC5DI,EAAe,KAAK,kBAAkBJ,EAAM,aAAcE,CAAO,EACjEG,EAAc,KAAK,gBAAgBL,EAAM,WAAYE,CAAO,EAC5DI,EAAa,KAAK,eAAeN,EAAM,SAAS,EAChDO,EAAe,KAAK,iBAAiBP,EAAM,WAAW,EACtDQ,EAAa,CAAC,EAClB,KAAK,gBAAkBC,GAAQR,EAAU,CAACS,EAAMC,IAAQ,KAAK,gBAAgBA,CAAG,GAAKZ,GAAQa,EAAkB,CAAC,EAChH,QAASD,KAAOV,EAAU,CACtB,IAAIY,EAAUZ,EAASU,CAAG,EACtBG,EAAaT,EAAYM,CAAG,GAAKf,GACjCmB,EAAe,KAAK,gBAAgBJ,CAAG,EAC3CH,EAAWG,CAAG,EAAI,CACd,cAAeE,EAAQ,eAAiBb,EAAM,cAC9C,cAAeG,EAAeQ,CAAG,GAAK,KACtC,WAAAG,EACA,aAAcC,EAAaf,EAAM,aAAa,EAAE,EAAGa,EAAQ,GAAIT,EAAaO,CAAG,CAAC,EAChF,eAAgBG,EAAW,UAAUd,EAAM,cAAc,EAAIA,EAAM,eAAiB,GACpF,UAAWM,EAAWK,CAAG,GAAK,KAC9B,YAAaJ,EAAaI,CAAG,GAAK,IACtC,CACJ,CACA,OAAOH,CACX,CACA,eAAeQ,EAAU,CACrB,IAAIC,EAAY,CAAC,EACjB,GAAID,EAAU,CACV,IAAIE,EAAO,KAAK,mBAAmBF,CAAQ,EAC3C,QAASL,KAAOO,EACZD,EAAUN,CAAG,EAAIK,CAEzB,CACA,OAAOC,CACX,CACA,qBAAqBH,EAAY,CAC7B,OAAOL,GAAQK,EAAW,KAAOK,GAAa,KAAK,mBAAmBA,CAAQ,CAAC,CACnF,CACA,iBAAiBL,EAAYZ,EAAS,CAClC,GAAI,CAAE,KAAAkB,EAAM,UAAAC,CAAU,EAAIP,EACtBQ,EAAc,CAAC,EACnB,QAASC,KAASH,EACd,QAAST,KAAOT,EAAQqB,CAAK,EACpBD,EAAYX,CAAG,IAChBW,EAAYX,CAAG,EAAId,GAAsB,GAE7CyB,EAAYX,CAAG,EAAE,KAAKY,CAAK,EAAIH,EAAKG,CAAK,EAGjD,QAASC,KAAcH,EAAW,CAC9B,IAAII,EAAWJ,EAAUG,CAAU,EACnC,QAASb,KAAOT,EAAQuB,EAAS,KAAK,EAC9BH,EAAYX,CAAG,IACfW,EAAYX,CAAG,EAAE,UAAUa,CAAU,EAAIC,EAGrD,CACA,OAAOH,CACX,CACA,mBAAmBI,EAAcxB,EAAS,CACtC,IAAIyB,EAAc,CAAC,EACnB,QAASJ,KAASG,EACd,GAAIH,EACA,QAASZ,KAAOT,EAAQqB,CAAK,EACpBI,EAAYhB,CAAG,IAChBgB,EAAYhB,CAAG,EAAI,CAAC,GAExBgB,EAAYhB,CAAG,EAAEY,CAAK,EAAIG,EAAaH,CAAK,EAIxD,OAAOI,CACX,CACA,kBAAkBC,EAAa,CAC3B,IAAIC,EAAc,CAAC,EACnB,GAAID,EAAa,CACb,IAAIE,EAAiB,KAAK,iBAAiBF,EAAY,eAAgB,KAAK,qBAAqBA,EAAY,cAAc,CAAC,EAExHG,EAAqB,KAAK,qBAAqBH,EAAY,aAAa,EACxEI,EAAgB,KAAK,iBAAiBJ,EAAY,cAAeG,CAAkB,EACnFE,EAAYtB,GAAQ,CACfkB,EAAYlB,CAAG,IAChBkB,EAAYlB,CAAG,EAAI,CACf,eAAgBmB,EAAenB,CAAG,GAAKf,GACvC,cAAeoC,EAAcrB,CAAG,GAAKf,GACrC,QAASgC,EAAY,OACzB,EAER,EACA,QAASjB,KAAOmB,EACZG,EAAStB,CAAG,EAEhB,QAASA,KAAOqB,EACZC,EAAStB,CAAG,CAEpB,CACA,OAAOkB,CACX,CACJ,EACA,SAASjB,GAAmBsB,EAAOC,EAAe/B,EAAc,CAC5D,IAAIgC,EAAY,CAAC,EACbF,GACAE,EAAU,KAAKF,CAAK,EAEpBC,GACAC,EAAU,KAAKD,CAAa,EAEhC,IAAIE,EAAQ,CACR,GAAIC,GAAgBF,CAAS,CACjC,EACA,OAAIhC,GACA,OAAO,OAAOiC,EAAOjC,CAAY,EAE9BiC,CACX,CAEA,SAASE,GAAYC,EAAMC,EAAYC,EAASC,EAAa,CACzD,MAAO,CACH,IAAKH,EAAK,UAAU,EACpB,WAAY,GAAQG,GAAe,CAACC,GAAoBD,EAAY,YAAaH,CAAI,GACrF,QAAS,GAAQG,GAAe,CAACC,GAAoBD,EAAY,aAAcH,CAAI,GACnF,QAAS,GAAQC,GAAcG,GAAoBH,EAAYD,CAAI,GACnE,OAAQ,GAAQE,EAAWF,EAAOE,EAAWD,GAAcD,EAAOC,EAAW,OAC7E,SAAU,GAAQC,EAAWF,EAAOE,EAAWD,GAAcD,GAAQC,EAAW,IACpF,CACJ,CACA,SAASI,GAAiBC,EAAMC,EAAO,CACnC,IAAIC,EAAa,CACb,SACA,UAAUC,GAAQH,EAAK,GAAG,CAAC,EAC/B,EACA,OAAIA,EAAK,WACLE,EAAW,KAAK,iBAAiB,GAG7BF,EAAK,UACLE,EAAW,KAAK,cAAc,EAC9BA,EAAW,KAAKD,EAAM,SAAS,OAAO,CAAC,GAEvCD,EAAK,QACLE,EAAW,KAAK,aAAa,EAE7BF,EAAK,UACLE,EAAW,KAAK,eAAe,EAE/BF,EAAK,SACLE,EAAW,KAAK,cAAc,GAG/BA,CACX,CAwBA,IAAME,GAAaC,GAAgB,CAAE,KAAM,UAAW,MAAO,OAAQ,IAAK,SAAU,CAAC,EAC/EC,GAAcD,GAAgB,CAAE,KAAM,MAAO,CAAC,EACpD,SAASE,GAAkBC,EAASC,EAAYC,EAAW,MAAOC,EAAa,GAAM,CACjF,GAAM,CAAE,QAAAC,EAAS,QAAAC,EAAS,YAAAC,CAAY,EAAIN,EACtCO,EAAUH,EAAQ,OAAOH,EAAYC,IAAa,OAASJ,GAAcF,EAAU,EACvF,GAAIS,EAAQ,SAAU,CAClB,IAAIG,EAAYJ,EAAQ,OAAOH,CAAU,EACnCQ,EAAqBC,GAAO,CAC9B,IAAIC,EAAeT,IAAa,MAAQG,EAAQ,gBAC5CH,IAAa,OAASG,EAAQ,iBAAmB,KACjD,OAAOM,GAAiB,WACxBA,EAAa,KAAKL,EAAaF,EAAQ,OAAOH,CAAU,EAAGS,CAAE,GAGzD,OAAOC,GAAiB,WACxBT,EAAWS,GAEfL,EAAY,OAAOL,EAAYC,CAAQ,EAE/C,EACA,OAAO,OAAO,OAAO,CAAE,MAAOU,GAAmBP,EAAQ,YAAa,CAACE,EAASC,CAAS,EAAGD,CAAO,EAAG,eAAgB,EAAG,EAAIJ,EACvHU,GAAqBJ,CAAiB,EACtC,CAAE,QAASA,CAAkB,CAAE,CACzC,CACA,MAAO,CAAE,aAAcF,CAAQ,CACnC,CA4BA,IAAIO,GACJ,SAASC,IAAqB,CAC1B,OAAKD,KACDA,GAAmBE,GAAuB,GAEvCF,EACX,CACA,SAASE,IAAyB,CAC9B,IAAIC,EAAK,SAAS,cAAc,KAAK,EACrCA,EAAG,MAAM,SAAW,SACpBA,EAAG,MAAM,SAAW,WACpBA,EAAG,MAAM,IAAM,UACfA,EAAG,MAAM,KAAO,UAChB,SAAS,KAAK,YAAYA,CAAE,EAC5B,IAAIC,EAAMC,GAA4BF,CAAE,EACxC,gBAAS,KAAK,YAAYA,CAAE,EACrBC,CACX,CAEA,SAASC,GAA4BF,EAAI,CACrC,MAAO,CACH,EAAGA,EAAG,aAAeA,EAAG,aACxB,EAAGA,EAAG,YAAcA,EAAG,WAC3B,CACJ,CA4DA,SAASG,GAAyBC,EAAI,CAClC,IAAIC,EAAkBC,GAAmBF,CAAE,EACvCG,EAAOH,EAAG,sBAAsB,EACpC,QAASI,KAAkBH,EAAiB,CACxC,IAAII,EAAeC,GAAeH,EAAMC,EAAe,sBAAsB,CAAC,EAC9E,GAAIC,EACAF,EAAOE,MAGP,QAAO,IAEf,CACA,OAAOF,CACX,CAEA,SAASD,GAAmBF,EAAI,CAC5B,IAAIO,EAAU,CAAC,EACf,KAAOP,aAAc,aAAa,CAC9B,IAAIQ,EAAgB,OAAO,iBAAiBR,CAAE,EAC9C,GAAIQ,EAAc,WAAa,QAC3B,MAEC,gBAAiB,KAAKA,EAAc,SAAWA,EAAc,UAAYA,EAAc,SAAS,GACjGD,EAAQ,KAAKP,CAAE,EAEnBA,EAAKA,EAAG,UACZ,CACA,OAAOO,CACX,CAOA,IAAME,GAAN,KAAoB,CAChB,YAAYC,EAAUC,EAAKC,EAAcC,EAAY,CACjD,KAAK,IAAMF,EACX,IAAIG,EAAmB,KAAK,iBAAmBJ,EAAS,sBAAsB,EAC1EE,GACA,KAAK,mBAAmBE,EAAiB,IAAI,EAE7CD,GACA,KAAK,iBAAiBC,EAAiB,GAAG,CAElD,CAEA,mBAAmBC,EAAkB,CACjC,IAAIC,EAAQ,CAAC,EACTC,EAAS,CAAC,EACd,QAASjB,KAAM,KAAK,IAAK,CACrB,IAAIG,EAAOH,EAAG,sBAAsB,EACpCgB,EAAM,KAAKb,EAAK,KAAOY,CAAgB,EACvCE,EAAO,KAAKd,EAAK,MAAQY,CAAgB,CAC7C,CACA,KAAK,MAAQC,EACb,KAAK,OAASC,CAClB,CAEA,iBAAiBC,EAAiB,CAC9B,IAAIC,EAAO,CAAC,EACRC,EAAU,CAAC,EACf,QAASpB,KAAM,KAAK,IAAK,CACrB,IAAIG,EAAOH,EAAG,sBAAsB,EACpCmB,EAAK,KAAKhB,EAAK,IAAMe,CAAe,EACpCE,EAAQ,KAAKjB,EAAK,OAASe,CAAe,CAC9C,CACA,KAAK,KAAOC,EACZ,KAAK,QAAUC,CACnB,CAGA,YAAYC,EAAc,CACtB,GAAI,CAAE,MAAAL,EAAO,OAAAC,CAAO,EAAI,KACpBK,EAAMN,EAAM,OACZO,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAKC,GAAK,EACtB,GAAIF,GAAgBL,EAAMO,CAAC,GAAKF,EAAeJ,EAAOM,CAAC,EACnD,OAAOA,CAInB,CAGA,WAAWC,EAAa,CACpB,GAAI,CAAE,KAAAL,EAAM,QAAAC,CAAQ,EAAI,KACpBE,EAAMH,EAAK,OACXI,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAKC,GAAK,EACtB,GAAIC,GAAeL,EAAKI,CAAC,GAAKC,EAAcJ,EAAQG,CAAC,EACjD,OAAOA,CAInB,CAEA,SAASE,EAAW,CAChB,OAAO,KAAK,OAAOA,CAAS,EAAI,KAAK,MAAMA,CAAS,CACxD,CAEA,UAAUC,EAAU,CAChB,OAAO,KAAK,QAAQA,CAAQ,EAAI,KAAK,KAAKA,CAAQ,CACtD,CACA,UAAUC,EAAY,CAClB,OAAOC,GAAiB,KAAK,MAAQ,CAAC,EAAGD,EAAW,MAAQ,CAAC,CAAC,GAC1DC,GAAiB,KAAK,SAAW,CAAC,EAAGD,EAAW,SAAW,CAAC,CAAC,GAC7DC,GAAiB,KAAK,OAAS,CAAC,EAAGD,EAAW,OAAS,CAAC,CAAC,GACzDC,GAAiB,KAAK,QAAU,CAAC,EAAGD,EAAW,QAAU,CAAC,CAAC,CACnE,CACJ,EACA,SAASC,GAAiBC,EAAGC,EAAG,CAC5B,IAAMR,EAAMO,EAAE,OACd,GAAIP,IAAQQ,EAAE,OACV,MAAO,GAEX,QAAS,EAAI,EAAG,EAAIR,EAAK,IACrB,GAAI,KAAK,MAAMO,EAAE,CAAC,CAAC,IAAM,KAAK,MAAMC,EAAE,CAAC,CAAC,EACpC,MAAO,GAGf,MAAO,EACX,CAkGA,IAAMC,GAAN,cAA4BC,EAAc,CACtC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,IAAMC,GAAK,CACpB,CAGA,aAAc,CACd,CACA,SAASC,EAAcC,EAAaC,EAASC,EAAU,CACnD,OAAO,IACX,CAGA,iBAAiBC,EAAI,CACjB,MAAO,CAAC,KAAK,MAAM,WACf,CAAC,KAAK,MAAM,aACZ,CAACC,GAAeD,EAAI,kBAAkB,CAC9C,CACA,kBAAkBA,EAAI,CAClB,MAAO,CAACC,GAAeD,EAAI,6BAA6B,GACpD,CAACC,GAAeD,EAAI,eAAe,GACnC,CAACC,GAAeD,EAAI,iBAAiB,GACrC,CAACC,GAAeD,EAAI,aAAa,CACzC,CACJ,EAQA,IAAME,GAAN,KAAmB,CACf,YAAYC,EAAqBC,GAEtBA,EAAM,WAAa,EAC3B,CACC,KAAK,kBAAoBD,EAEzB,KAAK,YAAc,GACnB,KAAK,eAAiB,GACtB,KAAK,SAAW,GAChB,KAAK,YAAc,GACnB,KAAK,YAAc,CAAC,EACpB,KAAK,eAAiB,CAAC,EACvB,KAAK,UAAY,CAAC,CACtB,CACA,QAAQE,EAAQ,CACZ,IAAIC,EAAgB,CAAC,EACrB,QAASC,KAASF,EACd,KAAK,YAAYE,EAAOD,CAAa,EAEzC,OAAOA,CACX,CACA,YAAYF,EAAOE,EAAe,CAC9B,IAAIE,EAAY,KAAK,cAAcJ,CAAK,EACpC,KAAK,iBAAiBI,EAAWJ,CAAK,EACtC,KAAK,cAAcA,EAAOI,CAAS,EAGnC,KAAK,uBAAuBA,EAAWJ,EAAOE,CAAa,CAEnE,CACA,iBAAiBE,EAAWJ,EAAO,CAC/B,OAAQ,KAAK,WAAa,IAAMI,EAAU,WAAa,KAAK,kBAAkBJ,CAAK,GAAK,KAAK,YACxF,KAAK,cAAgB,IAAMI,EAAU,SAAW,KAAK,YAC9D,CACA,uBAAuBA,EAAWJ,EAAOE,EAAe,CACpD,GAAI,KAAK,gBAAkBE,EAAU,cAAe,CAChD,IAAMC,EAAc,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGL,CAAK,EAAG,CAAE,KAAMM,GAAeN,EAAM,KAAMI,EAAU,cAAc,IAAI,CAAE,CAAC,EAC9HF,EAAc,KAAKG,CAAW,EAC9B,KAAK,WAAWL,EAAOI,EAAU,cAAeF,CAAa,CACjE,MAEIA,EAAc,KAAKF,CAAK,CAEhC,CAIA,WAAWA,EAAOO,EAASL,EAAe,CACtC,IAAIM,EAAYR,EAAM,KAClBS,EAAcF,EAAQ,KACtBC,EAAU,MAAQC,EAAY,OAC9B,KAAK,YAAY,CACb,MAAOT,EAAM,MACb,UAAWA,EAAM,UACjB,KAAM,CAAE,MAAOQ,EAAU,MAAO,IAAKC,EAAY,KAAM,CAC3D,EAAGP,CAAa,EAEhBM,EAAU,IAAMC,EAAY,KAC5B,KAAK,YAAY,CACb,MAAOT,EAAM,MACb,UAAWA,EAAM,UACjB,KAAM,CAAE,MAAOS,EAAY,IAAK,IAAKD,EAAU,GAAI,CACvD,EAAGN,CAAa,CAExB,CACA,cAAcF,EAAOI,EAAW,CAC5B,GAAI,CAAE,eAAAM,EAAgB,YAAAC,CAAY,EAAI,KAClCP,EAAU,UAAY,IAEtBQ,GAASD,EAAaP,EAAU,MAAOA,EAAU,UAAU,EAC3DQ,GAASF,EAAgBN,EAAU,MAAO,CAACJ,CAAK,CAAC,GAIjDY,GAASF,EAAeN,EAAU,KAAK,EAAGA,EAAU,QAASJ,CAAK,EAEtE,KAAK,UAAUa,GAAcb,CAAK,CAAC,EAAII,EAAU,QACrD,CAIA,cAAcU,EAAU,CACpB,GAAI,CAAE,YAAAH,EAAa,eAAAD,EAAgB,YAAAK,EAAa,UAAAC,CAAU,EAAI,KAC1DC,EAAWN,EAAY,OACvBO,EAAiB,EACjBC,EAAgB,GAChBC,EAAkB,GAClBC,EAAgB,KAChBC,EAAW,EACf,QAASC,EAAgB,EAAGA,EAAgBN,EAAUM,GAAiB,EAAG,CACtE,IAAMC,EAAgBb,EAAYY,CAAa,EAG/C,GAAI,CAACR,GAAeS,GAAiBN,EAAiB,KAAK,kBAAkBJ,CAAQ,EACjF,MAEJ,IAAIW,EAAkBf,EAAea,CAAa,EAC9CG,EACAC,EAAYC,GAAaH,EAAiBX,EAAS,KAAK,MAAOe,EAAe,EAC9EC,EAAeH,EAAU,CAAC,EAAIA,EAAU,CAAC,EAC7C,MACCD,EAAgBD,EAAgBK,CAAY,IACzCJ,EAAc,KAAK,MAAQZ,EAAS,KAAK,KAC3C,CACE,IAAIiB,EAAsBP,EAAgB,KAAK,kBAAkBE,CAAa,EAE1EK,EAAsBb,IACtBA,EAAiBa,EACjBV,EAAgBK,EAChBP,EAAgBI,EAChBH,EAAkBU,GAGlBC,IAAwBb,IAExBI,EAAW,KAAK,IAAIA,EAAUN,EAAUH,GAAca,CAAa,CAAC,EAAI,CAAC,GAE7EI,GAAgB,CACpB,CACJ,CAEA,IAAIE,EAAY,EAChB,GAAIX,EAEA,IADAW,EAAYb,EAAgB,EACrBa,EAAYf,GAAYN,EAAYqB,CAAS,EAAId,GACpDc,GAAa,EAIrB,IAAIC,EAAc,GAClB,OAAID,EAAYf,GAAYN,EAAYqB,CAAS,IAAMd,IACnDe,EAAcL,GAAalB,EAAesB,CAAS,EAAGlB,EAAS,KAAK,IAAKe,EAAe,EAAE,CAAC,GAExF,CACH,cAAAV,EACA,gBAAAC,EACA,cAAAC,EACA,SAAAC,EACA,WAAYJ,EACZ,MAAOc,EACP,QAASC,CACb,CACJ,CAEA,SAAU,CACN,GAAI,CAAE,eAAAvB,EAAgB,YAAAC,CAAY,EAAI,KAClCM,EAAWP,EAAe,OAC1BwB,EAAQ,CAAC,EACb,QAASC,EAAQ,EAAGA,EAAQlB,EAAUkB,GAAS,EAAG,CAC9C,IAAIC,EAAU1B,EAAeyB,CAAK,EAC9BE,EAAa1B,EAAYwB,CAAK,EAClC,QAASnC,KAASoC,EACdF,EAAM,KAAK,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGlC,CAAK,EAAG,CAAE,UAAW,KAAK,kBAAkBA,CAAK,EAAG,WAAAqC,CAAW,CAAC,CAAC,CAEpH,CACA,OAAOH,CACX,CACJ,EACA,SAASL,GAAgB7B,EAAO,CAC5B,OAAOA,EAAM,KAAK,GACtB,CACA,SAASa,GAAcb,EAAO,CAC1B,OAAOA,EAAM,MAAQ,IAAMA,EAAM,KAAK,KAC1C,CAEA,SAASsC,GAAyBF,EAAS,CACvC,IAAIG,EAAS,CAAC,EACd,QAASvC,KAASoC,EAAS,CACvB,IAAII,EAAiB,CAAC,EAClBC,EAAc,CACd,KAAMzC,EAAM,KACZ,QAAS,CAACA,CAAK,CACnB,EACA,QAAS0C,KAASH,EACVjC,GAAeoC,EAAM,KAAMD,EAAY,IAAI,EAC3CA,EAAc,CACV,QAASC,EAAM,QAAQ,OAAOD,EAAY,OAAO,EACjD,KAAME,GAAUD,EAAM,KAAMD,EAAY,IAAI,CAChD,EAGAD,EAAe,KAAKE,CAAK,EAGjCF,EAAe,KAAKC,CAAW,EAC/BF,EAASC,CACb,CACA,OAAOD,CACX,CACA,SAASI,GAAUC,EAAOC,EAAO,CAC7B,MAAO,CACH,MAAO,KAAK,IAAID,EAAM,MAAOC,EAAM,KAAK,EACxC,IAAK,KAAK,IAAID,EAAM,IAAKC,EAAM,GAAG,CACtC,CACJ,CACA,SAASvC,GAAesC,EAAOC,EAAO,CAClC,IAAIC,EAAQ,KAAK,IAAIF,EAAM,MAAOC,EAAM,KAAK,EACzCE,EAAM,KAAK,IAAIH,EAAM,IAAKC,EAAM,GAAG,EACvC,OAAIC,EAAQC,EACD,CAAE,MAAAD,EAAO,IAAAC,CAAI,EAEjB,IACX,CAGA,SAASnC,GAASoC,EAAKC,EAAOC,EAAM,CAChCF,EAAI,OAAOC,EAAO,EAAGC,CAAI,CAC7B,CACA,SAAStB,GAAauB,EAAGC,EAAWC,EAAY,CAC5C,IAAIC,EAAa,EACbC,EAAWJ,EAAE,OACjB,GAAI,CAACI,GAAYH,EAAYC,EAAWF,EAAEG,CAAU,CAAC,EACjD,MAAO,CAAC,EAAG,CAAC,EAEhB,GAAIF,EAAYC,EAAWF,EAAEI,EAAW,CAAC,CAAC,EACtC,MAAO,CAACA,EAAU,CAAC,EAEvB,KAAOD,EAAaC,GAAU,CAC1B,IAAIC,EAAc,KAAK,MAAMF,GAAcC,EAAWD,GAAc,CAAC,EACjEG,EAAYJ,EAAWF,EAAEK,CAAW,CAAC,EACzC,GAAIJ,EAAYK,EACZF,EAAWC,UAENJ,EAAYK,EACjBH,EAAaE,EAAc,MAG3B,OAAO,CAACA,EAAa,CAAC,CAE9B,CACA,MAAO,CAACF,EAAY,CAAC,CACzB,CA0DA,SAASI,GAA4BC,EAAsBC,EAAQ,CAG/D,MAAI,CAACD,GAAwBC,EAAS,GAC3BC,GAAgB,CAAE,QAAS,OAAQ,CAAC,EAE3CD,EAAS,EACFC,GAAgB,CAAE,QAAS,QAAS,MAAO,UAAW,IAAK,UAAW,WAAY,EAAK,CAAC,EAE5FA,GAAgB,CAAE,QAAS,MAAO,CAAC,CAC9C,CAEA,IAAMC,GAAa,qBACnB,SAASC,GAAcC,EAAa,CAChC,OAAOA,EAAY,IACvB,CAGA,IAAMC,GAAN,cAA4BC,EAAc,CACtC,QAAS,CACL,GAAI,CAAE,QAAAC,EAAS,QAAAC,EAAS,MAAAC,EAAO,QAAAC,CAAQ,EAAI,KAAK,QAC5C,CAAE,MAAAC,CAAM,EAAI,KACZ,CAAE,KAAAC,EAAM,YAAAC,CAAY,EAAIF,EACxBG,EAAUC,GAAYH,EAAMD,EAAM,WAAY,KAAME,CAAW,EAC/DG,EAAa,CAACd,EAAU,EAAE,OAAOe,GAAiBH,EAASL,CAAK,CAAC,EACjES,EAAOX,EAAQ,OAAOK,EAAMD,EAAM,eAAe,EAEjDQ,EAAgB,CAACL,EAAQ,YAAcH,EAAM,OAAS,EACpDS,GAAkB,KAAK,QAASR,CAAI,EACpC,CAAC,EACHR,EAAc,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAE,KAAMG,EAAQ,OAAOK,CAAI,EAAG,KAAMF,CAAQ,EAAGC,EAAM,gBAAgB,EAAG,CAAE,KAAAO,CAAK,CAAC,EAAGJ,CAAO,EACtJ,OAAQO,EAAcC,GAAkB,CAAE,MAAO,KAAM,UAAWN,EAAY,QAAS,OAAO,OAAO,CAAE,KAAM,eAAgB,QAASL,EAAM,QAAS,YAAcG,EAAQ,WAAqC,OAAxBS,GAAgBX,CAAI,CAAc,EAAGD,EAAM,cAAc,EAAG,YAAaP,EAAa,cAAe,mBAAoB,gBAAiBI,EAAQ,iBAAkB,iBAAkBL,GAAe,mBAAoBK,EAAQ,oBAAqB,SAAUA,EAAQ,kBAAmB,YAAaA,EAAQ,oBAAqB,EAAIgB,GAAoBH,EAAc,MAAO,CAAE,UAAW,0BAA2B,EAAG,CAACP,EAAQ,YAAeO,EAAcG,EAAgB,CAAE,MAAO,IAAK,QAASL,EAAc,UAAW,CACnrB,6BACAR,EAAM,UAAY,WACtB,CAAE,CAAC,CAAE,CAAE,CACf,CACJ,EAEMc,GAAiBxB,GAAgB,CAAE,QAAS,MAAO,CAAC,EACpDyB,GAAN,cAA2BpB,EAAc,CACrC,QAAS,CACL,GAAI,CAAE,MAAAK,CAAM,EAAI,KACZ,CAAE,QAAAJ,EAAS,MAAAE,EAAO,QAAAC,EAAS,QAAAF,CAAQ,EAAI,KAAK,QAC5CI,EAAOe,GAAQ,IAAI,KAAK,MAAS,EAAGhB,EAAM,GAAG,EAC7CiB,EAAW,CACX,IAAKjB,EAAM,IACX,WAAY,GACZ,SAAU,GACV,OAAQ,GACR,QAAS,GACT,QAAS,EACb,EACIO,EAAOX,EAAQ,OAAOK,EAAMD,EAAM,eAAe,EACjDP,EAAc,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CACtE,KAAAQ,CAAK,EAAGgB,CAAQ,EAAG,CAAE,KAAMlB,CAAQ,CAAC,EAAGC,EAAM,gBAAgB,EAAG,CAAE,KAAAO,CAAK,CAAC,EAC5E,OAAQG,EAAcC,GAAkB,CAAE,MAAO,KAAM,UAAW,CAC1DpB,GACA,GAAGe,GAAiBW,EAAUnB,CAAK,EACnC,GAAIE,EAAM,iBAAmB,CAAC,CAClC,EAAG,QAAS,OAAO,OAAO,CAAE,KAAM,eAAgB,QAASA,EAAM,OAAQ,EAAGA,EAAM,cAAc,EAAG,YAAaP,EAAa,cAAe,mBAAoB,gBAAiBI,EAAQ,iBAAkB,iBAAkBL,GAAe,mBAAoBK,EAAQ,oBAAqB,SAAUA,EAAQ,kBAAmB,YAAaA,EAAQ,oBAAqB,EAAIqB,GAAkBR,EAAc,MAAO,CAAE,UAAW,0BAA2B,EAC/bA,EAAcQ,EAAc,CAAE,MAAO,IAAK,UAAW,CAC7C,6BACAlB,EAAM,UAAY,WACtB,EAAG,QAAS,CACR,aAAcJ,EAAQ,OAAOK,EAAMa,EAAc,CACrD,CAAE,CAAC,CAAC,CAAE,CAClB,CACJ,EAEMK,GAAN,cAAuBC,EAAU,CAC7B,YAAYpB,EAAOqB,EAAS,CACxB,MAAMrB,EAAOqB,CAAO,EACpB,KAAK,eAAiBC,GAAOD,EAAQ,QAAQ,IAAKA,EAAQ,OAAO,EACjE,KAAK,oBAAsB,IAAI,KAAK,EAAE,QAAQ,EAC9C,KAAK,MAAQ,KAAK,cAAc,EAAE,YACtC,CACA,QAAS,CACL,GAAI,CAAE,MAAArB,EAAO,MAAAuB,CAAM,EAAI,KACvB,OAAOvB,EAAM,SAASuB,EAAM,QAASA,EAAM,UAAU,CACzD,CACA,mBAAoB,CAChB,KAAK,WAAW,CACpB,CACA,mBAAmBC,EAAW,CACtBA,EAAU,OAAS,KAAK,MAAM,OAC9B,KAAK,aAAa,EAClB,KAAK,WAAW,EAExB,CACA,sBAAuB,CACnB,KAAK,aAAa,CACtB,CACA,eAAgB,CACZ,GAAI,CAAE,MAAAxB,EAAO,QAAAqB,CAAQ,EAAI,KACrBI,EAAeC,GAAM,KAAK,eAAgB,IAAI,KAAK,EAAE,QAAQ,EAAI,KAAK,mBAAmB,EACzFC,EAAmBN,EAAQ,QAAQ,QAAQI,EAAczB,EAAM,IAAI,EACnE4B,EAAgBP,EAAQ,QAAQ,IAAIM,EAAkBE,GAAe,EAAG7B,EAAM,IAAI,CAAC,EACnF8B,EAASF,EAAc,QAAQ,EAAIH,EAAa,QAAQ,EAG5D,OAAAK,EAAS,KAAK,IAAI,IAAO,GAAK,GAAK,GAAIA,CAAM,EACtC,CACH,aAAc,CAAE,QAASH,EAAkB,WAAYI,GAAcJ,CAAgB,CAAE,EACvF,UAAW,CAAE,QAASC,EAAe,WAAYG,GAAcH,CAAa,CAAE,EAC9E,OAAAE,CACJ,CACJ,CACA,YAAa,CACT,GAAI,CAAE,UAAAE,EAAW,OAAAF,CAAO,EAAI,KAAK,cAAc,EAC/C,KAAK,UAAY,WAAW,IAAM,CAC9B,KAAK,SAASE,EAAW,IAAM,CAC3B,KAAK,WAAW,CACpB,CAAC,CACL,EAAGF,CAAM,CACb,CACA,cAAe,CACP,KAAK,WACL,aAAa,KAAK,SAAS,CAEnC,CACJ,EACAX,GAAS,YAAcc,GACvB,SAASF,GAAc9B,EAAM,CACzB,IAAIiC,EAAQC,GAAWlC,CAAI,EACvBmC,EAAMpB,GAAQkB,EAAO,CAAC,EAC1B,MAAO,CAAE,MAAAA,EAAO,IAAAE,CAAI,CACxB,CAEA,IAAMC,GAAN,cAAwB1C,EAAc,CAClC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,yBAA2B2C,GAAQC,EAAwB,CACpE,CACA,QAAS,CACL,GAAI,CAAE,QAAAlB,CAAQ,EAAI,KACd,CAAE,MAAAmB,EAAO,YAAAtC,EAAa,qBAAAd,EAAsB,YAAAqD,CAAY,EAAI,KAAK,MACjEC,EAAkB,KAAK,yBAAyBrB,EAAQ,QAAQ,gBAAiBjC,EAAsBoD,EAAM,MAAM,EACvH,OAAQ9B,EAAcS,GAAU,CAAE,KAAM,KAAM,EAAG,CAACwB,EAASC,IAAgBlC,EAAc,KAAM,CAAE,KAAM,KAAM,EACzG+B,GAAeA,EAAY,KAAK,EAChCD,EAAM,IAAKvC,GAAUb,EAAwBsB,EAAchB,GAAe,CAAE,IAAKO,EAAK,YAAY,EAAG,KAAMA,EAAM,YAAaC,EAAa,WAAY0C,EAAY,OAAQJ,EAAM,OAAQ,gBAAiBE,CAAgB,CAAC,EAAMhC,EAAcK,GAAc,CAAE,IAAKd,EAAK,UAAU,EAAG,IAAKA,EAAK,UAAU,EAAG,gBAAiByC,CAAgB,CAAC,CAAG,CAAC,CAAE,CAC7V,CACJ,EACA,SAASH,GAAyBM,EAAgBzD,EAAsB0D,EAAS,CAC7E,OAAOD,GAAkB1D,GAA4BC,EAAsB0D,CAAO,CACtF,CAEA,IAAMC,GAAN,KAAqB,CACjB,YAAYC,EAAOC,EAAsB,CACrC,IAAIhD,EAAO+C,EAAM,MACb,CAAE,IAAAZ,CAAI,EAAIY,EACVE,EAAU,CAAC,EACXV,EAAQ,CAAC,EACTW,EAAW,GACf,KAAOlD,EAAOmC,GACNa,EAAqB,YAAYhD,CAAI,EACrCiD,EAAQ,KAAKC,EAAW,EAAG,GAG3BA,GAAY,EACZD,EAAQ,KAAKC,CAAQ,EACrBX,EAAM,KAAKvC,CAAI,GAEnBA,EAAOe,GAAQf,EAAM,CAAC,EAE1B,KAAK,MAAQuC,EACb,KAAK,QAAUU,EACf,KAAK,IAAMV,EAAM,MACrB,CACA,WAAWQ,EAAO,CACd,IAAII,EAAa,KAAK,gBAAgBJ,EAAM,KAAK,EAC7CK,EAAY,KAAK,gBAAgBrC,GAAQgC,EAAM,IAAK,EAAE,CAAC,EACvDM,EAAoB,KAAK,IAAI,EAAGF,CAAU,EAC1CG,EAAmB,KAAK,IAAI,KAAK,IAAM,EAAGF,CAAS,EAIvD,OAFAC,EAAoB,KAAK,KAAKA,CAAiB,EAC/CC,EAAmB,KAAK,MAAMA,CAAgB,EAC1CD,GAAqBC,EACd,CACH,WAAYD,EACZ,UAAWC,EACX,QAASH,IAAeE,EACxB,MAAOD,IAAcE,CACzB,EAEG,IACX,CAMA,gBAAgBtD,EAAM,CAClB,GAAI,CAAE,QAAAiD,CAAQ,EAAI,KACdM,EAAY,KAAK,MAAMC,GAAS,KAAK,MAAM,CAAC,EAAGxD,CAAI,CAAC,EACxD,OAAIuD,EAAY,EACLN,EAAQ,CAAC,EAAI,EAEpBM,GAAaN,EAAQ,OACdA,EAAQA,EAAQ,OAAS,CAAC,EAAI,EAElCA,EAAQM,CAAS,CAC5B,CACJ,EAEME,GAAN,KAAoB,CAChB,YAAYC,EAAWC,EAAc,CACjC,GAAI,CAAE,MAAApB,CAAM,EAAImB,EACZE,EACAC,EACAC,EACJ,GAAIH,EAAc,CAGd,IADAE,EAAWtB,EAAM,CAAC,EAAE,UAAU,EACzBqB,EAAa,EAAGA,EAAarB,EAAM,QAChCA,EAAMqB,CAAU,EAAE,UAAU,IAAMC,EADMD,GAAc,EAC1D,CAIJE,EAAS,KAAK,KAAKvB,EAAM,OAASqB,CAAU,CAChD,MAEIE,EAAS,EACTF,EAAarB,EAAM,OAEvB,KAAK,OAASuB,EACd,KAAK,OAASF,EACd,KAAK,UAAYF,EACjB,KAAK,MAAQ,KAAK,WAAW,EAC7B,KAAK,YAAc,KAAK,iBAAiB,CAC7C,CACA,YAAa,CACT,IAAIK,EAAO,CAAC,EACZ,QAASC,EAAM,EAAGA,EAAM,KAAK,OAAQA,GAAO,EAAG,CAC3C,IAAIC,EAAQ,CAAC,EACb,QAASC,EAAM,EAAGA,EAAM,KAAK,OAAQA,GAAO,EACxCD,EAAM,KAAK,KAAK,UAAUD,EAAKE,CAAG,CAAC,EAEvCH,EAAK,KAAKE,CAAK,CACnB,CACA,OAAOF,CACX,CACA,UAAUC,EAAKE,EAAK,CAChB,IAAIlE,EAAO,KAAK,UAAU,MAAMgE,EAAM,KAAK,OAASE,CAAG,EACvD,MAAO,CACH,IAAKlE,EAAK,YAAY,EACtB,KAAAA,CACJ,CACJ,CACA,kBAAmB,CACf,IAAIuC,EAAQ,CAAC,EACb,QAAS2B,EAAM,EAAGA,EAAM,KAAK,OAAQA,GAAO,EACxC3B,EAAM,KAAK,KAAK,MAAM,CAAC,EAAE2B,CAAG,EAAE,IAAI,EAEtC,OAAO3B,CACX,CACA,WAAWQ,EAAO,CACd,GAAI,CAAE,OAAAoB,CAAO,EAAI,KACbC,EAAY,KAAK,UAAU,WAAWrB,CAAK,EAC3CsB,EAAO,CAAC,EACZ,GAAID,EAAW,CACX,GAAI,CAAE,WAAAjB,EAAY,UAAAC,CAAU,EAAIgB,EAC5BE,EAAQnB,EACZ,KAAOmB,GAASlB,GAAW,CACvB,IAAIY,EAAM,KAAK,MAAMM,EAAQH,CAAM,EAC/BI,EAAY,KAAK,KAAKP,EAAM,GAAKG,EAAQf,EAAY,CAAC,EAC1DiB,EAAK,KAAK,CACN,IAAAL,EACA,SAAUM,EAAQH,EAClB,SAAUI,EAAY,GAAKJ,EAC3B,QAASC,EAAU,SAAWE,IAAUnB,EACxC,MAAOiB,EAAU,OAAUG,EAAY,IAAOnB,CAClD,CAAC,EACDkB,EAAQC,CACZ,CACJ,CACA,OAAOF,CACX,CACJ,EAEMG,GAAN,KAAa,CACT,aAAc,CACV,KAAK,mBAAqBnC,GAAQ,KAAK,mBAAmB,EAC1D,KAAK,mBAAqBA,GAAQ,KAAK,cAAc,EACrD,KAAK,gBAAkBA,GAAQ,KAAK,gBAAgB,EACpD,KAAK,eAAiBA,GAAQ,KAAK,iBAAiB,EACpD,KAAK,iBAAmBA,GAAQ,KAAK,iBAAiB,EACtD,KAAK,mBAAqB,EAC9B,CACA,WAAWtC,EAAOE,EAAawE,EAAkBrD,KAAYsD,EAAW,CACpE,GAAI,CAAE,aAAAC,CAAa,EAAI5E,EACnB6E,EAAY,KAAK,gBAAgB7E,EAAM,WAAY4E,EAAc1E,EAAawE,EAAkB,GAAGC,CAAS,EAChH,MAAO,CACH,kBAAmB,KAAK,mBAAmB3E,EAAM,cAAeE,EAAawE,EAAkBE,EAAcvD,EAAS,GAAGsD,CAAS,EAClI,iBAAkB,KAAK,mBAAmB3E,EAAM,cAAeE,EAAawE,EAAkBrD,EAAS,GAAGsD,CAAS,EACnH,YAAaE,EAAU,GACvB,YAAaA,EAAU,GACvB,UAAW,KAAK,eAAe7E,EAAM,UAAW4E,EAAc1E,EAAawE,EAAkB,GAAGC,CAAS,EACzG,YAAa,KAAK,iBAAiB3E,EAAM,YAAa4E,EAAc1E,EAAawE,EAAkB,GAAGC,CAAS,EAC/G,eAAgB3E,EAAM,cAC1B,CACJ,CACA,aACAC,EAAMC,EAAawE,EAAkBrD,KAAYsD,EAAW,CACxD,OAAO,KAAK,eAAe,CAAE,MAAO,CAAE,MAAO1E,EAAM,IAAKyB,GAAMzB,EAAM,CAAC,CAAE,EAAG,OAAQ,EAAM,EACxFC,EAAawE,EAAkB,CAAC,EAAGrD,EAAS,GAAGsD,CAAS,CAC5D,CACA,oBAAoBG,EAAe5E,EAAawE,EAAkBrD,KAAYsD,EAAW,CACrF,OAAKG,EAGE,KAAK,iBAAiBC,GAAgBD,EAAeE,GAAmB9E,EAAa,EAAQwE,CAAiB,EAAGrD,CAAO,EAAG,CAAC,EAAGnB,EAAawE,EAAkB,GAAGC,CAAS,EAAE,GAFxK,CAAC,CAGhB,CACA,iBAAiBM,EAAYL,EAAc1E,EAAawE,KAAqBC,EAAW,CACpF,GAAIM,EAAY,CACZ,IAAIC,EAAWC,GAAgBF,EAAYL,EAAcI,GAAmB9E,EAAa,EAAQwE,CAAiB,EAAGA,CAAgB,EACrI,MAAO,CACH,GAAI,KAAK,iBAAiBQ,EAAS,GAAIP,CAAS,EAChD,GAAI,KAAK,iBAAiBO,EAAS,GAAIP,CAAS,CACpD,CACJ,CACA,MAAO,CAAE,GAAI,CAAC,EAAG,GAAI,CAAC,CAAE,CAC5B,CACA,kBAAkBS,EAAaR,EAAc1E,EAAawE,KAAqBC,EAAW,CACtF,GAAI,CAACS,EACD,OAAO,KAEX,IAAIF,EAAWC,GAAgBC,EAAY,cAAeR,EAAcI,GAAmB9E,EAAa,EAAQwE,CAAiB,EAAGA,CAAgB,EACpJ,MAAO,CACH,KAAM,KAAK,iBAAiBQ,EAAS,GAAIP,CAAS,EAClD,kBAAmBS,EAAY,eAAe,UAC9C,QAASA,EAAY,OACzB,CACJ,CACA,eAAeC,EAAUnF,EAAawE,EAAkBE,EAAcvD,KAAYsD,EAAW,CACzF,GAAI,CAACU,EACD,MAAO,CAAC,EAEZ,IAAIC,EAAcN,GAAmB9E,EAAa,EAAQwE,CAAiB,EACvEa,EAAsBC,GAAgBH,EAAS,MAAOC,CAAW,EACrE,GAAIC,EAAqB,CACrBF,EAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAQ,EAAG,CAAE,MAAOE,CAAoB,CAAC,EACpF,IAAIE,EAAaC,GAAoBL,EAAUT,EAAcvD,CAAO,EAChEiD,EAAO,KAAK,WAAWe,EAAS,MAAO,GAAGV,CAAS,EACvD,QAASgB,KAAOrB,EACZqB,EAAI,WAAaF,EAErB,OAAOnB,CACX,CACA,MAAO,CAAC,CACZ,CAIA,iBAAiBsB,EAAajB,EAAW,CACrC,IAAIL,EAAO,CAAC,EACZ,QAASmB,KAAcG,EACnBtB,EAAK,KAAK,GAAG,KAAK,gBAAgBmB,EAAYd,CAAS,CAAC,EAE5D,OAAOL,CACX,CAIA,gBAAgBmB,EAAYd,EAAW,CACnC,IAAIkB,EAAYJ,EAAW,MAEvB,KAAK,oBAAsBA,EAAW,GAAG,UAAY,cACrDI,EAAY,CACR,MAAOA,EAAU,MACjB,IAAK7E,GAAQ6E,EAAU,MAAO,CAAC,CACnC,GAEJ,IAAIvB,EAAO,KAAK,WAAWuB,EAAW,GAAGlB,CAAS,EAClD,QAASgB,KAAOrB,EACZqB,EAAI,WAAaF,EACjBE,EAAI,QAAUF,EAAW,SAAWE,EAAI,QACxCA,EAAI,MAAQF,EAAW,OAASE,EAAI,MAExC,OAAOrB,CACX,CACJ,EAMA,SAASU,GAAmB9E,EAAa4F,EAAmB,CACxD,IAAI9C,EAAQ9C,EAAY,YACxB,OAAI4F,EACO9C,EAEJ,CACH,MAAOtB,GAAMsB,EAAM,MAAO9C,EAAY,YAAY,YAAY,EAC9D,IAAKwB,GAAMsB,EAAM,IAAK9C,EAAY,YAAY,aAAe,KAAK,CACtE,CACJ,CA0LA,IAAM6F,GAAoB,qBACpBC,GAAN,cAAuBC,EAAc,CACjC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,SAAYC,GAAO,CACpB,KAAK,GAAKA,EACVC,GAAO,KAAK,MAAM,MAAOD,CAAE,CAC/B,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAE,CAAM,EAAI,KACZ,CAAE,OAAAC,EAAQ,iBAAAC,CAAiB,EAAIF,EAC/BG,EAAaF,GAAUC,EACvBE,EAAY,CAAC,aAAa,EAC9B,OAAIH,IACIC,EACAE,EAAU,KAAK,6BAA6B,EAG5CA,EAAU,KAAK,oBAAoB,GAGnCC,EAAc,MAAO,CAAE,IAAK,KAAK,SAAU,UAAWD,EAAU,KAAK,GAAG,EAAG,MAAO,CAClF,UAAWJ,EAAM,UACjB,UAAWA,EAAM,UACjB,KAAOG,GAAc,EAAEH,EAAM,cAAgB,IAAO,GACpD,MAAQG,GAAc,EAAEH,EAAM,eAAiB,IAAO,GACtD,OAASG,GAAc,EAAEH,EAAM,gBAAkB,IAAO,GACxD,WAAa,CAACG,GAAc,EAAEH,EAAM,cAAgB,IAAO,GAC3D,YAAc,CAACG,GAAc,EAAEH,EAAM,eAAiB,IAAO,GAC7D,aAAe,CAACG,GAAc,EAAEH,EAAM,gBAAkB,IAAO,GAC/D,UAAWA,EAAM,WAAa,EAClC,CAAE,EAAGA,EAAM,QAAQ,CAC3B,CACA,iBAAkB,CACd,GAAIL,GAAkB,KAAK,KAAK,MAAM,SAAS,EAC3C,MAAO,GAKX,GAAI,CAAE,GAAAG,CAAG,EAAI,KACTQ,EAAkB,KAAK,GAAG,sBAAsB,EAAE,MAAQ,KAAK,mBAAmB,EAClF,CAAE,SAAAC,CAAS,EAAIT,EACnB,QAASU,EAAI,EAAGA,EAAID,EAAS,OAAQC,GAAK,EAEtC,GADcD,EAASC,CAAC,EACZ,sBAAsB,EAAE,MAAQF,EACxC,MAAO,GAGf,MAAO,EACX,CACA,iBAAkB,CACd,GAAIX,GAAkB,KAAK,KAAK,MAAM,SAAS,EAC3C,MAAO,GAKX,GAAI,CAAE,GAAAG,CAAG,EAAI,KACTW,EAAmB,KAAK,GAAG,sBAAsB,EAAE,OAAS,KAAK,mBAAmB,EACpF,CAAE,SAAAF,CAAS,EAAIT,EACnB,QAASU,EAAI,EAAGA,EAAID,EAAS,OAAQC,GAAK,EAEtC,GADcD,EAASC,CAAC,EACZ,sBAAsB,EAAE,OAASC,EACzC,MAAO,GAGf,MAAO,EACX,CACA,oBAAqB,CACjB,OAAId,GAAkB,KAAK,KAAK,MAAM,SAAS,EACpC,EAEJ,KAAK,GAAG,aAAe,KAAK,GAAG,YAC1C,CACA,oBAAqB,CACjB,OAAIA,GAAkB,KAAK,KAAK,MAAM,SAAS,EACpC,EAEJ,KAAK,GAAG,YAAc,KAAK,GAAG,WACzC,CACJ,EAMMe,GAAN,KAAa,CACT,YAAYC,EAAgB,CACxB,KAAK,eAAiBA,EACtB,KAAK,WAAa,CAAC,EACnB,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,CAAC,EACpB,KAAK,YAAc,CAACC,EAAKC,IAAQ,CAC7B,GAAI,CAAE,OAAAC,EAAQ,WAAAC,CAAW,EAAI,KACzBC,EAAU,GACVC,EAAQ,GACRL,IAAQ,MAERI,EAAWH,KAAOE,EAClBA,EAAWF,CAAG,EAAID,EAClBE,EAAOD,CAAG,GAAKC,EAAOD,CAAG,GAAK,GAAK,EACnCI,EAAQ,KAGRH,EAAOD,CAAG,GAAK,EACVC,EAAOD,CAAG,IACX,OAAOE,EAAWF,CAAG,EACrB,OAAO,KAAK,YAAYA,CAAG,EAC3BG,EAAU,KAGd,KAAK,iBACDA,GACA,KAAK,eAAe,KAAM,OAAOH,CAAG,CAAC,EAErCI,GACA,KAAK,eAAeL,EAAK,OAAOC,CAAG,CAAC,EAGhD,CACJ,CACA,UAAUA,EAAK,CACX,IAAIK,EAAc,KAAK,YAAYL,CAAG,EACtC,OAAKK,IACDA,EAAc,KAAK,YAAYL,CAAG,EAAKD,GAAQ,CAC3C,KAAK,YAAYA,EAAK,OAAOC,CAAG,CAAC,CACrC,GAEGK,CACX,CAIA,QAAQC,EAAYC,EAAUC,EAAM,CAChC,OAAOC,GAAgB,KAAK,WAAYH,EAAYC,EAAUC,CAAI,CACtE,CACA,QAAS,CACL,OAAOE,GAAkB,KAAK,UAAU,CAC5C,CACJ,EAEA,SAASC,GAAmBC,EAAU,CAClC,IAAIC,EAAcC,GAAaF,EAAU,uBAAuB,EAC5DG,EAAe,EACnB,QAASC,KAAcH,EACnBE,EAAe,KAAK,IAAIA,EAAcE,GAAyBD,CAAU,CAAC,EAE9E,OAAO,KAAK,KAAKD,CAAY,CACjC,CACA,SAASG,GAA0B/B,EAAOgC,EAAe,CACrD,OAAOhC,EAAM,QAAUgC,EAAc,MACzC,CACA,SAASC,GAAmBjC,EAAOgC,EAAe,CAC9C,OAAOA,EAAc,WAAa,MAC9BD,GAA0B/B,EAAOgC,CAAa,CACtD,CAEA,SAASE,GAAmBF,EAAeG,EAAaC,EAAKC,EAAU,CACnE,GAAI,CAAE,WAAAC,CAAW,EAAIF,EAmBrB,OAlBc,OAAOD,EAAY,SAAY,WACzCA,EAAY,QAAQC,CAAG,EACvB/B,EAAc,QAAS,CACnB,KAAM,eACN,UAAW,CACP8B,EAAY,eACZH,EAAc,eAAiB,2BAA6B,EAChE,EAAE,KAAK,GAAG,EACV,MAAO,CACH,SAAUI,EAAI,cACd,MAAOA,EAAI,YACX,OAAQE,EAAaF,EAAI,aAAe,EAC5C,CACJ,EAAGA,EAAI,kBAAmB/B,EAAcgC,EAAW,QAAU,QAAS,CAClE,KAAM,cACV,EAAG,OAAOF,EAAY,YAAe,WAC/BA,EAAY,WAAWC,CAAG,EAC1BD,EAAY,UAAU,CAAC,CAErC,CACA,SAASI,GAAgBC,EAAOC,EAAO,CACnC,OAAOC,GAAcF,EAAOC,EAAOE,EAAY,CACnD,CACA,SAASC,GAAoBC,EAAMC,EAAa,CAC5C,IAAIC,EAAW,CAAC,EAMhB,QAASC,KAAYH,EAAM,CACvB,IAAII,EAAOD,EAAS,MAAQ,EAC5B,QAASxC,EAAI,EAAGA,EAAIyC,EAAMzC,GAAK,EAC3BuC,EAAS,KAAK1C,EAAc,MAAO,CAAE,MAAO,CACpC,MAAO2C,EAAS,QAAU,SAAWE,GAAoBJ,CAAW,EAAKE,EAAS,OAAS,GAC3F,SAAUA,EAAS,UAAY,EACnC,CAAE,CAAC,CAAC,CAEhB,CACA,OAAO3C,EAAc,WAAY,CAAC,EAAG,GAAG0C,CAAQ,CACpD,CACA,SAASG,GAAoBJ,EAAa,CAGtC,OAAOA,GAAsB,CACjC,CACA,SAASK,GAAeN,EAAM,CAC1B,QAASO,KAAOP,EACZ,GAAIO,EAAI,QAAU,SACd,MAAO,GAGf,MAAO,EACX,CACA,SAASC,GAAwBpD,EAAQqD,EAAS,CAC9C,IAAIC,EAAa,CACb,gBACAD,EAAQ,MAAM,SAAS,OAAO,CAClC,EACA,OAAIrD,GACAsD,EAAW,KAAK,sBAAsB,EAEnCA,CACX,CACA,SAASC,GAAqBxB,EAAeyB,EAAiB,CAC1D,IAAIF,EAAa,CACb,wBACA,yBAAyBvB,EAAc,IAAI,GAC3CA,EAAc,SAClB,EACA,OAAIyB,GAAmBzB,EAAc,QAAUA,EAAc,WAAa,MACtEuB,EAAW,KAAK,8BAA8B,EAE9CvB,EAAc,UACduB,EAAW,KAAK,8BAA8B,EAE3CA,CACX,CACA,SAASG,GAAiBtB,EAAK,CAC3B,OAAQ/B,EAAc,MAAO,CAAE,UAAW,4BAA6B,MAAO,CACtE,MAAO+B,EAAI,YACX,SAAUA,EAAI,aAClB,CAAE,CAAC,CACX,CACA,SAASuB,GAAqBC,EAAS,CACnC,GAAI,CAAE,kBAAAC,CAAkB,EAAID,EAC5B,OAAIC,GAAqB,MAAQA,IAAsB,UACnDA,EAAoBD,EAAQ,SAAW,QAAUA,EAAQ,aAAe,QAErEC,CACX,CACA,SAASC,GAAyBF,EAAS,CACvC,GAAI,CAAE,sBAAAG,CAAsB,EAAIH,EAChC,OAAIG,GAAyB,MAAQA,IAA0B,UAC3DA,EAAwBH,EAAQ,SAAW,QAAUA,EAAQ,aAAe,QAEzEG,CACX,CAEA,IAAMC,GAAN,cAA+BnE,EAAc,CACzC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAcoE,GAASC,GAAMA,EAAG3B,EAAe,EAEpD,KAAK,oBAAsB0B,GAAQrB,EAAmB,EACtD,KAAK,aAAe,IAAIlC,GACxB,KAAK,eAAiB,IAAIA,GAAO,KAAK,kBAAkB,KAAK,IAAI,CAAC,EAClE,KAAK,MAAQ,CACT,YAAa,KACb,iBAAkB,GAClB,qBAAsB,CAAC,EACvB,sBAAuB,CAAC,CAC5B,EAEA,KAAK,aAAe,IAAM,CACtB,KAAK,aAAa,OAAO,OAAO,CAAE,YAAa,KAAK,mBAAmB,CAAE,EAAG,KAAK,oBAAoB,CAAC,CAAC,CAC3G,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAV,EAAO,MAAAmE,EAAO,QAAAb,CAAQ,EAAI,KAC5Bc,EAAiBpE,EAAM,UAAY,CAAC,EACpC6C,EAAO,KAAK,YAAY7C,EAAM,IAAI,EAClCqE,EAAoB,KAAK,oBAAoBxB,EAAMsB,EAAM,WAAW,EACpEZ,EAAaF,GAAwBrD,EAAM,OAAQsD,CAAO,EAC1DtD,EAAM,kBACNuD,EAAW,KAAK,2BAA2B,EAG/C,IAAIe,EAAYF,EAAe,OAC3BG,EAAU,EACVC,EACAC,EAAmB,CAAC,EACpBC,EAAmB,CAAC,EACpBC,EAAmB,CAAC,EACxB,KAAOJ,EAAUD,IAAcE,EAAgBJ,EAAeG,CAAO,GAAG,OAAS,UAC7EE,EAAiB,KAAK,KAAK,cAAcD,EAAeH,EAAmB,EAAI,CAAC,EAChFE,GAAW,EAEf,KAAOA,EAAUD,IAAcE,EAAgBJ,EAAeG,CAAO,GAAG,OAAS,QAC7EG,EAAiB,KAAK,KAAK,cAAcF,EAAeH,EAAmB,EAAK,CAAC,EACjFE,GAAW,EAEf,KAAOA,EAAUD,IAAcE,EAAgBJ,EAAeG,CAAO,GAAG,OAAS,UAC7EI,EAAiB,KAAK,KAAK,cAAcH,EAAeH,EAAmB,EAAI,CAAC,EAChFE,GAAW,EAMf,IAAIK,EAAU,CAACC,GAAsB,EAC/BC,EAAY,CAAE,KAAM,UAAW,EACrC,OAAOzE,EAAc,QAAS,CAC1B,KAAM,OACN,UAAWkD,EAAW,KAAK,GAAG,EAC9B,MAAO,CAAE,OAAQvD,EAAM,MAAO,CAClC,EAAG,GAAQ,CAAC4E,GAAWH,EAAiB,SAAWpE,EAAc,QAASyE,EAAW,GAAGL,CAAgB,EAAG,GAAQ,CAACG,GAAWF,EAAiB,SAAWrE,EAAc,QAASyE,EAAW,GAAGJ,CAAgB,EAAG,GAAQ,CAACE,GAAWD,EAAiB,SAAWtE,EAAc,QAASyE,EAAW,GAAGH,CAAgB,EAAGC,GAAWvE,EAAc,QAASyE,EAAW,GAAGL,EAAkB,GAAGC,EAAkB,GAAGC,CAAgB,CAAC,CAC1a,CACA,cAAc3C,EAAeqC,EAAmBhC,EAAU,CACtD,MAAI,iBAAkBL,EACV3B,EAAc0E,GAAU,CAAE,IAAK/C,EAAc,GAAI,EAAGA,EAAc,YAAY,EAElF3B,EAAc,KAAM,CAAE,IAAK2B,EAAc,IAAK,KAAM,eAAgB,UAAWwB,GAAqBxB,EAAe,KAAK,MAAM,MAAM,EAAE,KAAK,GAAG,CAAE,EAAG,KAAK,cAAcA,EAAeqC,EAAmBrC,EAAc,MAAOK,CAAQ,CAAC,CAClP,CACA,cAAcL,EAAeqC,EAAmBlC,EAAaE,EAAU,CACnE,GAAI,iBAAkBF,EAClB,OAAOA,EAAY,aAEvB,GAAI,CAAE,MAAAnC,CAAM,EAAI,KACZ,CAAE,iBAAAgF,EAAkB,qBAAAC,EAAsB,sBAAAC,CAAsB,EAAI,KAAK,MACzEC,EAAkBlD,GAAmBjC,EAAOgC,CAAa,EACzDoD,EAAWrD,GAA0B/B,EAAOgC,CAAa,EAGzDqD,EAAarF,EAAM,OACnBgF,EAAmB,SACdG,EACG,OADe,SAFK,UAI5BG,EAAatD,EAAc,IAC3BuD,EAAUrD,GAAmBF,EAAeG,EAAa,CACzD,kBAAmBkC,EACnB,cAAe,GACf,YAAc,CAACrE,EAAM,kBAAoBiF,EAAqBK,CAAU,IAAM,OAAaL,EAAqBK,CAAU,EAAI,KAC9H,aAAcJ,EAAsBI,CAAU,IAAM,OAAYJ,EAAsBI,CAAU,EAAI,KACpG,WAAYtD,EAAc,WAC1B,eAAgB,GAChB,eAAgB,CAAC,EACjB,sBAAuB,IAAM,CAAE,CACnC,EAAGK,CAAQ,EACX,OAAOhC,EAAcgC,EAAW,KAAO,KAAM,CACzC,IAAKF,EAAY,MACjB,KAAM,cACV,EAAG9B,EAAc,MAAO,CAAE,UAAW,sBAAsB+E,EAAW,8BAAgC,EAAE,EAAG,EACvG/E,EAAcT,GAAU,CAAE,IAAK,KAAK,aAAa,UAAU0F,CAAU,EAAG,MAAO,KAAK,eAAe,UAAUA,CAAU,EAAG,UAAWD,EAAW,UAAYrF,EAAM,OAAqB,SAAZ,UAA4C,UAAWgC,EAAc,UAAW,OAAQoD,EAAU,iBACvQ,EAAK,EAAGG,CAAO,CAAC,CAAC,CAC/B,CACA,kBAAkBC,EAAY3E,EAAK,CAC/B,IAAI4E,EAAUC,GAAgB,KAAK,MAAM,SAAU7E,CAAG,EAClD4E,GACA1F,GAAO0F,EAAQ,MAAM,cAAeD,CAAU,CAEtD,CACA,mBAAoB,CAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,iBAAiB,KAAK,YAAY,CACnD,CACA,oBAAqB,CAEjB,KAAK,aAAa,CACtB,CACA,sBAAuB,CACnB,KAAK,QAAQ,oBAAoB,KAAK,YAAY,CACtD,CACA,oBAAqB,CACjB,OAAOrC,GAAe,KAAK,MAAM,IAAI,EAC/B3B,GAAmB,KAAK,eAAe,OAAO,CAAC,EAC/C,CACV,CACA,qBAAsB,CAClB,IAAImE,EAAiBC,GAAmB,EACpC,CAAE,aAAAC,EAAc,eAAAC,CAAe,EAAI,KACnCd,EAAmB,GACnBC,EAAuB,CAAC,EACxBC,EAAwB,CAAC,EAC7B,QAASI,KAAcO,EAAa,WAAY,CAC5C,IAAIE,EAAWF,EAAa,WAAWP,CAAU,EACjD,GAAIS,GAAYA,EAAS,gBAAgB,EAAG,CACxCf,EAAmB,GACnB,KACJ,CACJ,CACA,QAASS,KAAW,KAAK,MAAM,SAAU,CACrC,IAAIH,EAAaG,EAAQ,IACrBD,EAAaM,EAAe,WAAWR,CAAU,EACrD,GAAIE,EAAY,CACZ,IAAIQ,EAAYR,EAAW,WAC3BP,EAAqBK,CAAU,EAAI,KAAK,MAAMU,EAAU,sBAAsB,EAAE,OAAShB,EACnFW,EAAe,EACf,EAAE,EACRT,EAAsBI,CAAU,EAAI,KAAK,MAAMU,EAAU,sBAAsB,EAAE,MAAM,CAC3F,CACJ,CACA,MAAO,CAAE,iBAAAhB,EAAkB,qBAAAC,EAAsB,sBAAAC,CAAsB,CAC3E,CACJ,EACAlB,GAAiB,iBAAiB,CAC9B,qBAAsBrB,GACtB,sBAAuBA,EAC3B,CAAC,EACD,SAAS+C,GAAgBO,EAAUpF,EAAK,CACpC,QAAS4E,KAAWQ,EAChB,GAAIR,EAAQ,MAAQ5E,EAChB,OAAO4E,EAGf,OAAO,IACX,CAEA,IAAMS,GAAN,cAA6BrG,EAAc,CACvC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,SAAYC,GAAO,CACpB,KAAK,GAAKA,EACNA,GACAqG,GAASrG,EAAI,KAAK,MAAM,GAAG,CAEnC,CACJ,CACA,QAAS,CACL,GAAM,CAAE,MAAAE,EAAO,QAAAsD,CAAQ,EAAI,KACrB,CAAE,QAAAM,CAAQ,EAAIN,EACd,CAAE,IAAA8C,CAAI,EAAIpG,EACV,CAAE,WAAAqG,CAAW,EAAID,EACjB,CAAE,GAAAE,CAAG,EAAID,EACTE,EAAc,CAChB,MAAO,IAAIC,GAAUlD,EAAS+C,EAAW,IAAKA,EAAW,QAAQ,EACjE,KAAM/C,EAAQ,QACd,SAAUtD,EAAM,SAChB,UAAWsG,EAAG,UACd,gBAAiBA,EAAG,gBACpB,YAAaA,EAAG,YAChB,YAAa,CAACtG,EAAM,iBAAmByG,GAAoBL,EAAK9C,CAAO,EACvE,iBAAkB,CAACtD,EAAM,iBAAmB0G,GAAyBN,EAAK9C,CAAO,EACjF,eAAgB,CAACtD,EAAM,iBAAmB2G,GAAuBP,CAAG,EACpE,SAAU,GAAQpG,EAAM,YAAcA,EAAM,YAAcA,EAAM,iBAChE,QAAS,EAAQoG,EAAI,QACrB,MAAO,EAAQA,EAAI,MACnB,OAAQ,EAAQpG,EAAM,OACtB,SAAU,EAAQA,EAAM,SACxB,QAAS,EAAQA,EAAM,QACvB,WAAY,EAAQA,EAAM,WAC1B,WAAY,EAAQA,EAAM,WAC1B,WAAY,EAAQA,EAAM,UAC9B,EACA,OAAQK,EAAcuG,GAAkB,OAAO,OAAO,CAAC,EAAG5G,EAA+B,CAAE,MAAO,KAAK,SAAU,UAAW,CACpH,GAAG6G,GAAmBN,CAAW,EACjC,GAAGH,EAAI,WAAW,GAAG,WACrB,GAAIpG,EAAM,WAAa,CAAC,CAC5B,EAAG,YAAauG,EAAa,cAAe,eAAgB,gBAAiB3C,EAAQ,aAAc,iBAAkB5D,EAAM,iBAAkB,mBAAoB4D,EAAQ,gBAAiB,SAAUA,EAAQ,cAAe,YAAaA,EAAQ,gBAAiB,CAAC,CAAC,CAC3Q,CACA,mBAAmBkD,EAAW,CACtB,KAAK,IAAM,KAAK,MAAM,MAAQA,EAAU,KACxCX,GAAS,KAAK,GAAI,KAAK,MAAM,GAAG,CAExC,CACJ,EAGMY,GAAN,cAA4BlH,EAAc,CACtC,QAAS,CACL,GAAI,CAAE,MAAAG,EAAO,QAAAsD,CAAQ,EAAI,KACrB,CAAE,QAAAM,CAAQ,EAAIN,EACd,CAAE,IAAA8C,CAAI,EAAIpG,EACV,CAAE,GAAAsG,CAAG,EAAIF,EAAI,WACbY,EAAapD,EAAQ,iBAAmB5D,EAAM,kBAC9CiH,EAAWC,GAAiBd,EAAKY,EAAY1D,EAAStD,EAAM,wBAAyBA,EAAM,sBAAsB,EACrH,OAAQK,EAAc6F,GAAgB,OAAO,OAAO,CAAC,EAAGlG,EAA4B,CAAE,MAAO,IAAK,QAAS,CACnG,YAAasG,EAAG,YAChB,gBAAiBA,EAAG,eACxB,EAAG,QAASa,GAAkBf,EAAK9C,CAAO,EAAG,iBAAkB8D,GAAsB,SAAUH,CAAS,CAAC,EAAG,CAACI,EAAcC,IAAqBjH,EAAc0E,GAAU,KACxK1E,EAAcgH,EAAc,CAAE,MAAO,MAAO,UAAW,CAAC,eAAe,EAAG,QAAS,CAAE,MAAOC,EAAgB,SAAU,CAAE,CAAC,EACzH,EAAQA,EAAgB,kBAAsBjH,EAAc,MAAO,CAAE,UAAW,yCAA0C,CAAC,EAC3H,EAAQiH,EAAgB,gBAAoBjH,EAAc,MAAO,CAAE,UAAW,uCAAwC,CAAC,CAAE,CAAE,CACnI,CACJ,EACA,SAAS+G,GAAqBG,EAAY,CACtC,OAAQlH,EAAc,MAAO,CAAE,UAAW,qBAAsB,EAC5DkH,EAAW,UAAalH,EAAc,MAAO,CAAE,UAAW,eAAgB,EAAGkH,EAAW,QAAQ,EAChGlH,EAAc,MAAO,CAAE,UAAW,0BAA2B,EACzDA,EAAc,MAAO,CAAE,UAAW,0BAA2B,EAAGkH,EAAW,MAAM,OAASlH,EAAc0E,GAAU,KAAM,MAAQ,CAAC,CAAC,CAAC,CAC/I,CAEA,IAAMyC,GAAyBxH,GAAWK,EAAcoH,GAAgB,SAAU,KAAOnE,GAAY,CACjG,GAAI,CAAE,QAAAM,CAAQ,EAAIN,EACdiD,EAAc,CACd,OAAQvG,EAAM,OACd,KAAMsD,EAAQ,QAAQ,OAAOtD,EAAM,IAAI,EACvC,KAAMsD,EAAQ,OAClB,EACA,OAAQjD,EAAcuG,GAAkB,OAAO,OAAO,CAAC,EAAG5G,EAA+B,CAAE,MAAOA,EAAM,OAAS,MAAO,YAAauG,EAAa,cAAe,sBAAuB,gBAAiB3C,EAAQ,oBAAqB,mBAAoBA,EAAQ,uBAAwB,SAAUA,EAAQ,qBAAsB,YAAaA,EAAQ,uBAAwB,CAAC,CAAC,CACrX,CAAC,EAEK8D,GAAiBC,GAAgB,CAAE,IAAK,SAAU,CAAC,EACnDC,GAAN,cAA+B/H,EAAc,CACzC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,kBAAoBgI,GAAcC,EAAiB,CAC5D,CACA,QAAS,CACL,GAAI,CAAE,MAAA9H,EAAO,QAAAsD,CAAQ,EAAI,KACrB,CAAE,QAAAM,CAAQ,EAAIN,EACdiD,EAAc,KAAK,kBAAkB,CACrC,KAAMvG,EAAM,KACZ,YAAaA,EAAM,YACnB,WAAYA,EAAM,WAClB,aAAcA,EAAM,cAAgB,GACpC,cAAeA,EAAM,cACrB,iBAAkBA,EAAM,iBACxB,QAASsD,EAAQ,QACjB,QAASA,EAAQ,QACjB,iBAAkBM,EAAQ,gBAC9B,CAAC,EACD,OAAQvD,EAAcuG,GAAkB,OAAO,OAAO,CAAC,EAAG5G,EAA+B,CAAE,UAAW,CAC9F,GAAG+H,GAAiBxB,EAAajD,EAAQ,KAAK,EAC9C,GAAItD,EAAM,WAAa,CAAC,CAC5B,EAAG,QAAS,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAM,OAAO,EAAIuG,EAAY,WAAa,CAAC,EAAI,CAAE,YAAayB,GAAgBhI,EAAM,IAAI,CAAE,CAAE,EAAG,YAAauG,EAAa,cAAe,iBAAkB,gBAAiB3C,EAAQ,eAAgB,iBAAkB5D,EAAM,iBAAkB,mBAEzRuG,EAAY,WAAa,OAAY3C,EAAQ,kBAAmB,SAAUA,EAAQ,gBAAiB,YAAaA,EAAQ,kBAAmB,CAAC,CAAC,CACrJ,CACJ,EACA,SAASqE,GAAwBrE,EAAS,CACtC,MAAO,GAAQA,EAAQ,gBAAkBsE,GAA0B,iBAAkBtE,CAAO,EAChG,CACA,SAASkE,GAAkBK,EAAK,CAC5B,GAAI,CAAE,KAAAC,EAAM,QAAAC,EAAS,YAAAC,EAAa,aAAAC,CAAa,EAAIJ,EAC/CK,EAAUC,GAAYL,EAAMD,EAAI,WAAY,KAAMG,CAAW,EAC7DI,EAAgBP,EAAI,cAAiBE,EAAQ,OAAOD,EAAMG,EAAeJ,EAAI,iBAAmBT,EAAc,EAAK,GACvH,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAE,KAAMW,EAAQ,OAAOD,CAAI,EAAG,KAAMD,EAAI,OAAQ,EAAGK,CAAO,EAAG,CAAE,aAAAD,EAC5G,cAAAG,CAAc,CAAC,EAAGP,EAAI,gBAAgB,CAC9C,CAEA,IAAMQ,GAAN,cAAsB9I,EAAc,CAChC,QAAS,CACL,GAAI,CAAE,MAAAG,CAAM,EAAI,KACZ,CAAE,IAAAoG,CAAI,EAAIpG,EACd,OAAQK,EAAc6F,GAAgB,CAAE,MAAO,MAAO,UAAW,CAAC,aAAa,EAAG,QAAS,CAAE,gBAAiBE,EAAI,WAAW,GAAG,eAAgB,EAAG,iBAAkBwC,GAAoB,IAAKxC,EAAK,SAAU,GAAI,WAAY,GAAO,WAAY,GAAO,gBAAiB,GAAO,WAAY,GAAO,OAAQpG,EAAM,OAAQ,SAAUA,EAAM,SAAU,QAASA,EAAM,QAAS,gBAAiB,GAAM,gBAAiB,EAAK,CAAC,CAC5Z,CACJ,EACA,SAAS4I,GAAmB5I,EAAO,CAC/B,GAAI,CAAE,MAAA6I,CAAM,EAAI7I,EAAM,MACtB,OAAO6I,GAAUxI,EAAc,MAAO,CAAE,UAAW,gBAAiB,EAAGL,EAAM,MAAM,KAAK,CAC5F,CACA,SAAS8I,GAAWC,EAAU,CAC1B,OAAQ1I,EAAc,MAAO,CAAE,UAAW,MAAM0I,CAAQ,EAAG,CAAC,CAChE,CAEA,IAAMC,GAAuBhJ,GAAWK,EAAcoH,GAAgB,SAAU,KAAOnE,GAAY,CAC/F,GAAI,CAAE,QAAA+E,EAAS,QAAAzE,CAAQ,EAAIN,EACvB,CAAE,KAAA8E,CAAK,EAAIpI,EACXiJ,EAASrF,EAAQ,kBAAoB5D,EAAM,cAC3CkJ,EAAMb,EAAQ,kBAAkBD,CAAI,EACpCe,EAAOd,EAAQ,OAAOD,EAAMa,CAAM,EAEtC,OAAQ5I,EAAcuG,GACpB,OAAO,OAAO,CAAC,EAAG5G,EAA+B,CAAE,YAFnC,CAAE,IAAAkJ,EAAK,KAAAC,EAAM,KAAAf,CAAK,EAE2C,cAAe,oBAAqB,gBAAiBxE,EAAQ,kBAAmB,iBAAkBwF,GAAa,mBAAoBxF,EAAQ,qBAAsB,SAAUA,EAAQ,mBAAoB,YAAaA,EAAQ,qBAAsB,CAAC,CAAC,CACvU,CAAC,EACD,SAASwF,GAAY7B,EAAY,CAC7B,OAAOA,EAAW,IACtB,CAEA,IAAM8B,GAAwB,GACxBC,GAAN,cAAsBzJ,EAAc,CAChC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQ,CACT,QAAS0J,GAAe,CAC5B,EACA,KAAK,aAAgBzJ,GAAO,CACxB,KAAK,OAASA,EACV,KAAK,MAAM,OACXC,GAAO,KAAK,MAAM,MAAOD,CAAE,CAEnC,EAEA,KAAK,wBAA2B0J,GAAO,CAEnC,IAAMC,EAASC,GAAsBF,CAAE,EAClC,KAAK,OAAO,SAASC,CAAM,GAC5B,KAAK,iBAAiB,CAE9B,EACA,KAAK,sBAAyBD,GAAO,CAC7BA,EAAG,MAAQ,UACX,KAAK,iBAAiB,CAE9B,EACA,KAAK,iBAAmB,IAAM,CAC1B,GAAI,CAAE,QAAAG,CAAQ,EAAI,KAAK,MACnBA,GACAA,EAAQ,CAEhB,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAC,EAAO,QAAAhG,CAAQ,EAAI,KAAK,QAC1B,CAAE,MAAA5D,EAAO,MAAAmE,CAAM,EAAI,KACnBZ,EAAa,CACb,aACAqG,EAAM,SAAS,SAAS,CAC5B,EAAE,OAAO5J,EAAM,iBAAmB,CAAC,CAAC,EACpC,OAAO6J,GAAaxJ,EAAc,MAAO,OAAO,OAAO,CAAC,EAAGL,EAAM,WAAY,CAAE,GAAIA,EAAM,GAAI,UAAWuD,EAAW,KAAK,GAAG,EAAG,kBAAmBY,EAAM,QAAS,IAAK,KAAK,YAAa,CAAC,EACpL9D,EAAc,MAAO,CAAE,UAAW,qBAAuBuJ,EAAM,SAAS,eAAe,CAAE,EACrFvJ,EAAc,OAAQ,CAAE,UAAW,mBAAoB,GAAI8D,EAAM,OAAQ,EAAGnE,EAAM,KAAK,EACvFK,EAAc,OAAQ,CAAE,UAAW,oBAAsBuJ,EAAM,aAAa,OAAO,EAAG,MAAOhG,EAAQ,UAAW,QAAS,KAAK,gBAAiB,CAAC,CAAC,EACrJvD,EAAc,MAAO,CAAE,UAAW,mBAAqBuJ,EAAM,SAAS,gBAAgB,CAAE,EAAG5J,EAAM,QAAQ,CAAC,EAAGA,EAAM,QAAQ,CACnI,CACA,mBAAoB,CAChB,SAAS,iBAAiB,YAAa,KAAK,uBAAuB,EACnE,SAAS,iBAAiB,UAAW,KAAK,qBAAqB,EAC/D,KAAK,WAAW,CACpB,CACA,sBAAuB,CACnB,SAAS,oBAAoB,YAAa,KAAK,uBAAuB,EACtE,SAAS,oBAAoB,UAAW,KAAK,qBAAqB,CACtE,CACA,YAAa,CACT,GAAI,CAAE,MAAA8J,CAAM,EAAI,KAAK,QACjB,CAAE,YAAAC,EAAa,aAAAC,CAAa,EAAI,KAAK,MACrC,CAAE,OAAAC,CAAO,EAAI,KACbC,EAAgBC,GAAyBJ,CAAW,EACxD,GAAIG,EAAe,CACf,IAAIE,EAAcH,EAAO,sBAAsB,EAE3CI,EAAaL,EACXM,GAAeP,EAAa,gBAAgB,EAAE,sBAAsB,EAAE,IACtEG,EAAc,IAChBK,EAAcT,EAAQI,EAAc,MAAQE,EAAY,MAAQF,EAAc,KAElFG,EAAa,KAAK,IAAIA,EAAYhB,EAAqB,EACvDkB,EAAc,KAAK,IAAIA,EAAa,SAAS,gBAAgB,YAAclB,GAAwBe,EAAY,KAAK,EACpHG,EAAc,KAAK,IAAIA,EAAalB,EAAqB,EACzD,IAAImB,EAASP,EAAO,aAAa,sBAAsB,EACvDQ,GAAWR,EAAQ,CACf,IAAKI,EAAaG,EAAO,IACzB,KAAMD,EAAcC,EAAO,IAC/B,CAAC,CACL,CACJ,CACJ,EAEME,GAAN,cAA0BC,EAAc,CACpC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,aAAgBV,GAAW,CAC5B,KAAK,OAASA,EACVA,EACA,KAAK,QAAQ,6BAA6B,KAAM,CAC5C,GAAIA,EACJ,eAAgB,EACpB,CAAC,EAGD,KAAK,QAAQ,+BAA+B,IAAI,CAExD,CACJ,CACA,QAAS,CACL,GAAI,CAAE,QAAArG,EAAS,QAAAyE,CAAQ,EAAI,KAAK,QAC5B,CAAE,MAAArI,CAAM,EAAI,KACZ,CAAE,UAAA4K,EAAW,WAAAC,EAAY,YAAAvC,CAAY,EAAItI,EACzC6I,EAAQR,EAAQ,OAAOuC,EAAWhH,EAAQ,gBAAgB,EAC9D,OAAQvD,EAAcuH,GAAkB,CAAE,MAAO,KAAK,aAAc,KAAMgD,EAAW,YAAatC,EAAa,WAAYuC,CAAW,EAAG,CAACxD,EAAcd,EAAauE,IAAazK,EAAciJ,GAAS,CAAE,MAAOwB,EAAQ,IAAK,GAAI9K,EAAM,GAAI,MAAO6I,EAAO,gBAAiB,CAAC,iBAAiB,EAAE,OAAOiC,EAAQ,WAAa,CAAC,CAAC,EAAG,WAAYA,EAA+D,SAAU9K,EAAM,SAAU,YAAaA,EAAM,YAAa,aAAcA,EAAM,aAAc,QAASA,EAAM,OAAQ,EAC3fiI,GAAwBrE,CAAO,GAAMvD,EAAcgH,EAAc,CAAE,MAAO,MAAO,UAAW,CAAC,sBAAsB,CAAE,CAAC,EACtHrH,EAAM,QAAQ,CAAE,CACxB,CACA,SAAS+K,EAAcC,EAAaC,EAASC,EAAU,CACnD,GAAI,CAAE,OAAAjB,EAAQ,MAAAjK,CAAM,EAAI,KACxB,OAAI+K,GAAgB,GAAKA,EAAeE,GACpCD,GAAe,GAAKA,EAAcE,EAC3B,CACH,YAAalL,EAAM,YACnB,SAAU,OAAO,OAAO,CAAE,OAAQ,CAACA,EAAM,WAAY,MAAO,CACpD,MAAOA,EAAM,UACb,IAAKA,EAAM,OACf,CAAE,EAAGA,EAAM,aAAa,EAC5B,MAAOiK,EACP,KAAM,CACF,KAAM,EACN,IAAK,EACL,MAAOgB,EACP,OAAQC,CACZ,EACA,MAAO,CACX,EAEG,IACX,CACJ,EAEMC,GAAN,cAAgCtL,EAAc,CAC1C,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQ,CACT,cAAe,GACf,UAAW0J,GAAe,CAC9B,EACA,KAAK,aAAgB6B,GAAW,CAC5B,KAAK,OAASA,EACV,KAAK,MAAM,OACXrL,GAAO,KAAK,MAAM,MAAOqL,CAAM,CAEvC,EACA,KAAK,YAAe5B,GAAO,CACvB,GAAI,CAAE,MAAAxJ,EAAO,QAAAsD,CAAQ,EAAI,KACrB,CAAE,cAAA+H,CAAc,EAAI/H,EAAQ,QAC5B8E,EAAOkD,GAAatL,CAAK,EAAE,MAC/B,SAASuL,EAAenF,EAAK,CACzB,GAAI,CAAE,IAAAoF,EAAK,SAAAC,EAAU,MAAAC,CAAM,EAAItF,EAAI,WACnC,MAAO,CACH,MAAO,IAAII,GAAUlD,EAASkI,EAAKC,CAAQ,EAC3C,MAAOnI,EAAQ,QAAQ,OAAOoI,EAAM,KAAK,EACzC,IAAKpI,EAAQ,QAAQ,OAAOoI,EAAM,GAAG,EACrC,QAAStF,EAAI,QACb,MAAOA,EAAI,KACf,CACJ,CACI,OAAOiF,GAAkB,aACzBA,EAAgBA,EAAc,CAC1B,KAAAjD,EACA,OAAQ,EAAQpI,EAAM,WACtB,QAASA,EAAM,QAAQ,IAAIuL,CAAc,EACzC,WAAYvL,EAAM,WAAW,IAAIuL,CAAc,EAC/C,QAAS/B,EACT,KAAMlG,EAAQ,OAClB,CAAC,GAED,CAAC+H,GAAiBA,IAAkB,UACpC,KAAK,SAAS,CAAE,cAAe,EAAK,CAAC,EAEhC,OAAOA,GAAkB,UAC9B/H,EAAQ,YAAY,OAAO8E,EAAMiD,CAAa,CAEtD,EACA,KAAK,mBAAqB,IAAM,CAC5B,KAAK,SAAS,CAAE,cAAe,EAAM,CAAC,CAC1C,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAArL,EAAO,MAAAmE,CAAM,EAAI,KACvB,OAAQ9D,EAAcoH,GAAgB,SAAU,KAAOnE,GAAY,CAC/D,GAAI,CAAE,QAAAqI,EAAS,QAAA/H,EAAS,YAAAgI,CAAY,EAAItI,EACpC,CAAE,aAAAuI,CAAa,EAAIjI,EACnB,CAAE,QAAAkI,CAAQ,EAAI9L,EACd0L,EAAQJ,GAAatL,CAAK,EAC1BmJ,EAAO,OAAO0C,GAAiB,WAC7BA,EAAa,KAAKD,EAAaE,CAAO,EACtC,IAAIA,CAAO,IAAID,CAAY,GAC7BE,EAAOC,GAAmBpI,EAAQ,aAAc,CAACkI,CAAO,EAAG3C,CAAI,EAC/D5C,EAAc,CACd,IAAKuF,EACL,UAAW,IAAIA,CAAO,GACtB,KAAA3C,EACA,KAAMwC,CACV,EACA,OAAQtL,EAAc0E,GAAU,KAC5B,EAAQ/E,EAAM,SAAaK,EAAcuG,GAAkB,CAAE,MAAO5G,EAAM,OAAS,IAAK,MAAO,KAAK,aAAc,UAAW,CACrH,GAAIA,EAAM,WAAa,CAAC,EACxB,cACJ,EAAG,QAASA,EAAM,QAAS,QAAS,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAM,OAAO,EAAGiM,GAAqB,KAAK,WAAW,CAAC,EAAG,CAAE,MAAOF,EAAM,gBAAiB5H,EAAM,cAAe,gBAAiBA,EAAM,cAAgBA,EAAM,UAAY,EAAG,CAAC,EAAG,YAAaoC,EAAa,cAAe,kBAAmB,gBAAiB3C,EAAQ,gBAAiB,iBAAkB5D,EAAM,kBAAoBkM,GAAqB,mBAAoBtI,EAAQ,mBAAoB,SAAUA,EAAQ,iBAAkB,YAAaA,EAAQ,mBAAoB,EAAG5D,EAAM,QAAQ,EACzjBmE,EAAM,eAAkB9D,EAAcqK,GAAa,CAAE,GAAIvG,EAAM,UAAW,UAAWuH,EAAM,MAAO,QAASA,EAAM,IAAK,YAAa1L,EAAM,YAAa,WAAYA,EAAM,WAAY,cAAeA,EAAM,cAAe,SAAU,KAAK,SAAU,YAAaA,EAAM,eAC5PA,EAAM,eAAe,QACrB,KAAK,OAAQ,aAAcA,EAAM,aAAc,WAAYA,EAAM,WAAY,QAAS,KAAK,kBAAmB,EAAGA,EAAM,eAAe,CAAC,CAAE,CACzJ,CAAC,CACL,CACA,mBAAoB,CAChB,KAAK,eAAe,CACxB,CACA,oBAAqB,CACjB,KAAK,eAAe,CACxB,CACA,gBAAiB,CACT,KAAK,SACL,KAAK,SAAWsK,GAAe,KAAK,OAAQ,kBAAkB,EAEtE,CACJ,EACA,SAAS4B,GAAoBlM,EAAO,CAChC,OAAOA,EAAM,IACjB,CACA,SAASsL,GAAatL,EAAO,CACzB,GAAIA,EAAM,WACN,MAAO,CACH,MAAOA,EAAM,WACb,IAAKmM,GAAQnM,EAAM,WAAY,CAAC,CACpC,EAEJ,GAAI,CAAE,WAAAoM,CAAW,EAAIpM,EACrB,MAAO,CACH,MAAOqM,GAAwBD,CAAU,EACzC,IAAKE,GAAoBF,CAAU,CACvC,CACJ,CACA,SAASC,GAAwBE,EAAM,CACnC,OAAOA,EAAK,OAAOC,EAAiB,EAAE,WAAW,MAAM,KAC3D,CACA,SAASA,GAAkBC,EAAMC,EAAM,CACnC,OAAOD,EAAK,WAAW,MAAM,MAAQC,EAAK,WAAW,MAAM,MAAQD,EAAOC,CAC9E,CACA,SAASJ,GAAoBC,EAAM,CAC/B,OAAOA,EAAK,OAAOI,EAAa,EAAE,WAAW,MAAM,GACvD,CACA,SAASA,GAAcF,EAAMC,EAAM,CAC/B,OAAOD,EAAK,WAAW,MAAM,IAAMC,EAAK,WAAW,MAAM,IAAMD,EAAOC,CAC1E,CC3wOA,IAAME,GAAgB,CAAC,EAEjBC,GAAwB,CAC1B,KAAM,KACN,KAAM,CACF,IAAK,EACL,IAAK,CACT,EACA,UAAW,MACX,WAAY,CACR,KAAM,OACN,KAAM,OACN,SAAU,YACV,SAAU,YACV,KAAM,OACN,MAAO,QACP,MAAO,QACP,KAAM,OACN,IAAK,MACL,KAAM,MACV,EACA,SAAU,IACV,aAAc,OACd,UAAW,QACX,SAAU,OACV,UAAW,QACX,WAAY,UACZ,aAAc,OACd,aAAc,sBAClB,EACMC,GAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAqB,EAAG,CAG1E,YAAa,CACT,KAAM,cACN,KAAM,UACN,MAAME,EAAYC,EAAM,CACpB,OAAQA,IAAS,MACX,QACA,QAAQD,CAAU,EAC5B,CACJ,EAAG,SAAU,UAAW,YAAa,WAAY,aAAaE,EAAU,CACpE,MAAO,QAAQA,CAAQ,cAAcA,IAAa,EAAI,GAAK,GAAG,EAClE,CAAE,CAAC,EACP,SAASC,GAAmBC,EAAoB,CAC5C,IAAIC,EAAcD,EAAmB,OAAS,EAAIA,EAAmB,CAAC,EAAE,KAAO,KAC3EE,EAAgBT,GAAc,OAAOO,CAAkB,EACvDG,EAAe,CACf,GAAIR,EACR,EACA,QAASS,KAAaF,EAClBC,EAAaC,EAAU,IAAI,EAAIA,EAEnC,MAAO,CACH,IAAKD,EACL,YAAAF,CACJ,CACJ,CACA,SAASI,GAAYC,EAAeC,EAAW,CAC3C,OAAI,OAAOD,GAAkB,UAAY,CAAC,MAAM,QAAQA,CAAa,EAC1DE,GAAYF,EAAc,KAAM,CAACA,EAAc,IAAI,EAAGA,CAAa,EAEvEG,GAAYH,EAAeC,CAAS,CAC/C,CACA,SAASE,GAAYC,EAASH,EAAW,CACrC,IAAII,EAAQ,CAAC,EAAE,OAAOD,GAAW,CAAC,CAAC,EAC/BE,EAAMC,GAAeF,EAAOJ,CAAS,GAAKZ,GAC9C,OAAOa,GAAYE,EAASC,EAAOC,CAAG,CAC1C,CACA,SAASC,GAAeF,EAAOJ,EAAW,CACtC,QAASO,EAAI,EAAGA,EAAIH,EAAM,OAAQG,GAAK,EAAG,CACtC,IAAIC,EAAQJ,EAAMG,CAAC,EAAE,kBAAkB,EAAE,MAAM,GAAG,EAClD,QAASE,EAAID,EAAM,OAAQC,EAAI,EAAGA,GAAK,EAAG,CACtC,IAAIC,EAAWF,EAAM,MAAM,EAAGC,CAAC,EAAE,KAAK,GAAG,EACzC,GAAIT,EAAUU,CAAQ,EAClB,OAAOV,EAAUU,CAAQ,CAEjC,CACJ,CACA,OAAO,IACX,CACA,SAAST,GAAYE,EAASC,EAAOC,EAAK,CACtC,IAAIM,EAASC,GAAW,CAACzB,GAAuBkB,CAAG,EAAG,CAAC,YAAY,CAAC,EACpE,OAAOM,EAAO,KACd,GAAI,CAAE,KAAAE,CAAK,EAAIF,EACf,cAAOA,EAAO,KACP,CACH,QAAAR,EACA,MAAAC,EACA,KAAAS,EACA,mBAAoB,IAAI,KAAK,aAAaV,CAAO,EACjD,QAASQ,CACb,CACJ,CAGA,SAASG,GAAaC,EAAO,CACzB,MAAO,CACH,GAAIC,GAAK,EACT,KAAMD,EAAM,KACZ,mBAAoBA,EAAM,mBAAqB,IAAI,KAAKA,EAAM,kBAAkB,EAAI,OACpF,KAAMA,EAAM,MAAQ,CAAC,EACrB,SAAUA,EAAM,UAAY,CAAC,EAC7B,eAAgBA,EAAM,gBAAkB,CAAC,EACzC,YAAa,CAAC,EAAE,OAAOA,EAAM,aAAe,CAAC,CAAC,EAC9C,cAAeA,EAAM,eAAiB,CAAC,EACvC,qBAAsBA,EAAM,sBAAwB,CAAC,EACrD,oBAAqBA,EAAM,qBAAuB,CAAC,EACnD,wBAAyBA,EAAM,yBAA2B,CAAC,EAC3D,2BAA4BA,EAAM,4BAA8B,CAAC,EACjE,yBAA0BA,EAAM,0BAA4B,CAAC,EAC7D,0BAA2BA,EAAM,2BAA6B,CAAC,EAC/D,oBAAqBA,EAAM,qBAAuB,CAAC,EACnD,mBAAoBA,EAAM,oBAAsB,CAAC,EACjD,MAAOA,EAAM,OAAS,CAAC,EACvB,sBAAuBA,EAAM,uBAAyB,CAAC,EACvD,aAAcA,EAAM,cAAgB,KACpC,sBAAuBA,EAAM,uBAAyB,CAAC,EACvD,qBAAsBA,EAAM,sBAAwB,CAAC,EACrD,sBAAuBA,EAAM,uBAAyB,CAAC,EACvD,sBAAuBA,EAAM,uBAAyB,CAAC,EACvD,qBAAsBA,EAAM,sBAAwB,CAAC,EACrD,aAAcA,EAAM,cAAgB,CAAC,EACrC,gBAAiBA,EAAM,iBAAmB,CAAC,EAC3C,aAAcA,EAAM,aACpB,eAAgBA,EAAM,gBAAkB,CAAC,EACzC,mBAAoBA,EAAM,mBAC1B,YAAaA,EAAM,aAAe,GAClC,oBAAqBA,EAAM,oBAC3B,qBAAsBA,EAAM,sBAAwB,CAAC,EACrD,eAAgBA,EAAM,gBAAkB,KACxC,iBAAkBA,EAAM,kBAAoB,CAAC,EAC7C,eAAgBA,EAAM,gBAAkB,CAAC,EACzC,gBAAiBA,EAAM,iBAAmB,CAAC,CAC/C,CACJ,CACA,SAASE,GAAiBC,EAAYC,EAAY,CAC9C,IAAIC,EAAmB,CAAC,EACpBC,EAAQ,CACR,mBAAoB,OACpB,SAAU,CAAC,EACX,eAAgB,CAAC,EACjB,YAAa,CAAC,EACd,cAAe,CAAC,EAChB,qBAAsB,CAAC,EACvB,oBAAqB,CAAC,EACtB,wBAAyB,CAAC,EAC1B,2BAA4B,CAAC,EAC7B,yBAA0B,CAAC,EAC3B,0BAA2B,CAAC,EAC5B,oBAAqB,CAAC,EACtB,mBAAoB,CAAC,EACrB,MAAO,CAAC,EACR,sBAAuB,CAAC,EACxB,aAAc,KACd,sBAAuB,CAAC,EACxB,qBAAsB,CAAC,EACvB,sBAAuB,CAAC,EACxB,sBAAuB,CAAC,EACxB,qBAAsB,CAAC,EACvB,aAAc,CAAC,EACf,gBAAiB,CAAC,EAClB,aAAc,KACd,eAAgB,CAAC,EACjB,mBAAoB,KACpB,YAAa,GACb,oBAAqB,KACrB,qBAAsB,CAAC,EACvB,eAAgB,KAChB,iBAAkB,CAAC,EACnB,eAAgB,CAAC,EACjB,gBAAiB,CAAC,CACtB,EACA,SAASC,EAAQC,EAAM,CACnB,QAASC,KAAOD,EAAM,CAClB,IAAME,EAAaD,EAAI,KACjBE,EAAYN,EAAiBK,CAAU,EACzCC,IAAc,QACdN,EAAiBK,CAAU,EAAID,EAAI,GACnCF,EAAQE,EAAI,IAAI,EAChBH,EAAQM,GAAaN,EAAOG,CAAG,GAE1BE,IAAcF,EAAI,IAEvB,QAAQ,KAAK,qBAAqBC,CAAU,GAAG,CAEvD,CACJ,CACA,OAAIP,GACAI,EAAQJ,CAAU,EAEtBI,EAAQH,CAAU,EACXE,CACX,CACA,SAASO,IAAwB,CAC7B,IAAIC,EAAsB,CAAC,EACvBC,EAAoB,CAAC,EACrBC,EACJ,MAAO,CAACC,EAAcb,MACd,CAACY,GAAgB,CAACE,GAAcD,EAAcH,CAAmB,GAAK,CAACI,GAAcd,EAAYW,CAAiB,KAClHC,EAAed,GAAiBe,EAAcb,CAAU,GAE5DU,EAAsBG,EACtBF,EAAoBX,EACbY,EAEf,CACA,SAASJ,GAAaO,EAAQC,EAAQ,CAClC,MAAO,CACH,mBAAoBC,GAAqBF,EAAO,mBAAoBC,EAAO,kBAAkB,EAC7F,SAAUD,EAAO,SAAS,OAAOC,EAAO,QAAQ,EAChD,eAAgBD,EAAO,eAAe,OAAOC,EAAO,cAAc,EAClE,YAAaD,EAAO,YAAY,OAAOC,EAAO,WAAW,EACzD,cAAe,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,aAAa,EAAGC,EAAO,aAAa,EAC1F,qBAAsBD,EAAO,qBAAqB,OAAOC,EAAO,oBAAoB,EACpF,oBAAqB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,mBAAmB,EAAGC,EAAO,mBAAmB,EAC5G,wBAAyBD,EAAO,wBAAwB,OAAOC,EAAO,uBAAuB,EAC7F,2BAA4BD,EAAO,2BAA2B,OAAOC,EAAO,0BAA0B,EACtG,yBAA0BD,EAAO,yBAAyB,OAAOC,EAAO,wBAAwB,EAChG,0BAA2BD,EAAO,0BAA0B,OAAOC,EAAO,yBAAyB,EACnG,oBAAqBD,EAAO,oBAAoB,OAAOC,EAAO,mBAAmB,EACjF,mBAAoBD,EAAO,mBAAmB,OAAOC,EAAO,kBAAkB,EAC9E,MAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,KAAK,EAAGC,EAAO,KAAK,EAClE,sBAAuBD,EAAO,sBAAsB,OAAOC,EAAO,qBAAqB,EACvF,aAAcA,EAAO,cAAgBD,EAAO,aAC5C,sBAAuBA,EAAO,sBAAsB,OAAOC,EAAO,qBAAqB,EACvF,qBAAsBD,EAAO,qBAAqB,OAAOC,EAAO,oBAAoB,EACpF,sBAAuBD,EAAO,sBAAsB,OAAOC,EAAO,qBAAqB,EACvF,qBAAsBD,EAAO,qBAAqB,OAAOC,EAAO,oBAAoB,EACpF,sBAAuBD,EAAO,sBAAsB,OAAOC,EAAO,qBAAqB,EACvF,aAAc,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,YAAY,EAAGC,EAAO,YAAY,EACvF,gBAAiBD,EAAO,gBAAgB,OAAOC,EAAO,eAAe,EACrE,aAAcA,EAAO,cAAgBD,EAAO,aAC5C,eAAgBA,EAAO,eAAe,OAAOC,EAAO,cAAc,EAClE,mBAAoBA,EAAO,oBAAsBD,EAAO,mBACxD,YAAaA,EAAO,aAAeC,EAAO,YAC1C,oBAAqBD,EAAO,qBAAuBC,EAAO,oBAC1D,qBAAsB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,oBAAoB,EAAGC,EAAO,oBAAoB,EAC/G,eAAgBA,EAAO,gBAAkBD,EAAO,eAChD,iBAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAO,gBAAgB,EAAGC,EAAO,gBAAgB,EACnG,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,cAAc,EAAGC,EAAO,cAAc,EAC7F,gBAAiB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,EAAO,eAAe,EAAGC,EAAO,eAAe,CACpG,CACJ,CACA,SAASC,GAAqBC,EAAOC,EAAO,CACxC,OAAID,IAAU,OACHC,EAEPA,IAAU,OACHD,EAEJ,IAAI,KAAK,KAAK,IAAIA,EAAM,QAAQ,EAAGC,EAAM,QAAQ,CAAC,CAAC,CAC9D,CAEA,IAAMC,GAAN,cAA4BC,EAAM,CAClC,EACAD,GAAc,UAAU,QAAU,CAC9B,KAAM,oBACN,gBAAiB,iBACjB,YAAa,kBACb,OAAQ,8BACR,aAAc,kBAClB,EACAA,GAAc,UAAU,cAAgB,UACxCA,GAAc,UAAU,YAAc,CAClC,MAAO,YACP,KAAM,uBACN,KAAM,wBACN,SAAU,wBACV,SAAU,wBACd,EACAA,GAAc,UAAU,eAAiB,CACrC,KAAM,wBACN,KAAM,uBACN,SAAU,yBACV,SAAU,uBACd,EACAA,GAAc,UAAU,mBAAqB,cAC7CA,GAAc,UAAU,+BAAiC,OACzDA,GAAc,UAAU,mBAAqB,WAE7C,SAASE,GAAgBC,EAAgBC,EAAiB,CACtD,IAAIC,EAAO,CAAC,EACRC,EACJ,IAAKA,KAAYH,EACbI,GAAcD,EAAUD,EAAMF,EAAgBC,CAAe,EAEjE,IAAKE,KAAYF,EACbG,GAAcD,EAAUD,EAAMF,EAAgBC,CAAe,EAEjE,OAAOC,CACX,CACA,SAASE,GAAcD,EAAUD,EAAMF,EAAgBC,EAAiB,CACpE,GAAIC,EAAKC,CAAQ,EACb,OAAOD,EAAKC,CAAQ,EAExB,IAAIE,EAAUC,GAAaH,EAAUD,EAAMF,EAAgBC,CAAe,EAC1E,OAAII,IACAH,EAAKC,CAAQ,EAAIE,GAEdA,CACX,CACA,SAASC,GAAaH,EAAUD,EAAMF,EAAgBC,EAAiB,CACnE,IAAIM,EAAgBP,EAAeG,CAAQ,EACvCK,EAAiBP,EAAgBE,CAAQ,EACzCM,EAAaC,GAAWH,GAAiBA,EAAcG,CAAI,IAAM,KAAQH,EAAcG,CAAI,EACzFF,GAAkBA,EAAeE,CAAI,IAAM,KAAQF,EAAeE,CAAI,EAAI,KAC5EC,EAAeF,EAAU,WAAW,EACpCG,EAAYH,EAAU,WAAW,EACjCI,EAAW,KACf,GAAID,EAAW,CACX,GAAIA,IAAcT,EACd,MAAM,IAAI,MAAM,sDAAuD,EAE3EU,EAAWT,GAAcQ,EAAWV,EAAMF,EAAgBC,CAAe,CAC7E,CAIA,MAHI,CAACU,GAAgBE,IACjBF,EAAeE,EAAS,WAEvBF,EAGE,CACH,KAAMR,EACN,UAAWQ,EACX,SAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAIE,EAAWA,EAAS,SAAW,CAAC,CAAE,EAAIN,EAAgBA,EAAc,WAAa,CAAC,CAAE,EAC/H,UAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAIM,EAAWA,EAAS,UAAY,CAAC,CAAE,EAAIL,EAAiBA,EAAe,WAAa,CAAC,CAAE,CACvI,EAPW,IAQf,CAEA,SAASM,GAAiBC,EAAQ,CAC9B,OAAOC,GAAQD,EAAQE,EAAe,CAC1C,CACA,SAASA,GAAgB5C,EAAO,CAC5B,IAAI6C,EAAa,OAAO7C,GAAU,WAC9B,CAAE,UAAWA,CAAM,EACnBA,EACA,CAAE,UAAA8C,CAAU,EAAID,EACpB,OAAIA,EAAW,QAEXC,EAAYC,GAAwBF,CAAU,EAEzCC,GAAa,EAAEA,EAAU,qBAAqBE,MAGnDF,EAAYC,GAAwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAU,EAAG,CAAE,QAASC,CAAU,CAAC,CAAC,GAErG,CACH,UAAWD,EAAW,KACtB,UAAWC,EACX,WAAAD,CACJ,CACJ,CACA,SAASE,GAAwBE,EAAS,CACtC,OAAQC,GAAeC,EAAcC,GAAgB,SAAU,KAAOC,GAAaF,EAAcG,GAAkB,CAAE,MAAO,MAAO,UAAWC,GAAoBF,EAAQ,QAAQ,EAAG,YAAa,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,CAAS,EAAG,CAAE,iBAAkBG,EAAQ,QAAQ,gBAAiB,CAAC,EAAG,cAAe,OAAW,gBAAiBJ,EAAQ,QAAS,mBAAoBA,EAAQ,WAAY,SAAUA,EAAQ,SAAU,YAAaA,EAAQ,WAAY,CAAC,CAAE,CAC/c,CAEA,SAASO,GAAeC,EAAeC,EAAiBC,EAAwBC,EAAgB,CAC5F,IAAIjC,EAAiBc,GAAiBgB,CAAa,EAC/C7B,EAAkBa,GAAiBiB,EAAgB,KAAK,EACxDG,EAAWnC,GAAgBC,EAAgBC,CAAe,EAC9D,OAAOe,GAAQkB,EAAW7B,GAAY8B,GAAc9B,EAASJ,EAAiB8B,EAAiBC,EAAwBC,CAAc,CAAC,CAC1I,CACA,SAASE,GAAc9B,EAASJ,EAAiB8B,EAAiBC,EAAwBC,EAAgB,CACtG,IAAIG,EAAgB/B,EAAQ,UAAU,UAClCA,EAAQ,SAAS,UACjB2B,EAAuB,UACvBD,EAAgB,SAChBM,EAAW,KACXC,EAAe,GACfC,EAAa,GACbC,EAAsB,CAAC,EAC3B,GAAIJ,IACAC,EAAWI,GAAqBL,CAAa,EACzCC,GAAU,CACV,IAAIK,EAAQC,GAA4BN,CAAQ,EAChDC,EAAeI,EAAM,KACjBA,EAAM,QAAU,IAChBH,EAAaD,EACbE,EAAsBvC,EAAgBqC,CAAY,EAAIrC,EAAgBqC,CAAY,EAAE,WAAa,CAAC,EAE1G,CAEJ,IAAIM,EAAmBC,GAAkB,CACrC,IAAIC,EAAgBD,EAAc,YAAc,CAAC,EAC7CE,EAAgB1C,EAAQ,SAAS,cACrC,OAAI0C,GAAiB,MAAQD,EAAcC,CAAa,GAAK,KAClDD,EAAcC,CAAa,EAElCD,EAAczC,EAAQ,IAAI,GAAK,KACxByC,EAAczC,EAAQ,IAAI,EAEjCyC,EAAcP,CAAU,GAAK,KACtBO,EAAcP,CAAU,EAE5B,IACX,EACIS,EAAoBH,GAAkB,CACtC,IAAII,EAAcJ,EAAc,aAAe,CAAC,EAC5CK,EAAY7C,EAAQ,SAAS,cACjC,OAAI6C,GAAa,MAAQD,EAAYC,CAAS,GAAK,KACxCD,EAAYC,CAAS,EAE5BD,EAAY5C,EAAQ,IAAI,GAAK,KACtB4C,EAAY5C,EAAQ,IAAI,EAE/B4C,EAAYV,CAAU,GAAK,KACpBU,EAAYV,CAAU,EAE1B,IACX,EACA,MAAO,CACH,KAAMlC,EAAQ,KACd,UAAWA,EAAQ,UACnB,SAAAgC,EACA,aAAAC,EACA,WAAAC,EACA,eAAgBlC,EAAQ,SACxB,gBAAiB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGmC,CAAmB,EAAGnC,EAAQ,SAAS,EACxF,mBAAoBuC,EAAgBZ,CAAsB,GACtDY,EAAgBb,CAAe,GAC/B1B,EAAQ,UAAU,WACtB,kBAAmBuC,EAAgBX,CAAc,GAC7C5B,EAAQ,SAAS,YACjBuC,EAAgBO,EAAoB,GACpC9C,EAAQ,KAEZ,oBAAqB2C,EAAiBhB,CAAsB,GACxDgB,EAAiBjB,CAAe,GAChC1B,EAAQ,UAAU,WACtB,mBAAoB2C,EAAiBf,CAAc,GAC/C5B,EAAQ,SAAS,YACjB2C,EAAiBG,EAAoB,CAE7C,CACJ,CAEA,IAAIC,GAAmB,CAAC,EACxB,SAASX,GAAqBL,EAAe,CACzC,IAAIiB,EAAO,KAAK,UAAUjB,CAAa,EACnCkB,EAAMF,GAAiBC,CAAI,EAC/B,OAAIC,IAAQ,SACRA,EAAMC,GAAenB,CAAa,EAClCgB,GAAiBC,CAAI,EAAIC,GAEtBA,CACX,CAEA,SAASE,GAAerD,EAAUsD,EAAQ,CACtC,OAAQA,EAAO,KAAM,CACjB,IAAK,mBACDtD,EAAWsD,EAAO,QAC1B,CACA,OAAOtD,CACX,CAEA,SAASuD,GAA6B1B,EAAwByB,EAAQ,CAClE,OAAQA,EAAO,KAAM,CACjB,IAAK,aACD,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGzB,CAAsB,EAAG,CAAE,CAACyB,EAAO,UAAU,EAAGA,EAAO,cAAe,CAAC,EAClH,QACI,OAAOzB,CACf,CACJ,CAEA,SAAS2B,GAAkBC,EAAoBH,EAAQI,EAAaC,EAAsB,CACtF,IAAIC,EACJ,OAAQN,EAAO,KAAM,CACjB,IAAK,mBACD,OAAOK,EAAqB,MAAML,EAAO,YAAcI,CAAW,EACtE,IAAK,cACD,OAAOC,EAAqB,MAAML,EAAO,UAAU,EACvD,IAAK,OAED,GADAM,EAAKD,EAAqB,UAAUF,EAAoBC,CAAW,EAC/DE,EAAG,QACH,OAAOA,EAEX,MACJ,IAAK,OAED,GADAA,EAAKD,EAAqB,UAAUF,EAAoBC,CAAW,EAC/DE,EAAG,QACH,OAAOA,EAEX,KACR,CACA,OAAOH,CACX,CAEA,SAASI,GAAiBC,EAAiBC,EAAaxC,EAAS,CAC7D,IAAIyC,EAAcD,EAAcA,EAAY,YAAc,KAC1D,OAAOE,GAAW,CAAC,EAAGC,GAAoBJ,EAAiBvC,CAAO,EAAGyC,EAAazC,CAAO,CAC7F,CACA,SAAS4C,GAAmBC,EAAcd,EAAQS,EAAaxC,EAAS,CACpE,IAAIyC,EAAcD,EAAcA,EAAY,YAAc,KAC1D,OAAQT,EAAO,KAAM,CACjB,IAAK,oBACD,OAAOW,GAAWG,EAAcd,EAAO,QAASU,EAAazC,CAAO,EACxE,IAAK,sBACD,OAAO8C,GAAaD,EAAcd,EAAO,QAAQ,EACrD,IAAK,OACL,IAAK,OACL,IAAK,cACL,IAAK,mBACD,OAAIS,EACOO,GAAkBF,EAAcJ,EAAazC,CAAO,EAExD6C,EACX,IAAK,sBACD,OAAOG,GAAkBH,EAAcd,EAAO,UAC1CkB,GAAYlB,EAAO,SAAS,EAC5BmB,GAAqBL,EAAc7C,CAAO,EAAGyC,EAAaV,EAAO,WAAa,GAAO/B,CAAO,EACpG,IAAK,iBACL,IAAK,sBACD,OAAOmD,GAAgBN,EAAcd,EAAO,SAAUA,EAAO,QAASA,EAAO,UAAU,EAC3F,IAAK,2BACD,MAAO,CAAC,EACZ,QACI,OAAOc,CACf,CACJ,CACA,SAASO,GAA8BP,EAAcL,EAAaxC,EAAS,CACvE,IAAIyC,EAAcD,EAAcA,EAAY,YAAc,KAC1D,OAAOQ,GAAkBH,EAAcK,GAAqBL,EAAc7C,CAAO,EAAGyC,EAAa,GAAMzC,CAAO,CAClH,CACA,SAASqD,GAA2BR,EAAc,CAC9C,QAASS,KAAYT,EACjB,GAAIA,EAAaS,CAAQ,EAAE,WACvB,MAAO,GAGf,MAAO,EACX,CACA,SAASZ,GAAWa,EAAiBC,EAASC,EAAYzD,EAAS,CAC/D,IAAIxB,EAAO,CAAC,EACZ,QAASkF,KAAUF,EACfhF,EAAKkF,EAAO,QAAQ,EAAIA,EAE5B,OAAID,IACAjF,EAAOuE,GAAkBvE,EAAMiF,EAAYzD,CAAO,GAE/C,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGuD,CAAe,EAAG/E,CAAI,CACjE,CACA,SAASsE,GAAaS,EAAiBD,EAAU,CAC7C,OAAOK,GAAWJ,EAAkBK,GAAgBA,EAAY,WAAaN,CAAQ,CACzF,CACA,SAASP,GAAkBc,EAAYJ,EAAYzD,EAAS,CACxD,OAAOgD,GAAkBa,EAAYF,GAAWE,EAAaD,GAAgBE,GAAcF,EAAaH,EAAYzD,CAAO,CAAC,EAAGyD,EAAY,GAAOzD,CAAO,CAC7J,CACA,SAAS8D,GAAcF,EAAaH,EAAYzD,EAAS,CACrD,OAAK+D,GAAoBH,EAAa5D,CAAO,EAGtC,CAACA,EAAQ,QAAQ,cACpB,CAAC4D,EAAY,YACbA,EAAY,YACZH,EAAW,MAAQG,EAAY,WAAW,OAC1CH,EAAW,IAAMG,EAAY,WAAW,IANjC,CAACA,EAAY,aAO5B,CACA,SAASZ,GAAkBgB,EAAaC,EAAcR,EAAYS,EAAWlE,EAAS,CAClF,IAAImE,EAAc,CAAC,EACnB,QAASb,KAAYU,EAAa,CAC9B,IAAIN,EAASM,EAAYV,CAAQ,EAC7BW,EAAaX,CAAQ,EACrBa,EAAYb,CAAQ,EAAIc,GAAYV,EAAQD,EAAYS,EAAWlE,CAAO,EAG1EmE,EAAYb,CAAQ,EAAII,CAEhC,CACA,OAAOS,CACX,CACA,SAASC,GAAYR,EAAaH,EAAYS,EAAWlE,EAAS,CAC9D,GAAI,CAAE,QAAAJ,EAAS,YAAAyE,CAAY,EAAIrE,EAC3BsE,EAAYtE,EAAQ,YAAY,gBAAgB4D,EAAY,WAAW,EACvEW,EAAU3H,GAAK,EACnB,OAAA0H,EAAU,MAAM,CACZ,YAAAV,EACA,MAAOH,EACP,UAAAS,EACA,QAAAlE,CACJ,EAAI4B,GAAQ,CACR,GAAI,CAAE,UAAA4C,CAAU,EAAI5C,EAChBhC,EAAQ,qBACR4E,EAAY5E,EAAQ,mBAAmB,KAAKyE,EAAaG,EAAW5C,EAAI,QAAQ,GAAK4C,GAErFZ,EAAY,UACZY,EAAYZ,EAAY,QAAQ,KAAKS,EAAaG,EAAW5C,EAAI,QAAQ,GAAK4C,GAElFxE,EAAQ,SAAS,CACb,KAAM,iBACN,SAAU4D,EAAY,SACtB,QAAAW,EACA,WAAAd,EACA,UAAAe,CACJ,CAAC,CACL,EAAIC,GAAU,CACV,IAAIC,EAAe,GACf9E,EAAQ,qBACRA,EAAQ,mBAAmB,KAAKyE,EAAaI,CAAK,EAClDC,EAAe,IAEfd,EAAY,UACZA,EAAY,QAAQa,CAAK,EACzBC,EAAe,IAEdA,GACD,QAAQ,KAAKD,EAAM,QAASA,CAAK,EAErCzE,EAAQ,SAAS,CACb,KAAM,sBACN,SAAU4D,EAAY,SACtB,QAAAW,EACA,WAAAd,EACA,MAAAgB,CACJ,CAAC,CACL,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGb,CAAW,EAAG,CAAE,WAAY,GAAM,cAAeW,CAAQ,CAAC,CACrG,CACA,SAASpB,GAAgBU,EAAYP,EAAUiB,EAASd,EAAY,CAChE,IAAIG,EAAcC,EAAWP,CAAQ,EACrC,OAAIM,GACAW,IAAYX,EAAY,cACjB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,CAAU,EAAG,CAAE,CAACP,CAAQ,EAAG,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGM,CAAW,EAAG,CAAE,WAAY,GAAO,WAAAH,CAAW,CAAC,CAAE,CAAC,EAEjJI,CACX,CACA,SAASX,GAAqBL,EAAc7C,EAAS,CACjD,OAAO2D,GAAWd,EAAee,GAAgBG,GAAoBH,EAAa5D,CAAO,CAAC,CAC9F,CACA,SAAS2C,GAAoBnD,EAAYQ,EAAS,CAC9C,IAAI2E,EAAWC,GAAyB5E,CAAO,EAC3C6E,EAAa,CAAC,EAAE,OAAOrF,EAAW,cAAgB,CAAC,CAAC,EACpDgE,EAAU,CAAC,EACXhE,EAAW,eACXqF,EAAW,QAAQrF,EAAW,aAAa,EAE3CA,EAAW,QACXqF,EAAW,QAAQrF,EAAW,MAAM,EAExC,QAASsF,KAAaD,EAAY,CAC9B,IAAInB,EAASqB,GAAiBD,EAAW9E,EAAS2E,CAAQ,EACtDjB,GACAF,EAAQ,KAAKE,CAAM,CAE3B,CACA,OAAOF,CACX,CACA,SAASO,GAAoBH,EAAa5D,EAAS,CAE/C,MAAO,CADIA,EAAQ,YAAY,gBAClB4D,EAAY,WAAW,EAAE,WAC1C,CAEA,SAASoB,GAAoBC,EAAkBlD,EAAQ,CACnD,OAAQA,EAAO,KAAM,CACjB,IAAK,iBACD,OAAO,KACX,IAAK,eACD,OAAOA,EAAO,UAClB,QACI,OAAOkD,CACf,CACJ,CAEA,SAASC,GAAoBC,EAAmBpD,EAAQ,CACpD,OAAQA,EAAO,KAAM,CACjB,IAAK,iBACD,MAAO,GACX,IAAK,eACD,OAAOA,EAAO,gBAClB,QACI,OAAOoD,CACf,CACJ,CAEA,SAASC,GAAgBC,EAAatD,EAAQ,CAC1C,IAAIuD,EACJ,OAAQvD,EAAO,KAAM,CACjB,IAAK,mBACD,OAAO,KACX,IAAK,iBACD,OAAAuD,EAAUvD,EAAO,MACV,CACH,eAAgBuD,EAAQ,eACxB,cAAeA,EAAQ,cACvB,QAASA,EAAQ,OACrB,EACJ,QACI,OAAOD,CACf,CACJ,CAEA,SAASE,GAAkBC,EAAezD,EAAQ,CAC9C,IAAI0D,EACJ,OAAQ1D,EAAO,KAAM,CACjB,IAAK,qBACD,OAAO,KACX,IAAK,mBACD,OAAA0D,EAAY1D,EAAO,MACZ,CACH,eAAgB0D,EAAU,eAC1B,cAAeA,EAAU,cACzB,QAASA,EAAU,OACvB,EACJ,QACI,OAAOD,CACf,CACJ,CAEA,SAASE,GAAcnD,EAAiBoD,EAAyBC,EAAOC,EAAWxB,EAAa,CAC5F,IAAIyB,EAASvD,EAAgB,cAAgBwD,GAAaxD,EAAgB,cAAeA,EAAiBoD,EAAyBC,EAAOC,EAAWxB,CAAW,EAAI,KAChK2B,EAASzD,EAAgB,cAAgBwD,GAAaxD,EAAgB,cAAeA,EAAiBoD,EAAyBC,EAAOC,EAAWxB,CAAW,EAAI,KACpK,MAAO,CAAE,OAAAyB,EAAQ,OAAAE,CAAO,CAC5B,CACA,SAASD,GAAaE,EAAgB1D,EAAiBoD,EAAyBC,EAAOC,EAAWxB,EAAa,CAC3G,IAAI6B,EAAiB,CAAC,EAClBC,EAAmB,CAAC,EACpBC,EAAW,GACf,QAASC,KAAeJ,EAAgB,CACpC,IAAIK,EAAaL,EAAeI,CAAW,EACvCE,EAAaC,GAAaF,EAAY/D,EAAiBoD,EAAyBC,EAAOC,EAAWxB,CAAW,EACjH6B,EAAeG,CAAW,EAAIE,EAAW,QACzCJ,EAAiB,KAAK,GAAGI,EAAW,gBAAgB,EACpDH,EAAWA,GAAYG,EAAW,QACtC,CACA,MAAO,CAAE,eAAAL,EAAgB,iBAAAC,EAAkB,SAAAC,CAAS,CACxD,CAIA,SAASI,GAAaF,EAAY/D,EAClCoD,EACAC,EAAOC,EAAWxB,EAAa,CAC3B,IAAIoC,EAAQlE,EAAgB,YAAc,MACtCmE,EAAwBnE,EAAgB,eAAiB,CAAC,EAC1DoE,EAA8BhB,EAAwB,YAAc,CAAC,EACrEiB,EAAqBrE,EAAgB,YAAc,CAAC,EACpDsE,EAA8BlB,EAAwB,aAAe,CAAC,EACtEmB,EAAsBvE,EAAgB,aAAe,CAAC,EACtDwE,EAAiBT,EAAaA,EAAW,MAAM,GAAG,EAAI,CAAC,EACvDH,EAAmB,CAAC,EACpBC,EAAW,GAgEf,MAAO,CAAE,QA/DKW,EAAe,IAAKC,GAAoBA,EAAe,MAAM,GAAG,EAAE,IAAKC,GAAe,CAChG,GAAIA,IAAe,QACf,OAAAb,EAAW,GACJ,CAAE,WAAAa,CAAW,EAExB,IAAIC,EACAC,EACAC,EACAC,EACApM,EACAqM,EAEJ,GAAKJ,EAAoBR,EAAsBO,CAAU,EACrDG,EAAeG,GAAO,CACdL,EAAkB,OAClBA,EAAkB,MAAM,KAAKK,EAAG,OAAQA,EAAIA,EAAG,MAAM,CAE7D,GACCF,EAAazB,EAAM,yBAAyBsB,CAAiB,KACzDG,EAAazB,EAAM,aAAaqB,EAAYR,CAAK,KACjDxL,EAAaiM,EAAkB,MACpCI,EAAaJ,EAAkB,MAAQA,EAAkB,aAEnDC,EAAWtB,EAAUoB,CAAU,EAAI,CACzCd,EAAiB,KAAKc,CAAU,EAChCG,EAAc,IAAM,CAChB/C,EAAY,WAAW4C,CAAU,CACrC,GACChM,EAAakM,EAAS,sBAClBE,EAAazB,EAAM,aAAaqB,EAAYR,CAAK,KACjDxL,EAAakM,EAAS,mBAC3B,IAAIK,EAAeL,EAAS,oBACxBA,EAAS,kBACbG,EAAaG,GAAmBN,EAAS,qBACrCA,EAAS,oBACT5E,EAAgB,SAAU,CAACiF,EAAcP,CAAU,EACvDO,CAAY,CAChB,SACSnD,EAAY4C,CAAU,EAO3B,GANAG,EAAc,IAAM,CAChB/C,EAAY4C,CAAU,EAAE,CAC5B,GACChM,EAAa0L,EAA4BM,CAAU,KAC/CI,EAAazB,EAAM,aAAaqB,EAAYR,CAAK,KACjDxL,EAAa2L,EAAmBK,CAAU,GAC3CA,IAAe,YAAcA,IAAe,WAAY,CACxD,IAAIS,EAAaT,IAAe,WAAa,OAAS,OACtDK,EAAaG,GAAmBZ,EAA4Ba,CAAU,GAClEZ,EAAoBY,CAAU,EAAG,CACjCd,EAAmB,MAAQ,OAC3B,MACJ,EAAGA,EAAmBK,CAAU,CAAC,CACrC,MAEIK,EAAcK,GAAYF,GAAmBZ,EAA4BI,CAAU,GAC/EH,EAAoBG,CAAU,EAAG,CACjCL,EAAmBe,CAAO,GAAKA,EAC/BA,CACJ,EAAGf,EAAmBK,CAAU,CAAC,EAGzC,MAAO,CAAE,WAAAA,EAAY,YAAAG,EAAa,WAAAC,EAAY,WAAApM,EAAY,WAAAqM,CAAW,CACzE,CAAC,CAAE,EACe,iBAAAnB,EAAkB,SAAAC,CAAS,CACjD,CAGA,IAAMwB,GAAN,KAAe,CACX,YAAYC,EAAMC,EAAgBC,EAAS,CACvC,KAAK,KAAOF,EACZ,KAAK,eAAiBC,EACtB,KAAK,QAAUC,CACnB,CACA,IAAI,UAAW,CACX,OAAO,KAAK,eAAe,EAAE,WACjC,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,eAAe,EAAE,SACjC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,OAAO,KAAK,eAAe,EAAE,YAAY,YAAY,KAAK,CAClF,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,QAAQ,OAAO,KAAK,eAAe,EAAE,YAAY,YAAY,GAAG,CAChF,CACA,IAAI,cAAe,CACf,OAAO,KAAK,QAAQ,OAAO,KAAK,eAAe,EAAE,YAAY,aAAa,KAAK,CACnF,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,OAAO,KAAK,eAAe,EAAE,YAAY,aAAa,GAAG,CACjF,CACA,UAAU/I,EAAM,CACZ,OAAO,KAAK,eAAe,EAAE,QAAQA,CAAI,CAC7C,CACJ,EAEIgJ,GAAmB,CACnB,YAAa,GACb,UAAUC,EAAS,CACf,OAAI,MAAM,QAAQA,EAAQ,MAAM,EACrBA,EAAQ,OAEZ,IACX,EACA,MAAMC,EAAKC,EAAiB,CACxBA,EAAgB,CACZ,UAAWD,EAAI,YAAY,IAC/B,CAAC,CACL,CACJ,EACME,GAAyB1L,GAAa,CACxC,KAAM,qBACN,gBAAiB,CAACsL,EAAgB,CACtC,CAAC,EAEGK,GAAmB,CACnB,UAAUJ,EAAS,CACf,OAAI,OAAOA,EAAQ,QAAW,WACnBA,EAAQ,OAEZ,IACX,EACA,MAAMC,EAAKC,EAAiBG,EAAe,CACvC,GAAM,CAAE,QAAAP,CAAQ,EAAIG,EAAI,QAClBK,EAAOL,EAAI,YAAY,KAC7BM,GAAYD,EAAK,KAAK,KAAME,GAA0BP,EAAI,MAAOH,CAAO,CAAC,EAAIvD,GAAc2D,EAAgB,CAAE,UAAA3D,CAAU,CAAC,EAAG8D,CAAa,CAC5I,CACJ,EACMI,GAAwBhM,GAAa,CACvC,KAAM,oBACN,gBAAiB,CAAC2L,EAAgB,CACtC,CAAC,EAEKM,GAAkC,CACpC,OAAQ,OACR,YAAaC,EACb,WAAY,OACZ,SAAU,OACV,cAAe,MACnB,EAEIC,GAAiB,CACjB,UAAUZ,EAAS,CACf,OAAIA,EAAQ,MAAQA,EAAQ,SAAW,QAAU,CAACA,EAAQ,QAC/C,CACH,IAAKA,EAAQ,IACb,OAAQ,OACR,QAASA,EAAQ,QAAU,OAAO,YAAY,EAC9C,YAAaA,EAAQ,YACrB,WAAYA,EAAQ,WACpB,SAAUA,EAAQ,SAClB,cAAeA,EAAQ,aAC3B,EAEG,IACX,EACA,MAAMC,EAAKC,EAAiBG,EAAe,CACvC,GAAM,CAAE,KAAAQ,CAAK,EAAIZ,EAAI,YACfa,EAAgBC,GAAmBF,EAAMZ,EAAI,MAAOA,EAAI,OAAO,EACrEe,GAAYH,EAAK,OAAQA,EAAK,IAAKC,CAAa,EAAE,KAAK,CAAC,CAACvE,EAAW0E,CAAQ,IAAM,CAC9Ef,EAAgB,CAAE,UAAA3D,EAAW,SAAA0E,CAAS,CAAC,CAC3C,EAAGZ,CAAa,CACpB,CACJ,EACMa,GAA4BzM,GAAa,CAC3C,KAAM,oBACN,oBAAqBiM,GACrB,gBAAiB,CAACE,EAAc,CACpC,CAAC,EACD,SAASG,GAAmBF,EAAMM,EAAOpJ,EAAS,CAC9C,GAAI,CAAE,QAAA+H,EAAS,QAAAnI,CAAQ,EAAII,EACvBqJ,EACAC,EACAC,EACAC,EACAC,EAAS,CAAC,EACd,OAAAJ,EAAaP,EAAK,WACdO,GAAc,OACdA,EAAazJ,EAAQ,YAEzB0J,EAAWR,EAAK,SACZQ,GAAY,OACZA,EAAW1J,EAAQ,UAEvB2J,EAAgBT,EAAK,cACjBS,GAAiB,OACjBA,EAAgB3J,EAAQ,eAGxB,OAAOkJ,EAAK,aAAgB,WAE5BU,EAAsBV,EAAK,YAAY,EAIvCU,EAAsBV,EAAK,aAAe,CAAC,EAE/C,OAAO,OAAOW,EAAQD,CAAmB,EACzCC,EAAOJ,CAAU,EAAItB,EAAQ,UAAUqB,EAAM,KAAK,EAClDK,EAAOH,CAAQ,EAAIvB,EAAQ,UAAUqB,EAAM,GAAG,EAC1CrB,EAAQ,WAAa,UACrB0B,EAAOF,CAAa,EAAIxB,EAAQ,UAE7B0B,CACX,CAEA,IAAMC,GAA4B,CAC9B,WAAYd,EACZ,UAAW/G,GACX,QAASA,GACT,SAAUA,GACV,WAAY+G,EACZ,SAAUA,CACd,EAEIe,GAAY,CACZ,MAAM1B,EAASF,EAAS,CACpB,GAAIE,EAAQ,YAAcA,EAAQ,WAAaA,EAAQ,SAAWA,EAAQ,YAAcA,EAAQ,SAAU,CACtG,IAAI2B,EAAgB,CAChB,WAAY3B,EAAQ,YAAc,KAClC,UAAWA,EAAQ,WAAa,KAChC,QAASA,EAAQ,SAAW,KAC5B,WAAYA,EAAQ,WAAaF,EAAQ,aAAaE,EAAQ,UAAU,EAAI,KAC5E,SAAUA,EAAQ,SAAWF,EAAQ,aAAaE,EAAQ,QAAQ,EAAI,IAC1E,EACItH,EACJ,OAAIsH,EAAQ,WACRtH,EAAWsH,EAAQ,UAEnB,CAACtH,GAAYsH,EAAQ,WAAaA,EAAQ,UAC1CtH,EAAWkJ,GAAkB5B,EAAQ,QAASA,EAAQ,SAAS,GAE5D,CACH,YAAqB,CAACA,EAAQ,WAAa,CAACA,EAAQ,QACpD,SAAAtH,EACA,SAAUiJ,CACd,CACJ,CACA,OAAO,IACX,EACA,OAAOE,EAAUC,EAAchC,EAAS,CACpC,IAAIiC,EAAsBC,GAAgBF,EAAc,CAAE,MAAOD,EAAS,WAAY,IAAKA,EAAS,QAAS,CAAC,EAC9G,OAAIE,EACOE,GAAaJ,EAAS,WAAYA,EAAS,UAAWE,EAAqBjC,CAAO,EAEtF,CAAC,CACZ,CACJ,EACMoC,GAA8BzN,GAAa,CAC7C,KAAM,yBACN,eAAgB,CAACiN,EAAS,EAC1B,cAAeD,EACnB,CAAC,EACD,SAASQ,GAAaE,EAAYC,EAAWN,EAAchC,EAAS,CAChE,IAAIuC,EAAUF,EAAanH,GAAYmH,CAAU,EAAI,KACjDG,EAAYC,GAAWT,EAAa,KAAK,EACzCU,EAAYV,EAAa,IACzBW,EAAiB,CAAC,EACtB,KAAOH,EAAYE,GAAW,CAC1B,IAAIE,GAEA,CAACL,GAAWA,EAAQC,EAAU,UAAU,CAAC,KACrCF,EACAM,EAAgB5C,EAAQ,IAAIwC,EAAWF,CAAS,EAGhDM,EAAgBJ,EAEpBG,EAAe,KAAKC,CAAa,GAErCJ,EAAYK,GAAQL,EAAW,CAAC,CACpC,CACA,OAAOG,CACX,CAEA,IAAMG,GAAsBnO,GAAa,CACrC,KAAM,iBACN,qBAAsB,CAClB,OAAOoO,EAAQ9K,EAAS,CACpB+K,GAAmB,CAACD,CAAM,EAAG9K,CAAO,CACxC,EACA,aAAc+K,EAClB,CACJ,CAAC,EAID,SAASA,GAAmB1L,EAAQW,EAAS,CACzC,IAAIgL,EAAiBC,GAAkBjL,EAAQ,eAAe,EAAE,YAAY,EAC5E,GAAIgL,EAAe,SAAW,GAC1B3L,EAAO,SAAW,GAClB,MAAM,QAAQ2L,EAAe,CAAC,EAAE,IAAI,GACpC,MAAM,QAAQ3L,EAAO,CAAC,CAAC,EAAG,CAC1BW,EAAQ,SAAS,CACb,KAAM,mBACN,SAAUgL,EAAe,CAAC,EAAE,SAC5B,UAAW3L,EAAO,CAAC,CACvB,CAAC,EACD,MACJ,CACA,IAAI6L,EAAY,CAAC,EACjB,QAASvO,KAAS0C,EAAQ,CACtB,IAAI8L,EAAa,GACjB,QAAShP,EAAI,EAAGA,EAAI6O,EAAe,OAAQ7O,GAAK,EAC5C,GAAI6O,EAAe7O,CAAC,EAAE,OAASQ,EAAO,CAClCqO,EAAe,OAAO7O,EAAG,CAAC,EAC1BgP,EAAa,GACb,KACJ,CAECA,GACDD,EAAU,KAAKvO,CAAK,CAE5B,CACA,QAASyO,KAAiBJ,EACtBhL,EAAQ,SAAS,CACb,KAAM,sBACN,SAAUoL,EAAc,QAC5B,CAAC,EAEL,QAASC,KAAYH,EACjBlL,EAAQ,YAAY,eAAeqL,CAAQ,CAEnD,CAEA,SAASC,GAAkB9I,EAAaxC,EAAS,CAC7CA,EAAQ,QAAQ,QAAQ,WAAY,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGyI,GAA0BjG,EAAY,YAAaxC,EAAQ,OAAO,CAAC,EAAG,CAAE,KAAMA,EAAQ,OAAQ,CAAC,CAAC,CACxK,CAEA,SAASuL,GAAiBC,EAAYxL,EAAS,CAC3C,GAAI,CAAE,QAAAyL,CAAQ,EAAIzL,EACdyL,EAAQ,YAAY,WAAW,GAC/BA,EAAQ,QAAQ,YAAaC,GAAeF,EAAYxL,CAAO,CAAC,CAExE,CAMA,IAAM2L,GAAgB,CAClBvD,GACAM,GACAS,GACAgB,GACAU,GACAnO,GAAa,CACT,KAAM,OACN,eAAgB,CACXkP,GAAUvI,GAA2BuI,EAAM,YAAY,CAC5D,EACA,gBAAiB,CACb,YAAaN,GACb,WAAYC,EAChB,CACJ,CAAC,CACL,EAEMM,GAAN,KAAiB,CACb,YAAYC,EAAeC,EAAe,CACtC,KAAK,cAAgBD,EACrB,KAAK,cAAgBC,EACrB,KAAK,MAAQ,CAAC,EACd,KAAK,cAAgB,IAAIC,GAAc,KAAK,MAAM,KAAK,IAAI,CAAC,CAChE,CACA,QAAQC,EAAMC,EAAO,CACjB,KAAK,MAAM,KAAKD,CAAI,EACpB,KAAK,cAAc,QAAQC,CAAK,CACpC,CACA,MAAMC,EAAO,CACT,KAAK,cAAc,MAAMA,CAAK,CAClC,CACA,OAAOA,EAAOC,EAAO,CACjB,KAAK,cAAc,OAAOD,EAAOC,CAAK,CAC1C,CACA,OAAQ,CACJ,GAAI,CAAE,MAAAC,CAAM,EAAI,KAChB,KAAOA,EAAM,QAAQ,CACjB,IAAIC,EAAiB,CAAC,EAClBL,EACJ,KAAQA,EAAOI,EAAM,MAAM,GACvB,KAAK,QAAQJ,CAAI,EACjBK,EAAe,KAAKL,CAAI,EAE5B,KAAK,QAAQK,CAAc,CAC/B,CACJ,CACA,QAAQL,EAAM,CACN,KAAK,eACL,KAAK,cAAcA,CAAI,CAE/B,CACA,QAAQK,EAAgB,CAChB,KAAK,eACL,KAAK,cAAcA,CAAc,CAEzC,CACJ,EAGA,SAASC,GAAW/J,EAAagK,EAAazE,EAAS,CACnD,IAAIqB,EAEJ,MAAI,iBAAiB,KAAK5G,EAAY,gBAAgB,EAClD4G,EAAQ5G,EAAY,aAGpB4G,EAAQ5G,EAAY,YAEjBuF,EAAQ,YAAYqB,EAAM,MAAOA,EAAM,IAAKqD,GAAgBD,EAAY,aAAeE,GAAiBlK,CAAW,CAAC,EAAG,CAC1H,eAAgBA,EAAY,cAC5B,iBAAkBgK,EAAY,mBAClC,CAAC,CACL,CAGA,SAASE,GAAiBlK,EAAa,CACnC,GAAI,CAAE,iBAAAmK,CAAiB,EAAInK,EAC3B,GAAImK,IAAqB,OACrB,MAAO,CAAE,KAAM,SAAU,EAE7B,GAAIA,IAAqB,QACrB,MAAO,CAAE,KAAM,UAAW,MAAO,MAAO,EAE5C,IAAIC,EAAOC,GAAcrK,EAAY,aAAa,MAAOA,EAAY,aAAa,GAAG,EACrF,OAAIoK,IAAS,MAAQA,EAAO,EAEjB,CAAE,KAAM,UAAW,MAAO,QAAS,IAAK,SAAU,EAGtD,CAAE,KAAM,UAAW,MAAO,OAAQ,IAAK,SAAU,CAC5D,CAIA,IAAME,GAAN,KAA0B,CACtB,YAAYC,EAAO,CACf,KAAK,uBAAyBC,GAAQ,KAAK,uBAAuB,EAClE,KAAK,mBAAqBA,GAAQ5R,EAAkB,EACpD,KAAK,YAAc4R,GAAQtR,EAAW,EACtC,KAAK,iBAAmB8B,GAAsB,EAC9C,KAAK,aAAewP,GAAQC,EAAc,EAC1C,KAAK,WAAaD,GAAQE,EAAU,EACpC,KAAK,cAAgBF,GAAQtH,EAAa,EAC1C,KAAK,eAAiBsH,GAAQ7M,EAAc,EAC5C,KAAK,0BAA4BgN,GAAcC,EAAyB,EACxE,KAAK,aAAeJ,GAAQK,EAAY,EACxC,KAAK,iBAAmBF,GAAcG,EAAgB,EACtD,KAAK,qBAAuBN,GAAQO,GAAsBC,EAAY,EACtE,KAAK,kBAAoBR,GAAQS,EAAiB,EAClD,KAAK,0BAA4BN,GAAcO,EAAyB,EACxE,KAAK,WAAaV,GAAQT,EAAU,EACpC,KAAK,QAAU,IAAIoB,GACnB,KAAK,aAAe,IAAI9B,GAAW,KAAK,cAAc,KAAK,IAAI,EAAG,KAAK,WAAW,KAAK,IAAI,CAAC,EAC5F,KAAK,4BAA8B,CAAC,EACpC,KAAK,8BAAgC,CAAC,EACtC,KAAK,wBAA0B,CAAC,EAChC,KAAK,0BAA4B,CAAC,EAClC,KAAK,+BAAiC,CAAC,EACvC,KAAK,mBAAqB,CAAC,EAC3B,KAAK,mBAAqB,CAAC,EAC3B,KAAK,eAAiB,IAAM,KAAK,KACjC,KAAK,SAAY9J,GAAW,CACxB,KAAK,aAAa,QAAQA,CAAM,CACpC,EACA,KAAK,MAAQgL,EACb,KAAK,aAAa,MAAM,EACxB,IAAIzM,EAAyB,CAAC,EAC1BsN,EAAc,KAAK,mBAAmBb,EAAM,gBAAiBzM,EAAwByM,EAAM,WAAW,EACtGc,EAAkBD,EAAY,gBAAgB,aAAeA,EAAY,YAAY,YACrFE,EAAkB,KAAK,uBAAuBD,EAAiBD,EAAab,EAAM,gBAAiBzM,CAAsB,EAG7HyM,EAAM,YAAY,mBAAqB,KACvC,KAAK,QAAQ,eAAeA,EAAM,WAAW,EAC7C,KAAK,QAAQ,WAAWe,EAAgB,OAAO,EAC/C,IAAI3L,EAAc4L,GAAeH,EAAY,gBAAiBA,EAAY,OAAO,EAC7EpL,EAAcsL,EAAgB,qBAAqB,MAAM3L,CAAW,EACnE6L,GAAoBxL,EAAY,YAAaL,CAAW,IACzDA,EAAcK,EAAY,aAAa,OAE3C,IAAIyL,EAAkB,CAClB,QAASL,EAAY,QACrB,QAASA,EAAY,gBACrB,YAAaA,EAAY,YACzB,YAAab,EAAM,YACnB,SAAU,KAAK,SACf,QAAS,KAAK,QACd,eAAgB,KAAK,cACzB,EAEA,QAASmB,KAAYN,EAAY,YAAY,YACzCM,EAASD,CAAe,EAG5B,IAAIpL,EAAeP,GAAiBsL,EAAY,gBAAiBpL,EAAayL,CAAe,EACzFE,EAAe,CACf,uBAAA7N,EACA,gBAAAuN,EACA,YAAA1L,EACA,YAAAK,EACA,cAAe,KAAK,0BAA0ByL,CAAe,EAC7D,aAAApL,EACA,aAAc,CAAC,EACf,WAAYuL,GAAsB,EAClC,qBAAsBA,GAAsB,EAC5C,cAAe,KACf,eAAgB,GAChB,UAAW,KACX,YAAa,KACb,gBAAiB,KAAK,iBAAiBH,CAAe,EAAE,eAC5D,EACII,EAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGJ,CAAe,EAAGE,CAAY,EACpF,QAASG,KAAWV,EAAY,YAAY,SACxC,OAAO,OAAOO,EAAcG,EAAQ,KAAM,KAAMD,CAAe,CAAC,EAEhEE,GAAiBJ,EAAcF,CAAe,GAC9C,KAAK,QAAQ,QAAQ,UAAW,EAAI,EAExC,KAAK,MAAQE,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,OAAO,CAC7B,CACA,aAAa9N,EAAiBmO,EAAoB,CAC9C,GAAI,CAAE,MAAAzB,CAAM,EAAI,KACZyB,IAAuB,OACvBzB,EAAM,gBAAkB1M,GAGxB0M,EAAM,gBAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAIA,EAAM,iBAAmB,CAAC,CAAE,EAAG1M,CAAe,EACvG,KAAK,mBAAmB,KAAK,GAAGmO,CAAkB,IAElDA,IAAuB,QAAaA,EAAmB,SACvD,KAAK,aAAa,QAAQ,CACtB,KAAM,SACV,CAAC,CAET,CACA,cAAczM,EAAQ,CAClB,GAAI,CAAE,MAAAgL,EAAO,MAAAnB,EAAO,QAAAH,CAAQ,EAAI,KAC5BnL,EAAyB0B,GAA6B4J,EAAM,uBAAwB7J,CAAM,EAC1F6L,EAAc,KAAK,mBAAmBb,EAAM,gBAAiBzM,EAAwByM,EAAM,WAAW,EACtGc,EAAkB/L,GAAe8J,EAAM,gBAAiB7J,CAAM,EAC9D+L,EAAkB,KAAK,uBAAuBD,EAAiBD,EAAab,EAAM,gBAAiBzM,CAAsB,EAG7HyM,EAAM,YAAY,mBAAqB,KACvCtB,EAAQ,eAAesB,EAAM,WAAW,EACxCtB,EAAQ,WAAWqC,EAAgB,OAAO,EAC1C,IAAIG,EAAkB,CAClB,QAASL,EAAY,QACrB,QAASA,EAAY,gBACrB,YAAaA,EAAY,YACzB,YAAab,EAAM,YACnB,SAAU,KAAK,SACf,QAAAtB,EACA,eAAgB,KAAK,cACzB,EACI,CAAE,YAAAtJ,EAAa,YAAAK,CAAY,EAAIoJ,EAC/B,KAAK,MAAQ,KAAK,KAAK,uBAAyBkC,EAAgB,uBAChEtL,EAAcsL,EAAgB,qBAAqB,MAAM3L,CAAW,GAExEA,EAAcsM,GAAkBtM,EAAaJ,CAAM,EACnDS,EAAcP,GAAkBO,EAAaT,EAAQI,EAAa2L,EAAgB,oBAAoB,GAClG/L,EAAO,OAAS,QAChBA,EAAO,OAAS,QAChB,CAACiM,GAAoBxL,EAAY,aAAcL,CAAW,KAC1DA,EAAcK,EAAY,aAAa,OAE3C,IAAIK,EAAeD,GAAmBgJ,EAAM,aAAc7J,EAAQS,EAAayL,CAAe,EAC1FzC,EAAakD,GAAiB9C,EAAM,WAAY7J,EAAQc,EAAcL,EAAayL,CAAe,EAElGU,EADkBtL,GAA2BR,CAAY,GACd,CAACiL,EAAgB,QAAQ,2BACnElC,EAAM,sBAAwBJ,EAE/B,CAAE,kBAAAoD,EAAmB,gBAAAC,CAAgB,EAAI,KAAK,iBAAiBZ,CAAe,EAC9Ea,EAAkB,KAAK,qBAAqBjM,CAAY,EACxDkM,EAAe,KAAK,kBAAkBJ,EAAqB,KAAMC,EAAmBE,CAAe,EACnGE,EAAW,CACX,uBAAA1O,EACA,gBAAAuN,EACA,YAAA1L,EACA,YAAAK,EACA,aAAAK,EACA,WAAA2I,EACA,qBAAAmD,EACA,gBAAAE,EACA,aAAAE,EACA,cAAe,KAAK,0BAA0Bd,CAAe,EAC7D,cAAejJ,GAAoB4G,EAAM,cAAe7J,CAAM,EAC9D,eAAgBmD,GAAoB0G,EAAM,eAAgB7J,CAAM,EAChE,UAAWqD,GAAgBwG,EAAM,UAAW7J,CAAM,EAClD,YAAawD,GAAkBqG,EAAM,YAAa7J,CAAM,CAC5D,EACIsM,EAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGJ,CAAe,EAAGe,CAAQ,EAChF,QAASV,KAAWV,EAAY,YAAY,SACxC,OAAO,OAAOoB,EAAUV,EAAQ1C,EAAO7J,EAAQsM,CAAe,CAAC,EAEnE,IAAIY,EAAaV,GAAiB3C,EAAOqC,CAAe,EACpDiB,EAAYX,GAAiBS,EAAUf,CAAe,EAEtD,CAACgB,GAAcC,EACfzD,EAAQ,QAAQ,UAAW,EAAI,EAE1BwD,GAAc,CAACC,GACpBzD,EAAQ,QAAQ,UAAW,EAAK,EAEpC,KAAK,MAAQuD,EACTjC,EAAM,UACNA,EAAM,SAAShL,CAAM,CAE7B,CACA,YAAa,CACT,GAAI,CAAE,MAAAgL,EAAO,MAAAnB,CAAM,EAAI,KACnBuD,EAAU,KAAK,KACfvB,EAAc,KAAK,mBAAmBb,EAAM,gBAAiBnB,EAAM,uBAAwBmB,EAAM,WAAW,EAC5Ge,EAAkB,KAAK,uBAAuBlC,EAAM,gBAAiBgC,EAAab,EAAM,gBAAiBnB,EAAM,sBAAsB,EACrIwD,EAAO,KAAK,KAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAE,UAAW,KAAK,WAAWxD,EAAM,YAAakC,EAAgB,QAASF,EAAY,OAAO,EAAG,YAAab,EAAM,YAAa,SAAU,KAAK,SAAU,QAAS,KAAK,QAAS,eAAgB,KAAK,cAAe,EAAGa,CAAW,EAAGE,CAAe,EAAGlC,CAAK,EACxTyD,EAAiBzB,EAAY,YAAY,qBACzC0B,EAAqBH,GAAWA,EAAQ,gBACxCI,EAAqB3B,EAAY,gBACrC,GAAI0B,GAAsBA,IAAuBC,EAAoB,CAC7DD,EAAmB,WAAaC,EAAmB,WAEnD3D,EAAM,aAAewD,EAAK,aAAehM,GAA8BgM,EAAK,aAAcxD,EAAM,YAAawD,CAAI,EACjHxD,EAAM,WAAawD,EAAK,WAAaI,GAAsBJ,EAAK,WAAYD,EAAQ,QAASC,EAAK,OAAO,EACzGxD,EAAM,qBAAuBwD,EAAK,qBAAuBI,GAAsBJ,EAAK,qBAAsBD,EAAQ,QAASC,EAAK,OAAO,GAE3I,QAASK,KAAcJ,GACf,KAAK,mBAAmB,QAAQI,CAAU,IAAM,IAChDH,EAAmBG,CAAU,IAAMF,EAAmBE,CAAU,IAChEJ,EAAeI,CAAU,EAAEF,EAAmBE,CAAU,EAAGL,CAAI,CAG3E,CACA,KAAK,mBAAqB,CAAC,EACvBrC,EAAM,QACNA,EAAM,OAAOqC,CAAI,CAEzB,CACA,mBAAmB/O,EAAiBC,EAAwB+D,EAAa,CAErE,GAAI,CAAC,KAAK,mBAAmB,QACzBhE,IAAoB,KAAK,uBACzBC,IAA2B,KAAK,6BAChC,OAAO,KAAK,0BAEhB,GAAI,CAAE,eAAAoP,EAAgB,YAAAC,EAAa,eAAApP,EAAgB,oBAAAqP,EAAqB,MAAAC,CAAO,EAAI,KAAK,0BAA0BxP,EAAiBC,CAAsB,EACzJwP,GAAmBD,CAAK,EACxB,IAAI9H,EAAU,KAAK,aAAa2H,EAAe,SAAUA,EAAe,OAAQA,EAAe,sBAAuBA,EAAe,SAAUA,EAAe,SAAUC,EAAaC,EAAqBF,EAAe,qBAAqB,EAC1O7J,EAAY,KAAK,eAAe8J,EAAY,MAAO,KAAK,sBAAuB,KAAK,6BAA8BpP,CAAc,EAChIqF,EAAQ,KAAK,WAAW8J,EAAgBC,CAAW,EACnDI,EAAgB,KAAK,cAAcL,EAAgB,KAAK,sBAAuB9J,EAAOC,EAAWxB,CAAW,EAChH,OAAO,KAAK,0BAA4B,CACpC,gBAAiBqL,EACjB,YAAAC,EACA,QAAA5H,EACA,UAAAlC,EACA,MAAAD,EACA,cAAAmK,EACA,eAAAxP,EACA,oBAAqBqP,EAAoB,GAC7C,CACJ,CAEA,0BAA0BvP,EAAiBC,EAAwB,CAC/D,GAAI,CAAE,QAAA0P,EAAS,OAAAC,CAAO,EAAIC,GAAgB,CACtCzO,GACApB,EACAC,CACJ,CAAC,EACGsP,EAAsB,KAAK,mBAAmBI,CAAO,EACrDG,EAAsBP,EAAoB,IAC1CrP,EAAiB,KAAK,YAAY0P,GAAUL,EAAoB,YAAaO,CAAmB,EAAE,QAClGR,EAAc,KAAK,iBAAiBtP,EAAgB,SAAW,CAAC,EAAGsL,EAAa,EAChFhH,EAAW,KAAK,+BAAiC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGyL,EAAoB,EAAGC,EAA0B,EAAGC,EAAwB,EAAGX,EAAY,gBAAgB,EAAGA,EAAY,cAAc,EACnQE,EAAQ,CAAC,EACT5T,EAAMiU,GAAgB,CACtBzO,GACAlB,EACAF,EACAC,CACJ,CAAC,EACG2H,EAAU,CAAC,EACXsI,EAAa,KAAK,4BAClBC,EAAiB,KAAK,8BACtBC,EAAa,GACjB,QAAShB,KAAcxT,EACf,KAAK,mBAAmB,QAAQwT,CAAU,IAAM,KAAOxT,EAAIwT,CAAU,IAAMc,EAAWd,CAAU,GAAMiB,GAA2BjB,CAAU,GAC1IA,KAAcc,GACfG,GAA2BjB,CAAU,EAAEc,EAAWd,CAAU,EAAGxT,EAAIwT,CAAU,CAAC,GAC9ExH,EAAQwH,CAAU,EAAIe,EAAef,CAAU,EAE1C9K,EAAS8K,CAAU,GACxBxH,EAAQwH,CAAU,EAAI9K,EAAS8K,CAAU,EAAExT,EAAIwT,CAAU,CAAC,EAC1DgB,EAAa,IAGbZ,EAAMJ,CAAU,EAAIc,EAAWd,CAAU,EAGjD,OAAIgB,IACA,KAAK,4BAA8BxU,EACnC,KAAK,8BAAgCgM,EACrC,KAAK,sBAAwB5H,EAC7B,KAAK,6BAA+BC,GAExC,KAAK,mBAAmB,KAAK,GAAG,KAAK,kBAAkB,EACvD,KAAK,mBAAqB,CAAC,EACpB,CACH,WAAY,KAAK,4BACjB,eAAgB,KAAK,8BACrB,YAAAqP,EACA,oBAAAC,EACA,eAAArP,EACA,MAAAsP,CACJ,CACJ,CACA,wBAAwBpR,EAAUmP,EAAavN,EAAiBC,EAAwB,CACpF,IAAI6G,EAAWyG,EAAY,UAAUnP,CAAQ,EAC7C,GAAI,CAAC0I,EACD,MAAM,IAAI,MAAM,aAAa1I,CAAQ,2EAA2E,EAEpH,GAAI,CAAE,eAAAiR,EAAgB,MAAAG,CAAM,EAAI,KAAK,sBAAsB1I,EAAUyG,EAAY,YAAaA,EAAY,eAAgBvN,EAAiBC,CAAsB,EACjKwP,GAAmBD,CAAK,EACxB,IAAIzN,EAAuB,KAAK,0BAA0B,CACtD,0BAA2B+E,EAAS,eAAe,0BACnD,SAAUA,EAAS,SACnB,aAAcA,EAAS,aACvB,eAAgBA,EAAS,eAAe,eACxC,QAASyG,EAAY,QACrB,YAAa,KAAK,MAAM,YACxB,YAAa8B,EAAe,YAC5B,YAAaA,EAAe,YAC5B,oBAAqBA,EAAe,oBACpC,SAAUA,EAAe,SACzB,cAAeA,EAAe,cAC9B,cAAeA,EAAe,cAC9B,WAAYA,EAAe,WAC3B,SAAUA,EAAe,SACzB,SAAUA,EAAe,IACzB,gBAAiBA,EAAe,WAChC,kBAAmBA,EAAe,aAClC,eAAgBA,EAAe,cACnC,CAAC,EACGiB,EAAU,KAAK,aAAalS,EAAU,KAAK,eAAgBmP,EAAY,OAAO,EAClF,MAAO,CAAE,SAAAzG,EAAU,QAASuI,EAAgB,qBAAAtN,EAAsB,QAAAuO,CAAQ,CAC9E,CACA,sBAAsBxJ,EAAUwI,EAAapP,EAAgBF,EAAiBC,EAAwB,CAClG,IAAIrE,EAAMiU,GAAgB,CACtBzO,GACA0F,EAAS,eACT5G,EACAF,EACA8G,EAAS,gBACT7G,CACJ,CAAC,EACGqE,EAAW,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGyL,EAAoB,EAAGC,EAA0B,EAAGC,EAAwB,EAAGM,EAAoB,EAAGjB,EAAY,gBAAgB,EAAGA,EAAY,cAAc,EAClQ1H,EAAU,CAAC,EACXsI,EAAa,KAAK,wBAClBC,EAAiB,KAAK,0BACtBC,EAAa,GACbZ,EAAQ,CAAC,EACb,QAASJ,KAAcxT,EACfA,EAAIwT,CAAU,IAAMc,EAAWd,CAAU,GACxCiB,GAA2BjB,CAAU,GAClCiB,GAA2BjB,CAAU,EAAExT,EAAIwT,CAAU,EAAGc,EAAWd,CAAU,CAAC,EAClFxH,EAAQwH,CAAU,EAAIe,EAAef,CAAU,GAG3CxT,EAAIwT,CAAU,IAAM,KAAK,4BAA4BA,CAAU,GAC9DiB,GAA2BjB,CAAU,GAClCiB,GAA2BjB,CAAU,EAAExT,EAAIwT,CAAU,EAAG,KAAK,4BAA4BA,CAAU,CAAC,EACpGA,KAAc,KAAK,gCACnBxH,EAAQwH,CAAU,EAAI,KAAK,8BAA8BA,CAAU,GAGlE9K,EAAS8K,CAAU,EACxBxH,EAAQwH,CAAU,EAAI9K,EAAS8K,CAAU,EAAExT,EAAIwT,CAAU,CAAC,EAG1DI,EAAMJ,CAAU,EAAIxT,EAAIwT,CAAU,EAEtCgB,EAAa,IAGrB,OAAIA,IACA,KAAK,wBAA0BxU,EAC/B,KAAK,0BAA4BgM,GAE9B,CACH,WAAY,KAAK,wBACjB,eAAgB,KAAK,0BACrB,MAAA4H,CACJ,CACJ,CACJ,EACA,SAAS5C,GAAe4D,EAAUC,EAAgBC,EAAuBC,EAAUC,EAAUtB,EAAaC,EAAqBsB,EAAkB,CAC7I,IAAIjB,EAASvU,GAAYoV,GAAkBlB,EAAoB,YAAaA,EAAoB,GAAG,EACnG,OAAO,IAAIuB,GAAQ,CACf,eAAgB,UAChB,SAAAN,EACA,kBAAmBlB,EAAY,mBAC/B,OAAAM,EACA,sBAAAc,EACA,SAAAC,EACA,SAAAC,EACA,aAActB,EAAY,aAC1B,iBAAAuB,CACJ,CAAC,CACL,CACA,SAAShE,GAAWtN,EAAS+P,EAAa,CACtC,IAAIyB,EAAazB,EAAY,aAAa/P,EAAQ,WAAW,GAAKzB,GAClE,OAAO,IAAIiT,EAAWxR,CAAO,CACjC,CACA,SAASwN,GAA0BL,EAAO,CACtC,IAAIsE,EAA4BtE,EAAM,2BAA6BuE,GACnE,OAAO,IAAID,EAA0BtE,CAAK,CAC9C,CACA,SAASM,GAAaxF,EAAMC,EAAgBC,EAAS,CACjD,OAAO,IAAIH,GAASC,EAAMC,EAAgBC,CAAO,CACrD,CACA,SAASwF,GAAqB1K,EAAc,CACxC,OAAOvD,GAAQuD,EAAee,GAAgBA,EAAY,EAAE,CAChE,CACA,SAAS6J,GAAkB8D,EAAW3C,EAAmBE,EAAiB,CACtE,IAAIC,EAAe,CAAE,GAAIH,CAAkB,EAC3C,QAAS4C,KAASD,EAAW,CACzB,IAAInU,EAAMmU,EAAUC,CAAK,EACrBpU,EAAI,UAAY0R,EAAgB1R,EAAI,QAAQ,IAC5C2R,EAAayC,CAAK,EAAI1C,EAAgB1R,EAAI,QAAQ,EAE1D,CACA,OAAO2R,CACX,CACA,SAASzB,GAAiBW,EAAiB,CACvC,GAAI,CAAE,QAAArO,CAAQ,EAAIqO,EAClB,MAAO,CACH,kBAAmBwD,GAAc,CAC7B,QAAS7R,EAAQ,aACjB,SAAUA,EAAQ,SAClB,cAAeA,EAAQ,mBACvB,iBAAkBA,EAAQ,sBAC1B,WAAYA,EAAQ,gBACpB,QAAS,OAAOA,EAAQ,cAAiB,UAAYA,EAAQ,aAAe,OAC5E,MAAOA,EAAQ,WACf,gBAAiBA,EAAQ,qBACzB,YAAaA,EAAQ,iBACrB,UAAWA,EAAQ,eACnB,MAAOA,EAAQ,UAEnB,EAAGqO,CAAe,EAClB,gBAAiBwD,GAAc,CAC3B,WAAY7R,EAAQ,iBACpB,QAAS,OAAOA,EAAQ,eAAkB,UAAYA,EAAQ,cAAgB,OAC9E,MAAOA,EAAQ,WACnB,EAAGqO,CAAe,CACtB,CACJ,CACA,SAASM,GAAiB3C,EAAO5L,EAAS,CACtC,QAAS0R,KAAiB1R,EAAQ,YAAY,eAC1C,GAAI0R,EAAc9F,CAAK,EACnB,MAAO,GAGf,MAAO,EACX,CACA,SAAS8B,GAA0BO,EAAiB,CAChD,OAAO0D,GAAmB1D,EAAgB,QAAQ,cAAeA,CAAe,CACpF,CACA,SAAS6B,GAAmBlQ,EAASgS,EAAU,CAC3C,QAASnC,KAAc7P,EACnB,QAAQ,KAAK,mBAAmB6P,CAAU,KACrCmC,EAAW,cAAcA,CAAQ,IAAM,GAAG,CAEvD,CAEA,IAAMC,GAAN,cAA6BlS,EAAc,CACvC,QAAS,CACL,IAAImS,EAAW,KAAK,MAAM,aAAa,IAAKC,GAAgB,KAAK,kBAAkBA,CAAW,CAAC,EAC/F,OAAOjS,EAAc,MAAO,CAAE,UAAW,kBAAmB,EAAG,GAAGgS,CAAQ,CAC9E,CACA,kBAAkBC,EAAa,CAC3B,GAAI,CAAE,MAAAhF,CAAM,EAAI,KACZ,CAAE,MAAAnH,CAAM,EAAI,KAAK,QACjBkM,EAAW,CAAC,EACZE,EAAgB,GACpB,QAASC,KAAUF,EAAa,CAC5B,GAAI,CAAE,WAAA9K,EAAY,YAAAG,EAAa,WAAAnM,EAAY,WAAAoM,EAAY,WAAAC,CAAW,EAAI2K,EACtE,GAAIhL,IAAe,QACf+K,EAAgB,GAChBF,EAAS,KAAKhS,EAAc,KAAM,CAAE,UAAW,mBAAoB,GAAIiN,EAAM,OAAQ,EAAGA,EAAM,KAAK,CAAC,MAEnG,CACD,IAAImF,EAAYjL,IAAe8F,EAAM,aACjCoF,EAAc,CAACpF,EAAM,gBAAkB9F,IAAe,SACrD,CAAC8F,EAAM,eAAiB9F,IAAe,QACvC,CAAC8F,EAAM,eAAiB9F,IAAe,OACxCmL,EAAgB,CAAC,MAAMnL,CAAU,UAAWrB,EAAM,SAAS,QAAQ,CAAC,EACpEsM,GACAE,EAAc,KAAKxM,EAAM,SAAS,cAAc,CAAC,EAErDkM,EAAS,KAAKhS,EAAc,SAAU,CAAE,KAAM,SAAU,MAAO,OAAOwH,GAAe,WAAaA,EAAWyF,EAAM,OAAO,EAAIzF,EAAY,SAAU6K,EAAY,eAAgBD,EAAW,UAAWE,EAAc,KAAK,GAAG,EAAG,QAAShL,CAAY,EAAGnM,IAAeoM,EAAavH,EAAc,OAAQ,CAAE,UAAWuH,EAAY,KAAM,KAAM,CAAC,EAAI,GAAG,CAAC,CAC3V,CACJ,CACA,GAAIyK,EAAS,OAAS,EAAG,CACrB,IAAIO,EAAkBL,GAAiBpM,EAAM,SAAS,aAAa,GAAM,GACzE,OAAO9F,EAAc,MAAO,CAAE,UAAWuS,CAAe,EAAG,GAAGP,CAAQ,CAC1E,CACA,OAAOA,EAAS,CAAC,CACrB,CACJ,EAEMQ,GAAN,cAAsB3S,EAAc,CAChC,QAAS,CACL,GAAI,CAAE,MAAA4S,EAAO,eAAAC,CAAe,EAAI,KAAK,MACjCC,EAAW,GACXC,EACAC,EACAzM,EAAiBqM,EAAM,eACvBK,EAAgB1M,EAAe,OACnC,OAAIA,EAAe,MACfuM,EAAW,GACXC,EAAexM,EAAe,MAG9BwM,EAAexM,EAAe,MAE9BA,EAAe,OACfuM,EAAW,GACXE,EAAazM,EAAe,OAG5ByM,EAAazM,EAAe,IAOxBpG,EAAc,MAAO,CAAE,UALd,CACb0S,GAAkB,GAClB,aACAC,EAAW,iBAAmB,EAClC,EACqD,KAAK,GAAG,CAAE,EAC3D,KAAK,cAAc,QAASC,GAAgB,CAAC,CAAC,EAC9C,KAAK,cAAc,SAAUE,GAAiB,CAAC,CAAC,EAChD,KAAK,cAAc,MAAOD,GAAc,CAAC,CAAC,CAAC,CACnD,CACA,cAAcE,EAAKC,EAAc,CAC7B,GAAI,CAAE,MAAA/F,CAAM,EAAI,KAChB,OAAQjN,EAAc+R,GAAgB,CAAE,IAAKgB,EAAK,aAAcC,EAAc,MAAO/F,EAAM,MAAO,QAASA,EAAM,QAAS,aAAcA,EAAM,aAAc,eAAgBA,EAAM,eAAgB,cAAeA,EAAM,cAAe,cAAeA,EAAM,cAAe,QAASA,EAAM,OAAQ,CAAC,CACtS,CACJ,EAEMgG,GAAN,cAA0BpT,EAAc,CACpC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQ,CACT,eAAgB,IACpB,EACA,KAAK,SAAYqT,GAAO,CACpB,KAAK,GAAKA,EACVC,GAAO,KAAK,MAAM,MAAOD,CAAE,EAC3B,KAAK,qBAAqB,CAC9B,EACA,KAAK,aAAe,IAAM,CACtB,KAAK,qBAAqB,CAC9B,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAjG,EAAO,MAAAnB,CAAM,EAAI,KACnB,CAAE,YAAAsH,CAAY,EAAInG,EAClBoG,EAAa,CACb,kBACCD,GAAenG,EAAM,QAAUA,EAAM,OAChC,yBACA,yBACV,EACIqG,EAAS,GACTC,EAAgB,GACpB,OAAIH,EACItH,EAAM,iBAAmB,KACzBwH,EAASxH,EAAM,eAAiBsH,EAOhCG,EAAgB,GAAI,EAAIH,EAAe,GAAG,IAI9CE,EAASrG,EAAM,QAAU,GAErBjN,EAAc,MAAO,CAAE,kBAAmBiN,EAAM,YAAa,IAAK,KAAK,SAAU,UAAWoG,EAAW,KAAK,GAAG,EAAG,MAAO,CAAE,OAAAC,EAAQ,cAAAC,CAAc,CAAE,EAAGtG,EAAM,QAAQ,CAChL,CACA,mBAAoB,CAChB,KAAK,QAAQ,iBAAiB,KAAK,YAAY,CACnD,CACA,sBAAuB,CACnB,KAAK,QAAQ,oBAAoB,KAAK,YAAY,CACtD,CACA,sBAAuB,CACf,KAAK,IACL,KAAK,MAAM,aAEX,KAAK,SAAS,CAAE,eAAgB,KAAK,GAAG,WAAY,CAAC,CAE7D,CACJ,EAKMuG,GAAN,cAA4BC,EAAY,CACpC,YAAYC,EAAU,CAClB,MAAMA,CAAQ,EACd,KAAK,eAAiB,CAACjM,EAAIkM,IAAU,CACjC,GAAI,CAAE,UAAAhU,CAAU,EAAI,KAChB,CAAE,QAAAO,CAAQ,EAAIP,EACdiU,EAAMC,GAASF,CAAK,EACxB,GAAIC,GACAjU,EAAU,iBAAiB8H,EAAG,MAAM,EAAG,CAGvC,IAAIqM,EAAkBC,GAAetM,EAAG,OAAQ,sBAAsB,EAClEuM,EAAMF,EAAkBA,EAAgB,cAAc,SAAS,EAAE,KAAO,GAC5E5T,EAAQ,QAAQ,QAAQ,aAAc,CAClC,GAAIyT,EACJ,MAAO,IAAIM,GAAUtU,EAAU,QAASiU,EAAI,WAAW,IAAKA,EAAI,WAAW,QAAQ,EACnF,QAASnM,EACT,KAAMvH,EAAQ,OAClB,CAAC,EACG8T,GAAO,CAACvM,EAAG,mBACX,OAAO,SAAS,KAAOuM,EAE/B,CACJ,EACA,KAAK,QAAUE,GAAiBR,EAAS,GAAI,QAAS,YACtD,KAAK,cAAc,CACvB,CACJ,EAMMS,GAAN,cAA4BV,EAAY,CACpC,YAAYC,EAAU,CAClB,MAAMA,CAAQ,EAEd,KAAK,oBAAuBR,GAAO,CAC3BA,IAAO,KAAK,cACZ,KAAK,eAAe,KAAM,KAAK,YAAY,CAEnD,EACA,KAAK,eAAiB,CAACzL,EAAIkM,IAAU,CAC7BE,GAASF,CAAK,IACd,KAAK,aAAeA,EACpB,KAAK,aAAa,kBAAmBlM,EAAIkM,CAAK,EAEtD,EACA,KAAK,eAAiB,CAAClM,EAAIkM,IAAU,CAC7B,KAAK,eACL,KAAK,aAAe,KACpB,KAAK,aAAa,kBAAmBlM,EAAIkM,CAAK,EAEtD,EACA,KAAK,qBAAuBS,GAAwBV,EAAS,GAAI,YACjE,KAAK,eAAgB,KAAK,cAAc,CAC5C,CACA,SAAU,CACN,KAAK,qBAAqB,CAC9B,CACA,aAAaW,EAAc5M,EAAIkM,EAAO,CAClC,GAAI,CAAE,UAAAhU,CAAU,EAAI,KAChB,CAAE,QAAAO,CAAQ,EAAIP,EACdiU,EAAMC,GAASF,CAAK,GACpB,CAAClM,GAAM9H,EAAU,iBAAiB8H,EAAG,MAAM,IAC3CvH,EAAQ,QAAQ,QAAQmU,EAAc,CAClC,GAAIV,EACJ,MAAO,IAAIM,GAAU/T,EAAS0T,EAAI,WAAW,IAAKA,EAAI,WAAW,QAAQ,EACzE,QAASnM,EACT,KAAMvH,EAAQ,OAClB,CAAC,CAET,CACJ,EAEMoU,GAAN,cAA8BC,EAAc,CACxC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,iBAAmBrH,GAAQsH,EAAgB,EAChD,KAAK,0BAA4BtH,GAAQuH,EAAyB,EAClE,KAAK,kBAAoBvH,GAAQwH,EAAiB,EAClD,KAAK,UAAYC,GAAU,EAC3B,KAAK,UAAYA,GAAU,EAC3B,KAAK,kBAAoB,CAAC,EAE1B,KAAK,MAAQ,CACT,YAAaC,GAAe,CAChC,EAGA,KAAK,6BAA+B,CAACjV,EAAWkV,IAAkB,CAC9D,IAAInB,EAAWoB,GAAyBnV,EAAWkV,CAAa,EAM5DE,EALuB,CACvBvB,GACAW,EACJ,EAC8C,OAAO,KAAK,MAAM,YAAY,qBAAqB,EAC3D,IAAKa,GAAwB,IAAIA,EAAoBtB,CAAQ,CAAC,EACpG,KAAK,kBAAkB/T,EAAU,GAAG,EAAIoV,EACxCE,GAAyBtV,EAAU,GAAG,EAAI+T,CAC9C,EACA,KAAK,+BAAkC/T,GAAc,CACjD,IAAIuV,EAAY,KAAK,kBAAkBvV,EAAU,GAAG,EACpD,GAAIuV,EAAW,CACX,QAASC,KAAYD,EACjBC,EAAS,QAAQ,EAErB,OAAO,KAAK,kBAAkBxV,EAAU,GAAG,CAC/C,CACA,OAAOsV,GAAyBtV,EAAU,GAAG,CACjD,EAGA,KAAK,aAAe,IAAIuM,GAAc,IAAM,CACxC,KAAK,MAAM,QAAQ,QAAQ,UAAW,EAAI,EAC1C,KAAK,MAAM,QAAQ,QAAQ,eAAgB,CAAE,KAAM,KAAK,MAAM,OAAQ,CAAC,CAC3E,CAAC,EACD,KAAK,mBAAsBzE,GAAO,CAC9B,GAAI,CAAE,QAAA3H,CAAQ,EAAI,KAAK,MACnBA,EAAQ,oBACR2H,EAAG,SAAW,QAEd,KAAK,aAAa,QAAQ3H,EAAQ,iBAAiB,CAE3D,CACJ,CAIA,QAAS,CACL,GAAI,CAAE,MAAAmN,CAAM,EAAI,KACZ,CAAE,cAAAgD,EAAe,QAAAnQ,CAAQ,EAAImN,EAC7BmI,EAAe,KAAK,kBAAkBnI,EAAM,SAAUA,EAAM,YAAaA,EAAM,qBAAsBA,EAAM,YAAaoI,GAAOpI,EAAM,QAAQ,IAAKA,EAAM,OAAO,EACnKA,EAAM,SAAS,EACXqI,EAAY,GACZC,EAAa,GACbC,EACAvI,EAAM,cAAgBA,EAAM,SAC5BsI,EAAa,GAERzV,EAAQ,QAAU,KACvBwV,EAAY,GAEPxV,EAAQ,eAAiB,KAC9ByV,EAAazV,EAAQ,cAGrB0V,EAAkB,KAAK,IAAI1V,EAAQ,YAAa,EAAG,EAEvD,IAAI2V,EAAc,KAAK,iBAAiBxI,EAAM,SAAUA,EAAM,QAASA,EAAM,QAASA,EAAM,qBAAsBA,EAAM,QAASA,EAAM,MAAOA,EAAM,YAAaA,EAAM,SAAUA,EAAM,eAAgBA,EAAM,QAASA,EAAM,YAAa,KAAK,6BAA8B,KAAK,8BAA8B,EAC3SyI,EAAezF,EAAc,QAAUA,EAAc,OAAO,SAC1D,KAAK,MAAM,YACX,OACN,OAAQjQ,EAAcC,GAAgB,SAAU,CAAE,MAAOwV,CAAY,EACjExF,EAAc,QAAWjQ,EAAcwS,GAAS,OAAO,OAAO,CAAE,IAAK,KAAK,UAAW,eAAgB,oBAAqB,MAAOvC,EAAc,OAAQ,QAASyF,CAAY,EAAGN,CAAY,CAAC,EAC5LpV,EAAciT,GAAa,CAAE,OAAQqC,EAAW,OAAQC,EAAY,YAAaC,EAAiB,YAAaE,CAAY,EACvH,KAAK,WAAWzI,CAAK,EACrB,KAAK,mBAAmB,CAAC,EAC7BgD,EAAc,QAAWjQ,EAAcwS,GAAS,OAAO,OAAO,CAAE,IAAK,KAAK,UAAW,eAAgB,oBAAqB,MAAOvC,EAAc,OAAQ,QAAS,EAAG,EAAGmF,CAAY,CAAC,CAAE,CAC7L,CACA,mBAAoB,CAChB,GAAI,CAAE,MAAAnI,CAAM,EAAI,KAChB,KAAK,qBAAuBA,EAAM,YAAY,qBACzC,IAAK0I,GAA6B,IAAIA,EAAyB1I,CAAK,CAAC,EAC1E,OAAO,iBAAiB,SAAU,KAAK,kBAAkB,EACzD,GAAI,CAAE,gBAAA2I,CAAgB,EAAI3I,EAAM,YAChC,QAAS4I,KAAYD,EACjBA,EAAgBC,CAAQ,EAAE5I,EAAM4I,CAAQ,EAAG5I,CAAK,CAExD,CACA,mBAAmB6I,EAAW,CAC1B,GAAI,CAAE,MAAA7I,CAAM,EAAI,KACZ,CAAE,gBAAA2I,CAAgB,EAAI3I,EAAM,YAChC,QAAS4I,KAAYD,EACb3I,EAAM4I,CAAQ,IAAMC,EAAUD,CAAQ,GACtCD,EAAgBC,CAAQ,EAAE5I,EAAM4I,CAAQ,EAAG5I,CAAK,CAG5D,CACA,sBAAuB,CACnB,OAAO,oBAAoB,SAAU,KAAK,kBAAkB,EAC5D,KAAK,aAAa,MAAM,EACxB,QAAS8I,KAAe,KAAK,qBACzBA,EAAY,QAAQ,EAExB,KAAK,MAAM,QAAQ,QAAQ,UAAU,CACzC,CACA,oBAAqB,CACjB,GAAI,CAAE,MAAA9I,CAAM,EAAI,KACZ+E,EAAW/E,EAAM,YAAY,qBAAqB,IAAK+I,GAAuBA,EAAmB/I,CAAK,CAAC,EAC3G,OAAOjN,EAAciW,GAAU,CAAC,EAAG,GAAGjE,CAAQ,CAClD,CACA,WAAW/E,EAAO,CACd,GAAI,CAAE,YAAA4C,CAAY,EAAI5C,EAClB,CAAE,SAAA5F,CAAS,EAAI4F,EACflN,EAAY,CACZ,YAAakN,EAAM,YACnB,cAAeA,EAAM,cACrB,WAAYA,EAAM,qBAClB,aAAcA,EAAM,aACpB,cAAeA,EAAM,cACrB,eAAgBA,EAAM,eACtB,UAAWA,EAAM,UACjB,YAAaA,EAAM,YACnB,aAAcA,EAAM,aACpB,SAAUA,EAAM,QACpB,EACIiJ,EAAe,KAAK,0BAA0BrG,EAAY,qBAAqB,EACnF,QAASsG,KAAeD,EACpB,OAAO,OAAOnW,EAAWoW,EAAY,UAAUpW,EAAWkN,CAAK,CAAC,EAEpE,IAAImJ,EAAgB/O,EAAS,UAC7B,OAAQrH,EAAcoW,EAAe,OAAO,OAAO,CAAC,EAAGrW,CAAS,CAAC,CACrE,CACJ,EACA,SAAS2U,GAAkBrN,EAAU3E,EAAaJ,EAAsBD,EAAagU,EAAKC,EAAO,CAE7F,IAAIC,EAAYjU,EAAqB,MAAM+T,EAAK,OAAW,EAAK,EAC5DG,EAAWlU,EAAqB,UAAUI,EAAaL,EAAa,EAAK,EACzEoU,EAAWnU,EAAqB,UAAUI,EAAaL,EAAa,EAAK,EAC7E,MAAO,CACH,MAAAiU,EACA,aAAcjP,EAAS,KACvB,QAASA,EAAS,WAClB,eAAgBkP,EAAU,SAAW,CAACrI,GAAoBxL,EAAY,aAAc2T,CAAG,EACvF,cAAeG,EAAS,QACxB,cAAeC,EAAS,OAC5B,CACJ,CAGA,SAAShC,GAA0BiC,EAAY,CAC3C,OAAOA,EAAW,IAAKC,GAAa,IAAIA,CAAU,CACtD,CAEA,IAAMC,GAAN,cAAuBC,EAAa,CAChC,YAAY3D,EAAI3S,EAAkB,CAAC,EAAG,CAClC,MAAM,EACN,KAAK,YAAc,GACnB,KAAK,WAAa,GAClB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,sBAAwB,EAC7B,KAAK,aAAgB0B,GAAW,CAE5B,OAAQA,EAAO,KAAM,CACjB,IAAK,iBACL,IAAK,mBACD,KAAK,aAAa,SAAS,CACnC,CACJ,EACA,KAAK,WAAcqN,GAAS,CACxB,KAAK,YAAcA,EACnB,KAAK,aAAa,QAAQA,EAAK,gBAAgB,aAAa,CAChE,EACA,KAAK,oBAAsB,IAAM,CAC7B,GAAI,KAAK,YAAa,CAClB,KAAK,WAAa,GAClB,GAAI,CAAE,YAAAwH,CAAY,EAAI,KACtBC,GAAU,IAAM,CACZC,GAAOhX,EAAciX,GAAc,CAAE,QAASH,EAAY,gBAAiB,MAAOA,EAAY,MAAO,QAASA,EAAY,OAAQ,EAAG,CAACzD,EAAYC,EAAQ4D,EAAcC,KACpK,KAAK,cAAc9D,CAAU,EAC7B,KAAK,UAAUC,CAAM,EACbtT,EAAcoX,GAAS,SAAU,CAAE,MAAO,KAAK,qBAAsB,EACzEpX,EAAcsU,GAAiB,OAAO,OAAO,CAAE,aAAc4C,EAAc,SAAUC,CAAS,EAAGL,CAAW,CAAC,CAAC,EACrH,EAAG,KAAK,EAAE,CACf,CAAC,CACL,MACS,KAAK,aACV,KAAK,WAAa,GAClBE,GAAO,KAAM,KAAK,EAAE,EACpB,KAAK,cAAc,CAAC,CAAC,EACrB,KAAK,UAAU,EAAE,EAEzB,EACAK,GAAkBnE,CAAE,EACpB,KAAK,GAAKA,EACV,KAAK,aAAe,IAAIhH,GAAc,KAAK,mBAAmB,EAC9D,IAAIc,GAAoB,CACpB,gBAAAzM,EACA,YAAa,KACb,SAAU,KAAK,aACf,OAAQ,KAAK,UACjB,CAAC,CACL,CACA,QAAS,CACL,IAAI+W,EAAe,KAAK,YACnBA,EAID,KAAK,uBAAyB,EAH9B,KAAK,YAAc,GAKvB,KAAK,aAAa,QAAQ,EACtBA,GACA,KAAK,WAAW,CAExB,CACA,SAAU,CACF,KAAK,cACL,KAAK,YAAc,GACnB,KAAK,aAAa,QAAQ,EAElC,CACA,YAAa,CACTP,GAAU,IAAM,CACZ,MAAM,WAAW,CACrB,CAAC,CACL,CACA,eAAetO,EAAM,CACjB,KAAK,aAAa,MAAM,gBAAgB,EACxCA,EAAK,EACL,KAAK,aAAa,OAAO,gBAAgB,CAC7C,CACA,gBAAiB,CACb,KAAK,aAAa,MAAM,gBAAgB,CAC5C,CACA,iBAAkB,CACd,KAAK,aAAa,OAAO,iBAAkB,EAAI,CACnD,CACA,aAAalI,EAAiBmO,EAAoB,CAC9C,KAAK,mBAAmB,aAAanO,EAAiBmO,CAAkB,CAC5E,CACA,cAAc2E,EAAY,CACtB,GAAI,CAACtV,GAAcsV,EAAY,KAAK,iBAAiB,EAAG,CACpD,GAAI,CAAE,UAAAkE,CAAU,EAAI,KAAK,GACzB,QAASC,KAAa,KAAK,kBACvBD,EAAU,OAAOC,CAAS,EAE9B,QAASA,KAAanE,EAClBkE,EAAU,IAAIC,CAAS,EAE3B,KAAK,kBAAoBnE,CAC7B,CACJ,CACA,UAAUC,EAAQ,CACdmE,GAAe,KAAK,GAAI,SAAUnE,CAAM,CAC5C,CACJ,ECxiEA,IAAMoE,GAAN,cAAwBC,EAAc,CAClC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAcC,GAAU,CACjC,CACA,mBAAmBC,EAAkBC,EAAa,CAC9C,GAAI,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAI,KACrBC,EAAW,CAAC,EACZC,EAAoBC,GAAqBH,EAAQ,OAAO,EAC5D,OAAIH,GACAI,EAAS,KAAK,CACV,KAAM,SACN,IAAK,SACL,SAAUC,EACV,MAAO,CACH,MAAO,KAAK,YACZ,eAAgB,gBAChB,WAAYL,CAChB,CACJ,CAAC,EAELI,EAAS,KAAK,CACV,KAAM,OACN,IAAK,OACL,OAAQ,GACR,MAAO,CAAE,QAASH,CAAY,CAClC,CAAC,EACOM,EAAcC,GAAe,CAAE,UAAW,CAAC,YAAY,EAAG,SAAUL,EAAQ,QAAS,EACzFI,EAAcE,GAAkB,CAAE,OAAQ,CAACP,EAAM,cAAgB,CAACA,EAAM,SAAU,iBAAkBA,EAAM,SAAU,KAAM,CAAC,EAA8B,SAAUE,CAAS,CAAC,CAAC,CACtL,CACA,oBAAoBJ,EAAkBC,EAAaS,EAAQC,EAAa,CACpE,IAAIC,EAAa,KAAK,QAAQ,YAAY,eAC1C,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,8BAA8B,EAElD,GAAI,CAAE,MAAAV,EAAO,QAAAC,CAAQ,EAAI,KACrBE,EAAoB,CAACH,EAAM,UAAYI,GAAqBH,EAAQ,OAAO,EAC3EU,EAAwB,CAACX,EAAM,UAAYY,GAAyBX,EAAQ,OAAO,EACnFC,EAAW,CAAC,EAChB,OAAIJ,GACAI,EAAS,KAAK,CACV,KAAM,SACN,IAAK,SACL,SAAUC,EACV,OAAQ,CAAC,CACD,IAAK,OACL,MAAO,KAAK,YACZ,eAAgB,gBAChB,WAAYL,CAChB,CAAC,CACT,CAAC,EAELI,EAAS,KAAK,CACV,KAAM,OACN,IAAK,OACL,OAAQ,GACR,OAAQ,CAAC,CACD,IAAK,OACL,QAASH,CACb,CAAC,CACT,CAAC,EACGY,GACAT,EAAS,KAAK,CACV,KAAM,SACN,IAAK,SACL,SAAU,GACV,OAAQ,CAAC,CACD,IAAK,OACL,QAASW,EACb,CAAC,CACT,CAAC,EAEGR,EAAcC,GAAe,CAAE,UAAW,CAAC,YAAY,EAAG,SAAUL,EAAQ,QAAS,EACzFI,EAAcK,EAAY,CAAE,OAAQ,CAACV,EAAM,cAAgB,CAACA,EAAM,SAAU,SAAUA,EAAM,SAAU,iBAAkBA,EAAM,SAAU,UAAW,CAAC,CAAE,KAAM,CAAC,CAAE,KAAMQ,EAAQ,SAAUC,CAAY,CAAC,CAAE,CAAC,EAAG,SAAUP,CAAS,CAAC,CAAC,CACvO,CACJ,EAEA,SAASY,GAAeC,EAAMC,EAAQ,CAClC,IAAIC,EAAQ,CAAC,EACb,QAAS,EAAI,EAAG,EAAID,EAAQ,GAAK,EAC7BC,EAAM,CAAC,EAAI,CAAC,EAEhB,QAASC,KAAOH,EACZE,EAAMC,EAAI,GAAG,EAAE,KAAKA,CAAG,EAE3B,OAAOD,CACX,CACA,SAASE,GAAoBJ,EAAMP,EAAQ,CACvC,IAAIY,EAAQ,CAAC,EACb,QAAS,EAAI,EAAG,EAAIZ,EAAQ,GAAK,EAC7BY,EAAM,CAAC,EAAI,CAAC,EAEhB,QAASF,KAAOH,EACZK,EAAMF,EAAI,QAAQ,EAAE,KAAKA,CAAG,EAEhC,OAAOE,CACX,CACA,SAASC,GAAsBC,EAAIN,EAAQ,CACvC,IAAIC,EAAQ,CAAC,EACb,GAAKK,EAKA,CACD,QAAS,EAAI,EAAG,EAAIN,EAAQ,GAAK,EAC7BC,EAAM,CAAC,EAAI,CACP,kBAAmBK,EAAG,kBACtB,QAASA,EAAG,QACZ,KAAM,CAAC,CACX,EAEJ,QAASJ,KAAOI,EAAG,KACfL,EAAMC,EAAI,GAAG,EAAE,KAAK,KAAKA,CAAG,CAEpC,KAfI,SAAS,EAAI,EAAG,EAAIF,EAAQ,GAAK,EAC7BC,EAAM,CAAC,EAAI,KAenB,OAAOA,CACX,CAEA,IAAMM,GAAkCC,GAAgB,CACpD,KAAM,UACN,OAAQ,UACR,eAAgB,GAChB,SAAU,QACd,CAAC,EACD,SAASC,GAAmBP,EAAK,CAC7B,GAAI,CAAE,QAAAQ,CAAQ,EAAIR,EAAI,WAAW,GACjC,OAAOQ,IAAY,aAAgBA,IAAY,QAC3C,CAACR,EAAI,WAAW,IAAI,QACpBA,EAAI,WAAaA,EAAI,SACrBA,EAAI,SACJA,EAAI,KAEZ,CAEA,IAAMS,GAAN,cAA8BC,EAAc,CACxC,QAAS,CACL,GAAI,CAAE,MAAA5B,CAAM,EAAI,KAChB,OAAQK,EAAcwB,GAAe,OAAO,OAAO,CAAC,EAAG7B,EAAO,CAAE,UAAW,CAAC,mBAAoB,yBAA0B,YAAY,EAAG,kBAAmBuB,GAAiC,uBAAwBvB,EAAM,uBAAwB,gBAAiB,CAACA,EAAM,IAAI,WAAW,IAAI,MAAO,CAAC,CAAC,CAC3S,CACJ,EAEM8B,GAAN,cAAiCF,EAAc,CAC3C,QAAS,CACL,GAAI,CAAE,MAAA5B,EAAO,QAAAC,CAAQ,EAAI,KACrB,CAAE,QAAA8B,CAAQ,EAAI9B,EACd,CAAE,IAAAiB,CAAI,EAAIlB,EACVgC,EAAaD,EAAQ,iBAAmBR,GACxCU,EAAWC,GAAiBhB,EAAKc,EAAY/B,EAAS,GAAMD,EAAM,sBAAsB,EAC5F,OAAQK,EAAc8B,GAAgB,OAAO,OAAO,CAAC,EAAGnC,EAAO,CAAE,MAAO,IAAK,UAAW,CAAC,mBAAoB,sBAAsB,EAAG,QAASoC,GAAkBpC,EAAM,IAAKC,CAAO,EAAG,iBAAkBoC,GAAoB,SAAUJ,EAAU,WAAY,GAAO,gBAAiB,EAAM,CAAC,CAAC,CAChS,CACJ,EACA,SAASI,GAAmBC,EAAa,CACrC,OAAQjC,EAAckC,GAAU,KAC5BlC,EAAc,MAAO,CAAE,UAAW,uBAAwB,MAAO,CAAE,YAAaiC,EAAY,aAAeA,EAAY,eAAgB,CAAE,CAAC,EAC1IA,EAAY,UAAajC,EAAc,MAAO,CAAE,UAAW,eAAgB,EAAGiC,EAAY,QAAQ,EAClGjC,EAAc,MAAO,CAAE,UAAW,gBAAiB,EAAGiC,EAAY,MAAM,OAASjC,EAAckC,GAAU,KAAM,MAAQ,CAAC,CAAC,CACjI,CAEA,IAAMC,GAAN,cAAgCZ,EAAc,CAC1C,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAca,GAAQC,EAAW,CAC1C,CACA,QAAS,CACL,GAAI,CAAE,MAAA1C,CAAM,EAAI,KACZ,CAAE,QAAA2C,EAAS,cAAAC,CAAc,EAAI,KAAK,YAAY5C,EAAM,gBAAgB,EACxE,OAAQK,EAAcwC,GAAmB,CAAE,UAAW,CAAC,sBAAsB,EAAG,YAAa7C,EAAM,YAAa,WAAYA,EAAM,WAAY,WAAYA,EAAM,WAAY,QAASA,EAAM,QAAS,QAAS2C,EAAS,WAAYC,EAAe,eAAgB5C,EAAM,eAAgB,aAAcA,EAAM,aAAc,cAAeA,EAAM,cAAe,eAAgB,IAAM,CAC3W,IAAI8C,GAAqB9C,EAAM,UAAYA,EAAM,UAAU,kBAAoB,QAC1EA,EAAM,YAAcA,EAAM,YAAY,kBAAoB,OAC3D,CAAC,EACL,OAAQK,EAAckC,GAAU,KAAMI,EAAQ,IAAKzB,GAAQ,CACvD,IAAI6B,EAAa7B,EAAI,WAAW,SAAS,WACzC,OAAQb,EAAc,MAAO,CAAE,UAAW,2BAA4B,IAAK0C,EAAY,MAAO,CACtF,WAAYD,EAAkBC,CAAU,EAAI,SAAW,EAC3D,CAAE,EAAGtB,GAAmBP,CAAG,EAAKb,EAAcyB,GAAoB,OAAO,OAAO,CAAE,IAAKZ,EAAK,WAAY,GAAO,WAAY6B,IAAe/C,EAAM,eAAgB,uBAAwB,EAAM,EAAGgD,GAAW9B,EAAKlB,EAAM,UAAU,CAAC,CAAC,EAAMK,EAAcsB,GAAiB,OAAO,OAAO,CAAE,IAAKT,EAAK,WAAY,GAAO,WAAY,GAAO,gBAAiB,GAAO,WAAY6B,IAAe/C,EAAM,eAAgB,uBAAwB,EAAM,EAAGgD,GAAW9B,EAAKlB,EAAM,UAAU,CAAC,CAAC,CAAE,CAC9d,CAAC,CAAC,CACN,CAAE,CAAC,CACX,CACJ,EACA,SAAS0C,GAAYO,EAAkB,CACnC,IAAIN,EAAU,CAAC,EACXC,EAAgB,CAAC,EACrB,QAASM,KAAaD,EAClBN,EAAQ,KAAKO,EAAU,GAAG,EACrBA,EAAU,WACXN,EAAc,KAAKM,EAAU,GAAG,EAGxC,MAAO,CAAE,QAAAP,EAAS,cAAAC,CAAc,CACpC,CAEA,IAAMO,GAA0B3B,GAAgB,CAAE,KAAM,QAAS,CAAC,EAC5D4B,GAAN,cAAwBxD,EAAc,CAClC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,UAAYC,GAAU,EAC3B,KAAK,MAAQ,CACT,YAAawD,GAAe,CAChC,EACA,KAAK,aAAgBC,GAAO,CACxBC,GAAO,KAAK,UAAWD,CAAE,EACzBC,GAAO,KAAK,MAAM,MAAOD,CAAE,CAC/B,CACJ,CACA,QAAS,CACL,GAAI,CAAE,QAAArD,EAAS,MAAAD,EAAO,MAAAwD,EAAO,UAAAC,CAAU,EAAI,KACvC,CAAE,QAAA1B,EAAS,QAAA2B,CAAQ,EAAIzD,EACvB,CAAE,KAAA0D,EAAM,YAAAC,CAAY,EAAI5D,EAEtB6D,EAAe7D,EAAM,eACvB8D,GAAwBH,EAAMC,EAAY,aAAcF,CAAO,EACnE,OAAQrD,EAAc0D,GAAkB,CAAE,MAAO,KAAM,MAAO,KAAK,aAAc,UAAW,CACpF,iBACA,GAAI/D,EAAM,iBAAmB,CAAC,CAClC,EAAG,QAAS,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAM,cAAc,EAAIA,EAAM,cAAgB,CAAE,kBAAmBwD,EAAM,WAAY,EAAI,CAAC,CAAE,EAAG,CAAE,KAAM,UAAW,CAAC,EAAG,iBAAkBQ,GAAgB,KAAML,EAAM,YAAaC,EAAa,WAAY5D,EAAM,WAAY,cAAeA,EAAM,cAAe,aAAc6D,EAAc,iBAAkB7D,EAAM,gBAAiB,EAAG,CAACiE,EAAc3B,IAAiBjC,EAAc,MAAO,CAAE,IAAKL,EAAM,WAAY,UAAW,gDAAiD,MAAO,CAAE,UAAWA,EAAM,SAAU,CAAE,EACljBA,EAAM,gBAAmBK,EAAc6D,GAAqB,CAAE,MAAO,IAAK,UAAW,CAAC,wBAAwB,EAAG,QAASC,GAAkBlE,EAAS0D,EAAM,MAAM,EAAG,KAAMA,EAAM,cAAeR,EAAwB,CAAC,EACxN,CAACb,EAAY,aACRtC,EAAM,eAAiBoE,GAAwBrC,CAAO,GAAK/B,EAAM,aAAgBK,EAAc,MAAO,CAAE,UAAW,oBAAqB,EACzIA,EAAc4D,EAAc,CAAE,MAAO,IAAK,UAAW,CAC7C,wBACAJ,GAAgB,wBACpB,EAAG,QAAS,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGM,GAAkBlE,EAAS0D,CAAI,CAAC,EAAG,CAAE,GAAIH,EAAM,WAAY,CAAC,CAAE,CAAC,CAAC,EAAKxD,EAAM,cAE/HK,EAAc,MAAO,CAAE,UAAW,qBAAsB,MAAO,CAAE,WAAY,QAAS,CAAE,EACpFA,EAAc,IAAK,CAAE,UAAW,uBAAwB,EAAG,MAAQ,CAAC,EAAK,OAC7EA,EAAc,MAAO,CAAE,UAAW,wBAAyB,IAAKL,EAAM,cAAe,EACjFA,EAAM,UACNK,EAAc,MAAO,CAAE,UAAW,wBAAyB,MAAO,CAAE,UAAWL,EAAM,aAAc,CAAE,EACjGK,EAAcmC,GAAmB,CAAE,WAAYmB,EAAM,iBAAkB3D,EAAM,iBAAkB,QAASA,EAAM,QAAS,eAAgByD,EAAW,aAAc,CAACzD,EAAM,cAAe,cAAeA,EAAM,cAAe,YAAaA,EAAM,YAAa,eAAgBA,EAAM,eAAgB,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,WAAYA,EAAM,UAAW,CAAC,CAAC,CAAC,EACpYK,EAAc,MAAO,CAAE,UAAW,mBAAoB,EAAGL,EAAM,SAAS,CAAC,CAAE,CACnF,CACJ,EACA,SAASgE,GAAehE,EAAO,CAC3B,OAAOA,EAAM,eAAiBK,EAAckC,GAAU,KAAM,MAAQ,CACxE,CACA,SAASuB,GAAwBH,EAAMU,EAAcX,EAAS,CAC1D,GAAM,CAAE,MAAOY,EAAc,IAAKC,CAAW,EAAIF,EAC3CG,EAAiBC,GAAMF,EAAY,EAAE,EACrCG,EAAmBhB,EAAQ,QAAQY,CAAY,EAC/CK,EAAoBjB,EAAQ,SAASY,CAAY,EACjDM,EAAkBlB,EAAQ,QAAQc,CAAc,EAChDK,EAAmBnB,EAAQ,SAASc,CAAc,EAExD,MAAO,EAAEE,IAAqBE,GAAmBD,IAAsBE,KAGnElB,EAAK,QAAQ,IAAMW,EAAa,QAAQ,GAEnCZ,EAAQ,OAAOC,CAAI,IAAM,GAAKA,EAAK,QAAQ,EAAIY,EAAW,QAAQ,EAC/E,CAEA,SAASO,GAAe5D,EAAK,CACzB,OAAOA,EAAI,WAAW,SAAS,WAAa,IAAMA,EAAI,QAC1D,CACA,SAAS6D,GAAe7D,EAAK,CACzB,OAAO4D,GAAe5D,CAAG,EAAI,IAAMA,EAAI,OAC3C,CACA,SAAS8D,GAAsBjE,EAC/BkE,EAAcC,EAAiBC,EAAaC,EAAYC,EAAkBC,EAAO,CAC7E,IAAIC,EAAY,IAAIC,GAAqBC,GAAa,CAElD,IAAIC,EAAS3E,EAAK0E,EAAS,KAAK,EAAE,WAAW,SAAS,WAClD,IAAMA,EAAS,KAAK,MACpB,KAAOA,EAAS,KAAK,IAAM,GAE/B,OAAOL,EAAWM,CAAM,GAAK,CACjC,CAAC,EACDH,EAAU,eAAiB,GAC3BA,EAAU,YAAcJ,EACpBF,IAAiB,IAAQC,IAAoB,IAC7CK,EAAU,SAAWF,EACrBE,EAAU,eAAiB,IAEtB,OAAON,GAAiB,SAC7BM,EAAU,YAAcN,EAEnB,OAAOC,GAAoB,WAChCK,EAAU,YAAcL,EACxBK,EAAU,eAAiB,IAG/B,IAAII,EAAY,CAAC,EACbC,EAAoB,CAAC,EACzB,QAASC,EAAI,EAAGA,EAAI9E,EAAK,OAAQ8E,GAAK,EAAG,CACrC,IAAI3E,EAAMH,EAAK8E,CAAC,EACZH,EAASX,GAAe7D,CAAG,EACbkE,EAAWM,CAAM,GAChB,KACfC,EAAU,KAAK,CACX,MAAOE,EACP,KAAM,CACF,MAAO3E,EAAI,SACX,IAAKA,EAAI,QAAU,CACvB,CACJ,CAAC,EAGD0E,EAAkB,KAAK1E,CAAG,CAElC,CACA,IAAI4E,EAAgBP,EAAU,QAAQI,CAAS,EAC3CI,EAAWR,EAAU,QAAQ,EAC7B,CAAE,oBAAAS,EAAqB,mBAAAC,EAAoB,gBAAAC,CAAgB,EAAIC,GAAWJ,EAAUhF,EAAMuE,CAAK,EAC/Fc,EAAW,CAAC,EACZC,EAAiB,CAAC,EAEtB,QAASnF,KAAO0E,EAAmB,CAC/BK,EAAmB/E,EAAI,QAAQ,EAAE,KAAK,CAClC,IAAAA,EACA,UAAW,GACX,WAAY,GACZ,YAAa,EACb,UAAW,CACf,CAAC,EACD,QAASoF,EAAMpF,EAAI,SAAUoF,GAAOpF,EAAI,QAASoF,GAAO,EACpDN,EAAoBM,CAAG,EAAE,KAAK,CAC1B,IAAKC,GAAWrF,EAAKoF,EAAKA,EAAM,EAAGhB,CAAK,EACxC,UAAW,GACX,WAAY,GACZ,YAAa,EACb,UAAW,CACf,CAAC,CAET,CAEA,QAASgB,EAAM,EAAGA,EAAMhB,EAAM,OAAQgB,GAAO,EACzCF,EAAS,KAAK,CAAC,EAEnB,QAASI,KAAeV,EAAe,CACnC,IAAI5E,EAAMH,EAAKyF,EAAY,KAAK,EAC5BC,EAAaD,EAAY,KAC7BP,EAAmBQ,EAAW,KAAK,EAAE,KAAK,CACtC,IAAKF,GAAWrF,EAAKuF,EAAW,MAAOA,EAAW,IAAKnB,CAAK,EAC5D,UAAW,GACX,WAAY,GACZ,YAAa,EACb,UAAW,CACf,CAAC,EACD,QAASgB,EAAMG,EAAW,MAAOH,EAAMG,EAAW,IAAKH,GAAO,EAC1DF,EAASE,CAAG,GAAK,EACjBN,EAAoBM,CAAG,EAAE,KAAK,CAC1B,IAAKC,GAAWrF,EAAKoF,EAAKA,EAAM,EAAGhB,CAAK,EACxC,UAAW,GACX,WAAY,GACZ,YAAa,EACb,UAAW,CACf,CAAC,CAET,CAEA,QAASgB,EAAM,EAAGA,EAAMhB,EAAM,OAAQgB,GAAO,EACzCD,EAAe,KAAKH,EAAgBI,CAAG,CAAC,EAE5C,MAAO,CAAE,oBAAAN,EAAqB,mBAAAC,EAAoB,SAAAG,EAAU,eAAAC,CAAe,CAC/E,CAEA,SAASF,GAAWO,EAAU3F,EAAMuE,EAAO,CACvC,IAAIqB,EAAiBC,GAAoBF,EAAUpB,EAAM,MAAM,EAC3DU,EAAsB,CAAC,EACvBC,EAAqB,CAAC,EACtBC,EAAkB,CAAC,EACvB,QAASI,EAAM,EAAGA,EAAMhB,EAAM,OAAQgB,GAAO,EAAG,CAC5C,IAAIO,EAAQF,EAAeL,CAAG,EAE1BrD,EAAmB,CAAC,EACpB6D,EAAgB,EAChBC,EAAmB,EACvB,QAASC,KAAQH,EAAO,CACpB,IAAI3F,EAAMH,EAAKiG,EAAK,KAAK,EACzB/D,EAAiB,KAAK,CAClB,IAAKsD,GAAWrF,EAAKoF,EAAKA,EAAM,EAAGhB,CAAK,EACxC,UAAW,GACX,WAAY,GACZ,YAAa0B,EAAK,WAClB,UAAWA,EAAK,WAAaF,CACjC,CAAC,EACDA,EAAgBE,EAAK,WAAaA,EAAK,SAC3C,CAEA,IAAIC,EAAkB,CAAC,EACvBH,EAAgB,EAChBC,EAAmB,EACnB,QAASC,KAAQH,EAAO,CACpB,IAAI3F,EAAMH,EAAKiG,EAAK,KAAK,EACrBE,EAAaF,EAAK,KAAK,IAAMA,EAAK,KAAK,MAAQ,EAC/CG,EAAaH,EAAK,KAAK,QAAUV,EACrCS,GAAoBC,EAAK,WAAaF,EACtCA,EAAgBE,EAAK,WAAaA,EAAK,UACnCE,GACAH,GAAoBC,EAAK,UACrBG,GACAF,EAAgB,KAAK,CACjB,IAAKV,GAAWrF,EAAK8F,EAAK,KAAK,MAAOA,EAAK,KAAK,IAAK1B,CAAK,EAC1D,UAAW,GACX,WAAY,GACZ,YAAa0B,EAAK,WAClB,UAAW,CACf,CAAC,GAGAG,IACLF,EAAgB,KAAK,CACjB,IAAKV,GAAWrF,EAAK8F,EAAK,KAAK,MAAOA,EAAK,KAAK,IAAK1B,CAAK,EAC1D,UAAW,GACX,WAAY,GACZ,YAAa0B,EAAK,WAClB,UAAWD,CACf,CAAC,EACDA,EAAmB,EAE3B,CACAf,EAAoB,KAAK/C,CAAgB,EACzCgD,EAAmB,KAAKgB,CAAe,EACvCf,EAAgB,KAAKa,CAAgB,CACzC,CACA,MAAO,CAAE,oBAAAf,EAAqB,mBAAAC,EAAoB,gBAAAC,CAAgB,CACtE,CACA,SAASU,GAAoBC,EAAOrG,EAAQ,CACxC,IAAImG,EAAiB,CAAC,EACtB,QAASL,EAAM,EAAGA,EAAM9F,EAAQ8F,GAAO,EACnCK,EAAe,KAAK,CAAC,CAAC,EAE1B,QAASK,KAAQH,EACb,QAASP,EAAMU,EAAK,KAAK,MAAOV,EAAMU,EAAK,KAAK,IAAKV,GAAO,EACxDK,EAAeL,CAAG,EAAE,KAAKU,CAAI,EAGrC,OAAOL,CACX,CACA,SAASJ,GAAWrF,EAAKkG,EAAWC,EAAS/B,EAAO,CAChD,GAAIpE,EAAI,WAAakG,GAAalG,EAAI,UAAYmG,EAAU,EACxD,OAAOnG,EAEX,IAAIoG,EAAapG,EAAI,WACjBqG,EAAYD,EAAW,MACvBE,EAAcC,GAAgBF,EAAW,CACzC,MAAOjC,EAAM8B,CAAS,EAAE,KACxB,IAAKM,GAAQpC,EAAM+B,EAAU,CAAC,EAAE,KAAM,CAAC,CAC3C,CAAC,EACD,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGnG,CAAG,EAAG,CAAE,SAAUkG,EAAW,QAASC,EAAU,EAAG,WAAY,CAC9F,IAAKC,EAAW,IAChB,GAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAW,EAAE,EAAG,CAAE,iBAAkB,EAAM,CAAC,EAC/E,SAAUA,EAAW,SACrB,MAAOE,CACX,EAAG,QAAStG,EAAI,SAAWsG,EAAY,MAAM,QAAQ,IAAMD,EAAU,MAAM,QAAQ,EAAG,MAAOrG,EAAI,OAASsG,EAAY,IAAI,QAAQ,IAAMD,EAAU,IAAI,QAAQ,CAAE,CAAC,CACzK,CACA,IAAM/B,GAAN,cAAkCmC,EAAa,CAC3C,aAAc,CACV,MAAM,GAAG,SAAS,EAElB,KAAK,eAAiB,GAEtB,KAAK,YAAc,CAAC,CACxB,CACA,QAAQhC,EAAW,CACf,IAAMiC,EAAa,MAAM,QAAQjC,CAAS,EACpC,CAAE,eAAAkC,CAAe,EAAI,KACrBC,EAAiBC,GAAU,CAAC,KAAK,YAAYC,GAAcD,CAAK,CAAC,EAEvE,QAASE,EAAQ,EAAGA,EAAQJ,EAAe,OAAQI,GAAS,EACxDJ,EAAeI,CAAK,EAAIJ,EAAeI,CAAK,EAAE,OAAOH,CAAa,EAEtE,OAAOF,CACX,CACA,uBAAuBM,EAAWH,EAAOjC,EAAe,CACpD,GAAM,CAAE,eAAA+B,EAAgB,YAAAM,CAAY,EAAI,KAClC,CAAE,cAAAC,EAAe,cAAAC,EAAe,gBAAAC,CAAgB,EAAIJ,EAE1D,GAAI,KAAK,gBAAkBE,EAAe,CACtC,IAAMG,EAAkBP,GAAcI,CAAa,EACnD,GAAI,CAACD,EAAYI,CAAe,EAC5B,GAAI,KAAK,eAAgB,CAErB,IAAM/B,EAAc,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG4B,CAAa,EAAG,CAAE,KAAMI,GAAeJ,EAAc,KAAML,EAAM,IAAI,CAAE,CAAC,EAGtHU,EAAgBT,GAAcxB,CAAW,EAC/C2B,EAAYM,CAAa,EAAI,GAC7BZ,EAAeQ,CAAa,EAAEC,CAAe,EAAI9B,EACjDV,EAAc,KAAKU,CAAW,EAC9B,KAAK,WAAW4B,EAAeL,EAAOjC,CAAa,CACvD,MAEIqC,EAAYI,CAAe,EAAI,GAC/BzC,EAAc,KAAKsC,CAAa,CAG5C,CAEA,MAAM,uBAAuBF,EAAWH,EAAOjC,CAAa,CAChE,CACJ,EAEM4C,GAAN,cAAuB9I,EAAc,CACjC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,WAAa,IAAI+I,GACtB,KAAK,YAAc,IAAIA,GACvB,KAAK,SAAW,IAAIA,GACpB,KAAK,eAAiB,IAAIA,GAC1B,KAAK,UAAY9I,GAAU,EAC3B,KAAK,MAAQ,CACT,eAAgB,KAChB,iBAAkB,KAClB,WAAY,CAAC,CACjB,EACA,KAAK,aAAgB+I,GAAa,CAC1BA,GACA,KAAK,aAAa,EAAI,CAE9B,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAA5I,EAAO,MAAAwD,EAAO,QAAAvD,CAAQ,EAAI,KAC5B,CAAE,QAAA8B,CAAQ,EAAI9B,EACdO,EAASR,EAAM,MAAM,OACrB6I,EAAqB1H,GAAoBnB,EAAM,iBAAkBQ,CAAM,EACvEsI,EAAmB3H,GAAoBnB,EAAM,YAAaQ,CAAM,EAChEuI,EAAqB5H,GAAoB,KAAK,iBAAiB,EAAGX,CAAM,EACxEwI,EAAkB7H,GAAoB,KAAK,cAAc,EAAGX,CAAM,EAClE,CAAE,oBAAAwF,EAAqB,mBAAAC,EAAoB,SAAAG,EAAU,eAAAC,CAAe,EAAIrB,GAAsBiE,GAAcjJ,EAAM,YAAa+B,EAAQ,UAAU,EAAG/B,EAAM,aAAcA,EAAM,gBAAiB+B,EAAQ,iBAAkByB,EAAM,WAAYA,EAAM,iBAAkBxD,EAAM,KAAK,EAC9Q8C,EACF9C,EAAM,WAAaA,EAAM,UAAU,mBAChCA,EAAM,aAAeA,EAAM,YAAY,mBACxC,CAAC,EACL,OAAQK,EAAc,KAAM,CAAE,IAAK,KAAK,UAAW,KAAM,KAAM,EAC3DL,EAAM,aAAeA,EAAM,YAAY,EACvCA,EAAM,MAAM,IAAI,CAACkJ,EAAM5C,IAAQ,CAC3B,IAAI6C,EAAgB,KAAK,aAAa7C,EAAKtG,EAAM,SAAWgG,EAAoBM,CAAG,EAAIL,EAAmBK,CAAG,EAAGtG,EAAM,WAAY8C,CAAiB,EAC/IsG,EAAgB,KAAK,aAAa9C,EAAK+C,GAAsBL,EAAgB1C,CAAG,EAAGL,CAAkB,EAAGjG,EAAM,WAAY,CAAC,EAAG,EAAQA,EAAM,UAAY,EAAQA,EAAM,YAAc,EAAK,EAC7L,OAAQK,EAAc+C,GAAW,CAAE,IAAK8F,EAAK,IAAK,MAAO,KAAK,WAAW,UAAUA,EAAK,GAAG,EAAG,WAAY,KAAK,YAAY,UAAUA,EAAK,GAAG,EAA4E,YAAalJ,EAAM,YAAa,KAAMkJ,EAAK,KAAM,cAAelJ,EAAM,eAAgB,eAAgBA,EAAM,iBAAmBsG,IAAQ,EAAG,YAAatG,EAAM,gBAA4E,WAAYA,EAAM,WAAY,eAAgBA,EAAM,eAAgB,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,iBAAkBkJ,EAAK,iBAAkB,eAAgBA,EAAK,eAAgB,gBAAiBA,EAAK,gBAAiB,cAAeA,EAAK,cAAe,QAAS9C,EAASE,CAAG,EAAG,cAAeD,EAAeC,CAAG,EAAG,iBAAkBN,EAAoBM,CAAG,EAAG,eAAgB,KAAK,SAAS,UAAU4C,EAAK,GAAG,EAAG,UACj3B7I,EAAckC,GAAU,KACpBlC,EAAckC,GAAU,KAAM4G,CAAa,EAC3C9I,EAAckC,GAAU,KAAM6G,CAAa,CAAC,EAAI,UACpD/I,EAAckC,GAAU,KACpB,KAAK,eAAewG,EAAmBzC,CAAG,EAAG,WAAW,EACxD,KAAK,eAAeuC,EAAmBvC,CAAG,EAAG,cAAc,EAC3D,KAAK,eAAewC,EAAiBxC,CAAG,EAAG,UAAU,CAAC,EAAI,UAAWtG,EAAM,aAAc,CAAC,CACtG,CAAC,CAAC,CACV,CACA,mBAAoB,CAChB,KAAK,aAAa,EAAI,EACtB,KAAK,QAAQ,iBAAiB,KAAK,YAAY,CACnD,CACA,mBAAmBsJ,EAAWC,EAAW,CACrC,IAAIC,EAAe,KAAK,MACxB,KAAK,aAAa,CAACC,GAAaH,EAAWE,CAAY,CAAC,CAC5D,CACA,sBAAuB,CACnB,KAAK,QAAQ,oBAAoB,KAAK,YAAY,CACtD,CACA,kBAAmB,CACf,GAAI,CAAE,MAAAxJ,CAAM,EAAI,KAChB,OAAIA,EAAM,WAAaA,EAAM,UAAU,KAAK,OACjCA,EAAM,UAAU,KAEvBA,EAAM,aAAeA,EAAM,YAAY,KAAK,OACrCA,EAAM,YAAY,KAEtBA,EAAM,iBACjB,CACA,eAAgB,CACZ,GAAI,CAAE,MAAAA,CAAM,EAAI,KAChB,OAAIA,EAAM,aAAeA,EAAM,YAAY,KAAK,OACrCA,EAAM,YAAY,KAEtB,CAAC,CACZ,CACA,aAAasG,EAAKoD,EAAeC,EAAY7G,EAAmB8G,EAAYC,EAAYC,EAAiB,CACrG,GAAI,CAAE,QAAA7J,CAAQ,EAAI,KACd,CAAE,eAAA8J,CAAe,EAAI,KAAK,MAC1B,CAAE,eAAAC,CAAe,EAAI,KAAK,MAC1BC,EAAyB,KAAK,MAAM,MAAM,SAAW,EACrDC,EAAWN,GAAcC,GAAcC,EACvCK,EAAQ,CAAC,EACb,GAAIH,EACA,QAAS9G,KAAawG,EAAe,CACjC,GAAI,CAAE,IAAAxI,CAAI,EAAIgC,EACV,CAAE,WAAAH,CAAW,EAAI7B,EAAI,WAAW,SAChCkJ,EAAYlH,EAAU,WAAa,CAACJ,EAAkBC,CAAU,EAChEmE,EAAahE,EAAU,WACvBmH,EAAO,GACPC,EAAQ,GACRpD,IACIjH,EAAQ,OACRqK,EAAQ,EACRD,EAAOL,EAAe,MAAM9I,EAAI,OAAO,EAAI8I,EAAe,MAAM9I,EAAI,QAAQ,IAG5EmJ,EAAO,EACPC,EAAQN,EAAe,OAAO9I,EAAI,QAAQ,EAAI8I,EAAe,OAAO9I,EAAI,OAAO,IAOvFiJ,EAAM,KAAK9J,EAAc,MAAO,CAAE,UAAW,4BAA8B6G,EAAa,gCAAkC,IAAK,IAAKpC,GAAe5D,CAAG,EAAG,IAAKgJ,EAAW,KAAO,KAAK,eAAe,UAAUnF,GAAe7D,CAAG,CAAC,EAAG,MAAO,CACnO,WAAYkJ,EAAY,GAAK,SAC7B,UAAWlD,EAAa,GAAKhE,EAAU,UACvC,IAAKgE,EAAahE,EAAU,YAAc,GAC1C,KAAAmH,EACA,MAAAC,CACJ,CAAE,EAAG7I,GAAmBP,CAAG,EAAKb,EAAcyB,GAAoB,OAAO,OAAO,CAAE,IAAKZ,EAAK,WAAY0I,EAAY,WAAY7G,IAAegH,EAAgB,uBAAwBE,CAAuB,EAAGjH,GAAW9B,EAAKyI,CAAU,CAAC,CAAC,EAAMtJ,EAAcsB,GAAiB,OAAO,OAAO,CAAE,IAAKT,EAAK,WAAY0I,EAAY,WAAYC,EAAY,gBAAiBC,EAAiB,WAAY/G,IAAegH,EAAgB,uBAAwBE,CAAuB,EAAGjH,GAAW9B,EAAKyI,CAAU,CAAC,CAAC,CAAE,CAAC,CAClgB,CAEJ,OAAOQ,CACX,CACA,eAAepJ,EAAMwJ,EAAU,CAC3B,GAAI,CAAE,MAAAC,CAAM,EAAI,KAAK,QACjB,CAAE,WAAAb,CAAW,EAAI,KAAK,MACtB,CAAE,eAAAK,CAAe,EAAI,KAAK,MAC1BG,EAAQ,CAAC,EACb,GAAIH,EACA,QAAS9I,KAAOH,EAAM,CAClB,IAAI0J,EAAeD,EAAQ,CACvB,MAAO,EACP,KAAMR,EAAe,MAAM9I,EAAI,OAAO,EAAI8I,EAAe,MAAM9I,EAAI,QAAQ,CAC/E,EAAI,CACA,KAAM,EACN,MAAO8I,EAAe,OAAO9I,EAAI,QAAQ,EAAI8I,EAAe,OAAO9I,EAAI,OAAO,CAClF,EACAiJ,EAAM,KAAK9J,EAAc,MAAO,CAAE,IAAKqK,GAAmBxJ,EAAI,UAAU,EAAG,UAAW,wBAAyB,MAAOuJ,CAAa,EAAGF,IAAa,WAC/IlK,EAAcsK,GAAS,OAAO,OAAO,CAAE,IAAKzJ,CAAI,EAAG8B,GAAW9B,EAAKyI,CAAU,CAAC,CAAC,EAC/EiB,GAAWL,CAAQ,CAAC,CAAC,CAC7B,CAEJ,OAAOlK,EAAckC,GAAU,CAAC,EAAG,GAAG4H,CAAK,CAC/C,CACA,aAAaU,EAAwB,CACjC,GAAI,CAAE,MAAA7K,EAAO,MAAAwD,EAAO,YAAAsH,CAAY,EAAI,KACpC,GAAI,CAAC9K,EAAM,UACPA,EAAM,cAAgB,KACxB,CACE,GAAI6K,EAAwB,CACxB,IAAIE,EAAW/K,EAAM,MAAM,IAAKkJ,GAAS4B,EAAY,WAAW5B,EAAK,GAAG,CAAC,EACzE,GAAI6B,EAAS,OAAQ,CACjB,IAAIC,EAAW,KAAK,UAAU,QAC1BC,EAAmB,IAAIC,GAAcF,EAAUD,EAAU,GAC7D,EAAK,GACD,CAACvH,EAAM,gBAAkB,CAACA,EAAM,eAAe,UAAUyH,CAAgB,IACzE,KAAK,SAAS,CACV,eAAgB,IAAIC,GAAcF,EAAUD,EAAU,GACtD,EAAK,CACT,CAAC,CAET,CACJ,CACA,IAAMI,EAAgB,KAAK,MAAM,WAC3BC,EAAgB,KAAK,gBAAgB,EACrCC,EAAuBrL,EAAM,eAAiB,IAAQA,EAAM,kBAAoB,GACtF,KAAK,aAAa,CAId,WAAY,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGmL,CAAa,EAAGC,CAAa,EACzE,iBAAkBC,EAAuB,KAAK,wBAAwB,EAAI,IAC9E,CAAC,CACL,CACJ,CACA,iBAAkB,CACd,IAAIC,EAAW,KAAK,eAAe,WAC/BlG,EAAa,CAAC,EAElB,QAASM,KAAU4F,EAAU,CACzB,IAAIC,EAAS,KAAK,MAAMD,EAAS5F,CAAM,EAAE,sBAAsB,EAAE,MAAM,EACvEN,EAAWM,CAAM,EAAI,KAAK,IAAIN,EAAWM,CAAM,GAAK,EAAG6F,CAAM,CACjE,CACA,OAAOnG,CACX,CACA,yBAA0B,CACtB,IAAIoG,EAAW,KAAK,MAAM,MAAM,CAAC,EAAE,IAC/BC,EAAS,KAAK,WAAW,WAAWD,CAAQ,EAC5CE,EAAgB,KAAK,SAAS,WAAWF,CAAQ,EACrD,OAAOC,EAAO,sBAAsB,EAAE,OAASC,EAAc,sBAAsB,EAAE,GACzF,CACA,YAAa,CACT,IAAIC,EAAQ,KAAK,WAAW,WAC5B,OAAO,KAAK,MAAM,MAAM,IAAKzC,GAASyC,EAAMzC,EAAK,GAAG,CAAC,CACzD,CACJ,EACAR,GAAS,iBAAiB,CACtB,WAAYe,EAChB,CAAC,EACD,SAASJ,GAAsBuC,EAAYC,EAAe,CACtD,GAAI,CAACD,EAAW,OACZ,MAAO,CAAC,EAEZ,IAAIE,EAAmBC,GAAqBF,CAAa,EACzD,OAAOD,EAAW,IAAK1K,IAAS,CAC5B,IAAAA,EACA,UAAW,GACX,WAAY,GACZ,YAAa4K,EAAiB5K,EAAI,WAAW,SAAS,UAAU,EAChE,UAAW,CACf,EAAE,CACN,CACA,SAAS6K,GAAqBF,EAAe,CACzC,IAAIC,EAAmB,CAAC,EACxB,QAASE,KAAcH,EACnB,QAAS3I,KAAa8I,EAClBF,EAAiB5I,EAAU,IAAI,WAAW,SAAS,UAAU,EAAIA,EAAU,YAGnF,OAAO4I,CACX,CAEA,IAAMG,GAAN,cAAwBrM,EAAc,CAClC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,sBAAwB6C,GAAQ3B,EAAc,EACnD,KAAK,iBAAmB2B,GAAQ3B,EAAc,EAC9C,KAAK,iBAAmB2B,GAAQ3B,EAAc,EAC9C,KAAK,uBAAyB2B,GAAQ3B,EAAc,EACpD,KAAK,eAAiB2B,GAAQpB,EAAqB,EACnD,KAAK,iBAAmBoB,GAAQpB,EAAqB,EACrD,KAAK,QAAU,IAAIsH,EACvB,CACA,QAAS,CACL,GAAI,CAAE,MAAA3I,EAAO,QAAAC,CAAQ,EAAI,KACrBe,EAAShB,EAAM,MAAM,OACrBkM,EAAwB,KAAK,sBAAsBlM,EAAM,iBAAkBgB,CAAM,EACjFmL,EAAmB,KAAK,iBAAiBnM,EAAM,YAAagB,CAAM,EAClEoL,EAAmB,KAAK,iBAAiBpM,EAAM,YAAagB,CAAM,EAClEqL,EAAyB,KAAK,uBAAuBrM,EAAM,kBAAmBgB,CAAM,EACpFsL,EAAiB,KAAK,eAAetM,EAAM,UAAWgB,CAAM,EAC5DuL,EAAmB,KAAK,iBAAiBvM,EAAM,YAAagB,CAAM,EAGlEwL,EAAiBxL,GAAU,GAAKhB,EAAM,YACtCA,EAAM,YAAcC,EAAQ,QAAQ,YAAc,EAClD,KACJ,OAAQI,EAAcoM,GAAU,CAAE,KAAM,KAAM,EAAG,CAACC,EAAS/C,IAAgBtJ,EAAckC,GAAU,KAAMvC,EAAM,MAAM,IAAI,CAACsF,EAAOqH,IAAStM,EAAcqI,GAAU,CAAE,IAAK,KAAK,QAAQ,UAAUiE,CAAG,EAAG,IAAKrH,EAAM,OACvMA,EAAM,CAAC,EAAE,KAAK,YAAY,EAC1BqH,EACJ,eAAgB3L,EAAS,EAAG,gBAAiBhB,EAAM,gBAAiB,WAAY2J,EAAY,YAAa3J,EAAM,YAAa,MAAOsF,EAAO,YAAatF,EAAM,eAAgB,iBAAkBkM,EAAsBS,CAAG,EAAG,eAAgB3M,EAAM,eAAgB,YAAamM,EAAiBQ,CAAG,EAAE,OAAOC,EAAW,EAAc,YAAaR,EAAiBO,CAAG,EAAG,kBAAmBN,EAAuBM,CAAG,EAAG,UAAWL,EAAeK,CAAG,EAAG,YAAaJ,EAAiBI,CAAG,EAAG,aAAc3M,EAAM,aAAc,gBAAiBA,EAAM,gBAAiB,YAAaA,EAAM,YAAa,aAAcA,EAAM,aAAc,cAAewM,EAAe,SAAUxM,EAAM,QAAS,CAAC,CAAE,CAAC,CAAE,CAC/qB,CACA,mBAAoB,CAChB,KAAK,6BAA6B,CACtC,CACA,oBAAqB,CAEjB,KAAK,6BAA6B,CACtC,CACA,8BAA+B,CAC3B,GAAI,CAAC,KAAK,OAAQ,CAGd,IAAM6M,EAAc,KAAK,QAAQ,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,EACvDC,EAASD,EAAcA,EAAY,QAAQ,kBAAkB,EAAI,KACnEC,IACA,KAAK,OAASA,EACd,KAAK,QAAQ,6BAA6B,KAAM,CAC5C,GAAIA,EACJ,kBAAmB,KAAK,MAAM,iBAClC,CAAC,EAET,CACJ,CACA,sBAAuB,CACf,KAAK,SACL,KAAK,QAAQ,+BAA+B,IAAI,EAChD,KAAK,OAAS,KAEtB,CAGA,aAAc,CACV,KAAK,aAAe,IAAI5B,GAAc,KAAK,OAAQ,KAAK,QAAQ,QAAQ,EAAE,IAAK6B,GAAWA,EAAO,WAAW,EAAE,CAAC,CAAC,EAChH,GAAO,EAAI,EACX,KAAK,aAAe,IAAI7B,GAAc,KAAK,OAAQ,KAAK,QAAQ,WAAW,CAAC,EAAE,WAAW,EACzF,GACA,EAAK,CACT,CACA,SAAS8B,EAAcC,EAAa,CAChC,GAAI,CAAE,aAAAC,EAAc,aAAAC,CAAa,EAAI,KACjC7G,EAAM4G,EAAa,YAAYF,CAAY,EAC3CL,EAAMQ,EAAa,WAAWF,CAAW,EAC7C,GAAIN,GAAO,MAAQrG,GAAO,KAAM,CAC5B,IAAI4C,EAAO,KAAK,MAAM,MAAMyD,CAAG,EAAErG,CAAG,EACpC,MAAO,CACH,YAAa,KAAK,MAAM,YACxB,SAAU,OAAO,OAAO,CAAE,MAAO,KAAK,aAAaqG,EAAKrG,CAAG,EAAG,OAAQ,EAAK,EAAG4C,EAAK,aAAa,EAChG,MAAO,KAAK,UAAUyD,EAAKrG,CAAG,EAC9B,KAAM,CACF,KAAM4G,EAAa,MAAM5G,CAAG,EAC5B,MAAO4G,EAAa,OAAO5G,CAAG,EAC9B,IAAK6G,EAAa,KAAKR,CAAG,EAC1B,OAAQQ,EAAa,QAAQR,CAAG,CACpC,EACA,MAAO,CACX,CACJ,CACA,OAAO,IACX,CACA,UAAUA,EAAKrG,EAAK,CAChB,OAAO,KAAK,QAAQ,WAAWqG,CAAG,EAAE,WAAW,EAAErG,CAAG,CACxD,CACA,aAAaqG,EAAKrG,EAAK,CACnB,IAAI8G,EAAQ,KAAK,MAAM,MAAMT,CAAG,EAAErG,CAAG,EAAE,KACnC+G,EAAM3F,GAAQ0F,EAAO,CAAC,EAC1B,MAAO,CAAE,MAAAA,EAAO,IAAAC,CAAI,CACxB,CACJ,EACA,SAAST,GAAY1L,EAAK,CACtB,OAAOA,EAAI,WAAW,IAAI,MAC9B,CAEA,IAAMoM,GAAN,cAAoB1N,EAAc,CAC9B,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQC,GAAU,EACvB,KAAK,iBAAmB,EAC5B,CACA,QAAS,CACL,GAAI,CAAE,MAAAG,CAAM,EAAI,KACZ,CAAE,gBAAAkF,EAAiB,aAAAD,EAAc,WAAAsI,CAAW,EAAIvN,EAChDwN,EAAmBvI,IAAiB,IAAQC,IAAoB,GAGhEsI,GAAoB,CAACD,IACrBC,EAAmB,GACnBtI,EAAkB,KAClBD,EAAe,MAEnB,IAAIwI,EAAa,CACb,kBACAD,EAAmB,2BAA6B,6BAChDD,EAAa,GAAK,yBACtB,EACA,OAAQlN,EAAc,MAAO,CAAE,IAAK,KAAK,MAAO,UAAWoN,EAAW,KAAK,GAAG,EAAG,MAAO,CAGhF,MAAOzN,EAAM,YACb,SAAUA,EAAM,aACpB,CAAE,EACFK,EAAc,QAAS,CAAE,KAAM,eAAgB,UAAW,2BAA4B,MAAO,CACrF,MAAOL,EAAM,YACb,SAAUA,EAAM,cAChB,OAAQuN,EAAavN,EAAM,aAAe,EAC9C,CAAE,EACFA,EAAM,aACNK,EAAc,QAAS,CAAE,KAAM,cAAe,EAC1CA,EAAc4L,GAAW,CAAE,YAAajM,EAAM,YAAa,MAAOA,EAAM,MAAO,eAAgBA,EAAM,eAAgB,gBAAiBA,EAAM,gBAAiB,YAAaA,EAAM,YAAa,aAAcA,EAAM,aAAc,iBAAkBA,EAAM,iBAAkB,YAAaA,EAAM,YAAa,YAAaA,EAAM,YAAa,kBAAmBA,EAAM,kBAAmB,eAAgBA,EAAM,eAAgB,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,aAAciF,EAAc,gBAAiBC,EAAiB,SAAUlF,EAAM,SAAU,kBAAmBA,EAAM,iBAAkB,CAAC,CAAC,CAAC,CAAC,CAC9mB,CACA,mBAAoB,CAChB,KAAK,mBAAmB,CAC5B,CACA,mBAAmBsJ,EAAW,CACtBA,EAAU,cAAgB,KAAK,MAAM,YACrC,KAAK,mBAAmB,EAGxB,KAAK,iBAAiB,CAE9B,CACA,oBAAqB,CACjB,KAAK,iBAAmB,GACxB,KAAK,iBAAiB,CAC1B,CACA,kBAAmB,CACf,GAAI,KAAK,kBACL,KAAK,MAAM,YACb,CACE,IAAMoE,EAAYC,GAAmB,KAAK,MAAM,QAAS,KAAK,MAAM,WAAW,EAC/E,GAAID,EAAW,CACX,IAAM1C,EAAW0C,EAAU,QAAQ,kBAAkB,EAC/CE,EAAW5C,EAAS,QAAQ,cAAc,EAC1C6C,EAAYH,EAAU,sBAAsB,EAAE,IAChD1C,EAAS,sBAAsB,EAAE,IACrC4C,EAAS,UAAYC,EAAaA,EAAY,EAAK,CACvD,CACA,KAAK,iBAAmB,EAC5B,CACJ,CACJ,EACA,SAASF,GAAmBG,EAAalK,EAAa,CAClD,IAAIN,EACJ,OAAIM,EAAY,iBAAiB,MAAM,YAAY,IAC/CN,EAAKwK,EAAY,cAAc,eAAeC,GAAkBnK,EAAY,WAAW,CAAC,OAAO,GAG9FN,IACDA,EAAKwK,EAAY,cAAc,eAAeE,GAAgBpK,EAAY,WAAW,CAAC,IAAI,GAGvFN,CACX,CAEA,IAAM2K,GAAN,cAA6BC,EAAO,CAChC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqB,EAC9B,CACA,WAAWC,EAAWC,EAAe,CACjC,OAAOA,EAAc,WAAWD,CAAS,CAC7C,CACJ,EAEME,GAAN,cAAuBzO,EAAc,CACjC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,OAAS,IAAIqO,GAClB,KAAK,SAAWpO,GAAU,CAC9B,CACA,QAAS,CACL,GAAI,CAAE,MAAAG,EAAO,QAAAC,CAAQ,EAAI,KACzB,OAAQI,EAAciN,GAAO,OAAO,OAAO,CAAE,IAAK,KAAK,QAAS,EAAG,KAAK,OAAO,WAAWtN,EAAOA,EAAM,YAAaA,EAAM,iBAAkBC,EAASD,EAAM,aAAa,EAAG,CAAE,YAAaA,EAAM,YAAa,MAAOA,EAAM,cAAc,MAAO,aAAcA,EAAM,aAAc,cAAeA,EAAM,cAAe,eAAgBA,EAAM,eAAgB,aAAcA,EAAM,aAAc,gBAAiBA,EAAM,gBAAiB,gBAAiBA,EAAM,gBAAiB,WAAYA,EAAM,WAAY,iBAAkBA,EAAM,iBAAkB,YAAaA,EAAM,YAAa,aAAcA,EAAM,aAAc,SAAUA,EAAM,QAAS,CAAC,CAAC,CACtnB,CACJ,EAEMsO,GAAN,cAA2B3O,EAAU,CACjC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqB8C,GAAQ8L,EAAkB,EACpD,KAAK,UAAY1O,GAAU,EAC3B,KAAK,SAAWA,GAAU,CAE9B,CACA,QAAS,CACL,GAAI,CAAE,QAAAkC,EAAS,qBAAAyM,CAAqB,EAAI,KAAK,QACzC,CAAE,MAAAxO,CAAM,EAAI,KACZoO,EAAgB,KAAK,mBAAmBpO,EAAM,YAAawO,CAAoB,EAC/EC,EAAgB1M,EAAQ,YAAe1B,EAAcqO,GAAW,CAAE,IAAK,KAAK,UAAW,YAAa1O,EAAM,YAAa,MAAOoO,EAAc,YAAa,qBAAsBA,EAAc,SAAW,CAAE,CAAC,EAC3MrO,EAAe4O,GAAgBtO,EAAcgO,GAAU,CAAE,IAAK,KAAK,SAAU,YAAarO,EAAM,YAAa,cAAeoO,EAAe,cAAepO,EAAM,cAAe,cAAeA,EAAM,cAAe,WAAYA,EAAM,WAAY,aAAcA,EAAM,aAAc,eAAgBA,EAAM,eAAgB,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,iBAAkB+B,EAAQ,iBAAkB,aAAc4M,EAAW,kBAAmB,cAAeA,EAAW,cAAe,aAAc5M,EAAQ,aAAc,gBAAiBA,EAAQ,gBAAiB,gBAAiBA,EAAQ,YAAa,WAAY,CAAC/B,EAAM,aAAc,iBAAkB,KAAK,YAAa,YAAa2O,EAAW,YAAa,aAAcA,EAAW,aAAc,SAAU3O,EAAM,QAAS,CAAC,EACzxB,OAAO+B,EAAQ,YACT,KAAK,oBAAoB0M,EAAe1O,EAAaqO,EAAc,OAAQrM,EAAQ,WAAW,EAC9F,KAAK,mBAAmB0M,EAAe1O,CAAW,CAC5D,CACJ,EACA,SAASwO,GAAmB3K,EAAa4K,EAAsB,CAC3D,IAAII,EAAY,IAAIC,GAAejL,EAAY,YAAa4K,CAAoB,EAChF,OAAO,IAAIM,GAAcF,EAAW,kBAAkB,KAAKhL,EAAY,gBAAgB,CAAC,CAC5F,CAEA,IAAMmL,GAAN,cAAwCC,EAAqB,CAEzD,iBAAiB3K,EAAc4K,EAAkBC,EAAe,CAC5D,IAAIC,EAAc,MAAM,iBAAiB9K,EAAc4K,EAAkBC,CAAa,EAClF,CAAE,MAAAlP,CAAM,EAAI,KAChB,OAAOoP,GAAyB,CAC5B,aAAcD,EACd,WAAY,iBAAiB,KAAKF,CAAgB,EAClD,eAAgBjP,EAAM,eACtB,QAASA,EAAM,OACnB,CAAC,CACL,CACJ,EACA,SAASoP,GAAyBpP,EAAO,CACrC,GAAI,CAAE,QAAA0D,EAAS,aAAAW,CAAa,EAAIrE,EAC5B,CAAE,MAAAoN,EAAO,IAAAC,CAAI,EAAIhJ,EACjBgL,EAWJ,GATIrP,EAAM,aACNoN,EAAQ1J,EAAQ,YAAY0J,CAAK,EAEjCiC,EAAY3L,EAAQ,YAAY2J,CAAG,EAC/BgC,EAAU,QAAQ,IAAMhC,EAAI,QAAQ,IACpCA,EAAMiC,GAASD,EAAW,CAAC,IAI/BrP,EAAM,eAAgB,CAGtB,IAAIuP,EAAuB7L,EAAQ,YAAYA,EAAQ,aAAagE,GAAQrD,EAAa,IAAK,EAAE,CAAC,CAAC,EAC9FrD,EAAS,KAAK,KAClBwO,GAAUD,EAAsBlC,CAAG,CAAC,EACpCA,EAAMiC,GAASjC,EAAK,EAAIrM,CAAM,CAClC,CACA,MAAO,CAAE,MAAAoM,EAAO,IAAAC,CAAI,CACxB,CAEA,IAAIoC,GAAW,m8GACfC,GAAaD,EAAQ,ECj9BrB,IAAIE,GAAQC,GAAa,CACrB,KAAM,wBACN,YAAa,eACb,MAAO,CACH,QAAS,CACL,UAAWC,GACX,0BAA2BC,EAC/B,EACA,WAAY,CACR,KAAM,UACN,SAAU,CAAE,KAAM,CAAE,CACxB,EACA,YAAa,CACT,KAAM,UACN,SAAU,CAAE,MAAO,CAAE,CACzB,EACA,aAAc,CACV,KAAM,UACN,SAAU,CAAE,OAAQ,CAAE,EACtB,eAAgB,EACpB,EACA,YAAa,CACT,KAAM,UACN,SAAU,CAAE,MAAO,CAAE,CACzB,CACJ,CACJ,CAAC,EC3BD,IAAMC,GAAN,cAA6BC,EAAS,CAClC,YAAa,CACT,MAAO,CACH,OAAQ,CAAC,EACT,MAAO,CAAC,CACZ,CACJ,CACA,mBAAmBC,EAAU,CACzB,OAAIA,EAAS,OACF,CAAC,QAAQ,EAEb,CAAC,OAAO,CACnB,CACA,mBAAmBC,EAAU,CACzB,OAAKA,EAAS,OAGVC,GAAeD,CAAQ,EAChB,CAAC,QAAS,QAAQ,EAEtB,CAAC,QAAQ,EALL,CAAC,OAAO,CAMvB,CACJ,EAEME,GAA4BC,GAAgB,CAC9C,KAAM,UACN,OAAQ,UACR,eAAgB,GAChB,SAAU,OACd,CAAC,EACD,SAASC,GAAiBC,EAAO,CAC7B,IAAIC,EAAa,CACb,mBACA,yBACAD,EAAM,UAAY,uBAAyB,wBAC/C,EACA,OAAQE,EAAcC,GAAgB,SAAU,KAAOC,GAAY,CAC/D,GAAI,CAACJ,EAAM,UACP,OAAQE,EAAc,KAAM,CAAE,UAAWD,EAAW,KAAK,GAAG,EAAG,YAAaD,EAAM,UAAW,CAAC,EAElG,GAAI,CAAE,QAAAK,EAAS,QAAAC,EAAS,QAAAC,CAAQ,EAAIH,EAChCI,EACHF,EAAQ,iBAAmB,KAAOT,GAC/B,MAAM,QAAQS,EAAQ,eAAe,EAAIR,GAAgBQ,EAAQ,gBAAgB,CAAC,CAAC,EAC/ER,GAAgBQ,EAAQ,eAAe,EAC3CG,EAAc,CACd,MAAO,EACP,KAAMT,EAAM,KACZ,KAAMK,EAAQ,OAAOL,EAAM,IAAI,EAC/B,KAAMO,EACN,KAAMF,EAAQ,OAAOL,EAAM,KAAMQ,CAAW,CAChD,EACA,OAAQN,EAAcQ,GAAkB,CAAE,MAAO,KAAM,UAAWT,EAAY,QAAS,CAC/E,YAAaD,EAAM,UACvB,EAAG,YAAaS,EAAa,cAAe,mBAAoB,gBAAiBH,EAAQ,iBAAkB,iBAAkBK,GAAoB,mBAAoBL,EAAQ,oBAAqB,SAAUA,EAAQ,kBAAmB,YAAaA,EAAQ,oBAAqB,EAAIM,GAAkBV,EAAc,MAAO,CAAE,UAAW,yDAA0D,EACnYA,EAAcU,EAAc,CAAE,MAAO,MAAO,UAAW,CAC/C,iCACA,8BACJ,CAAE,CAAC,CAAC,CAAE,CAClB,CAAC,CACL,CACA,SAASD,GAAmBX,EAAO,CAC/B,OAAOA,EAAM,IACjB,CAEA,IAAMa,GAAN,cAA2BC,EAAc,CACrC,QAAS,CACL,OAAO,KAAK,MAAM,UAAU,IAAKC,GAAcb,EAAc,KAAM,CAAE,IAAKa,EAAS,GAAI,EACnFb,EAAcH,GAAkB,OAAO,OAAO,CAAC,EAAGgB,CAAQ,CAAC,CAAC,CAAE,CACtE,CACJ,EAEMC,GAA0BlB,GAAgB,CAAE,KAAM,OAAQ,CAAC,EAC3DmB,GAA8B,EAC9BC,GAAN,cAA2BC,EAAc,CACrC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiB,IAAI3B,GAC1B,KAAK,YAAc4B,GAAU,EAC7B,KAAK,UAAYA,GAAU,EAC3B,KAAK,cAAgBA,GAAU,EAC/B,KAAK,MAAQ,CACT,WAAY,IAChB,EACA,KAAK,uBAA0BC,GAAc,CACzC,IAAIC,EAAa,KAAK,cAAc,QAChCA,IACAA,EAAW,UAAYD,EAE/B,EAGA,KAAK,eAAiB,CAACE,EAAQC,EAAc,KAAO,CAChD,GAAI,CAAE,QAAAlB,CAAQ,EAAI,KAAK,QACnB,CAAE,YAAAmB,CAAY,EAAI,KAAK,MACvBC,EAAQD,EAAY,YAGpBE,EAFSC,GAASF,EAAM,MAAOA,EAAM,GAAG,IAEb,EACzBG,GAAkB,KAAK,QAASH,EAAM,MAAO,MAAM,EACnD,CAAC,EACP,OAAIpB,EAAQ,aAAeiB,IAAW,MAC1BrB,EAAc4B,GAAqB,CAAE,MAAO,KAAM,UAAW,CAC7D,mBACA,sBACJ,EAAG,QAAS,CACR,cAAe,EACnB,EAAG,KAAMJ,EAAM,MAAO,cAAeV,EAAwB,EAAIJ,GAAkBV,EAAc,MAAO,CAAE,UAAW,CACjH,yBACA,6BACA,+BACJ,EAAE,KAAK,GAAG,EAAG,MAAO,CAAE,OAAQsB,CAAY,CAAE,EAC5CtB,EAAcU,EAAc,CAAE,MAAO,IAAK,UAAW,CAC7C,2BACA,+BACA,0BACJ,EAAG,QAASe,CAAa,CAAC,CAAC,CAAE,EAEjCzB,EAAc,KAAM,CAAE,cAAe,GAAM,UAAW,kBAAmB,EAC7EA,EAAc,MAAO,CAAE,UAAW,yBAA0B,MAAO,CAAE,OAAQsB,CAAY,CAAE,CAAC,CAAC,CACrG,EAKA,KAAK,mBAAsBO,GAAc,CACrC,GAAI,CAAE,QAAAzB,EAAS,QAAAC,CAAQ,EAAI,KAAK,QAC5BE,EAAc,CACd,KAAMH,EAAQ,WACd,KAAMC,CACV,EACA,OAEAL,EAAcQ,GAAkB,CAAE,MAAO,KAAM,UAAW,CAClD,mBACA,sBACJ,EAAG,QAAS,CACR,cAAe,EACnB,EAAG,YAAaD,EAAa,cAAe,gBAAiB,gBAAiBH,EAAQ,cAAe,iBAAkB0B,GAAmB,mBAAoB1B,EAAQ,iBAAkB,SAAUA,EAAQ,eAAgB,YAAaA,EAAQ,iBAAkB,EAAIM,GAAkBV,EAAc,MAAO,CAAE,UAAW,CACrT,yBACA,6BACA6B,GAAa,KAAO,iCAAmC,EAC3D,EAAE,KAAK,GAAG,EAAG,MAAO,CAAE,OAAQA,CAAU,CAAE,EAC1C7B,EAAcU,EAAc,CAAE,MAAO,OAAQ,UAAW,CAChD,2BACA,+BACA,0BACJ,CAAE,CAAC,CAAC,CAAE,CAClB,EACA,KAAK,iBAAoBqB,GAAe,CACpC,KAAK,SAAS,CAAE,WAAAA,CAAW,CAAC,CAChC,CACJ,CAGA,mBAAmBC,EAAkBC,EAAeC,EAAa,CAC7D,GAAI,CAAE,QAAAhC,EAAS,MAAAJ,CAAM,EAAI,KACrBqC,EAAW,CAAC,EACZC,EAAoBC,GAAqBnC,EAAQ,OAAO,EAC5D,OAAI8B,GACAG,EAAS,KAAK,CACV,KAAM,SACN,IAAK,SACL,SAAUC,EACV,MAAO,CACH,MAAO,KAAK,YACZ,eAAgB,gBAChB,WAAYJ,CAChB,CACJ,CAAC,EAEDC,IACAE,EAAS,KAAK,CACV,KAAM,OACN,IAAK,UACL,MAAO,CAAE,QAASF,CAAc,CACpC,CAAC,EACDE,EAAS,KAAK,CACV,KAAM,OACN,IAAK,kBACL,aACAnC,EAAc,KAAM,CAAE,KAAM,eAAgB,UAAW,uBAAwB,EAC3EA,EAAc,KAAM,CAAE,UAAW,uBAAyBE,EAAQ,MAAM,SAAS,iBAAiB,CAAE,CAAC,CAAC,CAC9G,CAAC,GAELiC,EAAS,KAAK,CACV,KAAM,OACN,IAAK,OACL,OAAQ,GACR,WAAY,EAAQjC,EAAQ,QAAQ,WACpC,MAAO,CACH,cAAe,KAAK,cACpB,QAASgC,CACb,CACJ,CAAC,EACOlC,EAAcsC,GAAe,CAAE,MAAO,KAAK,UAAW,UAAW,CAAC,aAAa,EAAG,SAAUpC,EAAQ,QAAS,EACjHF,EAAcuC,GAAkB,CAAE,OAAQ,CAACzC,EAAM,cAAgB,CAACA,EAAM,SAAU,iBAAkBA,EAAM,SAAU,KAAM,CAAC,CAAE,MAAO,QAAS,CAAC,EAAG,SAAUqC,CAAS,CAAC,CAAC,CAC9K,CACA,oBAAoBH,EAAkBC,EAAeC,EAAaM,EAAQC,EAAaC,EAAWX,EAAY,CAC1G,IAAIY,EAAa,KAAK,QAAQ,YAAY,eAC1C,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,8BAA8B,EAElD,GAAI,CAAE,QAAAzC,EAAS,MAAAJ,CAAM,EAAI,KACrBsC,EAAoB,CAACtC,EAAM,UAAYuC,GAAqBnC,EAAQ,OAAO,EAC3E0C,EAAwB,CAAC9C,EAAM,UAAY+C,GAAyB3C,EAAQ,OAAO,EACnFiC,EAAW,CAAC,EACZH,GACAG,EAAS,KAAK,CACV,KAAM,SACN,IAAK,SACL,SAAUC,EACV,eAAgB,GAChB,OAAQ,CACJ,CACI,IAAK,OACL,WAAaU,GAAS9C,EAAc,KAAM,CAAE,KAAM,cAAe,EAAG,KAAK,eAAe,MAAO8C,EAAI,eAAe,CAAC,CAAC,CAAC,CACzH,EACA,CACI,IAAK,OACL,MAAO,KAAK,YACZ,eAAgB,gBAChB,WAAYd,CAChB,CACJ,CACJ,CAAC,EAEDC,IACAE,EAAS,KAAK,CACV,KAAM,OACN,IAAK,UACL,eAAgB,GAChB,OAAQ,CACJ,CACI,IAAK,OACL,WAAaY,GAAgB/C,EAAc,KAAM,CAAE,KAAM,cAAe,EAAG,KAAK,mBAAmB+C,EAAW,eAAe,CAAC,CAAC,CAAC,CACpI,EACA,CACI,IAAK,OACL,QAASd,CACb,CACJ,CACJ,CAAC,EACDE,EAAS,KAAK,CACV,IAAK,kBACL,KAAM,OACN,aACAnC,EAAc,KAAM,CAAE,KAAM,eAAgB,UAAW,uBAAwB,EAC3EA,EAAc,KAAM,CAAE,QAAS,EAAG,UAAW,uBAAyBE,EAAQ,MAAM,SAAS,iBAAiB,CAAE,CAAC,CAAC,CAC1H,CAAC,GAEL,IAAI8C,EAAiB9C,EAAQ,QAAQ,aACrC,OAAAiC,EAAS,KAAK,CACV,KAAM,OACN,IAAK,OACL,OAAQ,GACR,WAAY,EAAQjC,EAAQ,QAAQ,WACpC,OAAQ,CACJ,CACI,IAAK,OACL,QAAU4C,GAEV9C,EAAc,MAAO,CAAE,UAAW,wBAAyB,EACvDA,EAAc,QAAS,CAAE,cAAe,GAAM,MAAO,CAAE,OAAQ8C,EAAI,WAAaA,EAAI,aAAe,EAAG,CAAE,EACpGA,EAAI,kBACJ9C,EAAc,QAAS,KACnBA,EAAcW,GAAc,CAAE,UAAW+B,CAAU,CAAC,CAAC,CAAC,EAC9D1C,EAAc,MAAO,CAAE,UAAW,qCAAsC,EACpEA,EAAciD,GAAU,CAAE,KAAMD,EAAiB,SAAW,KAAkB,EAAIE,GAAY,CAC1F,IAAIC,EAAkBH,GAClBjB,GACAA,EAAW,eAAemB,CAAO,EACrC,OAAI,OAAOC,GAAoB,SACnBnD,EAAcoD,GAAuB,CAAE,UAAW,CAAC,iCAAiC,EAAG,QAAS,CAAE,IAAKD,CAAgB,EAAG,OAAQ,GAAM,KAAMD,CAAQ,CAAC,EAE5J,IACX,CAAC,CAAC,CAAC,CACf,EACA,CACI,IAAK,OACL,cAAe,KAAK,cACpB,QAAShB,CACb,CACJ,CACJ,CAAC,EACGU,GACAT,EAAS,KAAK,CACV,IAAK,SACL,KAAM,SACN,SAAU,GACV,OAAQ,CACJ,CACI,IAAK,OACL,QAASkB,EACb,EACA,CACI,IAAK,OACL,QAASA,EACb,CACJ,CACJ,CAAC,EAEGrD,EAAcsC,GAAe,CAAE,MAAO,KAAK,UAAW,UAAW,CAAC,aAAa,EAAG,SAAUpC,EAAQ,QAAS,EACjHF,EAAc2C,EAAY,CAAE,OAAQ,CAAC7C,EAAM,cAAgB,CAACA,EAAM,SAAU,SAAUA,EAAM,SAAU,iBAAkB,GAAO,UAAW,CAClI,CAAE,MAAO,SAAU,KAAM,CAAC,CAAE,MAAO,QAAS,CAAC,CAAE,EAC/C,CAAE,KAAM,CAAC,CAAE,KAAM0C,EAAQ,SAAUC,CAAY,CAAC,CAAE,CACtD,EAAG,SAAUN,CAAS,CAAC,CAAC,CACpC,CAGA,wBAAyB,CACrB,GAAI,CAAE,aAAAmB,EAAc,gBAAAC,CAAgB,EAAI,KAAK,QAAQ,QACrD,OAAID,IAAiB,IAAQC,IAAoB,MAC7CD,EAAe,OACfC,EAAkBxC,IAEf,CAAE,aAAAuC,EAAc,gBAAAC,CAAgB,CAC3C,CACJ,EACA,SAASzB,GAAkBvB,EAAa,CACpC,OAAOA,EAAY,IACvB,CAEA,IAAMiD,GAAN,KAA0B,CACtB,YAAYC,EAAWlC,EAAamC,EAAc,CAC9C,KAAK,UAAYD,EACjB,KAAK,YAAclC,EACnB,KAAK,aAAemC,CACxB,CACA,eAAeC,EAAM,CACjB,GAAI,CAAE,YAAApC,CAAY,EAAI,KACtB,GAAIqC,GAAoBrC,EAAY,aAAcoC,CAAI,EAAG,CACrD,IAAIE,EAAiBC,GAAWH,CAAI,EAChCI,EAASJ,EAAK,QAAQ,EAAIE,EAAe,QAAQ,EACrD,GAAIE,GAAUC,GAAUzC,EAAY,WAAW,GAC3CwC,EAASC,GAAUzC,EAAY,WAAW,EAC1C,OAAO,KAAK,eAAe0C,GAAeF,CAAM,CAAC,CAEzD,CACA,OAAO,IACX,CAGA,eAAeG,EAAML,EAAgB,CACjC,OAAKA,IACDA,EAAiBC,GAAWI,CAAI,GAE7B,KAAK,eAAeD,GAAeC,EAAK,QAAQ,EAAIL,EAAe,QAAQ,CAAC,CAAC,CACxF,CAIA,eAAeM,EAAU,CACrB,GAAI,CAAE,UAAAV,EAAW,YAAAlC,CAAY,EAAI,KAC7B6C,EAAMX,EAAU,IAAI,OAEpBY,GAAgBF,EAAS,aAAeH,GAAUzC,EAAY,WAAW,GAAKyC,GAAU,KAAK,YAAY,EACzGM,EACAC,EAIJ,OAAAF,EAAe,KAAK,IAAI,EAAGA,CAAY,EACvCA,EAAe,KAAK,IAAID,EAAKC,CAAY,EAGzCC,EAAY,KAAK,MAAMD,CAAY,EACnCC,EAAY,KAAK,IAAIA,EAAWF,EAAM,CAAC,EAGvCG,EAAgBF,EAAeC,EACxBb,EAAU,KAAKa,CAAS,EAC3Bb,EAAU,UAAUa,CAAS,EAAIC,CACzC,CACJ,EAEMC,GAAN,cAAgC5D,EAAc,CAC1C,QAAS,CACL,GAAI,CAAE,MAAAd,EAAO,QAAAI,CAAQ,EAAI,KACrB,CAAE,QAAAE,CAAQ,EAAIF,EACd,CAAE,WAAAuE,CAAW,EAAI3E,EACrB,OAAQE,EAAc,QAAS,KAAMF,EAAM,UAAU,IAAI,CAACe,EAAU6D,IAAM,CACtE,IAAInE,EAAc,CACd,KAAMM,EAAS,KACf,KAAMX,EAAQ,QAAQ,OAAOW,EAAS,IAAI,EAC1C,KAAMX,EAAQ,OAClB,EACA,OAAQF,EAAc,KAAM,CAAE,IAAKa,EAAS,IAAK,IAAK4D,EAAW,UAAU5D,EAAS,GAAG,CAAE,EACrFf,EAAM,MAASE,EAAcH,GAAkB,OAAO,OAAO,CAAC,EAAGgB,CAAQ,CAAC,EAC1Eb,EAAcQ,GAAkB,CAAE,MAAO,KAAM,UAAW,CAClD,mBACA,wBACA,CAACK,EAAS,WAAa,wBAC3B,EAAG,QAAS,CACR,YAAaA,EAAS,UAC1B,EAAG,YAAaN,EAAa,cAAe,kBAAmB,gBAAiBH,EAAQ,gBAAiB,mBAAoBA,EAAQ,mBAAoB,SAAUA,EAAQ,iBAAkB,YAAaA,EAAQ,mBAAoB,CAAC,CAAC,CACpP,CAAC,CAAC,CACN,CACJ,EAKMuE,GAAN,cAA4B/D,EAAc,CACtC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,UAAYM,GAAU,EAC3B,KAAK,WAAa,IAAI0D,EAC1B,CACA,QAAS,CACL,GAAI,CAAE,MAAA9E,EAAO,QAAAI,CAAQ,EAAI,KACzB,OAAQF,EAAc,MAAO,CAAE,IAAK,KAAK,UAAW,UAAW,mBAAoB,EAC/EA,EAAc,QAAS,CAAE,cAAe,GAAM,UAAWE,EAAQ,MAAM,SAAS,OAAO,EAAG,MAAO,CACzF,SAAUJ,EAAM,cAChB,MAAOA,EAAM,YACb,OAAQA,EAAM,SAClB,CAAE,EACFA,EAAM,kBACNE,EAAcwE,GAAmB,CAAE,WAAY,KAAK,WAAY,KAAM1E,EAAM,KAAM,UAAWA,EAAM,SAAU,CAAC,CAAC,CAAC,CAC5H,CACA,mBAAoB,CAChB,KAAK,aAAa,CACtB,CACA,oBAAqB,CACjB,KAAK,aAAa,CACtB,CACA,sBAAuB,CACf,KAAK,MAAM,UACX,KAAK,MAAM,SAAS,IAAI,CAEhC,CACA,cAAe,CACX,GAAI,CAAE,QAAAI,EAAS,MAAAJ,CAAM,EAAI,KACrBA,EAAM,UACNA,EAAM,cAAgB,MAET,KAAK,UAAU,QACjB,cACPA,EAAM,SAAS,IAAI0D,GAAoB,IAAIqB,GAAc,KAAK,UAAU,QAASC,GAAe,KAAK,WAAW,WAAYhF,EAAM,SAAS,EAAG,GAAO,EAAI,EAAG,KAAK,MAAM,YAAaI,EAAQ,QAAQ,YAAY,CAAC,CAG7N,CACJ,EACA,SAAS4E,GAAeC,EAAOrC,EAAW,CACtC,OAAOA,EAAU,IAAK7B,GAAakE,EAAMlE,EAAS,GAAG,CAAC,CAC1D,CAEA,SAASmE,GAAeC,EAAMzC,EAAQ,CAClC,IAAI0C,EAAY,CAAC,EACb,EACJ,IAAK,EAAI,EAAG,EAAI1C,EAAQ,GAAK,EACzB0C,EAAU,KAAK,CAAC,CAAC,EAErB,GAAID,EACA,IAAK,EAAI,EAAG,EAAIA,EAAK,OAAQ,GAAK,EAC9BC,EAAUD,EAAK,CAAC,EAAE,GAAG,EAAE,KAAKA,EAAK,CAAC,CAAC,EAG3C,OAAOC,CACX,CACA,SAASC,GAAsBC,EAAI5C,EAAQ,CACvC,IAAI6C,EAAQ,CAAC,EACb,GAAKD,EAKA,CACD,QAAS,EAAI,EAAG,EAAI5C,EAAQ,GAAK,EAC7B6C,EAAM,CAAC,EAAI,CACP,kBAAmBD,EAAG,kBACtB,QAASA,EAAG,QACZ,KAAM,CAAC,CACX,EAEJ,QAASE,KAAOF,EAAG,KACfC,EAAMC,EAAI,GAAG,EAAE,KAAK,KAAKA,CAAG,CAEpC,KAfI,SAAS,EAAI,EAAG,EAAI9C,EAAQ,GAAK,EAC7B6C,EAAM,CAAC,EAAI,KAenB,OAAOA,CACX,CAEA,IAAME,GAAN,cAA8B3E,EAAc,CACxC,QAAS,CACL,GAAI,CAAE,MAAAd,CAAM,EAAI,KAChB,OAAQE,EAAcwF,GAAmB,CAAE,UAAW,CAAC,uBAAuB,EAAG,QAAS,CAClF,IAAK1F,EAAM,IACX,OAAQA,EAAM,MAClB,EAAG,WAAY,KAAM,QAASA,EAAM,WAAW,OAAQ,QAASA,EAAM,WAAY,WAAYA,EAAM,WAAY,cAAeA,EAAM,cAAe,YAAaA,EAAM,YAAa,WAAYA,EAAM,WAAY,eAAgB,IAAM2F,GAAkB3F,EAAM,WAAYA,CAAK,EAAG,iBAAkB4F,GAAqB,WAAY,EAAK,EAAIhF,GAAkBV,EAAcU,EAAc,CAAE,MAAO,MAAO,UAAW,CAAC,8BAA+B,WAAW,CAAE,CAAC,CAAE,CACjd,CACJ,EACA,SAASgF,GAAoB5F,EAAO,CAChC,OAAOA,EAAM,SACjB,CAGA,SAAS6F,GAAiBC,EAAWC,EAAaC,EAAa,CAC3D,IAAIC,EAAY,IAAIC,GAChBH,GAAe,OACfE,EAAU,YAAcF,GAExBC,GAAe,OACfC,EAAU,YAAcD,GAE5B,IAAIG,EAAgBF,EAAU,QAAQH,CAAS,EAC3CM,EAAeC,GAAyBF,CAAa,EACrDG,EAAMC,GAASN,CAAS,EAC5B,OAAAK,EAAME,GAAWF,EAAK,CAAC,EAEhB,CAAE,SADMG,GAAWH,CAAG,EACV,aAAAF,CAAa,CACpC,CACA,SAASG,GAASN,EAAW,CACzB,GAAM,CAAE,eAAAS,CAAe,EAAIT,EACrBU,EAAYC,GAAU,CAACC,EAAOC,IAAYD,EAAQ,IAAMC,EAAS,CAACD,EAAOC,IAAY,CACvF,IAAIC,EAAeC,GAAkBf,EAAWY,EAAOC,CAAO,EAC1DG,EAAeC,GAAWH,EAAcJ,CAAS,EACjDQ,EAAQT,EAAeG,CAAK,EAAEC,CAAO,EACzC,MAAO,CACH,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGK,CAAK,EAAG,CAAE,eAAgBF,EAAa,CAAC,CAAE,CAAC,EAC3EE,EAAM,UAAYF,EAAa,CAAC,CACpC,CACJ,CAAC,EACD,OAAOC,GAAWR,EAAe,OAC3B,CAAE,MAAO,EAAG,aAAc,EAAG,WAAYA,EAAe,CAAC,EAAE,MAAO,EAClE,KAAMC,CAAS,EAAE,CAAC,CAC5B,CACA,SAASO,GAAWH,EAAcJ,EAAW,CACzC,GAAI,CAACI,EACD,MAAO,CAAC,CAAC,EAAG,CAAC,EAEjB,GAAI,CAAE,MAAAF,EAAO,aAAAO,EAAc,WAAAC,CAAW,EAAIN,EACtCD,EAAUM,EACVE,EAAQ,CAAC,EACb,KAAOR,EAAUO,GACbC,EAAM,KAAKX,EAAUE,EAAOC,CAAO,CAAC,EACpCA,GAAW,EAEf,OAAAQ,EAAM,KAAKC,EAAgB,EACpB,CACHD,EAAM,IAAIE,EAAW,EACrBF,EAAM,CAAC,EAAE,CAAC,CACd,CACJ,CACA,SAASC,GAAiBE,EAAGC,EAAG,CAC5B,OAAOA,EAAE,CAAC,EAAID,EAAE,CAAC,CACrB,CACA,SAASD,GAAYC,EAAG,CACpB,OAAOA,EAAE,CAAC,CACd,CACA,SAAST,GAAkBf,EAAW0B,EAAcC,EAAgB,CAChE,GAAI,CAAE,YAAAC,EAAa,eAAAnB,CAAe,EAAIT,EAClC6B,EAAepB,EAAeiB,CAAY,EAAEC,CAAc,EAC1DG,EAAeF,EAAYF,CAAY,EAAIG,EAAa,UACxDE,EAAWH,EAAY,OACvBhB,EAAQc,EAEZ,KAAOd,EAAQmB,GAAYH,EAAYhB,CAAK,EAAIkB,EAAclB,GAAS,EACnE,CACJ,KAAOA,EAAQmB,EAAUnB,GAAS,EAAG,CACjC,IAAIoB,EAAUvB,EAAeG,CAAK,EAC9BM,EACAe,EAAcC,GAAaF,EAASH,EAAa,KAAK,MAAOM,EAAe,EAC5EhB,EAAec,EAAY,CAAC,EAAIA,EAAY,CAAC,EAC7Cb,EAAaD,EACjB,MACCD,EAAQc,EAAQZ,CAAU,IACvBF,EAAM,KAAK,MAAQW,EAAa,KAAK,KACrCT,GAAc,EAElB,GAAID,EAAeC,EACf,MAAO,CAAE,MAAAR,EAAO,aAAAO,EAAc,WAAAC,CAAW,CAEjD,CACA,OAAO,IACX,CACA,SAASb,GAAW6B,EAAeC,EAAgB,CAC/C,IAAMC,EAAc3B,GAAU,CAAC4B,EAAMC,EAAYC,IAAkBC,GAAcH,CAAI,EAAG,CAACA,EAAMC,EAAYC,IAAkB,CACzH,GAAI,CAAE,eAAAE,EAAgB,UAAAC,CAAU,EAAIL,EAChCM,EAAeD,EAAYH,EAC3BK,EAAoBF,EAAYC,EAChCE,EACAC,EAAc,CAAC,EACnB,GAAI,CAACL,EAAe,OAChBI,EAAWV,MAGX,SAASY,KAAaN,EAClB,GAAII,IAAa,OAAW,CACxB,IAAIG,EAAMZ,EAAYW,EAAWT,EAAYK,CAAY,EACzDE,EAAWG,EAAI,CAAC,EAChBF,EAAY,KAAKE,EAAI,CAAC,CAAC,CAC3B,KACK,CACD,IAAIA,EAAMZ,EAAYW,EAAWF,EAAU,CAAC,EAC5CC,EAAY,KAAKE,EAAI,CAAC,CAAC,CAC3B,CAGR,IAAIC,GAAgBJ,EAAWP,GAAcM,EAC7C,MAAO,CAACC,EAAWI,EAAc,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGZ,CAAI,EAAG,CAAE,UAAWY,EAAc,eAAgBH,CAAY,CAAC,CAAC,CACrI,CAAC,EACD,OAAOZ,EAAc,IAAKG,GAASD,EAAYC,EAAM,EAAG,CAAC,EAAE,CAAC,CAAC,CACjE,CAEA,SAAS/B,GAAW4B,EAAe,CAC/B,IAAIgB,EAAQ,CAAC,EACPC,EAAc1C,GAAU,CAAC4B,EAAMe,EAAYC,IAAeb,GAAcH,CAAI,EAAG,CAACA,EAAMe,EAAYC,IAAe,CACnH,IAAIC,EAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGjB,CAAI,EAAG,CAAE,WAAAe,EAChD,WAAAC,EAAY,aAAc,CAAE,CAAC,EACjC,OAAAH,EAAM,KAAKI,CAAI,EACPA,EAAK,aAAeC,EAAalB,EAAK,eAAgBe,EAAaf,EAAK,UAAWgB,EAAa,CAAC,EAAI,CACjH,CAAC,EACD,SAASE,EAAaC,EAAOJ,EAAYC,EAAY,CACjD,IAAII,EAAe,EACnB,QAASpB,KAAQmB,EACbC,EAAe,KAAK,IAAIN,EAAYd,EAAMe,EAAYC,CAAU,EAAGI,CAAY,EAEnF,OAAOA,CACX,CACA,OAAAF,EAAarB,EAAe,EAAG,CAAC,EACzBgB,CACX,CAEA,SAASzC,GAAUiD,EAASC,EAAU,CAClC,IAAMC,EAAQ,CAAC,EACf,MAAO,IAAIC,IAAS,CAChB,IAAIC,EAAMJ,EAAQ,GAAGG,CAAI,EACzB,OAAQC,KAAOF,EACTA,EAAME,CAAG,EACRF,EAAME,CAAG,EAAIH,EAAS,GAAGE,CAAI,CACxC,CACJ,CAEA,SAASE,GAAkB/E,EAAMgF,EAASlI,EAAa,KAAMmI,EAAiB,EAAG,CAC7E,IAAIC,EAAU,CAAC,EACf,GAAIpI,EACA,QAAS2C,EAAI,EAAGA,EAAIO,EAAK,OAAQP,GAAK,EAAG,CACrC,IAAIY,EAAML,EAAKP,CAAC,EACZ0F,EAAYrI,EAAW,eAAeuD,EAAI,MAAO2E,CAAO,EACxDI,EAAU,KAAK,IAAID,GAAaF,GAAkB,GACtDnI,EAAW,eAAeuD,EAAI,IAAK2E,CAAO,CAAC,EAC3CE,EAAQ,KAAK,CACT,MAAO,KAAK,MAAMC,CAAS,EAC3B,IAAK,KAAK,MAAMC,CAAO,CAC3B,CAAC,CACL,CAEJ,OAAOF,CACX,CACA,SAASG,GAAuBrF,EAAMsF,EACtCC,EAAkBC,EAAe,CAC7B,IAAI7E,EAAY,CAAC,EACb8E,EAAW,CAAC,EAChB,QAAShG,EAAI,EAAGA,EAAIO,EAAK,OAAQP,GAAK,EAAG,CACrC,IAAIyF,EAAUI,EAAW7F,CAAC,EACtByF,EACAvE,EAAU,KAAK,CACX,MAAOlB,EACP,UAAW,EACX,KAAMyF,CACV,CAAC,EAGDO,EAAS,KAAKzF,EAAKP,CAAC,CAAC,CAE7B,CACA,GAAI,CAAE,SAAAiG,EAAU,aAAAzE,CAAa,EAAIP,GAAiBC,EAAW4E,EAAkBC,CAAa,EACxFG,EAAgB,CAAC,EACrB,QAASC,KAAWF,EAChBC,EAAc,KAAK,CACf,IAAK3F,EAAK4F,EAAQ,KAAK,EACvB,KAAMA,CACV,CAAC,EAEL,QAASC,KAAWJ,EAChBE,EAAc,KAAK,CAAE,IAAKE,EAAS,KAAM,IAAK,CAAC,EAEnD,MAAO,CAAE,cAAAF,EAAe,aAAA1E,CAAa,CACzC,CAEA,IAAM6E,GAAsBnL,GAAgB,CACxC,KAAM,UACN,OAAQ,UACR,SAAU,EACd,CAAC,EACKoL,GAAN,cAA2BpK,EAAc,CACrC,QAAS,CACL,OAAQZ,EAAciL,GAAe,OAAO,OAAO,CAAC,EAAG,KAAK,MAAO,CAAE,UAAW,CACxE,oBACA,aACA,KAAK,MAAM,SAAW,yBAC1B,EAAG,kBAAmBF,EAAoB,CAAC,CAAC,CACpD,CACJ,EAEMG,GAAN,cAAsBtK,EAAc,CAChC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,cAAgBuK,GAAQC,EAAa,CAC9C,CAEA,QAAS,CACL,GAAI,CAAE,MAAAtL,EAAO,QAAAI,CAAQ,EAAI,KACrB,CAAE,QAAAE,CAAQ,EAAIF,EACdmL,EAAiBjL,EAAQ,aACzBkL,EACFxL,EAAM,WAAaA,EAAM,UAAU,MAChCA,EAAM,aAAeA,EAAM,YAAY,MACvCuL,GAAkBvL,EAAM,mBACzB,CAAC,EACDyL,EACFzL,EAAM,WAAaA,EAAM,UAAU,mBAChCA,EAAM,aAAeA,EAAM,YAAY,mBACxC,CAAC,EACD0L,EAAe,KAAK,cAAc1L,EAAM,YAAaM,EAAQ,UAAU,EAC3E,OAAQJ,EAAcyL,GAAkB,CAAE,MAAO,KAAM,MAAO3L,EAAM,MAAO,UAAW,CAC9E,kBACA,GAAIA,EAAM,iBAAmB,CAAC,CAClC,EAAG,QAAS,OAAO,OAAO,CAAE,KAAM,UAAW,EAAGA,EAAM,cAAc,EAAG,KAAMA,EAAM,KAAM,YAAaA,EAAM,YAAa,WAAYA,EAAM,WAAY,iBAAkBA,EAAM,gBAAiB,EAAIY,GAAkBV,EAAc,MAAO,CAAE,UAAW,uBAAwB,EAChRA,EAAc,MAAO,CAAE,UAAW,oBAAqB,EACnD,KAAK,eAAeF,EAAM,iBAAkB,cAAc,EAC1D,KAAK,eAAeA,EAAM,YAAa,UAAU,EACjD,KAAK,eAAeA,EAAM,kBAAmB,WAAW,CAAC,EAC7DE,EAAc,MAAO,CAAE,UAAW,wBAAyB,EAAG,KAAK,aAAawL,EAAcD,EAA8B,GAAO,GAAO,EAAK,CAAC,EAChJvL,EAAc,MAAO,CAAE,UAAW,wBAAyB,EAAG,KAAK,aAAasL,EAAY,CAAC,EAAG,EAAQxL,EAAM,UAAY,EAAQA,EAAM,YAAc,EAAQuL,EAAiB,QAAQ,CAAC,EACxLrL,EAAc,MAAO,CAAE,UAAW,qCAAsC,EAAG,KAAK,mBAAmBF,EAAM,gBAAgB,CAAC,EAC1H4L,GAAwBtL,CAAO,GAAMJ,EAAcU,EAAc,CAAE,MAAO,MAAO,UAAW,CAAC,sBAAsB,CAAE,CAAC,CAAE,CAAE,CAClI,CACA,aAAa8K,EAAcG,EAAgBC,EAAYC,EAAYC,EAAiBC,EAAW,CAC3F,GAAI,CAAE,MAAAjM,CAAM,EAAI,KAChB,OAAIA,EAAM,SACC2F,GAAkB+F,EAAc1L,CAAK,EAEzC,KAAK,uBAAuB0L,EAAcG,EAAgBC,EAAYC,EAAYC,EAAiBC,CAAS,CACvH,CACA,uBAAuB9G,EACvB0G,EAAgBC,EAAYC,EAAYC,EAAiBC,EAAW,CAChE,GAAI,CAAE,cAAAtB,EAAe,iBAAAuB,EAAkB,iBAAAxB,EAAkB,eAAAN,CAAe,EAAI,KAAK,QAAQ,QACrF,CAAE,KAAAvG,EAAM,WAAA5B,EAAY,eAAAkK,EAAgB,WAAAC,EAAY,QAAAhJ,CAAQ,EAAI,KAAK,MACjEiJ,EAAWP,GAAcC,GAAcC,EACvCvB,EAAaP,GAAkB/E,EAAMtB,EAAM5B,EAAYmI,CAAc,EACrE,CAAE,cAAAU,EAAe,aAAA1E,CAAa,EAAIoE,GAAuBrF,EAAMsF,EAAYC,EAAkBC,CAAa,EAC9G,OAAQzK,EAAcoM,GAAU,KAC5B,KAAK,mBAAmBlG,EAAcjB,CAAI,EAC1C2F,EAAc,IAAKyB,GAAiB,CAChC,GAAI,CAAE,IAAA/G,EAAK,KAAAiE,CAAK,EAAI8C,EAChBC,EAAahH,EAAI,WAAW,SAAS,WACrCiH,EAAYJ,GAAY,GAAQ,CAACR,EAAeW,CAAU,GAAK/C,GAC/DiD,EAASC,GAAiBlD,GAAQA,EAAK,IAAI,EAC3CmD,EAAU,CAACP,GAAY5C,EAAQ,KAAK,iBAAiBA,CAAI,EAAI,CAAE,KAAM,EAAG,MAAO,CAAE,EACjFoD,EAAU,EAAQpD,GAASA,EAAK,aAAe,EAC/CqD,EAAU,EAAQrD,GAAUA,EAAK,KAAK,IAAMA,EAAK,KAAK,MAASyC,EACnE,OAAQhM,EAAc,MAAO,CAAE,UAAW,6BACjC2M,EAAU,mCAAqC,IAAK,IAAKZ,GAAaO,EAAY,MAAO,OAAO,OAAO,OAAO,OAAO,CAAE,WAAYC,EAAY,GAAK,QAAS,EAAGC,CAAM,EAAGE,CAAM,CAAE,EACtL1M,EAAcgL,GAAc,OAAO,OAAO,CAAE,IAAK1F,EAAK,WAAYsG,EAAY,WAAYC,EAAY,gBAAiBC,EAAiB,WAAYQ,IAAeL,EAAgB,QAASW,CAAQ,EAAGC,GAAWvH,EAAK4G,EAAYhJ,CAAO,CAAC,CAAC,CAAC,CACrP,CAAC,CAAC,CACV,CAEA,mBAAmBgD,EAAcjB,EAAM,CACnC,GAAI,CAAE,cAAA6H,EAAe,YAAAvL,EAAa,WAAA2K,EAAY,QAAAhJ,EAAS,eAAA+I,EAAgB,UAAAc,EAAW,YAAAC,CAAY,EAAI,KAAK,MACvG,OAAQhN,EAAcoM,GAAU,KAAMlG,EAAa,IAAK+G,GAAgB,CACpE,IAAIC,EAAcT,GAAiBQ,EAAY,IAAI,EAC/CE,EAAaC,GAAuBH,EAAY,QAAShI,CAAI,EACjE,OAAQjF,EAAcuF,GAAiB,CAAE,IAAK8H,GAAeC,GAAwBH,CAAU,CAAC,EAAG,WAAYA,EAAY,IAAKD,EAAY,IAAK,OAAQA,EAAY,OAAQ,cAAeJ,EAAe,YAAavL,EAAa,WAAY2K,EAAY,QAAShJ,EAAS,eAAgB+I,EAAgB,UAAWc,EAAW,YAAaC,CAAY,CAAC,CACnW,CAAC,CAAC,CACN,CACA,eAAe/H,EAAMsI,EAAU,CAC3B,GAAI,CAAE,MAAAzN,EAAO,QAAAI,CAAQ,EAAI,KAErBsN,EADaxD,GAAkB/E,EAAMnF,EAAM,KAAMA,EAAM,WAAYI,EAAQ,QAAQ,cAAc,EAC3E,IAAI,CAACiK,EAASzF,IAAM,CAC1C,IAAIY,EAAML,EAAKP,CAAC,EAChB,OAAQ1E,EAAc,MAAO,CAAE,IAAKyN,GAAmBnI,EAAI,UAAU,EAAG,UAAW,yBAA0B,MAAOmH,GAAiBtC,CAAO,CAAE,EAAGoD,IAAa,WAC1JvN,EAAc0N,GAAS,OAAO,OAAO,CAAE,IAAKpI,CAAI,EAAGuH,GAAWvH,EAAKxF,EAAM,WAAYA,EAAM,OAAO,CAAC,CAAC,EACpG6N,GAAWJ,CAAQ,CAAC,CAC5B,CAAC,EACD,OAAOvN,EAAcoM,GAAU,KAAMoB,CAAQ,CACjD,CACA,mBAAmBvI,EAAM,CACrB,GAAI,CAAE,WAAAlD,EAAY,KAAA4B,CAAK,EAAI,KAAK,MAChC,OAAK5B,EAGEkD,EAAK,IAAI,CAACK,EAAKZ,IAAO1E,EAAcoD,GAEzC,CAEE,IAAKsB,EAAG,UAAW,CAAC,gCAAgC,EAAG,QAAS,CAC5D,IAAK3C,EAAW,eAAeuD,EAAI,MAAO3B,CAAI,CAClD,EAAG,OAAQ,GAAO,KAAMA,CAAK,CAAC,CAAE,EARzB,IASf,CACA,iBAAiBiK,EAAY,CACzB,GAAI,CAAE,MAAAC,EAAO,QAAAzN,CAAQ,EAAI,KAAK,QAC1B0N,EAAgB1N,EAAQ,iBACxB2N,EAAYH,EAAW,WACvBI,EAAWJ,EAAW,WAAaA,EAAW,UAC9CK,EACAC,EACAJ,IAEAE,EAAW,KAAK,IAAI,EAAGD,GAAaC,EAAWD,GAAa,CAAC,GAE7DF,GACAI,EAAO,EAAID,EACXE,EAAQH,IAGRE,EAAOF,EACPG,EAAQ,EAAIF,GAEhB,IAAIlO,EAAQ,CACR,OAAQ8N,EAAW,WAAa,EAChC,KAAMK,EAAO,IAAM,IACnB,MAAOC,EAAQ,IAAM,GACzB,EACA,OAAIJ,GAAiB,CAACF,EAAW,eAE7B9N,EAAM+N,EAAQ,aAAe,aAAa,EAAI,GAAK,GAEhD/N,CACX,CACJ,EACA,SAAS2F,GAAkB+F,EAAc,CAAE,WAAAU,EAAY,QAAAhJ,EAAS,eAAA+I,EAAgB,UAAAc,EAAW,YAAAC,CAAY,EAAG,CACtG,IAAImB,GAAmBpB,EAAYA,EAAU,kBAAoB,QAC5DC,EAAcA,EAAY,kBAAoB,OAC/C,CAAC,EACL,OAAQhN,EAAcoM,GAAU,KAAMZ,EAAa,IAAKlG,GAAQ,CAC5D,IAAIgH,EAAahH,EAAI,WAAW,SAAS,WACzC,OAAQtF,EAAc,MAAO,CAAE,IAAKsM,EAAY,MAAO,CAAE,WAAY6B,EAAgB7B,CAAU,EAAI,SAAW,EAAG,CAAE,EAC/GtM,EAAcgL,GAAc,OAAO,OAAO,CAAE,IAAK1F,EAAK,WAAY,GAAO,WAAY,GAAO,gBAAiB,GAAO,WAAYgH,IAAeL,EAAgB,QAAS,EAAM,EAAGY,GAAWvH,EAAK4G,EAAYhJ,CAAO,CAAC,CAAC,CAAC,CAC/N,CAAC,CAAC,CACN,CACA,SAASuJ,GAAiBlC,EAAY,CAClC,OAAKA,EAGE,CACH,IAAKA,EAAW,MAChB,OAAQ,CAACA,EAAW,GACxB,EALW,CAAE,IAAK,GAAI,OAAQ,EAAG,CAMrC,CACA,SAAS6C,GAAuBgB,EAAYC,EAAS,CACjD,OAAOD,EAAW,IAAKE,GAAaD,EAAQC,EAAS,KAAK,CAAC,CAC/D,CAEA,IAAMC,GAAN,cAA8B3N,EAAc,CACxC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,iBAAmBuK,GAAQnG,EAAc,EAC9C,KAAK,iBAAmBmG,GAAQnG,EAAc,EAC9C,KAAK,sBAAwBmG,GAAQnG,EAAc,EACnD,KAAK,sBAAwBmG,GAAQnG,EAAc,EACnD,KAAK,uBAAyBmG,GAAQnG,EAAc,EACpD,KAAK,eAAiBmG,GAAQhG,EAAqB,EACnD,KAAK,iBAAmBgG,GAAQhG,EAAqB,EACrD,KAAK,UAAYjE,GAAU,EAC3B,KAAK,WAAa,IAAI0D,EAC1B,CACA,QAAS,CACL,GAAI,CAAE,MAAA9E,EAAO,QAAAI,CAAQ,EAAI,KACrBiD,EAAkBjD,EAAQ,QAAQ,cAClCJ,EAAM,YACNA,EAAM,WAAW,eAAeA,EAAM,OAAO,EAC7C0C,EAAS1C,EAAM,MAAM,OACrB0O,EAAmB,KAAK,iBAAiB1O,EAAM,YAAa0C,CAAM,EAClEiM,EAAmB,KAAK,iBAAiB3O,EAAM,YAAa0C,CAAM,EAClEkM,EAAwB,KAAK,sBAAsB5O,EAAM,iBAAkB0C,CAAM,EACjFmM,EAAwB,KAAK,sBAAsB7O,EAAM,iBAAkB0C,CAAM,EACjFoM,EAAyB,KAAK,uBAAuB9O,EAAM,kBAAmB0C,CAAM,EACpFqM,EAAiB,KAAK,eAAe/O,EAAM,UAAW0C,CAAM,EAC5DsM,EAAmB,KAAK,iBAAiBhP,EAAM,YAAa0C,CAAM,EACtE,OAAQxC,EAAc,MAAO,CAAE,UAAW,mBAAoB,IAAK,KAAK,SAAU,EAC9EA,EAAc,QAAS,CAAE,KAAM,eAAgB,MAAO,CAC9C,SAAUF,EAAM,cAChB,MAAOA,EAAM,WACjB,CAAE,EACFA,EAAM,kBACNE,EAAc,QAAS,CAAE,KAAM,cAAe,EAC1CA,EAAc,KAAM,CAAE,KAAM,KAAM,EAC9BF,EAAM,MAASE,EAAc,KAAM,CAAE,cAAe,GAAM,UAAW,kCAAmC,EACpGA,EAAc,MAAO,CAAE,UAAW,uBAAwB,EACtDA,EAAc,MAAO,CAAE,UAAW,qCAAsC,EAAG,OAAOmD,GAAoB,UAAanD,EAAcoD,GAAuB,CAAE,UAAW,CAAC,iCAAiC,EAAG,QAAS,CAAE,IAAKD,CAAgB,EAAG,OAAQ,GAAM,KAAMrD,EAAM,OAAQ,CAAC,CAAE,CAAC,CAAC,EAC5RA,EAAM,MAAM,IAAI,CAACiP,EAAMrK,IAAO1E,EAAckL,GAAS,CAAE,IAAK6D,EAAK,IAAK,MAAO,KAAK,WAAW,UAAUA,EAAK,GAAG,EAAG,YAAajP,EAAM,YAAa,KAAMiP,EAAK,KAAM,QAASjP,EAAM,QAAS,WAAYA,EAAM,WAAY,iBAAkBiP,EAAK,iBAAkB,eAAgBA,EAAK,eAAgB,gBAAiBA,EAAK,gBAAiB,cAAeA,EAAK,cAAe,YAAaP,EAAiB9J,CAAC,EAAG,YAAa+J,EAAiB/J,CAAC,EAAG,iBAAkBgK,EAAsBhK,CAAC,EAAG,iBAAkBiK,EAAsBjK,CAAC,EAAG,kBAAmBkK,EAAuBlK,CAAC,EAAG,UAAWmK,EAAenK,CAAC,EAAG,YAAaoK,EAAiBpK,CAAC,EAAG,WAAY5E,EAAM,WAAY,eAAgBA,EAAM,eAAgB,SAAUA,EAAM,QAAS,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CACnvB,CACA,mBAAoB,CAChB,KAAK,aAAa,CACtB,CACA,oBAAqB,CACjB,KAAK,aAAa,CACtB,CACA,cAAe,CACX,GAAI,CAAE,MAAAA,CAAM,EAAI,KACZA,EAAM,aACNA,EAAM,cAAgB,MAEtBA,EAAM,YAAY,IAAI+E,GAAc,KAAK,UAAU,QAASmK,GAAe,KAAK,WAAW,WAAYlP,EAAM,KAAK,EAAG,GACrH,EAAK,CAAC,CAEd,CACJ,EACA,SAASkP,GAAejK,EAAOkK,EAAO,CAClC,OAAOA,EAAM,IAAKF,GAAShK,EAAMgK,EAAK,GAAG,CAAC,CAC9C,CAIA,IAAMG,GAAN,cAAuBjO,EAAc,CACjC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqBkK,GAAQgE,EAAkB,EACpD,KAAK,MAAQ,CACT,WAAY,IAChB,EACA,KAAK,aAAgBC,GAAO,CACpBA,EACA,KAAK,QAAQ,6BAA6B,KAAM,CAC5C,GAAAA,EACA,kBAAmB,KAAK,MAAM,iBAClC,CAAC,EAGD,KAAK,QAAQ,+BAA+B,IAAI,CAExD,EACA,KAAK,oBAAuBC,GAAY,CACpC,GAAI,CAAE,mBAAAC,CAAmB,EAAI,KAAK,MAC9B,CAAE,WAAAvN,CAAW,EAAI,KAAK,MAC1B,GAAIuN,GAAsBvN,EAAY,CAClC,GAAIsN,EAAQ,KAAM,CACd,IAAIE,EAAMxN,EAAW,eAAesN,EAAQ,IAAI,EAChDE,EAAM,KAAK,KAAKA,CAAG,EACfA,IACAA,GAAO,GAEXD,EAAmBC,CAAG,CAC1B,CACA,MAAO,EACX,CACA,MAAO,EACX,EACA,KAAK,gBAAmBC,GAAc,CAClC,KAAK,UAAYA,CACrB,EACA,KAAK,iBAAoBzN,GAAe,CACpC,KAAK,SAAS,CAAE,WAAAA,CAAW,CAAC,EACxB,KAAK,MAAM,cACX,KAAK,MAAM,aAAaA,CAAU,CAE1C,CACJ,CACA,QAAS,CACL,GAAI,CAAE,MAAAjC,EAAO,MAAA2P,CAAM,EAAI,KACvB,OAAQzP,EAAc,MAAO,CAAE,UAAW,mBAAoB,IAAK,KAAK,aAAc,MAAO,CAGrF,MAAOF,EAAM,YACb,SAAUA,EAAM,aACpB,CAAE,EACFE,EAAc2E,GAAe,CAAE,KAAM7E,EAAM,KAAM,YAAaA,EAAM,YAAa,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,UAAWA,EAAM,WAAaA,EAAM,aAAe,GAAI,cAAeA,EAAM,cAAe,kBAAmBA,EAAM,KAAOA,EAAM,kBAAoB,KAAqD,SAAU,KAAK,gBAAiB,CAAC,EACxXE,EAAcuO,GAAiB,CAAE,MAAOzO,EAAM,MAAO,KAAMA,EAAM,KAAM,YAAaA,EAAM,YAAa,iBAAkBA,EAAM,iBAAkB,YAAaA,EAAM,YAAa,YAAaA,EAAM,YAAa,kBAAmBA,EAAM,kBAAmB,eAAgBA,EAAM,eAAgB,UAAWA,EAAM,UAAW,YAAaA,EAAM,YAAa,WAAYA,EAAM,WAAY,QAASA,EAAM,QAAS,iBAAkBA,EAAM,iBAAkB,YAAaA,EAAM,YAAa,cAAeA,EAAM,cAAe,kBAAmBA,EAAM,kBAAmB,WAAY2P,EAAM,WAAY,YAAa,KAAK,gBAAiB,SAAU3P,EAAM,QAAS,CAAC,CAAC,CACnpB,CACA,mBAAoB,CAChB,KAAK,gBAAkB,KAAK,QAAQ,sBAAsB,KAAK,mBAAmB,CACtF,CACA,mBAAmB4P,EAAW,CAC1B,KAAK,gBAAgB,OAAOA,EAAU,cAAgB,KAAK,MAAM,WAAW,CAChF,CACA,sBAAuB,CACnB,KAAK,gBAAgB,OAAO,CAChC,CACA,SAASC,EAAcC,EAAa,CAChC,GAAI,CAAE,QAAAzP,EAAS,QAAAC,CAAQ,EAAI,KAAK,QAC5B,CAAE,UAAAoP,CAAU,EAAI,KAChB,CAAE,YAAAjO,CAAY,EAAI,KAAK,MACvB,CAAE,WAAAQ,CAAW,EAAI,KAAK,MACtB,CAAE,aAAA8N,EAAc,aAAAC,CAAa,EAAI,KAAK,mBAAmB,KAAK,MAAM,aAAc1P,EAAQ,YAAY,EACtG2P,EAAWP,EAAU,YAAYG,CAAY,EAC7CrL,EAAYvC,EAAW,UAAU,WAAW6N,CAAW,EAC3D,GAAIG,GAAY,MAAQzL,GAAa,KAAM,CACvC,IAAIyK,EAAO,KAAK,MAAM,MAAMgB,CAAQ,EAChCC,EAAUjO,EAAW,UAAU,KAAKuC,CAAS,EAC7C2L,EAAalO,EAAW,UAAU,UAAUuC,CAAS,EACrD4L,GAAWN,EAAcI,GAAWC,EACpCE,EAAiB,KAAK,MAAMD,EAAUJ,CAAY,EAClDM,EAAY9L,EAAYwL,EAAeK,EACvCE,EAAU,KAAK,MAAM,MAAMN,CAAQ,EAAE,KACrCO,EAAOC,GAAahP,EAAY,YAAaiP,GAAiBX,EAAcO,CAAS,CAAC,EACtFK,EAAQtQ,EAAQ,IAAIkQ,EAASC,CAAI,EACjCI,EAAMvQ,EAAQ,IAAIsQ,EAAOZ,CAAY,EACzC,MAAO,CACH,YAAAtO,EACA,SAAU,OAAO,OAAO,CAAE,MAAO,CAAE,MAAAkP,EAAO,IAAAC,CAAI,EAAG,OAAQ,EAAM,EAAG3B,EAAK,aAAa,EACpF,MAAOS,EAAU,IAAIO,CAAQ,EAC7B,KAAM,CACF,KAAMP,EAAU,MAAMO,CAAQ,EAC9B,MAAOP,EAAU,OAAOO,CAAQ,EAChC,IAAKC,EACL,OAAQA,EAAUC,CACtB,EACA,MAAO,CACX,CACJ,CACA,OAAO,IACX,CACJ,EACA,SAASd,GAAmBzL,EAAciN,EAAsB,CAC5D,IAAId,EAAec,GAAwBjN,EACvCoM,EAAec,GAAqBlN,EAAcmM,CAAY,EAClE,OAAIC,IAAiB,OACjBD,EAAenM,EACfoM,EAAe,GAGZ,CAAE,aAAAD,EAAc,aAAAC,CAAa,CACxC,CAEA,IAAMe,GAAN,cAAgCC,EAAO,CACnC,WAAWtP,EAAOuP,EAAW,CACzB,IAAI9L,EAAO,CAAC,EACZ,QAAS+L,EAAM,EAAGA,EAAMD,EAAU,OAAQC,GAAO,EAAG,CAChD,IAAIC,EAAWC,GAAgB1P,EAAOuP,EAAUC,CAAG,CAAC,EAChDC,GACAhM,EAAK,KAAK,CACN,MAAOgM,EAAS,MAChB,IAAKA,EAAS,IACd,QAASA,EAAS,MAAM,QAAQ,IAAMzP,EAAM,MAAM,QAAQ,EAC1D,MAAOyP,EAAS,IAAI,QAAQ,IAAMzP,EAAM,IAAI,QAAQ,EACpD,IAAAwP,CACJ,CAAC,CAET,CACA,OAAO/L,CACX,CACJ,EAEMkM,GAAN,cAA0BlQ,EAAc,CACpC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiBkK,GAAQiG,EAAc,EAC5C,KAAK,OAAS,IAAIP,GAClB,KAAK,YAAc3P,GAAU,CACjC,CACA,QAAS,CACL,GAAI,CAAE,MAAApB,EAAO,QAAAI,CAAQ,EAAI,KACrB,CAAE,YAAAqB,EAAa,cAAA8P,CAAc,EAAIvR,EACjC,CAAE,aAAAwR,EAAc,iBAAAC,CAAiB,EAAIrR,EAAQ,QAC7C6Q,EAAY,KAAK,eAAeM,EAAe9P,EAAarB,EAAQ,OAAO,EAG/E,OAAQF,EAAciD,GAAU,CAAE,KAAMqO,EAAe,SAAW,KAAM,EAAG,CAACpO,EAASgJ,IAAgBlM,EAAckP,GAAU,OAAO,OAAO,CAAE,IAAK,KAAK,WAAY,EAAG,KAAK,OAAO,WAAWpP,EAAOyB,EAAa,KAAMrB,EAAS6Q,CAAS,EAAG,CAAE,SAAUjR,EAAM,SAAU,KAAMA,EAAM,KAAM,YAAayB,EAAa,UAAWzB,EAAM,UAAW,aAAcA,EAAM,aAAc,MAAOuR,EAAc,MAAM,CAAC,EAAG,kBAAmBvR,EAAM,kBAAmB,cAAeA,EAAM,cAAe,YAAaA,EAAM,YAAa,aAAcA,EAAM,aAAc,WAAYA,EAAM,WAAY,QAASoD,EAAS,iBAAkBoO,GAAgB,KAAK,OAAO,aAAapO,EAAS3B,EAAagQ,EAAkBrR,EAAS6Q,CAAS,EAAG,WAAY7E,EAAY,mBAAoBpM,EAAM,mBAAoB,aAAcA,EAAM,YAAa,CAAC,CAAC,CAAE,CAC1zB,CACJ,EACA,SAASsR,GAAeC,EAAe9P,EAAapB,EAAS,CACzD,IAAIqR,EAAS,CAAC,EACd,QAAS7N,KAAQ0N,EAAc,YAC3BG,EAAO,KAAK,CACR,MAAOrR,EAAQ,IAAIwD,EAAMpC,EAAY,WAAW,EAChD,IAAKpB,EAAQ,IAAIwD,EAAMpC,EAAY,WAAW,CAClD,CAAC,EAEL,OAAOiQ,CACX,CAIA,IAAMC,GAAsB,CACxB,CAAE,MAAO,CAAE,EACX,CAAE,QAAS,EAAG,EACd,CAAE,QAAS,EAAG,EACd,CAAE,QAAS,EAAG,EACd,CAAE,QAAS,EAAG,CAClB,EACA,SAASC,GAAeC,EAAaC,EAAaC,EAAuBnO,EAAcvD,EAAS,CAC5F,IAAI2R,EAAW,IAAI,KAAK,CAAC,EACrBC,EAAWJ,EACXK,EAAe/N,GAAe,CAAC,EAC/BgO,EAAgBJ,GAAyBK,GAAqBxO,CAAY,EAC1EyO,EAAQ,CAAC,EACb,KAAOnO,GAAU+N,CAAQ,EAAI/N,GAAU4N,CAAW,GAAG,CACjD,IAAIjO,EAAOxD,EAAQ,IAAI2R,EAAUC,CAAQ,EACrCK,EAAYxB,GAAqBoB,EAAcC,CAAa,IAAM,KACtEE,EAAM,KAAK,CACP,KAAAxO,EACA,KAAMoO,EACN,IAAKpO,EAAK,YAAY,EACtB,WAAY0O,GAAoB1O,CAAI,EACpC,UAAAyO,CACJ,CAAC,EACDL,EAAWxB,GAAawB,EAAUrO,CAAY,EAC9CsO,EAAezB,GAAayB,EAActO,CAAY,CAC1D,CACA,OAAOyO,CACX,CAEA,SAASD,GAAqBxO,EAAc,CACxC,IAAIgB,EACAuN,EACAK,EAEJ,IAAK5N,EAAI+M,GAAoB,OAAS,EAAG/M,GAAK,EAAGA,GAAK,EAGlD,GAFAuN,EAAgBhO,GAAewN,GAAoB/M,CAAC,CAAC,EACrD4N,EAAgB1B,GAAqBqB,EAAevO,CAAY,EAC5D4O,IAAkB,MAAQA,EAAgB,EAC1C,OAAOL,EAGf,OAAOvO,CACX,CAEA,IAAM6O,GAAN,cAA8BvR,EAAa,CACvC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqBmK,GAAQqH,EAAkB,EACpD,KAAK,eAAiBrH,GAAQuG,EAAc,CAChD,CACA,QAAS,CACL,GAAI,CAAE,QAAAtR,EAAS,QAAAD,EAAS,qBAAAsS,CAAqB,EAAI,KAAK,QAClD,CAAE,MAAA3S,CAAM,EAAI,KACZ,CAAE,YAAAyB,CAAY,EAAIzB,EAClBuR,EAAgB,KAAK,mBAAmB9P,EAAakR,CAAoB,EACzEC,EAAa,KAAK,eAAe,WAAW5S,CAAK,EACjD4C,EAAY,KAAK,eAAenB,EAAY,YAAaA,EAAY,YAAanB,EAAQ,kBAAmBA,EAAQ,aAAcD,CAAO,EAC1I,CAAE,YAAAsC,CAAY,EAAIrC,EAClBuS,EAAkB,CAAClQ,EACnBmQ,EAAkBnQ,EAClBoQ,EAAgBzS,EAAQ,YAAeJ,EAAc8S,GAAW,CAAE,MAAOzB,EAAc,YAAa,YAAa9P,EAAa,qBAAsB,GAAM,YAAaoR,EAAkB,KAAK,eAAiB,IAAK,CAAC,EACrN1Q,EAAiB7B,EAAQ,aAAe,KAAY2C,GAAgB/C,EAAc+S,GAAU,OAAO,OAAO,CAAC,EAAGL,EAAW,OAAQ,CAAE,YAAanR,EAAa,cAAe8P,EAAe,iBAAkBjR,EAAQ,iBAAkB,cAAe2C,EAAW,cAAe,aAAcA,EAAW,kBAAmB,eAAgB4P,EAAkB,KAAK,mBAAqB,KAAM,gBAAiB,GAAO,WAAY,GAAO,iBAAkB,KAAK,YAAa,YAAa5P,EAAW,YAAa,aAAcA,EAAW,aAAc,SAAUjD,EAAM,QAAS,EAAG,KAAK,uBAAuB,CAAC,CAAC,GACnlBkT,EAAmBjQ,GAAgB/C,EAAcmR,GAAa,OAAO,OAAO,CAAC,EAAGuB,EAAW,MAAO,CAAE,cAAerB,EAAe,YAAa9P,EAAa,KAAMoR,EAAiB,aAAcvS,EAAQ,aAAc,UAAWsC,EAAW,SAAU5C,EAAM,SAAU,kBAAmBiD,EAAW,kBAAmB,cAAeA,EAAW,cAAe,YAAaA,EAAW,YAAa,aAAcA,EAAW,aAAc,aAAc,KAAK,iBAAkB,WAAYA,EAAW,WAAY,mBAAoB,KAAK,sBAAuB,CAAC,CAAC,EAC3iB,OAAO6P,EACD,KAAK,oBAAoBC,EAAe5Q,EAAe+Q,EAAiB3B,EAAc,OAAQ5O,EAAaC,EAAW,KAAK,MAAM,UAAU,EAC3I,KAAK,mBAAmBmQ,EAAe5Q,EAAe+Q,CAAe,CAC/E,CACJ,EACA,SAASR,GAAmBjR,EAAakR,EAAsB,CAC3D,IAAIQ,EAAY,IAAIC,GAAe3R,EAAY,YAAakR,CAAoB,EAChF,OAAO,IAAIU,GAAcF,EAAW,EAAK,CAC7C,CAEA,IAAIG,GAAW,iwKACfC,GAAaD,EAAQ,EChnCrB,IAAME,GAAkB,CACpB,WAAY,OAChB,EAEIC,GAAQC,GAAa,CACrB,KAAM,yBACN,YAAa,eACb,eAAgBF,GAChB,MAAO,CACH,SAAU,CACN,UAAWG,GACX,eAAgB,GAChB,WAAY,GACZ,aAAc,WACd,iBAAkB,EACtB,EACA,YAAa,CACT,KAAM,WACN,SAAU,CAAE,KAAM,CAAE,CACxB,EACA,aAAc,CACV,KAAM,WACN,SAAU,CAAE,MAAO,CAAE,CACzB,CACJ,CACJ,CAAC,EC1BD,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,aAAc,OACd,QAAS,MACb,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,UAAU,CACtB,CAEA,MAAM,SAAU,CACZ,MAAM,KAAK,mBAAmB,CAClC,CAEA,MAAM,oBAAqB,CACvB,IAAIC,EAAU,IAAI,KAAK,KAAK,eAAe,SAAS,KAAK,UAAU,QAAQ,CAAC,EAC5EA,EAAQ,QAAQ,KAAK,eAAe,SAAS,KAAK,UAAU,QAAQ,EAAI,CAAC,EACzE,IAAMC,EAAc,IAAI,gBAAgB,CACpC,UAAW,KAAK,eAAe,SAAS,KAAK,YAAY,mBAAmB,OAAO,EACnF,QAASD,EAAQ,mBAAmB,OAAO,CAC/C,CAAC,EAEKE,EAAS,MADE,MAAM,MAAM,GAAG,KAAK,iBAAiB,IAAID,CAAW,GAAI,CAAE,QAAS,CAAE,mBAAoB,gBAAiB,CAAE,CAAC,GAChG,KAAK,EACnC,KAAK,eAAe,SAAS,gBAAgB,EAE7C,QAAWE,KAASD,EAChB,KAAK,eAAe,SAAS,SAASC,CAAK,CAEnD,CAEA,iBAAiB,CAAE,QAAAC,EAAS,GAAAC,EAAI,MAAAF,CAAM,EAAG,CACrC,GAAI,CAAC,UAAU,QAAQ,YAAYE,CAAE,EAAG,CACpC,IAAMC,EAAU,IAAI,UAAU,QAAQD,EAAI,CACtC,MAAO,2BAA6BF,EAAM,MAAQ,cAAgBA,EAAM,cAAc,KAAOA,EAAM,cAAc,KAAO,IACpH,QAAS;AAAA;AAAA,2BAEFA,EAAM,OAAS,KAAK,aAAa,UAAY,KAAK,aAAa,cAAc;AAAA,wBAChFA,EAAM,cAAc,KAAK;AAAA,MAC1CA,EAAM,OAGH,GAFA,wBAAwB,KAAK,aAAa,YAAY;AAAA,+BACjCA,EAAM,cAAc,GAAG,QAC1C;AAAA,MACNA,EAAM,cAAc,SAChB,wBAAwB,KAAK,aAAa,aAAa;AAAA,+BAClCA,EAAM,cAAc,QAAQ,SACjD,EAAE;AAAA,MACNA,EAAM,IACF,YAAYA,EAAM,GAAG,KAAK,KAAK,aAAa,eAAe,OAC3D,EAAE;AAAA,QAEI,KAAM,EACV,CAAC,EACD,WAAW,IAAMG,EAAQ,KAAK,EAAG,CAAC,CACtC,CACAF,EAAQ,eAAe,CAC3B,CAEA,yBAA0B,CACtB,KAAK,eAAe,SAAW,IAAIG,GAC/B,KAAK,eACL,CACI,QAAS,CAACC,GAAeA,EAAc,EACvC,YAAa,eACb,cAAe,CACX,KAAM,kBACN,OAAQ,QACR,MAAO,uCACX,EACA,OAAQ,OACR,eAAgB,GAChB,oBAAqB,GACrB,SAAU,GACV,aAAc,QACd,iBAAkB,gCAClB,qBAAsB,4BACtB,eAAgB,8BAChB,gBAAiB,CACb,KAAM,UACN,OAAQ,UACR,SAAU,OACd,EACA,SAAU,gBACV,SAAU,IAAM,KAAK,mBAAmB,EACxC,WAAYC,GAAK,KAAK,iBAAiBA,CAAC,EACxC,aAAc,SAAUC,EAAK,CACzB,IAAMP,EAAQO,EAAI,MAEZC,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,MAAM,EAC9BA,EAAU,UAAU,IAAI,MAAM,EAE9B,IAAMC,EAAc,SAAS,cAAc,KAAK,EAChD,GAAI,CAACT,EAAM,OAAQ,CACf,IAAMU,EAAYV,EAAM,MAAM,mBAAmB,CAAC,EAAG,CAAE,KAAM,UAAW,OAAQ,SAAU,CAAC,EAC3FS,EAAY,YAAcC,CAC9B,CAEA,IAAMC,EAAe,SAAS,cAAc,KAAK,EAGjD,GAFAA,EAAa,UAAY,2BAA2BX,EAAM,KAAK,YAE3DA,EAAM,cAAc,KAAM,CAC1B,IAAMY,EAAc,SAAS,cAAc,KAAK,EAChDA,EAAY,YAAcZ,EAAM,cAAc,KAC9CW,EAAa,YAAYC,CAAW,CACxC,CAEA,OAAAJ,EAAU,YAAYC,CAAW,EACjCD,EAAU,YAAYG,CAAY,EAE3B,CAAE,SAAU,CAACH,CAAS,CAAE,CACnC,CACJ,CACJ,EACA,KAAK,eAAe,SAAS,OAAO,CACxC,CACJ,ECxHA,IAAOK,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,cAAc,CAC1B,CAEA,4BAA4B,CAAE,OAAAC,CAAO,EAAG,CACpC,IAAMC,EAAoBD,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAU,OACzE,KAAK,oBAAoB,QAAQE,GAAO,CACpCA,EAAI,MAAQD,GAAqBC,EAAI,QAAQ,WAAa,EAC9D,CAAC,CACL,CACJ,ECXA,SAASC,GAAc,CAAE,QAAAC,EAAS,KAAAC,EAAM,YAAAC,CAAY,EAAG,CACnD,OAAAA,EAAcA,GAAgBF,GAAWA,EAAQ,QAAQ,YAClDC,GAAQC,EAAc,KAAKA,CAAW,IAAM,GACvD,CAEA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,mBAAsB,OACtB,0BAA6B,OAC7B,yBAA4B,MAChC,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,WAAY,eAAgB,cAAe,UAAW,mBAAoB,aAAa,CACnG,CAEA,MAAM,SAAU,CACZ,GAAI,KAAK,qBAAsB,CAC3B,GAAM,CAAC,KAAAC,EAAM,OAAAC,CAAM,EAAI,KAAM,QAAO,oBAAoB,EAClDC,EAAS,IAAID,EAAO,CACtB,KAAAD,EACA,cAAgBG,GAAM,CAClB,KAAK,YAAYA,EAAE,MAAM,CAC7B,CACJ,CAAC,EACD,KAAK,kBAAkB,YAAYD,CAAM,CAC7C,CACJ,CAEA,yBAA0B,CAEtB,OAAO,KAAK,cAAc,EAAE,QAAQ,CAChC,YAAa,KAAK,+BAClB,WAAY,GACZ,mBAAoB,EACpB,eAAgBE,GAASA,EAAM,GAAKV,GAAcU,CAAK,EAAGA,EAAM,KAChE,kBAAmBV,GACnB,KAAM,CACF,IAAK,KAAK,wBACV,SAAU,OACV,OAAQ,OACR,MAAO,IACP,KAAM,SAAUW,EAAQ,CACpB,OAAAA,EAAO,KAAOA,EAAO,MAAQ,EACtB,CACH,WAAYA,EAAO,KACnB,KAAMA,EAAO,KACb,SAAU,EACd,CACJ,EACA,eAAgB,SAAUL,EAAMK,EAAQ,CACpC,OAAAA,EAAO,KAAOA,EAAO,MAAQ,EACtB,CACH,QAASL,EAAK,QACd,WAAY,CACR,KAAOK,EAAO,KAAO,GAAYL,EAAK,KAC1C,CACJ,CACJ,EACA,MAAO,EACX,CACJ,CAAC,CACL,CAEA,mDAAmD,CAAE,OAAAM,CAAO,EAAG,CAC3D,IAAMC,EAA0B,KAAK,8BAA8BD,EAAO,KAAK,EAC/E,KAAK,mBAAmB,UAAU,OAAO,SAAUA,EAAO,QAAU,GAAG,EACnE,KAAK,uBACL,KAAK,kBAAkB,IAAMC,EAC7B,KAAK,kBAAkB,UAAU,OAAO,SAAU,CAACA,CAAuB,EAElF,CAEA,YAAYC,EAAO,CACf,IAAMC,EAAiB,KAAK,cAAc,eACpCC,EAAe,KAAK,cAAc,aACxC,KAAK,cAAc,MAAQ,KAAK,cAAc,MAAM,UAAU,EAAGD,CAAc,EAAID,EAAQ,KAAK,cAAc,MAAM,UAAUE,EAAc,KAAK,cAAc,MAAM,MAAM,EAC3K,KAAK,cAAc,eAAiBD,EAAiBD,EAAM,OAC3D,KAAK,cAAc,aAAe,KAAK,cAAc,eACrD,UAAU,SAAS,oBAAoB,KAAK,sBAAsB,EAAE,KAAK,EACzE,KAAK,cAAc,MAAM,CAC7B,CACJ,ECpFA,IAAOG,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,iBAAkB,sBAAuB,aAAc,YAAa,mBAAoB,kBAAkB,CACtH,CAEA,kBAAkB,CAAE,OAAAC,CAAO,EAAG,CAC1B,IAAMC,EAAiBD,EAAO,QAAQA,EAAO,aAAa,EAEtDC,EAAe,OACf,KAAK,qBAAqB,UAAU,OAAO,QAAQ,EACnD,KAAK,0BAA0B,UAAU,OAAO,SAAU,CAACA,EAAe,QAAQ,KAAK,EACvF,KAAK,iBAAiB,IAAMA,EAAe,QAAQ,MACnD,KAAK,gBAAgB,UAAYA,EAAe,QAAQ,MACxD,KAAK,uBAAuB,UAAYA,EAAe,QAAQ,aAE/D,KAAK,qBAAqB,UAAU,IAAI,QAAQ,CAExD,CAEA,qBAAqB,CAAE,OAAAD,CAAO,EAAG,CAC7B,IAAMC,EAAiBD,EAAO,QAAQA,EAAO,aAAa,EAC1D,KAAK,uBAAuB,UAAU,OAAO,SAAUC,EAAe,QAAQ,kBAAoB,MAAM,CAC5G,CACJ,ECvBA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,kBAAmB,OACnB,mBAAoB,MACxB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,SAAS,CACrB,CAEA,wCAAyC,CAErC,UAAU,MAAM,YAAY,SAAS,eAAe,KAAK,uBAAuB,CAAC,EAAE,KAAK,EACxF,KAAK,cAAc,IAAM,GAAG,KAAK,sBAAsB,UAAU,KAAK,cAAc,aAAa,OAAO,CAAC,WAAW,KAAK,cAAc,aAAa,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,QAAQ,CAAC,EACzL,CACJ,ECjBA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,iBAAkB,MACtB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,sBAAuB,iBAAkB,gBAAiB,cAAe,eAAe,CACpG,CAEA,qBAAqB,CAAE,OAAQ,CAAE,IAAK,CAAE,OAAAC,CAAO,CAAE,CAAE,EAAG,CAC9CA,IAAW,KACX,KAAK,SAAS,UAAW,CAAE,QAAS,EAAK,CAAC,CAElD,CAEA,cAAcC,EAAG,CACbA,EAAE,eAAe,EACjB,KAAK,0BAA0B,MAAQ,GACvC,KAAK,qBAAqB,MAAM,gBAAkB,QAAQ,KAAK,qBAAqB,KACpF,KAAK,oBAAoB,UAAU,IAAI,WAAW,EAClD,KAAK,kBAAkB,MAAQ,KAC/B,KAAK,qBAAqB,QAAQC,GAAO,CACrCA,EAAI,QAAU,EAClB,CAAC,CACL,CAEA,mBAAoB,CAChB,GAAM,CAACC,CAAI,EAAI,KAAK,kBAAkB,MACtC,KAAK,0BAA0B,MAAQ,CAACA,EACxC,KAAK,oBAAoB,UAAU,OAAO,YAAa,CAACA,CAAI,EAC5D,KAAK,qBAAqB,MAAM,gBAAkB,QAAQA,EAAO,IAAI,gBAAgBA,CAAI,EAAI,KAAK,qBAAqB,KACvH,KAAK,qBAAqB,QAAQD,GAAO,CACrCA,EAAI,QAAU,EAClB,CAAC,CACL,CAEA,oBAAoB,CAAE,OAAAE,CAAO,EAAG,CAC5B,KAAK,0BAA0B,MAAQ,GACvC,KAAK,oBAAoB,UAAU,OAAO,WAAW,EACrD,KAAK,qBAAqB,MAAM,gBAAkB,QAAQA,EAAO,WAAW,cAAc,KAAK,EAAE,GAAG,KACpG,KAAK,kBAAkB,MAAQ,IACnC,CACJ,EC7CA,IAAAC,GAAO,SAEAC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,cAAe,OACf,aAAc,OACd,kBAAmB,OACnB,kBAAmB,MACvB,CACJ,CAEA,UAAW,CACP,UAAU,UAAU,UAAU,KAAK,kBAAkB,EACrD,OAAO,QAAQ,KAAK,sBAAsB,CAC9C,CAEA,UAAW,CACP,UAAU,UAAU,UAAU,KAAK,iBAAiB,EACpD,OAAO,QAAQ,KAAK,sBAAsB,CAC9C,CACJ,ECpBA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,iBAAkB,MACtB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,iBAAkB,cAAe,eAAe,CAC5D,CAEA,mBAAoB,CAChB,GAAM,CAACC,CAAI,EAAI,KAAK,kBAAkB,MACtC,KAAK,qBAAqB,MAAM,gBAAkB,QAAQA,EAAO,IAAI,gBAAgBA,CAAI,EAAI,KAAK,qBAAqB,KACvH,KAAK,qBAAqB,QAAQC,GAAO,CACrCA,EAAI,QAAU,EAClB,CAAC,CACL,CAEA,oBAAoB,CAAE,OAAAC,CAAO,EAAG,CAC5B,KAAK,qBAAqB,MAAM,gBAAkB,QAAQA,EAAO,WAAW,cAAc,KAAK,EAAE,GAAG,KACpG,KAAK,kBAAkB,MAAQ,IACnC,CACJ,ECxBA,IAAAC,GAAqB,SACrBC,GAAO,SCFP,IAAMC,GAAY,CAACC,EAAIC,EAAMC,EAAU,CAAC,IAAM,CAC7C,GAAI,CAAC,OAAO,SAASD,CAAI,EACxB,MAAM,IAAI,UAAU,uCAAuC,EAG5D,IAAIE,EACAC,EACAC,EAAc,CAAC,EAEnB,OAAO,YAAaC,EAAY,CAC/B,OAAO,IAAI,QAAQC,GAAW,CAC7B,IAAMC,EAAgBN,EAAQ,QAAU,CAACE,EAEzC,aAAaA,CAAO,EAEpBA,EAAU,WAAW,IAAM,CAC1BA,EAAU,KAEV,IAAMK,EAASP,EAAQ,OAASC,EAAeH,EAAG,MAAM,KAAMM,CAAU,EAExE,IAAKC,KAAWF,EACfE,EAAQE,CAAM,EAGfJ,EAAc,CAAC,CAChB,EAAGJ,CAAI,EAEHO,GACHL,EAAeH,EAAG,MAAM,KAAMM,CAAU,EACxCC,EAAQJ,CAAY,GAEpBE,EAAY,KAAKE,CAAO,CAE1B,CAAC,CACF,CACD,EAEAR,GAAU,QAAUW,GAAa,CAChC,IAAIC,EAEJ,OAAO,kBAAmBL,EAAY,CACrC,GAAIK,EACH,OAAOA,EAGR,GAAI,CACH,OAAAA,EAAiBD,EAAU,MAAM,KAAMJ,CAAU,EAC1C,MAAMK,CACd,QAAE,CACDA,EAAiB,MAClB,CACD,CACD,EAEA,IAAOC,GAAQb,GDjDf,IAAOc,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,iBAAkB,OAClB,yCAA0C,MAC9C,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,gBAAiB,mBAAoB,QAAS,SAAU,gBAAiB,sBAAuB,gBAAiB,WAAW,CACxI,CAEA,YAAa,CACT,KAAK,sCAAwCC,GAAU,KAAK,sCAAuC,GAAG,CAC1G,CAEA,8BAA+B,CAC3B,KAAK,oBAAoB,SAAW,IAAI,GAAAC,QACpC,KAAK,oBACL,CACI,UAAW,OACX,QAAS,GACT,SAAU,EAEd,CACJ,CACJ,CAEA,iCAAkC,CAC9B,KAAK,uBAAuB,SAAW,IAAI,GAAAA,QACvC,KAAK,uBACL,CACI,SAAU,KAAK,oBACf,UAAW,OACX,QAAS,GACT,gBAAiB,GACjB,SAAU,EACd,CACJ,CACJ,CAEA,uBAAuB,CAAE,OAAAC,CAAO,EAAG,CAC/B,IAAMC,EAAYD,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAQ,UACzDE,EAAe,KAAK,oBAAoB,cAAc,qBAAqBD,CAAS,IAAI,EACxFE,EAAaD,EAAe,MAAM,UAAU,QAAQ,KAAKA,EAAa,WAAW,SAAUA,CAAY,EAAI,EACjH,KAAK,oBAAoB,SAAS,OAAOC,EAAY,GAAO,EAAI,EAE5D,KAAK,2BACL,KAAK,oBAAoB,SAAS,OAAOA,EAAY,GAAO,EAAI,EAGpE,IAAMC,EAAQJ,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAQ,MAEvD,KAAK,gBAAkBI,IACvB,KAAK,YAAY,UAAYA,GAGjC,IAAMC,EAASL,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAQ,OACtDM,EAAgBN,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAQ,cACnE,KAAK,aAAa,UAAYM,EAC1B;AAAA,wEAC4DA,CAAa;AAAA,wCAC7CD,CAAM;AAAA,cAElCA,EACJ,KAAK,oBAAoB,UAAU,OAAO,SAAUJ,IAAc,IAAI,EAElEA,IAAc,MACd,KAAK,0BAA0B,CAEvC,CAEA,2BAA4B,CACpB,KAAK,0BAA0B,MAC1B,KAAK,2BAA2B,EAErC,KAAK,aAAa,UAAY,KAAK,qBAE3C,CAEA,MAAM,4BAA6B,CAC1B,KAAK,aAAa,cAAc,iBAAiB,IAClD,KAAK,aAAa,UAAY,sCAGlC,KAAK,aAAa,UAAY,MAAM,KAAK,sCAAsC,CACnF,CAEA,MAAM,uCAAwC,CAC1C,IAAMM,EAAM,IAAI,IAAI,KAAK,8CAA+C,SAAS,SAAS,MAAM,EAChG,OAAAA,EAAI,aAAa,IAAI,sBAAuB,KAAK,0BAA0B,KAAK,EAEzE,MADU,MAAM,MAAMA,CAAG,GACV,KAAK,CAC/B,CAEA,uBAAuBC,EAAG,CACtBA,EAAE,eAAe,EACjB,KAAK,0BAA0B,MAAQA,EAAE,OAAO,oBAChD,KAAK,0BAA0B,MAAM,EAChC,KAAK,0BAA0B,CACxC,CAEA,kCAAkC,CAAE,OAAAR,CAAO,EAAG,CAC1C,IAAMS,EAA8BT,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAU,OACnF,KAAK,qBAAqB,QAAQU,GAAO,CACrCA,EAAI,MAAQD,GAA+BC,EAAI,QAAQ,cAAgB,EAC3E,CAAC,EACD,KAAK,gBAAgB,UAAU,OAAO,OAAQD,CAA2B,CAC7E,CACJ,EEjHA,IAAAE,GAA2B,SAEpBC,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,UAAU,oBAAoB,CAC1C,CAEA,uBAAuBC,EAAQ,CAC3B,IAAI,GAAAC,QACAD,EACA,CACI,aAAc,CACV,QAAS,CACL,mBAAoB,gBACxB,CACJ,EACA,KAAM,gBACN,OAAQ,oBACR,QAAS,EACb,CACJ,CACJ,CAEA,sBAAsB,CAAE,OAAAA,CAAO,EAAG,CAC9B,IAAME,EAAgBF,EAAO,QAAQA,EAAO,aAAa,EAAE,QAAU,GAEjEE,IACA,KAAK,yBAAyB,cAAgB,GAGlD,QAAWC,KAAU,KAAK,yBAAyB,QAC1CA,EAAO,aAAa,yBAAyB,GAC9CA,EAAO,UAAU,OAAO,SAAUD,CAAa,CAG3D,CACJ,ECnCA,IAAOE,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,SAAU,eAAgB,iBAAkB,iBAAiB,CACzE,CAEA,SAAU,CACN,KAAK,oCAAoC,EACzC,KAAK,mBAAmB,MAAM,QAAU,CAC5C,CAEA,qCAAsC,CAC9B,KAAK,sBACL,qBAAqB,KAAK,oBAAoB,EAGlD,KAAK,qBAAuB,sBAAsB,IAAM,CAEpD,GAAM,CAAE,KAAMC,EAAa,MAAOC,CAAa,EAAI,KAAK,QAAQ,sBAAsB,EAGhF,CAAE,KAAMC,EAAY,MAAOC,CAAY,EAAI,KAAK,aAAa,sBAAsB,EACnFC,EAAeF,EAAaC,EAAc,KAAK,aAAa,QAAQ,mBAAqB,IAGzFE,EAA0B,KAAK,mBAAmB,sBAAsB,EAAE,MAC5EC,EAAgCF,EAAeJ,EAAcK,EAA0B,EAEvFC,EAAgCD,EAA0BJ,IAC1DK,EAAgCL,EAAeI,GAGnD,KAAK,mBAAmB,MAAM,KAAO,GAAG,KAAK,IAAIC,EAA+B,CAAC,CAAC,KAGlF,IAAMC,EAA6B,KAAK,sBAAsB,sBAAsB,EAAE,MAClFC,EAAmCJ,EAAeJ,EAAcO,EAA6B,EAE7FC,EAAmCD,EAA6BN,IAChEO,EAAmCP,EAAeM,GAGtD,KAAK,sBAAsB,MAAM,KAAO,GAAG,KAAK,IAAIC,EAAkC,CAAC,CAAC,IAC5F,CAAC,CACL,CAEA,gCAAiC,CAC7B,KAAK,sBAAsB,UAAU,IAAI,cAAc,CAC3D,CACJ,ECjDA,IAAAC,GAA0C,SAEnCC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,WAAY,MAChB,CACJ,CACA,WAAW,SAAU,CACjB,MAAO,CAAC,uBAAwB,kBAAmB,WAAY,eAAgB,gBAAgB,CACnG,CAEA,YAAa,CACT,WACI,IAAM,CACF,KAAK,2BAA2B,MAAM,WAAa,OACnD,KAAK,sBAAsB,UAAU,OAAO,QAAQ,EAEhD,KAAK,mBACL,KAAK,eAAe,UAAU,OAAO,QAAQ,EAGjD,KAAK,mBAAmB,UAAU,IAAI,QAAQ,EAC9C,KAAK,qBAAqB,UAAU,OAAO,QAAQ,CACvD,EACA,GACJ,CACJ,CAEA,MAAM,mBAAoB,CAEtB,KAAK,2BAA2B,YAAc,IAAI,eAC9C,KAAK,2BACL,CACI,SAAU,IAAM,KAAK,WAAW,EAChC,gBAAiB,GACjB,gBAAiB,KAAK,2BAA2B,aACjD,eAAgB,KAAK,2BAA2B,YAChD,gBAAiB,KAAK,gBACtB,mBAAoB,GACpB,eAAgB,cAChB,YAAa,gBAAa,IAC9B,CACJ,EACA,MAAM,KAAK,2BAA2B,YAAY,KAAK,EACvD,KAAK,2BAA2B,MAAM,QAAU,CACpD,CAEA,QAAS,CACL,KAAK,2BAA2B,YAAY,MAAM,EAClD,KAAK,WAAW,CACpB,CACJ,ECnDA,IAAMC,GAAgB,GAEfC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,cAAe,MACnB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,aAAc,YAAa,iBAAkB,eAAe,CACxE,CAEA,SAAU,CACF,KAAK,iBAAiB,WACtB,KAAK,UAAYF,GACjB,KAAK,qCAAqC,EAElD,CAEA,sCAAuC,CACnC,IAAMG,EAAW,YACb,IAAM,CACF,KAAK,YACL,KAAK,gBAAgB,YAAc,IAAI,KAAK,SAAS,IAEjD,OAAK,UAAY,KAIrB,KAAK,iBAAiB,SAAW,GACjC,KAAK,gBAAgB,YAAc,GACnC,cAAcA,CAAQ,EAC1B,EACA,GACJ,CACJ,CAEA,MAAM,WAAWC,EAAG,CAChBA,EAAE,eAAe,EACjBA,EAAE,OAAO,SAAW,GACpB,KAAK,UAAYJ,GACjB,KAAK,gBAAgB,YAAc,IAAI,KAAK,SAAS,IACrD,KAAK,qBAAqB,UAAU,IAAI,QAAQ,EAChD,KAAK,oBAAoB,UAAU,IAAI,QAAQ,EAC/C,IAAMK,EAAW,MAAM,MAAM,KAAK,mBAAoB,CAAE,OAAQ,MAAO,CAAC,EAClE,CAAE,qBAAAC,CAAqB,EAAI,MAAMD,EAAS,KAAK,EACrD,KAAK,qBAAqB,UAAU,OAAO,SAAU,CAACC,CAAoB,EAC1E,KAAK,oBAAoB,UAAU,OAAO,SAAUA,CAAoB,EACxE,KAAK,qCAAqC,CAC9C,CACJ,ECxCO,SAASC,GAAeC,EAAM,EAAGC,EAAM,EAAGC,EAAQ,GAAI,CAC3D,OAAO,YAAY,KAAK,OAAO,GAAKD,EAAMD,GAAOA,GAAK,QAAQE,CAAK,CAAC,CACtE,CAKO,SAASC,GAAOC,EAAU,EAAG,CAClC,OAAOA,EAAU,KAAK,GAAK,GAC7B,CAOO,SAASC,GAAeC,EAAOC,EAAUC,EAAQ,CACtD,OAAID,EAAWC,EAAeD,GAAYD,GAASA,EAAQE,EACpDD,GAAYD,GAASA,EAAQE,CACtC,CAoBO,SAASC,GAAiBC,EAAMC,EAAYC,EAAUC,EAAe,CAC1EA,EAAc,KAAK,EACnBA,EAAc,KAAO,OAAOF,CAAU,GACtC,IAAMG,EAAID,EAAc,YAAYH,CAAI,EAAE,MAC1C,OAAAG,EAAc,QAAQ,EACfD,EAAWE,CACpB,CAOO,SAASC,GAAgBC,EAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAGC,EAAIC,EAAIC,EAAQ,CAEpE,OAD0BH,EAAM,EAAIC,IAAO,GAAOD,EAAM,EAAIE,IAAO,GACxCC,GAAU,CACvC,CAKO,SAASC,GAAqBJ,EAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAGK,EAAU,CAAC,EAAGC,EAAmB,EAAG,CAC7F,IAAMC,EAAOF,EAAQ,sBAAsB,EAC3C,MAAO,CACL,GAAIL,EAAM,EAAIO,EAAK,MAAQD,EAC3B,GAAIN,EAAM,EAAIO,EAAK,KAAOD,CAC5B,CACF,CASO,SAASE,GAASC,EAASC,EAASC,EAASC,EAAS,CACzD,IAAMC,EAAKJ,EAAUE,EACfG,EAAKJ,EAAUE,EAEjBG,EAAQ,KAAK,MAAM,CAACD,EAAI,CAACD,CAAE,EAC/B,OAAAE,GAAS,IAAM,KAAK,GAChBA,EAAQ,IAAGA,GAAS,KAEjBA,CACX,CAaO,SAASC,GAASC,EAAI,EAAGC,EAAI,EAAG,CACrC,IAAMC,EAAMF,EAAIC,EACZE,EAEJ,OAAID,EAAM,EACRC,EAASD,EAAM,IAEfC,EAAS,IAAOD,EAAM,IAEpBC,IAAW,MAAKA,EAAS,GAEtBA,CACT,CAMO,SAASC,GAAUJ,EAAI,EAAGC,EAAI,EAAG,CACtC,IAAMI,EAAgB,IAAMJ,EAE5B,MAAO,KADaF,GAASC,EAAGK,CAAa,CAE/C,CAOO,SAASC,GAAgCC,EAAkB,EAAGC,EAAc,EAAGC,EAAY,EAAG,CAEnG,IAAIC,GAAUH,EAAkB,IAAOC,GAAe,IAKtD,OAAAE,EAAQC,GAASD,CAAK,EAGtBA,GAAUD,IAAc,EAAM,IAAMC,EAAS,IAAMA,GAAS,IAC5DA,GAASD,EAEFF,EAAkBG,CAC3B,CAEO,SAASE,GAASC,EAAG,CAC1B,OAAO,OAAOA,GAAM,UAAY,CAAC,MAAM,QAAQA,CAAC,GAAKA,IAAM,IAC7D,CAEO,SAASC,GAAS,EAAG,CAC1B,OAAO,OAAO,GAAM,UAAY,CAAC,OAAO,MAAM,CAAC,CACjD,CAEO,SAASC,GAAQ,CAAC,IAAAC,EAAK,QAAAC,EAAS,aAAAC,EAAc,aAAAC,EAAc,OAAAC,EAAS,IAAI,EAAG,CACjF,GAAIH,EACF,OAAQG,EAAUA,EAAO,EAAIJ,EACxB,GAAIA,IAAQ,OACjB,OAAOG,EAET,MAAM,IAAI,MAAMD,CAAY,CAC9B,CAKO,SAASG,GAAcC,EAAO,CAEnC,OAAOA,GAASA,EAAM,UAAYA,EAAM,eAAiB,GAAKA,EAAM,gBAAkB,CACxF,CAEO,SAASX,GAASY,EAAI,EAAG,CAC9B,OAAO,OAAOA,EAAE,QAAQ,CAAC,CAAC,CAC5B,CAKO,SAASC,GAAW,EAAG,CAC5B,OAAO,KAAK,IAAK,EAAI,KAAK,GAAM,CAAC,CACnC,CC3KO,IAAMC,GAAY,OAAO,OAAO,CACrC,KAAM,OACN,MAAO,QACP,OAAQ,QACV,CAAC,EAKYC,GAAW,OAAO,OAAO,CACpC,MAAO,CACL,YAAa,OACb,YAAa,EACb,MAAO,GACP,MAAO,KACP,cAAe,GACf,qBAAsB,CAAC,MAAM,EAC7B,eAAgBD,GAAU,MAC1B,wBAAyB,EACzB,gBAAiB,CAAC,MAAM,EACxB,cAAe,aACf,qBAAsB,IACtB,gBAAiB,IACjB,mBAAoB,GACpB,kBAAmB,EACnB,qBAAsB,OACtB,qBAAsB,EACtB,MAAO,CAAC,EACR,UAAW,OACX,UAAW,EACX,WAAY,EACZ,OAAQ,IACR,SAAU,EACV,mBAAoB,IACpB,iBAAkB,IAClB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,qBAAsB,KACtB,OAAQ,KACR,OAAQ,KACR,aAAc,KACd,aAAc,CAChB,EACA,KAAM,CACJ,gBAAiB,KACjB,MAAO,KACP,aAAc,EACd,YAAa,GACb,cAAe,EACf,WAAY,EACZ,MAAO,GACP,WAAY,KACZ,MAAO,KACP,OAAQ,CACV,CACF,CAAC,EAEYE,GAAY,OAAO,OAAO,CACrC,iBAAkB,UAClB,kBAAmB,UACnB,iBAAkB,UAClB,aAAc,GAChB,CAAC,EC/EM,SAASC,GAASC,EAAQ,CAAC,EAAG,CAEnCC,GAAsBD,CAAK,EAG3BA,EAAM,kBAAoBE,GAAKF,EAAM,OAAOE,CAAC,EAC7C,OAAO,iBAAiB,SAAUF,EAAM,iBAAiB,EAIzD,IAAMG,EAAmB,IAAM,CAC7BH,EAAM,OAAO,EACb,WAAW,gBAAgB,EAAE,OAAO,EACjC,iBAAiB,SAAUG,EAAkB,CAAE,KAAM,EAAK,CAAC,CAChE,CAEF,CAEO,SAASC,GAAWJ,EAAQ,CAAC,EAAG,CAErC,IAAMK,EAASL,EAAM,OAEjB,iBAAkB,QACpBK,EAAO,oBAAoB,cAAeL,EAAM,sBAAsB,EACtEK,EAAO,oBAAoB,cAAeL,EAAM,mCAAmC,IAEnFK,EAAO,oBAAoB,aAAcL,EAAM,qBAAqB,EACpEK,EAAO,oBAAoB,YAAaL,EAAM,oBAAoB,EAClEK,EAAO,oBAAoB,YAAaL,EAAM,iCAAiC,GAGjF,OAAO,oBAAoB,SAAUA,EAAM,iBAAiB,CAE9D,CAEA,SAASC,GAAsBD,EAAQ,CAAC,EAAG,CAGzC,IAAMK,EAASL,EAAM,OAErBA,EAAM,oCAAsC,CAACE,EAAI,CAAC,IAAM,CACtD,IAAMI,EAAQ,CACZ,EAAGJ,EAAE,QACL,EAAGA,EAAE,OACP,EACAF,EAAM,kBAAoBA,EAAM,aAAaM,CAAK,EAClDN,EAAM,cAAc,CACtB,EAEAA,EAAM,kCAAoC,CAACE,EAAI,CAAC,IAAM,CACpD,IAAMI,EAAQ,CACZ,EAAGJ,EAAE,QACL,EAAGA,EAAE,OACP,EACAF,EAAM,kBAAoBA,EAAM,aAAaM,CAAK,EAClDN,EAAM,cAAc,CACtB,EAEAA,EAAM,uBAAyB,CAACE,EAAI,CAAC,IAAM,CAEzC,IAAMI,EAAQ,CACZ,EAAGJ,EAAE,QACL,EAAGA,EAAE,OACP,EAGA,GADI,CAACF,EAAM,eACP,CAACA,EAAM,aAAaM,CAAK,EAAG,OAEhCJ,EAAE,eAAe,EACjBF,EAAM,UAAUM,CAAK,EACrBD,EAAO,kBAAkBH,EAAE,SAAS,EACpCG,EAAO,iBAAiB,cAAeE,CAAa,EACpDF,EAAO,iBAAiB,YAAaG,CAAW,EAChDH,EAAO,iBAAiB,gBAAiBG,CAAW,EACpDH,EAAO,iBAAiB,aAAcG,CAAW,EAEjD,SAASD,EAAcL,EAAI,CAAC,EAAG,CAC7BA,EAAE,eAAe,EACjBF,EAAM,SAAS,CACb,EAAGE,EAAE,QACL,EAAGA,EAAE,OACP,CAAC,CACH,CAEA,SAASM,EAAYN,EAAI,CAAC,EAAG,CAC3BA,EAAE,eAAe,EACjBG,EAAO,sBAAsBH,EAAE,SAAS,EACxCG,EAAO,oBAAoB,cAAeE,CAAa,EACvDF,EAAO,oBAAoB,YAAaG,CAAW,EACnDH,EAAO,oBAAoB,gBAAiBG,CAAW,EACvDH,EAAO,oBAAoB,aAAcG,CAAW,EACpDR,EAAM,QAAQ,CAChB,CAEF,EAEAA,EAAM,qBAAuB,CAACE,EAAI,CAAC,IAAM,CAEvC,IAAMI,EAAQ,CACZ,EAAGJ,EAAE,QACL,EAAGA,EAAE,OACP,EAGA,GADI,CAACF,EAAM,eACP,CAACA,EAAM,aAAaM,CAAK,EAAG,OAEhCN,EAAM,UAAUM,CAAK,EACrB,SAAS,iBAAiB,YAAaG,CAAW,EAClD,SAAS,iBAAiB,UAAWC,CAAS,EAE9C,SAASD,EAAYP,EAAI,CAAC,EAAG,CAC3BA,EAAE,eAAe,EACjBF,EAAM,SAAS,CACb,EAAGE,EAAE,QACL,EAAGA,EAAE,OACP,CAAC,CACH,CAEA,SAASQ,EAAUR,EAAI,CAAC,EAAG,CACzBA,EAAE,eAAe,EACjB,SAAS,oBAAoB,YAAaO,CAAW,EACrD,SAAS,oBAAoB,UAAWC,CAAS,EACjDV,EAAM,QAAQ,CAChB,CAEF,EAEAA,EAAM,sBAAwB,CAACE,EAAI,CAAC,IAAM,CAExC,IAAMI,EAAQ,CACZ,EAAGJ,EAAE,cAAc,CAAC,EAAE,QACtB,EAAGA,EAAE,cAAc,CAAC,EAAE,OACxB,EAGA,GADI,CAACF,EAAM,eACP,CAACA,EAAM,aAAaM,CAAK,EAAG,OAEhCJ,EAAE,eAAe,EACjBF,EAAM,UAAUM,CAAK,EACrBD,EAAO,iBAAiB,YAAaM,CAAW,EAChDN,EAAO,iBAAiB,WAAYO,CAAU,EAC9CP,EAAO,iBAAiB,cAAeO,CAAU,EAEjD,SAASD,EAAYT,EAAI,CAAC,EAAG,CAC3BA,EAAE,eAAe,EACjBF,EAAM,SAAS,CACb,EAAGE,EAAE,cAAc,CAAC,EAAE,QACtB,EAAGA,EAAE,cAAc,CAAC,EAAE,OACxB,CAAC,CACH,CAEA,SAASU,EAAWV,EAAI,CAAC,EAAG,CAC1BA,EAAE,eAAe,EACjBG,EAAO,oBAAoB,YAAaM,CAAW,EACnDN,EAAO,oBAAoB,WAAYO,CAAU,EACjDP,EAAO,oBAAoB,cAAeO,CAAU,EACpDZ,EAAM,QAAQ,CAChB,CAEF,EAEI,iBAAkB,QACpBK,EAAO,iBAAiB,cAAeL,EAAM,sBAAsB,EACnEK,EAAO,iBAAiB,cAAeL,EAAM,mCAAmC,IAEhFK,EAAO,iBAAiB,aAAcL,EAAM,qBAAqB,EACjEK,EAAO,iBAAiB,YAAaL,EAAM,oBAAoB,EAC/DK,EAAO,iBAAiB,YAAaL,EAAM,iCAAiC,EAGhF,CCvKO,IAAMa,GAAN,KAAW,CAEhB,YAAYC,EAAOC,EAAQ,CAAC,EAAG,CAG7B,GAAI,CAAMC,GAASF,CAAK,EAAG,MAAM,IAAI,MAAM,oCAAoC,EAC/E,GAAI,CAAME,GAASD,CAAK,GAAKA,IAAU,KAAM,MAAM,IAAI,MAAM,iCAAiC,EAE9F,KAAK,OAASD,EAId,QAAW,KAAK,OAAO,KAAKG,GAAS,IAAI,EACvC,KAAK,IAAM,CAAC,EAAIA,GAAS,KAAK,CAAC,EAG7BF,EACF,KAAK,KAAKA,CAAK,EAEf,KAAK,KAAKE,GAAS,IAAI,CAG3B,CAKA,KAAKF,EAAQ,CAAC,EAAG,CACf,KAAK,gBAAkBA,EAAM,gBAC7B,KAAK,MAAQA,EAAM,MACnB,KAAK,aAAeA,EAAM,aAC1B,KAAK,YAAcA,EAAM,YACzB,KAAK,cAAgBA,EAAM,cAC3B,KAAK,WAAaA,EAAM,WACxB,KAAK,MAAQA,EAAM,MACnB,KAAK,WAAaA,EAAM,WACxB,KAAK,MAAQA,EAAM,MACnB,KAAK,OAASA,EAAM,MACtB,CAOA,IAAI,iBAAkB,CACpB,OAAO,KAAK,gBACd,CACA,IAAI,gBAAgBG,EAAK,CACnB,OAAOA,GAAQ,SACjB,KAAK,iBAAmBA,EAExB,KAAK,iBAAmBD,GAAS,KAAK,gBAExC,KAAK,OAAO,QAAQ,CACtB,CAOA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMC,EAAK,CACb,IAAIC,EACA,OAAOD,GAAQ,UACjBC,EAAM,IAAI,MACVA,EAAI,IAAMD,EACVC,EAAI,OAASC,GAAK,KAAK,OAAO,QAAQ,GAEtCD,EAAMF,GAAS,KAAK,MAEtB,KAAK,OAASE,EACd,KAAK,OAAO,QAAQ,CACtB,CAMA,IAAI,cAAe,CACjB,OAAO,KAAK,aACd,CACA,IAAI,aAAaD,EAAK,CAChB,OAAOA,GAAQ,SACjB,KAAK,cAAgBA,EAErB,KAAK,cAAgBD,GAAS,KAAK,aAErC,KAAK,OAAO,QAAQ,CACtB,CAKA,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CACA,IAAI,YAAYC,EAAK,CACf,OAAOA,GAAQ,SACjB,KAAK,aAAeA,EAEpB,KAAK,aAAeD,GAAS,KAAK,YAEpC,KAAK,OAAO,QAAQ,CACtB,CAKA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CACA,IAAI,cAAcC,EAAK,CACjB,OAAOA,GAAQ,SACjB,KAAK,eAAiBA,EAEtB,KAAK,eAAiBD,GAAS,KAAK,cAEtC,KAAK,OAAO,QAAQ,CACtB,CAKA,IAAI,YAAa,CACf,OAAO,KAAK,WACd,CACA,IAAI,WAAWC,EAAK,CACd,OAAOA,GAAQ,SACjB,KAAK,YAAcA,EAEnB,KAAK,YAAcD,GAAS,KAAK,WAEnC,KAAK,OAAO,QAAQ,CACtB,CAKA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMC,EAAK,CACT,OAAOA,GAAQ,SACjB,KAAK,OAASA,EAEd,KAAK,OAASD,GAAS,KAAK,MAE9B,KAAK,OAAO,QAAQ,CACtB,CAOA,IAAI,YAAa,CACf,OAAO,KAAK,WACd,CACA,IAAI,WAAWC,EAAK,CACd,OAAOA,GAAQ,SACjB,KAAK,YAAcA,EAEnB,KAAK,YAAcD,GAAS,KAAK,WAEnC,KAAK,OAAO,QAAQ,CACtB,CAMA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMC,EAAK,CACTA,IAAQ,OACV,KAAK,OAASA,EAEd,KAAK,OAASD,GAAS,KAAK,KAEhC,CAOA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOC,EAAK,CACV,OAAOA,GAAQ,SACjB,KAAK,QAAUA,EAEf,KAAK,QAAUD,GAAS,KAAK,MAEjC,CAKA,UAAW,CACT,IAAMI,EAAQ,KAAK,OAAO,MAAM,UAAUC,GAAKA,IAAM,IAAI,EACzD,GAAID,IAAU,GAAI,MAAM,IAAI,MAAM,gCAAgC,EAClE,OAAOA,CACT,CAKA,gBAAiB,CACf,IAAME,EAAQ,KAAK,OAAO,cAAc,EAAG,KAAK,SAAS,CAAE,EAC3D,OAAOA,EAAM,OAAUA,EAAM,IAAMA,EAAM,OAAS,CACpD,CAKA,eAAgB,CACd,OAAO,KAAK,OAAO,cAAc,EAAG,KAAK,SAAS,CAAE,EAAE,KACxD,CAKA,aAAc,CACZ,OAAO,KAAK,OAAO,cAAc,EAAG,KAAK,SAAS,CAAE,EAAE,GACxD,CAKA,gBAAiB,CACf,OAAYC,GAAe,KAAK,cAAc,EAAG,KAAK,YAAY,CAAC,CACrE,CAEF,EC7OO,IAAMC,GAAN,KAAY,CAOjB,YAAYC,EAAWC,EAAQ,CAAC,EAAG,CAGjC,GAAI,EAAED,aAAqB,SAAU,MAAM,IAAI,MAAM,0CAA0C,EAC/F,GAAI,CAAME,GAASD,CAAK,GAAKA,IAAU,KAAM,MAAM,IAAI,MAAM,iCAAiC,EAG9F,KAAK,gBAAkB,KACvB,KAAK,eAAiB,EACtB,KAAK,mBAAqB,EAC1B,KAAK,eAAiB,KACtB,KAAK,mBAAqB,KAE1B,KAAK,IAAID,CAAS,EAIlB,QAAW,KAAK,OAAO,KAAKG,GAAS,KAAK,EACxC,KAAK,IAAM,CAAC,EAAIA,GAAS,MAAM,CAAC,EAG9BF,EACF,KAAK,KAAKA,CAAK,EAEf,KAAK,KAAKE,GAAS,KAAK,CAG5B,CAKA,KAAKF,EAAQ,CAAC,EAAG,CACf,KAAK,gBAAkB,GAEvB,KAAK,YAAcA,EAAM,YACzB,KAAK,YAAcA,EAAM,YACzB,KAAK,MAAQA,EAAM,MACnB,KAAK,MAAQA,EAAM,MACnB,KAAK,cAAgBA,EAAM,cAC3B,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,eAAiBA,EAAM,eAC5B,KAAK,wBAA0BA,EAAM,wBACrC,KAAK,gBAAkBA,EAAM,gBAC7B,KAAK,cAAgBA,EAAM,cAC3B,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,gBAAkBA,EAAM,gBAC7B,KAAK,mBAAqBA,EAAM,mBAChC,KAAK,kBAAoBA,EAAM,kBAC/B,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,MAAQA,EAAM,MACnB,KAAK,UAAYA,EAAM,UACvB,KAAK,UAAYA,EAAM,UACvB,KAAK,WAAaA,EAAM,WACxB,KAAK,iBAAmBA,EAAM,iBAC9B,KAAK,OAASA,EAAM,OACpB,KAAK,SAAWA,EAAM,SACtB,KAAK,mBAAqBA,EAAM,mBAChC,KAAK,OAASA,EAAM,OACpB,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,OAASA,EAAM,OACpB,KAAK,OAASA,EAAM,OACpB,KAAK,aAAeA,EAAM,aAC1B,KAAK,aAAeA,EAAM,YAC5B,CAKA,IAAID,EAAW,CACb,KAAK,iBAAmBA,EACxB,KAAK,OAAS,SAAS,cAAc,QAAQ,EAC7C,KAAK,SAAW,KAAK,OAAO,WAAW,IAAI,EAC3C,KAAK,iBAAiB,OAAO,KAAK,MAAM,EACjCI,GAAS,IAAI,EAChB,KAAK,kBAAoB,IAAO,KAAK,OAAO,CAClD,CAKA,QAAS,CACP,OAAO,qBAAqB,KAAK,eAAe,EACzCC,GAAW,IAAI,EACtB,KAAK,iBAAiB,YAAY,KAAK,MAAM,EAC7C,KAAK,iBAAmB,KACxB,KAAK,OAAS,KACd,KAAK,SAAW,IAClB,CAMA,QAAS,CAGP,GAAM,CAACC,EAAGC,CAAC,EAAI,CACb,KAAK,iBAAiB,YAAc,KAAK,oBAAoB,EAC7D,KAAK,iBAAiB,aAAe,KAAK,oBAAoB,CAChE,EAGMC,EAAU,KAAK,IAAIF,EAAGC,CAAC,EACvBE,EAAY,CAChB,EAAGD,EAAWA,EAAU,KAAK,OAAO,EACpC,EAAGA,EAAWA,EAAU,KAAK,OAAO,CACtC,EACME,EAAQ,KAAK,IAAIJ,EAAIG,EAAU,EAAGF,EAAIE,EAAU,CAAC,EACvD,KAAK,MAAQ,KAAK,IAAIA,EAAU,EAAIC,EAAOD,EAAU,EAAIC,CAAK,EAG9D,KAAK,OAAO,MAAM,MAAQ,KAAK,iBAAiB,YAAc,KAC9D,KAAK,OAAO,MAAM,OAAS,KAAK,iBAAiB,aAAe,KAChE,KAAK,OAAO,MAAQJ,EACpB,KAAK,OAAO,OAASC,EAGrB,KAAK,QAAU,CACb,EAAGD,EAAI,EAAKA,EAAI,KAAK,OAAO,EAC5B,EAAGC,EAAI,EAAKA,EAAI,KAAK,OAAO,CAC9B,EAGA,KAAK,cAAiB,KAAK,MAAQ,EAAK,KAAK,OAG7C,KAAK,kBAAoB,KAAK,sBAAwB,KAAK,MAAkB,KAC7E,KAAK,cAAgB,KAAK,eAAiB,KAAK,gBAAkB,KAAK,oBACvE,QAAWI,KAAQ,KAAK,OACtB,KAAK,kBAAoB,KAAK,IAAI,KAAK,kBAAwBC,GAAiBD,EAAK,MAAO,KAAK,cAAe,KAAK,cAAe,KAAK,QAAQ,CAAC,EAGpJ,KAAK,QAAQ,CAEf,CAKA,KAAKE,EAAM,EAAG,CAEZ,KAAK,gBAAkB,KAEvB,IAAMC,EAAM,KAAK,SAGjBA,EAAI,UAAU,EAAG,EAAG,KAAK,OAAO,MAAO,KAAK,OAAO,MAAM,EAEzD,KAAK,gBAAgBD,CAAG,EAExB,IAAME,EAAS,KAAK,cAAc,KAAK,SAAS,EAE1CC,EAAoB,KAAK,gBAAgB,KAAK,YAAY,EAGhEF,EAAI,aAAe,SACnBA,EAAI,UAAY,KAAK,eACrBA,EAAI,KAAO,KAAK,kBAAoB,MAAQ,KAAK,cAEjDA,EAAI,KAAK,EAGT,OAAW,CAACG,EAAG,CAAC,IAAKF,EAAO,QAAQ,EAAG,CAErC,IAAMG,EAAO,IAAI,OACjBA,EAAK,OAAO,KAAK,QAAQ,EAAG,KAAK,QAAQ,CAAC,EAC1CA,EAAK,IACH,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,cAAiBF,EAAoB,EACrCG,GAAO,EAAE,MAAkB,GAAS,EACpCA,GAAO,EAAE,IAAgB,GAAS,CACzC,EAEA,KAAK,OAAOF,CAAC,EAAE,KAAOC,CAExB,CAEA,KAAK,oBAAoBJ,EAAKC,CAAM,EACpC,KAAK,eAAeD,EAAKC,CAAM,EAC/B,KAAK,cAAcD,EAAKC,CAAM,EAC9B,KAAK,eAAeD,EAAKC,CAAM,EAC/B,KAAK,WAAWD,CAAG,EACnB,KAAK,UAAUA,EAAK,KAAK,OAAQ,EAAK,EACtC,KAAK,UAAUA,EAAK,KAAK,cAAe,EAAI,EAC5C,KAAK,gBAAgBA,CAAG,EACxB,KAAK,eAAeA,CAAG,EAEvB,KAAK,gBAAkB,EAEzB,CAEA,oBAAoBA,EAAKC,EAAS,CAAC,EAAG,CAEpC,OAAW,CAAC,EAAGK,CAAC,IAAKL,EAAO,QAAQ,EAAG,CAErC,IAAMJ,EAAO,KAAK,OAAO,CAAC,EAE1BG,EAAI,UAAYH,EAAK,iBAEnB,KAAK,sBAAsB,EAAI,KAAK,sBAAsB,MAAM,EAGlEG,EAAI,KAAKH,EAAK,IAAI,CAEpB,CAEF,CAEA,eAAeG,EAAKC,EAAS,CAAC,EAAG,CAE/B,OAAW,CAAC,EAAGK,CAAC,IAAKL,EAAO,QAAQ,EAAG,CAErC,IAAMJ,EAAO,KAAK,OAAO,CAAC,EAE1B,GAAI,CAAMU,GAAcV,EAAK,KAAK,EAAG,SAErCG,EAAI,KAAK,EAETA,EAAI,KAAKH,EAAK,IAAI,EAElB,IAAMW,EAAQF,EAAE,OAAUA,EAAE,IAAMA,EAAE,OAAS,EAE7CN,EAAI,UACF,KAAK,QAAQ,EAAI,KAAK,IAASK,GAAOG,EAAkB,GAAS,CAAC,GAAK,KAAK,cAAgBX,EAAK,aACjG,KAAK,QAAQ,EAAI,KAAK,IAASQ,GAAOG,EAAkB,GAAS,CAAC,GAAK,KAAK,cAAgBX,EAAK,YACnG,EAEAG,EAAI,OAAYK,GAAOG,EAAQX,EAAK,aAAa,CAAC,EAElDG,EAAI,YAAcH,EAAK,aAEvB,IAAMY,EAAS,KAAK,MAAQ,IAAOZ,EAAK,MAAM,MAAQA,EAAK,WACrDa,EAAU,KAAK,MAAQ,IAAOb,EAAK,MAAM,OAASA,EAAK,WACvDc,EAAY,CAACF,EAAQ,EACrBG,EAAa,CAACF,EAAS,EAE7BV,EAAI,UACFH,EAAK,MACLc,EACAC,EACAH,EACAC,CACF,EAEAV,EAAI,QAAQ,CAEd,CAEF,CAEA,UAAUA,EAAKa,EAAOC,EAAY,GAAO,CAEvC,GAAI,CAAMP,GAAcM,CAAK,EAAG,OAEhCb,EAAI,UACF,KAAK,QAAQ,EACb,KAAK,QAAQ,CACf,EAEKc,GAAWd,EAAI,OAAYK,GAAO,KAAK,SAAS,CAAC,EAKtD,IAAMU,EAAOD,EAAY,KAAK,MAAQ,KAAK,MAAQ,KAAK,OAClDE,EAAW,EAAED,EAAO,GAE1Bf,EAAI,UACFa,EACAG,EACAA,EACAD,EACAA,CACF,EAEAf,EAAI,eAAe,CAErB,CAEA,gBAAgBA,EAAK,CAEd,KAAK,QAEVA,EAAI,UACF,KAAK,QAAQ,EACb,KAAK,QAAQ,CACf,EAEAA,EAAI,OAAYK,GAAO,KAAK,cAA0B,GAAS,CAAC,EAEhEL,EAAI,UAAU,EACdA,EAAI,OAAO,EAAG,CAAC,EACfA,EAAI,OAAO,KAAK,cAAgB,EAAG,CAAC,EAEpCA,EAAI,YAAwBiB,GAAU,iBACtCjB,EAAI,UAAY,KAAK,gBAAgB,CAAC,EACtCA,EAAI,OAAO,EAEXA,EAAI,eAAe,EAErB,CAEA,WAAWA,EAAK,CAEd,GAAI,KAAK,cAAgB,EAAG,OAE5B,IAAME,EAAoB,KAAK,gBAAgB,KAAK,YAAY,EAC1DgB,EAAoB,KAAK,cAAgB,cAQ/C,GANAlB,EAAI,UAAU,EACdA,EAAI,YAAckB,EAClBlB,EAAI,UAAYE,EAChBF,EAAI,IAAI,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAG,KAAK,cAAiBE,EAAoB,EAAI,EAAG,EAAI,KAAK,EAAE,EACpGF,EAAI,OAAO,EAEP,KAAK,MAAO,CACd,IAAMmB,EAAuB,KAAK,gBAAgB,CAAC,EAEnDnB,EAAI,UAAU,EACdA,EAAI,YAAcA,EAAI,YAAwBiB,GAAU,iBACxDjB,EAAI,UAAYmB,EAChBnB,EAAI,IAAI,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAG,KAAK,cAAgB,KAAK,gBAAiB,EAAG,EAAI,KAAK,EAAE,EACjGA,EAAI,OAAO,EAEXA,EAAI,UAAU,EACdA,EAAI,YAAcA,EAAI,YAAwBiB,GAAU,iBACxDjB,EAAI,UAAYmB,EAChBnB,EAAI,IAAI,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAG,KAAK,cAAgB,KAAK,mBAAoB,EAAG,EAAI,KAAK,EAAE,EACpGA,EAAI,OAAO,CACb,CAEF,CAEA,cAAcA,EAAKC,EAAS,CAAC,EAAG,CAE9B,GAAI,KAAK,YAAc,EAAG,OAE1B,IAAMmB,EAAkB,KAAK,gBAAgB,KAAK,UAAU,EACtDlB,EAAoB,KAAK,gBAAgB,KAAK,YAAY,EAEhEF,EAAI,UACF,KAAK,QAAQ,EACb,KAAK,QAAQ,CACf,EAEA,QAAWQ,KAASP,EAClBD,EAAI,OAAYK,GAAOG,EAAM,MAAkB,GAAS,CAAC,EAEzDR,EAAI,UAAU,EACdA,EAAI,OAAO,EAAG,CAAC,EACfA,EAAI,OAAO,KAAK,cAAgBE,EAAmB,CAAC,EAEpDF,EAAI,YAAc,KAAK,UACvBA,EAAI,UAAYoB,EAChBpB,EAAI,OAAO,EAEXA,EAAI,OAAO,CAAMK,GAAOG,EAAM,MAAkB,GAAS,CAAC,EAG5DR,EAAI,eAAe,CAErB,CAEA,eAAeA,EAAKC,EAAS,CAAC,EAAG,CAE/B,IAAMoB,EAAgC,KAAK,kBAAoB,CAAC,KAAK,wBAC/DF,EAAuB,KAAK,gBAAgB,CAAC,EAC7CG,EAAyB,KAAK,gBAAgB,KAAK,sBAAwB,CAAC,EAElF,OAAW,CAACnB,EAAGG,CAAC,IAAKL,EAAO,QAAQ,EAAG,CAErC,IAAMJ,EAAO,KAAK,OAAOM,CAAC,EAEpBoB,EAAmB1B,EAAK,YACxB,KAAK,iBAAiBM,EAAI,KAAK,iBAAiB,MAAM,GACvD,cAEL,GAAIN,EAAK,MAAM,KAAK,IAAM,IAAM0B,IAAqB,cAAe,SAEpEvB,EAAI,KAAK,EAETA,EAAI,KAAKH,EAAK,IAAI,EAElB,IAAMW,EAAQF,EAAE,OAAUA,EAAE,IAAMA,EAAE,OAAS,EAE7CN,EAAI,UACF,KAAK,QAAQ,EAAI,KAAK,IAASK,GAAOG,EAAkB,GAAS,CAAC,GAAK,KAAK,cAAgB,KAAK,iBACjG,KAAK,QAAQ,EAAI,KAAK,IAASH,GAAOG,EAAkB,GAAS,CAAC,GAAK,KAAK,cAAgB,KAAK,gBACnG,EAEAR,EAAI,OAAYK,GAAOG,EAAkB,GAAS,CAAC,EAEnDR,EAAI,OAAYK,GAAO,KAAK,iBAAiB,CAAC,EAE1C,KAAK,QAEPL,EAAI,UAAU,EACdA,EAAI,OAAO,EAAG,CAAC,EACfA,EAAI,OAAO,CAAC,KAAK,cAAe,CAAC,EAEjCA,EAAI,YAAwBiB,GAAU,kBACtCjB,EAAI,UAAYmB,EAChBnB,EAAI,OAAO,EAEXA,EAAI,WAAW,EAAG,CAAC,KAAK,kBAAoB,EAAG,CAAC,KAAK,cAAe,KAAK,iBAAiB,GAGxF,KAAK,sBAAwB,IAC/BA,EAAI,UAAYsB,EAChBtB,EAAI,YAAc,KAAK,sBACvBA,EAAI,SAAW,QACfA,EAAI,WAAWH,EAAK,MAAO,EAAGwB,CAA6B,GAG7DrB,EAAI,UAAYuB,EAChBvB,EAAI,SAASH,EAAK,MAAO,EAAGwB,CAA6B,EAEzDrB,EAAI,QAAQ,CAEd,CAEF,CAEA,eAAeA,EAAK,CAElB,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,YAAY,OAAQ,OAE7C,IAAMwB,EAAqB,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,EAClDJ,EAAkB,KAAK,gBAAgB,EAAG,EAC1CK,EAAuB,KAAK,gBAAgB,CAAC,EAEnD,OAAW,CAACtB,EAAGuB,CAAK,IAAKF,EAAmB,QAAQ,EAAG,CACrD,IAAMG,EAAWxB,EAAI,KAAK,WAAW,OAAU,IAC/CH,EAAI,UAAU,EACdA,EAAI,IAAI0B,EAAM,EAAGA,EAAM,EAAGD,EAAsB,EAAG,EAAI,KAAK,EAAE,EAC9DzB,EAAI,UAAY,OAAiBiB,GAAU,YAAY,SAASU,CAAO,KACvE3B,EAAI,YAAc,OAClBA,EAAI,UAAYoB,EAChBpB,EAAI,KAAK,EACTA,EAAI,OAAO,CACb,CAEF,CAEA,gBAAgBD,EAAM,EAAG,CAGvB,GAAI,KAAK,iBAAmB,KAAM,CAGhC,GAAIA,GAAO,KAAK,eAAgB,CAC9B,KAAK,SAAW,KAAK,mBACrB,KAAK,eAAiB,KACtB,KAAK,kBAAkB,EACvB,MACF,CAEA,IAAM6B,EAAW,KAAK,eAAiB,KAAK,iBACxCC,GAAS9B,EAAM,KAAK,kBAAoB6B,EAC5CC,EAASA,EAAQ,EAAI,EAAIA,EACzB,IAAMC,EAAW,KAAK,mBAAqB,KAAK,qBAEhD,KAAK,SAAW,KAAK,qBAAuBA,EAAW,KAAK,sBAAsBD,CAAK,EAEvF,KAAK,QAAQ,EAEb,MAEF,CAGA,GAAI,KAAK,qBAAuB,KAAM,CAEpC,IAAMA,EAAQ9B,EAAM,KAAK,mBAErB8B,EAAQ,IAEV,KAAK,UAAcA,EAAQ,IAAQ,KAAK,eAAkB,IAC1D,KAAK,eAAiB,KAAK,yBAAyBA,CAAK,EAGrD,KAAK,iBAAmB,GAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAqB,MAE1B,KAAK,mBAAqB9B,GAK9B,KAAK,QAAQ,EAEb,MAEF,CAEF,CAEA,yBAAyB8B,EAAQ,EAAG,CAGlC,IAAME,EAAmB,KAAK,eAAmB,KAAK,oBAAsBF,EAAQ,KAAS,KAAK,mBAIlG,OAAK,KAAK,qBAAuB,GAAKE,EAAmB,GAAO,KAAK,qBAAuB,IAAMA,GAAoB,EAC7G,EAGFA,CAET,CAOA,KAAKC,EAAgB,EAAG,CACtB,GAAI,CAAMC,GAASD,CAAa,EAAG,MAAM,IAAI,MAAM,gCAAgC,EACnF,KAAK,WAAa,CAAC,EACnB,KAAK,UAAUA,EAAe,MAAM,CACtC,CASA,OAAOE,EAAW,EAAGN,EAAW,EAAGO,EAAiB,KAAM,CAExD,GAAI,CAAMF,GAASC,CAAQ,EAAG,MAAM,IAAI,MAAM,kCAAkC,EAChF,GAAI,CAAMD,GAASL,CAAQ,EAAG,MAAM,IAAI,MAAM,kCAAkC,EAEhF,KAAK,KAAK,EAEV,KAAK,WAAa,CAAC,EAEnB,KAAK,QAAQM,EAAUN,EAAUO,CAAc,EAE/C,KAAK,kBAAkB,CAAC,OAAQ,SAAU,eAAgBD,EAAU,SAAAN,CAAQ,CAAC,CAE/E,CAWA,WAAWQ,EAAY,EAAGR,EAAW,EAAGS,EAAe,GAAMC,EAAsB,EAAGC,EAAY,EAAGJ,EAAiB,KAAM,CAE1H,KAAK,KAAK,EAEV,KAAK,WAAa,CAAC,EAEnB,IAAMK,EAAYH,EAAe,KAAK,MAAMD,CAAS,EAAE,eAAe,EAAI,KAAK,MAAMA,CAAS,EAAE,eAAe,EAE3GK,EAAmBC,GAAgC,KAAK,SAAUF,EAAY,KAAK,cAAeD,CAAS,EAC/GE,GAAiBH,EAAsB,IAAOC,EAE9C,KAAK,QAAQE,EAAab,EAAUO,CAAc,EAElD,KAAK,kBAAkB,CAAC,OAAQ,aAAc,gBAAiBC,EAAW,eAAgBK,EAAa,SAAAb,CAAQ,CAAC,CAElH,CAEA,QAAQa,EAAab,EAAUO,EAAgB,CAC7C,KAAK,qBAAuB,KAAK,SACjC,KAAK,mBAAqBM,EAC1B,KAAK,iBAAmB,YAAY,IAAI,EACxC,KAAK,eAAiB,KAAK,iBAAmBb,EAC9C,KAAK,sBAAwBO,GAAuBQ,GACpD,KAAK,QAAQ,CACf,CAKA,MAAO,CAGL,KAAK,eAAiB,KAGtB,KAAK,eAAiB,EACtB,KAAK,mBAAqB,IAE5B,CAKA,gBAAgBC,EAAG,CAChB,OAAQA,EAAc,IAAkB,KAAK,KAChD,CAEA,qBAAsB,CACpB,OAAQ,KAAK,cAAgB,EAAK,KAAK,YAAc,OAAO,gBAC9D,CAKA,aAAaC,EAAQ,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAC/B,IAAMC,EAASC,GAAqBF,EAAO,KAAK,OAAQ,KAAK,oBAAoB,CAAC,EAClF,OAAYG,GAAgBF,EAAG,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAG,KAAK,aAAa,CACnF,CAMA,eAAgB,CAEd,GAAI,KAAK,cAAe,CAEtB,GAAI,KAAK,WAAY,CACnB,KAAK,OAAO,MAAM,OAAS,WAC3B,MACF,CAEA,GAAI,KAAK,kBAAmB,CAC1B,KAAK,OAAO,MAAM,OAAS,OAC3B,MACF,CAEF,CAEA,KAAK,OAAO,MAAM,OAAS,EAE7B,CAMA,mBAAmBD,EAAQ,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CACrC,OAAaI,GAAS,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAGJ,EAAM,EAAGA,EAAM,CAAC,EAAI,IAAM,GAClF,CAOA,iBAAkB,CAChB,OAAO,KAAK,aACd,CAKA,oBAAoB5C,EAAS,CAAC,EAAG,CAC3B,KAAK,OAAO,SAAW,IAAG,KAAK,cAAgB,IAEnD,OAAW,CAACE,EAAGG,CAAC,IAAKL,EAAO,QAAQ,EAElC,GAAUiD,GAAe,KAAK,cAAe5C,EAAE,MAAQ,IAAKA,EAAE,IAAM,GAAG,EAEvE,IAAI,KAAK,gBAAkBH,EAAG,MAE9B,KAAK,cAAgBA,EAEhB,KAAK,iBAAiB,KAAK,gCAAgC,EAEhE,MAGJ,CAKA,cAAcgD,EAAkB,EAAG,CAEjC,IAAIC,EAAY,EAChB,QAAWjD,KAAK,KAAK,MACnBiD,GAAajD,EAAE,OAEjB,IAAMkD,EAAoB,IAAMD,EAE5BZ,EACAc,EAAgBH,EACdlD,EAAS,CAAC,EAEhB,QAAWJ,KAAQ,KAAK,OACtB2C,EAAY3C,EAAK,OAASwD,EAC1BpD,EAAO,KAAK,CACV,MAAOqD,EACP,IAAKA,EAAgBd,CACvB,CAAC,EACDc,GAAiBd,EAMnB,OAAI,KAAK,OAAO,OAAS,IACvBvC,EAAOA,EAAO,OAAS,CAAC,EAAE,IAAMA,EAAO,CAAC,EAAE,MAAQ,KAG7CA,CAET,CAMA,SAAU,CACJ,KAAK,kBAAoB,OAC3B,KAAK,gBAAkB,OAAO,sBAAsBsD,GAAK,KAAK,KAAKA,CAAC,CAAC,EAEzE,CAEA,WAAWC,EAAQ,EAAGC,EAAM,EAAG,CAE7B,IAAMC,EAAW,KAAK,IAAIF,EAAOC,CAAG,EACpC,OAAO,KAAK,IAAIC,EAAU,CAACD,CAAG,CAChC,CAEA,UAAUD,EAAQ,EAAGG,EAAa,GAAI,CACpC,KAAK,KAAK,EAEV,KAAK,eAAiB,KAAK,WAAWH,EAAO,KAAK,iBAAiB,EACnE,KAAK,mBAAqB,YAAY,IAAI,EAE1C,KAAK,mBAAsB,KAAK,gBAAkB,EAAK,EAAI,GAEvD,KAAK,iBAAmB,GAC1B,KAAK,kBAAkB,CACrB,OAAQG,EACR,cAAe,KAAK,eACpB,mBAAoB,KAAK,mBAC3B,CAAC,EAGH,KAAK,QAAQ,CACf,CAEA,kBAAmB,CAEjB,KAAK,OAAO,aAAa,OAAQ,KAAK,EACtC,IAAMC,EAAoB,KAAK,MAAM,QAAU,EAAK,kBAAkB,KAAK,MAAM,MAAM,WAAa,GACpG,KAAK,OAAO,aAAa,aAAc,sCAAwCA,CAAgB,CACjG,CAKA,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CACA,IAAI,YAAYC,EAAK,CACnB,KAAK,aAAoBC,GAAQ,CAC/B,IAAAD,EACA,QAAS,OAAOA,GAAQ,SACxB,aAAc,qCACd,aAAcxE,GAAS,MAAM,WAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CACA,IAAI,YAAYwE,EAAK,CACnB,KAAK,aAAoBC,GAAQ,CAC/B,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,qCACd,aAAcxE,GAAS,MAAM,WAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAMA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMwE,EAAK,CACb,KAAK,OAAcC,GAAQ,CACzB,IAAAD,EACA,QAAS,OAAOA,GAAQ,UACxB,aAAc,gCACd,aAAcxE,GAAS,MAAM,KAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAMA,IAAI,OAAQ,CACV,OAAO,KAAK,QAAQ,KAAO,IAC7B,CACA,IAAI,MAAMwE,EAAK,CACb,KAAK,OAAcC,GAAQ,CACzB,IAAAD,EACA,QAAS,OAAOA,GAAQ,UAAYA,IAAQ,KAC5C,aAAc,6CACd,aAAcxE,GAAS,MAAM,MAC7B,OAAQ,IAAM,CACZ,GAAIwE,IAAQ,KAAM,OAAO,KACzB,IAAME,EAAI,IAAI,MACd,OAAAA,EAAE,IAAMF,EACRE,EAAE,OAASC,GAAK,KAAK,QAAQ,EACtBD,CACT,CACF,CAAC,EAED,KAAK,QAAQ,CACf,CAMA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CACA,IAAI,cAAcF,EAAK,CACrB,KAAK,eAAsBC,GAAQ,CACjC,IAAAD,EACA,QAAS,OAAOA,GAAQ,UACxB,aAAc,wCACd,aAAcxE,GAAS,MAAM,aAC/B,CAAC,EAED,KAAK,cAAc,CACrB,CAOA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CACA,IAAI,qBAAqBwE,EAAK,CAC5B,KAAK,sBAA6BC,GAAQ,CACxC,IAAAD,EACA,QAAS,MAAM,QAAQA,CAAG,EAC1B,aAAc,8CACd,aAAcxE,GAAS,MAAM,oBAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAOA,IAAI,gBAAiB,CACnB,OAAO,KAAK,eACd,CACA,IAAI,eAAewE,EAAK,CACtB,KAAK,gBAAuBC,GAAQ,CAClC,IAAAD,EACA,QAAS,OAAOA,GAAQ,SACxB,aAAc,wCACd,aAAcxE,GAAS,MAAM,cAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,yBAA0B,CAC5B,OAAO,KAAK,wBACd,CACA,IAAI,wBAAwBwE,EAAK,CAC/B,KAAK,yBAAgCC,GAAQ,CAC3C,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,iDACd,aAAcxE,GAAS,MAAM,uBAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAOA,IAAI,iBAAkB,CACpB,OAAO,KAAK,gBACd,CACA,IAAI,gBAAgBwE,EAAK,CACvB,KAAK,iBAAwBC,GAAQ,CACnC,IAAAD,EACA,QAAS,MAAM,QAAQA,CAAG,EAC1B,aAAc,yCACd,aAAcxE,GAAS,MAAM,eAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAOA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CACA,IAAI,cAAcwE,EAAK,CACrB,KAAK,eAAsBC,GAAQ,CACjC,IAAAD,EACA,QAAS,OAAOA,GAAQ,SACxB,aAAc,uCACd,aAAcxE,GAAS,MAAM,aAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAKA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CACA,IAAI,qBAAqBwE,EAAK,CAC5B,KAAK,sBAA6BC,GAAQ,CACxC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,8CACd,aAAcxE,GAAS,MAAM,oBAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAMA,IAAI,iBAAkB,CACpB,OAAO,KAAK,gBACd,CACA,IAAI,gBAAgBwE,EAAK,CACvB,KAAK,iBAAwBC,GAAQ,CACnC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,yCACd,aAAcxE,GAAS,MAAM,eAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAMA,IAAI,oBAAqB,CACvB,OAAO,KAAK,mBACd,CACA,IAAI,mBAAmBwE,EAAK,CAC1B,KAAK,oBAA2BC,GAAQ,CACtC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,4CACd,aAAcxE,GAAS,MAAM,kBAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAMA,IAAI,mBAAoB,CACtB,OAAO,KAAK,kBACd,CACA,IAAI,kBAAkBwE,EAAK,CACzB,KAAK,mBAA0BC,GAAQ,CACrC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,2CACd,aAAcxE,GAAS,MAAM,iBAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CACA,IAAI,qBAAqBwE,EAAK,CAC5B,KAAK,sBAA6BC,GAAQ,CACxC,IAAAD,EACA,QAAS,OAAOA,GAAQ,SACxB,aAAc,8CACd,aAAcxE,GAAS,MAAM,oBAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CACA,IAAI,qBAAqBwE,EAAK,CAC5B,KAAK,sBAA6BC,GAAQ,CACxC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,8CACd,aAAcxE,GAAS,MAAM,oBAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMwE,EAAK,CACb,KAAK,OAAcC,GAAQ,CACzB,IAAAD,EACA,QAAS,MAAM,QAAQA,CAAG,EAC1B,aAAc,wCACd,aAAcxE,GAAS,MAAM,MAC7B,OAAQ,IAAM,CACZ,IAAM0E,EAAI,CAAC,EACX,QAAWlE,KAAQgE,EACjBE,EAAE,KAAK,IAAIE,GAAK,KAAM,CACpB,gBAAiBpE,EAAK,gBACtB,MAAOA,EAAK,MACZ,YAAaA,EAAK,YAClB,cAAeA,EAAK,cACpB,WAAYA,EAAK,WACjB,MAAOA,EAAK,MACZ,WAAYA,EAAK,WACjB,MAAOA,EAAK,MACZ,OAAQA,EAAK,MACf,CAAC,CAAC,EAEJ,OAAOkE,CACT,CACF,CAAC,EAED,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,KAAK,cAAc,KAAK,SAAS,CAAC,EAC3D,KAAK,OAAO,CACd,CAKA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACA,IAAI,UAAUF,EAAK,CACjB,KAAK,WAAkBC,GAAQ,CAC7B,IAAAD,EACA,QAAS,OAAOA,GAAQ,SACxB,aAAc,mCACd,aAAcxE,GAAS,MAAM,SAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACA,IAAI,UAAUwE,EAAK,CACjB,KAAK,WAAkBC,GAAQ,CAC7B,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,mCACd,aAAcxE,GAAS,MAAM,SAC/B,CAAC,EAED,KAAK,QAAQ,CACf,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOwE,EAAK,CACd,KAAK,QAAeC,GAAQ,CAC1B,IAAAD,EACA,QAAczE,GAASyE,CAAG,EAC1B,aAAc,iCACd,aAAcxE,GAAS,MAAM,MAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAKA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CACA,IAAI,qBAAqBwE,EAAK,CAC5B,KAAK,sBAA6BC,GAAQ,CACxC,IAAAD,EACA,QAAS,OAAOA,GAAQ,YAAcA,IAAQ,KAC9C,aAAc,wDACd,aAAcxE,GAAS,MAAM,oBAC/B,CAAC,CACH,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOwE,EAAK,CACd,KAAK,QAAeC,GAAQ,CAC1B,IAAAD,EACA,QAAS,OAAOA,GAAQ,YAAcA,IAAQ,KAC9C,aAAc,0CACd,aAAcxE,GAAS,MAAM,MAC/B,CAAC,CACH,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOwE,EAAK,CACd,KAAK,QAAeC,GAAQ,CAC1B,IAAAD,EACA,QAAS,OAAOA,GAAQ,YAAcA,IAAQ,KAC9C,aAAc,0CACd,aAAcxE,GAAS,MAAM,MAC/B,CAAC,CACH,CAOA,IAAI,cAAe,CACjB,OAAO,KAAK,eAAe,KAAO,IACpC,CACA,IAAI,aAAawE,EAAK,CACpB,KAAK,cAAqBC,GAAQ,CAChC,IAAAD,EACA,QAAS,OAAOA,GAAQ,UAAYA,IAAQ,KAC5C,aAAc,oDACd,aAAcxE,GAAS,MAAM,aAC7B,OAAQ,IAAM,CACZ,GAAIwE,IAAQ,KAAM,OAAO,KACzB,IAAME,EAAI,IAAI,MACd,OAAAA,EAAE,IAAMF,EACRE,EAAE,OAASC,GAAK,KAAK,QAAQ,EACtBD,CACT,CACF,CAAC,EAED,KAAK,QAAQ,CACf,CAOA,IAAI,YAAa,CACf,OAAO,KAAK,WACd,CACA,IAAI,WAAWF,EAAK,CAClB,KAAK,YAAmBC,GAAQ,CAC9B,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,oCACd,aAAcxE,GAAS,MAAM,UAC/B,CAAC,EACD,KAAK,WAAa,CAAC,EACnB,KAAK,OAAO,CACd,CAKA,IAAI,cAAe,CACjB,OAAO,KAAK,aACd,CACA,IAAI,aAAawE,EAAK,CACpB,KAAK,cAAqBC,GAAQ,CAChC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,GAAKA,GAAO,EACtC,aAAc,wDACd,aAAcxE,GAAS,MAAM,aAC7B,OAAQ,IAAMwE,EAAM,GACtB,CAAC,EAEG,KAAK,OAAO,KAAK,QAAQ,CAC/B,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CACA,IAAI,OAAOA,EAAK,CACd,KAAK,QAAeC,GAAQ,CAC1B,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,gCACd,aAAcxE,GAAS,MAAM,MAC/B,CAAC,EAED,KAAK,OAAO,CACd,CAOA,IAAI,UAAW,CACb,OAAO,KAAK,SACd,CACA,IAAI,SAASwE,EAAK,CAChB,KAAK,UAAiBC,GAAQ,CAC5B,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,kCACd,aAAcxE,GAAS,MAAM,QAC/B,CAAC,EAED,KAAK,oBAAoB,KAAK,cAAc,KAAK,SAAS,CAAC,EAC3D,KAAK,QAAQ,CACf,CAOA,IAAI,oBAAqB,CACvB,OAAO,KAAK,mBACd,CACA,IAAI,mBAAmBwE,EAAK,CAC1B,KAAK,oBAA2BC,GAAQ,CACtC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,EAC1B,aAAc,4CACd,aAAcxE,GAAS,MAAM,kBAC/B,CAAC,CACH,CAMA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CAMA,IAAI,kBAAmB,CACrB,OAAO,KAAK,iBACd,CACA,IAAI,iBAAiBwE,EAAK,CACxB,KAAK,kBAAyBC,GAAQ,CACpC,IAAAD,EACA,QAAc5B,GAAS4B,CAAG,GAAKA,GAAO,EACtC,aAAc,+CACd,aAAcxE,GAAS,MAAM,gBAC/B,CAAC,CACH,CAKA,UAAUwD,EAAQ,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAE5B,IAAMC,EAASC,GAAqBF,EAAO,KAAK,OAAQ,KAAK,oBAAoB,CAAC,EAElF,KAAK,WAAa,GAElB,KAAK,KAAK,EAEV,KAAK,WAAa,CAAC,CACjB,SAAU,EACV,EAAGC,EAAE,EACL,EAAGA,EAAE,EACL,IAAI,YAAY,IAAI,CACtB,CAAC,EAED,KAAK,cAAc,CAErB,CAEA,SAASD,EAAQ,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAE3B,IAAMC,EAASC,GAAqBF,EAAO,KAAK,OAAQ,KAAK,oBAAoB,CAAC,EAC5EvC,EAAI,KAAK,mBAAmBwC,CAAC,EAE7BoB,EAAgB,KAAK,WAAW,CAAC,EACjCC,EAAY,KAAK,mBAAmBD,CAAa,EACjDE,EAA0BC,GAAUF,EAAW7D,CAAC,EAEtD,KAAK,WAAW,QAAQ,CACtB,SAAU8D,EACV,EAAGtB,EAAE,EACL,EAAGA,EAAE,EACL,IAAI,YAAY,IAAI,CACtB,CAAC,EAGG,KAAK,OAAS,KAAK,WAAW,QAAU,IAAI,KAAK,WAAW,IAAI,EAGpE,KAAK,UAAYsB,CAEnB,CAMA,SAAU,CAER,KAAK,WAAa,GAGlB,IAAIE,EAAe,EACbvE,EAAM,YAAY,IAAI,EAE5B,OAAW,CAAC,EAAG2B,CAAK,IAAK,KAAK,WAAW,QAAQ,EAAG,CAElD,GAAI,CAAC,KAAK,kBAAkB3B,EAAK2B,CAAK,EAAG,CACvC4C,GAAgB5C,EAAM,SACtB,QACF,CAGA,KAAK,WAAW,OAAS,EACrB,KAAK,OAAO,KAAK,QAAQ,EAC7B,KAEF,CAEA,KAAK,cAAc,EAEf4C,IAAiB,GAErB,KAAK,UAAUA,GAAgB,IAAiB,KAAoB,UAAU,CAEhF,CAEA,kBAAkBvE,EAAM,EAAG2B,EAAQ,CAAC,EAAG,CACrC,OAAQ3B,EAAM2B,EAAM,IAAiB,GACvC,CAEA,gCAAgC6C,EAAO,CAAC,EAAG,CACzC,KAAK,uBAAuB,CAC1B,KAAM,qBACN,aAAc,KAAK,cACnB,GAAGA,CACL,CAAC,CACH,CAEA,kBAAkBA,EAAO,CAAC,EAAG,CAC3B,KAAK,SAAS,CACZ,KAAM,OACN,aAAc,KAAK,cACnB,SAAU,KAAK,UACf,GAAGA,CACL,CAAC,CACH,CAEA,kBAAkBA,EAAO,CAAC,EAAG,CAC3B,KAAK,SAAS,CACZ,KAAM,OACN,GAAGA,CACL,CAAC,CACH,CAEF,ECt5CA,SAASC,GAAsBC,EAAKC,EAAK,CACrC,OAAO,KAAK,MAAM,KAAK,OAAO,GAAKA,EAAMD,EAAM,GAAKA,CAAG,CAC3D,CAEA,IAAOE,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,OAAQ,MACR,YAAa,OACb,aAAc,OACd,YAAa,MACb,eAAgB,MAChB,QAAS,MACb,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,iBAAkB,kBAAmB,qBAAsB,gBAAgB,CACvF,CAEA,aAAc,CACV,IAAMC,EAAQ,KAAK,YAEnB,KAAK,qBAAqB,MAAQ,IAAIC,GAClC,KAAK,qBACL,CACI,cAAe,GACf,qBAAsB,KAAK,oBAC3B,eAAgB,OAChB,wBAAyB,EACzB,gBAAiB,KAAK,iBACtB,qBAAsB,GACtB,cAAe,iCACf,gBAAiB,IACjB,mBAAoB,GACpB,kBAAmB,IACnB,MAAOD,EACP,aAAc,KAAK,kBACnB,MAAO,KAAK,iBACZ,UAAW,OACX,UAAW,EACX,OAAQ,GAAK,KAAK,WAAW,CAAC,EAC9B,OAAQ,GAAK,KAAK,YAAY,CAAC,EAC/B,OAAQ,IACR,mBAAoB,KACpB,iBAAkB,GACtB,CACJ,CACJ,CAEA,YAAYE,EAAG,CACX,IAAMC,EAAeD,EAAE,SAAW,KAAK,yBAEvC,GAAIC,GAAgBD,EAAE,SAAW,WAAY,CACzC,KAAK,yBAAyB,SAAW,GACzC,KAAK,qBAAqB,MAAM,cAAgB,GAChD,IAAIE,EAAkB,KAAK,YAAY,IAAI,CAACC,EAAMC,KAAW,CAAE,KAAMD,EAAM,MAAOC,CAAM,EAAE,EAAE,OAAOC,GAAKA,EAAE,KAAK,QAAU,CAAC,EAC1H,KAAK,qBAAqB,MAAM,WAC5B,KAAK,aACD,KAAK,YAAY,UAAUA,GAAKA,EAAE,QAAU,KAAK,YAAY,EAC7DH,EAAgB,KAAK,MAAM,KAAK,OAAO,EAAIA,EAAgB,MAAM,CAAC,EAAE,MACxET,GAAsB,KAAM,GAAI,EAChC,GACAA,GAAsB,EAAG,CAAC,EAC1BQ,GAAgBD,EAAE,cAAgB,EAAI,EAAI,GAC1C,IACJ,CACJ,CACJ,CAEA,YAAa,CACT,WACI,IAAM,CACF,KAAK,yBAAyB,UAAU,IAAI,QAAQ,EACpD,KAAK,sBAAsB,UAAU,OAAO,QAAQ,EACpD,KAAK,qBAAqB,UAAU,OAAO,QAAQ,CACvD,EACA,GACJ,CACJ,CACJ,EC7FA,IAAIM,GAAsC,UAAY,CAClD,OAAAA,GAAW,OAAO,QAAU,SAASC,EAAG,CACpC,QAASC,EAAGC,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IAAK,CACjDD,EAAI,UAAUC,CAAC,EACf,QAASE,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,IAC1DJ,EAAEI,CAAC,EAAIH,EAAEG,CAAC,EAClB,CACA,OAAOJ,CACX,EACOD,GAAS,MAAM,KAAM,SAAS,CACzC,EACIM,GAAW,CACX,MAAO,GACP,OAAQ,EACR,MAAO,EACP,OAAQ,GACR,MAAO,EACP,QAAS,EACT,MAAO,OACP,UAAW,cACX,UAAW,4BACX,OAAQ,EACR,UAAW,EACX,MAAO,EACP,OAAQ,IACR,UAAW,UACX,IAAK,MACL,KAAM,MACN,OAAQ,sBACR,SAAU,UACd,EACIC,GAAyB,UAAY,CACrC,SAASA,EAAQC,EAAM,CACfA,IAAS,SAAUA,EAAO,CAAC,GAC/B,KAAK,KAAOR,GAASA,GAAS,CAAC,EAAGM,EAAQ,EAAGE,CAAI,CACrD,CAMA,OAAAD,EAAQ,UAAU,KAAO,SAAUE,EAAQ,CACvC,YAAK,KAAK,EACV,KAAK,GAAK,SAAS,cAAc,KAAK,EACtC,KAAK,GAAG,UAAY,KAAK,KAAK,UAC9B,KAAK,GAAG,aAAa,OAAQ,aAAa,EAC1CC,GAAI,KAAK,GAAI,CACT,SAAU,KAAK,KAAK,SACpB,MAAO,EACP,OAAQ,KAAK,KAAK,OAClB,KAAM,KAAK,KAAK,KAChB,IAAK,KAAK,KAAK,IACf,UAAW,SAAW,KAAK,KAAK,MAAQ,GAC5C,CAAC,EACGD,GACAA,EAAO,aAAa,KAAK,GAAIA,EAAO,YAAc,IAAI,EAE1DE,GAAU,KAAK,GAAI,KAAK,IAAI,EACrB,IACX,EAKAJ,EAAQ,UAAU,KAAO,UAAY,CACjC,OAAI,KAAK,KACD,OAAO,sBAA0B,IACjC,qBAAqB,KAAK,SAAS,EAGnC,aAAa,KAAK,SAAS,EAE3B,KAAK,GAAG,YACR,KAAK,GAAG,WAAW,YAAY,KAAK,EAAE,EAE1C,KAAK,GAAK,QAEP,IACX,EACOA,CACX,EAAE,EAKF,SAASK,GAAIC,EAAIC,EAAO,CACpB,QAASC,KAAQD,EACbD,EAAG,MAAME,CAAI,EAAID,EAAMC,CAAI,EAE/B,OAAOF,CACX,CAIA,SAASG,GAASC,EAAOC,EAAK,CAC1B,OAAO,OAAOD,GAAS,SAAWA,EAAQA,EAAMC,EAAMD,EAAM,MAAM,CACtE,CAIA,SAASE,GAAUN,EAAIO,EAAM,CACzB,IAAIC,EAAgB,KAAK,MAAMD,EAAK,QAAUA,EAAK,MAAQ,GAAG,EAAI,IAAQ,KACtEE,EAAS,OACTF,EAAK,SAAW,GAChBE,EAAS,iBAEJ,OAAOF,EAAK,QAAW,WAC5BE,EAASF,EAAK,QAGlB,QADIG,EAAUC,GAAeF,CAAM,EAC1BG,EAAI,EAAGA,EAAIL,EAAK,MAAOK,IAAK,CACjC,IAAIC,EAAU,CAAC,EAAE,IAAMN,EAAK,MAAQK,EAAIL,EAAK,QACzCO,EAAiBf,GAAI,SAAS,cAAc,KAAK,EAAG,CACpD,SAAU,WACV,IAAK,CAACQ,EAAK,MAAQ,EAAI,KACvB,MAAQA,EAAK,OAASA,EAAK,MAAS,KACpC,OAAQA,EAAK,MAAQ,KACrB,WAAYJ,GAASI,EAAK,UAAWK,CAAC,EACtC,aAAcJ,EACd,gBAAiB,OACjB,UAAW,UAAYK,EAAU,mBAAqBN,EAAK,OAAS,KACxE,CAAC,EACGQ,EAAQH,EAAIL,EAAK,UAAYA,EAAK,MAAQA,EAAK,MACnDQ,GAAS,EAAIR,EAAK,MAClB,IAAIS,EAAOjB,GAAI,SAAS,cAAc,KAAK,EAAG,CAC1C,MAAO,OACP,OAAQ,OACR,WAAYI,GAASI,EAAK,MAAOK,CAAC,EAClC,aAAcJ,EACd,UAAWS,GAAgBP,EAASG,CAAO,EAC3C,UAAW,EAAIN,EAAK,MAAQ,YAAcQ,EAAQ,cAAgBR,EAAK,SAC3E,CAAC,EACDO,EAAe,YAAYE,CAAI,EAC/BhB,EAAG,YAAYc,CAAc,CACjC,CACJ,CACA,SAASH,GAAeO,EAAW,CAG/B,QAFIC,EAAQ,kFACRT,EAAU,CAAC,EACNU,EAAK,EAAGC,EAAKH,EAAU,MAAM,GAAG,EAAGE,EAAKC,EAAG,OAAQD,IAAM,CAC9D,IAAIX,EAASY,EAAGD,CAAE,EACdE,EAAUb,EAAO,MAAMU,CAAK,EAChC,GAAIG,IAAY,KAGhB,KAAIC,EAAI,CAACD,EAAQ,CAAC,EACdE,EAAI,CAACF,EAAQ,CAAC,EACdG,EAASH,EAAQ,CAAC,EAClBI,EAASJ,EAAQ,CAAC,EAClBC,IAAM,GAAK,CAACE,IACZA,EAASC,GAETF,IAAM,GAAK,CAACE,IACZA,EAASD,GAETA,IAAWC,GAGfhB,EAAQ,KAAK,CACT,OAAQY,EAAQ,CAAC,GAAK,GACtB,EAAGC,EACH,EAAGC,EACH,OAAQC,EACR,OAAQC,EACR,IAAKJ,EAAQ,CAAC,CAClB,CAAC,EACL,CACA,OAAOZ,CACX,CAIA,SAASO,GAAgBP,EAASG,EAAS,CAEvC,QADIc,EAAa,CAAC,EACTP,EAAK,EAAGQ,EAAYlB,EAASU,EAAKQ,EAAU,OAAQR,IAAM,CAC/D,IAAIX,EAASmB,EAAUR,CAAE,EACrBS,EAAKC,GAAcrB,EAAO,EAAGA,EAAO,EAAGI,CAAO,EAClDc,EAAW,KAAKlB,EAAO,OAASoB,EAAG,CAAC,EAAIpB,EAAO,OAAS,IAAMoB,EAAG,CAAC,EAAIpB,EAAO,OAASA,EAAO,GAAG,CACpG,CACA,OAAOkB,EAAW,KAAK,IAAI,CAC/B,CACA,SAASG,GAAcP,EAAGC,EAAGX,EAAS,CAClC,IAAIkB,EAAUlB,EAAU,KAAK,GAAK,IAC9BmB,EAAM,KAAK,IAAID,CAAO,EACtBE,EAAM,KAAK,IAAIF,CAAO,EAC1B,MAAO,CACH,KAAK,OAAOR,EAAIU,EAAMT,EAAIQ,GAAO,GAAI,EAAI,IACzC,KAAK,OAAO,CAACT,EAAIS,EAAMR,EAAIS,GAAO,GAAI,EAAI,GAC9C,CACJ,CC1LA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,SAAU,CACN,IAAIC,GAAQ,EAAE,KAAK,KAAK,OAAO,CACnC,CACJ,ECLA,SAASC,GAAmBC,EAAMC,EAAO,CACrC,IAAIC,EAAQ,SAAS,cAAc,OAAO,EAE1C,OAAAA,EAAM,aAAa,OAAQ,QAAQ,EACnCA,EAAM,aAAa,KAAMF,CAAI,EAC7BE,EAAM,aAAa,OAAQF,CAAI,EAC/BE,EAAM,aAAa,QAASD,CAAK,EAE1BC,CACX,CAEA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,QAAS,MACb,CACJ,CAEA,SAAU,CACN,IAAIC,EAAU,KAAK,QAAQ,QACvBA,IAAY,IACZ,KAAK,QAAQ,iBAAiB,QAAS,GAAK,KAAK,uBAAuB,CAAC,CAAC,EAErEA,IAAY,UACjB,KAAK,QAAQ,iBAAiB,QAAS,GAAK,KAAK,yBAAyB,CAAC,CAAC,CAEpF,CAEA,uBAAuBC,EAAG,CACtBA,EAAE,eAAe,EACjB,QAAQ,QAAQ,KAAK,aAAc,SAAUC,EAAW,CAChDA,IACA,OAAO,SAAS,KAAOD,EAAE,OAAO,KAExC,CAAC,CACL,CAEA,yBAAyBA,EAAG,CACxBA,EAAE,eAAe,EAEjB,QAAQ,QAAQ,KAAK,aAAc,SAAUC,EAAW,CACpD,GAAIA,EAAW,CACX,IAAIC,EAAUF,EAAE,OAEZG,EAAOD,EAAQ,QAAQ,MAAM,EAC7BR,EAAOQ,EAAQ,aAAa,MAAM,EAEtC,GAAIR,EAAM,CACN,IAAIC,EAAQO,EAAQ,aAAa,OAAO,EACxC,GAAIP,EAAO,CACP,IAAIS,EAAWD,EAAK,cAAc,eAAeT,CAAI,IAAI,EACzD,GAAKU,EAKDA,EAAS,MAAQT,MALN,CACX,IAAIC,EAAQH,GAAmBC,EAAMC,CAAK,EAC1CQ,EAAK,OAAOP,CAAK,CACrB,CAIJ,CACJ,CAEAO,EAAK,OAAO,CAChB,CACJ,CAAC,CACL,CACJ,ECjEA,IAAOE,GAAP,cAA6BC,EAAW,CACpC,WAAW,SAAU,CACjB,MAAO,CAAC,cAAe,wBAAwB,CACnD,CAEA,0BAA0B,CAAE,cAAAC,CAAc,EAAG,CACzC,IAAIC,EAAgBD,EAAc,QAAQA,EAAc,aAAa,EAAE,MACnEC,IAAkB,QAClB,KAAK,6BAA6B,UAAU,OAAO,MAAM,EAGzD,KAAK,6BAA6B,UAAU,IAAI,MAAM,CAE9D,CACJ,ECfA,IAAAC,GAAyB,SAElBC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,YAAa,OACb,mBAAoB,KACxB,CACJ,CAEA,MAAM,SAAU,CACZ,GAAI,CAAC,KAAK,kBAAmB,CACzB,KAAM,QAAO,8BAA8B,EAC3C,IAAMC,EAAc,KAAK,QAAQ,KAAK,KAAK,gBAAgB,EAC3D,KAAK,qBAAoB,GAAAC,SACrB,KAAK,QACL,CACI,iBAAkB,GAClB,cAAe,KAAK,wBACpB,eAAgBD,EAAY,KAChC,CACJ,EACAA,EAAY,MAAQ,KAAK,kBAAkB,uBAAuB,EAAE,KAAK,YAAY,EACrF,KAAK,QAAQ,iBAAiB,gBAAiB,IAAM,CACjDA,EAAY,MAAQ,KAAK,kBAAkB,uBAAuB,EAAE,KAAK,YAAY,CACzF,CAAC,CACL,CACJ,CACJ,EC7Be,SAARE,GAA+CC,EAAQC,EAAU,CACtE,GAAID,GAAU,KAAM,MAAO,CAAC,EAC5B,IAAIE,EAAS,CAAC,EACVC,EAAa,OAAO,KAAKH,CAAM,EAC/BI,EAAKC,EACT,IAAKA,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IACjCD,EAAMD,EAAWE,CAAC,EACd,EAAAJ,EAAS,QAAQG,CAAG,GAAK,KAC7BF,EAAOE,CAAG,EAAIJ,EAAOI,CAAG,GAE1B,OAAOF,CACT,CCXe,SAARI,IAA4B,CACjC,OAAAA,GAAW,OAAO,OAAS,OAAO,OAAO,KAAK,EAAI,SAAUC,EAAQ,CAClE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAS,UAAUD,CAAC,EACxB,QAASE,KAAOD,EACV,OAAO,UAAU,eAAe,KAAKA,EAAQC,CAAG,IAClDH,EAAOG,CAAG,EAAID,EAAOC,CAAG,EAG9B,CACA,OAAOH,CACT,EACOD,GAAS,MAAM,KAAM,SAAS,CACvC,CCVA,IAAAK,GAAmB,SAEnB,IAAIC,GAAc,OACdC,GAAc,OAEdC,GAAU,CACZ,aAAcC,GACd,SAAUC,GACV,WAAYC,GACZ,UAAWC,GACX,aAAcC,GACd,WAAYC,GACZ,SAAUC,EACZ,EAEA,SAASN,GAAaO,EAAOC,EAAQ,CACnC,IAAIC,EAAS,SAAS,cAAc,QAAQ,EAC5C,OAAAA,EAAO,MAAQF,EACfE,EAAO,OAASD,EACTC,CACT,CAEA,SAASR,GAASS,EAAI,CACpB,OAAOA,aAAc,iBACvB,CAEA,SAASR,GAAWQ,EAAI,CACtB,OAAOT,GAASS,CAAE,GAAKA,aAAc,gBACvC,CASA,SAASP,GAAUI,EAAOC,EAAQ,CAChC,OAAOT,GAAQ,aAAaQ,EAAOC,GAAiBD,CAAc,CACpE,CAEA,SAASH,GAAaK,EAAQF,EAAOC,EAAQ,CAC3C,OAAIC,GACFA,EAAO,MAAQF,EACfE,EAAO,OAASD,GAAiBD,EAC1BE,GAGFN,GAAUI,EAAOC,CAAM,CAChC,CAUA,SAASH,GAAWI,EAAQE,EAAMC,EAAS,CACrCA,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIC,EAAWD,EACXE,EAAWD,EAAS,SACpBE,EAAUF,EAAS,QACnBG,EAAiBH,EAAS,MAC1BI,EAAQD,IAAmB,OAAS,GAAOA,EAC3CT,EAAQE,EAAO,MACfD,EAASC,EAAO,OAChBS,EAAQ,CAACP,CAAI,EACbQ,EAAMJ,GAAWN,EAAO,WAAW,IAAI,EAI3C,IAHIQ,GAAOE,EAAI,UAAU,EAAG,EAAGZ,EAAOC,CAAM,EAC5CW,EAAI,yBAA2B,cAExBD,EAAM,QAAQ,CACnB,IAAIE,EAAOF,EAAM,MAAM,EAEvB,GAAI,MAAM,QAAQE,CAAI,EACpBF,EAAQE,EAAK,OAAOF,CAAK,UAChBE,EAAM,CACf,IAAIC,EAAM,OAENtB,GAAQ,WAAWqB,CAAI,EACzBC,EAAM,CACJ,MAAOD,CACT,EACS,OAAOA,GAAS,SACzBC,EAAM,CACJ,MAAOD,CACT,EAEAC,EAAMD,EAGR,IAAIE,GAAKD,EAAI,KAAO,KAAOA,EAAI,EAAIA,EAAI,IAAMP,IAAa,EACtDS,GAAKF,EAAI,KAAO,KAAOA,EAAI,EAAIA,EAAI,IAAMP,IAAa,EACtDQ,EAAI,IAAGA,GAAKf,GACZgB,EAAI,IAAGA,GAAKhB,GAChB,IAAIiB,GAAK,SAAUH,EAAMA,EAAI,KAAOP,EAAWO,EAAI,IAAMd,EACrDkB,GAAK,SAAUJ,EAAMA,EAAI,KAAOP,EAAWO,EAAI,IAAMd,EAErDc,EAAI,MACNF,EAAI,UAAUE,EAAI,MAAOC,EAAGC,EAAGC,EAAGC,CAAC,GAEnCN,EAAI,UAAYE,EAAI,OAAS,QAC7BF,EAAI,SAASG,EAAGC,EAAGC,EAAGC,CAAC,EAE3B,CACF,CAEA,OAAOhB,CACT,CAEA,SAASH,GAASoB,EAAMd,EAAS,CAC/B,IAAIe,EAAOf,GAAW,CAAC,EACnBgB,EAAgBD,EAAK,SACrBE,EAAWD,IAAkB,OAAS,GAAKA,EAC3CE,EAAiBH,EAAK,UACtBI,EAAYD,IAAmB,OAAS,GAAKA,EAC7CE,EAAkBL,EAAK,WACvBM,EAAaD,IAAoB,OAAS,UAAYA,EACtDE,EAAaP,EAAK,MAClBQ,EAAQD,IAAe,OAAS,KAAOA,EACvCE,EAAWT,EAAK,IAChBU,EAAMD,IAAa,OAAS,EAAIA,EAChCE,EAAgBX,EAAK,SACrBY,EAAWD,IAAkB,OAASxC,GAAcwC,EACpDE,EAAYb,EAAK,KACjBc,EAAOD,IAAc,OAAS,EAAIA,EAElC/B,EAASN,GAAU,CAAC,EACpBgB,EAAMV,EAAO,WAAW,IAAI,EAC5BiC,EAEJ,GAAIH,EAAU,CACZpB,EAAI,UAAYoB,EAChBpB,EAAI,SAAS,EAAG,EAAG,EAAG,CAAC,EAEvB,IAAIwB,EAAoBxB,EAAI,aAAa,EAAG,EAAG,EAAG,CAAC,EAEnDuB,EAAcC,EAAkB,KAC3BD,EAAY,CAAC,IAAGA,EAAc,KACrC,CAEA,IAAIlC,EAASqB,EAAW,EAAIQ,EACxBO,EAAO,CAACb,EAAWF,EAAW,KAAMI,CAAU,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAExEY,EAAe,UAAwB,CACzC1B,EAAI,UAAY,SAChBA,EAAI,aAAe,SACnBA,EAAI,KAAOyB,CACb,EAEAC,EAAa,EACb,IAAItC,EAAQ,KAAK,KAAKY,EAAI,YAAYO,CAAI,EAAE,KAAK,EAAI,EAAIW,EACzD5B,EAAO,MAAQF,EACfE,EAAO,OAASD,EAChBqC,EAAa,EAEb,IAAIC,EAAW,UAAoB,CACjC3B,EAAI,UAAYgB,GAAStC,GACzBsB,EAAI,SAASO,EAAMnB,EAAQ,EAAGC,EAAS,CAAC,CAC1C,EAEA,OAAIiC,IAAS,GACXtB,EAAI,UAAYoB,EAChBpB,EAAI,SAAS,EAAG,EAAGZ,EAAOC,CAAM,EAChCsC,EAAS,IAETA,EAAS,EAELJ,GACD,UAAY,CA6CX,QA5CIK,EAAY5B,EAAI,aAAa,EAAG,EAAGZ,EAAOC,CAAM,EAChDG,EAAOoC,EAAU,KACjBC,EAAQzC,EAAQC,EAChByC,GAAS,CAAC,EACVC,GAAS,EAETC,GAAQ,SAAeC,GAAM,CAC/B,IAAIC,GAAU,CAAC,EACXC,GAAS,CAAC,EACdL,GAAOC,EAAM,EAAIG,GACjBH,GAAS,EAAIA,GACb,IAAIK,GAAON,GAAOC,EAAM,EAExB,GAAI,CAACK,GAAM,CACTA,GAAO,CAAC,EAER,QAASC,GAAI,EAAGA,GAAIR,EAAOQ,IAAK,EAC9BD,GAAK,KAAKC,EAAC,CAEf,CAEAD,GAAK,QAAQ,SAAUC,GAAG,CACpB7C,EAAK,EAAI6C,GAAI,CAAC,GAChB,CAACA,GAAIjD,EAAQiD,GAAI,EAAI,IAAKA,GAAI,GAAKjD,EAAQiD,GAAI,EAAI,GAAIA,GAAIjD,EAAOiD,GAAIjD,CAAK,EAAE,QAAQ,SAAUkD,GAAG,CAChG,IAAIC,EAAI,EAAID,GAERC,GAAK,GAAKA,GAAK/C,EAAK,QAAU,CAAC2C,GAAOG,EAAC,IACzCH,GAAOG,EAAC,EAAI,EACZJ,GAAQ,KAAKI,EAAC,EAElB,CAAC,CAEL,CAAC,EACDJ,GAAQ,QAAQ,SAAUG,GAAG,CAC3B,IAAIC,GAAI,EAAID,GAEZ,GAAI,CAAC7C,EAAK8C,GAAI,CAAC,EACb,QAASC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAC1B/C,EAAK8C,GAAIC,CAAC,EAAIhB,EAAYgB,CAAC,CAGjC,CAAC,CACH,EAESN,GAAO,EAAGA,GAAOf,EAAKe,IAAQ,EACrCD,GAAM,EAGRhC,EAAI,aAAa4B,EAAW,EAAG,CAAC,CAClC,EAAG,GAIAtC,CACT,CAEA,IAAIkD,GAAU,CACZ,QAAWC,GACX,MAAOC,GACP,OAAQC,GACR,KAAMC,EACR,EAEA,SAASH,GAAcjC,EAAM,CAC3B,IAAIqC,EAAarC,EAAK,WAClBb,EAAWa,EAAK,SAChBsC,EAAStC,EAAK,OACduC,EAAQvC,EAAK,MACbxB,EAAYJ,GAAQ,UACpBM,EAAaN,GAAQ,WACrBQ,EAAQO,EAAWoD,EACnBC,EAAahE,EAAUI,CAAK,EAC5BQ,EAAUoD,EAAW,WAAW,IAAI,EACxCpD,EAAQ,UAAYlB,GACpBuE,GAAU,CACR,SAAUtD,EACV,MAAOoD,CACT,EAAG,SAAUG,EAAO,CAClB,IAAIb,EAAIa,EAAM,EACVZ,EAAIY,EAAM,EACV/C,EAAI+C,EAAM,EACV9C,EAAI8C,EAAM,EAEVJ,EAAOT,EAAGC,CAAC,GACb1C,EAAQ,SAASO,EAAGC,EAAGT,EAAUA,CAAQ,CAE7C,CAAC,EACD,IAAIwD,EAAWnE,EAAUI,CAAK,EAC9BF,EAAWiE,EAAUN,EAAY,CAC/B,SAAUlD,CACZ,CAAC,EACD,IAAIK,EAAMmD,EAAS,WAAW,IAAI,EAClC,OAAAnD,EAAI,yBAA2B,iBAC/BA,EAAI,UAAUgD,EAAY,EAAG,CAAC,EACvBG,CACT,CAEA,SAAST,GAAYU,EAAOC,EAAa,CACvC,IAAIR,EAAaO,EAAM,WACnBzD,EAAWyD,EAAM,SACjBN,EAASM,EAAM,OACfL,EAAQK,EAAM,MACdpE,EAAYJ,GAAQ,UACpBM,EAAaN,GAAQ,WACrBQ,EAAQO,EAAWoD,EACnBC,EAAahE,EAAUI,CAAK,EAC5BkE,EAAqBD,EAAY,MACjCE,EAAQD,IAAuB,OAAS,EAAIA,EAC5CE,EAASD,EAAQ5D,EAAW,EAC5BC,EAAUoD,EAAW,WAAW,IAAI,EACxCpD,EAAQ,UAAYlB,GACpBuE,GAAU,CACR,SAAUtD,EACV,MAAOoD,CACT,EAAG,SAAUU,EAAO,CAClB,IAAIpB,EAAIoB,EAAM,EACVnB,EAAImB,EAAM,EACVtD,EAAIsD,EAAM,EACVrD,EAAIqD,EAAM,EAEVX,EAAOT,EAAGC,CAAC,IACb1C,EAAQ,UAAU,EAClBA,EAAQ,OAAOO,EAAI,GAAMR,EAAUS,CAAC,EACpCsD,GAAW9D,EAASO,EAAIR,EAAUS,EAAGD,EAAIR,EAAUS,EAAI,GAAMT,EAAU6D,CAAM,EAC7EE,GAAW9D,EAASO,EAAIR,EAAUS,EAAIT,EAAUQ,EAAI,GAAMR,EAAUS,EAAIT,EAAU6D,CAAM,EACxFE,GAAW9D,EAASO,EAAGC,EAAIT,EAAUQ,EAAGC,EAAI,GAAMT,EAAU6D,CAAM,EAClEE,GAAW9D,EAASO,EAAGC,EAAGD,EAAI,GAAMR,EAAUS,EAAGoD,CAAM,EAEvD5D,EAAQ,KAAK,EAEjB,CAAC,EACD,IAAIuD,EAAWnE,EAAUI,CAAK,EAC9BF,EAAWiE,EAAUN,EAAY,CAC/B,SAAUlD,CACZ,CAAC,EACD,IAAIK,EAAMmD,EAAS,WAAW,IAAI,EAClC,OAAAnD,EAAI,yBAA2B,iBAC/BA,EAAI,UAAUgD,EAAY,EAAG,CAAC,EACvBG,CACT,CAEA,SAASR,GAAagB,EAAON,EAAa,CACxC,IAAIR,EAAac,EAAM,WACnBhE,EAAWgE,EAAM,SACjBb,EAASa,EAAM,OACfZ,EAAQY,EAAM,MACd3E,EAAYJ,GAAQ,UACpBM,EAAaN,GAAQ,WACrBQ,EAAQO,EAAWoD,EACnBC,EAAahE,EAAUI,CAAK,EAC5BQ,EAAUoD,EAAW,WAAW,IAAI,EACxCpD,EAAQ,UAAYlB,GACpB,IAAIkF,EAAsBP,EAAY,MAClCE,EAAQK,IAAwB,OAAS,EAAIA,EAC7CJ,EAASD,EAAQ5D,EAAW,EAChCsD,GAAU,CACR,SAAUtD,EACV,MAAOoD,CACT,EAAG,SAAUc,EAAO,CAClB,IAAIxB,EAAIwB,EAAM,EACVvB,EAAIuB,EAAM,EACV1D,EAAI0D,EAAM,EACVzD,EAAIyD,EAAM,EACVC,EAAU,CAAC,EAAG,EAAG,EAAG,CAAC,EAErBhB,EAAOT,EAAI,EAAGC,CAAC,IACjBwB,EAAQ,CAAC,GAAK,EACdA,EAAQ,CAAC,GAAK,GAGZhB,EAAOT,EAAI,EAAGC,CAAC,IACjBwB,EAAQ,CAAC,GAAK,EACdA,EAAQ,CAAC,GAAK,GAGZhB,EAAOT,EAAGC,EAAI,CAAC,IACjBwB,EAAQ,CAAC,GAAK,EACdA,EAAQ,CAAC,GAAK,GAGZhB,EAAOT,EAAGC,EAAI,CAAC,IACjBwB,EAAQ,CAAC,GAAK,EACdA,EAAQ,CAAC,GAAK,GAGZhB,EAAOT,EAAGC,CAAC,GACTQ,EAAOT,EAAI,EAAGC,EAAI,CAAC,IAAGwB,EAAQ,CAAC,GAAK,GACpChB,EAAOT,EAAI,EAAGC,EAAI,CAAC,IAAGwB,EAAQ,CAAC,GAAK,GACpChB,EAAOT,EAAI,EAAGC,EAAI,CAAC,IAAGwB,EAAQ,CAAC,GAAK,GACpChB,EAAOT,EAAI,EAAGC,EAAI,CAAC,IAAGwB,EAAQ,CAAC,GAAK,GACxClE,EAAQ,UAAU,EAClBA,EAAQ,OAAOO,EAAI,GAAMR,EAAUS,CAAC,EACpCsD,GAAW9D,EAASO,EAAIR,EAAUS,EAAGD,EAAIR,EAAUS,EAAI,GAAMT,EAAUmE,EAAQ,CAAC,EAAI,EAAIN,CAAM,EAC9FE,GAAW9D,EAASO,EAAIR,EAAUS,EAAIT,EAAUQ,EAAI,GAAMR,EAAUS,EAAIT,EAAUmE,EAAQ,CAAC,EAAI,EAAIN,CAAM,EACzGE,GAAW9D,EAASO,EAAGC,EAAIT,EAAUQ,EAAGC,EAAI,GAAMT,EAAUmE,EAAQ,CAAC,EAAI,EAAIN,CAAM,EACnFE,GAAW9D,EAASO,EAAGC,EAAGD,EAAI,GAAMR,EAAUS,EAAG0D,EAAQ,CAAC,EAAI,EAAIN,CAAM,EAExE5D,EAAQ,KAAK,IAETkE,EAAQ,CAAC,IAAM,GACjBC,GAAWnE,EAASO,EAAGC,EAAI,GAAMT,EAAUQ,EAAGC,EAAGD,EAAI,GAAMR,EAAUS,EAAGoD,CAAM,EAG5EM,EAAQ,CAAC,IAAM,GACjBC,GAAWnE,EAASO,EAAI,GAAMR,EAAUS,EAAGD,EAAIR,EAAUS,EAAGD,EAAIR,EAAUS,EAAI,GAAMT,EAAU6D,CAAM,EAGlGM,EAAQ,CAAC,IAAM,GACjBC,GAAWnE,EAASO,EAAIR,EAAUS,EAAI,GAAMT,EAAUQ,EAAIR,EAAUS,EAAIT,EAAUQ,EAAI,GAAMR,EAAUS,EAAIT,EAAU6D,CAAM,EAGxHM,EAAQ,CAAC,IAAM,GACjBC,GAAWnE,EAASO,EAAI,GAAMR,EAAUS,EAAIT,EAAUQ,EAAGC,EAAIT,EAAUQ,EAAGC,EAAI,GAAMT,EAAU6D,CAAM,EAG1G,CAAC,EACD,IAAIL,EAAWnE,EAAUI,CAAK,EAC9BF,EAAWiE,EAAUN,EAAY,CAC/B,SAAUlD,CACZ,CAAC,EACD,IAAIK,EAAMmD,EAAS,WAAW,IAAI,EAClC,OAAAnD,EAAI,yBAA2B,iBAC/BA,EAAI,UAAUgD,EAAY,EAAG,CAAC,EACvBG,CACT,CAEA,SAASP,GAAWoB,EAAOX,EAAa,CACtC,IAAIR,EAAamB,EAAM,WACnBrE,EAAWqE,EAAM,SACjBlB,EAASkB,EAAM,OACfjB,EAAQiB,EAAM,MACdhF,EAAYJ,GAAQ,UACpBM,EAAaN,GAAQ,WACrBQ,EAAQO,EAAWoD,EACnBC,EAAahE,EAAUI,CAAK,EAC5BmE,EAAQF,EAAY,MACpBY,EAAwBZ,EAAY,gBACpCa,EAAkBD,IAA0B,OAAStF,GAAcsF,EACnErE,EAAUoD,EAAW,WAAW,IAAI,EACpCmB,EAAcnF,EAAUI,CAAK,EAC7B+D,EAAWnE,EAAUI,CAAK,EAC1BgF,EAAWD,EAAY,WAAW,IAAI,EAC1C,OAAC,CACC,KAAM,GACN,WAAYtB,CACd,EAAG,CACD,KAAM,GACN,WAAYqB,CACd,CAAC,EAAE,QAAQ,SAAUjE,EAAM,CACzBL,EAAQ,UAAYlB,GACpBkB,EAAQ,UAAU,EAAG,EAAGR,EAAOA,CAAK,EACpC6D,GAAU,CACR,SAAUtD,EACV,MAAOoD,CACT,EAAG,SAAUsB,EAAO,CAClB,IAAIhC,EAAIgC,EAAM,EACV/B,EAAI+B,EAAM,EACVlE,EAAIkE,EAAM,EACVjE,EAAIiE,EAAM,EAEd,GAAIvB,EAAOT,EAAGC,CAAC,EAAI,CAAC,CAACrC,EAAK,KAAM,CAC9B,IAAIqE,EAEAjC,GAAK,GAAKC,GAAK,GAAKD,GAAK,GAAKU,EAAQT,EAAI,GAAK,GAAKS,EAAQV,EAAI,GAAK,GAAKC,GAAK,GAAKD,EAAI,GAAKU,GAASV,EAAI,GAAKU,GAAST,EAAI,GAAKS,GAAST,EAAI,GAAKS,GAASV,IAAM,GAAKC,IAAM,EAC/KgC,EAAW,EAAI,GAAMf,EAErBe,EAAW,IAGb,IAAIvC,GAAU,EAAIuC,GAAY,EAC9B1E,EAAQ,SAASO,EAAI4B,EAASpC,EAAUS,EAAI2B,EAASpC,EAAU2E,EAAW3E,EAAU2E,EAAW3E,CAAQ,CACzG,CACF,CAAC,EACDT,EAAWiF,EAAalE,EAAK,WAAY,CACvC,SAAUN,EACV,QAASyE,CACX,CAAC,EACDA,EAAS,yBAA2B,iBACpCA,EAAS,UAAUpB,EAAY,EAAG,CAAC,EACnC9D,EAAWiE,EAAUgB,EAAa,CAChC,SAAUxE,EACV,MAAO,EACT,CAAC,CACH,CAAC,EACMwD,CACT,CAEA,SAASF,GAAUsB,EAAOC,EAAU,CAIlC,QAHI7E,EAAW4E,EAAM,SACjBxB,EAAQwB,EAAM,MAETlC,EAAI,EAAGA,EAAIU,EAAOV,GAAK,EAC9B,QAASC,EAAI,EAAGA,EAAIS,EAAOT,GAAK,EAAG,CACjC,IAAInC,EAAImC,EAAI3C,EACRS,EAAIiC,EAAI1C,EACZ6E,EAAS,CACP,EAAGnC,EACH,EAAGC,EACH,EAAGnC,EACH,EAAGC,CACL,CAAC,CACH,CAEJ,CAEA,SAASsD,GAAW1D,EAAKyE,EAASC,EAASvE,EAAGC,EAAGuE,EAAG,CAC9CA,EACF3E,EAAI,MAAMyE,EAASC,EAASvE,EAAGC,EAAGuE,CAAC,GAEnC3E,EAAI,OAAOyE,EAASC,CAAO,EAC3B1E,EAAI,OAAOG,EAAGC,CAAC,EAEnB,CAEA,SAAS2D,GAAWnE,EAASgF,EAAQC,EAAQJ,EAASC,EAASI,EAAOC,EAAOvB,EAAQ,CACnF5D,EAAQ,UAAU,EAClBA,EAAQ,OAAOgF,EAAQC,CAAM,EAC7BnB,GAAW9D,EAAS6E,EAASC,EAASI,EAAOC,EAAOvB,CAAM,EAC1D5D,EAAQ,OAAO6E,EAASC,CAAO,EAC/B9E,EAAQ,OAAOgF,EAAQC,CAAM,EAE7BjF,EAAQ,KAAK,CACf,CAGA,GAAAoF,QAAO,cAAgB,GAAAA,QAAO,mBAAmB,OAAO,EACxD,IAAIC,GAAW,CACb,WAAY,QACZ,WAAY,QACZ,WAAY,EACZ,aAAc,IACd,KAAM,GACN,QAAS,EACT,OAAQ,EACV,EAEIC,GAAgC,UAAY,CAC9C,SAASA,EAAiBzF,EAAS,CACjC,IAAI0F,EAAQ,KAEZ,KAAK,QAAUC,GAAS,CAAC,EAAGH,EAAQ,EACpC,KAAK,MAAQ,CAAC,EAEd,KAAK,OAAS,SAAU5C,EAAGC,EAAG,CAC5B,IAAI+C,EAAcF,EAAM,MACpBG,EAAKD,EAAY,GACjBtC,EAAQsC,EAAY,MACxB,OAAIhD,EAAI,GAAKA,GAAKU,GAAST,EAAI,GAAKA,GAAKS,EAAc,GAChDuC,EAAG,OAAOjD,EAAGC,CAAC,CACvB,EAEA,KAAK,WAAW7C,CAAO,CACzB,CAEA,IAAI8F,EAASL,EAAiB,UAE9B,OAAAK,EAAO,OAAS,SAAgBjG,EAAQkG,EAAQ,CAC1CA,IAAW,SACbA,EAAS,CAAC,GAGZ,IAAIC,EAAgB,KAAK,QACrBC,EAAaD,EAAc,WAC3B5C,EAAa4C,EAAc,WAC3BE,EAAUF,EAAc,QACxBG,EAASH,EAAc,OACvBI,EAAOJ,EAAc,KACrBK,EAASL,EAAc,OACvBM,EAAWvD,GAAQoD,EAAO,IAAI,GAAKpD,GAAQ,QAC3CO,EAAQ,KAAK,MAAM,MACnB7D,EAAaN,GAAQ,WACrBoH,EAAUR,EACVS,EAAOD,EAAQ,KACfE,EACAC,EACAhD,EAEJ,CACE,IAAIiD,EAAWZ,EACX7F,EAAWyG,EAAS,SACpB,CAAC9G,GAAU,CAACK,GAAY,CAACsG,IAAMtG,EAAW,GAC1CA,IAAUsG,EAAOlD,EAAQpD,EAAWgG,EAAUA,GAE9CM,EACFC,EAAYJ,GAAU,CAACxG,EAASV,GAAQ,aAAaU,EAAQ2G,CAAI,EAAI3G,GAErE2G,EAAO3G,EAAO,MACd4G,EAAY5G,EAEhB,CACA,IAAI+G,EAAcJ,EAAON,EAAUA,EAEnC,CACE,IAAIW,EAAY,KAAK,KAAKD,EAActD,CAAK,EAEzCwD,EAAaD,EAAYvD,EAW7B,GAVAoD,EAAWvH,GAAQ,UAAU0H,EAAYvD,CAAK,EAC9C7D,EAAWiH,EAAUT,EAAY,CAC/B,SAAUY,CACZ,CAAC,EACDnD,EAAW4C,EAASX,GAAS,CAC3B,WAAYvC,EACZ,SAAUyD,EACV,OAAQ,KAAK,MACf,EAAG,KAAK,KAAK,EAAG,KAAK,QAAQ,MAAM,EAE/BT,EAAM,CACR,IAAIW,EAAYpB,GAAS,CAAC,EAAGS,CAAI,EAEjC,GAAI,CAACA,EAAK,GAAK,CAACA,EAAK,GAAK,CAACA,EAAK,MAAQ,CAACA,EAAK,KAAM,CAClD,IAAIrF,EAAOqF,EAAK,MACZzG,EAAQoB,EAAK,MACbnB,EAASmB,EAAK,OACdiG,GAAarH,EAAQC,EACrBqH,GAAW,KAAK,KAAK3D,EAAQ,IAAMA,EAAO,GAAI,EAC9CzC,GAAI,KAAK,IAAIjB,EAAQkH,EAAaG,GAAUH,EAAaG,GAAWD,EAAU,EAC9EpG,GAAIC,GAAImG,GACRtG,IAAKoG,EAAalG,IAAK,EACvBD,IAAKmG,EAAajG,IAAK,EAC3BkG,EAAU,EAAInG,GACdmG,EAAU,EAAIlG,GACdkG,EAAU,EAAIrG,GACdqG,EAAU,EAAIpG,EAChB,CAEAlB,EAAWiE,EAAUqD,EAAW,CAC9B,MAAO,EACT,CAAC,CACH,CACF,CAEA,OAAAtH,EAAWgH,EAAW,CAAC,CACrB,MAAOC,CACT,EAAG,CACD,MAAOhD,EACP,EAAGwC,EACH,EAAGA,EACH,EAAGU,EACH,EAAGA,CACL,CAAC,CAAC,EACKH,CACT,EAEAX,EAAO,WAAa,SAAoB9F,EAAS,CAC/C,KAAK,QAAU2F,GAAS,CAAC,EAAG,KAAK,QAAS3F,CAAO,EACjD,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,IAAIkH,EAAiB,KAAK,QACtBC,EAAaD,EAAe,WAC5BnH,EAAOmH,EAAe,KACtBd,EAAOc,EAAe,KAEtBE,EAAe,KAAK,QAAQ,aAC5BhB,GAAQ,CAAC,IAAK,GAAG,EAAE,QAAQgB,CAAY,EAAI,IAAGA,EAAe,KACjE,IAAIvB,KAAK,GAAAN,SAAO4B,EAAYC,CAAY,EACxCvB,EAAG,QAAQ9F,GAAQ,EAAE,EACrB8F,EAAG,KAAK,EACR,IAAIvC,EAAQuC,EAAG,eAAe,EAC9B,KAAK,MAAQ,CACX,GAAIA,EACJ,MAAOvC,CACT,CACF,EAEAwC,EAAO,gBAAkB,UAA2B,CAClD,IAAIK,EAAS,KAAK,QAAQ,OAEtB,OAAOA,GAAW,WACpBA,EAAS,CACP,KAAMA,CACR,GAGF,KAAK,QAAQ,OAASA,GAAU,CAAC,CACnC,EAEAL,EAAO,cAAgB,UAAyB,CAC9C,IAAIxG,EAAaH,GAAQ,WACrBO,EAAWP,GAAQ,SACnBiH,EAAO,KAAK,QAAQ,KAEpBA,IACE9G,EAAW8G,CAAI,EACjBA,EAAO,CACL,MAAOA,CACT,EACU9G,EAAW8G,EAAK,KAAK,IAC3B,OAAOA,GAAS,WAClBA,EAAO,CACL,KAAMA,CACR,GAGE,OAAOA,EAAK,MAAS,SACvBA,EAAO,CACL,MAAO1G,EAAS0G,EAAK,KAAMA,EAAK,OAAO,CACzC,EAEAA,EAAO,OAKb,KAAK,QAAQ,KAAOA,CACtB,EAEOX,CACT,EAAE,EAEF,SAAS4B,GAASrH,EAAS,CACzB,IAAIH,EAASG,EAAQ,OACjBwG,EAAOxG,EAAQ,KACfE,EAAWF,EAAQ,SACnBsH,EAAOC,GAA8BvH,EAAS,CAAC,SAAU,OAAQ,UAAU,CAAC,EAE5EwH,EAAW,IAAI/B,GAAiB6B,CAAI,EACxC,OAAOE,EAAS,OAAO3H,EAAQ,CAC7B,KAAM2G,EACN,SAAUtG,CACZ,CAAC,CACH,CCvrBA,IAAOuH,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,YAAa,OACb,WAAY,OACZ,UAAW,MACf,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CACH,8BACA,iBACA,4BACA,wBACA,eACA,8BACA,SACA,YACJ,CACJ,CAEA,wCAAwC,CAAE,OAAAC,CAAO,EAAG,CAC5C,KAAK,sCACL,KAAK,kCAAkC,UAAU,OAAO,SAAUA,EAAO,QAAU,KAAK,EAG5F,KAAK,kCAAkC,UAAU,OAAO,SAAUA,EAAO,QAAU,KAAK,CAC5F,CAEA,MAAM,UAAW,CACb,KAAK,qBAAqB,SAAW,GACrC,KAAK,gCAAgC,UAAU,IAAI,QAAQ,EAC3D,KAAK,4BAA4B,UAAU,IAAI,QAAQ,EACvD,IAAMC,EAAW,MAAM,MAAM,KAAK,iBAAkB,CAAE,OAAQ,MAAO,CAAC,EAChE,CAAE,cAAAC,CAAc,EAAI,MAAMD,EAAS,KAAK,EAC9C,KAAK,gCAAgC,UAAU,OAAO,SAAU,CAACC,CAAa,EAC9E,KAAK,4BAA4B,UAAU,OAAO,SAAUA,CAAa,EACzE,KAAK,mBAAmB,MAAM,EAC9B,WACI,IAAM,CACF,KAAK,qBAAqB,YAAc,KAAK,gBAC7C,KAAK,qBAAqB,SAAW,EACzC,EACA,GACJ,CACJ,CAEA,kBAAkBC,EAAG,CACjBA,EAAE,eAAe,EACjB,KAAK,iBAAiB,UAAU,OAAO,QAAQ,EAC/CA,EAAE,OAAO,OAAO,CACpB,CAEA,uBAAwB,CACpB,KAAK,aAAa,YAAYC,GAAS,CACnC,KAAM,0BAA0B,KAAK,cAAc,GACnD,KAAM,GACV,CAAC,CAAC,CACN,CACJ,EC7DA,IAAOC,GAAP,cAA6BC,EAAW,CACpC,WAAW,QAAS,CAChB,MAAO,CACH,cAAe,OACf,gBAAiB,MACrB,CACJ,CAEA,WAAW,SAAU,CACjB,MAAO,CAAC,kBAAmB,gBAAiB,kBAAkB,CAClE,CAEA,MAAM,6BAA6BC,EAAoB,CACnD,MAAM,KAAK,cAAcA,EAAoB,EAAI,EACjD,IAAMC,EAAgB,KAAK,QAAQ,cAAc,+BAA+BD,CAAkB,mDAAmD,EAEjJC,IACAA,EAAc,MAAQA,EAAc,QAAQ,kBAC5CA,EAAc,UAAU,OAAO,qDAAqD,EACpF,KAAK,uBAAuB,EAEpC,CAEA,MAAM,cAAcC,EAAG,CACnBA,EAAE,eAAe,EAEjB,QAAWC,KAA0B,KAAK,wBAAyB,CAC/D,IAAMF,EAAgBE,EAAuB,cAAc,gDAAgD,EAEvGF,EAAc,UAAU,SAAS,qDAAqD,IACtF,MAAM,KAAK,cAAcE,EAAuB,QAAQ,mBAAoB,EAAI,EAChFF,EAAc,MAAQA,EAAc,QAAQ,kBAC5CA,EAAc,UAAU,OAAO,qDAAqD,EAE5F,CAEA,KAAK,uBAAuB,CAChC,CAEA,yBAAyBC,EAAG,CACxBA,EAAE,OAAO,QAAQ,6BAA6B,EAAE,cAAc,gDAAgD,GAAG,UAAU,OAAO,qDAAqD,EACvL,KAAK,uBAAuB,CAChC,CAEA,MAAM,OAAOA,EAAG,CACZA,EAAE,eAAe,EACjB,IAAMC,EAAyBD,EAAE,OAAO,QAAQ,6BAA6B,EACvED,EAAgBE,EAAuB,cAAc,gDAAgD,EACrGC,EAAaH,EAAc,UAAU,SAAS,qDAAqD,EACzG,MAAM,KAAK,cAAcE,EAAuB,QAAQ,mBAAoBC,CAAU,EACtFH,EAAc,MAAQG,EAAaH,EAAc,QAAQ,kBAAoBA,EAAc,QAAQ,gBACnGA,EAAc,UAAU,OAAO,sDAAuD,CAACG,CAAU,EACjG,KAAK,uBAAuB,CAChC,CAEA,MAAM,cAAcJ,EAAoBK,EAAM,CAC1C,IAAMC,EAAc,IAAI,gBAAgB,CAAE,GAAIN,CAAmB,CAAC,EAClE,MAAM,MAAM,GAAGK,EAAO,KAAK,mBAAqB,KAAK,oBAAoB,IAAIC,CAAW,GAAI,CAAE,OAAQ,MAAO,CAAC,CAClH,CAEA,wBAAyB,CACrB,IAAMC,EAAU,KAAK,wBAAwB,OAAOC,GAAOA,EAAI,cAAc,sDAAsD,CAAC,EAAE,SAAW,EACjJ,KAAK,oBAAoB,UAAU,OAAO,SAAUD,CAAO,EAC3D,KAAK,sBAAsB,UAAU,OAAO,SAAUA,CAAO,CACjE,CACJ,ECnEA,IAAME,GAAI,OAAO,WAAW,EAE5B,SAASC,IAAa,CAElBD,GAAE,QAAQ,EAAE,GAAG,QAAS,oBAAqB,UAAY,CACrD,IAAME,EAAWF,GAAE,IAAI,EAAE,KAAK,iBAAiB,EACzCG,EAAiBH,GAAE,QAAQ,EAAE,KAAKE,CAAQ,EAE5CC,EAAe,OAEfA,EAAe,IAAI,CAAC,EAAE,MAAM,EAI5B,SAAS,iBAAiB,iBAAkB,SAASC,EAAWC,EAAO,CACnE,IAAMF,EAAiBH,GAAEE,CAAQ,EAE7BC,EAAe,SACf,WAAW,IAAM,CAEbA,EAAe,IAAI,CAAC,EAAE,MAAM,CAChC,EAAG,EAAE,EACL,SAAS,oBAAoB,iBAAkBC,CAAU,EAEjE,CAAC,CAET,CAAC,CAEL,CAEA,SAASE,IAAa,CAElB,OAAO,gBAAkB,OAAO,iBAAmB,CAAC,EACpD,gBAAgB,OAAS,KACzB,gBAAgB,WAAa,EACjC,CAEA,SAASC,IAAW,CAEhBP,GAAE,mBAAmB,EAAE,SAAS,CAE5B,UAAW,OACX,QAAS,GACT,SAAU,GACV,WAAY,GACZ,aAAgB,EACpB,CAAC,EAEDA,GAAE,aAAa,EAAE,SAAS,CAEtB,UAAW,OACX,QAAS,GACT,SAAU,GACV,SAAU,IACV,WAAY,GACZ,aAAgB,EACpB,CAAC,EAEDA,GAAE,yBAAyB,EAAE,SAAS,CAElC,UAAW,SACX,QAAS,GACT,SAAU,GACV,SAAU,IACV,WAAY,GACZ,aAAgB,GAChB,gBAAiB,EACrB,CAAC,EAEDA,GAAE,yBAAyB,EAAE,SAAS,CAElC,UAAW,OACX,QAAS,GACT,SAAU,GACV,WAAY,GACZ,WAAY,GACZ,aAAgB,EACpB,CAAC,EAEDA,GAAE,oBAAoB,EAAE,SAAS,CAE7B,UAAW,OACX,QAAS,GACT,SAAU,GACV,SAAU,IACV,WAAY,GACZ,aAAgB,EACpB,CAAC,CAEL,CAEA,SAASQ,IAAqB,CACtBR,GAAE,wBAAwB,EAAE,OAAS,GACrCA,GAAE,8BAA8B,EAAE,GAAG,QAAS,UAAY,CACtDA,GAAE,mBAAmB,EAAE,SAAS,QAAQ,EACxCA,GAAE,yBAAyB,EAAE,SAAS,QAAQ,CAClD,CAAC,CAET,CAEA,SAASS,IAAc,CAEnBT,GAAE,kBAAkB,EAAE,YAAY,EAClCA,GAAE,uBAAuB,EAAE,YAAY,CAE3C,CAEA,SAASU,IAAkB,CAEvB,MAAM,UAAU,QAAQ,KACpB,SAAS,iBAAiB,sBAAsB,EAC/CC,GAAO,IAAI,UAAUA,CAAE,CAC5B,EAEAX,GAAE,YAAY,EAAE,GAAG,QAAS,UAAW,CACnC,MAAM,UAAU,QAAQ,KACpB,SAAS,iBAAiB,UAAU,EACnCW,GAAO,IAAI,UAAUA,CAAE,CAC5B,CACJ,CAAC,EAEDX,GAAE,gBAAgB,EAAE,GAAG,QAAS,UAAW,CACvC,MAAM,UAAU,QAAQ,KACpB,SAAS,iBAAiB,UAAU,EACnCW,GAAO,IAAI,UAAUA,CAAE,CAC5B,CACJ,CAAC,CAEL,CAEA,SAASC,IAAa,CAElBZ,GAAG,gBAAiB,EAAE,WAAW,CAC7B,YAAa,cACb,UAAW,GACX,SAAU,GAAG,OACjB,CAAC,EAED,IAAIa,EAAmB,IAAI,KAC3BA,EAAiB,YAAYA,EAAiB,YAAY,EAAI,EAAE,EAEhEb,GAAE,oBAAoB,EAAE,WAAW,CAC/B,YAAa,cACb,UAAW,GACX,SAAU,GAAG,QACb,gBAAiB,CACb,KAAMa,EAAiB,YAAY,EACnC,MAAOA,EAAiB,SAAS,EACjC,IAAKA,EAAiB,QAAQ,CAClC,EACA,YAAaA,EACb,QAASA,CACb,CAAC,CAEL,CAEA,SAASC,IAAU,CAEfd,GAAE,YAAY,EAAE,QAAQ,CAE5B,CAEA,SAASe,IAAgB,CAErBf,GAAE,mBAAmB,EAAE,cAAc,CACjC,KAAM,QACN,UAAW,IACX,QAAQ,CAAC,QAAQ,EAAI,EACrB,oBAAqB,EACzB,CAAC,CAEL,CAEA,SAASgB,IAAsB,CACvBhB,GAAE,mBAAmB,EAAE,OAAS,GAC5BA,GAAE,MAAM,EAAE,MAAM,EAAI,KACpBA,GAAE,mBAAmB,EAAE,GAAG,QAAS,UAAW,CAC1C,MAAO,EACX,CAAC,CAGb,CAGA,SAASiB,IAAW,CAChB,SAAS,iBAAiB,4BAA4B,EAAE,QAAQ,GAAK,IAAI,UAAU,QAAQ,CAAC,CAAC,EAG7F,IAAMC,EAAc,CAAC,GADM,SAAS,iBAAiB,4BAA4B,CACvC,EAAE,IAAIC,GAAoB,IAAI,UAAU,QAAQA,CAAgB,CAAC,EAG3G,SAAS,iBAAiB,QAAS,SAAUC,EAAG,CAC5C,IAAIC,EAAW,SAAS,iBAAiB,UAAU,EAE/CA,EAAS,OAAS,GAClBA,EAAS,QAAQ,SAAUC,EAAgB,CACnCA,EAAe,UAAU,SAAS,MAAM,IACnCA,EAAe,SAASF,EAAE,MAAM,IACjCE,EAAe,UAAU,OAAO,MAAM,EACtCtB,GAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,GAG9C,CAAC,CAET,CAAC,EAED,SAAS,iBAAiB,YAAa,SAAUoB,EAAG,CAC5CA,EAAE,OAAO,QAAQ,4BAA4B,GAC7CA,EAAE,OAAO,MAAM,CAEvB,CAAC,CACL,CAEApB,GAAE,UAAY,CACVC,GAAW,EACXK,GAAW,EACXC,GAAS,EACTC,GAAmB,EACnBC,GAAY,EACZC,GAAgB,EAChBE,GAAW,EACXE,GAAQ,EACRC,GAAc,EACdC,GAAoB,EACpBC,GAAS,CACb,CAAC,EAEDjB,GAAE,MAAM,EAAE,GAAG,SAAUgB,EAAmB,EAE1C,OAAO,SAAWT,GCzLlB,IAAMgB,GAAcC,GAAY,MAAM,EACtCD,GAAY,SAAS,eAAgBE,EAAqB,EAC1DF,GAAY,SAAS,uBAAwBG,EAA2B,EACxEH,GAAY,SAAS,kBAAmBI,EAAwB,EAChEJ,GAAY,SAAS,yBAA0BK,EAA8B,EAC7EL,GAAY,SAAS,6BAA8BM,EAAkC,EACrFN,GAAY,SAAS,aAAcO,EAAmB,EACtDP,GAAY,SAAS,cAAeQ,EAAqB,EACzDR,GAAY,SAAS,YAAaS,EAAmB,EACrDT,GAAY,SAAS,YAAaU,EAAkB,EACpDV,GAAY,SAAS,mBAAoBW,EAAwB,EACjEX,GAAY,SAAS,mBAAoBY,EAAwB,EACjEZ,GAAY,SAAS,YAAaa,EAAkB,EACpDb,GAAY,SAAS,OAAQc,EAAc,EAC3Cd,GAAY,SAAS,OAAQe,EAAc,EAC3Cf,GAAY,SAAS,OAAQgB,EAAc,EAC3ChB,GAAY,SAAS,SAAUiB,EAAgB,EAC/CjB,GAAY,SAAS,0BAA2BkB,EAA+B,EAC/ElB,GAAY,SAAS,wBAAyBmB,EAA6B,EAC3EnB,GAAY,SAAS,kBAAmBoB,EAAuB,EAC/DpB,GAAY,SAAS,qBAAsBqB,EAA2B,EACtErB,GAAY,SAAS,qBAAsBsB,EAA0B,EACrEtB,GAAY,SAAS,mBAAoBuB,EAAwB,EACjEvB,GAAY,SAAS,oBAAqBwB,EAA0B,EACpExB,GAAY,SAAS,QAASyB,EAAe,EAC7CzB,GAAY,SAAS,UAAW0B,EAAiB,EACjD1B,GAAY,SAAS,uBAAwB2B,EAA4B,EACzE3B,GAAY,SAAS,iBAAkB4B,EAAsB,EAC7D5B,GAAY,SAAS,uBAAwB6B,EAA6B,EAC1E7B,GAAY,SAAS,SAAU8B,EAAgB,EAC/C9B,GAAY,SAAS,UAAW+B,EAAiB,EACjD/B,GAAY,SAAS,6BAA8BgC,EAAwB,EAC3EhC,GAAY,SAAS,cAAeiC,EAAqB,EACzDjC,GAAY,SAAS,qBAAsBkC,EAAyB,EACpElC,GAAY,SAAS,iBAAkBmC,EAAsB,EAC7DnC,GAAY,SAAS,UAAWoC,EAAiB,EACjDpC,GAAY,SAAS,mBAAoBqC,EAAyB,EAClErC,GAAY,SAAS,kBAAmBsC,EAAuB,EAC/DtC,GAAY,SAAS,qBAAsBuC,EAA2B,EACtEvC,GAAY,SAAS,UAAWwC,EAAiB,EACjDxC,GAAY,SAAS,gBAAiByC,EAAsB,EAC5DzC,GAAY,SAAS,WAAY0C,EAAkB", "names": ["require_promise_critical_section", "__commonJSMin", "exports", "module", "CriticalSection", "options", "resolve", "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", "rhtmlSuffix", "jQuery", "selector", "context", "num", "elems", "ret", "callback", "elem", "_elem", "len", "j", "options", "name", "src", "copy", "copyIsArray", "clone", "target", "length", "deep", "msg", "proto", "Ctor", "isArrayLike", "nodeType", "results", "namespace", "docElem", "first", "second", "invert", "callbackInverse", "matches", "callbackExpect", "arg", "value", "_i", "type", "nodeName", "pop", "sort", "splice", "whitespace", "rtrimCSS", "a", "b", "bup", "rcssescape", "fcssescape", "ch", "asCodePoint", "sel", "preferredDoc", "pushNative", "Expr", "outermostContext", "sortInput", "hasDuplicate", "documentElement", "documentIsHTML", "rbuggyQSA", "expando", "dirruns", "done", "classCache", "createCache", "tokenCache", "compilerCache", "nonnativeSelectorCache", "sortOrder", "booleans", "identifier", "attributes", "pseudos", "rwhitespace", "rcomma", "rleadingCombinator", "rdescend", "rpseudo", "ridentifier", "matchExpr", "rinputs", "rheader", "rquickExpr", "rsibling", "runescape", "funescape", "escape", "nonHex", "high", "unloadHandler", "setDocument", "inDisabledFieldset", "addCombinator", "safeActiveElement", "els", "find", "seed", "m", "nid", "match", "groups", "newSelector", "newContext", "testContext", "tokenize", "toSelector", "select", "keys", "cache", "key", "markFunction", "fn", "assert", "el", "createInputPseudo", "createButtonPseudo", "createDisabledPseudo", "disabled", "createPositionalPseudo", "argument", "matchIndexes", "subWindow", "id", "attrId", "tag", "className", "input", "compare", "expr", "elements", "duplicates", "excess", "unquoted", "nodeNameSelector", "expectedNodeName", "pattern", "operator", "check", "result", "what", "_argument", "last", "simple", "forward", "ofType", "_context", "xml", "outerCache", "nodeIndex", "start", "dir", "parent", "useCache", "diff", "pseudo", "args", "idx", "matched", "matcher", "compile", "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", "matcherOut", "preMap", "postMap", "preexisting", "matcherIn", "matcherFromTokens", "checkContext", "leadingRelative", "implicitRelative", "matchContext", "matchAnyContext", "matcherFromGroupMatchers", "elementMatchers", "setMatchers", "bySet", "byElement", "superMatcher", "outermost", "matchedCount", "setMatched", "contextBackup", "dirrunsUnique", "token", "compiled", "until", "truncate", "siblings", "n", "rneedsContext", "rsingleTag", "winnow", "qualifier", "not", "self", "rootjQuery", "init", "root", "rparentsprev", "guaranteedUnique", "targets", "l", "selectors", "cur", "sibling", "rnothtmlwhite", "createOptions", "object", "_", "flag", "firing", "memory", "fired", "locked", "list", "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", "handler", "special", "that", "mightThrow", "then", "process", "e", "stateString", "singleValue", "remaining", "resolveContexts", "resolveValues", "primary", "updateFunc", "rerrorNames", "error", "asyncError", "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", "attrs", "startLength", "hooks", "next", "setter", "tmp", "count", "defer", "pnum", "rcssNum", "cssExpand", "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", "rhtml", "buildFragment", "scripts", "selection", "ignored", "wrap", "attached", "nodes", "rtypenamespace", "returnTrue", "returnFalse", "on", "types", "one", "origFn", "event", "handleObjIn", "eventHandle", "events", "t", "handleObj", "handlers", "namespaces", "origType", "elemData", "mappedTypes", "origCount", "nativeEvent", "handlerQueue", "matchedHandlers", "matchedSelectors", "delegateCount", "hook", "originalEvent", "leverageNative", "isSetup", "saved", "handle", "props", "delegateType", "focusMappedHandler", "attaches", "dataHolder", "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", "rcustomProp", "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", "isCustomProp", "style", "addGetHookIf", "conditionFn", "hookFn", "cssPrefixes", "emptyStyle", "vendorProps", "vendorPropName", "capName", "finalPropName", "final", "rdisplayswap", "cssShow", "cssNormalTransform", "setPositiveNumber", "subtract", "boxModelAdjustment", "dimension", "box", "isBorderBox", "styles", "computedVal", "extra", "delta", "marginDelta", "getWidthOrHeight", "boxSizingNeeded", "valueIsBorderBox", "offsetProp", "origName", "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", "isXML", "lowercaseName", "rfocusable", "rclickable", "tabindex", "stripAndCollapse", "getClass", "classesToArray", "classNames", "curValue", "finalValue", "stateVal", "isValidValue", "rreturn", "option", "max", "optionSet", "location", "nonce", "rquery", "parserErrorElem", "rfocusMorph", "stopPropagationCallback", "onlyHandlers", "bubbleType", "ontype", "lastElement", "eventPath", "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", "rtrim", "proxy", "hold", "_jQuery", "_$", "require_toastr", "__commonJSMin", "exports", "module", "define", "$", "$container", "listener", "toastId", "toastType", "toastr", "clear", "remove", "error", "getContainer", "info", "subscribe", "success", "warning", "previousToast", "message", "title", "optionsOverride", "notify", "getOptions", "options", "create", "createContainer", "callback", "$toastElement", "clearOptions", "clearToast", "clearContainer", "removeToast", "toastsToClear", "i", "force", "getDefaults", "publish", "args", "map", "iconClass", "shouldExit", "intervalId", "$titleElement", "$messageElement", "$progressElement", "$closeElement", "progressBar", "response", "personalizeToast", "displayToast", "handleEvents", "escapeHtml", "source", "setIcon", "setTitle", "setMessage", "setCloseButton", "setProgressBar", "setRTL", "setSequence", "setAria", "ariaValue", "stickAround", "delayedHideToast", "hideToast", "event", "updateProgress", "suffix", "override", "method", "duration", "easing", "percentage", "deps", "factory", "Array", "prototype", "find", "predicate", "this", "TypeError", "value", "list", "Object", "length", "thisArg", "arguments", "i", "call", "window", "CustomEvent", "event", "params", "bubbles", "cancelable", "detail", "undefined", "evt", "document", "createEvent", "initCustomEvent", "Event", "TributeEvents", "tribute", "events", "element", "boundKeydown", "keydown", "bind", "boundKeyup", "keyup", "boundInput", "input", "addEventListener", "removeEventListener", "instance", "shouldDeactivate", "isActive", "hideMenu", "commandEvent", "keys", "forEach", "o", "key", "keyCode", "callbacks", "toLowerCase", "inputEvent", "menu", "contains", "target", "li", "preventDefault", "stopPropagation", "nodeName", "parentNode", "Error", "selectItemAtIndex", "getAttribute", "current", "externalTrigger", "setTimeout", "updateSelection", "allowSpaces", "hasTrailingSpace", "autocompleteMode", "triggerChar", "getKeyCode", "isNaN", "trigger", "triggers", "charCodeAt", "mentionText", "collection", "menuShowMinLength", "showMenuFor", "eventKeyPressed", "el", "info", "range", "getTriggerInfo", "mentionTriggerChar", "selectedPath", "mentionSelectedPath", "selectedOffset", "mentionSelectedOffset", "e", "_this", "collectionItem", "item", "enter", "filteredItems", "menuSelected", "escape", "tab", "space", "spaceSelectsMatch", "up", "count", "selected", "setActiveLi", "scrollTop", "scrollHeight", "down", "index", "lis", "querySelectorAll", "parseInt", "classList", "add", "selectClass", "liClientRect", "getBoundingClientRect", "menuClientRect", "bottom", "scrollDistance", "top", "remove", "elem", "includeMargin", "height", "style", "currentStyle", "getComputedStyle", "parseFloat", "marginTop", "marginBottom", "t", "TributeMenuEvents", "menuEvents", "menuClickEvent", "click", "menuContainerScrollEvent", "debounce", "windowResizeEvent", "positionMenuAtCaret", "getDocument", "menuContainer", "func", "wait", "immediate", "timeout", "context", "_this2", "args", "callNow", "clearTimeout", "apply", "TributeRange", "iframe", "contentWindow", "scrollTo", "coordinates", "positionMenu", "cssText", "isContentEditable", "getContentEditableCaretPosition", "mentionPosition", "getTextAreaOrInputUnderlinePosition", "left", "right", "scrollIntoView", "menuDimensions", "width", "offsetWidth", "offsetHeight", "menuIsOffScreen", "isMenuOffScreen", "menuIsOffScreenHorizontally", "innerWidth", "menuIsOffScreenVertically", "innerHeight", "targetElement", "path", "offset", "childNodes", "nextSibling", "previousSibling", "sel", "getWindowSelection", "createRange", "setStart", "setEnd", "collapse", "removeAllRanges", "error", "addRange", "focus", "text", "requireLeadingSpace", "originalEvent", "replaceEvent", "replaceTextSuffix", "endPos", "pasteHtml", "myField", "textSuffix", "startPos", "substring", "selectionStart", "selectionEnd", "dispatchEvent", "html", "anchorNode", "deleteContents", "createElement", "innerHTML", "node", "lastNode", "frag", "createDocumentFragment", "firstChild", "appendChild", "insertNode", "cloneRange", "setStartAfter", "getSelection", "ctx", "ce", "contentEditable", "getNodePositionInParent", "push", "reverse", "getRangeAt", "startOffset", "selectedElem", "workingNodeContent", "textContent", "selectStartOffset", "textComponent", "wordsArray", "replace", "split", "trim", "menuAlreadyActive", "isAutocomplete", "selectionInfo", "getContentEditableSelectedPath", "effectiveRange", "getTextPrecedingCurrentSelection", "lastWordOfEffectiveRange", "getLastWordInText", "mentionSelectedElement", "mostRecentTriggerCharPos", "config", "c", "idx", "lastIndexWithLeadingSpace", "lastIndexOf", "test", "currentTriggerSnippet", "firstSnippetChar", "leadingSpace", "regex", "str", "reversedStr", "join", "cidx", "len", "firstChar", "match", "triggerIdx", "windowWidth", "windowHeight", "doc", "documentElement", "windowLeft", "pageXOffset", "scrollLeft", "clientLeft", "windowTop", "pageYOffset", "clientTop", "menuTop", "menuRight", "menuBottom", "menuLeft", "Math", "floor", "ceil", "dimensions", "position", "flipped", "isFirefox", "mozInnerScreenX", "div", "id", "body", "computed", "whiteSpace", "wordWrap", "visibility", "prop", "overflowY", "overflow", "span", "rect", "menuContainerIsBody", "offsetTop", "borderTopWidth", "fontSize", "offsetLeft", "borderLeftWidth", "getMenuDimensions", "parentHeight", "scrollStillAvailable", "removeChild", "selectedNodePosition", "clientRect", "elemTop", "elemBottom", "maxY", "targetY", "TributeSearch", "search", "pattern", "array", "filter", "string", "opts", "pre", "post", "compareString", "caseSensitive", "skip", "rendered", "score", "patternCache", "traverse", "render", "cache", "stringIndex", "patternIndex", "calculateScore", "slice", "best", "temp", "indexOf", "pop", "indices", "arr", "reduce", "prev", "extract", "original", "sort", "a", "b", "compare", "values", "h", "n", "f", "p", "containerClass", "g", "itemClass", "y", "T", "selectTemplate", "S", "k", "menuItemTemplate", "M", "lookup", "L", "fillAttr", "N", "D", "R", "noMatchTemplate", "H", "j", "z", "searchOpts", "X", "V", "menuItemLimit", "J", "Tribute", "defaultSelectTemplate", "defaultMenuItemTemplate", "console", "warn", "map", "jQuery", "get", "constructor", "NodeList", "HTMLCollection", "_attach", "hasAttribute", "ensureEditable", "setAttribute", "inputTypes", "wrapper", "ul", "className", "currentMentionTextSnapshot", "createMenu", "tributeMenu", "processValues", "items", "querySelector", "noMatchEvent", "fragment", "_findLiTarget", "movementY", "collectionIndex", "activeElement", "placeCaretAtEnd", "insertTextAtCursor", "insertAtCaret", "selectNodeContents", "createTextRange", "textRange", "moveToElementText", "select", "textNode", "createTextNode", "textarea", "scrollPos", "caretPos", "front", "back", "content", "replaceText", "replaceTriggerText", "newValues", "concat", "_append", "_detach", "unbind", "removeAttribute", "_this3", "_isActive", "val", "matchItem", "require_ev_emitter", "__commonJSMin", "exports", "module", "global", "factory", "EvEmitter", "proto", "eventName", "listener", "events", "listeners", "onceEvents", "onceListeners", "index", "args", "require_get_size", "__commonJSMin", "exports", "module", "window", "factory", "getStyleSize", "value", "num", "measurements", "measurementsLength", "getZeroSize", "size", "measurement", "getSize", "elem", "style", "isBorderBox", "paddingWidth", "paddingHeight", "marginWidth", "marginHeight", "borderWidth", "borderHeight", "styleWidth", "styleHeight", "require_utils", "__commonJSMin", "exports", "module", "global", "factory", "utils", "a", "b", "num", "div", "obj", "ary", "index", "elem", "selector", "event", "method", "elems", "ffElems", "childElems", "_class", "methodName", "threshold", "timeoutName", "args", "onDocReady", "readyState", "str", "match", "$1", "$2", "console", "WidgetClass", "namespace", "dataAttr", "dataAttrElems", "jQuery", "attr", "options", "error", "instance", "require_cell", "__commonJSMin", "exports", "module", "window", "factory", "getSize", "cellClassName", "Cell", "elem", "proto", "require_slide", "__commonJSMin", "exports", "module", "window", "factory", "Slide", "beginMargin", "endMargin", "cellAlign", "proto", "cell", "lastCell", "lastMargin", "slideWidth", "require_animate", "__commonJSMin", "exports", "module", "window", "factory", "utils", "proto", "previousX", "x", "is3d", "translateX", "firstSlide", "positionX", "progress", "position", "beforeGap", "afterGap", "cells", "gap", "shift", "cell", "cellShift", "force", "dragForce", "require_core", "__commonJSMin", "exports", "module", "window", "factory", "_Flickity", "EvEmitter", "getSize", "utils", "Cell", "Slide", "animatePrototype", "getComputedStyle", "console", "jQuery", "GUID", "instances", "Flickity", "element", "options", "queryElement", "instance", "proto", "resize", "watchCSS", "rightToLeft", "id", "eventName", "listener", "method", "opts", "cellElems", "slider", "elems", "cellElem", "index", "cellX", "startCell", "cell", "x", "sideOffset", "renderX", "positionValue", "cells", "beginMargin", "endMargin", "slide", "canCellFit", "i", "slideWidth", "groupCells", "number", "percent", "percentMatch", "groupWidth", "cellAlignShorthands", "cellAlign", "shorthand", "height", "beforeGapX", "lastIndex", "afterGapX", "wrapAround", "gapWidth", "gapX", "cellIndex", "increment", "contentWidth", "beginBound", "endBound", "type", "event", "args", "emitArgs", "$event", "jQEvent", "unidraggerEvents", "_emitEvent", "clickedCell", "isWrap", "isInstant", "prevIndex", "selectedIndex", "slideableWidth", "length", "wrapIndex", "delta", "backWrapDelta", "forewardWrapDelta", "initialIndex", "value", "cellSlide", "elem", "closest", "adjCount", "len", "slideIndex", "selector", "selectedElement", "activeElement", "handler", "leftMethod", "rightMethod", "jQueryBridget", "jq", "require_ev_emitter", "__commonJSMin", "exports", "module", "global", "factory", "EvEmitter", "proto", "eventName", "listener", "events", "listeners", "onceEvents", "onceListeners", "index", "args", "require_unidragger", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "Unidragger", "proto", "event", "method", "startEvent", "activeEvents", "bindMethod", "touchAction", "handle", "eventName", "methodName", "touch", "changedTouch", "cursorNodes", "clickTypes", "pointer", "isCursorNode", "isClickType", "isOkayElement", "moveVector", "isMouseup", "require_drag", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "Unidragger", "utils", "proto", "event", "isTouchStart", "isTouchPointer", "isFocusNode", "getScrollPosition", "moveVector", "pointer", "direction", "dragX", "originBound", "endBound", "freeScroll", "index", "restingX", "distance", "positiveResting", "negativeResting", "increment", "minDistance", "condition", "dist", "minDist", "x", "len", "isWrapAround", "slideIndex", "slide", "wrap", "delta", "scroll", "scrollMoveX", "scrollMoveY", "require_prev_next_button", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "svgURI", "PrevNextButton", "increment", "direction", "arrowShape", "element", "label", "svg", "title", "path", "pathMovements", "getArrowMovements", "shape", "x0", "x1", "x2", "x3", "y1", "y2", "rightToLeft", "prevDirection", "nextDirection", "proto", "lastIndex", "button", "disabledIndex", "isEnabled", "require_page_dots", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "utils", "PageDots", "slidesLength", "delta", "count", "newDots", "item", "i", "dot", "num", "index", "proto", "event", "require_player", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "Player", "autoPlay", "onTick", "time", "isPageHidden", "proto", "require_add_remove_cell", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "utils", "getCellsFragment", "cells", "fragment", "cell", "proto", "elems", "index", "len", "isAppend", "insertCellElement", "endCells", "minCellIndex", "elem", "changedCellIndex", "prevSelectedElem", "require_lazyload", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "utils", "lazyAttr", "lazySrcAttr", "lazySrcsetAttr", "imgSelector", "proto", "lazyLoad", "adjCount", "getCellLazyImages", "img", "LazyLoader", "cellElem", "cellAttr", "cellSrcAttr", "cellSrcsetAttr", "event", "cell", "onComplete", "src", "srcset", "className", "require_ev_emitter", "__commonJSMin", "exports", "module", "global", "factory", "EvEmitter", "proto", "eventName", "listener", "events", "listeners", "onceEvents", "onceListeners", "index", "args", "require_imagesloaded", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "$", "console", "makeArray", "obj", "ImagesLoaded", "elem", "options", "onAlways", "queryElem", "elementNodeTypes", "nodeType", "childImgs", "img", "children", "child", "reURL", "style", "matches", "url", "loadingImage", "LoadingImage", "background", "Background", "onProgress", "image", "message", "eventName", "jqMethod", "isLoaded", "parentNode", "event", "method", "element", "jQuery", "require_imagesloaded", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "imagesLoaded", "onImagesLoadedProgress", "instance", "image", "cell", "require_js", "__commonJSMin", "exports", "module", "Flickity", "require_utils", "__commonJSMin", "exports", "module", "global", "factory", "utils", "a", "b", "num", "div", "obj", "ary", "index", "elem", "selector", "event", "method", "elems", "ffElems", "childElems", "_class", "methodName", "threshold", "timeoutName", "args", "onDocReady", "readyState", "str", "match", "$1", "$2", "console", "WidgetClass", "namespace", "dataAttr", "dataAttrElems", "jQuery", "attr", "options", "error", "instance", "require_as_nav_for", "__commonJSMin", "exports", "module", "window", "factory", "Flickity", "utils", "asNavForOption", "proto", "elem", "companion", "isInstant", "companionCells", "selectedCell", "firstIndex", "lastIndex", "selectIndex", "lerp", "selectedCells", "cell", "a", "b", "t", "method", "navElem", "event", "pointer", "cellElement", "cellIndex", "require_ev_emitter", "__commonJSMin", "exports", "module", "global", "factory", "EvEmitter", "proto", "eventName", "listener", "events", "listeners", "onceEvents", "onceListeners", "index", "args", "require_utils", "__commonJSMin", "exports", "module", "global", "factory", "utils", "a", "b", "num", "div", "obj", "ary", "index", "elem", "selector", "event", "method", "elems", "ffElems", "childElems", "_class", "methodName", "threshold", "timeoutName", "args", "onDocReady", "readyState", "str", "match", "$1", "$2", "console", "WidgetClass", "namespace", "dataAttr", "dataAttrElems", "jQuery", "attr", "options", "error", "instance", "require_core", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "utils", "jQuery", "instances", "InfiniteScroll", "element", "options", "queryElem", "instance", "proto", "GUID", "id", "method", "opts", "onInit", "type", "event", "args", "emitArgs", "$event", "jQEvent", "loggers", "className", "path", "response", "error", "items", "title", "index", "origin", "message", "logger", "rect", "elementScroll", "optPath", "nextIndex", "regexString", "templateRe", "match", "pathRegexes", "getPathParts", "href", "regex", "begin", "end", "hrefElem", "pathParts", "pathname", "isQuery", "directory", "pathStart", "nav", "fn", "threshold", "last", "timeout", "now", "trigger", "elem", "jqry", "jQueryBridget", "require_page_load", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "proto", "domParser", "responseBody", "domParseResponse", "fetchOptions", "path", "fetchPromise", "response", "error", "body", "append", "items", "promiseValue", "fragment", "getItemsFragment", "appendReady", "refreshScripts", "scripts", "script", "freshScript", "attrs", "attr", "imagesLoaded", "resolve", "bodyResponse", "checkLastPage", "pathOpt", "selector", "distance", "require_scroll_watch", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "utils", "proto", "scrollThreshold", "isBind", "addRemove", "bottom", "scrollY", "require_history", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "utils", "proto", "link", "isBind", "addRemove", "response", "path", "items", "firstItem", "elemScrollY", "elem", "scrollPage", "scrollViewY", "page", "title", "optHistory", "scrollY", "require_button", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "utils", "InfiniteScrollButton", "element", "infScroll", "event", "buttonElem", "require_status", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "utils", "proto", "statusElem", "bindMethod", "hideEvent", "eventName", "show", "eventElem", "hide", "type", "elem", "setDisplay", "value", "require_js", "__commonJSMin", "exports", "module", "window", "factory", "InfiniteScroll", "require_scratchcard_min", "__commonJSMin", "exports", "module", "t", "n", "e", "r", "o", "i", "c", "s", "a", "u", "f", "h", "l", "v", "p", "d", "m", "g", "y", "b", "x", "w", "_", "P", "S", "E", "k", "T", "O", "M", "L", "C", "R", "F", "I", "B", "A", "Y", "require_intlTelInput", "__commonJSMin", "exports", "module", "factory", "undefined", "allCountries", "i", "c", "_objectSpread", "target", "source", "ownKeys", "sym", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "intlTelInputGlobals", "id", "defaults", "regionlessNanpNumbers", "forEachProp", "callback", "keys", "forEachInstance", "method", "Iti", "options", "_this", "customOptions", "_this2", "forceShowFlags", "autoCountryPromise", "resolve", "reject", "utilsScriptPromise", "iso2", "countryCode", "priority", "index", "lowerCaseOnlyCountries", "country", "lowerCaseExcludeCountries", "iso", "a", "b", "_i", "_c", "rootCountryCode", "areaCode", "k", "partialDialCode", "countryData", "name", "attrs", "container", "el", "_this$options", "allowDropdown", "separateDialCode", "showFlags", "customContainer", "hiddenInput", "dropdownContainer", "parentClass", "wrapper", "showFlagsContainer", "hiddenInputName", "countries", "className", "preferred", "tmp", "idSuffix", "attributeValue", "inputValue", "useAttribute", "val", "dialCode", "isRegionlessNanp", "_this$options2", "initialCountry", "autoInsertDialCode", "_this3", "_this4", "e", "label", "isDropdownHidden", "_this5", "_this6", "number", "max", "_this7", "numeric", "s", "shouldHaveClass", "_this8", "pos", "windowTop", "inputTop", "dropdownHeight", "dropdownFitsBelow", "dropdownFitsAbove", "extraTop", "_this9", "listItem", "isOpening", "query", "queryTimer", "next", "originalNumber", "useNational", "_intlTelInputUtils$nu", "NATIONAL", "INTERNATIONAL", "format", "selectedDialCode", "isNanp", "countryCodes", "alreadySelected", "isRegionlessNanpNumber", "j", "shouldFocus", "prevItem", "ignoreOnlyCountriesOption", "allowFail", "countryList", "_this$options3", "prevCountry", "selectedFlagWidth", "nextItem", "title", "containerClone", "flagsContainerClone", "selectedFlagClone", "width", "shouldSetPlaceholder", "numberType", "placeholder", "flagChanged", "len", "element", "middle", "containerHeight", "containerTop", "containerBottom", "elementHeight", "elementTop", "elementBottom", "newScrollTop", "middleOffset", "heightDifference", "newDialCodeBare", "inputVal", "newDialCode", "newNumber", "prevDialCode", "includeAreaCode", "numericChars", "prefix", "numericVal", "start", "form", "originalCountryCode", "type", "injectScript", "path", "handleSuccess", "handleFailure", "script", "iti", "require_intl_tel_input", "__commonJSMin", "exports", "module", "require_qrcode", "__commonJSMin", "exports", "module", "qrcode", "typeNumber", "errorCorrectionLevel", "PAD0", "PAD1", "_typeNumber", "_errorCorrectionLevel", "QRErrorCorrectionLevel", "_modules", "_moduleCount", "_dataCache", "_dataList", "_this", "makeImpl", "test", "maskPattern", "moduleCount", "modules", "row", "col", "setupPositionProbePattern", "setupPositionAdjustPattern", "setupTimingPattern", "setupTypeInfo", "setupTypeNumber", "createData", "mapData", "r", "c", "getBestMaskPattern", "minLostPoint", "pattern", "i", "lostPoint", "QRUtil", "pos", "j", "bits", "mod", "data", "inc", "bitIndex", "byteIndex", "maskFunc", "dark", "mask", "createBytes", "buffer", "rsBlocks", "offset", "maxDcCount", "maxEcCount", "dcdata", "ecdata", "dcCount", "ecCount", "rsPoly", "rawPoly", "qrPolynomial", "modPoly", "modIndex", "totalCodeCount", "index", "dataList", "QRRSBlock", "qrBitBuffer", "totalDataCount", "mode", "newData", "qrNumber", "qrAlphaNum", "qr8BitByte", "qrKanji", "cellSize", "margin", "qrHtml", "alt", "title", "opts", "size", "mc", "mr", "qrSvg", "rect", "escapeXml", "min", "max", "createDataURL", "x", "y", "img", "s", "escaped", "_createHalfASCII", "r1", "r2", "p", "blocks", "blocksLastLineNoMargin", "ascii", "white", "black", "line", "context", "length", "bytes", "unicodeData", "numChars", "unicodeMap", "bin", "base64DecodeInputStream", "read", "b", "count", "b0", "b1", "b2", "b3", "k", "v", "unknownChar", "QRMode", "QRMaskPattern", "PATTERN_POSITION_TABLE", "G15", "G18", "G15_MASK", "getBCHDigit", "digit", "d", "errorCorrectLength", "a", "QRMath", "type", "sameCount", "darkCount", "ratio", "EXP_TABLE", "LOG_TABLE", "n", "num", "shift", "_num", "e", "RS_BLOCK_TABLE", "qrRSBlock", "totalCount", "dataCount", "getRsBlockTable", "rsBlock", "list", "_buffer", "_length", "bufIndex", "bit", "_mode", "_data", "strToNum", "chatToNum", "getCode", "_bytes", "stringToBytes", "code", "byteArrayOutputStream", "off", "len", "base64EncodeOutputStream", "_buflen", "_base64", "writeEncoded", "encode", "padlen", "str", "_str", "_pos", "decode", "gifImage", "width", "height", "_width", "_height", "pixel", "out", "lzwMinCodeSize", "raster", "getLZWRaster", "bitOutputStream", "_out", "_bitLength", "_bitBuffer", "clearCode", "endCode", "bitLength", "table", "lzwTable", "byteOut", "bitOut", "dataIndex", "_map", "_size", "key", "getPixel", "gif", "base64", "toUTF8Array", "utf8", "charcode", "factory", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "_Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "import_promise_critical_section", "AjaxPopoverController_default", "Controller", "context", "CriticalSection", "_", "r", "AtLeastOneCheckedController_default", "Controller", "checkedCheckboxTargets", "ct", "checkedCheckboxTarget", "hiddenInput", "BadgeCollectedController_default", "Controller", "bt", "e", "uni", "CheckoutAddressEntryController_default", "Controller", "Address", "e", "ClaimsQualifyingProductsController_default", "Controller", "currentTarget", "columnIndex", "selectedValue", "target", "DataTable", "CodeEntryController_default", "Controller", "e", "textInputs", "codeParts", "nextTextInput", "CredentialsController_default", "Controller", "iconTarget", "isValid", "hasMatchingPasswords", "it", "FavouriteController_default", "Controller", "e", "FeedController_default", "Controller", "e", "fct", "tfct", "isFiltered", "import_toastr", "FeedItemController_default", "Controller", "e", "import_promise_critical_section", "FeedLikeButtonController_default", "Controller", "context", "CriticalSection", "r", "import_tributejs", "debounce", "func", "wait", "timeout", "args", "context", "FeedPostCreateController_default", "Controller", "tbt", "data", "Picker", "picker", "e", "target", "tributeCollection", "text", "callback", "urlSearchParams", "response", "item", "v", "Tribute", "message", "b", "selection", "gifResults", "gif", "img", "error", "API_KEY", "query", "url", "staticURl", "selectedGifInput", "selectedGifInputStatic", "detailsEditorDiv", "existingGif", "emoji", "trigger", "c", "file", "fileReader", "_", "GifPauseController_default", "Controller", "event", "img", "status", "currentSrc", "stillSrc", "gifSrc", "FormController_default", "Controller", "sb", "autofocusInput", "HelpController_default", "Controller", "target", "query", "_", "asyncResults", "json", "id", "response", "currentTarget", "faqItemId", "LayoutAccountDropdownController_default", "Controller", "ppt", "import_toastr", "LayoutController_default", "Controller", "e", "hiddenPromise", "resolve", "script", "promises", "checkForUrl", "preventKey", "response", "template", "modalElement", "modal", "isCancel", "_", "r", "id", "body", "n", "options", "IntercomController_default", "Controller", "resolve", "script", "promises", "e", "LayoutSearchSuggestController_default", "Controller", "target", "url", "data", "query", "syncResults", "asyncResults", "response", "error", "e", "datum", "LogUserActionController_default", "Controller", "e", "MembershipRequestController_default", "Controller", "target", "schemeId", "selectedCountry", "slice", "options", "vnodeId", "isValidElement", "inEvent", "rerenderQueue", "prevDebounce", "microTick", "i", "EMPTY_OBJ", "EMPTY_ARR", "IS_NON_DIMENSIONAL", "assign", "obj", "props", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "createRef", "current", "Fragment", "diffProps", "dom", "newProps", "oldProps", "isSvg", "hydrate", "setProperty", "setStyle", "style", "value", "test", "name", "oldValue", "useCapture", "o", "cssText", "replace", "toLowerCase", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "indexOf", "removeAttribute", "setAttribute", "this", "event", "Component", "context", "getDomSibling", "childIndex", "sibling", "updateParentDomPointers", "child", "base", "defer", "cb", "setTimeout", "enqueueRender", "c", "push", "process", "__r", "debounceRendering", "renderQueueLength", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "sort", "a", "b", "shift", "__P", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "oldChildrenLength", "Array", "isArray", "reorderChildren", "placeChild", "getLastDom", "nextSibling", "unmount", "applyRef", "tmp", "toChildArray", "out", "some", "nextDom", "sibDom", "outer", "appendChild", "insertBefore", "lastDom", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "createContext", "defaultValue", "contextId", "context", "__c", "i", "__", "Consumer", "props", "contextValue", "children", "Provider", "subs", "ctx", "this", "getChildContext", "shouldComponentUpdate", "_props", "value", "some", "c", "__e", "enqueueRender", "sub", "push", "old", "componentWillUnmount", "splice", "indexOf", "call", "contextType", "slice", "EMPTY_ARR", "options", "error", "vnode", "oldVNode", "errorInfo", "component", "ctor", "handled", "constructor", "getDerivedStateFromError", "setState", "__d", "componentDidCatch", "__E", "e", "vnodeId", "isValidElement", "inEvent", "Component", "prototype", "update", "callback", "s", "__s", "state", "assign", "__v", "_sb", "forceUpdate", "__h", "render", "Fragment", "rerenderQueue", "microTick", "Promise", "then", "bind", "resolve", "setTimeout", "process", "__r", "currentIndex", "currentComponent", "previousComponent", "prevRaf", "afterPaintEffects", "EMPTY", "oldBeforeDiff", "options", "oldBeforeRender", "oldAfterDiff", "diffed", "oldCommit", "__c", "oldBeforeUnmount", "unmount", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "__H", "forEach", "invokeCleanup", "invokeEffect", "__h", "e", "options", "__e", "__b", "vnode", "currentComponent", "oldBeforeDiff", "oldBeforeRender", "currentIndex", "hooks", "__c", "previousComponent", "__", "hookItem", "__N", "EMPTY", "_pendingArgs", "diffed", "oldAfterDiff", "c", "length", "push", "prevRaf", "requestAnimationFrame", "afterNextFrame", "__V", "commitQueue", "some", "filter", "cb", "__v", "oldCommit", "unmount", "oldBeforeUnmount", "hasErrored", "s", "HAS_RAF", "callback", "raf", "done", "clearTimeout", "timeout", "cancelAnimationFrame", "setTimeout", "hook", "comp", "cleanup", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "PureComponent", "p", "this", "props", "PureComponent", "prototype", "Component", "isPureReactComponent", "shouldComponentUpdate", "props", "state", "shallowDiffers", "this", "oldDiffHook", "options", "__b", "vnode", "type", "__f", "ref", "REACT_FORWARD_SYMBOL", "Symbol", "for", "oldCatchError", "options", "__e", "error", "newVNode", "oldVNode", "errorInfo", "then", "component", "vnode", "__c", "__k", "oldUnmount", "unmount", "detachedClone", "detachedParent", "parentDom", "forEach", "effect", "__H", "assign", "__P", "map", "child", "removeOriginal", "originalParent", "__v", "insertBefore", "__d", "Suspense", "this", "__u", "_suspenders", "suspended", "__", "__a", "SuspenseList", "this", "_next", "_map", "options", "unmount", "vnode", "component", "__c", "__R", "__h", "type", "oldUnmount", "Suspense", "prototype", "Component", "promise", "suspendingVNode", "suspendingComponent", "c", "_suspenders", "push", "resolve", "suspended", "__v", "resolved", "onResolved", "onSuspensionComplete", "__u", "state", "__a", "suspendedVNode", "__k", "removeOriginal", "setState", "__b", "pop", "forceUpdate", "wasHydrating", "then", "componentWillUnmount", "render", "props", "detachedParent", "document", "createElement", "detachedComponent", "detachedClone", "__O", "__P", "fallback", "Fragment", "children", "list", "child", "node", "delete", "revealOrder", "size", "length", "ContextProvider", "getChildContext", "context", "Portal", "_this", "container", "_container", "_temp", "nodeType", "parentNode", "childNodes", "appendChild", "insertBefore", "before", "removeChild", "splice", "indexOf", "createPortal", "el", "containerInfo", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "toChildArray", "reverse", "i", "set", "componentDidUpdate", "componentDidMount", "forEach", "REACT_ELEMENT_TYPE", "Symbol", "for", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "test", "Component", "prototype", "isReactComponent", "forEach", "key", "Object", "defineProperty", "configurable", "get", "this", "set", "v", "writable", "value", "oldEventHook", "options", "event", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "e", "persist", "nativeEvent", "currentComponent", "classNameDescriptor", "class", "oldVNodeHook", "vnode", "type", "props", "normalizedProps", "nonCustomElement", "indexOf", "i", "IS_DOM", "test", "onChangeInputType", "toLowerCase", "CAMEL_PROPS", "replace", "multiple", "Array", "isArray", "toChildArray", "children", "child", "selected", "defaultValue", "className", "enumerable", "$$typeof", "REACT_ELEMENT_TYPE", "oldBeforeRender", "__r", "__c", "styleTexts", "styleEls", "injectStyles", "styleText", "styleEl", "appendStylesTo", "ensureElHasStyles", "el", "registerStylesRoot", "rootNode", "nonce", "getNonceValue", "parentEl", "insertBefore", "hydrateStylesRoot", "sheet", "ruleCnt", "styleStr", "i", "queriedNonceValue", "queryNonceValue", "metaWithNonce", "elWithNonce", "css_248z", "DelayedRunner", "drainedOption", "delay", "scope", "pauseDepths", "force", "removeElement", "elementClosest", "selector", "elementMatches", "findElements", "container", "containers", "allMatches", "matches", "j", "PIXEL_PROP_RE", "applyStyle", "el", "props", "propName", "applyStyleProp", "name", "val", "getEventTargetViaRoot", "ev", "_a", "_b", "guid$1", "getUniqueDomId", "buildDelegationHandler", "selector", "handler", "ev", "matchedChild", "elementClosest", "listenBySelector", "container", "eventType", "attachedHandler", "listenToHoverBySelector", "onMouseEnter", "onMouseLeave", "currentMatchedChild", "mouseOverEv", "realOnMouseLeave", "mouseLeaveEv", "createAriaClickAttrs", "handler", "createAriaKeyboardAttrs", "ev", "guidNumber", "guid", "parseFieldSpecs", "input", "specs", "tokens", "token", "compareByFieldSpecs", "obj0", "obj1", "fieldSpecs", "cmp", "compareByFieldSpec", "fieldSpec", "flexibleCompare", "a", "b", "padStart", "val", "len", "s", "formatWithOrdinals", "formatter", "args", "fallbackText", "str", "arg", "index", "isInt", "computeSmallestCellWidth", "cellEl", "allWidthEl", "contentWidthEl", "INTERNAL_UNITS", "PARSE_RE", "createDuration", "input", "unit", "parseString", "parseObject", "s", "m", "sign", "obj", "duration", "weeks", "durationsEqual", "d0", "d1", "addDurations", "d0", "d1", "subtractDurations", "multiplyDuration", "d", "n", "asRoughYears", "dur", "asRoughDays", "asRoughMonths", "asRoughMs", "asRoughMs", "dur", "wholeDivideDurations", "numerator", "denominator", "res", "INTERNAL_UNITS", "unit", "localRes", "isInt", "greatestDurationDenominator", "ms", "isArraysEqual", "a0", "a1", "equalityFunc", "len", "i", "DAY_IDS", "addWeeks", "m", "n", "a", "dateToUtcArray", "arrayToUtcDate", "addDays", "addMs", "diffWeeks", "m0", "m1", "diffDays", "diffHours", "diffMinutes", "diffSeconds", "diffDayAndTime", "m0day", "startOfDay", "m1day", "diffWholeWeeks", "d", "diffWholeDays", "timeAsMs", "startOfHour", "startOfMinute", "startOfSecond", "weekOfYear", "marker", "dow", "doy", "y", "w", "weekOfGivenYear", "nextW", "year", "firstWeekStart", "firstWeekOffset", "dayStart", "days", "fwd", "dateToLocalArray", "date", "arrayToLocalDate", "isValidDate", "buildIsoString", "timeZoneOffset", "stripZeroTime", "s", "formatTimeZoneOffset", "formatDayString", "formatIsoMonthStr", "formatIsoTimeString", "padStart", "minutes", "doIso", "sign", "abs", "hours", "mins", "memoize", "workerFunc", "resEquality", "teardownFunc", "currentArgs", "currentRes", "newArgs", "res", "memoizeObjArg", "currentArg", "newArg", "isPropsEqual", "EXTENDED_SETTINGS_AND_SEVERITIES", "STANDARD_DATE_PROP_SEVERITIES", "MERIDIEM_RE", "COMMA_RE", "MULTI_SPACE_RE", "LTR_RE", "UTC_RE", "NativeFormatter", "formatSettings", "standardDateProps", "extendedSettings", "severity", "name", "memoize", "buildFormattingFunc", "date", "context", "start", "end", "betterDefaultSeparator", "diffSeverity", "computeMarkerDiffSeverity", "biggestUnitForPartial", "full0", "full1", "partialDateProps", "computePartialFormattingOptions", "partialFormattingFunc", "partial0", "partial1", "insertion", "findCommonInsertion", "separator", "standardDatePropCnt", "formatTimeZoneOffset", "formatWeekNumber", "buildNativeFormattingFunc", "sanitizeSettings", "normalFormat", "zeroFormat", "zeroProps", "marker", "format", "s", "postProcess", "injectTzoStr", "m0", "m1", "tzoStr", "replaced", "num", "weekText", "weekTextLong", "locale", "display", "parts", "d0", "d1", "ca", "timeAsMs", "options", "biggestUnit", "partialOptions", "i0", "found0", "before0", "after0", "i1", "found1", "before1", "after1", "expandZonedMarker", "dateInfo", "calendarSystem", "a", "createVerboseFormattingArg", "startInfo", "endInfo", "CmdFormatter", "cmdStr", "FuncFormatter", "func", "createFormatter", "input", "BASE_OPTION_REFINERS", "identity", "createDuration", "parseFieldSpecs", "BASE_OPTION_DEFAULTS", "CALENDAR_LISTENER_REFINERS", "CALENDAR_OPTION_REFINERS", "COMPLEX_OPTION_COMPARATORS", "isMaybeObjectsEqual", "isMaybeArraysEqual", "b", "isPropsEqual", "isArraysEqual", "VIEW_OPTION_REFINERS", "mergeRawOptions", "optionSets", "mergeProps", "refineProps", "refiners", "refined", "extra", "propName", "raw", "hasOwnProperty", "propObjs", "complexPropsMap", "dest", "complexObjs", "i", "val", "props", "filterHash", "hash", "filtered", "key", "mapHash", "newHash", "arrayToHash", "item", "hashValuesToArray", "obj", "obj0", "obj1", "HANDLER_RE", "isNonHandlerPropsEqual", "keys", "getUnequalProps", "compareObjs", "oldProps", "newProps", "equalityFuncs", "isObjValsEqual", "val0", "val1", "comparator", "collectFromHash", "startIndex", "endIndex", "step", "res", "calendarSystemClassMap", "registerCalendarSystem", "theClass", "createCalendarSystem", "GregorianCalendarSystem", "d", "arr", "arrayToUtcDate", "dateToUtcArray", "ISO_RE", "parse", "str", "m", "isValidDate", "timeZoneOffset", "DateEnv", "settings", "timeZone", "isNamedTimeZone", "meta", "dateToLocalArray", "forcedTzo", "dur", "n", "diffWholeWeeks", "diffWholeDays", "diffHours", "isInt", "diffMinutes", "diffSeconds", "diff", "asRoughYears", "asRoughMonths", "asRoughDays", "asRoughMs", "unit", "startOfDay", "startOfHour", "startOfMinute", "startOfSecond", "weekOfYear", "formatter", "dateOptions", "addMs", "extraOptions", "buildIsoString", "ms", "arrayToLocalDate", "Theme", "calendarOptions", "iconOverrideHash", "iconClassesCopy", "buttonName", "className", "prefix", "isRtl", "customButtonProps", "flushSync", "runBeforeFlush", "oldDebounceRendering", "l", "callbackQ", "execCallbackSync", "callback", "D", "y", "FakeComponent", "x", "createContext", "defaultValue", "ContextType", "G", "origProvider", "isNew", "children", "subs", "_props", "c", "old", "ScrollResponder", "execFunc", "emitter", "scrollTime", "scrollTimeReset", "request", "isDatesNew", "ViewContextType", "buildViewContext", "viewSpec", "viewApi", "viewOptions", "dateProfileGenerator", "dateEnv", "theme", "pluginHooks", "dispatch", "getCurrentData", "calendarApi", "registerInteractiveComponent", "unregisterInteractiveComponent", "handler", "PureComponent", "nextProps", "nextState", "newState", "addPropsEquality", "addStateEquality", "BaseComponent", "propEquality", "stateEquality", "setRef", "ref", "current", "ContentInjector", "guid", "el", "generatorName", "hasCustomRenderingHandler", "customGenerator", "defaultGenerator", "renderProps", "attrs", "buildElAttrs", "useDefault", "innerContent", "queuedDomNodes", "currentGeneratorMeta", "customGeneratorRes", "isObject", "isActive", "_a", "handleCustomRendering", "customRenderingMetaMap", "generatorMeta", "isTruthy", "currentDomNodes", "removeElement", "newNode", "extraClassNames", "elRef", "RenderId", "ContentContainer", "InnerContentInjector", "generatedClassNames", "generateClassNames", "elAttrs", "_b", "containerComponent", "parentProps", "classNameGenerator", "classNames", "ViewContainer", "buildViewClassNames", "parseRange", "invertRanges", "ranges", "constraintRange", "invertedRanges", "dateRange", "compareRanges", "range0", "range1", "intersectRanges", "newRange", "rangesIntersect", "range0", "range1", "rangeContainsMarker", "range", "date", "constrainMarkerToRange", "computeAlignedDayRange", "timedRange", "dayCnt", "diffDays", "start", "startOfDay", "end", "addDays", "computeVisibleDayRange", "nextDayThreshold", "createDuration", "startDay", "endDay", "endTimeMS", "asRoughMs", "diffDates", "date0", "date1", "dateEnv", "largeUnit", "createDuration", "diffDayAndTime", "reduceCurrentDate", "currentDate", "action", "getInitialDate", "options", "initialDateInput", "getNow", "nowInput", "DateProfileGenerator", "props", "currentDateProfile", "forceToValid", "prevDate", "nextDate", "direction", "validRange", "currentInfo", "isRangeAllDay", "renderRange", "activeRange", "isValid", "constrainMarkerToRange", "intersectRanges", "rangesIntersect", "rangeContainsMarker", "input", "simpleInput", "date", "duration", "unit", "range", "dayCount", "greatestDurationDenominator", "usesMinMaxTime", "slotMinTime", "slotMaxTime", "start", "end", "asRoughDays", "startOfDay", "addDays", "dateAlignment", "res", "dateIncrement", "asRoughMs", "computeRes", "runningCount", "currentRange", "currentRangeUnit", "fallback", "customAlignment", "rangeInput", "parseRange", "computeVisibleDayRange", "hiddenDays", "isHiddenDayHash", "dayCnt", "i", "day", "inc", "isExclusive", "createEventInstance", "defId", "forcedStartTzo", "forcedEndTzo", "guid", "parseRecurring", "refined", "defaultAllDay", "recurringTypes", "parsed", "allDay", "expandRecurring", "eventStore", "framingRange", "context", "pluginHooks", "defs", "instances", "filterHash", "instance", "def", "starts", "expandRecurringRanges", "eventDef", "markers", "EVENT_NON_DATE_REFINERS", "EVENT_DATE_REFINERS", "identity", "EVENT_REFINERS", "parseEvent", "raw", "eventSource", "allowOpenRange", "refiners", "buildEventRefiners", "defIdMap", "instanceIdMap", "extra", "refineEventDef", "computeIsDefaultAllDay", "recurringRes", "parseEventDef", "singleRes", "parseSingle", "refineProps", "EVENT_UI_REFINERS", "sourceId", "hasEnd", "createEventUi", "memberAdder", "startMeta", "startMarker", "endMeta", "endMarker", "startInput", "parseEvents", "rawEvents", "createEmptyEventStore", "eventRefiners", "rawEvent", "tuple", "eventTupleToStore", "getRelevantEvents", "instanceId", "newStore", "filterEventStoreDefs", "lookDef", "isEventDefsGrouped", "def0", "def1", "mergeEventStores", "store0", "store1", "filterFunc", "excludeSubEventStore", "master", "sub", "filteredDefs", "filteredInstances", "normalizeConstraint", "parseClassNames", "EMPTY_EVENT_UI", "constraint", "combineEventUis", "uis", "combineTwoEventUis", "item0", "item1", "EVENT_SOURCE_REFINERS", "parseEventSource", "buildEventSourceRefiners", "rawObj", "metaRes", "buildEventSourceMeta", "meta", "reduceEventStore", "eventSources", "dateProfile", "receiveRawEvents", "resetRawEvents", "addEvent", "excludeEventsBySourceId", "fetchId", "fetchRange", "subset", "transformRawEvents", "existingEventStore", "buildPublicIdMaps", "newEventStore", "calEachTransform", "sourceEachTransform", "transformEachRawEvent", "func", "refinedEvents", "refinedEvent", "expandRange", "rezoneEventStoreDates", "oldDateEnv", "newDateEnv", "mapHash", "buildPublicIdMaps", "eventStore", "defs", "instances", "defIdMap", "instanceIdMap", "defId", "def", "publicId", "instanceId", "instance", "Emitter", "thisContext", "options", "type", "handler", "addToHash", "removeFromHash", "args", "attachedHandlers", "optionHandler", "handlers", "hash", "func", "DEF_DEFAULTS", "parseBusinessHours", "input", "context", "parseEvents", "refineInputs", "rawDefs", "rawDef", "triggerDateSelect", "selection", "pev", "buildDateSpanApiWithContext", "triggerDateUnselect", "dateSpan", "props", "transform", "buildDateSpanApi", "getDefaultEventEnd", "allDay", "marker", "dateEnv", "end", "startOfDay", "applyMutationToEventStore", "eventConfigBase", "mutation", "eventConfigs", "compileEventUis", "dest", "createEmptyEventStore", "applyMutationToEventDef", "applyMutationToEventInstance", "eventDef", "eventConfig", "standardProps", "copy", "applier", "eventInstance", "forceAllDay", "clearEnd", "computeAlignedDayRange", "EventSourceImpl", "internalEventSource", "EventImpl", "_EventImpl", "name", "val", "EVENT_DATE_REFINERS", "EVENT_NON_DATE_REFINERS", "EVENT_UI_REFINERS", "ui", "startInput", "start", "instanceRange", "startDelta", "diffDates", "endInput", "endDelta", "durationsEqual", "deltaInput", "delta", "createDuration", "maintainDuration", "formatInput", "formatter", "createFormatter", "relevantEvents", "getRelevantEvents", "oldEvent", "buildEventApis", "asStore", "eventApiToStore", "sourceId", "settings", "startStr", "endStr", "res", "eventApi", "excludeInstance", "eventApis", "excludeInstanceId", "id", "sliceEventStore", "eventUiBases", "framingRange", "nextDayThreshold", "inverseBgByGroupId", "inverseBgByDefId", "defByGroupId", "bgRanges", "fgRanges", "eventUis", "origRange", "normalRange", "computeVisibleDayRange", "slicedRange", "intersectRanges", "groupId", "ranges", "invertedRanges", "invertRanges", "invertedRange", "hasBgRendering", "setElSeg", "el", "seg", "getElSeg", "eventDefs", "mapHash", "compileEventUi", "uis", "combineEventUis", "sortEventSegs", "segs", "eventOrderSpecs", "objs", "buildSegCompareObj", "obj0", "obj1", "compareByFieldSpecs", "c", "eventRange", "range", "computeSegDraggable", "pluginHooks", "transformers", "transformer", "computeSegStartResizable", "computeSegEndResizable", "buildSegTimeText", "timeFormat", "defaultDisplayEventTime", "defaultDisplayEventEnd", "startOverride", "endOverride", "displayEventTime", "displayEventEnd", "wholeEventStart", "wholeEventEnd", "segStart", "segEnd", "isStartDay", "isEndDay", "addMs", "getSegMeta", "todayRange", "nowDate", "segRange", "rangeContainsMarker", "getEventClassNames", "classNames", "buildEventRangeKey", "getSegAnchorAttrs", "url", "emitter", "eventInteractive", "createAriaKeyboardAttrs", "ev", "STANDARD_PROPS", "identity", "parseDateSpan", "raw", "defaultDuration", "span", "parseOpenDateSpan", "extra", "refineProps", "startMeta", "endMeta", "buildDateSpanApi", "span", "dateEnv", "buildRangeApi", "buildRangeApiWithTimeZone", "range", "omitTime", "fabricateEventRange", "dateSpan", "eventUiBases", "context", "res", "refineEventDef", "def", "parseEventDef", "compileEventUi", "createEventInstance", "unpromisify", "func", "normalizedSuccessCallback", "normalizedFailureCallback", "isResolved", "wrappedSuccess", "wrappedFailure", "error", "JsonRequestError", "message", "response", "requestJson", "method", "url", "params", "fetchOptions", "fetchRes", "parsedResponse", "canVGrowWithinCell", "getCanVGrowWithinCell", "computeCanVGrowWithinCell", "el", "possible", "CalendarRoot", "BaseComponent", "flushSync", "props", "options", "forPrint", "isHeightAuto", "height", "classNames", "emitter", "Interaction", "settings", "parseInteractionSettings", "component", "input", "interactionSettingsStore", "CalendarImpl", "action", "callback", "name", "val", "handlerName", "handler", "currentDataManager", "args", "viewType", "dateOrRange", "dateEnv", "dateMarker", "state", "spec", "unit", "viewSpecs", "toolbarConfig", "viewTypes", "i", "getNow", "zonedDateInput", "deltaInput", "delta", "createDuration", "d", "formatter", "createFormatter", "d0", "d1", "settings", "omitTime", "dateOrObj", "endDate", "selectionInput", "selection", "parseDateSpan", "triggerDateSelect", "pev", "triggerDateUnselect", "eventInput", "sourceInput", "EventImpl", "def", "instance", "eventTupleToStore", "eventSource", "EventSourceImpl", "hashValuesToArray", "sourceApi", "tuple", "parseEvent", "newEventApi", "eventApi", "emitter", "eventApiToStore", "id", "defs", "instances", "defId", "instanceId", "currentData", "buildEventApis", "sourceHash", "sourceApis", "internalId", "sourceId", "parseEventSource", "timeInput", "time", "intersectRects", "rect1", "rect2", "res", "EMPTY_EVENT_STORE", "createEmptyEventStore", "Splitter", "memoize", "props", "keyInfos", "defKeys", "dateSelections", "individualUi", "eventStores", "eventDrags", "eventResizes", "splitProps", "mapHash", "info", "key", "buildEventUiForKey", "keyInfo", "eventStore", "buildEventUi", "dateSpan", "dateSpans", "keys", "eventDef", "defs", "instances", "splitStores", "defId", "instanceId", "instance", "eventUiBases", "splitHashes", "interaction", "splitStates", "affectedStores", "mutatedKeysByDefId", "mutatedStores", "populate", "allUi", "eventUiForKey", "baseParts", "stuff", "combineEventUis", "getDateMeta", "date", "todayRange", "nowDate", "dateProfile", "rangeContainsMarker", "getDayClassNames", "meta", "theme", "classNames", "DAY_IDS", "DAY_FORMAT", "createFormatter", "WEEK_FORMAT", "buildNavLinkAttrs", "context", "dateMarker", "viewType", "isTabbable", "dateEnv", "options", "calendarApi", "dateStr", "zonedDate", "handleInteraction", "ev", "customAction", "formatWithOrdinals", "createAriaClickAttrs", "_scrollbarWidths", "getScrollbarWidths", "computeScrollbarWidths", "el", "res", "computeScrollbarWidthsForEl", "computeClippedClientRect", "el", "clippingParents", "getClippingParents", "rect", "clippingParent", "intersection", "intersectRects", "parents", "computedStyle", "PositionCache", "originEl", "els", "isHorizontal", "isVertical", "originClientRect", "originClientLeft", "lefts", "rights", "originClientTop", "tops", "bottoms", "leftPosition", "len", "i", "topPosition", "leftIndex", "topIndex", "otherCache", "similarNumArrays", "a", "b", "DateComponent", "BaseComponent", "guid", "positionLeft", "positionTop", "elWidth", "elHeight", "el", "elementClosest", "SegHierarchy", "getEntryThickness", "entry", "inputs", "hiddenEntries", "input", "insertion", "hiddenEntry", "intersectSpans", "barrier", "entrySpan", "barrierSpan", "entriesByLevel", "levelCoords", "insertAt", "buildEntryKey", "newEntry", "strictOrder", "stackCnts", "levelCnt", "candidateCoord", "touchingLevel", "touchingLateral", "touchingEntry", "stackCnt", "trackingLevel", "trackingCoord", "trackingEntries", "trackingEntry", "searchRes", "binarySearch", "getEntrySpanEnd", "lateralIndex", "trackingEntryBottom", "destLevel", "destLateral", "rects", "level", "entries", "levelCoord", "groupIntersectingEntries", "merges", "filteredMerges", "hungryMerge", "merge", "joinSpans", "span0", "span1", "start", "end", "arr", "index", "item", "a", "searchVal", "getItemVal", "startIndex", "endIndex", "middleIndex", "middleVal", "computeFallbackHeaderFormat", "datesRepDistinctDays", "dayCnt", "createFormatter", "CLASS_NAME", "renderInner$1", "renderProps", "TableDateCell", "BaseComponent", "dateEnv", "options", "theme", "viewApi", "props", "date", "dateProfile", "dayMeta", "getDateMeta", "classNames", "getDayClassNames", "text", "navLinkAttrs", "buildNavLinkAttrs", "y", "ContentContainer", "formatDayString", "InnerContainer", "WEEKDAY_FORMAT", "TableDowCell", "addDays", "dateMeta", "InnerContent", "NowTimer", "x", "context", "getNow", "state", "prevProps", "unroundedNow", "addMs", "currentUnitStart", "nextUnitStart", "createDuration", "waitMs", "buildDayRange", "nextState", "ViewContextType", "start", "startOfDay", "end", "DayHeader", "memoize", "createDayHeaderFormatter", "dates", "renderIntro", "dayHeaderFormat", "nowDate", "todayRange", "explicitFormat", "dateCnt", "DaySeriesModel", "range", "dateProfileGenerator", "indices", "dayIndex", "firstIndex", "lastIndex", "clippedFirstIndex", "clippedLastIndex", "dayOffset", "diffDays", "DayTableModel", "daySeries", "breakOnWeeks", "daysPerRow", "firstDay", "rowCnt", "rows", "row", "cells", "col", "colCnt", "seriesSeg", "segs", "index", "nextIndex", "Slicer", "nextDayThreshold", "extraArgs", "eventUiBases", "eventSegs", "businessHours", "expandRecurring", "computeActiveRange", "eventStore", "rangeRes", "sliceEventStore", "interaction", "dateSpan", "activeRange", "activeDateSpanRange", "intersectRanges", "eventRange", "fabricateEventRange", "seg", "eventRanges", "dateRange", "isComponentAllDay", "VISIBLE_HIDDEN_RE", "Scroller", "BaseComponent", "el", "setRef", "props", "liquid", "liquidIsAbsolute", "isAbsolute", "className", "y", "realClientWidth", "children", "i", "realClientHeight", "RefMap", "masterCallback", "val", "key", "depths", "currentMap", "removed", "added", "refCallback", "startIndex", "endIndex", "step", "collectFromHash", "hashValuesToArray", "computeShrinkWidth", "chunkEls", "shrinkCells", "findElements", "largestWidth", "shrinkCell", "computeSmallestCellWidth", "getSectionHasLiquidHeight", "sectionConfig", "getAllowYScrolling", "renderChunkContent", "chunkConfig", "arg", "isHeader", "expandRows", "isColPropsEqual", "cols0", "cols1", "isArraysEqual", "isPropsEqual", "renderMicroColGroup", "cols", "shrinkWidth", "colNodes", "colProps", "span", "sanitizeShrinkWidth", "hasShrinkWidth", "col", "getScrollGridClassNames", "context", "classNames", "getSectionClassNames", "wholeTableVGrow", "renderScrollShim", "getStickyHeaderDates", "options", "stickyHeaderDates", "getStickyFooterScrollbar", "stickyFooterScrollbar", "SimpleScrollGrid", "memoize", "a", "state", "sectionConfigs", "microColGroupNode", "configCnt", "configI", "currentConfig", "headSectionNodes", "bodySectionNodes", "footSectionNodes", "isBuggy", "getCanVGrowWithinCell", "roleAttrs", "_", "forceYScrollbars", "scrollerClientWidths", "scrollerClientHeights", "needsYScrolling", "isLiquid", "overflowY", "sectionKey", "content", "scrollerEl", "section", "getSectionByKey", "scrollbarWidth", "getScrollbarWidths", "scrollerRefs", "scrollerElRefs", "scroller", "harnessEl", "sections", "EventContainer", "setElSeg", "seg", "eventRange", "ui", "renderProps", "EventImpl", "computeSegDraggable", "computeSegStartResizable", "computeSegEndResizable", "ContentContainer", "getEventClassNames", "prevProps", "StandardEvent", "timeFormat", "timeText", "buildSegTimeText", "getSegAnchorAttrs", "renderInnerContent$1", "InnerContent", "eventContentArg", "innerProps", "NowIndicatorContainer", "ViewContextType", "DAY_NUM_FORMAT", "createFormatter", "DayCellContainer", "memoizeObjArg", "refineRenderProps", "getDayClassNames", "formatDayString", "hasCustomDayCellContent", "hasCustomRenderingHandler", "raw", "date", "dateEnv", "dateProfile", "isMonthStart", "dayMeta", "getDateMeta", "dayNumberText", "BgEvent", "renderInnerContent", "title", "renderFill", "fillType", "WeekNumberContainer", "format", "num", "text", "renderInner", "PADDING_FROM_VIEWPORT", "Popover", "getUniqueDomId", "ev", "target", "getEventTargetViaRoot", "onClose", "theme", "j", "isRtl", "alignmentEl", "alignGridTop", "rootEl", "alignmentRect", "computeClippedClientRect", "popoverDims", "popoverTop", "elementClosest", "popoverLeft", "origin", "applyStyle", "MorePopover", "DateComponent", "startDate", "todayRange", "elAttrs", "positionLeft", "positionTop", "elWidth", "elHeight", "MoreLinkContainer", "linkEl", "moreLinkClick", "computeRange", "buildPublicSeg", "def", "instance", "range", "viewApi", "calendarApi", "moreLinkText", "moreCnt", "hint", "formatWithOrdinals", "createAriaClickAttrs", "renderMoreLinkInner", "addDays", "hiddenSegs", "computeEarliestSegStart", "computeLatestSegEnd", "segs", "pickEarliestStart", "seg0", "seg1", "pickLatestEnd", "globalLocales", "MINIMAL_RAW_EN_LOCALE", "RAW_EN_LOCALE", "buttonText", "unit", "eventCnt", "organizeRawLocales", "explicitRawLocales", "defaultCode", "allRawLocales", "rawLocaleMap", "rawLocale", "buildLocale", "inputSingular", "available", "parseLocale", "queryLocale", "codeArg", "codes", "raw", "queryRawLocale", "i", "parts", "j", "simpleId", "merged", "mergeProps", "week", "createPlugin", "input", "guid", "buildPluginHooks", "pluginDefs", "globalDefs", "currentPluginIds", "hooks", "addDefs", "defs", "def", "pluginName", "currentId", "combineHooks", "buildBuildPluginHooks", "currentOverrideDefs", "currentGlobalDefs", "currentHooks", "overrideDefs", "isArraysEqual", "hooks0", "hooks1", "compareOptionalDates", "date0", "date1", "StandardTheme", "Theme", "compileViewDefs", "defaultConfigs", "overrideConfigs", "hash", "viewType", "ensureViewDef", "viewDef", "buildViewDef", "defaultConfig", "overrideConfig", "queryProp", "name", "theComponent", "superType", "superDef", "parseViewConfigs", "inputs", "mapHash", "parseViewConfig", "rawOptions", "component", "createViewHookComponent", "BaseComponent", "options", "viewProps", "y", "ViewContextType", "context", "ContentContainer", "buildViewClassNames", "buildViewSpecs", "defaultInputs", "optionOverrides", "dynamicOptionOverrides", "localeDefaults", "viewDefs", "buildViewSpec", "durationInput", "duration", "durationUnit", "singleUnit", "singleUnitOverrides", "createDurationCached", "denom", "greatestDurationDenominator", "queryButtonText", "optionsSubset", "buttonTextMap", "buttonTextKey", "queryButtonTitle", "buttonHints", "buttonKey", "BASE_OPTION_DEFAULTS", "durationInputMap", "json", "res", "createDuration", "reduceViewType", "action", "reduceDynamicOptionOverrides", "reduceDateProfile", "currentDateProfile", "currentDate", "dateProfileGenerator", "dp", "initEventSources", "calendarOptions", "dateProfile", "activeRange", "addSources", "parseInitialSources", "reduceEventSources", "eventSources", "removeSource", "fetchDirtySources", "fetchSourcesByIds", "arrayToHash", "excludeStaticSources", "receiveResponse", "reduceEventSourcesNewTimeZone", "computeEventSourcesLoading", "sourceId", "eventSourceHash", "sources", "fetchRange", "source", "filterHash", "eventSource", "sourceHash", "isSourceDirty", "doesSourceNeedRange", "prevSources", "sourceIdHash", "isRefetch", "nextSources", "fetchSource", "calendarApi", "sourceDef", "fetchId", "rawEvents", "error", "errorHandled", "refiners", "buildEventSourceRefiners", "rawSources", "rawSource", "parseEventSource", "reduceDateSelection", "currentSelection", "reduceSelectedEvent", "currentInstanceId", "reduceEventDrag", "currentDrag", "newDrag", "reduceEventResize", "currentResize", "newResize", "parseToolbars", "calendarOptionOverrides", "theme", "viewSpecs", "header", "parseToolbar", "footer", "sectionStrHash", "sectionWidgets", "viewsWithButtons", "hasTitle", "sectionName", "sectionStr", "sectionRes", "parseSection", "isRtl", "calendarCustomButtons", "calendarButtonTextOverrides", "calendarButtonText", "calendarButtonHintOverrides", "calendarButtonHints", "sectionSubstrs", "buttonGroupStr", "buttonName", "customButtonProps", "viewSpec", "buttonClick", "buttonIcon", "buttonHint", "ev", "textFallback", "formatWithOrdinals", "prevOrNext", "navUnit", "ViewImpl", "type", "getCurrentData", "dateEnv", "eventSourceDef$2", "refined", "arg", "successCallback", "arrayEventSourcePlugin", "eventSourceDef$1", "errorCallback", "func", "unpromisify", "buildRangeApiWithTimeZone", "funcEventSourcePlugin", "JSON_FEED_EVENT_SOURCE_REFINERS", "identity", "eventSourceDef", "meta", "requestParams", "buildRequestParams", "requestJson", "response", "jsonFeedEventSourcePlugin", "range", "startParam", "endParam", "timeZoneParam", "customRequestParams", "params", "SIMPLE_RECURRING_REFINERS", "recurring", "recurringData", "subtractDurations", "typeData", "framingRange", "clippedFramingRange", "intersectRanges", "expandRanges", "simpleRecurringEventsPlugin", "daysOfWeek", "startTime", "dowHash", "dayMarker", "startOfDay", "endMarker", "instanceStarts", "instanceStart", "addDays", "changeHandlerPlugin", "events", "handleEventSources", "unfoundSources", "hashValuesToArray", "newInputs", "inputFound", "unfoundSource", "newInput", "handleDateProfile", "handleEventStore", "eventStore", "emitter", "buildEventApis", "globalPlugins", "state", "TaskRunner", "runTaskOption", "drainedOption", "DelayedRunner", "task", "delay", "scope", "force", "queue", "completedTasks", "buildTitle", "viewOptions", "createFormatter", "buildTitleFormat", "currentRangeUnit", "days", "diffWholeDays", "CalendarDataManager", "props", "memoize", "buildDateEnv$1", "buildTheme", "memoizeObjArg", "buildDateProfileGenerator", "buildViewApi", "buildViewUiProps", "buildEventUiBySource", "isPropsEqual", "buildEventUiBases", "parseContextBusinessHours", "Emitter", "optionsData", "currentViewType", "currentViewData", "getInitialDate", "rangeContainsMarker", "calendarContext", "callback", "initialState", "createEmptyEventStore", "contextAndState", "reducer", "computeIsLoading", "changedOptionNames", "reduceCurrentDate", "reduceEventStore", "renderableEventStore", "eventUiSingleBase", "selectionConfig", "eventUiBySource", "eventUiBases", "newState", "wasLoading", "isLoading", "oldData", "data", "changeHandlers", "oldCalendarOptions", "newCalendarOptions", "rezoneEventStoreDates", "optionName", "refinedOptions", "pluginHooks", "availableLocaleData", "extra", "warnUnknownOptions", "toolbarConfig", "locales", "locale", "mergeRawOptions", "availableRawLocales", "BASE_OPTION_REFINERS", "CALENDAR_LISTENER_REFINERS", "CALENDAR_OPTION_REFINERS", "currentRaw", "currentRefined", "anyChanges", "COMPLEX_OPTION_COMPARATORS", "viewApi", "VIEW_OPTION_REFINERS", "timeZone", "explicitLocale", "weekNumberCalculation", "firstDay", "weekText", "defaultSeparator", "DateEnv", "ThemeClass", "DateProfileGeneratorClass", "DateProfileGenerator", "eventDefs", "defId", "createEventUi", "isLoadingFunc", "parseBusinessHours", "viewName", "ToolbarSection", "children", "widgetGroup", "isOnlyButtons", "widget", "isPressed", "isDisabled", "buttonClasses", "groupClassName", "Toolbar", "model", "extraClassName", "forceLtr", "startContent", "endContent", "centerContent", "key", "widgetGroups", "ViewHarness", "el", "setRef", "aspectRatio", "classNames", "height", "paddingBottom", "EventClicking", "Interaction", "settings", "segEl", "seg", "getElSeg", "hasUrlContainer", "elementClosest", "url", "EventImpl", "listenBySelector", "EventHovering", "listenToHoverBySelector", "publicEvName", "CalendarContent", "PureComponent", "buildViewContext", "buildViewPropTransformers", "buildToolbarProps", "d", "getUniqueDomId", "settingsInput", "parseInteractionSettings", "interactions", "TheInteractionClass", "interactionSettingsStore", "listeners", "listener", "toolbarProps", "getNow", "viewVGrow", "viewHeight", "viewAspectRatio", "viewContext", "viewLabelId", "CalendarInteractionClass", "propSetHandlers", "propName", "prevProps", "interaction", "buildAppendContent", "_", "transformers", "transformer", "ViewComponent", "now", "title", "todayInfo", "prevInfo", "nextInfo", "theClasses", "TheClass", "Calendar", "CalendarImpl", "currentData", "flushSync", "D", "CalendarRoot", "isHeightAuto", "forPrint", "RenderId", "ensureElHasStyles", "wasRendering", "classList", "className", "applyStyleProp", "TableView", "DateComponent", "d", "headerRowContent", "bodyContent", "props", "context", "sections", "stickyHeaderDates", "getStickyHeaderDates", "y", "ViewContainer", "SimpleScrollGrid", "colCnt", "dayMinWidth", "ScrollGrid", "stickyFooterScrollbar", "getStickyFooterScrollbar", "renderScrollShim", "splitSegsByRow", "segs", "rowCnt", "byRow", "seg", "splitSegsByFirstCol", "byCol", "splitInteractionByRow", "ui", "DEFAULT_TABLE_EVENT_TIME_FORMAT", "createFormatter", "hasListItemDisplay", "display", "TableBlockEvent", "BaseComponent", "StandardEvent", "TableListItemEvent", "options", "timeFormat", "timeText", "buildSegTimeText", "EventContainer", "getSegAnchorAttrs", "renderInnerContent", "renderProps", "_", "TableCellMoreLink", "memoize", "compileSegs", "allSegs", "invisibleSegs", "MoreLinkContainer", "isForcedInvisible", "instanceId", "getSegMeta", "singlePlacements", "placement", "DEFAULT_WEEK_NUM_FORMAT", "TableCell", "getUniqueDomId", "el", "setRef", "state", "rootElRef", "dateEnv", "date", "dateProfile", "isMonthStart", "shouldDisplayMonthStart", "DayCellContainer", "renderTopInner", "InnerContent", "WeekNumberContainer", "buildNavLinkAttrs", "hasCustomDayCellContent", "currentRange", "currentStart", "currentEnd", "currentEndIncl", "addMs", "currentFirstYear", "currentFirstMonth", "currentLastYear", "currentLastMonth", "generateSegKey", "generateSegUid", "computeFgSegPlacement", "dayMaxEvents", "dayMaxEventRows", "strictOrder", "segHeights", "maxContentHeight", "cells", "hierarchy", "DayGridSegHierarchy", "segEntry", "segUid", "segInputs", "unknownHeightSegs", "i", "hiddenEntries", "segRects", "singleColPlacements", "multiColPlacements", "leftoverMargins", "placeRects", "moreCnts", "moreMarginTops", "col", "resliceSeg", "hiddenEntry", "hiddenSpan", "allRects", "rectsByEachCol", "groupRectsByEachCol", "rects", "currentHeight", "currentMarginTop", "rect", "multiPlacements", "isAbsolute", "isFirstCol", "spanStart", "spanEnd", "eventRange", "origRange", "slicedRange", "intersectRanges", "addDays", "SegHierarchy", "hiddenSegs", "entriesByLevel", "excludeHidden", "entry", "buildEntryKey", "level", "insertion", "forceHidden", "touchingEntry", "touchingLevel", "touchingLateral", "touchingEntryId", "intersectSpans", "hiddenEntryId", "TableRow", "RefMap", "isForced", "businessHoursByCol", "bgEventSegsByCol", "highlightSegsByCol", "mirrorSegsByCol", "sortEventSegs", "cell", "normalFgNodes", "mirrorFgNodes", "buildMirrorPlacements", "prevProps", "prevState", "currentProps", "isPropsEqual", "segPlacements", "todayRange", "isDragging", "isResizing", "isDateSelecting", "eventSelection", "framePositions", "defaultDisplayEventEnd", "isMirror", "nodes", "isVisible", "left", "right", "fillType", "isRtl", "leftRightCss", "buildEventRangeKey", "BgEvent", "renderFill", "isExternalSizingChange", "frameElRefs", "frameEls", "originEl", "newPositionCache", "PositionCache", "oldSegHeights", "newSegHeights", "limitByContentHeight", "segElMap", "height", "firstKey", "cellEl", "fcContainerEl", "elMap", "mirrorSegs", "colPlacements", "topsByInstanceId", "buildAbsoluteTopHash", "placements", "TableRows", "businessHourSegsByRow", "bgEventSegsByRow", "fgEventSegsByRow", "dateSelectionSegsByRow", "eventDragByRow", "eventResizeByRow", "cellMinHeight", "NowTimer", "nowDate", "row", "isSegAllDay", "firstCellEl", "rootEl", "rowObj", "positionLeft", "positionTop", "colPositions", "rowPositions", "start", "end", "Table", "expandRows", "limitViaBalanced", "classNames", "subjectEl", "getScrollSubjectEl", "scrollEl", "scrollTop", "containerEl", "formatIsoMonthStr", "formatDayString", "DayTableSlicer", "Slicer", "dateRange", "dayTableModel", "DayTable", "DayTableView", "buildDayTableModel", "dateProfileGenerator", "headerContent", "DayHeader", "contentArg", "daySeries", "DaySeriesModel", "DayTableModel", "TableDateProfileGenerator", "DateProfileGenerator", "currentRangeUnit", "isRangeAllDay", "renderRange", "buildDayTableRenderRange", "endOfWeek", "addWeeks", "lastMonthRenderStart", "diffWeeks", "css_248z", "injectStyles", "index", "createPlugin", "DayTableView", "TableDateProfileGenerator", "AllDaySplitter", "Splitter", "dateSpan", "eventDef", "hasBgRendering", "DEFAULT_SLAT_LABEL_FORMAT", "createFormatter", "TimeColsAxisCell", "props", "classNames", "y", "ViewContextType", "context", "dateEnv", "options", "viewApi", "labelFormat", "renderProps", "ContentContainer", "renderInnerContent", "InnerContent", "TimeBodyAxis", "BaseComponent", "slatMeta", "DEFAULT_WEEK_NUM_FORMAT", "AUTO_ALL_DAY_MAX_EVENT_ROWS", "TimeColsView", "DateComponent", "d", "scrollTop", "scrollerEl", "rowKey", "frameHeight", "dateProfile", "range", "navLinkAttrs", "diffDays", "buildNavLinkAttrs", "WeekNumberContainer", "rowHeight", "renderAllDayInner", "slatCoords", "headerRowContent", "allDayContent", "timeContent", "sections", "stickyHeaderDates", "getStickyHeaderDates", "ViewContainer", "SimpleScrollGrid", "colCnt", "dayMinWidth", "slatMetas", "ScrollGrid", "stickyFooterScrollbar", "getStickyFooterScrollbar", "arg", "contentArg", "isNowIndicator", "NowTimer", "nowDate", "nowIndicatorTop", "NowIndicatorContainer", "renderScrollShim", "dayMaxEvents", "dayMaxEventRows", "TimeColsSlatsCoords", "positions", "slotDuration", "date", "rangeContainsMarker", "startOfDayDate", "startOfDay", "timeMs", "asRoughMs", "createDuration", "when", "duration", "len", "slatCoverage", "slatIndex", "slatRemainder", "TimeColsSlatsBody", "slatElRefs", "i", "TimeColsSlats", "RefMap", "PositionCache", "collectSlatEls", "elMap", "splitSegsByCol", "segs", "segsByCol", "splitInteractionByCol", "ui", "byRow", "seg", "TimeColMoreLink", "MoreLinkContainer", "renderPlainFgSegs", "renderMoreLinkInner", "buildPositioning", "segInputs", "strictOrder", "maxStackCnt", "hierarchy", "SegHierarchy", "hiddenEntries", "hiddenGroups", "groupIntersectingEntries", "web", "buildWeb", "stretchWeb", "webToRects", "entriesByLevel", "buildNode", "cacheable", "level", "lateral", "siblingRange", "findNextLevelSegs", "nextLevelRes", "buildNodes", "entry", "lateralStart", "lateralEnd", "pairs", "cmpDescPressures", "extractNode", "a", "b", "subjectLevel", "subjectLateral", "levelCoords", "subjectEntry", "afterSubject", "levelCnt", "entries", "searchIndex", "binarySearch", "getEntrySpanEnd", "topLevelNodes", "totalThickness", "stretchNode", "node", "startCoord", "prevThickness", "buildEntryKey", "nextLevelNodes", "thickness", "allThickness", "thicknessFraction", "endCoord", "newChildren", "childNode", "res", "newThickness", "rects", "processNode", "levelCoord", "stackDepth", "rect", "processNodes", "nodes", "stackForward", "keyFunc", "workFunc", "cache", "args", "key", "computeSegVCoords", "colDate", "eventMinHeight", "vcoords", "spanStart", "spanEnd", "computeFgSegPlacements", "segVCoords", "eventOrderStrict", "eventMaxStack", "dumbSegs", "segRects", "segPlacements", "segRect", "dumbSeg", "DEFAULT_TIME_FORMAT", "TimeColEvent", "StandardEvent", "TimeCol", "memoize", "sortEventSegs", "isSelectMirror", "mirrorSegs", "interactionAffectedInstances", "sortedFgSegs", "DayCellContainer", "hasCustomDayCellContent", "segIsInvisible", "isDragging", "isResizing", "isDateSelecting", "forcedKey", "eventShortHeight", "eventSelection", "todayRange", "isMirror", "_", "segPlacement", "instanceId", "isVisible", "vStyle", "computeSegVStyle", "hStyle", "isInset", "isShort", "getSegMeta", "extraDateSpan", "eventDrag", "eventResize", "hiddenGroup", "positionCss", "hiddenSegs", "compileSegsFromEntries", "buildIsoString", "computeEarliestSegStart", "fillType", "children", "buildEventRangeKey", "BgEvent", "renderFill", "segHCoords", "isRtl", "shouldOverlap", "nearCoord", "farCoord", "left", "right", "hiddenInstances", "segEntries", "allSegs", "segEntry", "TimeColsContent", "fgEventSegsByRow", "bgEventSegsByRow", "businessHourSegsByRow", "nowIndicatorSegsByRow", "dateSelectionSegsByRow", "eventDragByRow", "eventResizeByRow", "cell", "collectCellEls", "cells", "TimeCols", "processSlotOptions", "el", "request", "onScrollTopRequest", "top", "colCoords", "state", "prevProps", "positionLeft", "positionTop", "snapDuration", "snapsPerSlot", "colIndex", "slatTop", "slatHeight", "partial", "localSnapIndex", "snapIndex", "dayDate", "time", "addDurations", "multiplyDuration", "start", "end", "snapDurationOverride", "wholeDivideDurations", "DayTimeColsSlicer", "Slicer", "dayRanges", "col", "segRange", "intersectRanges", "DayTimeCols", "buildDayRanges", "dayTableModel", "nowIndicator", "nextDayThreshold", "ranges", "STOCK_SUB_DURATIONS", "buildSlatMetas", "slotMinTime", "slotMaxTime", "explicitLabelInterval", "dayStart", "slatTime", "slatIterator", "labelInterval", "computeLabelInterval", "metas", "isLabeled", "formatIsoTimeString", "slotsPerLabel", "DayTimeColsView", "buildTimeColsModel", "dateProfileGenerator", "splitProps", "hasAttachedAxis", "hasDetachedAxis", "headerContent", "DayHeader", "DayTable", "timeGridContent", "daySeries", "DaySeriesModel", "DayTableModel", "css_248z", "injectStyles", "OPTION_REFINERS", "index", "createPlugin", "DayTimeColsView", "MyEventsCalendarController_default", "Controller", "endDate", "queryParams", "events", "event", "jsEvent", "el", "popover", "Calendar", "index", "e", "arg", "container", "timeElement", "startTime", "titleElement", "typeElement", "MyEventsDetailController_default", "Controller", "target", "isSelfBookingType", "bft", "renderNominee", "element", "text", "companyName", "NominationCreateController_default", "Controller", "data", "Picker", "picker", "e", "state", "params", "target", "availableReasonImageUrl", "emoji", "selectionStart", "selectionEnd", "PrizeController_default", "Controller", "target", "selectedOption", "ProfileController_default", "Controller", "ProfileEditPictureController_default", "Controller", "status", "e", "ppt", "file", "target", "import_toastr", "ReferAFriendController_default", "Controller", "RegistrationProfileController_default", "Controller", "file", "ppt", "target", "import_flickity", "import_flickity_as_nav_for", "pDebounce", "fn", "wait", "options", "leadingValue", "timeout", "resolveList", "arguments_", "resolve", "shouldCallNow", "result", "function_", "currentPromise", "p_debounce_default", "RewardController_default", "Controller", "p_debounce_default", "Flickity", "target", "variantId", "variantImage", "imageIndex", "price", "points", "preSalePoints", "url", "e", "isSelfRecipientTypeSelected", "grt", "import_infinite_scroll", "RewardsController_default", "Controller", "target", "InfiniteScroll", "isAllPerkType", "option", "SalesTargetVisualisation_default", "Controller", "elementLeft", "elementWidth", "targetLeft", "targetWidth", "targetMiddle", "targetStatusTargetWidth", "optimalTargetStatusTargetLeft", "targetIndicatorTargetWidth", "optimalTargetIndicatorTargetLeft", "import_scratchcard_js", "ScratchcardController_default", "Controller", "countdownFrom", "SignInVerifySmsController_default", "Controller", "interval", "e", "response", "successfullySentCode", "getRandomFloat", "min", "max", "round", "degRad", "degrees", "isAngleBetween", "angle", "arcStart", "arcEnd", "getFontSizeToFit", "text", "fontFamily", "maxWidth", "canvasContext", "w", "isPointInCircle", "point", "cx", "cy", "radius", "translateXYToElement", "element", "devicePixelRatio", "rect", "getAngle", "originX", "originY", "targetX", "targetY", "dx", "dy", "theta", "addAngle", "a", "b", "sum", "result", "diffAngle", "offsetFrom180", "calcWheelRotationForTargetAngle", "currentRotation", "targetAngle", "direction", "angle", "fixFloat", "isObject", "v", "isNumber", "setProp", "val", "isValid", "errorMessage", "defaultValue", "action", "isImageLoaded", "image", "f", "easeSinOut", "AlignText", "Defaults", "Debugging", "register", "wheel", "registerPointerEvents", "e", "updatePixelRatio", "unregister", "canvas", "point", "onPointerMove", "onPointerUp", "onMouseMove", "onMouseUp", "onTouchMove", "onTouchEnd", "Item", "wheel", "props", "isObject", "Defaults", "val", "img", "e", "index", "i", "angle", "getRandomFloat", "Wheel", "container", "props", "isObject", "Defaults", "register", "unregister", "w", "h", "minSize", "wheelSize", "scale", "item", "getFontSizeToFit", "now", "ctx", "angles", "actualBorderWidth", "i", "path", "degRad", "a", "isImageLoaded", "angle", "width", "height", "widthHalf", "heightHalf", "image", "isOverlay", "size", "sizeHalf", "Debugging", "actualBorderColor", "actualDebugLineWidth", "actualLineWidth", "actualItemLabelBaselineOffset", "actualLabelStrokeWidth", "actualLabelColor", "dragEventsReversed", "actualCircleDiameter", "event", "percent", "duration", "delta", "distance", "newRotationSpeed", "rotationSpeed", "isNumber", "rotation", "easingFunction", "itemIndex", "spinToCenter", "numberOfRevolutions", "direction", "itemAngle", "newRotation", "calcWheelRotationForTargetAngle", "easeSinOut", "n", "point", "p", "translateXYToElement", "isPointInCircle", "getAngle", "isAngleBetween", "initialRotation", "weightSum", "weightedItemAngle", "lastItemAngle", "t", "speed", "max", "newSpeed", "spinMethod", "wheelDescription", "val", "setProp", "v", "e", "Item", "lastDragPoint", "lastAngle", "angleSinceLastMove", "diffAngle", "dragDistance", "data", "randomIntFromInterval", "min", "max", "SpinTheWheelController_default", "Controller", "items", "Wheel", "e", "isManualSpin", "nonWinningItems", "item", "index", "p", "__assign", "t", "s", "i", "n", "p", "defaults", "Spinner", "opts", "target", "css", "drawLines", "css", "el", "props", "prop", "getColor", "color", "idx", "drawLines", "opts", "borderRadius", "shadow", "shadows", "parseBoxShadow", "i", "degrees", "backgroundLine", "delay", "line", "normalizeShadow", "boxShadow", "regex", "_i", "_a", "matches", "x", "y", "xUnits", "yUnits", "normalized", "shadows_1", "xy", "convertOffset", "radians", "sin", "cos", "SpinnerController_default", "Controller", "Spinner", "createInputElement", "name", "value", "input", "ConfirmController_default", "Controller", "tagName", "e", "confirmed", "element", "form", "existing", "SpendRequestController_default", "Controller", "currentTarget", "selectedValue", "import_intl_tel_input", "TelephoneNumberController_default", "Controller", "hiddenInput", "intlTelInput", "_objectWithoutPropertiesLoose", "source", "excluded", "target", "sourceKeys", "key", "i", "_extends", "target", "i", "source", "key", "import_qrcode_generator", "COLOR_BLACK", "COLOR_WHITE", "helpers", "createCanvas", "isCanvas", "isDrawable", "getCanvas", "updateCanvas", "drawCanvas", "drawText", "width", "height", "canvas", "el", "data", "options", "_options", "cellSize", "context", "_options$clear", "clear", "queue", "ctx", "item", "obj", "x", "y", "w", "h", "text", "_ref", "_ref$fontSize", "fontSize", "_ref$fontStyle", "fontStyle", "_ref$fontFamily", "fontFamily", "_ref$color", "color", "_ref$pad", "pad", "_ref$padColor", "padColor", "_ref$mode", "mode", "padColorArr", "_ctx$getImageData", "font", "resetContext", "fillText", "imageData", "total", "padded", "offset", "_loop", "loop", "current", "unique", "last", "i", "j", "k", "effects", "renderDefault", "renderRound", "renderFusion", "renderSpot", "foreground", "isDark", "count", "canvasMask", "drawCells", "_ref2", "canvasFg", "_ref3", "maskOptions", "_maskOptions$value", "value", "radius", "_ref4", "drawCorner", "_ref5", "_maskOptions$value2", "_ref6", "corners", "fillCorner", "_ref7", "_maskOptions$foregrou", "foregroundLight", "canvasLayer", "ctxLayer", "_ref8", "fillSize", "_ref9", "drawEach", "cornerX", "cornerY", "r", "startX", "startY", "destX", "destY", "qrcode", "DEFAULTS", "QRCanvasRenderer", "_this", "_extends", "_this$cache", "qr", "_proto", "config", "_this$options", "background", "padding", "effect", "logo", "resize", "onRender", "_config", "size", "canvasOut", "canvasBg", "_config2", "contentSize", "_cellSize", "sketchSize", "logoLayer", "imageRatio", "posRatio", "_this$options2", "typeNumber", "correctLevel", "qrcanvas", "rest", "_objectWithoutPropertiesLoose", "renderer", "TwoFASettingsController_default", "Controller", "target", "response", "wasSuccessful", "e", "qrcanvas", "UserNotificationsController_default", "Controller", "userNotificationId", "markAsElement", "e", "userNotificationTarget", "markAsRead", "read", "queryParams", "allRead", "unt", "$", "clickFocus", "selector", "elementToFocus", "handleSwap", "event", "lazyImages", "flickity", "flickityFeedResize", "matchHeight", "customScrollbar", "el", "datepicker", "dateMinus25Years", "select2", "magnificPopup", "magnificPopupResize", "tooltips", "popoverList", "popoverTriggerEl", "e", "popovers", "popoverElement", "application", "Application", "AjaxPopoverController_default", "AtLeastOneCheckedController_default", "BadgeCollectedController_default", "CheckoutAddressEntryController_default", "ClaimsQualifyingProductsController_default", "CodeEntryController_default", "CredentialsController_default", "FavouriteController_default", "FeedItemController_default", "FeedLikeButtonController_default", "FeedPostCreateController_default", "GifPauseController_default", "FeedController_default", "FormController_default", "HelpController_default", "LayoutController_default", "LayoutAccountDropdownController_default", "LayoutSearchSuggestController_default", "LogUserActionController_default", "MembershipRequestController_default", "MyEventsCalendarController_default", "MyEventsDetailController_default", "NominationCreateController_default", "PrizeController_default", "ProfileController_default", "ProfileEditPictureController_default", "ReferAFriendController_default", "RegistrationProfileController_default", "RewardController_default", "RewardsController_default", "SalesTargetVisualisation_default", "ScratchcardController_default", "SignInVerifySmsController_default", "SpinTheWheelController_default", "SpinnerController_default", "TelephoneNumberController_default", "TwoFASettingsController_default", "UserNotificationsController_default", "ConfirmController_default", "SpendRequestController_default", "IntercomController_default"] }