1{"version":3,"file":"video.novtt.min.js","sources":["node_modules/browser-pack/_prelude.js","node_modules/browser-resolve/empty.js","node_modules/define-properties/index.js","node_modules/for-each/index.js","node_modules/foreach/index.js","node_modules/function-bind/implementation.js","node_modules/function-bind/index.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/is-function/index.js","node_modules/lodash-compat/date/now.js","node_modules/lodash-compat/function/debounce.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/function/throttle.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object-keys/index.js","node_modules/object-keys/isArguments.js","node_modules/object.assign/hasSymbols.js","node_modules/object.assign/implementation.js","node_modules/object.assign/index.js","node_modules/object.assign/polyfill.js","node_modules/object.assign/shim.js","node_modules/once/once.js","node_modules/parse-headers/parse-headers.js","node_modules/safe-json-parse/tuple.js","node_modules/trim/index.js","node_modules/tsml/tsml.js","node_modules/xhr/index.js","node_modules/xtend/immutable.js","src/js/big-play-button.js","src/js/button.js","src/js/clickable-component.js","src/js/close-button.js","src/js/component.js","src/js/control-bar/audio-track-controls/audio-track-button.js","src/js/control-bar/audio-track-controls/audio-track-menu-item.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/mouse-time-display.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/progress-control/tooltip-progress-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/descriptions-button.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/track-button.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extend.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/modal-dialog.js","src/js/player.js","src/js/plugins.js","src/js/popup/popup-button.js","src/js/popup/popup.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/audio-track-list.js","src/js/tracks/audio-track.js","src/js/tracks/html-track-element-list.js","src/js/tracks/html-track-element.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/tracks/track-enums.js","src/js/tracks/track-list.js","src/js/tracks/track.js","src/js/tracks/video-track-list.js","src/js/tracks/video-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,2,"_dereq_","keys","foreach","hasSymbols","Symbol","toStr","Object","prototype","toString","isFunction","fn","arePropertyDescriptorsSupported","obj","defineProperty","enumerable","value","_","x","supportsDescriptors","object","name","predicate","configurable","writable","defineProperties","map","predicates","arguments","props","concat","getOwnPropertySymbols","object-keys",3,"forEach","list","iterator","context","TypeError","forEachArray","forEachString","forEachObject","array","len","hasOwnProperty","string","charAt","k","is-function",4,"hasOwn","ctx",5,"ERROR_MESSAGE","slice","Array","funcType","that","target","bound","args","binder","result","apply","boundLength","Math","max","boundArgs","push","Function","join","Empty",6,"implementation","bind","./implementation",7,"topLevel","minDoc","document","doccy","min-document",8,9,"setTimeout","alert","confirm","prompt",10,"getNative","nativeNow","Date","now","getTime","../internal/getNative",11,"debounce","func","wait","options","cancel","timeoutId","clearTimeout","maxTimeoutId","lastCalled","trailingCall","undefined","complete","isCalled","id","thisArg","delayed","remaining","stamp","maxDelayed","trailing","debounced","leading","maxWait","leadingCall","FUNC_ERROR_TEXT","isObject","nativeMax","../date/now","../lang/isObject",12,"restParam","start","index","rest","otherArgs",13,"throttle","./debounce",14,"arrayCopy","source",15,"arrayEach","iteratee",16,"baseCopy","key",17,"createBaseFor","baseFor","./createBaseFor",18,"baseForIn","keysIn","../object/keysIn","./baseFor",19,"baseMerge","customizer","stackA","stackB","isSrcArr","isArrayLike","isArray","isTypedArray","srcValue","isObjectLike","baseMergeDeep","isCommon","../lang/isArray","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",20,"mergeFunc","isPlainObject","isArguments","toPlainObject","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",21,"toObject","baseProperty","./toObject",22,"bindCallback","argCount","identity","collection","accumulator","other","../utility/identity",23,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",24,"fromRight","keysFunc","iterable",25,"getLength","./baseProperty",26,"isNative","../lang/isNative",27,"isLength","./getLength","./isLength",28,"isHostObject",29,"reIsUint","test","MAX_SAFE_INTEGER","isIndex",30,"type","./isIndex",31,32,33,"shimKeys","propsLength","allowIndexes","isString","objectProto","../lang/isString",34,"support","unindexedChars","../support",35,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",36,"arrayTag","objToString","nativeIsArray","../internal/isLength",37,"funcTag","./isObject",38,"reIsNative","fnToString","reIsHostCtor","RegExp","replace","../internal/isHostObject","./isFunction",39,40,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",41,"stringTag",42,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",43,"../internal/baseCopy",44,"nativeKeys","../internal/shimKeys",45,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","enumPrototypes","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",46,"merge","../internal/baseMerge","../internal/createAssigner",47,"arrayProto","splice","0","y","spliceObjects",48,49,"has","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$console","$frame","$frameElement","$frames","$parent","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","shim","keysWorksWithArguments","originalKeys",50,"str","callee",51,"sym","symVal","getOwnPropertyNames","syms","descriptor","getOwnPropertyDescriptor",52,"canBeObject","propIsEnumerable","objTarget","./hasSymbols","function-bind",53,"getPolyfill","./polyfill","./shim","define-properties",54,"lacksProperEnumerationOrder","assign","letters","split","actual","assignHasPendingExceptions","preventExtensions","thrower",55,"polyfill",56,"once","called",57,"trim","arg","headers","row","indexOf","toLowerCase","for-each",58,"SafeParseTuple","reviver","json","error","err",59,"right",60,"clean","sa",61,"isEmpty","initParams","uri","callback","params","xtend","createXHR","_createXHR","readystatechange","xhr","readyState","loadFunc","getBody","body","response","responseType","responseText","responseXML","isJson","JSON","parse","errorFunc","evt","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","method","url","rawRequest","getAllResponseHeaders","parseHeaders","cors","XDomainRequest","XMLHttpRequest","data","sync","stringify","onreadystatechange","onload","onerror","onprogress","ontimeout","open","username","password","withCredentials","timeout","abort","setRequestHeader","beforeSend","send","noop","toUpperCase","global/window","parse-headers",62,"extend","Constructor","instance","player_","play","__esModule","newObj","_clickableComponentJs2","_interopRequireDefault","_clickableComponentJs","_component2","_component","_objectAssign2","className","buildCSSClass","_utilsLogJs2","warn","attributes","role","aria-live","addChild","child","event","which","handleKeyPress","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","Dom","_interopRequireWildcard","_utilsDomJs","ClickableComponent","_Component","player","_classCallCheck","createEl","tabIndex","controlTextEl_","controlText","text","el","controlText_","handleClick","handleBlur","CloseButton","_Button","localize","default","_globalWindow2","_globalWindow","Fn","_utilsFnJs","Component","ready","options_","_utilsMergeOptionsJs2","id_","Guid","newGUID","el_","childIndex_","initChildren","dispose","trigger","bubbles","children_","childNameIndex_","off","tagName","properties","languages","language","primaryCode","component","componentName","ComponentClass","componentClassName","childFound","children","handleAdd","parentOptions","opts","playerOptions","_this","newChild","Tech","getComponent","workingChildren","filter","some","wchild","_this2","first","guid","cleanRemover","Events","on","second","third","nodeName","one","_this3","_arguments","newFunc","isReady_","triggerReady","readyQueue","readyQueue_","dimension","widthOrHeight","num","skipListeners","style","pxIndex","currentDimension","computedWidthOrHeight","getComputedStyle","currentStyle","touchStart","touchTimeThreshold","couldBeTap","touches","firstTouch","xdiff","pageX","touchDistance","sqrt","ydiff","tapMovementThreshold","noTap","touchTime","preventDefault","clearInterval","touchHolding","touchEnd","report","disposeFn","intervalId","setInterval","interval","components_","subObj","_name","_trackButtonJs2","_trackButtonJs","AudioTrackButton","_TrackButton","items","tracks","_audioTrackMenuItemJs2","_menuMenuItemJs2","_menuMenuItemJs","AudioTrackMenuItem","_MenuItem","audioTracks","selected","track","enabled","changeHandler","handleTracksChange","ControlBar","exitFullscreen","requestFullscreen","LiveDisplay","contentEl_","appendChild","updateShowing","_button2","_button","MuteToggle","update","tech_","addClass","vol","volume","level","toMute","muted","removeElClass","addElClass","PlayToggle","removeClass","_playbackRateMenuItemJs2","_playbackRateMenuItemJs","PlaybackRateMenuButton","_MenuButton","labelEl_","createMenu","rates","playbackRates","currentRate","playbackRate","newRate","playbackRateSupported","PlaybackRateMenuItem","label","rate","parseFloat","LoadProgressBar","buffered","duration","percent","time","end","width","percentify","bufferedEnd","part","left","_componentJs2","_componentJs","MouseTimeDisplay","controlBar","progressControl","keepTooltipsInside","tooltip","handleMouseMove","position","findElPosition","parentNode","newTime","_utilsFormatTimeJs2","setAttribute","clampedPosition","clampPosition_","tooltipWidth","tooltipWidthHalf","playerWidth","actualPosition","ceil","PlayProgressBar","updateDataAttr","scrubbing","getCache","currentTime","_playProgressBarJs","SeekBar","_Slider","updateProgress","updateAriaAttributes","tooltipProgressBar","bar","tooltipStyle","maxWidth","floor","minWidth","calculateDistance","stepBack","TooltipProgressBar","innerHTML","querySelector","formattedTime","CustomControlSpacer","_Spacer","CaptionSettingsMenuItem","_TextTrackMenuItem","selectable","mode","show","CaptionsButton","_TextTrackButton","threshold","createItems","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","_menuMenuJs2","_menuMenuJs","ChaptersButton","textTracks","kind_","_length","chaptersTrack","menu","_utilsToTitleCaseJs2","insertElFirst","title","contentEl","cues","remoteTextTrackEl","addEventListener","cue","mi","ChaptersTrackMenuItem","_textTrackButtonJs2","_textTrackButtonJs","DescriptionsButton","disabled","OffTextTrackMenuItem","kind","SubtitlesButton","TextTrackButton","_offTextTrackMenuItemJs2","_textTrackMenuItemJs2","TextTrackMenuItem","onchange","Event","_globalDocument2","createEvent","CurrentTimeDisplay","updateContent","formattedTime_","localizedText","DurationDisplay","duration_","RemainingTimeDisplay","_menuMenuButtonJs2","_menuMenuButtonJs","TrackButton","hide","updateHandler","removeEventListener","_sliderSliderJs2","_sliderSliderJs","VolumeBar","checkMuted","toFixed","VolumeControl","VolumeMenuButton","updateVisibility","inline","vertical","_PopupButton","volumeUpdate","volumeBar","orientationClass","popup","_popupPopupJs2","contentElType","vb","_muteToggleJs2","menuContent","handleMouseDown","handleMouseUp","ErrorDisplay","content","message","_modalDialog2","_utilsEventsJs","EventTarget","allowedEvents_","ael","extendFn","subClassMethods","methods","init","_utilsLog2","FullscreenApi","apiMap","specApi","browserApi","_objectAssign","MediaError","errorTypes","_menuJs2","_menuJs","MenuButton","_ClickableComponent","buttonPressed_","unshift","unlockShowing","unpressButton","handleSubmenuKeyPress","disable","enabled_","MenuItem","_selected","Menu","append","focus","haveTitle","shift","item","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","MODAL_CLASS_NAME","descEl_","ModalDialog","description","desc","fillAlways","fill","wasPlaying_","paused","pause","ownerDocument","close","controls","closeable_","_close","getChild","temp","parentEl","nextSiblingEl","nextSibling","removeChild","empty","insertContent","content_","_globalDocument","_utilsLogJs","_utilsToTitleCaseJs","_tracksAudioTrackListJs","_tracksVideoTrackListJs","_tracksTextTrackSettingsJs","_modalDialog","reportTouchActivity","languagesToLower","poster_","poster","scrubbing_","playerOptionsCopy","plugins","isAudio","Player","players","styleEl_","attrs","getElAttributes","attr","VIDEOJS_NO_DYNAMIC_STYLE","stylesheet","createStyleElement","defaultsStyleEl","$","head","height","fluid","aspectRatio","links","linkEl","privDimension","_dimension","parsedVal","isNaN","bool","fluid_","ratio","updateStyleEl_","_width","width_","_height","height_","techEl","idClass","aspectRatio_","videoWidth","videoHeight","ratioParts","ratioMultiplier","loadTech_","techName","unloadTech_","_techTechJs2","getTech","disposeMediaElement","techName_","techOptions","nativeControlsForTouch","playerId","techId","videoTracks","videoTracks_","textTracks_","audioTracks_","preload","loop","vtt.js","src","cache_","techComponent","handleTechReady_","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechLoadStart_","handleTechWaiting_","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechEnded_","handleTechSeeking_","handleTechSeeked_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechProgress_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechSuspend_","handleTechAbort_","handleTechEmptied_","handleTechStalled_","handleTechLoadedData_","handleTechRateChange_","handleTechVolumeChange_","handleTechTextTrackChange_","usingNativeControls","techGet_","addTechControlsListeners_","removeTechControlsListeners_","hasStarted","_hasStarted","hasStarted_","handleTechClick_","button","techCall_","isScrubbing","seconds","percentAsDecimal","min","fsApi","fullscreenchange","documentFullscreenChange","isFullscreen","fullscreenElement","supportsFullScreen","_fullscreenApiJs2","fullWindowOnEscKey","exitFullWindow","documentElement","overflow","docOrigOverflow","techOrder","tech","can","canPlayType","_ref","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","found","innerChoice","b","sourceOrder","currentTech","sourceList_","load","sourceTech","selectSource","controls_","error_","errorDisplay","_mediaErrorJs2","userActive","userActive_","stopPropagation","lastMoveX","lastMoveY","handleActivity","reportUserActivity","screenX","screenY","mouseInProgress","inactivityTimeout","userActivity_","createModal","modal","tagOptions","dataSetup","_safeParseTuple","_safeJsonParseTuple2","hasChildNodes","childNodes","childName","baseOptions","notSupportedMessage","handleError_","flexNotSupported_","createElement","_popupJs","PopupButton","PosterImage","setSrc","fallbackImg_","backgroundImage","autoSetup","vids","getElementsByTagName","audios","mediaEls","mediaEl","getAttribute","autoSetupTimeout","_windowLoaded","vjs","Slider","barName","doc","blockTextSelection","unblockTextSelection","progress","getPercent","percentage","vertical_","../component.js","../utils/dom.js","object.assign",120,"FlashRtmpDecorator","Flash","rtmp/mp4","rtmp/flv","streamFromParts","connection","stream","parts","streamBegin","connEnd","substring","isStreamingType","srcType","streamingFormats","isStreamingSrc","rtmpSourceHandler","canHandleSource","handleSource","srcParts","_createSetter","attrUpper","_api","val","_createGetter","vjs_getProperty","_tech2","_tech","_utilsUrlJs","setSource","startTime","_Tech","swf","objId","flashVars","readyFunction","errorEventProxyFunction","autoplay","wmode","bgcolor","Url","getAbsoluteURL","vjs_src","setCurrentTime","seekable","enterFullScreen","_readWrite","_readOnly","nativeSourceHandler","guessMimeType","ext","getFileExtension","formats","video/flv","onReady","currSwf","getEl","checkReady","eventName","swfID","version","ActiveXObject","GetVariable","match","navigator","getEmbedCode","objTag","flashVarsString","paramsString","movie","flashvars","allowNetworking","attrsString","_techJs2","_techJs","_tsml2","_tsml","Html5","crossoriginTracks","currentSrc","initNetworkState_","nodes","nodesLength","node","featuresNativeTextTracks","remoteTextTracks","addTrack_","hasAttribute","isCrossOrigin","removeNodes","trackTypes","capitalType","tl","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","clone","cloneNode","insertBefore","tagAttributes","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","setLoadstartFired","loadstartFired","triggerLoadstart","eventsToTrigger","tt","handleTextTrackChange_","handleTextTrackAdd_","handleTextTrackChange","srcElement","handleTextTrackAdd","removeTrack_","handleVideoTrackChange_","vt","handleVideoTrackAdd_","handleVideoTrackRemove_","handleAudioTrackChange_","audioTrackList","webkitEnterFullScreen","video","networkState","HAVE_METADATA","addRemoteTextTrack","htmlTrackElement","srclang","removeRemoteTextTrack","trackElement","remoteTextTrackEls","getTrackElementByTrack_","removeTrackElement_","$$","isSupported","TEST_VID","canControlPlaybackRate","supportsNativeTextTracks","supportsTextTracks","IS_FIREFOX","supportsVideoTracks","patchCanPlayType","ANDROID_VERSION","mpegurlRE","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","removeAttribute","resetMediaElement","querySelectorAll","MediaLoader","_tracksAudioTrackList2","_tracksAudioTrackList","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","emulateTextTracks","trackProgress","stopTrackingProgress","numBufferedPercent","bufferedPercent","bufferedPercent_","clearTracks","manualProgress","manualProgressOff","types","textTrackListChanges","initTrackListeners","trackListChanges","script","updateDisplay","techs_","createTrackHelper","featuresVolumeControl","featuresFullscreenResize","handlers","sourceHandlers","handler","selectSourceHandler","canPlaySource","srcObj","deferrable","fnName","originalFn","sh","disposeSourceHandler","currentSource_","firstLoadStartListener_","successiveLoadStartListener_","sourceHandler_","disableOthers","AudioTrackList","_TrackList","IS_IE8","prop","_trackList2","changing_","addTrack","_track2","_track","AudioTrack","_Track","settings","_utilsMergeOptions2","_trackEnums","AudioTrackKind","get","set","newEnabled","_utilsBrowserJs","HtmlTrackElementList","trackElements_","addTrackElement_","trackElements","trackElement_","_length2","_eventTarget","_eventTarget2","HTMLTrackElement","_EventTarget","_tracksTextTrack2","NONE","LOADED","TextTrackCueList","setCues_","oldLength","length_","defineProp","getCueById","rule","darkGray","lightGray","fontMap","monospace","sansSerif","serif","TextTrackDisplay","toggleDisplay","modes","captions","subtitles","trackList","firstDesc","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","_i","cueDiv","displayState","overrides","color","firstChild","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","top","bottom","fontFamily","fontVariant","trackToJson_","ret","reduce","acc","endTime","textTracksToJson","trackEls","trackObjs","trackEl","addedTrack","addCue","_trackList","TextTrackList","rtrack","tracks_","getTrackById","selectedOption","selectedOptions","selectedIndex","setSelectedOption","option","TextTrackSettings","persistTextTrackSettings","saveSettings","getValues","textEdge","getSelectedOptionValue","fgColor","bgColor","bgOpacity","setValues","values","restoreSettings","localStorage","getItem","ttDisplay","registerComponent","_textTrackCueList","_trackJs","_xhr2","_xhr","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","errors","oncue","onparsingerror","onflush","console","groupCollapsed","loadTrack","crossOrigin","responseBody","loadHandler","TextTrack","TextTrackKind","TextTrackMode","default_","cues_","activeCues_","_textTrackCueList2","activeCues","timeupdateHandler","changed","newMode","ct","active","removeCue","_removeCue","removed","metadata","TrackList","change","Track","trackProps","VideoTrackList","VideoTrack","VideoTrackKind","newSelected","IS_IPAD","USER_AGENT","IS_IPHONE","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","major","IS_EDGE","bufferedDuration","_timeRangesJs","createTimeRange","createQuerier","selector","isNonBlankString","propName","_logJs2","_templateObject","getElData","elIdAttr","hasElData","removeElData","elData","element","classToAdd","classList","add","classToRemove","remove","toggleElClass","classToToggle","hasElClass","attrName","attrValue","attrVal","knownBooleans","box","getBoundingClientRect","docEl","scrollLeft","pageXOffset","clientLeft","clientTop","scrollTop","pageYOffset","getPointerPosition","boxW","offsetWidth","boxH","offsetHeight","boxY","pageY","changedTouches","isTextNode","elem","_handleMultipleEvents","dispatcher","fixEvent","handlersCopy","m","isImmediatePropagationStopped","hash","removeType","_cleanUpEvents","elemData","parent","isPropagationStopped","defaultPrevented","targetData","old","relatedTarget","fromElement","toElement","returnValue","cancelBubble","returnTrue","returnFalse","stopImmediatePropagation","clientY","detachEvent","global/document",144,"uid","formatTime","h","gm","guide","argsArray","log","history","_logType","mergeOptions",150,"createTimeRangesObj","ranges","getRange","rangeIndex","rangeCheck","createTimeRanges","href","addToBody","host","protocol","div","details","path","splitPathRe","pathParts","exec","winLoc","location","_pluginsJs2","_pluginsJs","_tracksAudioTrackJs","_tracksVideoTrackJs","_utilsFormatTimeJs","_lodashCompatObjectMerge","_techFlashJs","_techHtml5Js","getPlayers","_player2","registerTech","_lodashCompatObjectMerge2","_merge","_tracksTextTrackJs2","_tracksAudioTrackJs2"],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;wBChBmB,aAAa;;;;2BACV,gBAAgB;;;;;;;;;;;;;;IAWhC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,MAAM,EAAE,OAAO,EAAE;0BAFzB,aAAa;;AAGf,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;GACxB;;;;;;;;;AAJG,eAAa,WAYjB,aAAa,GAAA,yBAAG;AACd,WAAO,qBAAqB,CAAC;GAC9B;;;;;;;;AAdG,eAAa,WAqBjB,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;GACrB;;SAvBG,aAAa;;;AA2BnB,aAAa,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;;AAEpD,yBAAU,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;qBAC7C,aAAa;;;;;;;;;;;;;;;;;;;oCC1CG,0BAA0B;;;;yBACnC,aAAa;;;;6BACX,mBAAmB;;IAA/B,MAAM;;yBACE,eAAe;;IAAvB,EAAE;;0BACE,gBAAgB;;;;8BACX,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;;;IAU5B,MAAM;YAAN,MAAM;;AAEC,WAFP,MAAM,CAEE,MAAM,EAAE,OAAO,EAAE;0BAFzB,MAAM;;AAGR,mCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;GACxB;;;;;;;;;;;;AAJG,QAAM,WAeV,QAAQ,GAAA,oBAAwC;QAAvC,GAAG,yDAAC,QAAQ;QAAE,KAAK,yDAAC,EAAE;QAAE,UAAU,yDAAC,EAAE;;AAC5C,SAAK,GAAG,0BAAO;AACb,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,EAAE,KAAK,CAAC,CAAC;;AAEV,QAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,8BAAI,IAAI,gDAA8C,GAAG,qDAAkD,CAAC;;;AAG5G,WAAK,GAAG,0BAAO;AACb,gBAAQ,EAAE,CAAC;OACZ,EAAE,KAAK,CAAC,CAAC;;;AAGV,gBAAU,GAAG,0BAAO;AAClB,YAAI,EAAE,QAAQ;OACf,EAAE,UAAU,CAAC,CAAC;KAChB;;;AAGD,cAAU,GAAG,0BAAO;AAClB,UAAI,EAAE,QAAQ;AACd,iBAAW,EAAE,QAAQ;KACtB,EAAE,UAAU,CAAC,CAAC;;AAEf,QAAI,EAAE,GAAG,uBAAU,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;;AAEzE,QAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;;AAE7B,WAAO,EAAE,CAAC;GACX;;;;;;;;;;;;AA7CG,QAAM,WAwDV,QAAQ,GAAA,kBAAC,KAAK,EAAc;QAAZ,OAAO,yDAAC,EAAE;;AACxB,QAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtC,4BAAI,IAAI,kEAAgE,SAAS,2DAAwD,CAAC;;;AAG1I,WAAO,uBAAU,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;GAChE;;;;;;;;AA9DG,QAAM,WAqEV,cAAc,GAAA,wBAAC,KAAK,EAAE;;AAEpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE,EAC7C,MAAM;AACL,oCAAM,cAAc,KAAA,OAAC,KAAK,CAAC,CAAC;KAC7B;GACF;;SA3EG,MAAM;;;AA+EZ,uBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;;;;;;;;;;yBChGC,aAAa;;;;0BACd,gBAAgB;;IAAzB,GAAG;;6BACS,mBAAmB;;IAA/B,MAAM;;yBACE,eAAe;;IAAvB,EAAE;;0BACE,gBAAgB;;;;8BACX,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;;;IAU5B,kBAAkB;YAAlB,kBAAkB;;AAEX,WAFP,kBAAkB,CAEV,MAAM,EAAE,OAAO,EAAE;0BAFzB,kBAAkB;;AAGpB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,QAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;GAClC;;;;;;;;;;;;AAXG,oBAAkB,WAsBtB,QAAQ,GAAA,oBAAqC;QAApC,GAAG,yDAAC,KAAK;QAAE,KAAK,yDAAC,EAAE;QAAE,UAAU,yDAAC,EAAE;;AACzC,SAAK,GAAG,0BAAO;AACb,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;AAC/B,cAAQ,EAAE,CAAC;KACZ,EAAE,KAAK,CAAC,CAAC;;AAEV,QAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,8BAAI,KAAK,4DAA0D,GAAG,8CAA2C,CAAC;KACnH;;;AAGD,cAAU,GAAG,0BAAO;AAClB,UAAI,EAAE,QAAQ;AACd,iBAAW,EAAE,QAAQ;KACtB,EAAE,UAAU,CAAC,CAAC;;AAEf,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;;AAEhD,QAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;;AAE7B,WAAO,EAAE,CAAC;GACX;;;;;;;;;;AA3CG,oBAAkB,WAoDtB,mBAAmB,GAAA,6BAAC,EAAE,EAAE;AACtB,QAAI,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzC,eAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;;AAEH,QAAI,EAAE,EAAE;AACN,QAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACrC;;AAED,QAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;;AAExC,WAAO,IAAI,CAAC,cAAc,CAAC;GAC5B;;;;;;;;;;;AAhEG,oBAAkB,WA0EtB,WAAW,GAAA,qBAAC,IAAI,EAAgB;QAAd,EAAE,yDAAC,IAAI,CAAC,EAAE,EAAE;;AAC5B,QAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;;AAEnD,QAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAE1C,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAI,CAAC,cAAc,CAAC,SAAS,GAAG,aAAa,CAAC;AAC9C,MAAE,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;;AAExC,WAAO,IAAI,CAAC;GACb;;;;;;;;;AApFG,oBAAkB,WA4FtB,aAAa,GAAA,yBAAG;AACd,uCAAiC,qBAAM,aAAa,KAAA,MAAE,CAAG;GAC1D;;;;;;;;;;;AA9FG,oBAAkB,WAwGtB,QAAQ,GAAA,kBAAC,KAAK,EAAc;QAAZ,OAAO,yDAAC,EAAE;;;;;;;;;;AASxB,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE,OAAO,CAAC,CAAC;GACvC;;;;;;;;;AAlHG,oBAAkB,WA0HtB,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACjC,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAChD,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA9HG,oBAAkB,WAsItB,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,WAAO,IAAI,CAAC;GACb;;;;;;;;AA1IG,oBAAkB,WAiJtB,WAAW,GAAA,uBAAG,EAAE;;;;;;;;AAjJZ,oBAAkB,WAwJtB,WAAW,GAAA,uBAAG;AACZ,UAAM,CAAC,EAAE,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GACpE;;;;;;;;AA1JG,oBAAkB,WAiKtB,cAAc,GAAA,wBAAC,KAAK,EAAE;;AAEpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AAC5C,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACzB,MAAM,IAAI,qBAAM,cAAc,EAAE;AAC/B,2BAAM,cAAc,KAAA,OAAC,KAAK,CAAC,CAAC;KAC7B;GACF;;;;;;;;AAzKG,oBAAkB,WAgLtB,UAAU,GAAA,sBAAG;AACX,UAAM,CAAC,GAAG,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GACrE;;SAlLG,kBAAkB;;;AAqLxB,uBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;sBCzMd,UAAU;;;;yBACP,aAAa;;;;;;;;;;;;IAS7B,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAE;0BAFzB,WAAW;;AAGb,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;GAC5E;;AALG,aAAW,WAOf,aAAa,GAAA,yBAAG;AACd,iCAA2B,kBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;AATG,aAAW,WAWf,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;GAC/C;;SAbG,WAAW;;;AAgBjB,uBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;;4BCrBP,eAAe;;;;0BACb,gBAAgB;;IAAzB,GAAG;;yBACK,eAAe;;IAAvB,EAAE;;2BACQ,iBAAiB;;IAA3B,IAAI;;6BACQ,mBAAmB;;IAA/B,MAAM;;0BACF,gBAAgB;;;;kCACR,0BAA0B;;;;4BAC/B,eAAe;;;;mCACT,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+B7C,SAAS;AAEF,WAFP,SAAS,CAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;0BAFhC,SAAS;;;AAKX,QAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACxB,UAAI,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;KAC9B,MAAM;AACL,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC;OACvB;;;AAGD,QAAI,CAAC,QAAQ,GAAG,iCAAa,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;;AAGhD,WAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,iCAAa,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;;AAG/D,QAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,IAAK,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,AAAC,CAAC;;;AAGvD,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEb,UAAI,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,WAAW,CAAC;;AAE3D,UAAI,CAAC,GAAG,GAAM,EAAE,mBAAc,IAAI,CAAC,OAAO,EAAE,AAAE,CAAC;KAChD;;AAED,QAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;;;AAGlC,QAAI,OAAO,CAAC,EAAE,EAAE;AACd,UAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;KACvB,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;AACrC,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;KAC5B;;AAED,QAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;;AAG1B,QAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE;AAClC,UAAI,CAAC,YAAY,EAAE,CAAC;KACrB;;AAED,QAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;;;AAIlB,QAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE;AACzC,UAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;GACF;;;;;;;;AArDG,WAAS,WA4Db,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAGlD,QAAI,IAAI,CAAC,SAAS,EAAE;AAClB,WAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,YAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AAC7B,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7B;OACF;KACF;;;AAGD,QAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;;AAG5B,QAAI,CAAC,GAAG,EAAE,CAAC;;;AAGX,QAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACvB,UAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3C;;AAED,OAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC;GACjB;;;;;;;;;AAvFG,WAAS,WA+Fb,MAAM,GAAA,kBAAG;AACP,WAAO,IAAI,CAAC,OAAO,CAAC;GACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjGG,WAAS,WA0Ib,OAAO,GAAA,iBAAC,GAAG,EAAE;AACX,4BAAI,IAAI,CAAC,gFAAgF,CAAC,CAAC;;AAE3F,QAAI,CAAC,GAAG,EAAE;AACR,aAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;;AAED,QAAI,CAAC,QAAQ,GAAG,iCAAa,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACjD,WAAO,IAAI,CAAC,QAAQ,CAAC;GACtB;;;;;;;;;;;;AAnJG,WAAS,WA8Jb,EAAE,GAAA,cAAG;AACH,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;;;;;AAhKG,WAAS,WA2Kb,QAAQ,GAAA,kBAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE;AACxC,WAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;GACtD;;AA7KG,WAAS,WA+Kb,QAAQ,GAAA,kBAAC,MAAM,EAAE;AACf,QAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5D,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;;AAEnE,QAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvB,aAAO,MAAM,CAAC;KACf;;AAED,QAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;;AAE/B,QAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChC,aAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;KACzB;;AAED,QAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;;AAEzC,QAAI,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACtC,aAAO,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;;AAED,WAAO,MAAM,CAAC;GACf;;;;;;;;;;AArMG,WAAS,WA8Mb,SAAS,GAAA,qBAAG;AACV,WAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC;GACpC;;;;;;;;;;;;AAhNG,WAAS,WA2Nb,EAAE,GAAA,cAAG;AACH,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;;;;;AA7NG,WAAS,WAwOb,IAAI,GAAA,gBAAG;AACL,WAAO,IAAI,CAAC,KAAK,CAAC;GACnB;;;;;;;;;;;;AA1OG,WAAS,WAqPb,QAAQ,GAAA,oBAAG;AACT,WAAO,IAAI,CAAC,SAAS,CAAC;GACvB;;;;;;;;;AAvPG,WAAS,WA+Pb,YAAY,GAAA,sBAAC,EAAE,EAAE;AACf,WAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;GAC7B;;;;;;;;;AAjQG,WAAS,WAyQb,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,WAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;GACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA3QG,WAAS,WAySb,QAAQ,GAAA,kBAAC,KAAK,EAA2C;QAAzC,OAAO,yDAAC,EAAE;QAAE,KAAK,yDAAC,IAAI,CAAC,SAAS,CAAC,MAAM;;AACrD,QAAI,SAAS,YAAA,CAAC;AACd,QAAI,aAAa,YAAA,CAAC;;;AAGlB,QAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,mBAAa,GAAG,KAAK,CAAC;;;AAGtB,UAAI,CAAC,OAAO,EAAE;AACZ,eAAO,GAAG,EAAE,CAAC;OACd;;;AAGD,UAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gCAAI,IAAI,CAAC,mKAAmK,CAAC,CAAC;AAC9K,eAAO,GAAG,EAAE,CAAC;OACd;;;;AAID,UAAI,kBAAkB,GAAG,OAAO,CAAC,cAAc,IAAI,gCAAY,aAAa,CAAC,CAAC;;;AAG9E,aAAO,CAAC,IAAI,GAAG,aAAa,CAAC;;;;AAI7B,UAAI,cAAc,GAAG,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;;AAEhE,UAAI,CAAC,cAAc,EAAE;AACnB,cAAM,IAAI,KAAK,gBAAc,kBAAkB,qBAAkB,CAAC;OACnE;;;;;;AAMD,UAAI,OAAO,cAAc,KAAK,UAAU,EAAE;AACxC,eAAO,IAAI,CAAC;OACb;;AAED,eAAS,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;;;KAG/D,MAAM;AACL,iBAAS,GAAG,KAAK,CAAC;OACnB;;AAED,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;;AAE3C,QAAI,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,EAAE;AACtC,UAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;KAC9C;;;;AAID,iBAAa,GAAG,aAAa,IAAK,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,AAAC,CAAC;;AAEtE,QAAI,aAAa,EAAE;AACjB,UAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjD;;;;AAID,QAAI,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE;AACxD,UAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;AAC3C,UAAI,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACxC,UAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;KACxD;;;AAGD,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;AAlXG,WAAS,WA2Xb,WAAW,GAAA,qBAAC,SAAS,EAAE;AACrB,QAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,eAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC;;AAED,QAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjC,aAAO;KACR;;AAED,QAAI,UAAU,GAAG,KAAK,CAAC;;AAEvB,SAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,UAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACnC,kBAAU,GAAG,IAAI,CAAC;AAClB,YAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,cAAM;OACP;KACF;;AAED,QAAI,CAAC,UAAU,EAAE;AACf,aAAO;KACR;;AAED,QAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AACxC,QAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;;AAE9C,QAAI,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC;;AAE5B,QAAI,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,EAAE,EAAE;AACpD,UAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;KAC9C;GACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1ZG,WAAS,WA0cb,YAAY,GAAA,wBAAG;;;AACb,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAEtC,QAAI,QAAQ,EAAE;;;AAEZ,YAAI,aAAa,GAAG,MAAK,QAAQ,CAAC;;AAElC,YAAI,SAAS,GAAG,SAAZ,SAAS,CAAI,KAAK,EAAK;AACzB,cAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,cAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;;;;;AAKtB,cAAI,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AACrC,gBAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;WAC5B;;;;AAID,cAAI,IAAI,KAAK,KAAK,EAAE;AAClB,mBAAO;WACR;;;;AAID,cAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAI,GAAG,EAAE,CAAC;WACX;;;;AAID,cAAI,CAAC,aAAa,GAAG,MAAK,QAAQ,CAAC,aAAa,CAAC;;;;;;AAMjD,cAAI,QAAQ,GAAG,MAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,cAAI,QAAQ,EAAE;AACZ,kBAAK,IAAI,CAAC,GAAG,QAAQ,CAAC;WACvB;SACF,CAAC;;;AAGF,YAAI,eAAe,YAAA,CAAC;AACpB,YAAI,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;AAE1C,YAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,yBAAe,GAAG,QAAQ,CAAC;SAC5B,MAAM;AACL,yBAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;;AAED,uBAAe;;;SAGd,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAK,QAAQ,CAAC,CACzB,MAAM,CAAC,UAAS,KAAK,EAAE;AACtB,iBAAO,CAAC,eAAe,CAAC,IAAI,CAAC,UAAS,MAAM,EAAE;AAC5C,gBAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,qBAAO,KAAK,KAAK,MAAM,CAAC;aACzB,MAAM;AACL,qBAAO,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC;aAC9B;WACF,CAAC,CAAC;SACJ,CAAC,CAAC,CACV,GAAG,CAAC,UAAC,KAAK,EAAK;AACd,cAAI,IAAI,YAAA;cAAE,IAAI,YAAA,CAAC;;AAEf,cAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAI,GAAG,KAAK,CAAC;AACb,gBAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;WACpD,MAAM;AACL,gBAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAClB,gBAAI,GAAG,KAAK,CAAC;WACd;;AAED,iBAAO,EAAC,IAAI,EAAJ,IAAI,EAAE,IAAI,EAAJ,IAAI,EAAC,CAAC;SACrB,CAAC,CACD,MAAM,CAAC,UAAC,KAAK,EAAK;;;;AAIjB,cAAI,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IACzB,gCAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,iBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B,CAAC,CACD,OAAO,CAAC,SAAS,CAAC,CAAC;;KACrB;GACF;;;;;;;;;AApiBG,WAAS,WA4iBb,aAAa,GAAA,yBAAG;;;AAGd,WAAO,EAAE,CAAC;GACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAhjBG,WAAS,WAilBb,EAAE,GAAA,YAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;;;AACvB,QAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrD,YAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;;;KAGnD,MAAM;;AACL,cAAM,MAAM,GAAG,KAAK,CAAC;AACrB,cAAM,IAAI,GAAG,MAAM,CAAC;AACpB,cAAM,EAAE,GAAG,EAAE,CAAC,IAAI,SAAO,KAAK,CAAC,CAAC;;;AAGhC,cAAM,eAAe,GAAG,SAAlB,eAAe;mBAAS,OAAK,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;WAAA,CAAC;;;;AAIzD,yBAAe,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AAC/B,iBAAK,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;;;;;AAKpC,cAAM,YAAY,GAAG,SAAf,YAAY;mBAAS,OAAK,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;WAAA,CAAC;;;AAGhE,sBAAY,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;;AAG5B,cAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,kBAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5B,kBAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;;;;WAI5C,MAAM,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,UAAU,EAAE;;AAEzC,oBAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,oBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;aACpC;;OACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;;;;;;;;AA3nBG,WAAS,WAkpBb,GAAG,GAAA,aAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACxB,QAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,YAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KACrC,MAAM;AACL,UAAM,MAAM,GAAG,KAAK,CAAC;AACrB,UAAM,IAAI,GAAG,MAAM,CAAC;;AAEpB,UAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;;;AAIhC,UAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;;AAExB,UAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,cAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;;AAE7B,cAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;OACnC,MAAM;AACL,cAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrB,cAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;OAC3B;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;;;;;AA3qBG,WAAS,WA+rBb,GAAG,GAAA,aAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;;;;AACxB,QAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrD,YAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD,MAAM;;AACL,YAAM,MAAM,GAAG,KAAK,CAAC;AACrB,YAAM,IAAI,GAAG,MAAM,CAAC;AACpB,YAAM,EAAE,GAAG,EAAE,CAAC,IAAI,SAAO,KAAK,CAAC,CAAC;;AAEhC,YAAM,OAAO,GAAG,SAAV,OAAO,GAAS;AACpB,iBAAK,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,YAAE,CAAC,KAAK,CAAC,IAAI,aAAY,CAAC;SAC3B,CAAC;;;AAGF,eAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEvB,eAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;;KAChC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;AAntBG,WAAS,WAmuBb,OAAO,GAAA,iBAAC,KAAK,EAAE,IAAI,EAAE;AACnB,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AAtuBG,WAAS,WAkvBb,KAAK,GAAA,eAAC,EAAE,EAAc;QAAZ,IAAI,yDAAC,KAAK;;AAClB,QAAI,EAAE,EAAE;AACN,UAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAI,IAAI,EAAE;AACR,YAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACf,MAAM;;AAEL,cAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACxB;OACF,MAAM;AACL,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AAC1C,YAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC3B;KACF;AACD,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAjwBG,WAAS,WAywBb,YAAY,GAAA,wBAAG;AACb,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;;AAGrB,QAAI,CAAC,UAAU,CAAC,YAAU;AACxB,UAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;;;AAGlC,UAAI,CAAC,WAAW,GAAG,EAAE,CAAC;;AAEtB,UAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,kBAAU,CAAC,OAAO,CAAC,UAAS,EAAE,EAAC;AAC7B,YAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACf,EAAE,IAAI,CAAC,CAAC;OACV;;;AAGD,UAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,EAAE,CAAC,CAAC,CAAC;GACP;;;;;;;;;;;;;;;;;;;AA5xBG,WAAS,WA8yBb,CAAC,GAAA,WAAC,QAAQ,EAAE,OAAO,EAAE;AACnB,WAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;GACrD;;;;;;;;;;;;;;;;;;;AAhzBG,WAAS,WAk0Bb,EAAE,GAAA,YAAC,QAAQ,EAAE,OAAO,EAAE;AACpB,WAAO,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;GACtD;;;;;;;;;;AAp0BG,WAAS,WA60Bb,QAAQ,GAAA,kBAAC,YAAY,EAAE;AACrB,WAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;GAC/C;;;;;;;;;;AA/0BG,WAAS,WAw1Bb,QAAQ,GAAA,kBAAC,UAAU,EAAE;AACnB,OAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACrC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AA31BG,WAAS,WAo2Bb,WAAW,GAAA,qBAAC,aAAa,EAAE;AACzB,OAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AAC3C,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;AAv2BG,WAAS,WAq3Bb,WAAW,GAAA,qBAAC,aAAa,EAAE,SAAS,EAAE;AACpC,OAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACtD,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAx3BG,WAAS,WAg4Bb,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAn4BG,WAAS,WA24Bb,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AA94BG,WAAS,WAw5Bb,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAClC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AA35BG,WAAS,WAq6Bb,aAAa,GAAA,yBAAG;AACd,QAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACrC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;AAx6BG,WAAS,WAu7Bb,KAAK,GAAA,eAAC,GAAG,EAAE,aAAa,EAAE;AACxB,WAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;GACpD;;;;;;;;;;;;;;;;AAz7BG,WAAS,WAw8Bb,MAAM,GAAA,gBAAC,GAAG,EAAE,aAAa,EAAE;AACzB,WAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;GACrD;;;;;;;;;;;AA18BG,WAAS,WAo9Bb,UAAU,GAAA,oBAAC,KAAK,EAAE,MAAM,EAAE;;AAExB,WAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;GAC/C;;;;;;;;;;;;;;;;;;;;AAv9BG,WAAS,WA0+Bb,SAAS,GAAA,mBAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AAC3C,QAAI,GAAG,KAAK,SAAS,EAAE;;AAErB,UAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE;AAC/B,WAAG,GAAG,CAAC,CAAC;OACT;;;AAGD,UAAI,CAAC,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACrE,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;OACrC,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;AACzB,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;OACpC,MAAM;AACL,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;OAC5C;;;AAGD,UAAI,CAAC,aAAa,EAAE;AAClB,YAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;OACxB;;;AAGD,aAAO,IAAI,CAAC;KACb;;;;AAID,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,aAAO,CAAC,CAAC;KACV;;;AAGD,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACxC,QAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAEhC,QAAI,OAAO,KAAK,CAAC,CAAC,EAAE;;AAElB,aAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;KAC5C;;;;;AAKD,WAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,gCAAY,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;GACtE;;;;;;;;;AAthCG,WAAS,WA8hCb,gBAAgB,GAAA,0BAAC,aAAa,EAAE;AAC9B,QAAI,qBAAqB,GAAG,CAAC,CAAC;;AAE9B,QAAI,aAAa,KAAK,OAAO,IAAI,aAAa,KAAK,QAAQ,EAAE;AAC3D,YAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;;AAED,QAAI,OAAO,0BAAO,gBAAgB,KAAK,UAAU,EAAE;AACjD,UAAM,aAAa,GAAG,0BAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxD,2BAAqB,GAAG,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;KACvG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;AAGhC,UAAM,IAAI,cAAY,gCAAY,aAAa,CAAC,AAAE,CAAC;AACnD,2BAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACxC;;;AAGD,yBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC1D,WAAO,qBAAqB,CAAC;GAC9B;;;;;;;;AAljCG,WAAS,WAyjCb,iBAAiB,GAAA,6BAAG;AAClB,WAAO;AACL,WAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACrC,YAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;KACxC,CAAC;GACH;;;;;;;;AA9jCG,WAAS,WAqkCb,YAAY,GAAA,wBAAG;AACb,WAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;GACvC;;;;;;;;AAvkCG,WAAS,WA8kCb,aAAa,GAAA,yBAAG;AACd,WAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;GACxC;;;;;;;;;;;;;AAhlCG,WAAS,WA4lCb,aAAa,GAAA,yBAAG;;AAEd,QAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAI,UAAU,GAAG,IAAI,CAAC;;;;AAItB,QAAM,oBAAoB,GAAG,EAAE,CAAC;;;AAGhC,QAAM,kBAAkB,GAAG,GAAG,CAAC;;AAE/B,QAAI,UAAU,YAAA,CAAC;;AAEf,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,UAAS,KAAK,EAAE;;AAEpC,UAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE9B,kBAAU,GAAG,0BAAO,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1C,kBAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;;AAElC,kBAAU,GAAG,IAAI,CAAC;OACnB;KACF,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE;;AAEnC,UAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,kBAAU,GAAG,KAAK,CAAC;OACpB,MAAM,IAAI,UAAU,EAAE;;;AAGrB,YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AACxD,YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AACxD,YAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAI,KAAK,GAAG,KAAK,GAAI,KAAK,CAAC,CAAC;;AAEjE,YAAI,aAAa,GAAG,oBAAoB,EAAE;AACxC,oBAAU,GAAG,KAAK,CAAC;SACpB;OACF;KACF,CAAC,CAAC;;AAEH,QAAM,KAAK,GAAG,SAAR,KAAK,GAAc;AACvB,gBAAU,GAAG,KAAK,CAAC;KACpB,CAAC;;;AAGF,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC7B,QAAI,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;;;;AAI9B,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAS,KAAK,EAAE;AAClC,gBAAU,GAAG,IAAI,CAAC;;AAElB,UAAI,UAAU,KAAK,IAAI,EAAE;;AAEvB,YAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;;;AAGpD,YAAI,SAAS,GAAG,kBAAkB,EAAE;;AAElC,eAAK,CAAC,cAAc,EAAE,CAAC;AACvB,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;;;SAIrB;OACF;KACF,CAAC,CAAC;GACJ;;;;;;;;;;;;;;;;;;;;;;;;AAnqCG,WAAS,WA0rCb,mBAAmB,GAAA,+BAAG;;AAEpB,QAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE;AACvD,aAAO;KACR;;;AAGD,QAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,CAAC;;AAExE,QAAI,YAAY,YAAA,CAAC;;AAEjB,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,YAAW;AAC/B,YAAM,EAAE,CAAC;;;;AAIT,UAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;;AAEjC,kBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9C,CAAC,CAAC;;AAEH,QAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,KAAK,EAAE;AAC/B,YAAM,EAAE,CAAC;;AAET,UAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KAClC,CAAC;;AAEF,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7B,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9B,QAAI,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;GAClC;;;;;;;;;;;AAxtCG,WAAS,WAkuCb,UAAU,GAAA,oBAAC,EAAE,EAAE,OAAO,EAAE;AACtB,MAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;;AAGvB,QAAI,SAAS,GAAG,0BAAO,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;AAE/C,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc;AAC3B,UAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KAC9B,CAAC;;AAEF,aAAS,CAAC,IAAI,oBAAkB,SAAS,AAAE,CAAC;;AAE5C,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE9B,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;AAjvCG,WAAS,WA0vCb,YAAY,GAAA,sBAAC,SAAS,EAAE;AACtB,8BAAO,YAAY,CAAC,SAAS,CAAC,CAAC;;AAE/B,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc,EAAE,CAAC;;AAEhC,aAAS,CAAC,IAAI,oBAAkB,SAAS,AAAE,CAAC;;AAE5C,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE/B,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;;AApwCG,WAAS,WA8wCb,WAAW,GAAA,qBAAC,EAAE,EAAE,QAAQ,EAAE;AACxB,MAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;AAEvB,QAAI,UAAU,GAAG,0BAAO,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;;AAElD,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc;AAC3B,UAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;KAChC,CAAC;;AAEF,aAAS,CAAC,IAAI,qBAAmB,UAAU,AAAE,CAAC;;AAE9C,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE9B,WAAO,UAAU,CAAC;GACnB;;;;;;;;;;AA5xCG,WAAS,WAqyCb,aAAa,GAAA,uBAAC,UAAU,EAAE;AACxB,8BAAO,aAAa,CAAC,UAAU,CAAC,CAAC;;AAEjC,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc,EAAE,CAAC;;AAEhC,aAAS,CAAC,IAAI,qBAAmB,UAAU,AAAE,CAAC;;AAE9C,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE/B,WAAO,UAAU,CAAC;GACnB;;;;;;;;;;;AA/yCG,WAAS,CAyzCN,iBAAiB,GAAA,2BAAC,IAAI,EAAE,IAAI,EAAE;AACnC,QAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1B,eAAS,CAAC,WAAW,GAAG,EAAE,CAAC;KAC5B;;AAED,aAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACnC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAh0CG,WAAS,CA00CN,YAAY,GAAA,sBAAC,IAAI,EAAE;AACxB,QAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AACxD,aAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;;AAED,QAAI,6BAAU,0BAAO,OAAO,IAAI,0BAAO,OAAO,CAAC,IAAI,CAAC,EAAE;AACpD,8BAAI,IAAI,UAAQ,IAAI,8HAA2H,CAAC;AAChJ,aAAO,0BAAO,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7B;GACF;;;;;;;;;;;;AAn1CG,WAAS,CA81CN,MAAM,GAAA,gBAAC,KAAK,EAAE;AACnB,SAAK,GAAG,KAAK,IAAI,EAAE,CAAC;;AAEpB,4BAAI,IAAI,CAAC,qFAAqF,CAAC,CAAC;;;;;AAKhG,QAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,YAAW,EAAE,CAAC;;;;;;;;;;AAUnG,QAAI,MAAM,GAAG,SAAT,MAAM,GAAc;AACtB,UAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC7B,CAAC;;;AAGF,UAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAGjD,UAAM,CAAC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;;;AAGtC,UAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;;;AAGjC,SAAK,IAAI,KAAI,IAAI,KAAK,EAAE;AACtB,UAAI,KAAK,CAAC,cAAc,CAAC,KAAI,CAAC,EAAE;AAC9B,cAAM,CAAC,SAAS,CAAC,KAAI,CAAC,GAAG,KAAK,CAAC,KAAI,CAAC,CAAC;OACtC;KACF;;AAED,WAAO,MAAM,CAAC;GACf;;SAr4CG,SAAS;;;AAw4Cf,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;qBACrC,SAAS;;;;;;;;;;;;;;;;;;;6BCn7CA,oBAAoB;;;;2BACtB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;oCACiB,4BAA4B;;;;;;;;;;;;;IAUrD,gBAAgB;YAAhB,gBAAgB;;AACT,WADP,gBAAgB,CACR,MAAM,EAAgB;QAAd,OAAO,yDAAG,EAAE;;0BAD5B,gBAAgB;;AAElB,WAAO,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;;AAE5D,4BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;GACnD;;;;;;;;;AAPG,kBAAgB,WAepB,aAAa,GAAA,yBAAG;AACd,iCAA2B,uBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;;;;;;;;AAjBG,kBAAgB,WAyBpB,WAAW,GAAA,uBAAa;QAAZ,KAAK,yDAAG,EAAE;;AACpB,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;AAEpE,QAAI,CAAC,MAAM,EAAE;AACX,aAAO,KAAK,CAAC;KACd;;AAED,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEtB,WAAK,CAAC,IAAI,CAAC,sCAAuB,IAAI,CAAC,OAAO,EAAE;;AAE9C,oBAAY,EAAE,IAAI;AAClB,eAAO,EAAE,KAAK;OACf,CAAC,CAAC,CAAC;KACL;;AAED,WAAO,KAAK,CAAC;GACd;;SA3CG,gBAAgB;;;AA8CtB,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;8BC5DV,yBAAyB;;;;2BACxB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;;;;;;;;IAUR,kBAAkB;YAAlB,kBAAkB;;AACX,WADP,kBAAkB,CACV,MAAM,EAAE,OAAO,EAAE;;;0BADzB,kBAAkB;;AAEpB,QAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC1B,QAAI,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;;;AAGlC,WAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;AAC3D,WAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;;AAEjC,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;AAEnB,QAAI,MAAM,EAAE;;AACV,YAAI,aAAa,GAAG,EAAE,CAAC,IAAI,QAAO,MAAK,kBAAkB,CAAC,CAAC;;AAE3D,cAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjD,cAAK,EAAE,CAAC,SAAS,EAAE,YAAM;AACvB,gBAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrD,CAAC,CAAC;;KACJ;GACF;;;;;;;;AArBG,oBAAkB,WA4BtB,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;AAExC,wBAAM,WAAW,KAAA,OAAC,KAAK,CAAC,CAAC;;AAEzB,QAAI,CAAC,MAAM,EAAE,OAAO;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEtB,UAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACxB,aAAK,CAAC,OAAO,GAAG,IAAI,CAAC;OACtB;KACF;GACF;;;;;;;;AA1CG,oBAAkB,WAiDtB,kBAAkB,GAAA,4BAAC,KAAK,EAAE;AACxB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;GACnC;;SAnDG,kBAAkB;;;AAsDxB,yBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;;;;2BCnEX,iBAAiB;;;;;;4BAGhB,kBAAkB;;;;gDACV,yCAAyC;;;;6CAC5C,qCAAqC;;;;yCACzC,iCAAiC;;;;kDACxB,2CAA2C;;;;6BACpD,mBAAmB;;;;gDACf,wCAAwC;;;;kCACvC,wBAAwB;;;;4CAC3B,oCAAoC;;;;kCACjC,yBAAyB;;;;4BAC/B,kBAAkB;;;;iDACd,0CAA0C;;;;qDACtC,8CAA8C;;;;kDACjD,2CAA2C;;;;iDAC5C,0CAA0C;;;;oDACxC,8CAA8C;;;;wDACxC,mDAAmD;;;;mDACtD,4CAA4C;;;;;;;;;;;IAQtE,UAAU;YAAV,UAAU;;WAAV,UAAU;0BAAV,UAAU;;;;;;;;;;;;AAAV,YAAU,WAQd,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,iBAAiB;AAC5B,SAAG,EAAE,KAAK;KACX,EAAE;AACD,YAAM,EAAE,OAAO;KAChB,CAAC,CAAC;GACJ;;SAfG,UAAU;;;AAkBhB,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC9B,WAAS,EAAE,MAAM;AACjB,UAAQ,EAAE,CACR,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,CACnB;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;wBCrEN,cAAc;;;;2BACX,iBAAiB;;;;;;;;;;;IAQjC,gBAAgB;YAAhB,gBAAgB;;WAAhB,gBAAgB;0BAAhB,gBAAgB;;;;;;;;;;;;AAAhB,kBAAgB,WAQpB,aAAa,GAAA,yBAAG;AACd,uCAAiC,kBAAM,aAAa,KAAA,MAAE,CAAG;GAC1D;;;;;;;;AAVG,kBAAgB,WAiBpB,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE;AAChC,UAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;AACjC,UAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;KACpC,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;AAC9B,UAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KAChC;GACF;;SAzBG,gBAAgB;;;AA6BtB,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;;AAEvD,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;yBCzCT,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;;;;;;;;;IAST,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAE;0BAFzB,WAAW;;AAGb,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GAC9D;;;;;;;;;AAPG,aAAW,WAef,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,8BAA8B;KAC1C,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,kBAAkB;AAC7B,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,AAAE;KAC3G,EAAE;AACD,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;AA7BG,aAAW,WA+Bf,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE;AACzC,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;SArCG,WAAW;;;AAyCjB,uBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;sBCpDP,WAAW;;;;yBACR,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;;;;;;;;;;IAUT,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAE,OAAO,EAAE;0BAFzB,UAAU;;AAGZ,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAG7C,QAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;;AAED,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAW;AACtC,UAAI,CAAC,MAAM,EAAE,CAAC;;AAEd,UAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnD,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;GACJ;;;;;;;;;AArBG,YAAU,WA6Bd,aAAa,GAAA,yBAAG;AACd,iCAA2B,kBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;;;;;;;AA/BG,YAAU,WAsCd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,KAAK,CAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,CAAE,CAAC;GAC3D;;;;;;;;AAxCG,YAAU,WA+Cd,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC3B,KAAK,GAAG,CAAC,CAAC;;AAEd,QAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACrC,WAAK,GAAG,CAAC,CAAC;KACX,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE;AACrB,WAAK,GAAG,CAAC,CAAC;KACX,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE;AACrB,WAAK,GAAG,CAAC,CAAC;KACX;;;;;AAKD,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtD,QAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACjC,UAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC1B;;;AAGD,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,SAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,eAAa,CAAC,CAAG,CAAC;KAC7C;AACD,OAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAa,KAAK,CAAG,CAAC;GAC9C;;SAxEG,UAAU;;;AA4EhB,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAE3C,uBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;wBC3FN,cAAc;;;;2BACX,iBAAiB;;;;;;;;;;;;;IAUjC,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAE,OAAO,EAAC;0BAFxB,UAAU;;AAGZ,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;GAC5C;;;;;;;;;AAPG,YAAU,WAed,aAAa,GAAA,yBAAG;AACd,iCAA2B,kBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;;;;;;;AAjBG,YAAU,WAwBd,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACtB;GACF;;;;;;;;AA9BG,YAAU,WAqCd,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;GAC3B;;;;;;;;AAzCG,YAAU,WAgDd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,QAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;GAC1B;;SApDG,UAAU;;;AAwDhB,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAE3C,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;;;gCCtEF,2BAA2B;;;;0BACjC,oBAAoB;;;;sCACJ,8BAA8B;;;;2BACzC,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;;;;;;;;;;IAUT,sBAAsB;YAAtB,sBAAsB;;AAEf,WAFP,sBAAsB,CAEd,MAAM,EAAE,OAAO,EAAC;0BAFxB,sBAAsB;;AAGxB,2BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAI,CAAC,WAAW,EAAE,CAAC;;AAEnB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;GACjD;;;;;;;;;AAVG,wBAAsB,WAkB1B,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,sBAAM,QAAQ,KAAA,MAAE,CAAC;;AAE1B,QAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AAClC,eAAS,EAAE,yBAAyB;AACpC,eAAS,EAAE,GAAG;KACf,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9B,WAAO,EAAE,CAAC;GACX;;;;;;;;;AA7BG,wBAAsB,WAqC1B,aAAa,GAAA,yBAAG;AACd,kCAA4B,sBAAM,aAAa,KAAA,MAAE,CAAG;GACrD;;;;;;;;;AAvCG,wBAAsB,WA+C1B,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,GAAG,4BAAS,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,QAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;AAEjC,QAAI,KAAK,EAAE;AACT,WAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAI,CAAC,QAAQ,CACX,wCAAyB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAC,CAAC,CACnE,CAAC;OACH;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AA5DG,wBAAsB,WAmE1B,oBAAoB,GAAA,gCAAG;;AAErB,QAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;GACvE;;;;;;;;AAtEG,wBAAsB,WA6E1B,WAAW,GAAA,uBAAG;;AAEZ,QAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC;AAC/C,QAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;;AAGjC,QAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE;AAC1B,eAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,cAAM;OACP;KACF;AACD,QAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;GACrC;;;;;;;;;AA3FG,wBAAsB,WAmG1B,aAAa,GAAA,yBAAG;AACd,WAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,AAAC,CAAC;GACxH;;;;;;;;;;AArGG,wBAAsB,WA8G1B,qBAAqB,GAAA,iCAAG;AACtB,WAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IACrB,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAC3C,IAAI,CAAC,aAAa,EAAE,IACpB,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CACnC;GACF;;;;;;;;AApHG,wBAAsB,WA2H1B,gBAAgB,GAAA,4BAAG;AACjB,QAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,UAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KAChC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;GACF;;;;;;;;AAjIG,wBAAsB,WAwI1B,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,UAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC;KAC9D;GACF;;SA5IG,sBAAsB;;;AAgJ5B,sBAAsB,CAAC,SAAS,CAAC,YAAY,GAAG,eAAe,CAAC;;AAEhE,yBAAU,iBAAiB,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;qBAC/D,sBAAsB;;;;;;;;;;;;;;;;;8BCjKhB,yBAAyB;;;;2BACxB,oBAAoB;;;;;;;;;;;;;IAUpC,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;AAGtB,QAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAI,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;;;AAGjC,WAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AACzB,WAAO,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AACjC,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAC5C;;;;;;;;AAfG,sBAAoB,WAsBxB,WAAW,GAAA,uBAAG;AACZ,wBAAM,WAAW,KAAA,MAAE,CAAC;AACpB,QAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GACvC;;;;;;;;AAzBG,sBAAoB,WAgCxB,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;GAC3D;;SAlCG,oBAAoB;;;AAsC1B,oBAAoB,CAAC,SAAS,CAAC,aAAa,GAAG,QAAQ,CAAC;;AAExD,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;;;2BCpDb,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;;;;;;;;;;IAUT,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAC1C;;;;;;;;;AALG,iBAAe,WAanB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mBAAmB;AAC9B,eAAS,4CAA0C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAoB;KAC/F,CAAC,CAAC;GACJ;;;;;;;;AAlBG,iBAAe,WAyBnB,MAAM,GAAA,kBAAG;AACP,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;;;AAGjC,QAAI,UAAU,GAAG,SAAb,UAAU,CAAa,IAAI,EAAE,GAAG,EAAC;AACnC,UAAI,OAAO,GAAG,AAAC,IAAI,GAAG,GAAG,IAAK,CAAC,CAAC;AAChC,aAAO,AAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA,GAAI,GAAG,GAAI,GAAG,CAAC;KACnD,CAAC;;;AAGF,QAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;;;AAGzD,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,UAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,UAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,UAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAEvB,UAAI,CAAC,IAAI,EAAE;AACT,YAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC7C;;;AAGD,UAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACjD,UAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;KACzD;;;AAGD,SAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,UAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;KACrC;GACF;;SA3DG,eAAe;;;AA+DrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;4BC3EX,eAAe;;;;2BACZ,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;yBACK,mBAAmB;;IAA3B,EAAE;;iCACS,4BAA4B;;;;4CAC9B,iCAAiC;;;;;;;;;;;;;;IAWhD,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAE,OAAO,EAAE;;;0BAFzB,gBAAgB;;AAGlB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,OAAO,CAAC,aAAa,IACrB,OAAO,CAAC,aAAa,CAAC,UAAU,IAChC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,IAChD,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACvE,UAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC;KAC/F;;AAED,QAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,UAAI,CAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,kBAAkB,EAAC,CAAC,CAAC;AACpE,UAAI,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,UAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;KAC3C;;AAED,QAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAElB,UAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAM;AACvB,YAAK,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,0CAAS,EAAE,CAAC,IAAI,QAAO,MAAK,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACjH,CAAC,CAAC;GACJ;;;;;;;;;AAvBG,kBAAgB,WA+BpB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;GACJ;;AAnCG,kBAAgB,WAqCpB,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AACvD,QAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;;AAE3E,QAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;GAChC;;AA3CG,kBAAgB,WA6CpB,MAAM,GAAA,gBAAC,OAAO,EAAE,QAAQ,EAAE;AACxB,QAAI,IAAI,GAAG,+BAAW,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAExD,QAAI,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;AACvC,QAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;;AAElD,QAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,UAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpD,UAAI,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC;AAChD,UAAI,YAAY,GAAG,UAAU,CAAC,0BAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3E,UAAI,gBAAgB,GAAG,YAAY,GAAG,CAAC,CAAC;;AAExC,UAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,UAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,UAAO,gBAAgB,GAAG,UAAU,CAAA,OAAI,CAAC;KAClE;GACF;;AA5DG,kBAAgB,WA8DpB,iBAAiB,GAAA,2BAAC,KAAK,EAAE;AACvB,WAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;GAC9D;;;;;;;;;;;;;AAhEG,kBAAgB,WA4EpB,cAAc,GAAA,wBAAC,QAAQ,EAAE;AACvB,QAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,aAAO,QAAQ,CAAC;KACjB;;AAED,QAAI,WAAW,GAAG,UAAU,CAAC,0BAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAChF,QAAI,YAAY,GAAG,UAAU,CAAC,0BAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3E,QAAI,gBAAgB,GAAG,YAAY,GAAG,CAAC,CAAC;AACxC,QAAI,cAAc,GAAG,QAAQ,CAAC;;AAE9B,QAAI,QAAQ,GAAG,gBAAgB,EAAE;AAC/B,oBAAc,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC9C,MAAM,IAAI,QAAQ,GAAI,WAAW,GAAG,gBAAgB,AAAC,EAAE;AACtD,oBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC;KAC7D;;AAED,WAAO,cAAc,CAAC;GACvB;;SA7FG,gBAAgB;;;AAgGtB,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;2BCjHT,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;0BACO,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;;AAEjD,QAAI,OAAO,CAAC,aAAa,IACrB,OAAO,CAAC,aAAa,CAAC,UAAU,IAChC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,IAChD,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACvE,UAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC;KAC/F;;AAED,QAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,UAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;KAC3C;GACF;;;;;;;;;AAlBG,iBAAe,WA0BnB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kCAAkC;AAC7C,eAAS,4CAA0C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAoB;KACjG,CAAC,CAAC;GACJ;;AA/BG,iBAAe,WAiCnB,cAAc,GAAA,0BAAG;AACf,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;GACvF;;SApCG,eAAe;;;AAwCrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;2BCtDR,oBAAoB;;;;yBACtB,eAAe;;;;kCACN,yBAAyB;;;;;;;;;;;;;;IAWhD,eAAe;YAAf,eAAe;;WAAf,eAAe;0BAAf,eAAe;;;;;;;;;;;;AAAf,iBAAe,WAQnB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kCAAkC;KAC9C,CAAC,CAAC;GACJ;;SAZG,eAAe;;;AAerB,eAAe,CAAC,SAAS,CAAC,QAAQ,GAAG;AACnC,UAAQ,EAAE,CACR,SAAS,CACV;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;4BCnCX,eAAe;;;;8BACf,wBAAwB;;;;2BACrB,oBAAoB;;;;iCACd,wBAAwB;;;;iCACxB,wBAAwB;;;;oCACrB,2BAA2B;;;;yBACtC,mBAAmB;;IAA3B,EAAE;;iCACS,4BAA4B;;;;4BAChC,eAAe;;;;;;;;;;;;;IAU5B,OAAO;YAAP,OAAO;;AAEA,WAFP,OAAO,CAEC,MAAM,EAAE,OAAO,EAAC;0BAFxB,OAAO;;AAGT,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9C,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;;AAEjD,QAAI,OAAO,CAAC,aAAa,IACrB,OAAO,CAAC,aAAa,CAAC,UAAU,IAChC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,IAChD,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACvE,UAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC;KAC/F;;AAED,QAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,UAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;KAC/D;GACF;;;;;;;;;AAlBG,SAAO,WA0BX,QAAQ,GAAA,oBAAG;AACT,WAAO,kBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,qBAAqB;KACjC,EAAE;AACD,kBAAY,EAAE,cAAc;KAC7B,CAAC,CAAC;GACJ;;;;;;;;AAhCG,SAAO,WAuCX,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEpC,QAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,UAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACvD,UAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;;AAEnE,UAAI,WAAW,GAAG,UAAU,CAAC,0BAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAChF,UAAI,YAAY,GAAG,UAAU,CAAC,0BAAO,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9F,UAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;AACtD,kBAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAI,YAAY,GAAG,CAAC,AAAC,CAAC,GAAG,IAAI,CAAC;AAC5E,kBAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAC3D,kBAAY,CAAC,KAAK,SAAO,YAAY,GAAG,CAAC,OAAI,CAAC;KAC/C;GACF;;AArDG,SAAO,WAuDX,oBAAoB,GAAA,8BAAC,EAAE,EAAE;;AAEvB,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,MAAE,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,MAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;GAC9E;;;;;;;;;AA5DG,SAAO,WAoEX,UAAU,GAAA,sBAAG;AACX,QAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACnE,WAAO,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;GACnC;;;;;;;;AAvEG,SAAO,WA8EX,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,sBAAM,eAAe,KAAA,OAAC,KAAK,CAAC,CAAC;;AAE7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAE7B,QAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9C,QAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;GACtB;;;;;;;;AArFG,SAAO,WA4FX,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;;;AAGtE,QAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;AAAE,aAAO,GAAG,OAAO,GAAG,GAAG,CAAC;KAAE;;;AAGrE,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;GACnC;;;;;;;;AApGG,SAAO,WA2GX,aAAa,GAAA,uBAAC,KAAK,EAAE;AACnB,sBAAM,aAAa,KAAA,OAAC,KAAK,CAAC,CAAC;;AAE3B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAI,IAAI,CAAC,eAAe,EAAE;AACxB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;GACF;;;;;;;;AAlHG,SAAO,WAyHX,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;GAC1D;;;;;;;;AA3HG,SAAO,WAkIX,QAAQ,GAAA,oBAAG;AACT,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;GAC1D;;SApIG,OAAO;;;AAwIb,OAAO,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC3B,UAAQ,EAAE,CACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,CAClB;AACD,WAAS,EAAE,iBAAiB;CAC7B,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC;;AAE7C,yBAAU,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;qBACjC,OAAO;;;;;;;;;;;;;;;;;;;2BCtKA,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;0BACO,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,kBAAkB;YAAlB,kBAAkB;;AAEX,WAFP,kBAAkB,CAEV,MAAM,EAAE,OAAO,EAAC;0BAFxB,kBAAkB;;AAGpB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GAClD;;;;;;;;;AAPG,oBAAkB,WAetB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,yCAAyC;AACpD,eAAS,0FACgC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAoB;KACvF,CAAC,CAAC;;AAEH,QAAI,CAAC,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;;AAErD,WAAO,EAAE,CAAC;GACX;;AAzBG,oBAAkB,WA2BtB,cAAc,GAAA,0BAAG;AACf,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,aAAa,GAAG,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9D,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;AAC1D,QAAI,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;GACxC;;SAhCG,kBAAkB;;;AAoCxB,yBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;;;;wBClDd,aAAa;;;;2BACV,oBAAoB;;;;;;;;;;;IAQpC,mBAAmB;YAAnB,mBAAmB;;WAAnB,mBAAmB;0BAAnB,mBAAmB;;;;;;;;;;;;AAAnB,qBAAmB,WAQvB,aAAa,GAAA,yBAAG;AACd,0CAAoC,kBAAM,aAAa,KAAA,MAAE,CAAG;GAC7D;;;;;;;;;AAVG,qBAAmB,WAkBvB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,kBAAM,QAAQ,KAAA,OAAC;AACtB,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;;;;AAIH,MAAE,CAAC,SAAS,GAAG,QAAQ,CAAC;AACxB,WAAO,EAAE,CAAC;GACX;;SA3BG,mBAAmB;;;AA8BzB,yBAAU,iBAAiB,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;qBACzD,mBAAmB;;;;;;;;;;;;;;;;;2BCxCZ,oBAAoB;;;;;;;;;;;;IASpC,MAAM;YAAN,MAAM;;WAAN,MAAM;0BAAN,MAAM;;;;;;;;;;;;AAAN,QAAM,WAQV,aAAa,GAAA,yBAAG;AACd,2BAAqB,qBAAM,aAAa,KAAA,MAAE,CAAG;GAC9C;;;;;;;;;AAVG,QAAM,WAkBV,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;GACJ;;SAtBG,MAAM;;;AAyBZ,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;;qBAE/B,MAAM;;;;;;;;;;;;;;;;;mCCpCS,2BAA2B;;;;2BACnC,oBAAoB;;;;;;;;;;;;;IAUnC,uBAAuB;YAAvB,uBAAuB;;AAEjB,WAFN,uBAAuB,CAEhB,MAAM,EAAE,OAAO,EAAE;0BAFxB,uBAAuB;;AAG1B,WAAO,CAAC,OAAO,CAAC,GAAG;AACjB,YAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,cAAQ,EAAE,MAAM;AAChB,aAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW;AACtC,kBAAY,EAAE,KAAK;AACnB,eAAS,EAAE,KAAK;AAChB,UAAI,EAAE,UAAU;KACjB,CAAC;;;AAGF,WAAO,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;;AAE9B,kCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AACxC,QAAI,CAAC,WAAW,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;GACrE;;;;;;;;AAlBI,yBAAuB,WAyB5B,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,QAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;GACzD;;SA5BI,uBAAuB;;;AAgC9B,yBAAU,iBAAiB,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;qBACjE,uBAAuB;;;;;;;;;;;;;;;;;iCC5CV,wBAAwB;;;;2BAC9B,oBAAoB;;;;yCACN,iCAAiC;;;;;;;;;;;;;;IAW/D,cAAc;YAAd,cAAc;;AAEP,WAFP,cAAc,CAEN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,cAAc;;AAGhB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,eAAe,CAAC,CAAC;GACrD;;;;;;;;;AALG,gBAAc,WAalB,aAAa,GAAA,yBAAG;AACd,oCAA8B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACvD;;;;;;;;AAfG,gBAAc,WAsBlB,MAAM,GAAA,kBAAG;AACP,QAAI,SAAS,GAAG,CAAC,CAAC;AAClB,+BAAM,MAAM,KAAA,MAAE,CAAC;;;AAGf,QAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AAC1E,eAAS,GAAG,CAAC,CAAC;KACf;;AAED,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/C,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AApCG,gBAAc,WA4ClB,WAAW,GAAA,uBAAG;AACZ,QAAI,KAAK,GAAG,EAAE,CAAC;;AAEf,QAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA,AAAC,EAAE;AAC7E,WAAK,CAAC,IAAI,CAAC,2CAA4B,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/E;;AAED,WAAO,2BAAM,WAAW,KAAA,OAAC,KAAK,CAAC,CAAC;GACjC;;SApDG,cAAc;;;AAwDpB,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AAC5C,cAAc,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC;;AAEnD,yBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;;;;;;;iCCzED,wBAAwB;;;;2BAC9B,oBAAoB;;;;mCACZ,2BAA2B;;;;uCACvB,+BAA+B;;;;0BAChD,oBAAoB;;;;0BAChB,oBAAoB;;IAA7B,GAAG;;yBACK,mBAAmB;;IAA3B,EAAE;;kCACU,8BAA8B;;;;4BACnC,eAAe;;;;;;;;;;;;;;;;IAa5B,cAAc;YAAd,cAAc;;AAEP,WAFP,cAAc,CAEN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,cAAc;;AAGhB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,eAAe,CAAC,CAAC;GACrD;;;;;;;;;AALG,gBAAc,WAalB,aAAa,GAAA,yBAAG;AACd,oCAA8B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACvD;;;;;;;;;AAfG,gBAAc,WAuBlB,WAAW,GAAA,uBAAG;AACZ,QAAI,KAAK,GAAG,EAAE,CAAC;;AAEf,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,MAAM,EAAE;AACX,aAAO,KAAK,CAAC;KACd;;AAED,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,aAAK,CAAC,IAAI,CAAC,qCAAsB,IAAI,CAAC,OAAO,EAAE;AAC7C,iBAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAC;OACL;KACF;;AAED,WAAO,KAAK,CAAC;GACd;;;;;;;;;AA1CG,gBAAc,WAkDlB,UAAU,GAAA,sBAAG;;;AACX,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;AAC7C,QAAI,aAAa,YAAA,CAAC;AAClB,QAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;;AAE5B,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,OAAM,EAAE,CAAC,EAAE,EAAE;AACvD,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,qBAAa,GAAG,KAAK,CAAC;;AAEtB,cAAM;OACP;KACF;;AAED,QAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,4BAAS,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,UAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC7B,iBAAS,EAAE,gBAAgB;AAC3B,iBAAS,EAAE,gCAAY,IAAI,CAAC,KAAK,CAAC;AAClC,gBAAQ,EAAE,CAAC,CAAC;OACb,CAAC,CAAC;AACH,UAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAG,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC5C;;AAED,QAAI,aAAa,IAAI,aAAa,CAAC,IAAI,IAAI,IAAI,EAAE;AAC/C,mBAAa,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;;AAEjC,UAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;;AAEjG,UAAI,iBAAiB,EAAE;AACrB,yBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAC,KAAK;iBAAK,MAAK,MAAM,EAAE;SAAA,CAAC,CAAC;OACtE;KACF;;AAED,QAAI,aAAa,IAAI,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACxE,UAAI,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;UAAE,GAAG,YAAA,CAAC;;AAEtC,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,WAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEd,YAAI,EAAE,GAAG,yCAA0B,IAAI,CAAC,OAAO,EAAE;AAC/C,iBAAO,EAAE,aAAa;AACtB,eAAK,EAAE,GAAG;SACX,CAAC,CAAC;;AAEH,aAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAEf,YAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;OACnB;;AAED,UAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrB;;AAED,QAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;;AAED,WAAO,IAAI,CAAC;GACb;;SA/GG,cAAc;;;AAmHpB,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AAC5C,cAAc,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC;;AAEnD,yBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;;;;;;;8BC5IR,yBAAyB;;;;2BACxB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;;;;;;;;IAUR,qBAAqB;YAArB,qBAAqB;;AAEd,WAFP,qBAAqB,CAEb,MAAM,EAAE,OAAO,EAAC;0BAFxB,qBAAqB;;AAGvB,QAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,QAAI,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;;;AAGvC,WAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAC5B,WAAO,CAAC,UAAU,CAAC,GAAI,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,AAAC,CAAC;AACxF,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,SAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;GACjE;;;;;;;;AAfG,uBAAqB,WAsBzB,WAAW,GAAA,uBAAG;AACZ,wBAAM,WAAW,KAAA,MAAE,CAAC;AACpB,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;GACjC;;;;;;;;AA1BG,uBAAqB,WAiCzB,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,QAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;;AAG7C,QAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;GAChF;;SAvCG,qBAAqB;;;AA2C3B,yBAAU,iBAAiB,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;qBAC7D,qBAAqB;;;;;;;;;;;;;;;;;;;iCCxDR,wBAAwB;;;;2BAC9B,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;;;;;;;;;IAWR,kBAAkB;YAAlB,kBAAkB;;AAEX,WAFP,kBAAkB,CAEV,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;;;0BAF/B,kBAAkB;;AAGpB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;;AAEzD,QAAI,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;;AAEjC,QAAI,MAAM,EAAE;;AACV,YAAI,aAAa,GAAG,EAAE,CAAC,IAAI,QAAO,MAAK,kBAAkB,CAAC,CAAC;;AAE3D,cAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjD,cAAK,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,gBAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrD,CAAC,CAAC;;KACJ;GACF;;;;;;;;AAhBG,oBAAkB,WAuBtB,kBAAkB,GAAA,4BAAC,KAAK,EAAC;AACvB,QAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;AACxC,QAAI,QAAQ,GAAG,KAAK,CAAC;;;AAGrB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AAC/D,gBAAQ,GAAG,IAAI,CAAC;AAChB,cAAM;OACP;KACF;;;AAGD,QAAI,QAAQ,EAAE;AACZ,UAAI,CAAC,OAAO,EAAE,CAAC;KAChB,MAAM;AACL,UAAI,CAAC,MAAM,EAAE,CAAC;KACf;GACF;;;;;;;;;AA1CG,oBAAkB,WAkDtB,aAAa,GAAA,yBAAG;AACd,wCAAkC,2BAAM,aAAa,KAAA,MAAE,CAAG;GAC3D;;SApDG,kBAAkB;;;AAwDxB,kBAAkB,CAAC,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC;AACpD,kBAAkB,CAAC,SAAS,CAAC,YAAY,GAAG,cAAc,CAAC;;AAE3D,yBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;;;;mCCzEH,2BAA2B;;;;2BACnC,oBAAoB;;;;;;;;;;;;;IAUpC,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;;;AAKtB,WAAO,CAAC,OAAO,CAAC,GAAG;AACjB,YAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,cAAQ,EAAE,MAAM;AAChB,aAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;AACjC,eAAS,EAAE,KAAK;AAChB,YAAM,EAAE,UAAU;KACnB,CAAC;;;AAGF,WAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;;AAE7B,kCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;GACrB;;;;;;;;;AAlBG,sBAAoB,WA0BxB,kBAAkB,GAAA,4BAAC,KAAK,EAAC;AACvB,QAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;AACxC,QAAI,QAAQ,GAAG,IAAI,CAAC;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACvE,gBAAQ,GAAG,KAAK,CAAC;AACjB,cAAM;OACP;KACF;;AAED,QAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;GACzB;;SAvCG,oBAAoB;;;AA2C1B,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;iCCvDP,wBAAwB;;;;2BAC9B,oBAAoB;;;;;;;;;;;;;;IAWpC,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,eAAe;;AAGjB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,gBAAgB,CAAC,CAAC;GACtD;;;;;;;;;AALG,iBAAe,WAanB,aAAa,GAAA,yBAAG;AACd,qCAA+B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACxD;;SAfG,eAAe;;;AAmBrB,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;AAC9C,eAAe,CAAC,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC;;AAErD,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;6BCnCN,oBAAoB;;;;2BACtB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;mCACgB,2BAA2B;;;;sCACxB,+BAA+B;;;;;;;;;;;;;IAU1D,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAe;QAAb,OAAO,yDAAG,EAAE;;0BAF5B,eAAe;;AAGjB,WAAO,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;;AAErC,4BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;GACxB;;;;;;;;;AANG,iBAAe,WAcnB,WAAW,GAAA,uBAAW;QAAV,KAAK,yDAAC,EAAE;;;AAElB,SAAK,CAAC,IAAI,CAAC,wCAAyB,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;AAE3E,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,MAAM,EAAE;AACX,aAAO,KAAK,CAAC;KACd;;AAED,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;AAGtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,aAAK,CAAC,IAAI,CAAC,qCAAsB,IAAI,CAAC,OAAO,EAAE;;AAE7C,sBAAY,EAAE,IAAI;AAClB,iBAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAC;OACL;KACF;;AAED,WAAO,KAAK,CAAC;GACd;;SAtCG,eAAe;;;AA0CrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;8BCzDT,yBAAyB;;;;2BACxB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;4BACK,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;IAUhC,iBAAiB;YAAjB,iBAAiB;;AAEV,WAFP,iBAAiB,CAET,MAAM,EAAE,OAAO,EAAC;;;0BAFxB,iBAAiB;;AAGnB,QAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAI,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;;;AAGjC,WAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;AACpE,WAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;;AAEtE,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;AAEnB,QAAI,MAAM,EAAE;;AACV,YAAI,aAAa,GAAG,EAAE,CAAC,IAAI,QAAO,MAAK,kBAAkB,CAAC,CAAC;;AAE3D,cAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjD,cAAK,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,gBAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrD,CAAC,CAAC;;KACJ;;;;;;;;AAQD,QAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;;AAC3C,YAAI,KAAK,YAAA,CAAC;;AAEV,cAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,YAAW;AACnC,cAAI,OAAO,0BAAO,KAAK,KAAK,QAAQ,EAAE;;AAEpC,gBAAI;AACF,mBAAK,GAAG,IAAI,0BAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;aACpC,CAAC,OAAM,GAAG,EAAC,EAAE;WACf;;AAED,cAAI,CAAC,KAAK,EAAE;AACV,iBAAK,GAAG,4BAAS,WAAW,CAAC,OAAO,CAAC,CAAC;AACtC,iBAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;WACvC;;AAED,gBAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC7B,CAAC,CAAC;;KACJ;GACF;;;;;;;;AAhDG,mBAAiB,WAuDrB,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,QAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,wBAAM,WAAW,KAAA,OAAC,KAAK,CAAC,CAAC;;AAEzB,QAAI,CAAC,MAAM,EAAE,OAAO;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;AAC1B,iBAAS;OACV;;AAED,UAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACxB,aAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;OAC3B,MAAM;AACL,aAAK,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;OAC5B;KACF;GACF;;;;;;;;AA5EG,mBAAiB,WAmFrB,kBAAkB,GAAA,4BAAC,KAAK,EAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;GACjD;;SArFG,iBAAiB;;;AAyFvB,yBAAU,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;qBACrD,iBAAiB;;;;;;;;;;;;;;;;;;;2BCxGV,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,kBAAkB;YAAlB,kBAAkB;;AAEX,WAFP,kBAAkB,CAEV,MAAM,EAAE,OAAO,EAAC;0BAFxB,kBAAkB;;AAGpB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACnD;;;;;;;;;AANG,oBAAkB,WActB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,+CAA+C;KAC3D,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,0BAA0B;;AAErC,eAAS,EAAE,qDAAqD,GAAG,MAAM;KAC1E,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AA9BG,oBAAkB,WAqCtB,aAAa,GAAA,yBAAG;;AAEd,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClD,QAAI,aAAa,GAAG,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9D,QAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;AACzC,UAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,UAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,gBAAW,aAAa,AAAE,CAAC;KACvG;GACF;;SA9CG,kBAAkB;;;AAkDxB,yBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;;;;;;2BC/DX,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;AAOvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACvD;;;;;;;;;AAZG,iBAAe,WAoBnB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,2CAA2C;KACvD,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,sBAAsB;;AAEjC,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,iBAAc;KAC1F,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AApCG,iBAAe,WA2CnB,aAAa,GAAA,yBAAG;AACd,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC3C,UAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,UAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnD,UAAI,aAAa,GAAG,+BAAW,QAAQ,CAAC,CAAC;AACzC,UAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,gBAAW,aAAa,AAAE,CAAC;KACvG;GACF;;SAnDG,eAAe;;;AAuDrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;2BCpER,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;AAGtB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACnD;;;;;;;;;AANG,sBAAoB,WAcxB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,iDAAiD;KAC7D,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,4BAA4B;;AAEvC,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAe;KAC5F,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AA9BG,sBAAoB,WAqCxB,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;AAC3B,UAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACtD,UAAM,aAAa,GAAG,+BAAW,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;AAC/D,UAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;AACzC,YAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,YAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,iBAAY,aAAa,AAAE,CAAC;OACxG;KACF;;;;;GAKF;;SAlDG,oBAAoB;;;AAsD1B,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;2BCnEb,oBAAoB;;;;;;;;;;;;;;IAWpC,WAAW;YAAX,WAAW;;WAAX,WAAW;0BAAX,WAAW;;;;;;;;;;;;AAAX,aAAW,WAQf,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mCAAmC;AAC9C,eAAS,EAAE,2BAA2B;KACvC,CAAC,CAAC;GACJ;;SAbG,WAAW;;;AAiBjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;gCC7BH,wBAAwB;;;;2BACzB,iBAAiB;;;;yBACnB,gBAAgB;;IAAxB,EAAE;;;;;;;;;;;IAUR,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAC;0BAFxB,WAAW;;AAGb,QAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;AAE5B,2BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;;AAED,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;AAED,QAAI,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,UAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACtD,UAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;;AAEnD,QAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AACpC,YAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACzD,YAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KACvD,CAAC,CAAC;GACJ;;SAvBG,WAAW;;;AA2BjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;8BCxCP,wBAAwB;;;;2BACrB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;6BAGU,mBAAmB;;;;;;;;;;;;;IAUrC,SAAS;YAAT,SAAS;;AAEF,WAFP,SAAS,CAED,MAAM,EAAE,OAAO,EAAC;0BAFxB,SAAS;;AAGX,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3D,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;GACxD;;;;;;;;;AANG,WAAS,WAcb,QAAQ,GAAA,oBAAG;AACT,WAAO,kBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,+BAA+B;KAC3C,EAAE;AACD,kBAAY,EAAE,cAAc;KAC7B,CAAC,CAAC;GACJ;;;;;;;;AApBG,WAAS,WA2Bb,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;GACpD;;AA9BG,WAAS,WAgCb,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACxB,UAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC3B;GACF;;;;;;;;;AApCG,WAAS,WA4Cb,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACxB,aAAO,CAAC,CAAC;KACV,MAAM;AACL,aAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC9B;GACF;;;;;;;;AAlDG,WAAS,WAyDb,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;GAClD;;;;;;;;AA5DG,WAAS,WAmEb,QAAQ,GAAA,oBAAG;AACT,QAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;GAClD;;;;;;;;AAtEG,WAAS,WA6Eb,oBAAoB,GAAA,gCAAG;;AAErB,QAAI,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;GACvD;;SAlFG,SAAS;;;AAsFf,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC7B,UAAQ,EAAE,CACR,aAAa,CACd;AACD,WAAS,EAAE,aAAa;CACzB,CAAC;;AAEF,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAC;;AAEjD,yBAAU,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;qBACrC,SAAS;;;;;;;;;;;;;;;;;2BC/GF,oBAAoB;;;;;;2BAGpB,iBAAiB;;;;;;;;;;;;;IAUjC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,MAAM,EAAE,OAAO,EAAC;0BAFxB,aAAa;;AAGf,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;AACD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAU;AACrC,UAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnD,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;GACJ;;;;;;;;;AAhBG,eAAa,WAwBjB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;GACJ;;SA5BG,aAAa;;;AAgCnB,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG;AACjC,UAAQ,EAAE,CACR,WAAW,CACZ;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;qBAC7C,aAAa;;;;;;;;;;;;;;;;;2BCpDN,oBAAoB;;;;;;;;;;;;;IAUpC,WAAW;YAAX,WAAW;;WAAX,WAAW;0BAAX,WAAW;;;;;;;;;;;;AAAX,aAAW,WAQf,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kBAAkB;AAC7B,eAAS,EAAE,wCAAwC;KACpD,CAAC,CAAC;GACJ;;SAbG,WAAW;;;AAiBjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;yBC5BN,gBAAgB;;IAAxB,EAAE;;2BACQ,iBAAiB;;;;4BACrB,mBAAmB;;;;kCACb,0BAA0B;;;;4BAC3B,kBAAkB;;;;wCACnB,gCAAgC;;;;;;;;;;;;;IAUhD,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAa;QAAX,OAAO,yDAAC,EAAE;;0BAF1B,gBAAgB;;;AAIlB,QAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAChC,aAAO,CAAC,MAAM,GAAG,IAAI,CAAC;KACvB;;;AAGD,QAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;;;AAGlC,UAAI,OAAO,CAAC,MAAM,EAAE;AAClB,eAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;OAC1B,MAAM;AACL,eAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;OACzB;KACF;;;;AAID,WAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;AAC5C,WAAO,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAEhD,4BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACnD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;;;AAGhD,aAAS,gBAAgB,GAAG;AAC1B,UAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF;;AAED,oBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;;AAE/C,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,YAAU;AAC3D,UAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;KACpC,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAU;AAC5D,UAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;KACvC,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,YAAU;AAC3C,UAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;KACnC,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,YAAU;AAC1C,UAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;KACtC,CAAC,CAAC;GACJ;;;;;;;;;AAzDG,kBAAgB,WAiEpB,aAAa,GAAA,yBAAG;AACd,QAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B,QAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC5B,sBAAgB,GAAG,iCAAiC,CAAC;KACtD,MAAM;AACL,sBAAgB,GAAG,mCAAmC,CAAC;KACxD;;AAED,uCAAiC,uBAAM,aAAa,KAAA,MAAE,SAAI,gBAAgB,CAAG;GAC9E;;;;;;;;;AA1EG,kBAAgB,WAkFpB,WAAW,GAAA,uBAAG;AACZ,QAAI,KAAK,GAAG,8BAAU,IAAI,CAAC,OAAO,EAAE;AAClC,mBAAa,EAAE,KAAK;KACrB,CAAC,CAAC;;AAEH,QAAI,EAAE,GAAG,0CAAc,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;;AAE9D,SAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;AAEnB,QAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;AAEpB,QAAI,CAAC,qBAAqB,EAAE,CAAC;;AAE7B,WAAO,KAAK,CAAC;GACd;;;;;;;;AAjGG,kBAAgB,WAwGpB,WAAW,GAAA,uBAAG;AACZ,8BAAW,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,2BAAM,WAAW,KAAA,MAAE,CAAC;GACrB;;AA3GG,kBAAgB,WA6GpB,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;GACtF;;AA/GG,kBAAgB,WAiHpB,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7F,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GAC9E;;AApHG,kBAAgB,WAsHpB,aAAa,GAAA,uBAAC,KAAK,EAAE;AACnB,QAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;GAC/F;;SAxHG,gBAAgB;;;AA2HtB,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,0BAAW,SAAS,CAAC,MAAM,CAAC;AACtE,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAEjD,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;yBC9IT,aAAa;;;;2BACX,gBAAgB;;;;wBAEnB,aAAa;;IAAtB,GAAG;;iCACU,uBAAuB;;;;;;;;;;;IAQ1C,YAAY;YAAZ,YAAY;;;;;;;;;AAQL,WARP,YAAY,CAQJ,MAAM,EAAE,OAAO,EAAE;0BARzB,YAAY;;AASd,4BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;GACrC;;;;;;;;;;;;AAXG,cAAY,WAsBhB,aAAa,GAAA,yBAAG;AACd,kCAA4B,uBAAM,aAAa,KAAA,MAAE,CAAG;GACrD;;;;;;;;AAxBG,cAAY,WA+BhB,OAAO,GAAA,mBAAG;AACR,QAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAClC,WAAO,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;GAClD;;SAlCG,YAAY;;;AAqClB,YAAY,CAAC,SAAS,CAAC,QAAQ,GAAG,+BAAa,yBAAY,SAAS,CAAC,QAAQ,EAAE;AAC7E,YAAU,EAAE,IAAI;AAChB,WAAS,EAAE,KAAK;AAChB,aAAW,EAAE,IAAI;CAClB,CAAC,CAAC;;AAEH,uBAAU,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;qBAC3C,YAAY;;;;;;;;;;;;;6BCxDH,mBAAmB;;IAA/B,MAAM;;AAElB,IAAI,WAAW,GAAG,SAAd,WAAW,GAAc,EAAE,CAAC;;AAEhC,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC;;AAE1C,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;;;AAG5C,MAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChC,MAAI,CAAC,gBAAgB,GAAG,YAAM,EAAE,CAAC;AACjC,QAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,MAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;CAC7B,CAAC;AACF,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;;AAElE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;AAC7C,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;CAC5B,CAAC;AACF,WAAW,CAAC,SAAS,CAAC,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;;AAEtE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;;;AAG7C,MAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChC,MAAI,CAAC,gBAAgB,GAAG,YAAM,EAAE,CAAC;AACjC,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,MAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;CAC7B,CAAC;;AAEF,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE;AAC9C,MAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;;AAE/B,MAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,SAAK,GAAG;AACN,UAAI,EAAE,IAAI;KACX,CAAC;GACH;AACD,OAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE/B,MAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;AAClD,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1B;;AAED,QAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC7B,CAAC;;AAEF,WAAW,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;;qBAErD,WAAW;;;;;;;;;;wBCpDV,aAAa;;;;;;;;;;;AAS7B,IAAM,SAAS,GAAG,SAAZ,SAAS,CAAa,QAAQ,EAAE,UAAU,EAAE;AAChD,MAAI,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE;AAC3D,UAAM,IAAI,SAAS,CAAC,0DAA0D,GAAG,OAAO,UAAU,CAAC,CAAC;GACrG;;AAED,UAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE;AACrE,eAAW,EAAE;AACX,WAAK,EAAE,QAAQ;AACf,gBAAU,EAAE,KAAK;AACjB,cAAQ,EAAE,IAAI;AACd,kBAAY,EAAE,IAAI;KACnB;GACF,CAAC,CAAC;;AAEH,MAAI,UAAU,EAAE;;AAEd,YAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;GAC9B;CACF,CAAC;;;;;;;;;;;;;;;;;;;AAmBF,IAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,UAAU,EAAsB;MAApB,eAAe,yDAAC,EAAE;;AACtD,MAAI,QAAQ,GAAG,oBAAW;AACxB,cAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GACnC,CAAC;AACF,MAAI,OAAO,GAAG,EAAE,CAAC;;AAEjB,MAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;AACvC,QAAI,OAAO,eAAe,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9C,4BAAI,IAAI,CAAC,+EAA+E,CAAC,CAAC;AAC1F,qBAAe,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;KACpD;AACD,QAAI,eAAe,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;AAChE,cAAQ,GAAG,eAAe,CAAC,WAAW,CAAC;KACxC;AACD,WAAO,GAAG,eAAe,CAAC;GAC3B,MAAM,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAChD,YAAQ,GAAG,eAAe,CAAC;GAC5B;;AAED,WAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;;;AAGhC,OAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,QAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAChC,cAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1C;GACF;;AAED,SAAO,QAAQ,CAAC;CACjB,CAAC;;qBAEa,QAAQ;;;;;;;;;;;;;8BC1EF,iBAAiB;;;;;;;;;AAOtC,IAAI,aAAa,GAAG,EAAE,CAAC;;;;AAIvB,IAAM,MAAM,GAAG;;AAEb,CACE,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,CAClB;;AAED,CACE,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,CACxB;;AAED,CACE,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,CACxB;;AAED,CACE,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,CACrB;;AAED,CACE,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,CACF,CAAC;;AAEF,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,UAAU,YAAA,CAAC;;;AAGf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAEtC,MAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAAY,EAAE;AAC5B,cAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,UAAM;GACP;CACF;;;AAGD,IAAI,UAAU,EAAE;AACd,OAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,iBAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;GAC3C;CACF;;qBAEc,aAAa;;;;;;;;;;;;;;;;;yBC9EN,aAAa;;;;;;;;;;;;;IAU7B,cAAc;YAAd,cAAc;;WAAd,cAAc;0BAAd,cAAc;;;;;;;;;;;AAAd,gBAAc,WAOlB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,qBAAqB;AAChC,SAAG,EAAE,KAAK;KACX,CAAC,CAAC;GACJ;;SAZG,cAAc;;;AAepB,uBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;4BC1BV,eAAe;;;;;;;;;AAOlC,IAAI,UAAU,GAAG,SAAb,UAAU,CAAY,IAAI,EAAC;AAC7B,MAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;GAClB,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAEnC,QAAI,CAAC,OAAO,GAAG,IAAI,CAAC;GACrB,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AACnC,8BAAO,IAAI,EAAE,IAAI,CAAC,CAAC;GACpB;;AAED,MAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,QAAI,CAAC,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;GAC5D;CACF,CAAC;;;;;;;;AAQF,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;;;;;;;;;AAS9B,UAAU,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;;;;;;;;;;;;AAYlC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;;AAEnC,UAAU,CAAC,UAAU,GAAG,CACtB,kBAAkB;AAClB,mBAAmB;AACnB,mBAAmB;AACnB,kBAAkB;AAClB,6BAA6B;AAC7B,qBAAqB;CACtB,CAAC;;AAEF,UAAU,CAAC,eAAe,GAAG;AAC3B,GAAC,EAAE,gCAAgC;AACnC,GAAC,EAAE,6DAA6D;AAChE,GAAC,EAAE,6HAA6H;AAChI,GAAC,EAAE,oHAAoH;AACvH,GAAC,EAAE,mEAAmE;CACvE,CAAC;;;;AAIF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;AACpE,YAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;;AAEnD,YAAU,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;CAC9D;;qBAEc,UAAU;;;;;;;;;;;;;;;;;;;oCC5EM,2BAA2B;;;;2BACpC,iBAAiB;;;;sBACtB,WAAW;;;;0BACP,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;kCACU,2BAA2B;;;;;;;;;;;;;IAU7C,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAa;QAAX,OAAO,yDAAC,EAAE;;0BAF1B,UAAU;;AAGZ,mCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;;AAEd,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;AAErB,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1C,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;GAChD;;;;;;;;AAZG,YAAU,WAmBd,MAAM,GAAA,kBAAG;AACP,QAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE7B,QAAI,IAAI,CAAC,IAAI,EAAE;AACb,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;;AAED,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;;;;;AAQpB,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;;AAEhD,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AA3CG,YAAU,WAmDd,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,GAAG,wBAAS,IAAI,CAAC,OAAO,CAAC,CAAC;;;AAGlC,QAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvB,UAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC7B,iBAAS,EAAE,gBAAgB;AAC3B,iBAAS,EAAE,gCAAY,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,gBAAQ,EAAE,CAAC,CAAC;OACb,CAAC,CAAC;AACH,UAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAG,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC5C;;AAED,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;;AAEnC,QAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;OAC7B;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AA3EG,YAAU,WAkFd,WAAW,GAAA,uBAAE,EAAE;;;;;;;;;AAlFX,YAAU,WA0Fd,QAAQ,GAAA,oBAAG;AACT,WAAO,8BAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;GACJ;;;;;;;;;AA9FG,YAAU,WAsGd,aAAa,GAAA,yBAAG;AACd,QAAI,eAAe,GAAG,iBAAiB,CAAC;;;AAGxC,QAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AACjC,qBAAe,IAAI,SAAS,CAAC;KAC9B,MAAM;AACL,qBAAe,IAAI,QAAQ,CAAC;KAC7B;;AAED,gCAA0B,eAAe,SAAI,8BAAM,aAAa,KAAA,MAAE,CAAG;GACtE;;;;;;;;;;;;AAjHG,YAAU,WA4Hd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;AAC3C,UAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,UAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KACjB,CAAC,CAAC,CAAC;AACJ,QAAI,IAAI,CAAC,cAAc,EAAC;AACtB,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,MAAM;AACL,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;GACF;;;;;;;;;AAtIG,YAAU,WA8Id,cAAc,GAAA,wBAAC,KAAK,EAAE;;;AAGpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;AAC3C,UAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAI,CAAC,aAAa,EAAE,CAAC;OACtB;;AAED,UAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;AACrB,aAAK,CAAC,cAAc,EAAE,CAAC;OACxB;;KAEF,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AACnD,YAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,cAAI,CAAC,WAAW,EAAE,CAAC;AACnB,eAAK,CAAC,cAAc,EAAE,CAAC;SACxB;OACF,MAAM;AACL,sCAAM,cAAc,KAAA,OAAC,KAAK,CAAC,CAAC;OAC7B;GACF;;;;;;;;;AAlKG,YAAU,WA0Kd,qBAAqB,GAAA,+BAAC,KAAK,EAAE;;;AAG3B,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAC;AAC1C,UAAI,IAAI,CAAC,cAAc,EAAC;AACtB,YAAI,CAAC,aAAa,EAAE,CAAC;OACtB;;AAED,UAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;AACrB,aAAK,CAAC,cAAc,EAAE,CAAC;OACxB;KACF;GACF;;;;;;;;AAtLG,YAAU,WA6Ld,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,UAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,UAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxB,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,UAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;GACF;;;;;;;;AApMG,YAAU,WA2Md,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,UAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,UAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAChD,UAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;KAClB;GACF;;;;;;;;;AAlNG,YAAU,WA0Nd,OAAO,GAAA,mBAAG;;AAER,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;;AAEhD,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAEtB,WAAO,8BAAM,OAAO,KAAA,MAAE,CAAC;GACxB;;;;;;;;;AAnOG,YAAU,WA2Od,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;AAErB,WAAO,8BAAM,MAAM,KAAA,MAAE,CAAC;GACvB;;SA/OG,UAAU;;;AAkPhB,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;oCClQM,2BAA2B;;;;2BACpC,iBAAiB;;;;4BACpB,eAAe;;;;;;;;;;;;;IAU5B,QAAQ;YAAR,QAAQ;;AAED,WAFP,QAAQ,CAEA,MAAM,EAAE,OAAO,EAAE;0BAFzB,QAAQ;;AAGV,mCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;;AAExC,QAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEnC,QAAI,IAAI,CAAC,UAAU,EAAE;;;AAGnB,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;KACnD,MAAM;AACL,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAC3C;GACF;;;;;;;;;;;AAhBG,UAAQ,WA0BZ,QAAQ,GAAA,kBAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3B,WAAO,8BAAM,QAAQ,KAAA,OAAC,IAAI,EAAE,0BAAO;AACjC,eAAS,EAAE,eAAe;AAC1B,eAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChD,cAAQ,EAAE,CAAC,CAAC;KACb,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;GACnB;;;;;;;;AAhCG,UAAQ,WAuCZ,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;GACrB;;;;;;;;;AAzCG,UAAQ,WAiDZ,QAAQ,GAAA,kBAAC,SAAQ,EAAE;AACjB,QAAI,IAAI,CAAC,UAAU,EAAE;AACnB,UAAI,SAAQ,EAAE;AACZ,YAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC9B,YAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAC,MAAM,CAAC,CAAC;;;AAG7C,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACjC,YAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAC,OAAO,CAAC,CAAC;;;AAG9C,YAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;OACvB;KACF;GACF;;SAjEG,QAAQ;;;AAoEd,yBAAU,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;qBACnC,QAAQ;;;;;;;;;;;;;;;;;;;2BCjFD,iBAAiB;;;;0BAClB,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;6BACU,oBAAoB;;IAAhC,MAAM;;;;;;;;;;IASZ,IAAI;YAAJ,IAAI;;AAEI,WAFR,IAAI,CAEK,MAAM,EAAE,OAAO,EAAE;0BAF1B,IAAI;;AAGN,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;;AAExB,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACzC;;;;;;;;;AARG,MAAI,WAgBR,OAAO,GAAA,iBAAC,SAAS,EAAE;AACjB,QAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzB,aAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;AAC5C,UAAI,CAAC,aAAa,EAAE,CAAC;;KAEtB,CAAC,CAAC,CAAC;GACL;;;;;;;;;AAtBG,MAAI,WA8BR,QAAQ,GAAA,oBAAG;AACT,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC;AACxD,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5C,eAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;AACH,QAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,YAAM,EAAE,IAAI,CAAC,UAAU;AACvB,eAAS,EAAE,UAAU;KACtB,CAAC,CAAC;AACH,MAAE,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACxC,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;;AAIhC,UAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,UAAS,KAAK,EAAC;AACpC,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,WAAK,CAAC,wBAAwB,EAAE,CAAC;KAClC,CAAC,CAAC;;AAEH,WAAO,EAAE,CAAC;GACX;;;;;;;;;AAnDG,MAAI,WA2DR,cAAc,GAAC,wBAAC,KAAK,EAAE;AACrB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AAC5C,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AACnD,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;GACF;;;;;;;;AAnEG,MAAI,WA0EP,WAAW,GAAC,uBAAG;AACb,QAAI,SAAS,GAAG,CAAC,CAAC;;AAElB,QAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACpC,eAAS,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;KACpC;AACD,QAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;GACvB;;;;;;;;AAjFE,MAAI,WAwFR,QAAQ,GAAC,oBAAG;AACV,QAAI,SAAS,GAAG,CAAC,CAAC;;AAElB,QAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACpC,eAAS,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;KACpC;AACD,QAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;GACvB;;;;;;;;;AA/FG,MAAI,WAuGR,KAAK,GAAC,iBAAW;QAAV,IAAI,yDAAG,CAAC;;AACb,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;AACvC,QAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,IACtD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;;AAE/C,QAAI,SAAS,EAAE;AACb,cAAQ,CAAC,KAAK,EAAE,CAAC;KAClB;;AAED,QAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,UAAI,IAAI,GAAG,CAAC,EAAE;AACZ,YAAI,GAAG,CAAC,CAAC;OACV,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;AAClC,YAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;OAC5B;;AAED,UAAI,CAAC,aAAa,GAAG,IAAI,CAAC;;AAE1B,cAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;KAC5B;GACF;;SA3HG,IAAI;;;AA8HV,yBAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC3B,IAAI;;;;;;;;;;;;;;;;;;;wBC3IE,aAAa;;IAAtB,GAAG;;uBACK,YAAY;;IAApB,EAAE;;wBACE,aAAa;;;;yBAEP,aAAa;;;;2BACX,gBAAgB;;;;AAExC,IAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAC5C,IAAM,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;IAYT,WAAW;YAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BJ,WA/BP,WAAW,CA+BH,MAAM,EAAE,OAAO,EAAE;0BA/BzB,WAAW;;AAgCb,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;AAEjE,QAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3C,QAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;;;;AAKpC,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAK,gBAAgB,aAAU;KACzC,EAAE;AACD,UAAI,EAAE,UAAU;KACjB,CAAC,CAAC;;AAEH,QAAI,CAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;AAC/B,eAAS,EAAK,gBAAgB,+BAA4B;AAC1D,QAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC;KAC/C,CAAC,CAAC;;AAEH,OAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,QAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,QAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;GACvC;;;;;;;;;;;;;;;;AAvDG,aAAW,WA+Df,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;AAC/B,cAAQ,EAAE,CAAC,CAAC;KACb,EAAE;AACD,wBAAkB,EAAK,IAAI,CAAC,EAAE,EAAE,iBAAc;AAC9C,mBAAa,EAAE,MAAM;AACrB,kBAAY,EAAE,IAAI,CAAC,KAAK,EAAE;AAC1B,UAAI,EAAE,QAAQ;KACf,CAAC,CAAC;GACJ;;;;;;;;;AAzEG,aAAW,WAiFf,aAAa,GAAA,yBAAG;AACd,WAAU,gBAAgB,oBAAe,qBAAM,aAAa,KAAA,MAAE,CAAG;GAClE;;;;;;;;;;AAnFG,aAAW,WA4Ff,cAAc,GAAA,wBAAC,CAAC,EAAE;AAChB,QAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACvC,UAAI,CAAC,KAAK,EAAE,CAAC;KACd;GACF;;;;;;;;AAhGG,aAAW,WAuGf,KAAK,GAAA,iBAAG;AACN,WAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;GAC7D;;;;;;;;;AAzGG,aAAW,WAiHf,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;;;AAGjF,QAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,UAAI,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,qFAAqF,CAAC,CAAC;KACpH;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA1HG,aAAW,WAkIf,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,UAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;;AAE3B,UAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChC,UAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;;;AAIpB,UAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC5E,YAAI,CAAC,IAAI,EAAE,CAAC;OACb;;;;AAID,UAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;AAEpC,UAAI,IAAI,CAAC,WAAW,EAAE;AACpB,cAAM,CAAC,KAAK,EAAE,CAAC;OAChB;;AAED,UAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;OAChF;;AAED,YAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvB,UAAI,CAAC,IAAI,EAAE,CAAC;AACZ,UAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC/C,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1B,UAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;AACD,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AAlKG,aAAW,WA6Kf,MAAM,GAAA,gBAAC,KAAK,EAAE;AACZ,QAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC9B,UAAI,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;KAClC;AACD,WAAO,IAAI,CAAC,OAAO,CAAC;GACrB;;;;;;;;;AAlLG,aAAW,WA0Lf,KAAK,GAAA,iBAAG;AACN,QAAI,IAAI,CAAC,OAAO,EAAE;AAChB,UAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;;AAE3B,UAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACjC,UAAI,CAAC,OAAO,GAAG,KAAK,CAAC;;AAErB,UAAI,IAAI,CAAC,WAAW,EAAE;AACpB,cAAM,CAAC,IAAI,EAAE,CAAC;OACf;;AAED,UAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;OACjF;;AAED,YAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,UAAI,CAAC,IAAI,EAAE,CAAC;AACZ,UAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9C,UAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;;AAE3B,UAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC3B,YAAI,CAAC,OAAO,EAAE,CAAC;OAChB;KACF;AACD,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AAnNG,aAAW,WA8Nf,SAAS,GAAA,mBAAC,KAAK,EAAE;AACf,QAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC9B,UAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;AAC1C,UAAI,MAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;;;AAGzC,UAAI,SAAS,IAAI,CAAC,MAAK,EAAE;;;;AAIvB,YAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;AAC3B,YAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC3B,cAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACrC,YAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAI,CAAC,EAAE,CAAC,MAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;OACrC;;;AAGD,UAAI,CAAC,SAAS,IAAI,MAAK,EAAE;AACvB,YAAI,CAAC,GAAG,CAAC,MAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,YAAI,CAAC,WAAW,CAAC,MAAK,CAAC,CAAC;AACxB,cAAK,CAAC,OAAO,EAAE,CAAC;OACjB;KACF;AACD,WAAO,IAAI,CAAC,UAAU,CAAC;GACxB;;;;;;;;;;;AAvPG,aAAW,WAiQf,IAAI,GAAA,gBAAG;AACL,WAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;GACtC;;;;;;;;;;;;;;AAnQG,aAAW,WAgRf,QAAQ,GAAA,kBAAC,OAAO,EAAE;AAChB,QAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACjC,QAAI,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC;AACpC,QAAI,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC;;AAE1C,QAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChC,QAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;;;AAI3B,YAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAChC,QAAI,CAAC,KAAK,EAAE,CAAC;AACb,OAAG,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACtC,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;;;AAG1B,QAAI,aAAa,EAAE;AACjB,cAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;KACjD,MAAM;AACL,cAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;KACjC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAvSG,aAAW,WAiTf,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACjC,OAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9B,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC3B,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;;AAtTG,aAAW,WAuUf,OAAO,GAAA,iBAAC,KAAK,EAAE;AACb,QAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,UAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC;GACtB;;SA5UG,WAAW;;;AAqVjB,WAAW,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC/B,WAAS,EAAE,IAAI;CAChB,CAAC;;AAEF,uBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;;2BC7WJ,gBAAgB;;;;8BAEjB,iBAAiB;;;;4BACnB,eAAe;;;;6BACV,mBAAmB;;IAA/B,MAAM;;0BACG,gBAAgB;;IAAzB,GAAG;;yBACK,eAAe;;IAAvB,EAAE;;2BACQ,iBAAiB;;IAA3B,IAAI;;8BACS,oBAAoB;;IAAjC,OAAO;;0BACH,gBAAgB;;;;kCACR,0BAA0B;;;;iCAClB,wBAAwB;;6BACxB,mBAAmB;;iCACvB,uBAAuB;;IAAvC,UAAU;;+BACI,qBAAqB;;;;4BACxB,kBAAkB;;;;kCACd,uBAAuB;;;;4BAC/B,eAAe;;;;mCACT,0BAA0B;;;;8CACpB,uCAAuC;;;;sCAC3C,8BAA8B;;;;sCAC9B,8BAA8B;;;;;;4BAGjC,kBAAkB;;;;6BAClB,mBAAmB;;;;wCACd,gCAAgC;;;;gCAClC,sBAAsB;;;;+BACvB,sBAAsB;;;;sCACzB,8BAA8B;;;;8BAC5B,oBAAoB;;;;yCACf,iCAAiC;;;;2BACvC,gBAAgB;;;;;;0BAGvB,gBAAgB;;;;2BACf,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;IAqB7B,MAAM;YAAN,MAAM;;;;;;;;;;;;AAWC,WAXP,MAAM,CAWE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAC;;;0BAX5B,MAAM;;;AAaR,OAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,mBAAiB,IAAI,CAAC,OAAO,EAAE,AAAE,CAAC;;;;;;;AAOjD,WAAO,GAAG,0BAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;;;;AAItD,WAAO,CAAC,YAAY,GAAG,KAAK,CAAC;;;AAG7B,WAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;;;;AAIzB,WAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;;;AAGpC,0BAAM,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;AAI5B,QAAI,CAAC,IAAI,CAAC,QAAQ,IACd,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IACxB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;AACnC,YAAM,IAAI,KAAK,CAAC,4CAA4C,GAC5C,+CAA+C,GAC/C,kCAAkC,CAAC,CAAC;KACrD;;AAED,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;;;AAGf,QAAI,CAAC,aAAa,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;;AAGrD,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;;AAGtC,QAAI,OAAO,CAAC,SAAS,EAAE;;;AAErB,YAAI,gBAAgB,GAAG,EAAE,CAAC;;AAE1B,cAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAE;AACnE,0BAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAChE,CAAC,CAAC;AACH,cAAK,UAAU,GAAG,gBAAgB,CAAC;;KACpC,MAAM;AACL,UAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;KACvD;;;AAGD,QAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;;AAGjB,QAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;;;AAGpC,QAAI,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;;;;;AAKpC,OAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;;;;;;;;AAQrB,QAAI,CAAC,UAAU,GAAG,KAAK,CAAC;;AAExB,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;;;AAM3B,QAAI,iBAAiB,GAAG,iCAAa,IAAI,CAAC,QAAQ,CAAC,CAAC;;;AAGpD,QAAI,OAAO,CAAC,OAAO,EAAE;;AACnB,YAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;;AAE9B,cAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;AACxD,cAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AACpC,gBAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;WAC3B,MAAM;AACL,oCAAI,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;WAC3C;SACF,QAAO,CAAC;;KACV;;AAED,QAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,iBAAiB,CAAC;;AAEhD,QAAI,CAAC,YAAY,EAAE,CAAC;;;AAGpB,QAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;;;;AAIrD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;KACvC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;KACxC;;;AAGD,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACxC,QAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;KACrD,MAAM;AACL,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;KACrD;;AAED,QAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,UAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC5B;;AAED,QAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,UAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KAC9B;;;;;;;;;AASD,QAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,UAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;KACnC;;;AAGD,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;AAIhC,QAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,QAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAI,CAAC,sBAAsB,EAAE,CAAC;;AAE9B,QAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;GAC/C;;;;;;;;;;;;;;;;;;;AAnKG,QAAM,WA+KV,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;AAExB,QAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;AAEpB,QAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC7C,UAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrD;;;AAGD,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAChC,QAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAAE,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KAAE;AAC5D,QAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAAE,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KAAE;;AAE5D,QAAI,IAAI,CAAC,KAAK,EAAE;AAAE,UAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAAE;;AAEzC,yBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AAhMG,QAAM,WAwMV,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,CAAC,CAAC;AAC1C,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnB,OAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC7B,OAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;;;;AAI9B,QAAM,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;AAEvC,UAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;;;AAGtD,UAAI,IAAI,KAAK,OAAO,EAAE;AACpB,UAAE,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;OAC5B,MAAM;AACL,UAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;OACpC;KACF,CAAC,CAAC;;;;;AAKH,OAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;AACtB,OAAG,CAAC,EAAE,IAAI,YAAY,CAAC;AACvB,OAAG,CAAC,SAAS,GAAG,UAAU,CAAC;;;AAG3B,OAAG,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;;AAE9B,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;;;;;AAK5B,QAAI,0BAAO,wBAAwB,KAAK,IAAI,EAAE;AAC5C,UAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;AACvE,UAAI,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACpD,UAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzB,UAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;KACnG;;;AAGD,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,QAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,QAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;;AAG5C,QAAI,KAAK,GAAG,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC1C,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,UAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAG,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACrC,YAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACzC;;;;AAID,OAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC;;;AAGzC,QAAI,GAAG,CAAC,UAAU,EAAE;AAClB,SAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;KACtC;;;;;AAKD,OAAG,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC3B,QAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;AAE5B,QAAI,CAAC,GAAG,GAAG,EAAE,CAAC;;AAEd,WAAO,EAAE,CAAC;GACX;;;;;;;;;;AApRG,QAAM,WA6RV,KAAK,GAAA,eAAC,KAAK,EAAE;AACX,WAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;GACvC;;;;;;;;;;AA/RG,QAAM,WAwSV,MAAM,GAAA,gBAAC,KAAK,EAAE;AACZ,WAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;GACxC;;;;;;;;;;;AA1SG,QAAM,WAoTV,SAAS,GAAA,mBAAC,UAAS,EAAE,KAAK,EAAE;AAC1B,QAAI,aAAa,GAAG,UAAS,GAAG,GAAG,CAAC;;AAEpC,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,aAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACjC;;AAED,QAAI,KAAK,KAAK,EAAE,EAAE;;AAEhB,UAAI,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjC,MAAM;AACL,UAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;;AAElC,UAAI,KAAK,CAAC,SAAS,CAAC,EAAE;AACpB,gCAAI,KAAK,sBAAoB,KAAK,2BAAsB,UAAS,CAAG,CAAC;AACrE,eAAO,IAAI,CAAC;OACb;;AAED,UAAI,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjC;;AAED,QAAI,CAAC,cAAc,EAAE,CAAC;AACtB,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA3UG,QAAM,WAmVV,KAAK,GAAA,eAAC,IAAI,EAAE;AACV,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KACtB;;AAED,QAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;;AAErB,QAAI,IAAI,EAAE;AACR,UAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC5B,MAAM;AACL,UAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;KAC/B;GACF;;;;;;;;;;AA/VG,QAAM,WAwWV,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,aAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;;AAGD,QAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;KACnH;AACD,QAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;;;AAI1B,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEjB,QAAI,CAAC,cAAc,EAAE,CAAC;GACvB;;;;;;;;AAxXG,QAAM,WA+XV,cAAc,GAAA,0BAAG;AACf,QAAI,0BAAO,wBAAwB,KAAK,IAAI,EAAE;AAC5C,UAAM,MAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClF,UAAM,OAAM,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtF,UAAI,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;;AAE3C,UAAI,MAAM,EAAE;AACV,YAAI,MAAK,IAAI,CAAC,EAAE;AACd,gBAAM,CAAC,KAAK,GAAG,MAAK,CAAC;SACtB;AACD,YAAI,OAAM,IAAI,CAAC,EAAE;AACf,gBAAM,CAAC,MAAM,GAAG,OAAM,CAAC;SACxB;OACF;;AAED,aAAO;KACR;;AAED,QAAI,KAAK,YAAA,CAAC;AACV,QAAI,MAAM,YAAA,CAAC;AACX,QAAI,WAAW,YAAA,CAAC;AAChB,QAAI,OAAO,YAAA,CAAC;;;AAGZ,QAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;;AAEnE,iBAAW,GAAG,IAAI,CAAC,YAAY,CAAC;KACjC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAE5B,iBAAW,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;KAC5D,MAAM;;AAEL,iBAAW,GAAG,MAAM,CAAC;KACtB;;;AAGD,QAAI,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,QAAI,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;AAEpD,QAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;;AAE7B,WAAK,GAAG,IAAI,CAAC,MAAM,CAAC;KACrB,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;AAErC,WAAK,GAAG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;KACxC,MAAM;;AAEL,WAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC;KAClC;;AAED,QAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;AAE9B,YAAM,GAAG,IAAI,CAAC,OAAO,CAAC;KACvB,MAAM;;AAEL,YAAM,GAAG,KAAK,GAAI,eAAe,CAAC;KACnC;;;AAGD,QAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAChC,aAAO,GAAG,aAAa,GAAC,IAAI,CAAC,EAAE,EAAE,CAAC;KACnC,MAAM;AACL,aAAO,GAAG,IAAI,CAAC,EAAE,EAAE,GAAC,aAAa,CAAC;KACnC;;;AAGD,QAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;AAEvB,cAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,gBAClC,OAAO,2BACC,KAAK,6BACJ,MAAM,+BAGf,OAAO,2CACO,eAAe,GAAG,GAAG,uBAEtC,CAAC;GACJ;;;;;;;;;;;;;AA7cG,QAAM,WAydV,SAAS,GAAA,mBAAC,QAAQ,EAAE,MAAM,EAAE;;;AAG1B,QAAI,IAAI,CAAC,KAAK,EAAE;AACd,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;AAGD,QAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE;AACpC,8BAAK,OAAO,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACjB;;AAED,QAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;;AAG1B,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;;AAGtB,QAAI,WAAW,GAAG,0BAAO;AACvB,8BAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB;AAC9D,cAAQ,EAAE,MAAM;AAChB,gBAAU,EAAE,IAAI,CAAC,EAAE,EAAE;AACrB,cAAQ,EAAK,IAAI,CAAC,EAAE,EAAE,SAAI,QAAQ,SAAM;AACxC,mBAAa,EAAE,IAAI,CAAC,YAAY;AAChC,kBAAY,EAAE,IAAI,CAAC,WAAW;AAC9B,mBAAa,EAAE,IAAI,CAAC,YAAY;AAChC,gBAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAClC,eAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAChC,YAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC1B,aAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC5B,cAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;AACvB,gBAAU,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC3B,cAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAClC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;;AAE1C,QAAI,IAAI,CAAC,GAAG,EAAE;AACZ,iBAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;KAC5B;;AAED,QAAI,MAAM,EAAE;AACV,UAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,UAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACjE,mBAAW,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;OACjD;;AAED,UAAI,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;KAC9B;;;AAGD,QAAI,aAAa,GAAG,wBAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;;;AAG3C,QAAI,CAAC,aAAa,EAAE;AAClB,mBAAa,GAAG,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;KAClD;AACD,QAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;;;AAG5C,QAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;;AAE7D,gDAAmB,gBAAgB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;;;AAG5E,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC1D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC1E,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAClE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;;AAElE,QAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEpD,QAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAClD,UAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;;;;AAID,QAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,AAAC,EAAE;AACnF,SAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;KAC/C;;;AAGD,QAAI,IAAI,CAAC,GAAG,EAAE;AACZ,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACjB;GACF;;;;;;;;;AAvkBG,QAAM,WA+kBV,WAAW,GAAA,uBAAG;;AAEZ,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACvC,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACvC,QAAI,CAAC,eAAe,GAAG,4CAAmB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAEvE,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAEtB,QAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;;AAErB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;GACpB;;;;;;;;;;;;;AA3lBG,QAAM,WAumBV,IAAI,GAAA,cAAC,MAAM,EAAE;AACX,QAAI,MAAM,IAAI,MAAM,CAAC,wBAAwB,EAAE;AAC7C,aAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AACD,QAAI,SAAS,2RAKZ,CAAC;AACF,8BAAO,KAAK,CAAC,SAAS,CAAC,CAAC;AACxB,UAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;GAC5B;;;;;;;;;;;;;;;;;;;;;;;;AAnnBG,QAAM,WA0oBV,yBAAyB,GAAA,qCAAG;;AAE1B,QAAI,CAAC,4BAA4B,EAAE,CAAC;;;;;;AAMpC,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;;;;;AAKxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;;;;AAI1D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACjD;;;;;;;;;;AA9pBG,QAAM,WAuqBV,4BAA4B,GAAA,wCAAG;;;AAG7B,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACjD,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC/D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;GAC1D;;;;;;;;;AA/qBG,QAAM,WAurBV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,YAAY,EAAE,CAAC;;;AAGpB,QAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,UAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjD;;;AAGD,QAAI,CAAC,uBAAuB,EAAE,CAAC;;;AAG/B,QAAI,CAAC,yBAAyB,EAAE,CAAC;;;;;;AAMjC,QAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACrE,aAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AA7sBG,QAAM,WAqtBV,oBAAoB,GAAA,gCAAG;;;AAGrB,QAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;;;AAG9B,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;;;;AAKjB,QAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAClB,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1B,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC3B,MAAM;;AAEL,UAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC3B;GACF;;;;;;;;;;;AAxuBG,QAAM,WAkvBV,UAAU,GAAA,oBAAC,WAAU,EAAE;AACrB,QAAI,WAAU,KAAK,SAAS,EAAE;;AAE5B,UAAI,IAAI,CAAC,WAAW,KAAK,WAAU,EAAE;AACnC,YAAI,CAAC,WAAW,GAAG,WAAU,CAAC;AAC9B,YAAI,WAAU,EAAE;AACd,cAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;;AAEjC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC3B,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;SACrC;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;GAC3B;;;;;;;;;AAlwBG,QAAM,WA0wBV,eAAe,GAAA,2BAAG;AAChB,QAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC9B,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;;;;AAI7B,QAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;AAEtB,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;GACtB;;;;;;;;;AApxBG,QAAM,WA4xBV,kBAAkB,GAAA,8BAAG;;;AACnB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxB,QAAI,CAAC,GAAG,CAAC,YAAY,EAAE;aAAM,OAAK,WAAW,CAAC,aAAa,CAAC;KAAA,CAAC,CAAC;GAC/D;;;;;;;;;;AAhyBG,QAAM,WAyyBV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;;AA5yBG,QAAM,WAqzBV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;;AAxzBG,QAAM,WAi0BV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AAp0BG,QAAM,WA40BV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AA/0BG,QAAM,WAu1BV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;GACxB;;;;;;;;;;;;AA11BG,QAAM,WAq2BV,oBAAoB,GAAA,gCAAG;;;AAGrB,QAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAC;AACzB,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC3C;;AAED,QAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;GAC3B;;;;;;;;;AA92BG,QAAM,WAs3BV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AA13BG,QAAM,WAk4BV,mBAAmB,GAAA,+BAAG;AACpB,QAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;GAC1B;;;;;;;;;AAp4BG,QAAM,WA44BV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3B,QAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB,UAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,KAAK,EAAE,CAAC;KACd;;AAED,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AAt5BG,QAAM,WA85BV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;GAC1C;;;;;;;;;;AAh6BG,QAAM,WAy6BV,gBAAgB,GAAA,0BAAC,KAAK,EAAE;;;AAGtB,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;;;AAI/B,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAI,CAAC,IAAI,EAAE,CAAC;OACb,MAAM;AACL,YAAI,CAAC,KAAK,EAAE,CAAC;OACd;KACF;GACF;;;;;;;;;;AAv7BG,QAAM,WAg8BV,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;GACrC;;;;;;;;;AAl8BG,QAAM,WA08BV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;GACxC;;;;;;;;;AA58BG,QAAM,WAo9BV,oBAAoB,GAAA,gCAAG;AACrB,QAAI,IAAI,CAAC,aAAa,EAAC;AACrB,UAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;GACF;;;;;;;;;AAx9BG,QAAM,WAg+BV,mBAAmB,GAAA,6BAAC,KAAK,EAAE;;AAEzB,SAAK,CAAC,cAAc,EAAE,CAAC;GACxB;;;;;;;;;AAn+BG,QAAM,WA2+BV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,UAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;KACjC,MAAM;AACL,UAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;KACpC;GACF;;;;;;;;;;AAj/BG,QAAM,WA0/BV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,kBAAkB,EAAE,CAAC;GAC3B;;;;;;;;;AA5/BG,QAAM,WAogCV,2BAA2B,GAAA,qCAAC,KAAK,EAAE,IAAI,EAAE;AACvC,QAAI,IAAI,EAAE;AACR,UAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACtC;AACD,QAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;GAClC;;;;;;;;;AAzgCG,QAAM,WAihCV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;GACnB;;;;;;;;;AAphCG,QAAM,WA4hCV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AA9hCG,QAAM,WAsiCV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AAxiCG,QAAM,WAgjCV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AAljCG,QAAM,WA0jCV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AA5jCG,QAAM,WAokCV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;AAtkCG,QAAM,WA8kCV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AAhlCG,QAAM,WAwlCV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AA1lCG,QAAM,WAkmCV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AApmCG,QAAM,WA4mCV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;GAC9B;;;;;;;;;AA9mCG,QAAM,WAsnCV,0BAA0B,GAAA,sCAAG;AAC3B,QAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;GACjC;;;;;;;;;AAxnCG,QAAM,WAgoCV,QAAQ,GAAA,oBAAG;AACT,WAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;;;;;;;;AAloCG,QAAM,WA4oCV,SAAS,GAAA,mBAAC,MAAM,EAAE,GAAG,EAAE;;AAErB,QAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACtC,UAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAU;AACzB,YAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;OACnB,EAAE,IAAI,CAAC,CAAC;;;KAGV,MAAM;AACL,YAAI;AACF,cAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,CAAC,OAAM,CAAC,EAAE;AACT,kCAAI,CAAC,CAAC,CAAC;AACP,gBAAM,CAAC,CAAC;SACT;OACF;GACF;;;;;;;;;;;AA5pCG,QAAM,WAsqCV,QAAQ,GAAA,kBAAC,MAAM,EAAE;AACf,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;;;;;AAKrC,UAAI;AACF,eAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;OAC7B,CAAC,OAAM,CAAC,EAAE;;AAET,YAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACpC,iDAAiB,MAAM,gCAA2B,IAAI,CAAC,SAAS,4BAAyB,CAAC,CAAC,CAAC;SAC7F,MAAM;;AAEL,cAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1B,mDAAiB,MAAM,wBAAmB,IAAI,CAAC,SAAS,oCAAiC,CAAC,CAAC,CAAC;AAC5F,gBAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;WAC7B,MAAM;AACL,oCAAI,CAAC,CAAC,CAAC;WACR;SACF;AACD,cAAM,CAAC,CAAC;OACT;KACF;;AAED,WAAO;GACR;;;;;;;;;;;;AAhsCG,QAAM,WA2sCV,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AA9sCG,QAAM,WAytCV,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AA5tCG,QAAM,WAwuCV,MAAM,GAAA,kBAAG;;AAEP,WAAO,AAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAI,KAAK,GAAG,IAAI,CAAC;GAC3D;;;;;;;;;;;;AA3uCG,QAAM,WAsvCV,SAAS,GAAA,mBAAC,WAAW,EAAE;AACrB,QAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,UAAI,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;;AAEhC,UAAI,WAAW,EAAE;AACf,YAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;OAChC,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;OACnC;;AAED,aAAO,IAAI,CAAC;KACb;;AAED,WAAO,IAAI,CAAC,UAAU,CAAC;GACxB;;;;;;;;;;;;;;;;;AApwCG,QAAM,WAoxCV,WAAW,GAAA,qBAAC,OAAO,EAAE;AACnB,QAAI,OAAO,KAAK,SAAS,EAAE;;AAEzB,UAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;;AAE1C,aAAO,IAAI,CAAC;KACb;;;;;;;;AAQD,WAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,AAAC,CAAC;GACtE;;;;;;;;;;;;;;;;AAnyCG,QAAM,WAkzCV,QAAQ,GAAA,kBAAC,OAAO,EAAE;AAChB,QAAI,OAAO,KAAK,SAAS,EAAE;AACzB,aAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;KAClC;;AAED,WAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;AAGnC,QAAI,OAAO,GAAG,CAAC,EAAE;AACf,aAAO,GAAG,QAAQ,CAAC;KACpB;;AAED,QAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;AAEpC,UAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;;AAE/B,UAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;OAC3B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;OAC9B;;AAED,UAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAChC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AA50CG,QAAM,WAw1CV,aAAa,GAAA,yBAAG;AACd,WAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;GAC7C;;;;;;;;;;;;;;;;;;;;;;;;;AA11CG,QAAM,WAk3CV,QAAQ,GAAA,oBAAG;AACT,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;;AAEzC,QAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjC,cAAQ,GAAG,mCAAgB,CAAC,EAAC,CAAC,CAAC,CAAC;KACjC;;AAED,WAAO,QAAQ,CAAC;GACjB;;;;;;;;;;;;;;AA13CG,QAAM,WAu4CV,eAAe,GAAA,2BAAG;AAChB,WAAO,+BAAgB,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;GAC1D;;;;;;;;;;AAz4CG,QAAM,WAk5CV,WAAW,GAAA,uBAAG;AACZ,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1B,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;;AAE1C,QAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,SAAG,GAAG,QAAQ,CAAC;KAChB;;AAED,WAAO,GAAG,CAAC;GACZ;;;;;;;;;;;;;;;;;;AA55CG,QAAM,WA66CV,MAAM,GAAA,gBAAC,gBAAgB,EAAE;AACvB,QAAI,GAAG,YAAA,CAAC;;AAER,QAAI,gBAAgB,KAAK,SAAS,EAAE;AAClC,SAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7D,UAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AACzB,UAAI,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;;AAEjC,aAAO,IAAI,CAAC;KACb;;;AAGD,OAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,WAAO,AAAC,KAAK,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,GAAG,CAAC;GAC/B;;;;;;;;;;;;;;;;;AA37CG,QAAM,WA48CV,KAAK,GAAA,eAAC,MAAK,EAAE;AACX,QAAI,MAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAK,CAAC,CAAC;AAClC,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;GACxC;;;;;;;;;;;AAl9CG,QAAM,WA49CV,kBAAkB,GAAA,8BAAG;AACnB,WAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC;GACrD;;;;;;;;;;;;;;;;;;;;AA99CG,QAAM,WAi/CV,YAAY,GAAA,sBAAC,IAAI,EAAE;AACjB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;AAC5B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;GAC7B;;;;;;;;;;;;;;;;;;AAv/CG,QAAM,WAwgDV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,KAAK,+BAAgB,CAAC;;AAE1B,QAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;AAExB,QAAI,KAAK,CAAC,iBAAiB,EAAE;;;;;;;;;AAS3B,YAAM,CAAC,EAAE,8BAAW,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,wBAAwB,CAAC,CAAC,EAAC;AAC5F,YAAI,CAAC,YAAY,CAAC,4BAAS,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;;;AAGrD,YAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;AACjC,gBAAM,CAAC,GAAG,8BAAW,KAAK,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;SACxE;;AAED,YAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;OAClC,CAAC,CAAC,CAAC;;AAEJ,UAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;KAErC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE;;;AAG1C,UAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;KACnC,MAAM;;;AAGL,UAAI,CAAC,eAAe,EAAE,CAAC;AACvB,UAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;KAClC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AA/iDG,QAAM,WA0jDV,cAAc,GAAA,0BAAG;AACf,QAAI,KAAK,+BAAgB,CAAC;AAC1B,QAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;;AAGzB,QAAI,KAAK,CAAC,iBAAiB,EAAE;AAC3B,kCAAS,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;KAClC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE;AAC3C,UAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;KACjC,MAAM;AACN,UAAI,CAAC,cAAc,EAAE,CAAC;AACtB,UAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AAzkDG,QAAM,WAglDV,eAAe,GAAA,2BAAG;AAChB,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;;AAGzB,QAAI,CAAC,eAAe,GAAG,4BAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;;;AAG/D,UAAM,CAAC,EAAE,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;;;AAGvE,gCAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;;;AAGnD,OAAG,CAAC,UAAU,CAAC,4BAAS,IAAI,EAAE,iBAAiB,CAAC,CAAC;;AAEjD,QAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;GACjC;;;;;;;;;AAhmDG,QAAM,WAwmDV,kBAAkB,GAAA,4BAAC,KAAK,EAAE;AACxB,QAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;AACxB,UAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;AAChC,YAAI,CAAC,cAAc,EAAE,CAAC;OACvB,MAAM;AACL,YAAI,CAAC,cAAc,EAAE,CAAC;OACvB;KACF;GACF;;;;;;;;AAhnDG,QAAM,WAunDV,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,UAAM,CAAC,GAAG,8BAAW,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;AAGzD,gCAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;;;AAG/D,OAAG,CAAC,aAAa,CAAC,4BAAS,IAAI,EAAE,iBAAiB,CAAC,CAAC;;;;AAIpD,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;;AApoDG,QAAM,WA6oDV,WAAW,GAAA,qBAAC,IAAI,EAAE;AAChB,QAAI,GAAG,YAAA,CAAC;;;AAGR,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,UAAI,QAAQ,GAAG,gCAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,UAAI,IAAI,GAAG,wBAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;;;;AAIlC,UAAI,CAAC,IAAI,EAAE;AACT,YAAI,GAAG,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;OACzC;;;AAGD,UAAI,CAAC,IAAI,EAAE;AACT,gCAAI,KAAK,WAAS,QAAQ,uEAAoE,CAAC;AAC/F,iBAAS;OACV;;;AAGD,UAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,WAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;AAE7B,YAAI,GAAG,EAAE;AACP,iBAAO,GAAG,CAAC;SACZ;OACF;KACF;;AAED,WAAO,EAAE,CAAC;GACX;;;;;;;;;;;;AA5qDG,QAAM,WAurDV,YAAY,GAAA,sBAAC,OAAO,EAAE;;;;;AAGpB,QAAI,KAAK,GACP,IAAI,CAAC,QAAQ,CAAC,SAAS,CACpB,GAAG,iCAAa,CAChB,GAAG,CAAC,UAAC,QAAQ,EAAK;;;;AAIjB,aAAO,CAAC,QAAQ,EAAE,wBAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/E,CAAC,CACD,MAAM,CAAC,UAAC,IAAgB,EAAK;UAApB,QAAQ,GAAT,IAAgB;UAAL,IAAI,GAAf,IAAgB;;;AAEvB,UAAI,IAAI,EAAE;;AAER,eAAO,IAAI,CAAC,WAAW,EAAE,CAAC;OAC3B;;AAED,8BAAI,KAAK,WAAS,QAAQ,uEAAoE,CAAC;AAC/F,aAAO,KAAK,CAAC;KACd,CAAC,CAAC;;;;;AAKP,QAAI,8BAA8B,GAAG,SAAjC,8BAA8B,CAAa,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;AAC7E,UAAI,KAAK,YAAA,CAAC;;AAEV,gBAAU,CAAC,IAAI,CAAC,UAAC,WAAW,EAAK;AAC/B,eAAO,UAAU,CAAC,IAAI,CAAC,UAAC,WAAW,EAAK;AACtC,eAAK,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;;AAEzC,cAAI,KAAK,EAAE;AACT,mBAAO,IAAI,CAAC;WACb;SACF,CAAC,CAAC;OACJ,CAAC,CAAC;;AAEH,aAAO,KAAK,CAAC;KACd,CAAC;;AAEF,QAAI,kBAAkB,YAAA,CAAC;AACvB,QAAI,IAAI,GAAG,SAAP,IAAI,CAAI,EAAE;aAAK,UAAC,CAAC,EAAE,CAAC;eAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;OAAA;KAAA,CAAC;AACtC,QAAI,MAAM,GAAG,SAAT,MAAM,CAAI,KAAgB,EAAE,MAAM,EAAK;UAA5B,QAAQ,GAAT,KAAgB;UAAL,IAAI,GAAf,KAAgB;;AAC5B,UAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAK,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;AACrE,eAAO,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;OACzC;KACF,CAAC;;;;AAIF,QAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;;AAE7B,wBAAkB,GAAG,8BAA8B,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACnF,MAAM;;AAEL,wBAAkB,GAAG,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;KAC7E;;AAED,WAAO,kBAAkB,IAAI,KAAK,CAAC;GACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AApvDG,QAAM,WAsxDV,GAAG,GAAA,aAAC,MAAM,EAAE;AACV,QAAI,MAAM,KAAK,SAAS,EAAE;AACxB,aAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC7B;;AAED,QAAI,WAAW,GAAG,wBAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAG/C,QAAI,CAAC,WAAW,EAAE;AAChB,iBAAW,GAAG,yBAAU,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACtD;;;AAGD,QAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,UAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;KAG1B,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;AAErC,YAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;;;OAG3B,MAAM,IAAI,MAAM,YAAY,MAAM,EAAE;;;AAGnC,cAAI,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;;;AAGlG,gBAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;WAC5B,MAAM;AACL,gBAAI,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC7B,gBAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;;AAGtC,gBAAI,CAAC,KAAK,CAAC,YAAU;;;;;;AAMnB,kBAAI,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACrD,oBAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;eACrC,MAAM;AACL,oBAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;eACnC;;AAED,kBAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,EAAE;AACpC,oBAAI,CAAC,IAAI,EAAE,CAAC;eACb;;AAED,kBAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC1B,oBAAI,CAAC,IAAI,EAAE,CAAC;eACb;;;aAGF,EAAE,IAAI,CAAC,CAAC;WACV;SACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AAl1DG,QAAM,WA21DV,WAAW,GAAA,qBAAC,OAAO,EAAE;AACnB,QAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;AAE5C,QAAI,UAAU,EAAE;AACd,UAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;;AAEtC,YAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;OAC7B,MAAM;;AAEL,YAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;OACpD;KACF,MAAM;;AAEL,UAAI,CAAC,UAAU,CAAE,YAAW;AAC1B,YAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;OACpF,EAAE,CAAC,CAAC,CAAC;;;;AAIN,UAAI,CAAC,YAAY,EAAE,CAAC;KACrB;GACF;;;;;;;;;AAh3DG,QAAM,WAw3DV,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AA33DG,QAAM,WAo4DV,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,SAAS,CAAC,gCAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9D,QAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AAx4DG,QAAM,WAi5DV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;GAC7D;;;;;;;;;;;AAn5DG,QAAM,WA65DV,WAAW,GAAA,uBAAG;AACZ,WAAO,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;GAChC;;;;;;;;;;;AA/5DG,QAAM,WAy6DV,OAAO,GAAA,iBAAC,KAAK,EAAE;AACb,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACpC,UAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;GACjC;;;;;;;;;;;AAh7DG,QAAM,WA07DV,QAAQ,GAAA,kBAAC,KAAK,EAAE;AACd,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACrC,UAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;GACzC;;;;;;;;;;;AAj8DG,QAAM,WA28DV,IAAI,GAAA,cAAC,KAAK,EAAE;AACV,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjC,UAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAC9B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;GAC9B;;;;;;;;;;;;;;;;;;;AAl9DG,QAAM,WAo+DV,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,OAAO,CAAC;KACrB;;;;AAID,QAAI,CAAC,GAAG,EAAE;AACR,SAAG,GAAG,EAAE,CAAC;KACV;;;AAGD,QAAI,CAAC,OAAO,GAAG,GAAG,CAAC;;;AAGnB,QAAI,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;;;AAGjC,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;AAE7B,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;AAz/DG,QAAM,WAsgEV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACpD,UAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;;;AAGzC,UAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KAC9B;GACF;;;;;;;;;;AA7gEG,QAAM,WAshEV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;;AAEd,UAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;AAEtB,YAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,cAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;SACrC;;AAED,YAAI,IAAI,EAAE;AACR,cAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAC1C,cAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACtC,cAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;AAEhC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,gBAAI,CAAC,yBAAyB,EAAE,CAAC;WAClC;SACF,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AACzC,cAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AACvC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;;AAEjC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,gBAAI,CAAC,4BAA4B,EAAE,CAAC;WACrC;SACF;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;GACzB;;;;;;;;;;;;;;;AAtjEG,QAAM,WAokEV,mBAAmB,GAAA,6BAAC,IAAI,EAAE;AACxB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;;AAEd,UAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,YAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAI,IAAI,EAAE;AACR,cAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;;;;;;;;;;AAU3C,cAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;SACrC,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;;;;;;;;;;AAU9C,cAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;SACrC;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;GACpC;;;;;;;;;;;AAvmEG,QAAM,WAinEV,KAAK,GAAA,eAAC,GAAG,EAAE;AACT,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;KAC5B;;;AAGD,QAAI,GAAG,KAAK,IAAI,EAAE;AAChB,UAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AAClB,UAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC9B,UAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC1B,aAAO,IAAI,CAAC;KACb;;;AAGD,QAAI,GAAG,qCAAsB,EAAE;AAC7B,UAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KACnB,MAAM;AACL,UAAI,CAAC,MAAM,GAAG,8BAAe,GAAG,CAAC,CAAC;KACnC;;;AAGD,QAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;;;AAI3B,4BAAI,KAAK,YAAU,IAAI,CAAC,MAAM,CAAC,IAAI,SAAI,0BAAW,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAGrH,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;AAEtB,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAhpEG,QAAM,WAwpEV,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;GAAE;;;;;;;;;AAxpEtC,QAAM,WAgqEV,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;GAAE;;;;;;;;;;AAhqE1C,QAAM,WAyqEV,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;GAAE;;;;;;;;;AAzqE5C,QAAM,WAirEV,kBAAkB,GAAA,4BAAC,KAAK,EAAE;AACxB,QAAI,CAAC,aAAa,GAAG,IAAI,CAAC;GAC3B;;;;;;;;;;AAnrEG,QAAM,WA4rEV,UAAU,GAAA,oBAAC,IAAI,EAAE;AACf,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AACd,UAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAI,IAAI,EAAE;;;AAGR,cAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,cAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,cAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACjC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAC5B,MAAM;;;AAGL,cAAI,CAAC,aAAa,GAAG,KAAK,CAAC;;;;;;;;;;AAU3B,cAAG,IAAI,CAAC,KAAK,EAAE;AACb,gBAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,UAAS,CAAC,EAAC;AACrC,eAAC,CAAC,eAAe,EAAE,CAAC;AACpB,eAAC,CAAC,cAAc,EAAE,CAAC;aACpB,CAAC,CAAC;WACJ;;AAED,cAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AACpC,cAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACnC,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SAC9B;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,WAAW,CAAC;GACzB;;;;;;;;;AApuEG,QAAM,WA4uEV,sBAAsB,GAAA,kCAAG;AACvB,QAAI,eAAe,YAAA;QAAE,SAAS,YAAA;QAAE,SAAS,YAAA,CAAC;;AAE1C,QAAI,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;AAE5D,QAAI,eAAe,GAAG,SAAlB,eAAe,CAAY,CAAC,EAAE;;;AAGhC,UAAG,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE;AACrD,iBAAS,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB,iBAAS,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB,sBAAc,EAAE,CAAC;OAClB;KACF,CAAC;;AAEF,QAAI,eAAe,GAAG,SAAlB,eAAe,GAAc;AAC/B,oBAAc,EAAE,CAAC;;;;AAIjB,UAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;;;;AAIpC,qBAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;KACzD,CAAC;;AAEF,QAAI,aAAa,GAAG,SAAhB,aAAa,CAAY,KAAK,EAAE;AAClC,oBAAc,EAAE,CAAC;;AAEjB,UAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;KACrC,CAAC;;;AAGF,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACtC,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACtC,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;;;AAIlC,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;;;;;;;AAOjC,QAAI,iBAAiB,YAAA,CAAC;AACtB,QAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,YAAW;;AAE9C,UAAI,IAAI,CAAC,aAAa,EAAE;;AAEtB,YAAI,CAAC,aAAa,GAAG,KAAK,CAAC;;;AAG3B,YAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;;AAGtB,YAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;;AAErC,YAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACjD,YAAI,OAAO,GAAG,CAAC,EAAE;;;AAGf,2BAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;;;;AAI9C,gBAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,kBAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B;WACF,EAAE,OAAO,CAAC,CAAC;SACb;OACF;KACF,EAAE,GAAG,CAAC,CAAC;GACT;;;;;;;;;;;;;;AAxzEG,QAAM,WAq0EV,YAAY,GAAA,sBAAC,IAAI,EAAE;AACjB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACxC,aAAO,IAAI,CAAC;KACb;;AAED,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;AACpD,aAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KACtC,MAAM;AACL,aAAO,GAAG,CAAC;KACZ;GACF;;;;;;;;;;;;AAh1EG,QAAM,WA21EV,OAAO,GAAA,iBAAC,IAAI,EAAE;AACZ,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;AACvB,aAAO,IAAI,CAAC;KACb;;AAED,WAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;GACxB;;;;;;;;;;;;;;;;;;;;;;;AAl2EG,QAAM,WAw3EV,YAAY,GAAA,wBAAG;AACb,WAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;GACtC;;;;;;;;;;;;;;;;;;;;;;;;;;AA13EG,QAAM,WAm5EV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;GACpC;;;;;;;;;;AAr5EG,QAAM,WA85EV,WAAW,GAAA,uBAAG;;;AAGZ,QAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,UAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,yCAAoB,CAAC;AAC9D,aAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;AAED,WAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;GACjC;;;;;;;;;;AAv6EG,QAAM,WAg7EV,WAAW,GAAA,uBAAG;;;AAGZ,QAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,UAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,yCAAoB,CAAC;AAC9D,aAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;AAED,WAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;GACjC;;;;;;;;;;;;;;;;;;AAz7EG,QAAM,WA08EV,UAAU,GAAA,sBAAG;;;AAGX,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;GACjD;;;;;;;;;AA98EG,QAAM,WAs9EV,gBAAgB,GAAA,4BAAG;AACjB,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;GACvD;;;;;;;;;AAx9EG,QAAM,WAg+EV,kBAAkB,GAAA,8BAAG;AACnB,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;GACzD;;;;;;;;;;;;;AAl+EG,QAAM,WA8+EV,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACxE;;;;;;;;;AAh/EG,QAAM,WAw/EV,kBAAkB,GAAA,4BAAC,OAAO,EAAE;AAC1B,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC;GAChE;;;;;;;;;;;AA1/EG,QAAM,WAogFV,qBAAqB,GAAA,iCAA8B;sEAAJ,EAAE;;4BAA1B,KAAK;QAAL,KAAK,+BAAG,SAAS,CAAC,CAAC,CAAC;;AACzC,QAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1D;;;;;;;;;AAtgFG,QAAM,WA8gFV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;GAC5E;;;;;;;;;AAhhFG,QAAM,WAwhFV,WAAW,GAAA,uBAAG;AACZ,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;GAC9E;;;;;;;;;;;;;;;;;;;;;AA1hFG,QAAM,WA8iFV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;AAED,QAAI,CAAC,SAAS,GAAG,CAAC,EAAE,GAAC,IAAI,CAAA,CAAE,WAAW,EAAE,CAAC;AACzC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AArjFG,QAAM,WA+jFV,SAAS,GAAA,qBAAG;AACV,WAAQ,iCAAa,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;GAC5E;;;;;;;;;AAjkFG,QAAM,WAykFV,MAAM,GAAA,kBAAG;AACP,QAAI,OAAO,GAAG,iCAAa,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;AAE5B,WAAO,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;AAGtB,WAAK,GAAG,iCAAa,KAAK,CAAC,CAAC;AAC5B,WAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AACzB,aAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;KAC3B;;AAED,WAAO,OAAO,CAAC;GAChB;;;;;;;;;;;;;;;;;;;AAzlFG,QAAM,WA2mFV,WAAW,GAAA,qBAAC,OAAO,EAAE,OAAO,EAAE;AAC5B,QAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,WAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,WAAO,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAEhC,QAAI,KAAK,GAAG,6BAAgB,MAAM,EAAE,OAAO,CAAC,CAAC;;AAE7C,UAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvB,SAAK,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AAC7B,YAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B,CAAC,CAAC;;AAEH,WAAO,KAAK,CAAC,IAAI,EAAE,CAAC;GACrB;;;;;;;;;;;AAznFG,QAAM,CAmoFH,cAAc,GAAA,wBAAC,GAAG,EAAE;AACzB,QAAI,WAAW,GAAG;AAChB,eAAS,EAAE,EAAE;AACb,cAAQ,EAAE,EAAE;KACb,CAAC;;AAEF,QAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;;;AAG3C,QAAI,SAAS,KAAK,IAAI,EAAC;;;4BAGD,gCAAe,SAAS,IAAI,IAAI,CAAC;;UAA9C,GAAG;UAAE,IAAI;;AAChB,UAAI,GAAG,EAAE;AACP,gCAAI,KAAK,CAAC,GAAG,CAAC,CAAC;OAChB;AACD,gCAAO,UAAU,EAAE,IAAI,CAAC,CAAC;KAC1B;;AAED,8BAAO,WAAW,EAAE,UAAU,CAAC,CAAC;;;AAGhC,QAAI,GAAG,CAAC,aAAa,EAAE,EAAE;AACvB,UAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEhC,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAE1B,YAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC/C,YAAI,SAAS,KAAK,QAAQ,EAAE;AAC1B,qBAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE;AAChC,qBAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;SACrD;OACF;KACF;;AAED,WAAO,WAAW,CAAC;GACpB;;SA1qFG,MAAM;;;AAmrFZ,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;;AAEpB,IAAI,SAAS,GAAG,0BAAO,SAAS,CAAC;;;;;;;;;AASjC,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;;AAE1B,WAAS,EAAE,CAAC,OAAO,EAAC,OAAO,CAAC;;;AAG5B,OAAK,EAAE,EAAE;AACT,OAAK,EAAE,EAAE;;;AAGT,eAAa,EAAE,IAAI;;;AAGnB,mBAAiB,EAAE,IAAI;;;AAGvB,eAAa,EAAE,EAAE;;;;;AAKjB,UAAQ,EAAE,CACR,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,CACpB;;AAED,UAAQ,EAAE,4BAAS,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;;;AAGhL,WAAS,EAAE,EAAE;;;AAGb,qBAAmB,EAAE,gDAAgD;CACtE,CAAC;;;;;;;AAOF,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC;;;;;;;AAOvC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;;;;;;;;;AASrC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;;;AAOlC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;;;;;;;AAOrC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;;AAE9B,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,YAAW;AAC9C,MAAI,IAAI,GAAG,4BAAS,aAAa,CAAC,GAAG,CAAC,CAAC;;;;AAIvC,SAAO,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,IAC1B,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAC/B,cAAc,IAAI,IAAI,CAAC,KAAK,IAC5B,aAAa,IAAI,IAAI,CAAC,KAAK,IAC3B,aAAa,IAAI,IAAI,CAAC,KAAK,CAAA,sCAAuC,CAAC;CAC5E,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;;;;;wBCv2FF,aAAa;;;;;;;;;;;AAShC,IAAI,MAAM,GAAG,SAAT,MAAM,CAAY,IAAI,EAAE,IAAI,EAAC;AAC/B,wBAAO,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B,CAAC;;qBAEa,MAAM;;;;;;;;;;;;;;;;;;;oCCbU,2BAA2B;;;;2BACpC,iBAAiB;;;;uBACrB,YAAY;;;;0BACT,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;kCACU,2BAA2B;;;;;;;;;;;;;IAU7C,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAa;QAAX,OAAO,yDAAC,EAAE;;0BAF1B,WAAW;;AAGb,mCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;GACf;;;;;;;;AANG,aAAW,WAaf,MAAM,GAAA,kBAAG;AACP,QAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;;AAE/B,QAAI,IAAI,CAAC,KAAK,EAAE;AACd,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;;AAED,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAErB,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AA5BG,aAAW,WAoCf,WAAW,GAAA,uBAAG,EAAE;;;;;;;;;AApCZ,aAAW,WA4Cf,QAAQ,GAAA,oBAAG;AACT,WAAO,8BAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;GACJ;;;;;;;;;AAhDG,aAAW,WAwDf,aAAa,GAAA,yBAAG;AACd,QAAI,eAAe,GAAG,iBAAiB,CAAC;;;AAGxC,QAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AACjC,qBAAe,IAAI,SAAS,CAAC;KAC9B,MAAM;AACL,qBAAe,IAAI,QAAQ,CAAC;KAC7B;;AAED,gCAA0B,eAAe,SAAI,8BAAM,aAAa,KAAA,MAAE,CAAG;GACtE;;SAnEG,WAAW;;;AAuEjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;2BCvFJ,iBAAiB;;;;0BAClB,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;6BACU,oBAAoB;;IAAhC,MAAM;;;;;;;;;IAQZ,KAAK;YAAL,KAAK;;WAAL,KAAK;0BAAL,KAAK;;;;;;;;;;;;AAAL,OAAK,WAQT,OAAO,GAAA,iBAAC,SAAS,EAAE;AACjB,QAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzB,aAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;AAC5C,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC,CAAC,CAAC;GACL;;;;;;;;;AAbG,OAAK,WAqBT,QAAQ,GAAA,oBAAG;AACT,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC;AACxD,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5C,eAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;AACH,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,YAAM,EAAE,IAAI,CAAC,UAAU;AACvB,eAAS,EAAE,UAAU;KACtB,CAAC,CAAC;AACH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;;AAIhC,UAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,UAAS,KAAK,EAAC;AACpC,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,WAAK,CAAC,wBAAwB,EAAE,CAAC;KAClC,CAAC,CAAC;;AAEH,WAAO,EAAE,CAAC;GACX;;SAxCG,KAAK;;;AA2CX,yBAAU,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC7B,KAAK;;;;;;;;;;;;;;;;;;;oCCvDW,0BAA0B;;;;2BACnC,gBAAgB;;;;yBAClB,eAAe;;IAAvB,EAAE;;0BACO,gBAAgB;;IAAzB,GAAG;;8BACU,oBAAoB;;IAAjC,OAAO;;;;;;;;;;;IAUb,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAC;0BAFxB,WAAW;;AAGb,mCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;AACd,UAAM,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;GACvD;;;;;;;;AAPG,aAAW,WAcf,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,kCAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AAjBG,aAAW,WAyBf,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,YAAY;;;AAGvB,cAAQ,EAAE,CAAC,CAAC;KACb,CAAC,CAAC;;;;;;AAMH,QAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;AACtC,UAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,QAAE,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACnC;;AAED,WAAO,EAAE,CAAC;GACX;;;;;;;;AA3CG,aAAW,WAkDf,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;;AAEjC,QAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;AAIjB,QAAI,GAAG,EAAE;AACP,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AA9DG,aAAW,WAsEf,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,IAAI,CAAC,YAAY,EAAE;AACrB,UAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;KAC7B,MAAM;AACL,UAAI,eAAe,GAAG,EAAE,CAAC;;;AAGzB,UAAI,GAAG,EAAE;AACP,uBAAe,aAAW,GAAG,OAAI,CAAC;OACnC;;AAED,UAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;KAClD;GACF;;;;;;;;AAnFG,aAAW,WA0Ff,WAAW,GAAA,uBAAG;;;AAGZ,QAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACtB;GACF;;SAlGG,WAAW;;;AAsGjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;6BClHF,mBAAmB;;IAA/B,MAAM;;8BACG,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,OAAO,YAAA,CAAC;;;AAIZ,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAa;;;;;;;;AAQxB,MAAI,IAAI,GAAG,4BAAS,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAClD,MAAI,MAAM,GAAG,4BAAS,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACpD,MAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,MAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,SAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,cAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACxB;GACF;AACD,MAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,SAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,cAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1B;GACF;;;AAGD,MAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnC,SAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,UAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;;;AAI1B,UAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;;;AAGnC,YAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;AACnC,cAAI,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;;;;AAIjD,cAAI,OAAO,KAAK,IAAI,EAAE;;AAEpB,gBAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;WAC/B;SACF;;;OAGF,MAAM;AACL,0BAAgB,CAAC,CAAC,CAAC,CAAC;AACpB,gBAAM;SACP;KACF;;;GAGF,MAAM,IAAI,CAAC,aAAa,EAAE;AACzB,sBAAgB,CAAC,CAAC,CAAC,CAAC;KACrB;CACF,CAAC;;;AAGF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE,GAAG,EAAC;AACxC,MAAI,GAAG,EAAE;AACP,WAAO,GAAG,GAAG,CAAC;GACf;;AAED,YAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;CAC7B,CAAC;;AAEF,IAAI,4BAAS,UAAU,KAAK,UAAU,EAAE;AACtC,eAAa,GAAG,IAAI,CAAC;CACtB,MAAM;AACL,QAAM,CAAC,GAAG,4BAAS,MAAM,EAAE,YAAU;AACnC,iBAAa,GAAG,IAAI,CAAC;GACtB,CAAC,CAAC;CACJ;;AAED,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAc;AACzB,SAAO,aAAa,CAAC;CACtB,CAAC;;QAEO,SAAS,GAAT,SAAS;QAAE,gBAAgB,GAAhB,gBAAgB;QAAE,SAAS,GAAT,SAAS;;;;;;;;;;;;;;;;;;2BC1FzB,iBAAiB;;;;0BAClB,iBAAiB;;IAA1B,GAAG;;4BACI,eAAe;;;;;;;;;;;;;IAU5B,MAAM;YAAN,MAAM;;AAEC,WAFP,MAAM,CAEE,MAAM,EAAE,OAAO,EAAE;0BAFzB,MAAM;;AAGR,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;;AAGhD,QAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;AAExC,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3C,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5C,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAChD;;;;;;;;;;;AAnBG,QAAM,WA6BV,QAAQ,GAAA,kBAAC,IAAI,EAA2B;QAAzB,KAAK,yDAAC,EAAE;QAAE,UAAU,yDAAC,EAAE;;;AAEpC,SAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;AAClD,SAAK,GAAG,0BAAO;AACb,cAAQ,EAAE,CAAC;KACZ,EAAE,KAAK,CAAC,CAAC;;AAEV,cAAU,GAAG,0BAAO;AAClB,YAAM,EAAE,QAAQ;AAChB,qBAAe,EAAE,CAAC;AAClB,qBAAe,EAAE,CAAC;AAClB,qBAAe,EAAE,GAAG;AACpB,cAAQ,EAAE,CAAC;KACZ,EAAE,UAAU,CAAC,CAAC;;AAEf,WAAO,qBAAM,QAAQ,KAAA,OAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;GAChD;;;;;;;;;AA7CG,QAAM,WAqDV,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;;AAErC,SAAK,CAAC,cAAc,EAAE,CAAC;AACvB,OAAG,CAAC,kBAAkB,EAAE,CAAC;;AAEzB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;AAE7B,QAAI,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAChD,QAAI,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5C,QAAI,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAChD,QAAI,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;AAE7C,QAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;GAC7B;;;;;;;;AApEG,QAAM,WA2EV,eAAe,GAAA,2BAAG,EAAE;;;;;;;;AA3EhB,QAAM,WAkFV,aAAa,GAAA,yBAAG;AACd,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;;AAErC,OAAG,CAAC,oBAAoB,EAAE,CAAC;;AAE3B,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;;AAE/B,QAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACjD,QAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,QAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACjD,QAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;AAE9C,QAAI,CAAC,MAAM,EAAE,CAAC;GACf;;;;;;;;AAhGG,QAAM,WAuGV,MAAM,GAAA,kBAAG;;;AAGP,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO;;;;;AAKtB,QAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnB,QAAI,CAAC,GAAG,EAAE,OAAO;;;AAGjB,QAAI,OAAO,QAAQ,KAAK,QAAQ,IAC5B,QAAQ,KAAK,QAAQ,IACrB,QAAQ,GAAG,CAAC,IACZ,QAAQ,KAAK,QAAQ,EAAE;AACrB,cAAQ,GAAG,CAAC,CAAC;KAClB;;;AAGD,QAAI,UAAU,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;;AAGnD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,SAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;KACpC,MAAM;AACL,SAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;KACnC;GACF;;;;;;;;;AAtIG,QAAM,WA8IV,iBAAiB,GAAA,2BAAC,KAAK,EAAC;AACtB,QAAI,QAAQ,GAAG,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,aAAO,QAAQ,CAAC,CAAC,CAAC;KACnB;AACD,WAAO,QAAQ,CAAC,CAAC,CAAC;GACnB;;;;;;;;AApJG,QAAM,WA2JV,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACrE;;;;;;;;;AA7JG,QAAM,WAqKV,cAAc,GAAA,wBAAC,KAAK,EAAE;AACpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AAC5C,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,QAAQ,EAAE,CAAC;KACjB,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AACnD,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;GACF;;;;;;;;AA7KG,QAAM,WAoLV,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACtE;;;;;;;;;;AAtLG,QAAM,WA+LV,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,SAAK,CAAC,wBAAwB,EAAE,CAAC;AACjC,SAAK,CAAC,cAAc,EAAE,CAAC;GACxB;;;;;;;;;;AAlMG,QAAM,WA2MV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;KAChC;;AAED,QAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;;AAExB,QAAI,IAAI,CAAC,SAAS,EAAE;AAClB,UAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;KACtC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;KACxC;;AAED,WAAO,IAAI,CAAC;GACb;;SAzNG,MAAM;;;AA6NZ,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;AC1OrB,SAAS,kBAAkB,CAAC,KAAK,EAAE;AACjC,OAAK,CAAC,gBAAgB,GAAG;AACvB,cAAU,EAAE,KAAK;AACjB,cAAU,EAAE,KAAK;GAClB,CAAC;;AAEF,OAAK,CAAC,eAAe,GAAG,UAAS,UAAU,EAAE,MAAM,EAAE;AACnD,WAAO,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC;GAClC,CAAC;;AAEF,OAAK,CAAC,aAAa,GAAG,UAAS,GAAG,EAAE;AAClC,QAAI,KAAK,GAAG;AACV,gBAAU,EAAE,EAAE;AACd,YAAM,EAAE,EAAE;KACX,CAAC;;AAEF,QAAI,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC;;;;;AAKvB,QAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACtC,QAAI,WAAW,YAAA,CAAC;AAChB,QAAI,OAAO,KAAK,CAAC,CAAC,EAAE;AAClB,iBAAW,GAAG,OAAO,GAAG,CAAC,CAAC;KAC3B,MACI;;AAEH,aAAO,GAAG,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjD,UAAI,OAAO,KAAK,CAAC,EAAE;;AAEjB,eAAO,GAAG,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;OACpC;KACF;AACD,SAAK,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAK,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;AAEtD,WAAO,KAAK,CAAC;GACd,CAAC;;AAEF,OAAK,CAAC,eAAe,GAAG,UAAS,OAAO,EAAE;AACxC,WAAO,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC;GAC1C,CAAC;;;;AAIF,OAAK,CAAC,OAAO,GAAG,mBAAmB,CAAC;;AAEpC,OAAK,CAAC,cAAc,GAAG,UAAS,GAAG,EAAE;AACnC,WAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAChC,CAAC;;;;;;AAMF,OAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC;;;;;;;AAO7B,OAAK,CAAC,iBAAiB,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;AAClD,QAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC/B,aAAO,OAAO,CAAC;KAChB;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;;;;;;;AAQF,OAAK,CAAC,iBAAiB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAE,OAAO,EAAC;AACjE,QAAI,GAAG,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;AAE3D,QAAI,GAAG,EAAE;AACP,aAAO,GAAG,CAAC;KACZ;;AAED,QAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACpC,aAAO,OAAO,CAAC;KAChB;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;;;;;;;;;AAUF,OAAK,CAAC,iBAAiB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC;AACpE,QAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAE/C,QAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/C,QAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;GACxC,CAAC;;;AAGF,OAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;;AAErD,SAAO,KAAK,CAAC;CACd;;qBAEc,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;oBC5GhB,QAAQ;;;;0BACJ,iBAAiB;;IAA1B,GAAG;;0BACM,iBAAiB;;IAA1B,GAAG;;iCACiB,yBAAyB;;yBAC1B,cAAc;;;;yBACvB,cAAc;;;;4BACjB,eAAe;;;;4BACf,eAAe;;;;AAElC,IAAI,SAAS,GAAG,0BAAO,SAAS,CAAC;;;;;;;;;;IAS3B,KAAK;YAAL,KAAK;;AAEE,WAFP,KAAK,CAEG,OAAO,EAAE,KAAK,EAAC;0BAFvB,KAAK;;AAGP,qBAAM,OAAO,EAAE,KAAK,CAAC,CAAC;;;AAGtB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,CAAC,KAAK,CAAC,YAAU;AACnB,YAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAChC,EAAE,IAAI,CAAC,CAAC;KACV;;;;AAID,QAAI,OAAO,CAAC,SAAS,EAAE;AACrB,UAAI,CAAC,KAAK,CAAC,YAAU;AACnB,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,YAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;OACrC,EAAE,IAAI,CAAC,CAAC;KACV;;;;;;AAMD,8BAAO,OAAO,GAAG,0BAAO,OAAO,IAAI,EAAE,CAAC;AACtC,8BAAO,OAAO,CAAC,KAAK,GAAG,0BAAO,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC7C,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC7C,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAE7C,QAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;AAC3B,UAAI,CAAC,eAAe,GAAG,SAAS,CAAC;KAClC,CAAC,CAAC;GACJ;;;;;;;;;;;AAnCG,OAAK,WA2CT,QAAQ,GAAA,oBAAG;AACT,QAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;;;AAM5B,QAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAChB,aAAO,CAAC,GAAG,GAAG,mDAAmD,CAAC;KACnE;;;AAGD,QAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;;;AAG3B,QAAI,SAAS,GAAG,0BAAO;;;AAGrB,qBAAe,EAAE,uBAAuB;AACxC,0BAAoB,EAAE,uBAAuB;AAC7C,+BAAyB,EAAE,uBAAuB;;;AAGlD,gBAAU,EAAE,OAAO,CAAC,QAAQ;AAC5B,eAAS,EAAE,OAAO,CAAC,OAAO;AAC1B,YAAM,EAAE,OAAO,CAAC,IAAI;AACpB,aAAO,EAAE,OAAO,CAAC,KAAK;;KAEvB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;;;AAGtB,QAAI,MAAM,GAAG,0BAAO;AAClB,aAAO,EAAE,QAAQ;AACjB,eAAS,EAAE,SAAS;KACrB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;;AAGnB,QAAI,UAAU,GAAG,0BAAO;AACtB,UAAI,EAAE,KAAK;AACX,YAAM,EAAE,KAAK;AACb,aAAO,EAAE,UAAU;KACpB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;;AAEvB,QAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACnE,QAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;;AAErB,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;AA1FG,OAAK,WAiGT,IAAI,GAAA,gBAAG;AACL,QAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,UAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;KACxB;AACD,QAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;GACrB;;;;;;;;AAtGG,OAAK,WA6GT,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;GACtB;;;;;;;;;;AA/GG,OAAK,WAwHT,GAAG,GAAA,aAAC,IAAG,EAAE;AACP,QAAI,IAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;;;AAGD,WAAO,IAAI,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC;GACzB;;;;;;;;;;AA/HG,OAAK,WAwIT,MAAM,GAAA,gBAAC,GAAG,EAAE;;AAEV,OAAG,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;;;AAItB,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,IAAI,GAAG,IAAI,CAAC;AAChB,UAAI,CAAC,UAAU,CAAC,YAAU;AAAE,YAAI,CAAC,IAAI,EAAE,CAAC;OAAE,EAAE,CAAC,CAAC,CAAC;KAChD;GACF;;;;;;;AAnJG,OAAK,WAyJT,OAAO,GAAA,mBAAG;AACR,WAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;GAC3C;;;;;;;;;AA3JG,OAAK,WAmKT,cAAc,GAAA,wBAAC,IAAI,EAAE;AACnB,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,QAAI,QAAQ,CAAC,MAAM,EAAE;;AAEnB,UAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3D,UAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;AAE3F,UAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,UAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxB,UAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC9C,sBAAM,cAAc,KAAA,MAAE,CAAC;KACxB;GACF;;;;;;;;;;AA/KG,OAAK,WAwLT,WAAW,GAAA,qBAAC,IAAI,EAAE;;;AAGhB,QAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,aAAO,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;KAClC;AACD,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;GAChD;;;;;;;;AA/LG,OAAK,WAsMT,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,cAAc,EAAE;AACvB,aAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;KAChC,MAAM;AACL,aAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;KAC/C;GACF;;;;;;;;AA5MG,OAAK,WAmNT,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;GACrB;;;;;;;;AArNG,OAAK,WA4NT,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;GACpC;;;;;;;;AA9NG,OAAK,WAqOT,SAAS,GAAA,qBAAG,EAAE;;;;;;;;;AArOV,OAAK,WA6OT,QAAQ,GAAA,oBAAG;AACT,QAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,QAAI,QAAQ,KAAK,CAAC,EAAE;AAClB,aAAO,oCAAiB,CAAC;KAC1B;AACD,WAAO,mCAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;GACrC;;;;;;;;;AAnPG,OAAK,WA2PT,QAAQ,GAAA,oBAAG;AACT,QAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAClD,QAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,aAAO,oCAAiB,CAAC;KAC1B;AACD,WAAO,mCAAgB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACpD;;;;;;;;;;;AAjQG,OAAK,WA2QT,kBAAkB,GAAA,8BAAG;AACnB,WAAO,KAAK,CAAC;GACd;;;;;;;;;;;AA7QG,OAAK,WAuRT,eAAe,GAAA,2BAAG;AAChB,WAAO,KAAK,CAAC;GACd;;SAzRG,KAAK;;;AA+RX,IAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AAC7B,IAAM,UAAU,GAAG,2IAA2I,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1K,IAAM,SAAS,GAAG,kGAAkG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEhI,SAAS,aAAa,CAAC,IAAI,EAAC;AAC1B,MAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAI,CAAC,KAAK,GAAC,SAAS,CAAC,GAAG,UAAS,GAAG,EAAC;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GAAE,CAAC;CACtF;AACD,SAAS,aAAa,CAAC,IAAI,EAAE;AAC3B,MAAI,CAAC,IAAI,CAAC,GAAG,YAAU;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;GAAE,CAAC;CACnE;;;AAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,eAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,eAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B;;;AAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,eAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7B;;;;AAID,KAAK,CAAC,WAAW,GAAG,YAAU;AAC5B,SAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;;CAEjC,CAAC;;;AAGF,kBAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;;;;;;;;;AAS/B,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;;;;;;;AAO/B,KAAK,CAAC,mBAAmB,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;AACpD,MAAI,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB,WAAO,OAAO,CAAC;GAChB;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;AASF,KAAK,CAAC,mBAAmB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAE,OAAO,EAAC;AACnE,MAAI,IAAI,CAAC;;AAET,WAAS,aAAa,CAAC,GAAG,EAAE;AAC1B,QAAI,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACpC,QAAI,GAAG,EAAE;AACP,wBAAgB,GAAG,CAAG;KACvB;AACD,WAAO,EAAE,CAAC;GACX;;AAED,MAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChB,QAAI,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;GAClC,MAAM;;AAEL,QAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;GACrD;;AAED,SAAO,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CACpD,CAAC;;;;;;;;;;;AAWF,KAAK,CAAC,mBAAmB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC;AACtE,MAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACzB,CAAC;;;;;;AAMF,KAAK,CAAC,mBAAmB,CAAC,OAAO,GAAG,YAAU,EAAE,CAAC;;;AAGjD,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;AAEvD,KAAK,CAAC,OAAO,GAAG;AACd,aAAW,EAAE,KAAK;AAClB,eAAa,EAAE,KAAK;AACpB,aAAW,EAAE,KAAK;AAClB,aAAW,EAAE,KAAK;CACnB,CAAC;;AAEF,KAAK,CAAC,OAAO,GAAG,UAAS,OAAO,EAAC;AAC/B,MAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5B,MAAI,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;;;;AAIzB,MAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE;;AAErB,SAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;GACxB;CACF,CAAC;;;;AAIF,KAAK,CAAC,UAAU,GAAG,UAAS,IAAI,EAAC;;AAE/B,MAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;AACd,WAAO;GACR;;;AAGD,MAAI,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE;;AAE7B,QAAI,CAAC,YAAY,EAAE,CAAC;GACrB,MAAM;;AAEL,QAAI,CAAC,UAAU,CAAC,YAAU;AACxB,WAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;KAC3B,EAAE,EAAE,CAAC,CAAC;GACR;CACF,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE,SAAS,EAAC;AACxC,MAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACjC,MAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE,GAAG,EAAC;AAClC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;;;AAGnC,MAAI,GAAG,KAAK,aAAa,EAAE;AACzB,WAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;GACtB;;;AAGD,MAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;CAC7B,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,YAAU;AACxB,MAAI,OAAO,GAAG,OAAO,CAAC;;;AAGtB,MAAI;AACF,WAAO,GAAG,IAAI,0BAAO,aAAa,CAAC,+BAA+B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;;GAGzI,CAAC,OAAM,CAAC,EAAE;AACT,QAAI;AACF,UAAI,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,aAAa,EAAC;AACrE,eAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA,CAAE,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;OACtJ;KACF,CAAC,OAAM,GAAG,EAAE,EAAE;GAChB;AACD,SAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC3B,CAAC;;;AAGF,KAAK,CAAC,KAAK,GAAG,UAAS,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC;AACxD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;;AAGpE,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;AAEnE,SAAO,GAAG,CAAC;CACZ,CAAC;;AAEF,KAAK,CAAC,YAAY,GAAG,UAAS,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC;AAC/D,MAAM,MAAM,GAAG,+CAA+C,CAAC;AAC/D,MAAI,eAAe,GAAG,EAAE,CAAC;AACzB,MAAI,YAAY,GAAG,EAAE,CAAC;AACtB,MAAI,WAAW,GAAG,EAAE,CAAC;;;AAGrB,MAAI,SAAS,EAAE;AACb,UAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AACzD,qBAAe,IAAO,GAAG,SAAI,SAAS,CAAC,GAAG,CAAC,UAAO,CAAC;KACpD,CAAC,CAAC;GACJ;;;AAGD,QAAM,GAAG,0BAAO;AACd,WAAO,EAAE,GAAG;AACZ,eAAW,EAAE,eAAe;AAC5B,uBAAmB,EAAE,QAAQ;AAC7B,qBAAiB,EAAE,KAAK;GACzB,EAAE,MAAM,CAAC,CAAC;;;AAGX,QAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AACtD,gBAAY,sBAAoB,GAAG,iBAAY,MAAM,CAAC,GAAG,CAAC,SAAM,CAAC;GAClE,CAAC,CAAC;;AAEH,YAAU,GAAG,0BAAO;;AAElB,UAAM,EAAE,GAAG;;;AAGX,WAAO,EAAE,MAAM;AACf,YAAQ,EAAE,MAAM;;GAEjB,EAAE,UAAU,CAAC,CAAC;;;AAGf,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AAC1D,eAAW,IAAO,GAAG,UAAK,UAAU,CAAC,GAAG,CAAC,OAAI,CAAC;GAC/C,CAAC,CAAC;;AAEH,cAAU,MAAM,GAAG,WAAW,SAAI,YAAY,eAAY;CAC3D,CAAC;;;AAGF,uBAAmB,KAAK,CAAC,CAAC;;AAE1B,uBAAU,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,kBAAK,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBACnB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;sBCpiBH,WAAW;;;;yBACN,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;0BACM,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;oBAChB,MAAM;;;;sCACD,sCAAsC;;;;8BACnC,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;4BACnB,eAAe;;;;4BACf,eAAe;;;;mCACT,2BAA2B;;;;kCAC5B,2BAA2B;;;;;;;;;;;;;IAU7C,KAAK;YAAL,KAAK;;AAEE,WAFP,KAAK,CAEG,OAAO,EAAE,KAAK,EAAC;;;0BAFvB,KAAK;;AAGP,qBAAM,OAAO,EAAE,KAAK,CAAC,CAAC;;AAEtB,QAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9B,QAAI,iBAAiB,GAAG,KAAK,CAAC;;;;;;AAM9B,QAAI,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,GAAG,IAAK,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,CAAC,AAAC,EAAE;AAC1G,UAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB,MAAM;AACL,UAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC;;AAED,QAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE;;AAE5B,UAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAChC,UAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;AAC/B,UAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,aAAO,WAAW,EAAE,EAAE;AACpB,YAAI,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;AAC9B,YAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;AAE3C,YAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,cAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;;;;;AAKlC,uBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;WACxB,MAAM;;AAEL,gBAAI,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACjD,gBAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAI,CAAC,iBAAiB,IAClB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,IACrC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC/B,+BAAiB,GAAG,IAAI,CAAC;aAC1B;WACF;SACF;OACF;;AAED,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;OACtC;KACF;;AAED,QAAI,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;;AAGpC,cAAU,CAAC,OAAO,CAAC,UAAC,IAAI,EAAK;AAC3B,UAAI,WAAW,GAAG,gCAAY,IAAI,CAAC,CAAC;;AAEpC,UAAI,CAAC,yBAAsB,WAAW,YAAS,EAAE;AAC/C,eAAO;OACR;AACD,UAAI,EAAE,GAAG,MAAK,EAAE,EAAE,CAAI,IAAI,YAAS,CAAC;;AAEpC,UAAI,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE;AAC7B,UAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAO,iBAAc,WAAW,kBAAe,CAAC,CAAC,CAAC;AACvF,UAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,QAAO,iBAAc,WAAW,eAAY,CAAC,CAAC,CAAC;AACtF,UAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,QAAO,iBAAc,WAAW,kBAAe,CAAC,CAAC,CAAC;OAC7F;KACF,CAAC,CAAC;;AAEH,QAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,UAAI,iBAAiB,EAAE;AACrB,gCAAI,IAAI,oCACwC,CAAC;OAClD;;AAED,UAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACxE,UAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClE,UAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACxE,UAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;;;;AAMD,QAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,sBAAsB,KAAK,IAAI,IAChE,OAAO,CAAC,SAAS,IACjB,OAAO,CAAC,iBAAiB,EAAE;AAC7B,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACxB;;AAED,QAAI,CAAC,YAAY,EAAE,CAAC;GACrB;;;;;;;;;;;;;;;;;;AA9FG,OAAK,WAqGT,OAAO,GAAA,mBAAG;;;;AAER,KAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAK;AAC3C,UAAI,WAAW,GAAG,gCAAY,IAAI,CAAC,CAAC;AACpC,UAAI,EAAE,GAAG,OAAK,GAAG,CAAI,IAAI,YAAS,CAAC;;AAEnC,UAAI,EAAE,IAAI,EAAE,CAAC,mBAAmB,EAAE;AAChC,UAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,kBAAc,WAAW,kBAAe,CAAC,CAAC;AAC3E,UAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,kBAAc,WAAW,eAAY,CAAC,CAAC;AAC1E,UAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,kBAAc,WAAW,kBAAe,CAAC,CAAC;OACjF;KACF,CAAC,CAAC;;AAEH,SAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEpC,oBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AArHG,OAAK,WA6HT,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;;AAK3B,QAAI,CAAC,EAAE,IAAI,IAAI,CAAC,yBAAyB,CAAC,KAAK,KAAK,EAAE;;;AAGpD,UAAI,EAAE,EAAE;AACN,YAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,UAAE,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACtC,aAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAC9B,UAAE,GAAG,KAAK,CAAC;OACZ,MAAM;AACL,UAAE,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;;AAGrC,YAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChF,YAAI,UAAU,GAAG,iCAAa,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,YAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,KAAK,IAAI,EAAE;AAC3E,iBAAO,UAAU,CAAC,QAAQ,CAAC;SAC5B;;AAED,WAAG,CAAC,eAAe,CAAC,EAAE,EACpB,0BAAO,UAAU,EAAE;AACjB,YAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACxB,mBAAO,UAAU;SAClB,CAAC,CACH,CAAC;OACH;KACF;;;AAGD,QAAI,aAAa,GAAG,CAAC,UAAU,EAAC,SAAS,EAAC,MAAM,EAAC,OAAO,CAAC,CAAC;AAC1D,SAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,UAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9B,UAAI,cAAc,GAAG,EAAE,CAAC;AACxB,UAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;AAC9C,sBAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;OAC5C;AACD,SAAG,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;KACzC;;AAED,WAAO,EAAE,CAAC;;GAEX;;;;;;;AA3KG,OAAK,WAiLT,eAAe,GAAA,yBAAC,EAAE,EAAE;;;AAClB,QAAI,EAAE,CAAC,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE;;;AAGlD,aAAO;KACR;;AAED,QAAI,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;;;;;;;;;;;;AAWvB,YAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,YAAI,iBAAiB,GAAG,SAApB,iBAAiB,GAAc;AACjC,wBAAc,GAAG,IAAI,CAAC;SACvB,CAAC;AACF,eAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;;AAExC,YAAI,gBAAgB,GAAG,SAAnB,gBAAgB,GAAc;;;AAGhC,cAAI,CAAC,cAAc,EAAE;AACnB,gBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;WAC3B;SACF,CAAC;AACF,eAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;;AAE5C,eAAK,KAAK,CAAC,YAAU;AACnB,cAAI,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACzC,cAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;;AAE7C,cAAI,CAAC,cAAc,EAAE;;AAEnB,gBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;WAC3B;SACF,CAAC,CAAC;;AAEH;;UAAO;;;;KACR;;;;;;AAMD,QAAI,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC;;;AAGpC,mBAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;;AAGvC,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACpC;;;AAGD,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;;;AAGD,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACxC;;;AAGD,QAAI,CAAC,KAAK,CAAC,YAAU;AACnB,qBAAe,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;AACpC,YAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;OACpB,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;GACJ;;AA7PG,OAAK,WA+PT,sBAAsB,GAAA,kCAAG;AACvB,QAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;;AAE9B,QAAI,EAAE,EAAE;;;AAGN,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;OACpC;;AAED,UAAI,EAAE,CAAC,gBAAgB,EAAE;AACvB,UAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC3D,UAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC1D,UAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;OACjE;KACF;GACF;;AA/QG,OAAK,WAiRT,qBAAqB,GAAA,+BAAC,CAAC,EAAE;AACvB,QAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3B,QAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AACxB,UAAI,EAAE,QAAQ;AACd,YAAM,EAAE,EAAE;AACV,mBAAa,EAAE,EAAE;AACjB,gBAAU,EAAE,EAAE;KACf,CAAC,CAAC;GACJ;;AAzRG,OAAK,WA2RT,kBAAkB,GAAA,4BAAC,CAAC,EAAE;AACpB,QAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACtC;;AA7RG,OAAK,WA+RT,qBAAqB,GAAA,+BAAC,CAAC,EAAE;AACvB,QAAI,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACzC;;AAjSG,OAAK,WAmST,uBAAuB,GAAA,iCAAC,CAAC,EAAE;AACzB,QAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,QAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;AACzB,UAAI,EAAE,QAAQ;AACd,YAAM,EAAE,EAAE;AACV,mBAAa,EAAE,EAAE;AACjB,gBAAU,EAAE,EAAE;KACf,CAAC,CAAC;GACJ;;AA3SG,OAAK,WA6ST,oBAAoB,GAAA,8BAAC,CAAC,EAAE;AACtB,QAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACvC;;AA/SG,OAAK,WAiTT,uBAAuB,GAAA,iCAAC,CAAC,EAAE;AACzB,QAAI,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1C;;AAnTG,OAAK,WAqTT,uBAAuB,GAAA,iCAAC,CAAC,EAAE;AACzB,QAAI,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;AACzB,UAAI,EAAE,QAAQ;AACd,YAAM,EAAE,cAAc;AACtB,mBAAa,EAAE,cAAc;AAC7B,gBAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;GACJ;;AA7TG,OAAK,WA+TT,oBAAoB,GAAA,8BAAC,CAAC,EAAE;AACtB,QAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACvC;;AAjUG,OAAK,WAmUT,uBAAuB,GAAA,iCAAC,CAAC,EAAE;AACzB,QAAI,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1C;;;;;;;;AArUG,OAAK,WA6UT,IAAI,GAAA,gBAAG;AAAE,QAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GAAE;;;;;;;;AA7UvB,OAAK,WAoVT,KAAK,GAAA,iBAAG;AAAE,QAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;GAAE;;;;;;;;;AApVzB,OAAK,WA4VT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AA5VhC,OAAK,WAoWT,WAAW,GAAA,uBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AApW1C,OAAK,WA4WT,cAAc,GAAA,wBAAC,OAAO,EAAE;AACtB,QAAI;AACF,UAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;KAChC,CAAC,OAAM,CAAC,EAAE;AACT,8BAAI,CAAC,EAAE,gCAAgC,CAAC,CAAC;;KAE1C;GACF;;;;;;;;;AAnXG,OAAK,WA2XT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;GAAE;;;;;;;;;;;AA3XzC,OAAK,WAqYT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AArYpC,OAAK,WA6YT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AA7YhC,OAAK,WAqZT,SAAS,GAAA,mBAAC,gBAAgB,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC;GAAE;;;;;;;;;AArZ/D,OAAK,WA6ZT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;AA7Z9B,OAAK,WAqaT,QAAQ,GAAA,kBAAC,KAAK,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;GAAE;;;;;;;;;AAravC,OAAK,WA6aT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AA7apC,OAAK,WAqbT,MAAM,GAAA,kBAAG;AAAG,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;AArbvC,OAAK,WA6bT,kBAAkB,GAAA,8BAAG;AACnB,QAAI,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,KAAK,UAAU,EAAE;AACxD,UAAI,SAAS,GAAG,0BAAO,SAAS,CAAC,SAAS,CAAC;;AAE3C,UAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxE,eAAO,IAAI,CAAC;OACb;KACF;AACD,WAAO,KAAK,CAAC;GACd;;;;;;;;AAtcG,OAAK,WA6cT,eAAe,GAAA,2BAAG;AAChB,QAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;;AAErB,QAAI,4BAA4B,IAAI,KAAK,EAAE;AACzC,UAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,YAAW;AAC3C,YAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAW;AACzC,cAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3D,CAAC,CAAC;;AAEH,YAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;OAC1D,CAAC,CAAC;KACJ;;AAED,QAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE;;;AAG7D,UAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;;;AAIhB,UAAI,CAAC,UAAU,CAAC,YAAU;AACxB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,aAAK,CAAC,qBAAqB,EAAE,CAAC;OAC/B,EAAE,CAAC,CAAC,CAAC;KACP,MAAM;AACL,WAAK,CAAC,qBAAqB,EAAE,CAAC;KAC/B;GACF;;;;;;;;AAxeG,OAAK,WA+eT,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;GACjC;;;;;;;;;;AAjfG,OAAK,WA0fT,GAAG,GAAA,aAAC,IAAG,EAAE;AACP,QAAI,IAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KACrB,MAAM;;AAEL,UAAI,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC;KAClB;GACF;;;;;;;;;;AAjgBG,OAAK,WA0gBT,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GACpB;;;;;;;;AA5gBG,OAAK,WAmhBT,IAAI,GAAA,gBAAE;AACJ,QAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GACjB;;;;;;;;AArhBG,OAAK,WA4hBT,KAAK,GAAA,iBAAG;AACN,SAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GACnC;;;;;;;;;AA9hBG,OAAK,WAsiBT,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,cAAc,EAAE;AACvB,aAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;KAChC,MAAM;AACL,aAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;KAC5B;GACF;;;;;;;;;AA5iBG,OAAK,WAojBT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AApjBhC,OAAK,WA4jBT,SAAS,GAAA,mBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AA5jBrC,OAAK,WAokBT,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;GAAE;;;;;;;;;AApkBlC,OAAK,WA4kBT,UAAU,GAAA,oBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AA5kBvC,OAAK,WAolBT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AAplBpC,OAAK,WA4lBT,WAAW,GAAA,qBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AA5lBzC,OAAK,WAomBT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AApmBpC,OAAK,WA4mBT,WAAW,GAAA,qBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;GAAE;;;;;;;;;AA5mB3C,OAAK,WAonBT,IAAI,GAAA,gBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;GAAE;;;;;;;;;AApnB5B,OAAK,WA4nBT,OAAO,GAAA,iBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AA5nBjC,OAAK,WAooBT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;AApoB9B,OAAK,WA4oBT,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;GAAE;;;;;;;;;;;AA5oBlC,OAAK,WAspBT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AAtpBpC,OAAK,WA8pBT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;;;AA9pB9B,OAAK,WAwqBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;AAxqB5C,OAAK,WAgrBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;;AAhrB5C,OAAK,WAyrBT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AAzrBhC,OAAK,WAisBT,eAAe,GAAA,yBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;GAAE;;;;;;;;;;;;;;AAjsBjD,OAAK,WA8sBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;;;;;;;;AA9sB5C,OAAK,WA6tBT,UAAU,GAAA,sBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GAAE;;;;;;;;;AA7tBxC,OAAK,WAquBT,UAAU,GAAA,sBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GAAE;;;;;;;;;AAruBxC,OAAK,WA6uBT,WAAW,GAAA,uBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AA7uB1C,OAAK,WAqvBT,UAAU,GAAA,sBAAG;AACX,WAAO,gBAAM,UAAU,KAAA,MAAE,CAAC;GAC3B;;;;;;;;;;;;;AAvvBG,OAAK,WAmwBT,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,YAAY,KAAA,OAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KAClD;;AAED,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACrD;;;;;;;;;;;AAzwBG,OAAK,WAmxBT,kBAAkB,GAAA,8BAAa;QAAZ,OAAO,yDAAC,EAAE;;AAC3B,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,kBAAkB,KAAA,OAAC,OAAO,CAAC,CAAC;KAC1C;;AAED,QAAI,gBAAgB,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEvD,QAAI,OAAO,CAAC,IAAI,EAAE;AAChB,sBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;KACtC;AACD,QAAI,OAAO,CAAC,KAAK,EAAE;AACjB,sBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;KACxC;AACD,QAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE;AACvC,sBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;KAChE;AACD,QAAI,OAAO,WAAQ,EAAE;AACnB,sBAAgB,WAAQ,GAAG,OAAO,WAAQ,CAAC;KAC5C;AACD,QAAI,OAAO,CAAC,EAAE,EAAE;AACd,sBAAgB,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;KAClC;AACD,QAAI,OAAO,CAAC,GAAG,EAAE;AACf,sBAAgB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;KACpC;;AAED,QAAI,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;;;AAGxC,QAAI,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAC7D,QAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;AAE1D,WAAO,gBAAgB,CAAC;GACzB;;;;;;;;;AApzBG,OAAK,WA4zBT,qBAAqB,GAAA,+BAAC,KAAK,EAAE;AAC3B,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,qBAAqB,KAAA,OAAC,KAAK,CAAC,CAAC;KAC3C;;AAED,QAAI,MAAM,YAAA;QAAE,CAAC,YAAA,CAAC;;AAEd,QAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;;;AAG5E,QAAI,CAAC,kBAAkB,EAAE,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC5D,QAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAE5C,UAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;AAE1B,KAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AAClB,WAAO,CAAC,EAAE,EAAE;AACV,UAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACpD,YAAI,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;OAClC;KACF;GACF;;SAj1BG,KAAK;;;AA+1BX,KAAK,CAAC,QAAQ,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AACxB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;;;;;AAOlC,KAAK,CAAC,WAAW,GAAG,YAAU;;AAE5B,MAAI;AACF,SAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;GAChC,CAAC,OAAO,CAAC,EAAE;AACV,WAAO,KAAK,CAAC;GACd;;AAED,SAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;CACrC,CAAC;;;AAGF,oBAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;;;;;;;;;AAS/B,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ/B,KAAK,CAAC,mBAAmB,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;;;AAGpD,MAAI;AACF,WAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;GACzC,CAAC,OAAM,CAAC,EAAE;AACT,WAAO,EAAE,CAAC;GACX;CACF,CAAC;;;;;;;;;AASF,KAAK,CAAC,mBAAmB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAE,OAAO,EAAC;AACnE,MAAI,KAAK,EAAE,GAAG,CAAC;;;AAGf,MAAI,MAAM,CAAC,IAAI,EAAE;AACf,WAAO,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;GAC3D,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE;;AAErB,OAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAEvC,WAAO,KAAK,CAAC,mBAAmB,CAAC,WAAW,YAAU,GAAG,CAAG,CAAC;GAC9D;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;;;AAWF,KAAK,CAAC,mBAAmB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC;AACtE,MAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACzB,CAAC;;;;;;AAMF,KAAK,CAAC,mBAAmB,CAAC,OAAO,GAAG,YAAU,EAAE,CAAC;;;AAGjD,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;;;;;;;;AASvD,KAAK,CAAC,gBAAgB,GAAG,YAAU;AACjC,MAAI,MAAM,GAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,OAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,AAAC,MAAM,GAAG,CAAC,GAAI,GAAG,CAAC;AAC3C,SAAO,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;CACzC,CAAC;;;;;;;AAOF,KAAK,CAAC,sBAAsB,GAAG,YAAU;;;AAGvC,MAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE;AAC3C,WAAO,KAAK,CAAC;GACd;AACD,MAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC/C,OAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,AAAC,YAAY,GAAG,CAAC,GAAI,GAAG,CAAC;AACvD,SAAO,YAAY,KAAK,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;CACrD,CAAC;;;;;;;AAOF,KAAK,CAAC,wBAAwB,GAAG,YAAW;AAC1C,MAAI,kBAAkB,CAAC;;;;;;;AAOvB,oBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;AACjD,MAAI,kBAAkB,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,sBAAkB,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;GAC/E;AACD,MAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE;AAC5C,sBAAkB,GAAG,KAAK,CAAC;GAC5B;AACD,MAAI,kBAAkB,IAAI,EAAE,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA,AAAC,EAAE;AACzE,sBAAkB,GAAG,KAAK,CAAC;GAC5B;;AAED,SAAO,kBAAkB,CAAC;CAC3B,CAAC;;;;;;;AAOF,KAAK,CAAC,yBAAyB,GAAG,YAAW;AAC3C,MAAI,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AACvD,SAAO,mBAAmB,CAAC;CAC5B,CAAC;;;;;;;AAOF,KAAK,CAAC,yBAAyB,GAAG,YAAW;AAC3C,MAAI,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AACvD,SAAO,mBAAmB,CAAC;CAC5B,CAAC;;;;;;;;AASF,KAAK,CAAC,MAAM,GAAG,CACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,OAAO,EACP,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,YAAY,EACZ,cAAc,CACf,CAAC;;;;;;;AAOF,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;;;;;;;AAOpE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;;;;;;;;AAQzE,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;AAO7D,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;;;;;;AAMnD,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC;;;;;;;AAOjD,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,wBAAwB,EAAE,CAAC;;;;;;;AAO/E,KAAK,CAAC,SAAS,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;;;;;;;AAOjF,KAAK,CAAC,SAAS,CAAC,2BAA2B,CAAC,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;;;AAGjF,IAAI,WAAW,YAAA,CAAC;AAChB,IAAM,SAAS,GAAG,2CAA2C,CAAC;AAC9D,IAAM,KAAK,GAAG,cAAc,CAAC;;AAE7B,KAAK,CAAC,gBAAgB,GAAG,YAAW;;AAElC,MAAI,OAAO,CAAC,eAAe,IAAI,GAAG,EAAE;AAClC,QAAI,CAAC,WAAW,EAAE;AAChB,iBAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;KAChE;;AAED,SAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,UAAS,IAAI,EAAE;AAChE,UAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,eAAO,OAAO,CAAC;OAChB;AACD,aAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACrC,CAAC;GACH;;;AAGD,MAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,QAAI,CAAC,WAAW,EAAE;AAChB,iBAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;KAChE;;AAED,SAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;AAC/D,UAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5B,eAAO,OAAO,CAAC;OAChB;AACD,aAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACrC,CAAC;GACH;CACF,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AACpC,MAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;AACzD,OAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/D,aAAW,GAAG,IAAI,CAAC;AACnB,SAAO,CAAC,CAAC;CACV,CAAC;;;AAGF,KAAK,CAAC,gBAAgB,EAAE,CAAC;;AAEzB,KAAK,CAAC,mBAAmB,GAAG,UAAS,EAAE,EAAC;AACtC,MAAI,CAAC,EAAE,EAAE;AAAE,WAAO;GAAE;;AAEpB,MAAI,EAAE,CAAC,UAAU,EAAE;AACjB,MAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;GAC/B;;;AAGD,SAAM,EAAE,CAAC,aAAa,EAAE,EAAE;AACxB,MAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;GAC/B;;;;AAID,IAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;;;AAI1B,MAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE;;AAEjC,KAAC,YAAW;AACV,UAAI;AACF,UAAE,CAAC,IAAI,EAAE,CAAC;OACX,CAAC,OAAO,CAAC,EAAE;;OAEX;KACF,CAAA,EAAG,CAAC;GACN;CACF,CAAC;;AAEF,KAAK,CAAC,iBAAiB,GAAG,UAAS,EAAE,EAAC;AACpC,MAAI,CAAC,EAAE,EAAE;AAAE,WAAO;GAAE;;AAEpB,MAAI,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvB,SAAO,CAAC,EAAE,EAAE;AACV,MAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;GAC5B;;;;AAID,IAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;AAE1B,MAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE;;AAEjC,KAAC,YAAW;AACV,UAAI;AACF,UAAE,CAAC,IAAI,EAAE,CAAC;OACX,CAAC,OAAO,CAAC,EAAE,EAAE;KACf,CAAA,EAAG,CAAC;GACN;CACF,CAAC;;AAEF,uBAAU,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,oBAAK,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBACnB,KAAK;;;;;;;;;;;;;;;;;2BChuCE,iBAAiB;;;;sBACtB,WAAW;;;;4BACT,eAAe;;;;kCACV,2BAA2B;;;;;;;;;;;;;;;IAY7C,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,WAAW;;AAGb,0BAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;;AAK9B,QAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACtF,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAI,QAAQ,GAAG,gCAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,YAAI,IAAI,GAAG,oBAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;;;AAGlC,YAAI,CAAC,QAAQ,EAAE;AACb,cAAI,GAAG,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;SACzC;;;AAGD,YAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC9B,gBAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC3B,gBAAM;SACP;OACF;KACF,MAAM;;;;;AAKL,YAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;KAC9C;GACF;;SA/BG,WAAW;;;AAkCjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;;;;yBC/CJ,cAAc;;;;sCACP,8BAA8B;;;;0CAC1B,mCAAmC;;;;mCAC3C,2BAA2B;;;;+BAC9B,sBAAsB;;;;mCAClB,2BAA2B;;;;gCAC9B,uBAAuB;;;;oCACnB,4BAA4B;;;;oCAC5B,4BAA4B;;;;gCAChC,uBAAuB;;;;yBAC1B,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;iCACD,yBAAyB;;6BACzB,oBAAoB;;4BAC7B,mBAAmB;;;;4BACvB,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;IAUhC,IAAI;YAAJ,IAAI;;AAEG,WAFP,IAAI,GAEmC;QAA/B,OAAO,yDAAC,EAAE;QAAE,KAAK,yDAAC,YAAU,EAAE;;0BAFtC,IAAI;;;;AAKN,WAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACpC,0BAAM,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;AAI5B,QAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,UAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB,CAAC,CAAC;AACH,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,YAAW;AAC9B,UAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B,CAAC,CAAC;;AAEH,QAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;AACtC,QAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;AACxC,QAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;;;AAGxC,QAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,UAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;;;AAGD,QAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,UAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;AAED,QAAI,OAAO,CAAC,cAAc,KAAK,KAAK,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;AAC1E,UAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;KACvC;;AAED,QAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,UAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC1C;;AAED,QAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,QAAI,CAAC,kBAAkB,EAAE,CAAC;;;AAG1B,QAAI,CAAC,aAAa,EAAE,CAAC;GACtB;;;;;;;;;;;;;;;;;;;AA7CG,MAAI,WAwDR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;;AAEjD,QAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;;AAG3B,QAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACvC;;;;;;;;AA/DG,MAAI,WAsER,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5B,QAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;GACnD;;;;;;;;AA3EG,MAAI,WAkFR,aAAa,GAAA,yBAAG;AACd,QAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;;;AAG/D,UAAI,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;;AAEhD,UAAI,IAAI,CAAC,gBAAgB,KAAK,kBAAkB,EAAE;AAChD,YAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;OAC1B;;AAED,UAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;;AAE3C,UAAI,kBAAkB,KAAK,CAAC,EAAE;AAC5B,YAAI,CAAC,oBAAoB,EAAE,CAAC;OAC7B;KACF,CAAC,EAAE,GAAG,CAAC,CAAC;GACV;;;;;;;;AAnGG,MAAI,WA0GR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;GAClC;;;;;;;;;AA5GG,MAAI,WAoHR,QAAQ,GAAA,oBAAG;AACT,WAAO,mCAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;GAC9B;;;;;;;;;AAtHG,MAAI,WA8HR,eAAe,GAAA,2BAAG;AAChB,WAAO,+BAAgB,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;GACzD;;;;;;;;AAhIG,MAAI,WAuIR,oBAAoB,GAAA,gCAAG;AACrB,QAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;GAC3C;;;;;;;;;AAzIG,MAAI,WAiJR,mBAAmB,GAAA,+BAAG;AACpB,QAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;AAE9B,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACvC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;GAChD;;;;;;;;AAtJG,MAAI,WA6JR,oBAAoB,GAAA,gCAAG;AACrB,QAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAI,CAAC,uBAAuB,EAAE,CAAC;AAC/B,QAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,QAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;GACjD;;;;;;;;AAlKG,MAAI,WAyKR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,UAAI,CAAC,uBAAuB,EAAE,CAAC;KAAE;AACjE,QAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,YAAU;AACpD,UAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7E,EAAE,GAAG,CAAC,CAAC;GACT;;;;;;;;AA9KG,MAAI,WAqLR,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;;;;AAI7C,QAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;GAC7E;;;;;;;;AA3LG,MAAI,WAkMR,OAAO,GAAA,mBAAG;;;AAGR,QAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;;;AAG7C,QAAI,IAAI,CAAC,cAAc,EAAE;AAAE,UAAI,CAAC,iBAAiB,EAAE,CAAC;KAAE;;AAEtD,QAAI,IAAI,CAAC,iBAAiB,EAAE;AAAE,UAAI,CAAC,oBAAoB,EAAE,CAAC;KAAE;;AAE5D,yBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;;;;;;AA7MG,MAAI,WA0NR,WAAW,GAAA,qBAAC,KAAK,EAAE;;;AACjB,SAAK,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEzB,SAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAK;AACtB,UAAI,IAAI,GAAG,MAAQ,IAAI,YAAS,EAAE,IAAI,EAAE,CAAC;AACzC,UAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,aAAO,CAAC,EAAE,EAAE;AACV,YAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,YAAI,IAAI,KAAK,MAAM,EAAE;AACnB,gBAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC;SACnC;AACD,YAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;OAC1B;KACF,CAAC,CAAC;GACJ;;;;;;;;AAxOG,MAAI,WA+OR,KAAK,GAAA,iBAAG,EAAE;;;;;;;;;;;;AA/ON,MAAI,WA0PR,KAAK,GAAA,eAAC,GAAG,EAAE;AACT,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,UAAI,GAAG,qCAAsB,EAAE;AAC7B,YAAI,CAAC,MAAM,GAAG,GAAG,CAAC;OACnB,MAAM;AACL,YAAI,CAAC,MAAM,GAAG,8BAAe,GAAG,CAAC,CAAC;OACnC;AACD,UAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB;AACD,WAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;;;;;;;;;AApQG,MAAI,WA+QR,MAAM,GAAA,kBAAG;AACP,QAAI,IAAI,CAAC,WAAW,EAAE;AACpB,aAAO,mCAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9B;AACD,WAAO,oCAAiB,CAAC;GAC1B;;;;;;;;AApRG,MAAI,WA2RR,cAAc,GAAA,0BAAG;;AAEf,QAAI,IAAI,CAAC,iBAAiB,EAAE;AAAE,UAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;KAAE;GAC7G;;;;;;;;AA9RG,MAAI,WAqSR,sBAAsB,GAAA,kCAAG;AACvB,QAAI,oBAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAClD,UAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;KACjC,CAAC,CAAC;;AAEH,QAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE/B,QAAI,CAAC,MAAM,EAAE,OAAO;;AAEpB,UAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;AAC7D,UAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;;AAE1D,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAC1C,YAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;AAChE,YAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;KAC9D,CAAC,CAAC,CAAC;GACL;;;;;;;;AArTG,MAAI,WA6TR,kBAAkB,GAAA,8BAAG;;;AACnB,QAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;AAEtC,cAAU,CAAC,OAAO,CAAC,UAAC,IAAI,EAAK;AAC3B,UAAI,gBAAgB,GAAG,SAAnB,gBAAgB,GAAS;AAC3B,eAAK,OAAO,CAAI,IAAI,iBAAc,CAAC;OACpC,CAAC;;AAEF,UAAI,MAAM,GAAG,OAAQ,IAAI,YAAS,EAAE,CAAC;;AAErC,YAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AACzD,YAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;;AAEtD,aAAK,EAAE,CAAC,SAAS,EAAE,YAAM;AACvB,cAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAC5D,cAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;OAC1D,CAAC,CAAC;KACJ,CAAC,CAAC;GACJ;;;;;;;;AA/UG,MAAI,WAsVR,iBAAiB,GAAA,6BAAG;;;AAClB,QAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;AAED,QAAI,CAAC,0BAAO,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,EAAE;;AACrD,YAAI,MAAM,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC9C,cAAM,CAAC,GAAG,GAAG,OAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI,4CAA4C,CAAC;AACrF,cAAM,CAAC,MAAM,GAAG,YAAM;AACpB,iBAAK,OAAO,CAAC,aAAa,CAAC,CAAC;SAC7B,CAAC;AACF,cAAM,CAAC,OAAO,GAAG,YAAM;AACrB,iBAAK,OAAO,CAAC,YAAY,CAAC,CAAC;SAC5B,CAAC;AACF,eAAK,EAAE,CAAC,SAAS,EAAE,YAAM;AACvB,gBAAM,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,gBAAM,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB,CAAC,CAAC;;;AAGH,kCAAO,QAAQ,CAAC,GAAG,IAAI,CAAC;AACxB,eAAK,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;KAC1C;;AAED,QAAI,aAAa,GAAG,SAAhB,aAAa;aAAS,OAAK,OAAO,CAAC,iBAAiB,CAAC;KAAA,CAAC;AAC1D,QAAI,iBAAiB,GAAG,SAApB,iBAAiB,GAAS;AAC5B,mBAAa,EAAE,CAAC;;AAEhB,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,aAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACtD,YAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5B,eAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;SACpD;OACF;KACF,CAAC;;AAEF,qBAAiB,EAAE,CAAC;AACpB,UAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;;AAErD,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,YAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;KACzD,CAAC,CAAC;GACJ;;;;;;;;;AAlYG,MAAI,WA0YR,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,uCAAoB,CAAC;AAC9D,WAAO,IAAI,CAAC,YAAY,CAAC;GAC1B;;;;;;;;;AA7YG,MAAI,WAqZR,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,uCAAoB,CAAC;AAC9D,WAAO,IAAI,CAAC,YAAY,CAAC;GAC1B;;;;;;;;;;;;;;;AAxZG,MAAI,WAsaR,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,sCAAmB,CAAC;AAC3D,WAAO,IAAI,CAAC,WAAW,CAAC;GACzB;;;;;;;;;AAzaG,MAAI,WAibR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,sCAAmB,CAAC;AACvE,WAAO,IAAI,CAAC,iBAAiB,CAAC;GAC/B;;;;;;;;;AApbG,MAAI,WA4bR,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,6CAA0B,CAAC;AAClF,WAAO,IAAI,CAAC,mBAAmB,CAAC;GACjC;;;;;;;;;;;;;AA/bG,MAAI,WA2cR,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,QAAI,CAAC,IAAI,EAAE;AACT,YAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;KACpE;;AAED,WAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACvD;;;;;;;;;;;AAjdG,MAAI,WA2dR,kBAAkB,GAAA,4BAAC,OAAO,EAAE;AAC1B,QAAI,KAAK,GAAG,iCAAa,OAAO,EAAE;AAChC,UAAI,EAAE,IAAI;KACX,CAAC,CAAC;;AAEH,QAAI,gBAAgB,GAAG,wCAAqB,KAAK,CAAC,CAAC;;;AAGnD,QAAI,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAC7D,QAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;AAG1D,QAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;AAEpD,WAAO,gBAAgB,CAAC;GACzB;;;;;;;;;AA1eG,MAAI,WAkfR,qBAAqB,GAAA,+BAAC,KAAK,EAAE;AAC3B,QAAI,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAEtC,QAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;;;AAG5E,QAAI,CAAC,kBAAkB,EAAE,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC5D,QAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;GAC7C;;;;;;;;;;AA1fG,MAAI,WAmgBR,SAAS,GAAA,qBAAG,EAAE;;;;;;;;;;;;AAngBV,MAAI,WA8gBR,WAAW,GAAA,uBAAG;AACZ,WAAO,EAAE,CAAC;GACX;;;;;;;;;;AAhhBG,MAAI,CAyhBD,MAAM,GAAA,gBAAC,SAAS,EAAE;AACvB,WAAO,SAAS,CAAC,SAAS,YAAY,IAAI,IACnC,SAAS,YAAY,IAAI,IACzB,SAAS,KAAK,IAAI,CAAC;GAC3B;;;;;;;;;;;AA7hBG,MAAI,CAuiBD,YAAY,GAAA,sBAAC,IAAI,EAAE,IAAI,EAAE;AAC9B,QAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,UAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;;AAED,QAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtB,YAAM,IAAI,KAAK,WAAS,IAAI,qBAAkB,CAAC;KAChD;;AAED,QAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACzB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAljBG,MAAI,CA4jBD,OAAO,GAAA,iBAAC,IAAI,EAAE;AACnB,QAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACpC,aAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;AAED,QAAI,6BAAU,0BAAO,OAAO,IAAI,0BAAO,OAAO,CAAC,IAAI,CAAC,EAAE;AACpD,8BAAI,IAAI,UAAQ,IAAI,+GAA4G,CAAC;AACjI,aAAO,0BAAO,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7B;GACF;;SArkBG,IAAI;;;AA8kBV,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;;;;AAQ3B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;;;;;;;AAQ5B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;AAG5B,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAY,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAc;MAAZ,OAAO,yDAAC,EAAE;;AACtE,MAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE/B,SAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEpB,MAAI,KAAK,EAAE;AACT,WAAO,CAAC,KAAK,GAAG,KAAK,CAAC;GACvB;AACD,MAAI,QAAQ,EAAE;AACZ,WAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;GAC7B;AACD,SAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEpB,MAAI,KAAK,GAAG,iCAAc,OAAO,CAAC,CAAC;AACnC,QAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;AAExB,SAAO,KAAK,CAAC;CACd,CAAC;;AAEF,IAAI,CAAC,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC;;;AAG5C,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;AAChD,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;;;;AAI5C,IAAI,CAAC,SAAS,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC9C,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;;AAEhD,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;;;;;;;;;;AAUhD,IAAI,CAAC,kBAAkB,GAAG,UAAS,KAAK,EAAC;;;;;;;;;AAStC,OAAK,CAAC,qBAAqB,GAAG,UAAS,OAAO,EAAE,KAAK,EAAC;AACrD,QAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC;;AAEpC,QAAI,CAAC,QAAQ,EAAE;AACb,cAAQ,GAAG,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;KACtC;;AAED,QAAI,KAAK,KAAK,SAAS,EAAE;;AAEvB,WAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;KACzB;;AAED,YAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;GACpC,CAAC;;;;;;;AAOF,OAAK,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;AAChC,QAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;AAC1C,QAAI,GAAG,YAAA,CAAC;;AAER,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,SAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;AAEpC,UAAI,GAAG,EAAE;AACP,eAAO,GAAG,CAAC;OACZ;KACF;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;;;;;;;;;AAUD,OAAK,CAAC,mBAAmB,GAAG,UAAS,MAAM,EAAE,OAAO,EAAC;AACpD,QAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;AAC1C,QAAI,GAAG,YAAA,CAAC;;AAER,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,SAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEnD,UAAI,GAAG,EAAE;AACP,eAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;OACpB;KACF;;AAED,WAAO,IAAI,CAAC;GACb,CAAC;;;;;;;;AAQF,OAAK,CAAC,aAAa,GAAG,UAAS,MAAM,EAAE,OAAO,EAAC;AAC7C,QAAI,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEpD,QAAI,EAAE,EAAE;AACN,aAAO,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;;;;;AAMF,MAAI,UAAU,GAAG,CACb,UAAU,EACV,UAAU,CACX,CAAC;;AAEJ,YAAU,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AACnC,QAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;AAE9B,QAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AACpC,aAAO;KACR;;AAED,QAAI,CAAC,MAAM,CAAC,GAAG,YAAW;AACxB,UAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;AACtD,eAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;OAC1E;AACD,aAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC1C,CAAC;GACH,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;;;;;;;;;AASnB,OAAK,CAAC,SAAS,CAAC,SAAS,GAAG,UAAS,MAAM,EAAC;AAC3C,QAAI,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAI,CAAC,EAAE,EAAE;;;AAGP,UAAI,KAAK,CAAC,mBAAmB,EAAE;AAC7B,UAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC;OAChC,MAAM;AACL,gCAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;OAC7D;KACF;;;AAGD,QAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;;;;;AAK/C,QAAI,IAAI,CAAC,cAAc,EAAE;AACvB,UAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;AAErC,UAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;;AAED,QAAI,EAAE,KAAK,KAAK,CAAC,mBAAmB,EAAE;;AAEpC,UAAI,CAAC,cAAc,GAAG,MAAM,CAAC;;;;AAI7B,UAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;AACzE,UAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;AAC9E,UAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;KAE1E;;AAED,QAAI,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnE,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;;AAE9C,WAAO,IAAI,CAAC;GACb,CAAC;;;AAGF,OAAK,CAAC,SAAS,CAAC,uBAAuB,GAAG,YAAW;AACnD,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;GAC/E,CAAC;;;AAGF,OAAK,CAAC,SAAS,CAAC,4BAA4B,GAAG,YAAW;AACxD,QAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;GAC/E,CAAC;;;;;AAKF,OAAK,CAAC,SAAS,CAAC,oBAAoB,GAAG,YAAW;AAChD,QAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACtD,UAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;AACzE,UAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;AAC9E,UAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;KAC/B;GACF,CAAC;CAEH,CAAC;;AAEF,uBAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;AAE1C,uBAAU,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBACjB,IAAI;;;;;;;;;;;;;;;;;;;yBCj2BG,cAAc;;;;8BACX,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;AAStC,IAAM,aAAa,GAAG,SAAhB,aAAa,CAAY,IAAI,EAAE,KAAK,EAAE;AAC1C,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC3B,eAAS;KACV;;AAED,QAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;GACzB;CACF,CAAC;;;;;;;;;;;;;;;;;;;;;IAoBI,cAAc;YAAd,cAAc;;AACP,WADP,cAAc,GACO;QAAb,MAAM,yDAAG,EAAE;;0BADnB,cAAc;;AAEhB,QAAI,IAAI,YAAA,CAAC;;;;AAIT,SAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACrB,qBAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,cAAM;OACP;KACF;;;;AAID,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,WAAK,IAAI,IAAI,IAAI,uBAAU,SAAS,EAAE;AACpC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,uBAAU,SAAS,CAAC,IAAI,CAAC,CAAC;SACxC;OACF;AACD,WAAK,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE;AACzC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC7C;OACF;KACF;;AAED,QAAI,GAAG,sBAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3B,QAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;AAEvB,WAAO,IAAI,CAAC;GACb;;AAjCG,gBAAc,WAmClB,SAAS,GAAA,mBAAC,KAAK,EAAE;;;AACf,QAAI,KAAK,CAAC,OAAO,EAAE;AACjB,mBAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5B;;AAED,yBAAM,SAAS,KAAA,OAAC,KAAK,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,aAAO;KACR;;AAED,SAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,YAAM;;;;AAI5C,UAAI,MAAK,SAAS,EAAE;AAClB,eAAO;OACR;AACD,YAAK,SAAS,GAAG,IAAI,CAAC;AACtB,mBAAa,QAAO,KAAK,CAAC,CAAC;AAC3B,YAAK,SAAS,GAAG,KAAK,CAAC;AACvB,YAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;KACxB,CAAC,CAAC;GACJ;;AA1DG,gBAAc,WA4DlB,QAAQ,GAAA,kBAAC,KAAK,EAAE;AACd,QAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;GACvB;;AA9DG,gBAAc,WAgElB,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,yBAAM,YAAY,KAAA,OAAC,KAAK,CAAC,CAAC;GAC3B;;SAlEG,cAAc;;;qBAsEL,cAAc;;;;;;;;;;;;;;;;0BChHA,eAAe;;qBAC1B,SAAS;;;;iCACT,wBAAwB;;;;8BACjB,qBAAqB;;IAAlC,OAAO;;;;;;;;;;;;;;;;;;IAiBb,UAAU;YAAV,UAAU;;AACH,WADP,UAAU,GACY;QAAd,OAAO,yDAAG,EAAE;;0BADpB,UAAU;;AAEZ,QAAI,QAAQ,GAAG,+BAAM,OAAO,EAAE;AAC5B,UAAI,EAAE,2BAAe,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;KACzC,CAAC,CAAC;;;AAGH,QAAI,KAAK,GAAG,kBAAM,QAAQ,CAAC,CAAC;AAC5B,QAAI,OAAO,GAAG,KAAK,CAAC;;AAEpB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAK,IAAI,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE;AACrC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,eAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC1C;OACF;KACF;;AAED,UAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE;AACtC,SAAG,EAAA,eAAG;AAAE,eAAO,OAAO,CAAC;OAAE;AACzB,SAAG,EAAA,aAAC,UAAU,EAAE;;AAEd,YAAI,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO,EAAE;AAC7D,iBAAO;SACR;AACD,eAAO,GAAG,UAAU,CAAC;AACrB,YAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;OAC/B;KACF,CAAC,CAAC;;;;;AAKH,QAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,WAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;KAClC;AACD,SAAK,CAAC,OAAO,GAAG,IAAI,CAAC;;AAErB,WAAO,KAAK,CAAC;GACd;;SAvCG,UAAU;;;qBA0CD,UAAU;;;;;;;;;;;;;;;;;;8BC1DA,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;IAEhC,oBAAoB;AACb,WADP,oBAAoB,GACQ;QAApB,aAAa,yDAAG,EAAE;;0BAD1B,oBAAoB;;AAEtB,QAAI,IAAI,GAAG,IAAI,CAAC;;AAEhB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAExC,WAAK,IAAI,IAAI,IAAI,oBAAoB,CAAC,SAAS,EAAE;AAC/C,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACnD;OACF;KACF;;AAED,QAAI,CAAC,cAAc,GAAG,EAAE,CAAC;;AAEzB,UAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AACpC,SAAG,EAAA,eAAG;AACJ,eAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;OACnC;KACF,CAAC,CAAC;;AAEH,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,OAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,UAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;;AAED,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,aAAO,IAAI,CAAC;KACb;GACF;;AA7BG,sBAAoB,WA+BxB,gBAAgB,GAAA,0BAAC,YAAY,EAAE;AAC7B,QAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;GACxC;;AAjCG,sBAAoB,WAmCxB,uBAAuB,GAAA,iCAAC,KAAK,EAAE;AAC7B,QAAI,aAAa,YAAA,CAAC;;AAElB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,QAAM,EAAE,CAAC,EAAE,EAAE;AACpE,UAAI,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1C,qBAAa,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;AAEvC,cAAM;OACP;KACF;;AAED,WAAO,aAAa,CAAC;GACtB;;AA/CG,sBAAoB,WAiDxB,mBAAmB,GAAA,6BAAC,YAAY,EAAE;AAChC,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,QAAM,EAAE,CAAC,EAAE,EAAE;AACpE,UAAI,YAAY,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AAC3C,YAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEjC,cAAM;OACP;KACF;GACF;;SAzDG,oBAAoB;;;qBA4DX,oBAAoB;;;;;;;;;;;;;;;;;;;;8BC/DV,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;2BACd,iBAAiB;;;;+BACnB,sBAAsB;;;;AAE5C,IAAM,IAAI,GAAG,CAAC,CAAC;AACf,IAAM,OAAO,GAAG,CAAC,CAAC;AAClB,IAAM,MAAM,GAAG,CAAC,CAAC;AACjB,IAAM,KAAK,GAAG,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;IAyBV,gBAAgB;YAAhB,gBAAgB;;AACT,WADP,gBAAgB,GACM;QAAd,OAAO,yDAAG,EAAE;;0BADpB,gBAAgB;;AAElB,2BAAO,CAAC;;AAER,QAAI,UAAU,YAAA;QACV,YAAY,GAAG,IAAI,CAAC;;AAExB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,kBAAY,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAEhD,WAAK,IAAI,IAAI,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAC3C,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,sBAAY,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACvD;OACF;KACF;;AAED,QAAI,KAAK,GAAG,iCAAc,OAAO,CAAC,CAAC;;AAEnC,gBAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B,gBAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC7B,gBAAY,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,gBAAY,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACjC,gBAAY,WAAQ,GAAG,KAAK,WAAQ,CAAC;;AAErC,UAAM,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE;AAChD,SAAG,EAAA,eAAG;AACJ,eAAO,UAAU,CAAC;OACnB;KACF,CAAC,CAAC;;AAEH,UAAM,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,EAAE;AAC3C,SAAG,EAAA,eAAG;AACJ,eAAO,KAAK,CAAC;OACd;KACF,CAAC,CAAC;;AAEH,cAAU,GAAG,IAAI,CAAC;;AAElB,SAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAW;AAC9C,gBAAU,GAAG,MAAM,CAAC;;AAEpB,kBAAY,CAAC,OAAO,CAAC;AACnB,YAAI,EAAE,MAAM;AACZ,cAAM,EAAE,YAAY;OACrB,CAAC,CAAC;KACJ,CAAC,CAAC;;AAEH,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,aAAO,YAAY,CAAC;KACrB;GACF;;SAnDG,gBAAgB;;;AAsDtB,gBAAgB,CAAC,SAAS,CAAC,cAAc,GAAG;AAC1C,MAAI,EAAE,MAAM;CACb,CAAC;;AAEF,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;AACnC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;AACjC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;;qBAEhB,gBAAgB;;;;;;;;;;;;;;;;;8BCjGN,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;;;;;;;;IAgBhC,gBAAgB;AACT,WADP,gBAAgB,CACR,IAAI,EAAE;0BADd,gBAAgB;;AAElB,QAAI,IAAI,GAAG,IAAI,CAAC;;AAEhB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAExC,WAAK,IAAI,IAAI,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAC3C,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC/C;OACF;KACF;;AAED,oBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;AAErD,UAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AACpC,SAAG,EAAA,eAAG;AACJ,eAAO,IAAI,CAAC,OAAO,CAAC;OACrB;KACF,CAAC,CAAC;;AAEH,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,aAAO,IAAI,CAAC;KACb;GACF;;;;;;;;;;AAzBG,kBAAgB,WAkCpB,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACjC,QAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;;AAEpB,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;;AAE3B,QAAI,UAAU,GAAG,SAAb,UAAU,CAAY,KAAK,EAAE;AAC/B,UAAI,EAAE,EAAE,GAAG,KAAK,IAAI,IAAI,CAAA,AAAC,EAAE;AACzB,cAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE;AACtC,aAAG,EAAA,eAAG;AACJ,mBAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;WAC1B;SACF,CAAC,CAAC;OACJ;KACF,CAAC;;AAEF,QAAI,SAAS,GAAG,CAAC,EAAE;AACjB,OAAC,GAAG,SAAS,CAAC;;AAEd,aAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,kBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;OAC1B;KACF;GACF;;;;;;;;;;AA3DG,kBAAgB,WAoEpB,UAAU,GAAA,oBAAC,EAAE,EAAE;AACb,QAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;AAElB,UAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;AACjB,cAAM,GAAG,GAAG,CAAC;AACb,cAAM;OACP;KACF;;AAED,WAAO,MAAM,CAAC;GACf;;SAjFG,gBAAgB;;;qBAoFP,gBAAgB;;;;;;;;;;;;;;;;;;;yBCrGT,cAAc;;;;0BACnB,iBAAiB;;;;8BACb,sBAAsB;;;;gCACpB,wBAAwB;;;;yBAC3B,gBAAgB;;IAAxB,EAAE;;8BACO,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,IAAM,SAAS,GAAG,MAAM,CAAC;AACzB,IAAM,OAAO,GAAG;AACd,WAAS,EAAc,WAAW;AAClC,WAAS,EAAc,YAAY;AACnC,OAAK,EAAkB,OAAO;AAC9B,oBAAkB,EAAK,4CAA4C;AACnE,gBAAc,EAAS,0BAA0B;AACjD,uBAAqB,EAAE,YAAY;AACnC,mBAAiB,EAAM,OAAO;AAC9B,QAAM,EAAiB,kCAAkC;AACzD,QAAM,EAAiB,6BAA6B;AACpD,WAAS,EAAc,wDAAwD;CAChF,CAAC;;;;;;;;;;;;IAWI,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,gBAAgB;;AAGlB,0BAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;AAE9B,UAAM,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1D,UAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;;;;;AAMhE,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACpC,UAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AAC5D,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,eAAO;OACR;;AAED,YAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;AAEjE,UAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzD,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;OACxC;;AAED,UAAI,KAAK,GAAG,EAAC,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC;AAC5C,UAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AAC1C,UAAI,SAAS,YAAA,CAAC;AACd,UAAI,aAAa,YAAA,CAAC;;AAElB,UAAI,SAAS,EAAE;AACb,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,cAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACzB,cAAI,KAAK,WAAQ,EAAE;AACjB,gBAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,SAAS,EAAE;AAC/C,uBAAS,GAAG,KAAK,CAAC;aACnB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AAChD,2BAAa,GAAG,KAAK,CAAC;aACvB;WACF;SACF;;;;;;AAMD,YAAI,aAAa,EAAE;AACjB,uBAAa,CAAC,IAAI,GAAG,SAAS,CAAC;SAChC,MAAM,IAAI,SAAS,EAAE;AACpB,mBAAS,CAAC,IAAI,GAAG,SAAS,CAAC;SAC5B;OACF;KACF,CAAC,CAAC,CAAC;GACL;;;;;;;;;;;;;;;;;AAtDG,kBAAgB,WA6DpB,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AACxE,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AAnEG,kBAAgB,WA2EpB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,wBAAwB;KACpC,EAAE;AACD,iBAAW,EAAE,WAAW;AACxB,mBAAa,EAAE,MAAM;KACtB,CAAC,CAAC;GACJ;;;;;;;;AAlFG,kBAAgB,WAyFpB,YAAY,GAAA,wBAAG;AACb,QAAI,OAAO,0BAAO,QAAQ,CAAC,KAAK,UAAU,EAAE;AAC1C,gCAAO,QAAQ,CAAC,CAAC,aAAa,CAAC,4BAAS,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACvD;GACF;;;;;;;;AA7FG,kBAAgB,WAoGpB,aAAa,GAAA,yBAAG;AACd,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;;;;;AAMD,QAAI,iBAAiB,GAAG,IAAI,CAAC;AAC7B,QAAI,sBAAsB,GAAG,IAAI,CAAC;;AAElC,QAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtB,WAAO,CAAC,EAAE,EAAE;AACV,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AAC/B,YAAI,KAAK,CAAC,MAAM,CAAC,KAAK,cAAc,EAAE;AACpC,2BAAiB,GAAG,KAAK,CAAC;SAC3B,MAAM;AACL,gCAAsB,GAAG,KAAK,CAAC;SAChC;OACF;KACF;;AAED,QAAI,sBAAsB,EAAE;AAC1B,UAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;KAC7C,MAAM,IAAI,iBAAiB,EAAE;AAC5B,UAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;KACxC;GACF;;;;;;;;;AArIG,kBAAgB,WA6IpB,cAAc,GAAA,wBAAC,KAAK,EAAE;AACpB,QAAI,OAAO,0BAAO,QAAQ,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AAClE,aAAO;KACR;;AAED,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC;;AAE9D,QAAI,IAAI,GAAG,EAAE,CAAC;AACd,SAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;AACnD,UAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;KACnC;;AAED,8BAAO,QAAQ,CAAC,CAAC,aAAa,CAAC,4BAAS,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;AAExD,QAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,WAAO,CAAC,EAAE,EAAE;AACV,UAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,UAAI,CAAC,GAAG,EAAE;AACR,iBAAS;OACV;;AAED,UAAI,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;AAC9B,UAAI,SAAS,CAAC,KAAK,EAAE;AACnB,cAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;OACjD;AACD,UAAI,SAAS,CAAC,WAAW,EAAE;AACzB,sBAAc,CAAC,MAAM,CAAC,UAAU,EACjB,OAAO,EACP,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,EACzB,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;OACvD;AACD,UAAI,SAAS,CAAC,eAAe,EAAE;AAC7B,cAAM,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;OACrE;AACD,UAAI,SAAS,CAAC,iBAAiB,EAAE;AAC/B,sBAAc,CAAC,MAAM,CAAC,UAAU,EACjB,iBAAiB,EACjB,cAAc,CAAC,SAAS,CAAC,eAAe,IAAI,MAAM,EACnC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;OAC7D;AACD,UAAI,SAAS,CAAC,WAAW,EAAE;AACzB,YAAI,SAAS,CAAC,aAAa,EAAE;AAC3B,wBAAc,CAAC,MAAM,EACN,iBAAiB,EACjB,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;SAChF,MAAM;AACL,gBAAM,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC;SACtD;OACF;AACD,UAAI,SAAS,CAAC,SAAS,EAAE;AACvB,YAAI,SAAS,CAAC,SAAS,KAAK,YAAY,EAAE;AACxC,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,oBAAkB,QAAQ,sBAAiB,QAAQ,sBAAiB,QAAQ,AAAE,CAAC;SAClH,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC3C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,AAAE,CAAC;SACtG,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,WAAW,EAAE;AAC9C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,SAAS,gBAAW,SAAS,oBAAe,QAAQ,iBAAY,QAAQ,AAAE,CAAC;SAC5H,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE;AAC5C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,AAAE,CAAC;SAC3H;OACF;AACD,UAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,KAAK,CAAC,EAAE;AACxD,YAAM,QAAQ,GAAG,0BAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1D,cAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,AAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAI,IAAI,CAAC;AAClE,cAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,cAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;AAC1B,cAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;OAC7B;AACD,UAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AAC9D,YAAI,SAAS,CAAC,UAAU,KAAK,YAAY,EAAE;AACzC,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;SACpD,MAAM;AACL,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACpE;OACF;KACF;GACF;;SAxNG,gBAAgB;;;AAoOtB,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;AACtC,SAAO,OAAO;;AAEZ,UAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,OAAO,GAAG,GAAG,CAAC;CACjB;;;;;;;;;;;AAWD,SAAS,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;;AAEvC,MAAI;AACF,MAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;GACxB,CAAC,OAAO,CAAC,EAAE,EAAE;CACf;;AAED,uBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;;;ACnR/B,IAAI,YAAY,GAAG,SAAf,YAAY,CAAY,KAAK,EAAE;AACjC,MAAI,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EACjC,iCAAiC,EACjC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAK;AACjD,QAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,SAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;KACzB;;AAED,WAAO,GAAG,CAAC;GACZ,EAAE;AACD,QAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAS,GAAG,EAAE;AACrE,aAAO;AACL,iBAAS,EAAE,GAAG,CAAC,SAAS;AACxB,eAAO,EAAE,GAAG,CAAC,OAAO;AACpB,YAAI,EAAE,GAAG,CAAC,IAAI;AACd,UAAE,EAAE,GAAG,CAAC,EAAE;OACX,CAAC;KACH,CAAC;GACH,CAAC,CAAC;;AAEH,SAAO,GAAG,CAAC;CACZ,CAAC;;;;;;;;;;AAUF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE;;AAEpC,MAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;AAEhC,MAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAC,CAAC;WAAK,CAAC,CAAC,KAAK;GAAA,CAAC,CAAC;AACnE,MAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAS,OAAO,EAAE;AAChE,QAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,QAAI,OAAO,CAAC,GAAG,EAAE;AACf,UAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;KACxB;AACD,WAAO,IAAI,CAAC;GACb,CAAC,CAAC;;AAEH,SAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAS,KAAK,EAAE;AAClF,WAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;GACxC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;CACvB,CAAC;;;;;;;;;;AAUF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE,IAAI,EAAE;AAC1C,MAAI,CAAC,OAAO,CAAC,UAAS,KAAK,EAAE;AAC3B,QAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACtD,QAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC5B,WAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG;eAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;OAAA,CAAC,CAAC;KACrD;GACF,CAAC,CAAC;;AAEH,SAAO,IAAI,CAAC,UAAU,EAAE,CAAC;CAC1B,CAAC;;qBAEa,EAAC,gBAAgB,EAAhB,gBAAgB,EAAE,gBAAgB,EAAhB,gBAAgB,EAAE,YAAY,EAAZ,YAAY,EAAC;;;;;;;;;;;;;;;;;;;yBC/E3C,cAAc;;;;yBAChB,gBAAgB;;IAAxB,EAAE;;8BACW,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;IAqBhC,aAAa;YAAb,aAAa;;AACN,WADP,aAAa,GACQ;QAAb,MAAM,yDAAG,EAAE;;0BADnB,aAAa;;AAEf,QAAI,IAAI,YAAA,CAAC;;;;AAIT,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,WAAK,IAAI,IAAI,IAAI,uBAAU,SAAS,EAAE;AACpC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,uBAAU,SAAS,CAAC,IAAI,CAAC,CAAC;SACxC;OACF;AACD,WAAK,IAAI,IAAI,IAAI,aAAa,CAAC,SAAS,EAAE;AACxC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC5C;OACF;KACF;;AAED,QAAI,GAAG,sBAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3B,WAAO,IAAI,CAAC;GACb;;AAtBG,eAAa,WAwBjB,SAAS,GAAA,mBAAC,KAAK,EAAE;AACf,yBAAM,SAAS,KAAA,OAAC,KAAK,CAAC,CAAC;AACvB,SAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAC5D,UAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KACxB,CAAC,CAAC,CAAC;GACL;;;;;;;;;;;AA7BG,eAAa,WAuCjB,YAAY,GAAA,sBAAC,MAAM,EAAE;AACnB,QAAI,KAAK,YAAA,CAAC;;AAEV,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACtB,aAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,YAAI,KAAK,CAAC,GAAG,EAAE;AACb,eAAK,CAAC,GAAG,EAAE,CAAC;SACb;;AAED,YAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE1B,cAAM;OACP;KACF;;AAED,QAAI,CAAC,KAAK,EAAE;AACV,aAAO;KACR;;AAED,QAAI,CAAC,OAAO,CAAC;AACX,WAAK,EAAL,KAAK;AACL,UAAI,EAAE,aAAa;KACpB,CAAC,CAAC;GACJ;;;;;;;;;;;AA/DG,eAAa,WAyEjB,YAAY,GAAA,sBAAC,EAAE,EAAE;AACf,QAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEpB,UAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;AACnB,cAAM,GAAG,KAAK,CAAC;AACf,cAAM;OACP;KACF;;AAED,WAAO,MAAM,CAAC;GACf;;SAtFG,aAAa;;;qBAwFJ,aAAa;;;;;;;;;;;;;;;;;;;yBChHN,cAAc;;;;6BACZ,oBAAoB;;IAAhC,MAAM;;yBACE,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;kCACN,uBAAuB;;;;4BAC/B,eAAe;;;;;;;;;;;;;IAU5B,iBAAiB;YAAjB,iBAAiB;;AAEV,WAFP,iBAAiB,CAET,MAAM,EAAE,OAAO,EAAE;0BAFzB,iBAAiB;;AAGnB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,IAAI,EAAE,CAAC;;;AAGZ,QAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,EAAE;AAClD,UAAI,CAAC,QAAQ,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;KAC/F;;AAED,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACtE,UAAI,CAAC,YAAY,EAAE,CAAC;AACpB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,CAAC,CAAC,CAAC;;AAEJ,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACzE,UAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,UAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,UAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,UAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACvD,UAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACrD,UAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACzD,UAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,UAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACpD,UAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACrD,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC,CAAC,CAAC;;AAEJ,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACzF,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACzF,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACzF,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7F,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3F,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/F,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3F,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACzF,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;AAE1F,QAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE;AAC1C,UAAI,CAAC,eAAe,EAAE,CAAC;KACxB;GACF;;;;;;;;;AA1CG,mBAAiB,WAkDrB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,wCAAwC;AACnD,eAAS,EAAE,0BAA0B,EAAE;KACxC,CAAC,CAAC;GACJ;;;;;;;;;;;;;;;;;;AAvDG,mBAAiB,WAwErB,SAAS,GAAA,qBAAG;AACV,QAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC1E,QAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC7E,QAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACzE,QAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACjF,QAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACzE,QAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAC7E,QAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC7E,QAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACrF,QAAM,WAAW,GAAG,0BAAO,YAAY,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;;AAEvG,QAAI,MAAM,GAAG;AACX,yBAAmB,EAAE,SAAS;AAC9B,mBAAa,EAAE,WAAW;AAC1B,qBAAe,EAAE,aAAa;AAC9B,iBAAW,EAAE,QAAQ;AACrB,kBAAY,EAAE,UAAU;AACxB,aAAO,EAAE,OAAO;AAChB,uBAAiB,EAAE,OAAO;AAC1B,mBAAa,EAAE,WAAW;AAC1B,mBAAa,EAAE,WAAW;KAC3B,CAAC;AACF,SAAK,IAAI,KAAI,IAAI,MAAM,EAAE;AACvB,UAAI,MAAM,CAAC,KAAI,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,KAAI,CAAC,KAAK,MAAM,IAAK,KAAI,KAAK,aAAa,IAAI,MAAM,CAAC,KAAI,CAAC,KAAK,IAAI,AAAC,EAAE;AACvG,eAAO,MAAM,CAAC,KAAI,CAAC,CAAC;OACrB;KACF;AACD,WAAO,MAAM,CAAC;GACf;;;;;;;;;;;;;;;;;;AApGG,mBAAiB,WAqHrB,SAAS,GAAA,mBAAC,MAAM,EAAE;AAChB,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACtE,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACxE,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5E,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;AAC5E,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChF,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACxE,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;;AAEhF,QAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;AAErC,QAAI,WAAW,EAAE;AACf,iBAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACtC;;AAED,qBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,EAAE,WAAW,CAAC,CAAC;GACtE;;;;;;;;AAtIG,mBAAiB,WA6IrB,eAAe,GAAA,2BAAG;AAChB,QAAI,GAAG,YAAA;QAAE,MAAM,YAAA,CAAC;;AAEhB,QAAI;4BACc,gCAAe,0BAAO,YAAY,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;;AAArF,SAAG;AAAE,YAAM;;AAEZ,UAAI,GAAG,EAAE;AACP,gCAAI,KAAK,CAAC,GAAG,CAAC,CAAC;OAChB;KACF,CAAC,OAAO,CAAC,EAAE;AACV,8BAAI,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;;AAED,QAAI,MAAM,EAAE;AACV,UAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;GACF;;;;;;;;AA7JG,mBAAiB,WAoKrB,YAAY,GAAA,wBAAG;AACb,QAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE;AAC3C,aAAO;KACR;;AAED,QAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,QAAI;AACF,UAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,kCAAO,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;OAChF,MAAM;AACL,kCAAO,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;OAC3D;KACF,CAAC,OAAO,CAAC,EAAE;AACV,8BAAI,IAAI,CAAC,CAAC,CAAC,CAAC;KACb;GACF;;;;;;;;AAnLG,mBAAiB,WA0LrB,aAAa,GAAA,yBAAG;AACd,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC1D,QAAI,SAAS,EAAE;AACb,eAAS,CAAC,aAAa,EAAE,CAAC;KAC3B;GACF;;SA/LG,iBAAiB;;;AAmMvB,uBAAU,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;;AAEpE,SAAS,sBAAsB,CAAC,MAAM,EAAE;AACtC,MAAI,cAAc,YAAA,CAAC;;AAEnB,MAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,kBAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;GAC5C,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;AACzB,kBAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;GAC/D;;AAED,SAAO,cAAc,CAAC,KAAK,CAAC;CAC7B;;AAED,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE;AACxC,MAAI,CAAC,KAAK,EAAE;AACV,WAAO;GACR;;AAED,MAAI,CAAC,YAAA,CAAC;AACN,OAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,QAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,YAAM;KACP;GACF;;AAED,QAAM,CAAC,aAAa,GAAG,CAAC,CAAC;CAC1B;;AAED,SAAS,0BAA0B,GAAG;AACpC,MAAI,QAAQ,k/JA+GH,CAAC;;AAER,SAAO,QAAQ,CAAC;CACnB;;qBAEc,iBAAiB;;;;;;;;;;;;;;;;;;;gCCrWH,uBAAuB;;;;yBAChC,gBAAgB;;IAAxB,EAAE;;0BAC6B,eAAe;;0BAC1C,iBAAiB;;;;8BACZ,iBAAiB;;;;4BACnB,eAAe;;;;uBAChB,YAAY;;;;0BACA,iBAAiB;;mBAC/B,KAAK;;;;iCACH,wBAAwB;;;;8BACjB,qBAAqB;;IAAlC,OAAO;;;;;;;;AAQnB,IAAM,SAAS,GAAG,SAAZ,SAAS,CAAY,UAAU,EAAE,KAAK,EAAE;AAC5C,MAAI,MAAM,GAAG,IAAI,0BAAO,MAAM,CAAC,MAAM,4BACC,0BAAO,KAAK,EACZ,0BAAO,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AACrE,MAAI,MAAM,GAAG,EAAE,CAAC;;AAEhB,QAAM,CAAC,KAAK,GAAG,UAAS,GAAG,EAAE;AAC3B,SAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;GACnB,CAAC;;AAEF,QAAM,CAAC,cAAc,GAAG,UAAS,KAAK,EAAE;AACtC,UAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;GACpB,CAAC;;AAEF,QAAM,CAAC,OAAO,GAAG,YAAW;AAC1B,SAAK,CAAC,OAAO,CAAC;AACZ,UAAI,EAAE,YAAY;AAClB,YAAM,EAAE,KAAK;KACd,CAAC,CAAC;GACJ,CAAC;;AAEF,QAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACzB,MAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,QAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,aAAO,CAAC,cAAc,oCAAkC,KAAK,CAAC,GAAG,CAAG,CAAC;KACtE;AACD,UAAM,CAAC,OAAO,CAAC,UAAC,KAAK;aAAK,wBAAI,KAAK,CAAC,KAAK,CAAC;KAAA,CAAC,CAAC;AAC5C,QAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,aAAO,CAAC,QAAQ,EAAE,CAAC;KACpB;GACF;;AAED,QAAM,CAAC,KAAK,EAAE,CAAC;CAChB,CAAC;;;;;;;;AAQF,IAAM,SAAS,GAAG,SAAZ,SAAS,CAAY,GAAG,EAAE,KAAK,EAAE;AACrC,MAAI,IAAI,GAAG;AACT,OAAG,EAAE,GAAG;GACT,CAAC;AACF,MAAI,WAAW,GAAG,0BAAc,GAAG,CAAC,CAAC;;AAErC,MAAI,WAAW,EAAE;AACf,QAAI,CAAC,IAAI,GAAG,WAAW,CAAC;GACzB;;AAED,mBAAI,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAS,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE;AAC5D,QAAI,GAAG,EAAE;AACP,aAAO,wBAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACjC;;AAED,SAAK,CAAC,OAAO,GAAG,IAAI,CAAC;;;;AAIrB,QAAI,OAAO,0BAAO,MAAM,KAAK,UAAU,EAAE;AACvC,UAAI,KAAK,CAAC,KAAK,EAAE;;AACf,cAAI,WAAW,GAAG,SAAd,WAAW;mBAAS,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;WAAA,CAAC;AACvD,eAAK,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC3C,eAAK,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,YAAM;AACjC,oCAAI,KAAK,uDAAqD,KAAK,CAAC,GAAG,CAAG,CAAC;AAC3E,iBAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;WAC7C,CAAC,CAAC;;OAEJ;KACF,MAAM;AACL,eAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KAChC;GAEF,CAAC,CAAC,CAAC;CACL,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BI,SAAS;YAAT,SAAS;;AACF,WADP,SAAS,GACa;QAAd,OAAO,yDAAG,EAAE;;0BADpB,SAAS;;AAEX,QAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACjB,YAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;;AAED,QAAI,QAAQ,GAAG,+BAAM,OAAO,EAAE;AAC5B,UAAI,EAAE,0BAAc,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW;AAChD,cAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;KACpD,CAAC,CAAC;AACH,QAAI,IAAI,GAAG,0BAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;AACtD,QAAI,QAAQ,GAAG,QAAQ,WAAQ,CAAC;;AAEhC,QAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAChE,UAAI,GAAG,QAAQ,CAAC;KACjB;;;AAGD,QAAI,EAAE,GAAG,kBAAM,QAAQ,CAAC,CAAC;AACzB,MAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;;AAEzB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAK,IAAI,IAAI,IAAI,SAAS,CAAC,SAAS,EAAE;AACpC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,YAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACtC;OACF;KACF;;AAED,MAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AACd,MAAE,CAAC,WAAW,GAAG,EAAE,CAAC;;AAEpB,QAAI,IAAI,GAAG,kCAAqB,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAI,UAAU,GAAG,kCAAqB,EAAE,CAAC,WAAW,CAAC,CAAC;AACtD,QAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAI,iBAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,YAAW;AAC7C,UAAI,CAAC,UAAU,CAAC;AAChB,UAAI,OAAO,EAAE;AACX,YAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1B,eAAO,GAAG,KAAK,CAAC;OACjB;KACF,CAAC,CAAC;;AAEH,QAAI,IAAI,KAAK,UAAU,EAAE;AACvB,QAAE,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;KAC9C;;AAED,UAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE;AACnC,SAAG,EAAA,eAAG;AACJ,eAAO,QAAQ,CAAC;OACjB;AACD,SAAG,EAAA,eAAG,EAAE;KACT,CAAC,CAAC;;AAEH,UAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,SAAG,EAAA,eAAG;AACJ,eAAO,IAAI,CAAC;OACb;AACD,SAAG,EAAA,aAAC,OAAO,EAAE;AACX,YAAI,CAAC,0BAAc,OAAO,CAAC,EAAE;AAC3B,iBAAO;SACR;AACD,YAAI,GAAG,OAAO,CAAC;AACf,YAAI,IAAI,KAAK,SAAS,EAAE;AACtB,cAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;SAChD;AACD,YAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;OAC5B;KACF,CAAC,CAAC;;AAEH,UAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,SAAG,EAAA,eAAG;AACJ,YAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,iBAAO,IAAI,CAAC;SACb;;AAED,eAAO,IAAI,CAAC;OACb;AACD,SAAG,EAAA,eAAG,EAAE;KACT,CAAC,CAAC;;AAEH,UAAM,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE;AACtC,SAAG,EAAA,eAAG;AACJ,YAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,iBAAO,IAAI,CAAC;SACb;;;AAGD,YAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,iBAAO,UAAU,CAAC;SACnB;;AAED,YAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAClC,YAAI,MAAM,GAAG,EAAE,CAAC;;AAEhB,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,cAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEvB,cAAI,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE;AAC5C,kBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;WAClB,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,OAAO,IAC7B,GAAG,CAAC,SAAS,IAAI,EAAE,IACnB,GAAG,CAAC,SAAS,GAAG,GAAG,IAAI,EAAE,EAAE;AACpC,kBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;WAClB;SACF;;AAED,eAAO,GAAG,KAAK,CAAC;;AAEhB,YAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC7C,iBAAO,GAAG,IAAI,CAAC;SAChB,MAAM;AACL,eAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9C,qBAAO,GAAG,IAAI,CAAC;aAChB;WACF;SACF;;AAED,YAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,kBAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEtC,eAAO,UAAU,CAAC;OACnB;AACD,SAAG,EAAA,eAAG,EAAE;KACT,CAAC,CAAC;;AAEH,QAAI,QAAQ,CAAC,GAAG,EAAE;AAChB,QAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtB,eAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KAC7B,MAAM;AACL,QAAE,CAAC,OAAO,GAAG,IAAI,CAAC;KACnB;;AAED,WAAO,EAAE,CAAC;GACX;;;;;;;;;;;;;AAvIG,WAAS,WA+Ib,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;;AAErC,QAAI,MAAM,EAAE;AACV,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACtB,gBAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC1B;OACF;KACF;;AAED,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,QAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;GAChC;;;;;;;;;AA5JG,WAAS,WAoKb,SAAS,GAAA,mBAAC,UAAS,EAAE;AACnB,QAAI,OAAO,GAAG,KAAK,CAAC;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjD,UAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAExB,UAAI,GAAG,KAAK,UAAS,EAAE;AACrB,YAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,eAAO,GAAG,IAAI,CAAC;OAChB;KACF;;AAED,QAAI,OAAO,EAAE;AACX,UAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;GACF;;SAnLG,SAAS;;;AAyLf,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG;AACnC,WAAS,EAAE,WAAW;CACvB,CAAC;;qBAEa,SAAS;;;;;;;;;;;;;;;;;;;;;;;;ACzSxB,IAAM,cAAc,GAAG;AACrB,aAAW,EAAE,aAAa;AAC1B,UAAQ,EAAE,UAAU;AACpB,MAAI,EAAE,MAAM;AACZ,MAAI,EAAE,MAAM;AACZ,WAAS,EAAE,WAAW;AACtB,YAAU,EAAE,YAAY;CACzB,CAAC;;;;;;;;;;;;;;;AAeF,IAAM,cAAc,GAAG;AACrB,aAAW,EAAE,aAAa;AAC1B,cAAY,EAAE,cAAc;AAC5B,MAAI,EAAE,MAAM;AACZ,aAAW,EAAE,WAAW;AACxB,aAAW,EAAE,aAAa;AAC1B,YAAU,EAAE,YAAY;CACzB,CAAC;;;;;;;;;;;;;AAaF,IAAM,aAAa,GAAG;AACpB,WAAS,EAAE,WAAW;AACtB,UAAQ,EAAE,UAAU;AACpB,cAAY,EAAE,cAAc;AAC5B,UAAQ,EAAE,UAAU;AACpB,UAAQ,EAAE,UAAU;CACrB,CAAC;;;;;;;AASF,IAAM,aAAa,GAAG;AACpB,UAAQ,EAAE,UAAU;AACpB,QAAM,EAAE,QAAQ;AAChB,SAAO,EAAE,SAAS;CACnB,CAAC;;;;;qBAKa,EAAE,cAAc,EAAd,cAAc,EAAE,cAAc,EAAd,cAAc,EAAE,aAAa,EAAb,aAAa,EAAE,aAAa,EAAb,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;2BChFvD,iBAAiB;;;;yBACrB,gBAAgB;;IAAxB,EAAE;;8BACW,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;;;;;IAYhC,SAAS;YAAT,SAAS;;AACF,WADP,SAAS,GACyB;QAA1B,MAAM,yDAAG,EAAE;QAAE,IAAI,yDAAG,IAAI;;0BADhC,SAAS;;AAEX,2BAAO,CAAC;AACR,QAAI,CAAC,IAAI,EAAE;AACT,UAAI,GAAG,IAAI,CAAC;AACZ,UAAI,OAAO,CAAC,MAAM,EAAE;AAClB,YAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,aAAK,IAAI,IAAI,IAAI,SAAS,CAAC,SAAS,EAAE;AACpC,cAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,gBAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;WACxC;SACF;OACF;KACF;;AAED,QAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,UAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AACpC,SAAG,EAAA,eAAG;AACJ,eAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;OAC5B;KACF,CAAC,CAAC;;AAEH,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3B;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;AA3BG,WAAS,WAoCb,SAAS,GAAA,mBAAC,KAAK,EAAE;AACf,QAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;AAEhC,QAAI,EAAE,EAAE,GAAG,KAAK,IAAI,IAAI,CAAA,AAAC,EAAE;AACzB,YAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AACjC,WAAG,EAAA,eAAG;AACJ,iBAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC5B;OACF,CAAC,CAAC;KACJ;;;AAGD,QAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACtC,UAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,UAAI,CAAC,OAAO,CAAC;AACX,aAAK,EAAL,KAAK;AACL,YAAI,EAAE,UAAU;OACjB,CAAC,CAAC;KACJ;GACF;;;;;;;;;;AAvDG,WAAS,WAgEb,YAAY,GAAA,sBAAC,MAAM,EAAE;AACnB,QAAI,KAAK,YAAA,CAAC;;AAEV,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACtB,aAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,YAAI,KAAK,CAAC,GAAG,EAAE;AACb,eAAK,CAAC,GAAG,EAAE,CAAC;SACb;;AAED,YAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE1B,cAAM;OACP;KACF;;AAED,QAAI,CAAC,KAAK,EAAE;AACV,aAAO;KACR;;AAED,QAAI,CAAC,OAAO,CAAC;AACX,WAAK,EAAL,KAAK;AACL,UAAI,EAAE,aAAa;KACpB,CAAC,CAAC;GACJ;;;;;;;;;;;AAxFG,WAAS,WAkGb,YAAY,GAAA,sBAAC,EAAE,EAAE;AACf,QAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,UAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;AACnB,cAAM,GAAG,KAAK,CAAC;AACf,cAAM;OACP;KACF;;AAED,WAAO,MAAM,CAAC;GACf;;SA9GG,SAAS;;;AAsHf,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG;AACnC,QAAM,EAAE,QAAQ;AAChB,UAAQ,EAAE,UAAU;AACpB,aAAW,EAAE,aAAa;CAC3B,CAAC;;;AAGF,KAAK,IAAI,MAAK,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE;AACpD,WAAS,CAAC,SAAS,CAAC,IAAI,GAAG,MAAK,CAAC,GAAG,IAAI,CAAC;CAC1C;;qBAEc,SAAS;;;;;;;;;;;;;;;;;;;8BChJC,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;2BAChB,kBAAkB;;IAA5B,IAAI;;2BACQ,iBAAiB;;;;;;;;;;;;;;IAWnC,KAAK;YAAL,KAAK;;AACE,WADP,KAAK,GACiB;QAAd,OAAO,yDAAG,EAAE;;0BADpB,KAAK;;AAEP,2BAAO,CAAC;;AAER,QAAI,KAAK,GAAG,IAAI,CAAC;AACjB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAK,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AACzC,WAAK,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;AAChC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACrC;OACF;KACF;;AAED,QAAI,UAAU,GAAG;AACf,QAAE,EAAE,OAAO,CAAC,EAAE,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE;AAC/C,UAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;AACxB,WAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;AAC1B,cAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;KACjC,CAAC;;0BAEO,GAAG;AACV,YAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;AAChC,WAAG,EAAA,eAAG;AAAE,iBAAO,UAAU,CAAC,GAAG,CAAC,CAAC;SAAE;AACjC,WAAG,EAAA,eAAG,EAAE;OACT,CAAC,CAAC;;;AAJL,SAAK,IAAI,GAAG,IAAI,UAAU,EAAE;YAAnB,GAAG;KAKX;;AAED,WAAO,KAAK,CAAC;GACd;;SA7BG,KAAK;;;qBAgCI,KAAK;;;;;;;;;;;;;;;;;;;yBC9CE,cAAc;;;;8BACX,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;AAQtC,IAAM,aAAa,GAAG,SAAhB,aAAa,CAAY,IAAI,EAAE,KAAK,EAAE;AAC1C,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC3B,eAAS;KACV;;AAED,QAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;GAC1B;CACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;IAsBI,cAAc;YAAd,cAAc;;AAEP,WAFP,cAAc,GAEO;QAAb,MAAM,yDAAG,EAAE;;0BAFnB,cAAc;;AAGhB,QAAI,IAAI,YAAA,CAAC;;;;AAIT,SAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtB,qBAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,cAAM;OACP;KACF;;;;AAID,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,WAAK,IAAI,IAAI,IAAI,uBAAU,SAAS,EAAE;AACpC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,uBAAU,SAAS,CAAC,IAAI,CAAC,CAAC;SACxC;OACF;AACD,WAAK,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE;AACzC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,cAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC7C;OACF;KACF;;AAED,QAAI,GAAG,sBAAM,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3B,QAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;AAEvB,UAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;AAC3C,SAAG,EAAA,eAAG;AACJ,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,cAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACpB,mBAAO,CAAC,CAAC;WACV;SACF;AACD,eAAO,CAAC,CAAC,CAAC;OACX;AACD,SAAG,EAAA,eAAG,EAAE;KACT,CAAC,CAAC;;AAEH,WAAO,IAAI,CAAC;GACb;;AA9CG,gBAAc,WAgDlB,SAAS,GAAA,mBAAC,KAAK,EAAE;;;AACf,QAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,mBAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5B;;AAED,yBAAM,SAAS,KAAA,OAAC,KAAK,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,aAAO;KACR;AACD,SAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,YAAM;AAC7C,UAAI,MAAK,SAAS,EAAE;AAClB,eAAO;OACR;AACD,YAAK,SAAS,GAAG,IAAI,CAAC;AACtB,mBAAa,QAAO,KAAK,CAAC,CAAC;AAC3B,YAAK,SAAS,GAAG,KAAK,CAAC;AACvB,YAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;KACxB,CAAC,CAAC;GACJ;;AAnEG,gBAAc,WAqElB,QAAQ,GAAA,kBAAC,KAAK,EAAE;AACd,QAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;GACvB;;AAvEG,gBAAc,WAyElB,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,yBAAM,YAAY,KAAA,OAAC,KAAK,CAAC,CAAC;GAC3B;;SA3EG,cAAc;;;qBA+EL,cAAc;;;;;;;;;;;;;;;;0BC1HA,eAAe;;qBAC1B,SAAS;;;;iCACT,wBAAwB;;;;8BACjB,qBAAqB;;IAAlC,OAAO;;;;;;;;;;;;;;;;;;IAiBb,UAAU;YAAV,UAAU;;AACH,WADP,UAAU,GACY;QAAd,OAAO,yDAAG,EAAE;;0BADpB,UAAU;;AAEZ,QAAI,QAAQ,GAAG,+BAAM,OAAO,EAAE;AAC5B,UAAI,EAAE,2BAAe,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;KACzC,CAAC,CAAC;;;;AAIH,QAAI,KAAK,GAAG,kBAAM,QAAQ,CAAC,CAAC;AAC5B,QAAI,QAAQ,GAAG,KAAK,CAAC;;AAErB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAK,IAAI,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE;AACrC,YAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,eAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC1C;OACF;KACF;;AAED,UAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;AACvC,SAAG,EAAA,eAAG;AAAE,eAAO,QAAQ,CAAC;OAAE;AAC1B,SAAG,EAAA,aAAC,WAAW,EAAE;;AAEf,YAAI,OAAO,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,QAAQ,EAAE;AAChE,iBAAO;SACR;AACD,gBAAQ,GAAG,WAAW,CAAC;AACvB,YAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;;;;;AAKH,QAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,WAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACpC;;AAED,WAAO,KAAK,CAAC;GACd;;SAvCG,UAAU;;;qBA0CD,UAAU;;;;;;;;;;;;;8BC3DJ,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAM,UAAU,GAAG,0BAAO,SAAS,CAAC,SAAS,CAAC;AAC9C,IAAM,gBAAgB,GAAG,AAAC,wBAAwB,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACrE,IAAM,kBAAkB,GAAG,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;;;;;;;;;AASjF,IAAM,OAAO,GAAG,AAAC,OAAO,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;;;;;AAK3C,IAAM,SAAS,GAAG,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;AAC3D,IAAM,OAAO,GAAG,AAAC,OAAO,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC3C,IAAM,MAAM,GAAG,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC;;;AAE/C,IAAM,WAAW,GAAG,CAAC,YAAU;AACpC,MAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC3C,MAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAAE,WAAO,KAAK,CAAC,CAAC,CAAC,CAAC;GAAE;CAC5C,CAAA,EAAG,CAAC;;;AAEE,IAAM,UAAU,GAAG,AAAC,UAAU,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AACjD,IAAM,eAAe,GAAG,CAAC,YAAW;;;AAGzC,MAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,wCAAwC,CAAC;MACpE,KAAK;MACL,KAAK,CAAC;;AAER,MAAI,CAAC,KAAK,EAAE;AACV,WAAO,IAAI,CAAC;GACb;;AAED,OAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,OAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzC,MAAI,KAAK,IAAI,KAAK,EAAE;AAClB,WAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GAC9C,MAAM,IAAI,KAAK,EAAE;AAChB,WAAO,KAAK,CAAC;GACd,MAAM;AACL,WAAO,IAAI,CAAC;GACb;CACF,CAAA,EAAG,CAAC;;;AAEE,IAAM,cAAc,GAAG,UAAU,IAAI,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,IAAI,eAAe,GAAG,GAAG,CAAC;;AAC3F,IAAM,iBAAiB,GAAG,UAAU,IAAI,eAAe,GAAG,CAAC,IAAI,kBAAkB,GAAG,GAAG,CAAC;;;AAExF,IAAM,UAAU,GAAG,AAAC,UAAU,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AACjD,IAAM,OAAO,GAAG,AAAC,OAAO,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC3C,IAAM,SAAS,GAAG,CAAC,OAAO,IAAI,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC3D,IAAM,MAAM,GAAG,AAAC,YAAY,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;;AAE/C,IAAM,aAAa,GAAG,CAAC,EAAE,AAAC,cAAc,6BAAU,IAAK,0BAAO,aAAa,IAAI,uCAAoB,0BAAO,aAAa,CAAA,AAAC,CAAC;;AACzH,IAAM,yBAAyB,IAAG,gBAAgB,IAAI,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAA,CAAC;;;;;;;;;;;;4BC7DnE,kBAAkB;;;;;;;;;;;;AAW3C,SAAS,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClD,MAAI,gBAAgB,GAAG,CAAC;MACpB,KAAK;MAAE,GAAG,CAAC;;AAEf,MAAI,CAAC,QAAQ,EAAE;AACb,WAAO,CAAC,CAAC;GACV;;AAED,MAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjC,YAAQ,GAAG,8BAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;GAClC;;AAED,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AACvC,SAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,OAAG,GAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;AAGxB,QAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,SAAG,GAAG,QAAQ,CAAC;KAChB;;AAED,oBAAgB,IAAI,GAAG,GAAG,KAAK,CAAC;GACjC;;AAED,SAAO,gBAAgB,GAAG,QAAQ,CAAC;CACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BCpCoB,iBAAiB;;;;4BACnB,eAAe;;;;sBACX,WAAW;;IAArB,IAAI;;qBACD,UAAU;;;;oBACT,MAAM;;;;;;;;;;AAQvB,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC7B,SAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAClD;;;;;;;;;AASD,SAAS,iBAAiB,CAAC,GAAG,EAAE;AAC9B,MAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClB,UAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;GAC5D;CACF;;;;;;;;AAQD,SAAS,WAAW,CAAC,SAAS,EAAE;AAC9B,SAAO,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;CACtD;;;;;;;;;;AAUD,SAAS,aAAa,CAAC,MAAM,EAAE;AAC7B,SAAO,UAAU,QAAQ,EAAE,OAAO,EAAE;AAClC,QAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AAC/B,aAAO,4BAAS,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;KAC/B;AACD,QAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC7B,aAAO,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;KAC3C;AACD,WAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,+BAAW,CAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;GAC/D,CAAC;CACH;;;;;;;;;;;AAUM,SAAS,KAAK,CAAC,EAAE,EAAC;AACvB,MAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACzB,MAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;GAClB;;AAED,SAAO,4BAAS,cAAc,CAAC,EAAE,CAAC,CAAC;CACpC;;;;;;;;;;;;AAWM,SAAS,QAAQ,GAA6C;MAA5C,OAAO,yDAAC,KAAK;MAAE,UAAU,yDAAC,EAAE;MAAE,UAAU,yDAAC,EAAE;;AAClE,MAAI,EAAE,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEzC,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;;;;;AAK/B,QAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;AAClF,yBAAI,IAAI,oCAE8D,QAAQ,EAAO,GAAG,EAAI,CAAC;AAC7F,QAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAChC,MAAM;AACL,QAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;KACpB;GACF,CAAC,CAAC;;AAEH,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;GACjD,CAAC,CAAC;;AAEH,SAAO,EAAE,CAAC;CACX;;;;;;;;;;;AAUM,SAAS,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE;AACpC,MAAI,OAAO,EAAE,CAAC,WAAW,KAAK,WAAW,EAAE;AACzC,MAAE,CAAC,SAAS,GAAG,IAAI,CAAC;GACrB,MAAM;AACL,MAAE,CAAC,WAAW,GAAG,IAAI,CAAC;GACvB;CACF;;;;;;;;;;;AAUM,SAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAC;AAC1C,MAAI,MAAM,CAAC,UAAU,EAAE;AACrB,UAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;GAC/C,MAAM;AACL,UAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;GAC3B;CACF;;;;;;;;;;AAUD,IAAM,MAAM,GAAG,EAAE,CAAC;;;;;;;;;AASlB,IAAM,QAAQ,GAAG,OAAO,GAAG,AAAC,IAAI,IAAI,EAAE,CAAE,OAAO,EAAE,CAAC;;;;;;;;;;AAS3C,SAAS,SAAS,CAAC,EAAE,EAAE;AAC5B,MAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAEtB,MAAI,CAAC,EAAE,EAAE;AACP,MAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;GACpC;;AAED,MAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACf,UAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACjB;;AAED,SAAO,MAAM,CAAC,EAAE,CAAC,CAAC;CACnB;;;;;;;;;;;AAUM,SAAS,SAAS,CAAC,EAAE,EAAE;AAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAExB,MAAI,CAAC,EAAE,EAAE;AACP,WAAO,KAAK,CAAC;GACd;;AAED,SAAO,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;CACxD;;;;;;;;;;AASM,SAAS,YAAY,CAAC,EAAE,EAAE;AAC/B,MAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAEtB,MAAI,CAAC,EAAE,EAAE;AACP,WAAO;GACR;;;AAGD,SAAO,MAAM,CAAC,EAAE,CAAC,CAAC;;;AAGlB,MAAI;AACF,WAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;GACrB,CAAC,OAAM,CAAC,EAAE;AACT,QAAI,EAAE,CAAC,eAAe,EAAE;AACtB,QAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;KAC9B,MAAM;;AAEL,QAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KACrB;GACF;CACF;;;;;;;;;;AASM,SAAS,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE;AAChD,MAAI,OAAO,CAAC,SAAS,EAAE;AACrB,WAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;GACjD,MAAM;AACL,qBAAiB,CAAC,YAAY,CAAC,CAAC;AAChC,WAAO,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GAC1D;CACF;;;;;;;;;;AASM,SAAS,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE;AAC9C,MAAI,OAAO,CAAC,SAAS,EAAE;AACrB,WAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;;;GAInC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;AAC3C,aAAO,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,UAAU,CAAA,CAAE,IAAI,EAAE,CAAC;KACnE;;AAED,SAAO,OAAO,CAAC;CAChB;;;;;;;;;;AASM,SAAS,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE;AACpD,MAAI,OAAO,CAAC,SAAS,EAAE;AACrB,WAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;GACzC,MAAM;AACL,qBAAiB,CAAC,aAAa,CAAC,CAAC;AACjC,WAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAS,CAAC,EAAE;AACpE,aAAO,CAAC,KAAK,aAAa,CAAC;KAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GACd;;AAED,SAAO,OAAO,CAAC;CAChB;;;;;;;;;;;;;;;AAcM,SAAS,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE;;;;;AAK/D,MAAI,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;;AAE7C,MAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AACnC,aAAS,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;GAC/C;;AAED,MAAI,OAAO,SAAS,KAAK,SAAS,EAAE;AAClC,aAAS,GAAG,CAAC,GAAG,CAAC;GAClB;;;;AAID,MAAI,SAAS,KAAK,GAAG,EAAE;AACrB,WAAO;GACR;;AAED,MAAI,SAAS,EAAE;AACb,cAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;GACpC,MAAM;AACL,iBAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;GACvC;;AAED,SAAO,OAAO,CAAC;CAChB;;;;;;;;;;;AAUM,SAAS,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE;AAC9C,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;;AAErC,QAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,KAAK,EAAE;AACjF,QAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;KAC9B,MAAM;AACL,QAAE,CAAC,YAAY,CAAC,QAAQ,EAAG,SAAS,KAAK,IAAI,GAAG,EAAE,GAAG,SAAS,CAAE,CAAC;KAClE;GACF,CAAC,CAAC;CACJ;;;;;;;;;;;;;;AAaM,SAAS,eAAe,CAAC,GAAG,EAAE;AACnC,MAAI,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;;AAEjD,KAAG,GAAG,EAAE,CAAC;;;;;AAKT,eAAa,GAAG,GAAG,GAAC,sCAAsC,GAAC,GAAG,CAAC;;AAE/D,MAAI,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,SAAK,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEvB,SAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,cAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,aAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;;;AAIzB,UAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,GAAC,QAAQ,GAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;;;;AAIxF,eAAO,GAAG,AAAC,OAAO,KAAK,IAAI,GAAI,IAAI,GAAG,KAAK,CAAC;OAC7C;;AAED,SAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;KACzB;GACF;;AAED,SAAO,GAAG,CAAC;CACZ;;;;;;;;;AAQM,SAAS,kBAAkB,GAAG;AACnC,8BAAS,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,8BAAS,aAAa,GAAG,YAAW;AAClC,WAAO,KAAK,CAAC;GACd,CAAC;CACH;;;;;;;;;AAQM,SAAS,oBAAoB,GAAG;AACrC,8BAAS,aAAa,GAAG,YAAW;AAClC,WAAO,IAAI,CAAC;GACb,CAAC;CACH;;;;;;;;;;;;AAWM,SAAS,cAAc,CAAC,EAAE,EAAE;AACjC,MAAI,GAAG,YAAA,CAAC;;AAER,MAAI,EAAE,CAAC,qBAAqB,IAAI,EAAE,CAAC,UAAU,EAAE;AAC7C,OAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;GAClC;;AAED,MAAI,CAAC,GAAG,EAAE;AACR,WAAO;AACL,UAAI,EAAE,CAAC;AACP,SAAG,EAAE,CAAC;KACP,CAAC;GACH;;AAED,MAAM,KAAK,GAAG,4BAAS,eAAe,CAAC;AACvC,MAAM,IAAI,GAAG,4BAAS,IAAI,CAAC;;AAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,0BAAO,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;AACzD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC;;AAEhD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;AACzD,MAAM,SAAS,GAAG,0BAAO,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;AACvD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,SAAS,CAAC;;;AAG5C,SAAO;AACL,QAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACtB,OAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;GACrB,CAAC;CACH;;;;;;;;;;;;;AAYM,SAAS,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE;AAC5C,MAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,MAAI,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAI,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC;AAC1B,MAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC;;AAE3B,MAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACnB,MAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACpB,MAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,MAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;AAExB,MAAI,KAAK,CAAC,cAAc,EAAE;AACxB,SAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,SAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;GACvC;;AAED,UAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,AAAC,IAAI,GAAG,KAAK,GAAI,IAAI,CAAA,GAAI,IAAI,CAAC,CAAC,CAAC;AACtE,UAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA,GAAI,IAAI,CAAC,CAAC,CAAC;;AAE7D,SAAO,QAAQ,CAAC;CACjB;;;;;;;;;;AASM,SAAS,IAAI,CAAC,KAAK,EAAE;AAC1B,SAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;CACrE;;;;;;;;;AAQM,SAAS,UAAU,CAAC,KAAK,EAAE;AAChC,SAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;CACrE;;;;;;;;;;AASM,SAAS,OAAO,CAAC,EAAE,EAAE;AAC1B,SAAO,EAAE,CAAC,UAAU,EAAE;AACpB,MAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;GAC/B;AACD,SAAO,EAAE,CAAC;CACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BM,SAAS,gBAAgB,CAAC,OAAO,EAAE;;;;AAIxC,MAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,WAAO,GAAG,OAAO,EAAE,CAAC;GACrB;;;;AAID,SAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA,CAAE,GAAG,CAAC,UAAA,KAAK,EAAI;;;;AAIjE,QAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,WAAK,GAAG,KAAK,EAAE,CAAC;KACjB;;AAED,QAAI,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACpC,aAAO,KAAK,CAAC;KACd;;AAED,QAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjD,aAAO,4BAAS,cAAc,CAAC,KAAK,CAAC,CAAC;KACvC;GACF,CAAC,CAAC,MAAM,CAAC,UAAA,KAAK;WAAI,KAAK;GAAA,CAAC,CAAC;CAC3B;;;;;;;;;;;;AAWM,SAAS,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE;AACzC,kBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;WAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;GAAA,CAAC,CAAC;AAChE,SAAO,EAAE,CAAC;CACX;;;;;;;;;;;;;AAYM,SAAS,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE;AACzC,SAAO,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;CAC5C;;;;;;;;;;;;;;;;;;AAkBM,IAAM,CAAC,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;;;;;;;;;;;;;;;;;;;AAkBzC,IAAM,EAAE,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;qBC9nB9B,UAAU;;IAAnB,GAAG;;sBACO,WAAW;;IAArB,IAAI;;4BACE,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;;;;AAa/B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC;AAChC,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GAClD;;AAED,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;;AAEvC,MAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;;AAEnD,MAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;;AAEvC,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAE7B,MAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAEtB,QAAI,CAAC,UAAU,GAAG,UAAU,KAAK,EAAE,IAAI,EAAC;;AAEtC,UAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;AAC1B,WAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAExB,UAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEzC,UAAI,QAAQ,EAAE;;AAEZ,YAAI,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAErC,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,cAAI,KAAK,CAAC,6BAA6B,EAAE,EAAE;AACzC,kBAAM;WACP,MAAM;AACL,wBAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;WACzC;SACF;OACF;KACF,CAAC;GACH;;AAED,MAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,QAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,UAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACrD,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC3B,UAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KAChD;GACF;CACF;;;;;;;;;;;AAUM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;;AAElC,MAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO;;AAEjC,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,WAAO;GAAE;;AAE/B,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GACnD;;;AAGD,MAAI,UAAU,GAAG,SAAb,UAAU,CAAY,CAAC,EAAC;AACzB,QAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,kBAAc,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;GACzB,CAAC;;;AAGF,MAAI,CAAC,IAAI,EAAE;AACT,SAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;AAAE,gBAAU,CAAC,CAAC,CAAC,CAAC;KAAA,AAC3C,OAAO;GACR;;AAED,MAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;AAGnC,MAAI,CAAC,QAAQ,EAAE,OAAO;;;AAGtB,MAAI,CAAC,EAAE,EAAE;AACP,cAAU,CAAC,IAAI,CAAC,CAAC;AACjB,WAAO;GACR;;;AAGD,MAAI,EAAE,CAAC,IAAI,EAAE;AACX,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,UAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE;AAChC,gBAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;OACzB;KACF;GACF;;AAED,gBAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC5B;;;;;;;;;;;;AAWM,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;;;AAIzC,MAAI,QAAQ,GAAG,AAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAChE,MAAI,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC;;;;;AAKnD,MAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,SAAK,GAAG,EAAE,IAAI,EAAC,KAAK,EAAE,MAAM,EAAC,IAAI,EAAE,CAAC;GACrC;;AAED,OAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;;AAGxB,MAAI,QAAQ,CAAC,UAAU,EAAE;AACvB,YAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;GAC7C;;;;AAIC,MAAI,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AACrE,WAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;;GAG3C,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC7C,UAAI,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;AAG7C,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;;AAE5B,kBAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;AAE3B,YAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAClD,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B;;AAED,kBAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;OAC7B;KACF;;;AAGD,SAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;CAChC;;;;;;;;;;;AAUM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AAClC,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GACnD;AACD,MAAI,IAAI,GAAG,SAAP,IAAI,GAAa;AACnB,OAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtB,MAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GAC3B,CAAC;;AAEF,MAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AAChD,IAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;CACtB;;;;;;;;;;;AAUM,SAAS,QAAQ,CAAC,KAAK,EAAE;;AAE9B,WAAS,UAAU,GAAG;AAAE,WAAO,IAAI,CAAC;GAAE;AACtC,WAAS,WAAW,GAAG;AAAE,WAAO,KAAK,CAAC;GAAE;;;;;;;AAOxC,MAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;AACzC,QAAI,GAAG,GAAG,KAAK,IAAI,0BAAO,KAAK,CAAC;;AAEhC,SAAK,GAAG,EAAE,CAAC;;;;;;AAMX,SAAK,IAAI,GAAG,IAAI,GAAG,EAAE;;;;AAInB,UAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,aAAa,IAC7D,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,iBAAiB,EAAE;;;AAG1D,YAAI,EAAE,GAAG,KAAK,aAAa,IAAI,GAAG,CAAC,cAAc,CAAA,AAAC,EAAE;AAClD,eAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACvB;OACF;KACF;;;AAGD,QAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,WAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,+BAAY,CAAC;KAC7C;;;AAGD,QAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACxB,WAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,MAAM,GACtD,KAAK,CAAC,SAAS,GACf,KAAK,CAAC,WAAW,CAAC;KACrB;;;AAGD,SAAK,CAAC,cAAc,GAAG,YAAY;AACjC,UAAI,GAAG,CAAC,cAAc,EAAE;AACtB,WAAG,CAAC,cAAc,EAAE,CAAC;OACtB;AACD,WAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,SAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AACxB,WAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC/B,CAAC;;AAEF,SAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;;;AAG/B,SAAK,CAAC,eAAe,GAAG,YAAY;AAClC,UAAI,GAAG,CAAC,eAAe,EAAE;AACvB,WAAG,CAAC,eAAe,EAAE,CAAC;OACvB;AACD,WAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAG,CAAC,YAAY,GAAG,IAAI,CAAC;AACxB,WAAK,CAAC,oBAAoB,GAAG,UAAU,CAAC;KACzC,CAAC;;AAEF,SAAK,CAAC,oBAAoB,GAAG,WAAW,CAAC;;;AAGzC,SAAK,CAAC,wBAAwB,GAAG,YAAY;AAC3C,UAAI,GAAG,CAAC,wBAAwB,EAAE;AAChC,WAAG,CAAC,wBAAwB,EAAE,CAAC;OAChC;AACD,WAAK,CAAC,6BAA6B,GAAG,UAAU,CAAC;AACjD,WAAK,CAAC,eAAe,EAAE,CAAC;KACzB,CAAC;;AAEF,SAAK,CAAC,6BAA6B,GAAG,WAAW,CAAC;;;AAGlD,QAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACzB,UAAI,GAAG,GAAG,4BAAS,eAAe;UAAE,IAAI,GAAG,4BAAS,IAAI,CAAC;;AAEzD,WAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,IACxB,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,AAAC,IACtD,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,AAAC,CAAC;AAC1D,WAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,IACxB,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA,AAAC,IACpD,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA,AAAC,CAAC;KACzD;;;AAGD,SAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC;;;;AAI9C,QAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AACxB,WAAK,CAAC,MAAM,GAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GACjC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAClB,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC,AAAC,AAAC,CAAC;KAClC;GACF;;;AAGD,SAAO,KAAK,CAAC;CACd;;;;;;;;;;AAUD,SAAS,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,WAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;;AAK3B,QAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,UAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACxD,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC3B,UAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KAChD;GACF;;;AAGD,MAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACzD,WAAO,IAAI,CAAC,QAAQ,CAAC;AACrB,WAAO,IAAI,CAAC,UAAU,CAAC;AACvB,WAAO,IAAI,CAAC,QAAQ,CAAC;GACtB;;;AAGD,MAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,OAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;GACxB;CACF;;;;;;;;;;;;AAYD,SAAS,qBAAqB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxD,OAAK,CAAC,OAAO,CAAC,UAAS,IAAI,EAAE;;AAE3B,MAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;GAC1B,CAAC,CAAC;CACJ;;;;;;;;;;sBCtXuB,WAAW;;;;;;;;;;;;;AAa5B,IAAM,IAAI,GAAG,SAAP,IAAI,CAAY,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;;AAE7C,MAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAAE,MAAE,CAAC,IAAI,GAAG,iBAAS,CAAC;GAAE;;;AAGtC,MAAI,GAAG,GAAG,SAAN,GAAG,GAAc;AACnB,WAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;GACrC,CAAC;;;;;;;;AAQF,KAAG,CAAC,IAAI,GAAG,AAAC,GAAG,GAAI,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEjD,SAAO,GAAG,CAAC;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;ACrBF,SAAS,UAAU,CAAC,OAAO;MAAE,KAAK,yDAAC,OAAO;sBAAE;AAC1C,WAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACpC,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AACjC,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACnC,QAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,QAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;AAGpC,QAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,QAAQ,EAAE;;;AAG1C,OAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;KACjB;;;AAGD,KAAC,GAAG,AAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;;;;AAIrC,KAAC,GAAG,CAAC,AAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA,IAAK,CAAC,GAAG,EAAE,GAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA,GAAI,GAAG,CAAC;;;AAGtD,KAAC,GAAG,AAAC,CAAC,GAAG,EAAE,GAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE3B,WAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;GAClB;CAAA;;qBAEc,UAAU;;;;;;;;;;;;;;;AClCzB,IAAI,KAAK,GAAG,CAAC,CAAC;;;;;;;;;AAQP,SAAS,OAAO,GAAG;AACxB,SAAO,KAAK,EAAE,CAAC;CAChB;;;;;;;;;;;;4BCdkB,eAAe;;;;;;;AAKlC,IAAM,GAAG,GAAG,SAAN,GAAG,GAAa;AACpB,UAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CAC3B,CAAC;;;;;;AAMF,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;;;;;AAKjB,GAAG,CAAC,KAAK,GAAG,YAAU;AACpB,UAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CAC9B,CAAC;;;;;AAKF,GAAG,CAAC,IAAI,GAAG,YAAU;AACnB,UAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC7B,CAAC;;;;;;;;;;AAUF,SAAS,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAC;;AAE3B,MAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;;AAKjD,MAAI,IAAI,GAAG,SAAP,IAAI,GAAa,EAAE,CAAC;;AAExB,MAAI,OAAO,GAAG,0BAAO,SAAS,CAAC,IAAI;AACjC,SAAK,EAAE,IAAI;AACX,UAAM,EAAE,IAAI;AACZ,WAAO,EAAE,IAAI;GACd,CAAC;;AAEF,MAAI,IAAI,EAAE;;AAER,aAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAC,GAAG,CAAC,CAAC;GAC3C,MAAM;;AAEL,QAAI,GAAG,KAAK,CAAC;GACd;;;AAGD,KAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAG5B,WAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;;;AAG9B,MAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACvB,WAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;GACzC,MAAM;;AAEL,WAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;GACpC;CACF;;qBAEc,GAAG;;;;;;;;;;qBCnCM,YAAY;;;;uCAxClB,4BAA4B;;;;AAE9C,SAAS,OAAO,CAAC,GAAG,EAAE;AACpB,SAAO,CAAC,CAAC,GAAG,IACP,OAAO,GAAG,KAAK,QAAQ,IACvB,GAAG,CAAC,QAAQ,EAAE,KAAK,iBAAiB,IACpC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;CACjC;;;;;;;AAOD,IAAM,UAAU,GAAG,SAAb,UAAU,CAAY,WAAW,EAAE,MAAM,EAAE;;;AAG/C,MAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACpB,WAAO,MAAM,CAAC;GACf;;;;;;;AAOD,MAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzB,WAAO,YAAY,CAAC,MAAM,CAAC,CAAC;GAC7B;CACF,CAAC;;;;;;;;;;;;AAWa,SAAS,YAAY,GAAG;;;AAGrC,MAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;AAIjD,MAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;;;AAGjB,MAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAEtB,uCAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;;AAGxB,SAAO,IAAI,CAAC,CAAC,CAAC,CAAC;CAChB;;;;;;;;;;;8BC3DoB,iBAAiB;;;;AAE/B,IAAI,kBAAkB,GAAG,SAArB,kBAAkB,CAAY,SAAS,EAAE;AAClD,MAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,OAAK,CAAC,SAAS,GAAG,SAAS,CAAC;;AAE5B,SAAO,KAAK,CAAC;CACd,CAAC;;;AAEK,IAAI,cAAc,GAAG,SAAjB,cAAc,CAAY,EAAE,EAAE,OAAO,EAAE;AAChD,MAAI,EAAE,CAAC,UAAU,EAAE;AACjB,MAAE,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;GACjC,MAAM;AACL,MAAE,CAAC,WAAW,GAAG,OAAO,CAAC;GAC1B;CACF,CAAC;;;;;;;;;;;qBCfc,UAAU;;;;;;;;;;;;;;;;;;AAenB,SAAS,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAC;AAC1C,MAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,WAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;GACnC,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;AACnD,WAAO,mBAAmB,EAAE,CAAC;GAC9B;AACD,SAAO,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC5C;;QAE4B,eAAe,GAAnC,gBAAgB;;AAEzB,SAAS,mBAAmB,CAAC,MAAM,EAAC;AAClC,MAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,WAAO;AACL,YAAM,EAAE,CAAC;AACT,WAAK,EAAE,iBAAW;AAChB,cAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;OACpD;AACD,SAAG,EAAE,eAAW;AACd,cAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;OACpD;KACF,CAAC;GACH;AACD,SAAO;AACL,UAAM,EAAE,MAAM,CAAC,MAAM;AACrB,SAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC9C,OAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC;GAC3C,CAAC;CACH;;AAED,SAAS,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC;AACvD,MAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,uBAAI,IAAI,6BAA0B,MAAM,4DAAsD,CAAC;AAC/F,cAAU,GAAG,CAAC,CAAC;GAChB;AACD,YAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,SAAO,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC;CACvC;;AAED,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAC;AAC1C,MAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;AACjC,UAAM,IAAI,KAAK,0BAAuB,MAAM,kDAA0C,KAAK,yDAAoD,QAAQ,QAAK,CAAC;GAC9J;CACF;;;;;;;;;;;;;;;;AChDD,SAAS,WAAW,CAAC,MAAM,EAAC;AAC1B,SAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACzD;;qBAEc,WAAW;;;;;;;;;;;;;8BCXL,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;AAS3B,IAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,GAAG,EAAE;AACpC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;;AAGrF,MAAI,CAAC,GAAG,4BAAS,aAAa,CAAC,GAAG,CAAC,CAAC;AACpC,GAAC,CAAC,IAAI,GAAG,GAAG,CAAC;;;;;AAKb,MAAI,SAAS,GAAI,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,AAAC,CAAC;AAC1D,MAAI,GAAG,YAAA,CAAC;AACR,MAAI,SAAS,EAAE;AACb,OAAG,GAAG,4BAAS,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,OAAG,CAAC,SAAS,iBAAe,GAAG,WAAQ,CAAC;AACxC,KAAC,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEnB,OAAG,CAAC,YAAY,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;AAC9D,gCAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;GAChC;;;;;AAKD,MAAI,OAAO,GAAG,EAAE,CAAC;AACjB,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,WAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GACjC;;;;AAID,MAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAChC,WAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;GACjD;AACD,MAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACjC,WAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;GAClD;;AAED,MAAI,SAAS,EAAE;AACb,gCAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;GAChC;;AAED,SAAO,OAAO,CAAC;CAChB,CAAC;;;;;;;;;;;;AAWK,IAAM,cAAc,GAAG,SAAjB,cAAc,CAAY,GAAG,EAAC;;AAEzC,MAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;;AAE9B,QAAI,GAAG,GAAG,4BAAS,aAAa,CAAC,KAAK,CAAC,CAAC;AACxC,OAAG,CAAC,SAAS,iBAAe,GAAG,YAAS,CAAC;AACzC,OAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;GAC3B;;AAED,SAAO,GAAG,CAAC;CACZ,CAAC;;;;;;;;;;AASK,IAAM,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE;AAC7C,MAAG,OAAO,IAAI,KAAK,QAAQ,EAAC;AAC1B,QAAI,WAAW,GAAG,yEAAyE,CAAC;AAC5F,QAAI,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEvC,QAAI,SAAS,EAAE;AACb,aAAO,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;KACtC;GACF;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;;AASK,IAAM,aAAa,GAAG,SAAhB,aAAa,CAAY,GAAG,EAAE;AACzC,MAAI,MAAM,GAAG,0BAAO,QAAQ,CAAC;AAC7B,MAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;;;AAG5B,MAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;;;;AAIhF,MAAI,WAAW,GAAG,AAAC,WAAW,GAAG,OAAO,CAAC,IAAI,KAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,AAAC,CAAC;;AAEnF,SAAO,WAAW,CAAC;CACpB,CAAC;;;;;;;;;;;;;;;4BCnHiB,eAAe;;;;8BACb,iBAAiB;;;;qBACf,SAAS;;IAApB,KAAK;;iCACW,uBAAuB;;IAAvC,UAAU;;yBACA,aAAa;;;;2BACX,gBAAgB;;;;6BAChB,mBAAmB;;IAA/B,MAAM;;sBACC,UAAU;;;;yBACV,cAAc;;;;wCACR,qCAAqC;;;;yBAC1C,eAAe;;IAAvB,EAAE;;iCACQ,wBAAwB;;;;kCACvB,yBAAyB;;;;kCACzB,yBAAyB;;;;iCAEf,wBAAwB;;iCAClC,wBAAwB;;;;0BAC/B,gBAAgB;;;;0BACX,gBAAgB;;IAAzB,GAAG;;8BACU,oBAAoB;;IAAjC,OAAO;;0BACE,gBAAgB;;IAAzB,GAAG;;wBACM,aAAa;;;;uCAChB,4BAA4B;;;;mBAC9B,KAAK;;;;;;0BAGJ,gBAAgB;;;;2BACf,iBAAiB;;;;2BACjB,iBAAiB;;;;;AAGnC,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;AAC3C,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC;;;;;;;;;;;;;;;;;AAiBD,IAAI,OAAO,GAAG,SAAV,OAAO,CAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxC,MAAI,GAAG,YAAA,CAAC;;;;AAIR,MAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;;;AAG1B,QAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACzB,QAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;;;AAGD,QAAI,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE;;;AAG5B,UAAI,OAAO,EAAE;AACX,gCAAI,IAAI,cAAY,EAAE,4DAAyD,CAAC;OACjF;;AAED,UAAI,KAAK,EAAE;AACT,eAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;OACvC;;AAED,aAAO,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;;;KAGjC,MAAM;AACL,WAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;OACrB;;;GAGF,MAAM;AACL,SAAG,GAAG,EAAE,CAAC;KACV;;;AAGD,MAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;;AACzB,UAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;GAC3E;;;;AAID,SAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,oBAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,wBAAW,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;CACzF,CAAC;;;AAGF,IAAI,0BAAO,wBAAwB,KAAK,IAAI,EAAE;AAC5C,MAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;;AAE1C,MAAI,CAAC,KAAK,EAAE;AACV,SAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;AAC7D,QAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzB,QAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,cAAU,CAAC,cAAc,CAAC,KAAK,kJAS7B,CAAC;GACJ;CACF;;;;AAID,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;;;;;;;AAOnC,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC;;;;;;;;;;;;;AAahC,OAAO,CAAC,OAAO,GAAG,oBAAO,SAAS,CAAC,QAAQ,CAAC;;;;;;;;;AAS5C,OAAO,CAAC,UAAU,GAAG;SAAM,oBAAO,OAAO;CAAA,CAAC;;;;;;;;AAQ1C,OAAO,CAAC,OAAO,GAAG,oBAAO,OAAO,CAAC;;;;;;;;;;;;;;AAcjC,OAAO,CAAC,YAAY,GAAG,uBAAU,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9C,OAAO,CAAC,iBAAiB,GAAG,UAAC,IAAI,EAAE,IAAI,EAAK;AAC1C,MAAI,wBAAK,MAAM,CAAC,IAAI,CAAC,EAAE;AACrB,4BAAI,IAAI,UAAQ,IAAI,iHAA8G,CAAC;GACpI;;AAED,yBAAU,iBAAiB,CAAC,IAAI,yBAAY,IAAI,EAAE,IAAI,CAAC,CAAC;CACzD,CAAC;;;;;;;;;;;;;;AAcF,OAAO,CAAC,OAAO,GAAG,wBAAK,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAuB/B,OAAO,CAAC,YAAY,GAAG,wBAAK,YAAY,CAAC;;;;;;;;AAQzC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;;;;;;;;;;AAU1B,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC9C,OAAO,CAAC,MAAM,wBAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC1B,OAAO,CAAC,YAAY,wCAAe,CAAC;;;;;;;;;;;;;;;;;AAiBpC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CvB,OAAO,CAAC,MAAM,yBAAS,CAAC;;;;;;;;;;;;;;AAcxB,OAAO,CAAC,WAAW,GAAG,UAAS,IAAI,EAAE,IAAI,EAAC;;;AACxC,MAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAA,CAAE,WAAW,EAAE,CAAC;AACjC,SAAO,qCAAM,OAAO,CAAC,OAAO,CAAC,SAAS,uBAAK,IAAI,IAAG,IAAI,UAAG,CAAC,IAAI,CAAC,CAAC;CACjE,CAAC;;;;;;;AAOF,OAAO,CAAC,GAAG,0BAAM,CAAC;;;;;;;;;;AAUlB,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,gBAAgB,sCAAmB,CAAC;;;;;;;;;;;;AAYtE,OAAO,CAAC,UAAU,iCAAa,CAAC;;;;;;;;;AAShC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;AAShC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;AAO1C,OAAO,CAAC,WAAW,2BAAc,CAAC;;;;;;;;;;;;;AAalC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;AAUvB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;AAUzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;;AAWzB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAuBjC,OAAO,CAAC,GAAG,mBAAM,CAAC;;;;;;;AAOlB,OAAO,CAAC,SAAS,iCAAY,CAAC;;;;;;;;AAQ9B,OAAO,CAAC,UAAU,kCAAa,CAAC;;;;;;;;AAQhC,OAAO,CAAC,UAAU,kCAAa,CAAC;;;;;;;;;AAShC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;;;;;;;;;AASxB,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;;;;;;;;;;;AAWpC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;AAShC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;;;;;;;;;AASlC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;;;;;;;;;AASlC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;;;;;;;;AAcxC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;;;AASxC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC;;;;;;;;;;;;AAY5C,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC;;;;;;;;;AAS5C,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2B9B,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B1C,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;;;AAS1C,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AACjD,QAAM,CAAC,SAAS,EAAE,EAAE,EAAE,YAAU;AAAE,WAAO,OAAO,CAAC;GAAE,CAAC,CAAC;;;CAGtD,MAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACpE,UAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;GAC7B;;qBAEc,OAAO","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})",null,"'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { enumerable: false, value: obj });\n        /* eslint-disable no-unused-vars, no-restricted-syntax */\n        for (var _ in obj) { return false; }\n        /* eslint-enable no-unused-vars, no-restricted-syntax */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","var isFunction = require('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n    if (!isFunction(iterator)) {\n        throw new TypeError('iterator must be a function')\n    }\n\n    if (arguments.length < 3) {\n        context = this\n    }\n    \n    if (toString.call(list) === '[object Array]')\n        forEachArray(list, iterator, context)\n    else if (typeof list === 'string')\n        forEachString(list, iterator, context)\n    else\n        forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            iterator.call(context, array[i], i, array)\n        }\n    }\n}\n\nfunction forEachString(string, iterator, context) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        iterator.call(context, string.charAt(i), i, string)\n    }\n}\n\nfunction forEachObject(object, iterator, context) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            iterator.call(context, object[k], k, object)\n        }\n    }\n}\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n    if (toString.call(fn) !== '[object Function]') {\n        throw new TypeError('iterator must be a function');\n    }\n    var l = obj.length;\n    if (l === +l) {\n        for (var i = 0; i < l; i++) {\n            fn.call(ctx, obj[i], i, obj);\n        }\n    } else {\n        for (var k in obj) {\n            if (hasOwn.call(obj, k)) {\n                fn.call(ctx, obj[k], k, obj);\n            }\n        }\n    }\n};\n\n","var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","var implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n    module.exports = document;\n} else {\n    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n\n    module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQ7XG59IGVsc2Uge1xuICAgIHZhciBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J107XG5cbiAgICBpZiAoIWRvY2N5KSB7XG4gICAgICAgIGRvY2N5ID0gdG9wTGV2ZWxbJ19fR0xPQkFMX0RPQ1VNRU5UX0NBQ0hFQDQnXSA9IG1pbkRvYztcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xufVxuIl19","(function (global){\nif (typeof window !== \"undefined\") {\n    module.exports = window;\n} else if (typeof global !== \"undefined\") {\n    module.exports = global;\n} else if (typeof self !== \"undefined\"){\n    module.exports = self;\n} else {\n    module.exports = {};\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzZWxmO1xufSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xufVxuIl19","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n  var string = toString.call(fn)\n  return string === '[object Function]' ||\n    (typeof fn === 'function' && string !== '[object RegExp]') ||\n    (typeof window !== 'undefined' &&\n     // IE8 and below\n     (fn === window.setTimeout ||\n      fn === window.alert ||\n      fn === window.confirm ||\n      fn === window.prompt))\n};\n","var getNative = require('../internal/getNative');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n  return new Date().getTime();\n};\n\nmodule.exports = now;\n","var isObject = require('../lang/isObject'),\n    now = require('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n *  edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n *  delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n *   'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n *     todoChanges.cancel();\n *   }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n  var args,\n      maxTimeoutId,\n      result,\n      stamp,\n      thisArg,\n      timeoutId,\n      trailingCall,\n      lastCalled = 0,\n      maxWait = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = wait < 0 ? 0 : (+wait || 0);\n  if (options === true) {\n    var leading = true;\n    trailing = false;\n  } else if (isObject(options)) {\n    leading = !!options.leading;\n    maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function cancel() {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n    if (maxTimeoutId) {\n      clearTimeout(maxTimeoutId);\n    }\n    lastCalled = 0;\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n  }\n\n  function complete(isCalled, id) {\n    if (id) {\n      clearTimeout(id);\n    }\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n    if (isCalled) {\n      lastCalled = now();\n      result = func.apply(thisArg, args);\n      if (!timeoutId && !maxTimeoutId) {\n        args = thisArg = undefined;\n      }\n    }\n  }\n\n  function delayed() {\n    var remaining = wait - (now() - stamp);\n    if (remaining <= 0 || remaining > wait) {\n      complete(trailingCall, maxTimeoutId);\n    } else {\n      timeoutId = setTimeout(delayed, remaining);\n    }\n  }\n\n  function maxDelayed() {\n    complete(trailing, timeoutId);\n  }\n\n  function debounced() {\n    args = arguments;\n    stamp = now();\n    thisArg = this;\n    trailingCall = trailing && (timeoutId || !leading);\n\n    if (maxWait === false) {\n      var leadingCall = leading && !timeoutId;\n    } else {\n      if (!maxTimeoutId && !leading) {\n        lastCalled = stamp;\n      }\n      var remaining = maxWait - (stamp - lastCalled),\n          isCalled = remaining <= 0 || remaining > maxWait;\n\n      if (isCalled) {\n        if (maxTimeoutId) {\n          maxTimeoutId = clearTimeout(maxTimeoutId);\n        }\n        lastCalled = stamp;\n        result = func.apply(thisArg, args);\n      }\n      else if (!maxTimeoutId) {\n        maxTimeoutId = setTimeout(maxDelayed, remaining);\n      }\n    }\n    if (isCalled && timeoutId) {\n      timeoutId = clearTimeout(timeoutId);\n    }\n    else if (!timeoutId && wait !== maxWait) {\n      timeoutId = setTimeout(delayed, wait);\n    }\n    if (leadingCall) {\n      isCalled = true;\n      result = func.apply(thisArg, args);\n    }\n    if (isCalled && !timeoutId && !maxTimeoutId) {\n      args = thisArg = undefined;\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n","var debounce = require('./debounce'),\n    isObject = require('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n *  edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n *   'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (options === false) {\n    leading = false;\n  } else if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n    keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n  return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n    baseMergeDeep = require('./baseMergeDeep'),\n    isArray = require('../lang/isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isObject = require('../lang/isObject'),\n    isObjectLike = require('./isObjectLike'),\n    isTypedArray = require('../lang/isTypedArray'),\n    keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n  if (!isObject(object)) {\n    return object;\n  }\n  var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n      props = isSrcArr ? undefined : keys(source);\n\n  arrayEach(props || source, function(srcValue, key) {\n    if (props) {\n      key = srcValue;\n      srcValue = source[key];\n    }\n    if (isObjectLike(srcValue)) {\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n      baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n    }\n    else {\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n      }\n      if ((result !== undefined || (isSrcArr && !(key in object))) &&\n          (isCommon || (result === result ? (result !== value) : (value === value)))) {\n        object[key] = result;\n      }\n    }\n  });\n  return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n    isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isPlainObject = require('../lang/isPlainObject'),\n    isTypedArray = require('../lang/isTypedArray'),\n    toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n  var length = stackA.length,\n      srcValue = source[key];\n\n  while (length--) {\n    if (stackA[length] == srcValue) {\n      object[key] = stackB[length];\n      return;\n    }\n  }\n  var value = object[key],\n      result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n      isCommon = result === undefined;\n\n  if (isCommon) {\n    result = srcValue;\n    if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n      result = isArray(value)\n        ? value\n        : (isArrayLike(value) ? arrayCopy(value) : []);\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      result = isArguments(value)\n        ? toPlainObject(value)\n        : (isPlainObject(value) ? value : {});\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  // Add the source value to the stack of traversed objects and associate\n  // it with its merged value.\n  stackA.push(srcValue);\n  stackB.push(result);\n\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n  } else if (result === result ? (result !== value) : (value === value)) {\n    object[key] = result;\n  }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : toObject(object)[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n    isIterateeCall = require('./isIterateeCall'),\n    restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return restParam(function(object, sources) {\n    var index = -1,\n        length = object == null ? 0 : sources.length,\n        customizer = length > 2 ? sources[length - 2] : undefined,\n        guard = length > 2 ? sources[2] : undefined,\n        thisArg = length > 1 ? sources[length - 1] : undefined;\n\n    if (typeof customizer == 'function') {\n      customizer = bindCallback(customizer, thisArg, 5);\n      length -= 2;\n    } else {\n      customizer = typeof thisArg == 'function' ? thisArg : undefined;\n      length -= (customizer ? 1 : 0);\n    }\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n  try {\n    Object({ 'toString': 0 } + '');\n  } catch(e) {\n    return function() { return false; };\n  }\n  return function(value) {\n    // IE < 9 presents many host objects as `Object` objects that can coerce\n    // to strings despite having improperly defined `toString` methods.\n    return typeof value.toString != 'function' && typeof (value + '') == 'string';\n  };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n    isIndex = require('./isIndex'),\n    isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isIndex = require('./isIndex'),\n    isLength = require('./isLength'),\n    isString = require('../lang/isString'),\n    keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object) || isString(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n    isString = require('../lang/isString'),\n    support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  if (support.unindexedChars && isString(value)) {\n    var index = -1,\n        length = value.length,\n        result = Object(value);\n\n    while (++index < length) {\n      result[index] = value.charAt(index);\n    }\n    return result;\n  }\n  return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n    isLength = require('../internal/isLength'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 which returns 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n    isHostObject = require('../internal/isHostObject'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n    isArguments = require('./isArguments'),\n    isHostObject = require('../internal/isHostObject'),\n    isObjectLike = require('../internal/isObjectLike'),\n    support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  var Ctor;\n\n  // Exit early for non `Object` objects.\n  if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n      (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n    return false;\n  }\n  // IE < 9 iterates inherited properties before own properties. If the first\n  // iterated property is an object's own property then there are no inherited\n  // enumerable properties.\n  var result;\n  if (support.ownLast) {\n    baseForIn(value, function(subValue, key, object) {\n      result = hasOwnProperty.call(object, key);\n      return false;\n    });\n    return result !== false;\n  }\n  // In most environments an object's own properties are iterated before\n  // its inherited properties. If the last iterated property is an object's\n  // own property then there are no inherited enumerable properties.\n  baseForIn(value, function(subValue, key) {\n    result = key;\n  });\n  return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n    keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n    isArrayLike = require('../internal/isArrayLike'),\n    isObject = require('../lang/isObject'),\n    shimKeys = require('../internal/shimKeys'),\n    support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n    isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isFunction = require('../lang/isFunction'),\n    isIndex = require('../internal/isIndex'),\n    isLength = require('../internal/isLength'),\n    isObject = require('../lang/isObject'),\n    isString = require('../lang/isString'),\n    support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n  'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n    objectProto = Object.prototype,\n    stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n  for (var tag in nonEnumProps) {\n    if (hasOwnProperty.call(nonEnumProps, tag)) {\n      var props = nonEnumProps[tag];\n      props[key] = hasOwnProperty.call(props, key);\n    }\n  }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n      isProto = proto === object,\n      result = Array(length),\n      skipIndexes = length > 0,\n      skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n      skipProto = support.enumPrototypes && isFunction(object);\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  // lodash skips the `constructor` property when it infers it's iterating\n  // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n  // attribute of an existing property and the `constructor` property of a\n  // prototype defaults to non-enumerable.\n  for (var key in object) {\n    if (!(skipProto && key == 'prototype') &&\n        !(skipErrorProps && (key == 'message' || key == 'name')) &&\n        !(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  if (support.nonEnumShadows && object !== objectProto) {\n    var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n        nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n    if (tag == objectTag) {\n      proto = objectProto;\n    }\n    length = shadowProps.length;\n    while (length--) {\n      key = shadowProps[length];\n      var nonEnum = nonEnums[key];\n      if (!(isProto && nonEnum) &&\n          (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n        result.push(key);\n      }\n    }\n  }\n  return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n    createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n *   'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n *   'fruits': ['apple'],\n *   'vegetables': ['beet']\n * };\n *\n * var other = {\n *   'fruits': ['banana'],\n *   'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n *   if (_.isArray(a)) {\n *     return a.concat(b);\n *   }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n    errorProto = Error.prototype,\n    objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n  var Ctor = function() { this.x = x; },\n      object = { '0': x, 'length': x },\n      props = [];\n\n  Ctor.prototype = { 'valueOf': x, 'y': x };\n  for (var key in new Ctor) { props.push(key); }\n\n  /**\n   * Detect if `name` or `message` properties of `Error.prototype` are\n   * enumerable by default (IE < 9, Safari < 5.1).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n    propertyIsEnumerable.call(errorProto, 'name');\n\n  /**\n   * Detect if `prototype` properties are enumerable by default.\n   *\n   * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n   * (if the prototype or a property on the prototype has been set)\n   * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n   * property to `true`.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n  /**\n   * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n   *\n   * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n   * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.nonEnumShadows = !/valueOf/.test(props);\n\n  /**\n   * Detect if own properties are iterated after inherited properties (IE < 9).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.ownLast = props[0] != 'x';\n\n  /**\n   * Detect if `Array#shift` and `Array#splice` augment array-like objects\n   * correctly.\n   *\n   * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n   * `shift()` and `splice()` functions that fail to remove the last element,\n   * `value[0]`, of array-like objects even though the \"length\" property is\n   * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n   * while `splice()` is buggy regardless of mode in IE < 9.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n  /**\n   * Detect lack of support for accessing string characters by index.\n   *\n   * IE < 8 can't access characters by index. IE 8 can only access characters\n   * by index on string literals, not string objects.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$console: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$parent: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar keys = require('object-keys');\n\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tif (typeof sym === 'string') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(Object(sym) instanceof Symbol)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; }\n\tif (keys(obj).length !== 0) { return false; }\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar bind = require('function-bind');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('./hasSymbols')();\nvar toObject = Object;\nvar push = bind.call(Function.call, Array.prototype.push);\nvar propIsEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable);\n\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\t\tpush(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\ndefineProperties(implementation, {\n\timplementation: implementation,\n\tgetPolyfill: getPolyfill,\n\tshim: shim\n});\n\nmodule.exports = implementation;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t// v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t// note: this does not detect the bug unless there's 20 characters\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","module.exports = once\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var called = false\n  return function () {\n    if (called) return\n    called = true\n    return fn.apply(this, arguments)\n  }\n}\n","var trim = require('trim')\n  , forEach = require('for-each')\n  , isArray = function(arg) {\n      return Object.prototype.toString.call(arg) === '[object Array]';\n    }\n\nmodule.exports = function (headers) {\n  if (!headers)\n    return {}\n\n  var result = {}\n\n  forEach(\n      trim(headers).split('\\n')\n    , function (row) {\n        var index = row.indexOf(':')\n          , key = trim(row.slice(0, index)).toLowerCase()\n          , value = trim(row.slice(index + 1))\n\n        if (typeof(result[key]) === 'undefined') {\n          result[key] = value\n        } else if (isArray(result[key])) {\n          result[key].push(value)\n        } else {\n          result[key] = [ result[key], value ]\n        }\n      }\n  )\n\n  return result\n}","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n    var json\n    var error = null\n\n    try {\n        json = JSON.parse(obj, reviver)\n    } catch (err) {\n        error = err\n    }\n\n    return [error, json]\n}\n","\nexports = module.exports = trim;\n\nfunction trim(str){\n  return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n  return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n  return str.replace(/\\s*$/, '');\n};\n","function clean (s) {\n  return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n  var s = ''\n    , i = 0\n\n  for (; i < arguments.length; i++)\n    s += clean(sa[i]) + (arguments[i + 1] || '')\n\n  return s\n}","\"use strict\";\nvar window = require(\"global/window\")\nvar once = require(\"once\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n    createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n        options = initParams(uri, options, callback)\n        options.method = method.toUpperCase()\n        return _createXHR(options)\n    }\n})\n\nfunction forEachArray(array, iterator) {\n    for (var i = 0; i < array.length; i++) {\n        iterator(array[i])\n    }\n}\n\nfunction isEmpty(obj){\n    for(var i in obj){\n        if(obj.hasOwnProperty(i)) return false\n    }\n    return true\n}\n\nfunction initParams(uri, options, callback) {\n    var params = uri\n\n    if (isFunction(options)) {\n        callback = options\n        if (typeof uri === \"string\") {\n            params = {uri:uri}\n        }\n    } else {\n        params = xtend(options, {uri: uri})\n    }\n\n    params.callback = callback\n    return params\n}\n\nfunction createXHR(uri, options, callback) {\n    options = initParams(uri, options, callback)\n    return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n    var callback = options.callback\n    if(typeof callback === \"undefined\"){\n        throw new Error(\"callback argument missing\")\n    }\n    callback = once(callback)\n\n    function readystatechange() {\n        if (xhr.readyState === 4) {\n            loadFunc()\n        }\n    }\n\n    function getBody() {\n        // Chrome with requestType=blob throws errors arround when even testing access to responseText\n        var body = undefined\n\n        if (xhr.response) {\n            body = xhr.response\n        } else if (xhr.responseType === \"text\" || !xhr.responseType) {\n            body = xhr.responseText || xhr.responseXML\n        }\n\n        if (isJson) {\n            try {\n                body = JSON.parse(body)\n            } catch (e) {}\n        }\n\n        return body\n    }\n\n    var failureResponse = {\n                body: undefined,\n                headers: {},\n                statusCode: 0,\n                method: method,\n                url: uri,\n                rawRequest: xhr\n            }\n\n    function errorFunc(evt) {\n        clearTimeout(timeoutTimer)\n        if(!(evt instanceof Error)){\n            evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n        }\n        evt.statusCode = 0\n        callback(evt, failureResponse)\n    }\n\n    // will load the data & process the response in a special response object\n    function loadFunc() {\n        if (aborted) return\n        var status\n        clearTimeout(timeoutTimer)\n        if(options.useXDR && xhr.status===undefined) {\n            //IE8 CORS GET successful response doesn't have a status field, but body is fine\n            status = 200\n        } else {\n            status = (xhr.status === 1223 ? 204 : xhr.status)\n        }\n        var response = failureResponse\n        var err = null\n\n        if (status !== 0){\n            response = {\n                body: getBody(),\n                statusCode: status,\n                method: method,\n                headers: {},\n                url: uri,\n                rawRequest: xhr\n            }\n            if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n                response.headers = parseHeaders(xhr.getAllResponseHeaders())\n            }\n        } else {\n            err = new Error(\"Internal XMLHttpRequest Error\")\n        }\n        callback(err, response, response.body)\n\n    }\n\n    var xhr = options.xhr || null\n\n    if (!xhr) {\n        if (options.cors || options.useXDR) {\n            xhr = new createXHR.XDomainRequest()\n        }else{\n            xhr = new createXHR.XMLHttpRequest()\n        }\n    }\n\n    var key\n    var aborted\n    var uri = xhr.url = options.uri || options.url\n    var method = xhr.method = options.method || \"GET\"\n    var body = options.body || options.data || null\n    var headers = xhr.headers = options.headers || {}\n    var sync = !!options.sync\n    var isJson = false\n    var timeoutTimer\n\n    if (\"json\" in options) {\n        isJson = true\n        headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n        if (method !== \"GET\" && method !== \"HEAD\") {\n            headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n            body = JSON.stringify(options.json)\n        }\n    }\n\n    xhr.onreadystatechange = readystatechange\n    xhr.onload = loadFunc\n    xhr.onerror = errorFunc\n    // IE9 must have onprogress be set to a unique function.\n    xhr.onprogress = function () {\n        // IE must die\n    }\n    xhr.ontimeout = errorFunc\n    xhr.open(method, uri, !sync, options.username, options.password)\n    //has to be after open\n    if(!sync) {\n        xhr.withCredentials = !!options.withCredentials\n    }\n    // Cannot set timeout with sync request\n    // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n    // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n    if (!sync && options.timeout > 0 ) {\n        timeoutTimer = setTimeout(function(){\n            aborted=true//IE9 may still call readystatechange\n            xhr.abort(\"timeout\")\n            var e = new Error(\"XMLHttpRequest timeout\")\n            e.code = \"ETIMEDOUT\"\n            errorFunc(e)\n        }, options.timeout )\n    }\n\n    if (xhr.setRequestHeader) {\n        for(key in headers){\n            if(headers.hasOwnProperty(key)){\n                xhr.setRequestHeader(key, headers[key])\n            }\n        }\n    } else if (options.headers && !isEmpty(options.headers)) {\n        throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n    }\n\n    if (\"responseType\" in options) {\n        xhr.responseType = options.responseType\n    }\n\n    if (\"beforeSend\" in options &&\n        typeof options.beforeSend === \"function\"\n    ) {\n        options.beforeSend(xhr)\n    }\n\n    xhr.send(body)\n\n    return xhr\n\n\n}\n\nfunction noop() {}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return 'vjs-big-play-button';\n  }\n\n  /**\n   * Handles click for play\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player_.play();\n  }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport ClickableComponent from './clickable-component.js';\nimport Component from './component';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport log from './utils/log.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends ClickableComponent\n * @class Button\n */\nclass Button extends ClickableComponent {\n\n  constructor(player, options) {\n    super(player, options);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Element's node type. e.g. 'div'\n   * @param {Object=} props An object of properties that should be set on the element\n   * @param {Object=} attributes An object of attributes that should be set on the element\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tag='button', props={}, attributes={}) {\n    props = assign({\n      className: this.buildCSSClass()\n    }, props);\n\n    if (tag !== 'button') {\n      log.warn(`Creating a Button with an HTML element of ${tag} is deprecated; use ClickableComponent instead.`);\n\n      // Add properties for clickable element which is not a native HTML button\n      props = assign({\n        tabIndex: 0\n      }, props);\n\n      // Add ARIA attributes for clickable element which is not a native HTML button\n      attributes = assign({\n        role: 'button'\n      }, attributes);\n    }\n\n    // Add attributes for button element\n    attributes = assign({\n      type: 'button', // Necessary since the default button type is \"submit\"\n      'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n    }, attributes);\n\n    let el = Component.prototype.createEl.call(this, tag, props, attributes);\n\n    this.createControlTextEl(el);\n\n    return el;\n  }\n\n  /**\n   * Adds a child component inside this button\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @return {Component} The child component (created by this process if a string was used)\n   * @deprecated\n   * @method addChild\n   */\n  addChild(child, options={}) {\n    let className = this.constructor.name;\n    log.warn(`Adding an actionable (user controllable) child to a Button (${className}) is not supported; use a ClickableComponent instead.`);\n\n    // Avoid the error message generated by ClickableComponent's addChild method\n    return Component.prototype.addChild.call(this, child, options);\n  }\n\n  /**\n   * Handle KeyPress (document level) - Extend with specific functionality for button\n   *\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button.\n    if (event.which === 32 || event.which === 13) {\n    } else {\n      super.handleKeyPress(event); // Pass keypress handling up for unsupported keys\n    }\n  }\n\n}\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport log from './utils/log.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Clickable Component which is clickable or keyboard actionable, but is not a native HTML button\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ClickableComponent\n */\nclass ClickableComponent extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.emitTapEvents();\n\n    this.on('tap', this.handleClick);\n    this.on('click', this.handleClick);\n    this.on('focus', this.handleFocus);\n    this.on('blur', this.handleBlur);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Element's node type. e.g. 'div'\n   * @param {Object=} props An object of properties that should be set on the element\n   * @param {Object=} attributes An object of attributes that should be set on the element\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tag='div', props={}, attributes={}) {\n    props = assign({\n      className: this.buildCSSClass(),\n      tabIndex: 0\n    }, props);\n\n    if (tag === 'button') {\n      log.error(`Creating a ClickableComponent with an HTML element of ${tag} is not supported; use a Button instead.`);\n    }\n\n    // Add ARIA attributes for clickable element which is not a native HTML button\n    attributes = assign({\n      role: 'button',\n      'aria-live': 'polite' // let the screen reader user know that the text of the element may change\n    }, attributes);\n\n    let el = super.createEl(tag, props, attributes);\n\n    this.createControlTextEl(el);\n\n    return el;\n  }\n\n  /**\n   * create control text\n   *\n   * @param {Element} el Parent element for the control text\n   * @return {Element}\n   * @method controlText\n   */\n  createControlTextEl(el) {\n    this.controlTextEl_ = Dom.createEl('span', {\n      className: 'vjs-control-text'\n    });\n\n    if (el) {\n      el.appendChild(this.controlTextEl_);\n    }\n\n    this.controlText(this.controlText_, el);\n\n    return this.controlTextEl_;\n  }\n\n  /**\n   * Controls text - both request and localize\n   *\n   * @param {String}  text Text for element\n   * @param {Element=} el Element to set the title on\n   * @return {String}\n   * @method controlText\n   */\n  controlText(text, el=this.el()) {\n    if (!text) return this.controlText_ || 'Need Text';\n    \n    const localizedText = this.localize(text);\n\n    this.controlText_ = text;\n    this.controlTextEl_.innerHTML = localizedText;\n    el.setAttribute('title', localizedText);\n\n    return this;\n  }\n\n  /**\n   * Allows sub components to stack CSS class names\n   *\n   * @return {String}\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-control vjs-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Adds a child component inside this clickable-component\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @return {Component} The child component (created by this process if a string was used)\n   * @method addChild\n   */\n  addChild(child, options={}) {\n    // TODO: Fix adding an actionable child to a ClickableComponent; currently\n    // it will cause issues with assistive technology (e.g. screen readers)\n    // which support ARIA, since an element with role=\"button\" cannot have\n    // actionable child elements.\n\n    //let className = this.constructor.name;\n    //log.warn(`Adding a child to a ClickableComponent (${className}) can cause issues with assistive technology which supports ARIA, since an element with role=\"button\" cannot have actionable child elements.`);\n\n    return super.addChild(child, options);\n  }\n\n  /**\n   * Enable the component element\n   *\n   * @return {Component}\n   * @method enable\n   */\n  enable() {\n    this.removeClass('vjs-disabled');\n    this.el_.setAttribute('aria-disabled', 'false');\n    return this;\n  }\n\n  /**\n   * Disable the component element\n   *\n   * @return {Component}\n   * @method disable\n   */\n  disable() {\n    this.addClass('vjs-disabled');\n    this.el_.setAttribute('aria-disabled', 'true');\n    return this;\n  }\n\n  /**\n   * Handle Click - Override with specific functionality for component\n   *\n   * @method handleClick\n   */\n  handleClick() {}\n\n  /**\n   * Handle Focus - Add keyboard functionality to element\n   *\n   * @method handleFocus\n   */\n  handleFocus() {\n    Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n  }\n\n  /**\n   * Handle KeyPress (document level) - Trigger click when Space or Enter key is pressed\n   *\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    // Support Space (32) or Enter (13) key operation to fire a click event\n    if (event.which === 32 || event.which === 13) {\n      event.preventDefault();\n      this.handleClick(event);\n    } else if (super.handleKeyPress) {\n      super.handleKeyPress(event); // Pass keypress handling up for unsupported keys\n    }\n  }\n\n  /**\n   * Handle Blur - Remove keyboard triggers\n   *\n   * @method handleBlur\n   */\n  handleBlur() {\n    Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n  }\n}\n\nComponent.registerComponent('ClickableComponent', ClickableComponent);\nexport default ClickableComponent;\n","import Button from './button';\nimport Component from './component';\n\n/**\n * The `CloseButton` component is a button which fires a \"close\" event\n * when it is activated.\n *\n * @extends Button\n * @class CloseButton\n */\nclass CloseButton extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n    this.controlText(options && options.controlText || this.localize('Close'));\n  }\n\n  buildCSSClass() {\n    return `vjs-close-button ${super.buildCSSClass()}`;\n  }\n\n  handleClick() {\n    this.trigger({type: 'close', bubbles: false});\n  }\n}\n\nComponent.registerComponent('CloseButton', CloseButton);\nexport default CloseButton;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n *     // adding a button to the player\n *     var button = player.addChild('button');\n *     button.el(); // -> button element\n * ```\n * ```html\n *     <div class=\"video-js\">\n *       <div class=\"vjs-button\">Button</div>\n *     </div>\n * ```\n * Components are also event targets.\n * ```js\n *     button.on('click', function(){\n *       console.log('Button Clicked!');\n *     });\n *     button.trigger('customevent');\n * ```\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @class Component\n */\nclass Component {\n\n  constructor(player, options, ready) {\n\n    // The component might be the player itself and we can't pass `this` to super\n    if (!player && this.play) {\n      this.player_ = player = this; // eslint-disable-line\n    } else {\n      this.player_ = player;\n    }\n\n    // Make a copy of prototype.options_ to protect against overriding defaults\n    this.options_ = mergeOptions({}, this.options_);\n\n    // Updated options with supplied options\n    options = this.options_ = mergeOptions(this.options_, options);\n\n    // Get ID from options or options element if one is supplied\n    this.id_ = options.id || (options.el && options.el.id);\n\n    // If there was no ID from the options, generate one\n    if (!this.id_) {\n      // Don't require the player ID function in the case of mock players\n      let id = player && player.id && player.id() || 'no_player';\n\n      this.id_ = `${id}_component_${Guid.newGUID()}`;\n    }\n\n    this.name_ = options.name || null;\n\n    // Create element if one wasn't provided in options\n    if (options.el) {\n      this.el_ = options.el;\n    } else if (options.createEl !== false) {\n      this.el_ = this.createEl();\n    }\n\n    this.children_ = [];\n    this.childIndex_ = {};\n    this.childNameIndex_ = {};\n\n    // Add any child components in options\n    if (options.initChildren !== false) {\n      this.initChildren();\n    }\n\n    this.ready(ready);\n    // Don't want to trigger ready here or it will before init is actually\n    // finished for all children that run this constructor\n\n    if (options.reportTouchActivity !== false) {\n      this.enableTouchActivity();\n    }\n  }\n\n  /**\n   * Dispose of the component and all child components\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.trigger({ type: 'dispose', bubbles: false });\n\n    // Dispose all children.\n    if (this.children_) {\n      for (let i = this.children_.length - 1; i >= 0; i--) {\n        if (this.children_[i].dispose) {\n          this.children_[i].dispose();\n        }\n      }\n    }\n\n    // Delete child references\n    this.children_ = null;\n    this.childIndex_ = null;\n    this.childNameIndex_ = null;\n\n    // Remove all event listeners.\n    this.off();\n\n    // Remove element from DOM\n    if (this.el_.parentNode) {\n      this.el_.parentNode.removeChild(this.el_);\n    }\n\n    Dom.removeElData(this.el_);\n    this.el_ = null;\n  }\n\n  /**\n   * Return the component's player\n   *\n   * @return {Player}\n   * @method player\n   */\n  player() {\n    return this.player_;\n  }\n\n  /**\n   * Deep merge of options objects\n   * Whenever a property is an object on both options objects\n   * the two properties will be merged using mergeOptions.\n   *\n   * ```js\n   *     Parent.prototype.options_ = {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n   *         'childTwo': {},\n   *         'childThree': {}\n   *       }\n   *     }\n   *     newOptions = {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'baz', 'abc': '123' }\n   *         'childTwo': null,\n   *         'childFour': {}\n   *       }\n   *     }\n   *\n   *     this.options(newOptions);\n   * ```\n   * RESULT\n   * ```js\n   *     {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n   *         'childTwo': null, // Disabled. Won't be initialized.\n   *         'childThree': {},\n   *         'childFour': {}\n   *       }\n   *     }\n   * ```\n   *\n   * @param  {Object} obj Object of new option values\n   * @return {Object}     A NEW object of this.options_ and obj merged\n   * @method options\n   */\n  options(obj) {\n    log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n    if (!obj) {\n      return this.options_;\n    }\n\n    this.options_ = mergeOptions(this.options_, obj);\n    return this.options_;\n  }\n\n  /**\n   * Get the component's DOM element\n   * ```js\n   *     var domEl = myComponent.el();\n   * ```\n   *\n   * @return {Element}\n   * @method el\n   */\n  el() {\n    return this.el_;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param  {String=} tagName  Element's node type. e.g. 'div'\n   * @param  {Object=} properties An object of properties that should be set\n   * @param  {Object=} attributes An object of attributes that should be set\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tagName, properties, attributes) {\n    return Dom.createEl(tagName, properties, attributes);\n  }\n\n  localize(string) {\n    let code = this.player_.language && this.player_.language();\n    let languages = this.player_.languages && this.player_.languages();\n\n    if (!code || !languages) {\n      return string;\n    }\n\n    let language = languages[code];\n\n    if (language && language[string]) {\n      return language[string];\n    }\n\n    let primaryCode = code.split('-')[0];\n    let primaryLang = languages[primaryCode];\n\n    if (primaryLang && primaryLang[string]) {\n      return primaryLang[string];\n    }\n\n    return string;\n  }\n\n  /**\n   * Return the component's DOM element where children are inserted.\n   * Will either be the same as el() or a new element defined in createEl().\n   *\n   * @return {Element}\n   * @method contentEl\n   */\n  contentEl() {\n    return this.contentEl_ || this.el_;\n  }\n\n  /**\n   * Get the component's ID\n   * ```js\n   *     var id = myComponent.id();\n   * ```\n   *\n   * @return {String}\n   * @method id\n   */\n  id() {\n    return this.id_;\n  }\n\n  /**\n   * Get the component's name. The name is often used to reference the component.\n   * ```js\n   *     var name = myComponent.name();\n   * ```\n   *\n   * @return {String}\n   * @method name\n   */\n  name() {\n    return this.name_;\n  }\n\n  /**\n   * Get an array of all child components\n   * ```js\n   *     var kids = myComponent.children();\n   * ```\n   *\n   * @return {Array} The children\n   * @method children\n   */\n  children() {\n    return this.children_;\n  }\n\n  /**\n   * Returns a child component with the provided ID\n   *\n   * @return {Component}\n   * @method getChildById\n   */\n  getChildById(id) {\n    return this.childIndex_[id];\n  }\n\n  /**\n   * Returns a child component with the provided name\n   *\n   * @return {Component}\n   * @method getChild\n   */\n  getChild(name) {\n    return this.childNameIndex_[name];\n  }\n\n  /**\n   * Adds a child component inside this component\n   * ```js\n   *     myComponent.el();\n   *     // -> <div class='my-component'></div>\n   *     myComponent.children();\n   *     // [empty array]\n   *\n   *     var myButton = myComponent.addChild('MyButton');\n   *     // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n   *     // -> myButton === myComponent.children()[0];\n   * ```\n   * Pass in options for child constructors and options for children of the child\n   * ```js\n   *     var myButton = myComponent.addChild('MyButton', {\n   *       text: 'Press Me',\n   *       buttonChildExample: {\n   *         buttonChildOption: true\n   *       }\n   *     });\n   * ```\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @param {Number} index into our children array to attempt to add the child\n   * @return {Component} The child component (created by this process if a string was used)\n   * @method addChild\n   */\n  addChild(child, options={}, index=this.children_.length) {\n    let component;\n    let componentName;\n\n    // If child is a string, create nt with options\n    if (typeof child === 'string') {\n      componentName = child;\n\n      // Options can also be specified as a boolean, so convert to an empty object if false.\n      if (!options) {\n        options = {};\n      }\n\n      // Same as above, but true is deprecated so show a warning.\n      if (options === true) {\n        log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n        options = {};\n      }\n\n      // If no componentClass in options, assume componentClass is the name lowercased\n      // (e.g. playButton)\n      let componentClassName = options.componentClass || toTitleCase(componentName);\n\n      // Set name through options\n      options.name = componentName;\n\n      // Create a new object & element for this controls set\n      // If there's no .player_, this is a player\n      let ComponentClass = Component.getComponent(componentClassName);\n\n      if (!ComponentClass) {\n        throw new Error(`Component ${componentClassName} does not exist`);\n      }\n\n      // data stored directly on the videojs object may be\n      // misidentified as a component to retain\n      // backwards-compatibility with 4.x. check to make sure the\n      // component class can be instantiated.\n      if (typeof ComponentClass !== 'function') {\n        return null;\n      }\n\n      component = new ComponentClass(this.player_ || this, options);\n\n    // child is a component instance\n    } else {\n      component = child;\n    }\n\n    this.children_.splice(index, 0, component);\n\n    if (typeof component.id === 'function') {\n      this.childIndex_[component.id()] = component;\n    }\n\n    // If a name wasn't used to create the component, check if we can use the\n    // name function of the component\n    componentName = componentName || (component.name && component.name());\n\n    if (componentName) {\n      this.childNameIndex_[componentName] = component;\n    }\n\n    // Add the UI object's element to the container div (box)\n    // Having an element is not required\n    if (typeof component.el === 'function' && component.el()) {\n      let childNodes = this.contentEl().children;\n      let refNode = childNodes[index] || null;\n      this.contentEl().insertBefore(component.el(), refNode);\n    }\n\n    // Return so it can stored on parent object if desired.\n    return component;\n  }\n\n  /**\n   * Remove a child component from this component's list of children, and the\n   * child component's element from this component's element\n   *\n   * @param  {Component} component Component to remove\n   * @method removeChild\n   */\n  removeChild(component) {\n    if (typeof component === 'string') {\n      component = this.getChild(component);\n    }\n\n    if (!component || !this.children_) {\n      return;\n    }\n\n    let childFound = false;\n\n    for (let i = this.children_.length - 1; i >= 0; i--) {\n      if (this.children_[i] === component) {\n        childFound = true;\n        this.children_.splice(i, 1);\n        break;\n      }\n    }\n\n    if (!childFound) {\n      return;\n    }\n\n    this.childIndex_[component.id()] = null;\n    this.childNameIndex_[component.name()] = null;\n\n    let compEl = component.el();\n\n    if (compEl && compEl.parentNode === this.contentEl()) {\n      this.contentEl().removeChild(component.el());\n    }\n  }\n\n  /**\n   * Add and initialize default child components from options\n   * ```js\n   *     // when an instance of MyComponent is created, all children in options\n   *     // will be added to the instance by their name strings and options\n   *     MyComponent.prototype.options_ = {\n   *       children: [\n   *         'myChildComponent'\n   *       ],\n   *       myChildComponent: {\n   *         myChildOption: true\n   *       }\n   *     };\n   *\n   *     // Or when creating the component\n   *     var myComp = new MyComponent(player, {\n   *       children: [\n   *         'myChildComponent'\n   *       ],\n   *       myChildComponent: {\n   *         myChildOption: true\n   *       }\n   *     });\n   * ```\n   * The children option can also be an array of\n   * child options objects (that also include a 'name' key).\n   * This can be used if you have two child components of the\n   * same type that need different options.\n   * ```js\n   *     var myComp = new MyComponent(player, {\n   *       children: [\n   *         'button',\n   *         {\n   *           name: 'button',\n   *           someOtherOption: true\n   *         },\n   *         {\n   *           name: 'button',\n   *           someOtherOption: false\n   *         }\n   *       ]\n   *     });\n   * ```\n   *\n   * @method initChildren\n   */\n  initChildren() {\n    let children = this.options_.children;\n\n    if (children) {\n      // `this` is `parent`\n      let parentOptions = this.options_;\n\n      let handleAdd = (child) => {\n        let name = child.name;\n        let opts = child.opts;\n\n        // Allow options for children to be set at the parent options\n        // e.g. videojs(id, { controlBar: false });\n        // instead of videojs(id, { children: { controlBar: false });\n        if (parentOptions[name] !== undefined) {\n          opts = parentOptions[name];\n        }\n\n        // Allow for disabling default components\n        // e.g. options['children']['posterImage'] = false\n        if (opts === false) {\n          return;\n        }\n\n        // Allow options to be passed as a simple boolean if no configuration\n        // is necessary.\n        if (opts === true) {\n          opts = {};\n        }\n\n        // We also want to pass the original player options to each component as well so they don't need to\n        // reach back into the player for options later.\n        opts.playerOptions = this.options_.playerOptions;\n\n        // Create and add the child component.\n        // Add a direct reference to the child by name on the parent instance.\n        // If two of the same component are used, different names should be supplied\n        // for each\n        let newChild = this.addChild(name, opts);\n        if (newChild) {\n          this[name] = newChild;\n        }\n      };\n\n      // Allow for an array of children details to passed in the options\n      let workingChildren;\n      let Tech = Component.getComponent('Tech');\n\n      if (Array.isArray(children)) {\n        workingChildren = children;\n      } else {\n        workingChildren = Object.keys(children);\n      }\n\n      workingChildren\n      // children that are in this.options_ but also in workingChildren  would\n      // give us extra children we do not want. So, we want to filter them out.\n      .concat(Object.keys(this.options_)\n              .filter(function(child) {\n                return !workingChildren.some(function(wchild) {\n                  if (typeof wchild === 'string') {\n                    return child === wchild;\n                  } else {\n                    return child === wchild.name;\n                  }\n                });\n              }))\n      .map((child) => {\n        let name, opts;\n\n        if (typeof child === 'string') {\n          name = child;\n          opts = children[name] || this.options_[name] || {};\n        } else {\n          name = child.name;\n          opts = child;\n        }\n\n        return {name, opts};\n      })\n      .filter((child) => {\n        // we have to make sure that child.name isn't in the techOrder since\n        // techs are registerd as Components but can't aren't compatible\n        // See https://github.com/videojs/video.js/issues/2772\n        let c = Component.getComponent(child.opts.componentClass ||\n                                       toTitleCase(child.name));\n        return c && !Tech.isTech(c);\n      })\n      .forEach(handleAdd);\n    }\n  }\n\n  /**\n   * Allows sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    // Child classes can include a function that does:\n    // return 'CLASS NAME' + this._super();\n    return '';\n  }\n\n  /**\n   * Add an event listener to this component's element\n   * ```js\n   *     var myFunc = function(){\n   *       var myComponent = this;\n   *       // Do something when the event is fired\n   *     };\n   *\n   *     myComponent.on('eventType', myFunc);\n   * ```\n   * The context of myFunc will be myComponent unless previously bound.\n   * Alternatively, you can add a listener to another element or component.\n   * ```js\n   *     myComponent.on(otherElement, 'eventName', myFunc);\n   *     myComponent.on(otherComponent, 'eventName', myFunc);\n   * ```\n   * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n   * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n   * will be automatically cleaned up when either component is disposed.\n   * It will also bind myComponent as the context of myFunc.\n   * **NOTE**: When using this on elements in the page other than window\n   * and document (both permanent), if you remove the element from the DOM\n   * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n   * references to it and allow the browser to garbage collect it.\n   *\n   * @param  {String|Component} first   The event type or other component\n   * @param  {Function|String}      second  The event handler or event type\n   * @param  {Function}             third   The event handler\n   * @return {Component}\n   * @method on\n   */\n  on(first, second, third) {\n    if (typeof first === 'string' || Array.isArray(first)) {\n      Events.on(this.el_, first, Fn.bind(this, second));\n\n    // Targeting another component or element\n    } else {\n      const target = first;\n      const type = second;\n      const fn = Fn.bind(this, third);\n\n      // When this component is disposed, remove the listener from the other component\n      const removeOnDispose = () => this.off(target, type, fn);\n\n      // Use the same function ID so we can remove it later it using the ID\n      // of the original listener\n      removeOnDispose.guid = fn.guid;\n      this.on('dispose', removeOnDispose);\n\n      // If the other component is disposed first we need to clean the reference\n      // to the other component in this component's removeOnDispose listener\n      // Otherwise we create a memory leak.\n      const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n      // Add the same function ID so we can easily remove it later\n      cleanRemover.guid = fn.guid;\n\n      // Check if this is a DOM node\n      if (first.nodeName) {\n        // Add the listener to the other element\n        Events.on(target, type, fn);\n        Events.on(target, 'dispose', cleanRemover);\n\n      // Should be a component\n      // Not using `instanceof Component` because it makes mock players difficult\n      } else if (typeof first.on === 'function') {\n        // Add the listener to the other component\n        target.on(type, fn);\n        target.on('dispose', cleanRemover);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Remove an event listener from this component's element\n   * ```js\n   *     myComponent.off('eventType', myFunc);\n   * ```\n   * If myFunc is excluded, ALL listeners for the event type will be removed.\n   * If eventType is excluded, ALL listeners will be removed from the component.\n   * Alternatively you can use `off` to remove listeners that were added to other\n   * elements or components using `myComponent.on(otherComponent...`.\n   * In this case both the event type and listener function are REQUIRED.\n   * ```js\n   *     myComponent.off(otherElement, 'eventType', myFunc);\n   *     myComponent.off(otherComponent, 'eventType', myFunc);\n   * ```\n   *\n   * @param  {String=|Component}  first  The event type or other component\n   * @param  {Function=|String}       second The listener function or event type\n   * @param  {Function=}              third  The listener for other component\n   * @return {Component}\n   * @method off\n   */\n  off(first, second, third) {\n    if (!first || typeof first === 'string' || Array.isArray(first)) {\n      Events.off(this.el_, first, second);\n    } else {\n      const target = first;\n      const type = second;\n      // Ensure there's at least a guid, even if the function hasn't been used\n      const fn = Fn.bind(this, third);\n\n      // Remove the dispose listener on this component,\n      // which was given the same guid as the event listener\n      this.off('dispose', fn);\n\n      if (first.nodeName) {\n        // Remove the listener\n        Events.off(target, type, fn);\n        // Remove the listener for cleaning the dispose listener\n        Events.off(target, 'dispose', fn);\n      } else {\n        target.off(type, fn);\n        target.off('dispose', fn);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Add an event listener to be triggered only once and then removed\n   * ```js\n   *     myComponent.one('eventName', myFunc);\n   * ```\n   * Alternatively you can add a listener to another element or component\n   * that will be triggered only once.\n   * ```js\n   *     myComponent.one(otherElement, 'eventName', myFunc);\n   *     myComponent.one(otherComponent, 'eventName', myFunc);\n   * ```\n   *\n   * @param  {String|Component}  first   The event type or other component\n   * @param  {Function|String}       second  The listener function or event type\n   * @param  {Function=}             third   The listener function for other component\n   * @return {Component}\n   * @method one\n   */\n  one(first, second, third) {\n    if (typeof first === 'string' || Array.isArray(first)) {\n      Events.one(this.el_, first, Fn.bind(this, second));\n    } else {\n      const target = first;\n      const type = second;\n      const fn = Fn.bind(this, third);\n\n      const newFunc = () => {\n        this.off(target, type, newFunc);\n        fn.apply(null, arguments);\n      };\n\n      // Keep the same function ID so we can remove it later\n      newFunc.guid = fn.guid;\n\n      this.on(target, type, newFunc);\n    }\n\n    return this;\n  }\n\n  /**\n   * Trigger an event on an element\n   * ```js\n   *     myComponent.trigger('eventName');\n   *     myComponent.trigger({'type':'eventName'});\n   *     myComponent.trigger('eventName', {data: 'some data'});\n   *     myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n   * ```\n   *\n   * @param  {Event|Object|String} event  A string (the type) or an event object with a type attribute\n   * @param  {Object} [hash] data hash to pass along with the event\n   * @return {Component}       self\n   * @method trigger\n   */\n  trigger(event, hash) {\n    Events.trigger(this.el_, event, hash);\n    return this;\n  }\n\n  /**\n   * Bind a listener to the component's ready state.\n   * Different from event listeners in that if the ready event has already happened\n   * it will trigger the function immediately.\n   *\n   * @param  {Function} fn Ready listener\n   * @param  {Boolean} sync Exec the listener synchronously if component is ready\n   * @return {Component}\n   * @method ready\n   */\n  ready(fn, sync=false) {\n    if (fn) {\n      if (this.isReady_) {\n        if (sync) {\n          fn.call(this);\n        } else {\n          // Call the function asynchronously by default for consistency\n          this.setTimeout(fn, 1);\n        }\n      } else {\n        this.readyQueue_ = this.readyQueue_ || [];\n        this.readyQueue_.push(fn);\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Trigger the ready listeners\n   *\n   * @return {Component}\n   * @method triggerReady\n   */\n  triggerReady() {\n    this.isReady_ = true;\n\n    // Ensure ready is triggerd asynchronously\n    this.setTimeout(function(){\n      let readyQueue = this.readyQueue_;\n\n      // Reset Ready Queue\n      this.readyQueue_ = [];\n\n      if (readyQueue && readyQueue.length > 0) {\n        readyQueue.forEach(function(fn){\n          fn.call(this);\n        }, this);\n      }\n\n      // Allow for using event listeners also\n      this.trigger('ready');\n    }, 1);\n  }\n\n  /**\n   * Finds a single DOM element matching `selector` within the component's\n   * `contentEl` or another custom context.\n   *\n   * @method $\n   * @param  {String} selector\n   *         A valid CSS selector, which will be passed to `querySelector`.\n   *\n   * @param  {Element|String} [context=document]\n   *         A DOM element within which to query. Can also be a selector\n   *         string in which case the first matching element will be used\n   *         as context. If missing (or no element matches selector), falls\n   *         back to `document`.\n   *\n   * @return {Element|null}\n   */\n  $(selector, context) {\n    return Dom.$(selector, context || this.contentEl());\n  }\n\n  /**\n   * Finds a all DOM elements matching `selector` within the component's\n   * `contentEl` or another custom context.\n   *\n   * @method $$\n   * @param  {String} selector\n   *         A valid CSS selector, which will be passed to `querySelectorAll`.\n   *\n   * @param  {Element|String} [context=document]\n   *         A DOM element within which to query. Can also be a selector\n   *         string in which case the first matching element will be used\n   *         as context. If missing (or no element matches selector), falls\n   *         back to `document`.\n   *\n   * @return {NodeList}\n   */\n  $$(selector, context) {\n    return Dom.$$(selector, context || this.contentEl());\n  }\n\n  /**\n   * Check if a component's element has a CSS class name\n   *\n   * @param {String} classToCheck Classname to check\n   * @return {Component}\n   * @method hasClass\n   */\n  hasClass(classToCheck) {\n    return Dom.hasElClass(this.el_, classToCheck);\n  }\n\n  /**\n   * Add a CSS class name to the component's element\n   *\n   * @param {String} classToAdd Classname to add\n   * @return {Component}\n   * @method addClass\n   */\n  addClass(classToAdd) {\n    Dom.addElClass(this.el_, classToAdd);\n    return this;\n  }\n\n  /**\n   * Remove a CSS class name from the component's element\n   *\n   * @param {String} classToRemove Classname to remove\n   * @return {Component}\n   * @method removeClass\n   */\n  removeClass(classToRemove) {\n    Dom.removeElClass(this.el_, classToRemove);\n    return this;\n  }\n\n  /**\n   * Add or remove a CSS class name from the component's element\n   *\n   * @param  {String} classToToggle\n   * @param  {Boolean|Function} [predicate]\n   *         Can be a function that returns a Boolean. If `true`, the class\n   *         will be added; if `false`, the class will be removed. If not\n   *         given, the class will be added if not present and vice versa.\n   *\n   * @return {Component}\n   * @method toggleClass\n   */\n  toggleClass(classToToggle, predicate) {\n    Dom.toggleElClass(this.el_, classToToggle, predicate);\n    return this;\n  }\n\n  /**\n   * Show the component element if hidden\n   *\n   * @return {Component}\n   * @method show\n   */\n  show() {\n    this.removeClass('vjs-hidden');\n    return this;\n  }\n\n  /**\n   * Hide the component element if currently showing\n   *\n   * @return {Component}\n   * @method hide\n   */\n  hide() {\n    this.addClass('vjs-hidden');\n    return this;\n  }\n\n  /**\n   * Lock an item in its visible state\n   * To be used with fadeIn/fadeOut.\n   *\n   * @return {Component}\n   * @private\n   * @method lockShowing\n   */\n  lockShowing() {\n    this.addClass('vjs-lock-showing');\n    return this;\n  }\n\n  /**\n   * Unlock an item to be hidden\n   * To be used with fadeIn/fadeOut.\n   *\n   * @return {Component}\n   * @private\n   * @method unlockShowing\n   */\n  unlockShowing() {\n    this.removeClass('vjs-lock-showing');\n    return this;\n  }\n\n  /**\n   * Set or get the width of the component (CSS values)\n   * Setting the video tag dimension values only works with values in pixels.\n   * Percent values will not work.\n   * Some percents can be used, but width()/height() will return the number + %,\n   * not the actual computed width/height.\n   *\n   * @param  {Number|String=} num   Optional width number\n   * @param  {Boolean} skipListeners Skip the 'resize' event trigger\n   * @return {Component} This component, when setting the width\n   * @return {Number|String} The width, when getting\n   * @method width\n   */\n  width(num, skipListeners) {\n    return this.dimension('width', num, skipListeners);\n  }\n\n  /**\n   * Get or set the height of the component (CSS values)\n   * Setting the video tag dimension values only works with values in pixels.\n   * Percent values will not work.\n   * Some percents can be used, but width()/height() will return the number + %,\n   * not the actual computed width/height.\n   *\n   * @param  {Number|String=} num     New component height\n   * @param  {Boolean=} skipListeners Skip the resize event trigger\n   * @return {Component} This component, when setting the height\n   * @return {Number|String} The height, when getting\n   * @method height\n   */\n  height(num, skipListeners) {\n    return this.dimension('height', num, skipListeners);\n  }\n\n  /**\n   * Set both width and height at the same time\n   *\n   * @param  {Number|String} width Width of player\n   * @param  {Number|String} height Height of player\n   * @return {Component} The component\n   * @method dimensions\n   */\n  dimensions(width, height) {\n    // Skip resize listeners on width for optimization\n    return this.width(width, true).height(height);\n  }\n\n  /**\n   * Get or set width or height\n   * This is the shared code for the width() and height() methods.\n   * All for an integer, integer + 'px' or integer + '%';\n   * Known issue: Hidden elements officially have a width of 0. We're defaulting\n   * to the style.width value and falling back to computedStyle which has the\n   * hidden element issue. Info, but probably not an efficient fix:\n   * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n   *\n   * @param  {String} widthOrHeight  'width' or 'height'\n   * @param  {Number|String=} num     New dimension\n   * @param  {Boolean=} skipListeners Skip resize event trigger\n   * @return {Component} The component if a dimension was set\n   * @return {Number|String} The dimension if nothing was set\n   * @private\n   * @method dimension\n   */\n  dimension(widthOrHeight, num, skipListeners) {\n    if (num !== undefined) {\n      // Set to zero if null or literally NaN (NaN !== NaN)\n      if (num === null || num !== num) {\n        num = 0;\n      }\n\n      // Check if using css width/height (% or px) and adjust\n      if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n        this.el_.style[widthOrHeight] = num;\n      } else if (num === 'auto') {\n        this.el_.style[widthOrHeight] = '';\n      } else {\n        this.el_.style[widthOrHeight] = num + 'px';\n      }\n\n      // skipListeners allows us to avoid triggering the resize event when setting both width and height\n      if (!skipListeners) {\n        this.trigger('resize');\n      }\n\n      // Return component\n      return this;\n    }\n\n    // Not setting a value, so getting it\n    // Make sure element exists\n    if (!this.el_) {\n      return 0;\n    }\n\n    // Get dimension value from style\n    let val = this.el_.style[widthOrHeight];\n    let pxIndex = val.indexOf('px');\n\n    if (pxIndex !== -1) {\n      // Return the pixel value with no 'px'\n      return parseInt(val.slice(0, pxIndex), 10);\n    }\n\n    // No px so using % or no style was set, so falling back to offsetWidth/height\n    // If component has display:none, offset will return 0\n    // TODO: handle display:none and no dimension style using px\n    return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n  }\n\n  /**\n   * Get width or height of computed style\n   * @param  {String} widthOrHeight  'width' or 'height'\n   * @return {Number|Boolean} The bolean false if nothing was set\n   * @method currentDimension\n   */\n  currentDimension(widthOrHeight) {\n    let computedWidthOrHeight = 0;\n\n    if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {\n      throw new Error('currentDimension only accepts width or height value');\n    }\n\n    if (typeof window.getComputedStyle === 'function') {\n      const computedStyle = window.getComputedStyle(this.el_);\n      computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];\n    } else if (this.el_.currentStyle) {\n      // ie 8 doesn't support computed style, shim it\n      // return clientWidth or clientHeight instead for better accuracy\n      const rule = `offset${toTitleCase(widthOrHeight)}`;\n      computedWidthOrHeight = this.el_[rule];\n    }\n\n    // remove 'px' from variable and parse as integer\n    computedWidthOrHeight = parseFloat(computedWidthOrHeight);\n    return computedWidthOrHeight;\n  }\n\n  /**\n   * Get an object which contains width and height values of computed style\n   * @return {Object} The dimensions of element\n   * @method currentDimensions\n   */\n  currentDimensions() {\n    return {\n      width: this.currentDimension('width'),\n      height: this.currentDimension('height')\n    };\n  }\n\n  /**\n   * Get width of computed style\n   * @return {Integer}\n   * @method currentWidth\n   */\n  currentWidth() {\n    return this.currentDimension('width');\n  }\n\n  /**\n   * Get height of computed style\n   * @return {Integer}\n   * @method currentHeight\n   */\n  currentHeight() {\n    return this.currentDimension('height');\n  }\n\n  /**\n   * Emit 'tap' events when touch events are supported\n   * This is used to support toggling the controls through a tap on the video.\n   * We're requiring them to be enabled because otherwise every component would\n   * have this extra overhead unnecessarily, on mobile devices where extra\n   * overhead is especially bad.\n   *\n   * @private\n   * @method emitTapEvents\n   */\n  emitTapEvents() {\n    // Track the start time so we can determine how long the touch lasted\n    let touchStart = 0;\n    let firstTouch = null;\n\n    // Maximum movement allowed during a touch event to still be considered a tap\n    // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n    const tapMovementThreshold = 10;\n\n    // The maximum length a touch can be while still being considered a tap\n    const touchTimeThreshold = 200;\n\n    let couldBeTap;\n\n    this.on('touchstart', function(event) {\n      // If more than one finger, don't consider treating this as a click\n      if (event.touches.length === 1) {\n        // Copy the touches object to prevent modifying the original\n        firstTouch = assign({}, event.touches[0]);\n        // Record start time so we can detect a tap vs. \"touch and hold\"\n        touchStart = new Date().getTime();\n        // Reset couldBeTap tracking\n        couldBeTap = true;\n      }\n    });\n\n    this.on('touchmove', function(event) {\n      // If more than one finger, don't consider treating this as a click\n      if (event.touches.length > 1) {\n        couldBeTap = false;\n      } else if (firstTouch) {\n        // Some devices will throw touchmoves for all but the slightest of taps.\n        // So, if we moved only a small distance, this could still be a tap\n        const xdiff = event.touches[0].pageX - firstTouch.pageX;\n        const ydiff = event.touches[0].pageY - firstTouch.pageY;\n        const touchDistance = Math.sqrt(xdiff  * xdiff + ydiff  * ydiff);\n\n        if (touchDistance > tapMovementThreshold) {\n          couldBeTap = false;\n        }\n      }\n    });\n\n    const noTap = function() {\n      couldBeTap = false;\n    };\n\n    // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n    this.on('touchleave', noTap);\n    this.on('touchcancel', noTap);\n\n    // When the touch ends, measure how long it took and trigger the appropriate\n    // event\n    this.on('touchend', function(event) {\n      firstTouch = null;\n      // Proceed only if the touchmove/leave/cancel event didn't happen\n      if (couldBeTap === true) {\n        // Measure how long the touch lasted\n        const touchTime = new Date().getTime() - touchStart;\n\n        // Make sure the touch was less than the threshold to be considered a tap\n        if (touchTime < touchTimeThreshold) {\n          // Don't let browser turn this into a click\n          event.preventDefault();\n          this.trigger('tap');\n          // It may be good to copy the touchend event object and change the\n          // type to tap, if the other event properties aren't exact after\n          // Events.fixEvent runs (e.g. event.target)\n        }\n      }\n    });\n  }\n\n  /**\n   * Report user touch activity when touch events occur\n   * User activity is used to determine when controls should show/hide. It's\n   * relatively simple when it comes to mouse events, because any mouse event\n   * should show the controls. So we capture mouse events that bubble up to the\n   * player and report activity when that happens.\n   * With touch events it isn't as easy. We can't rely on touch events at the\n   * player level, because a tap (touchstart + touchend) on the video itself on\n   * mobile devices is meant to turn controls off (and on). User activity is\n   * checked asynchronously, so what could happen is a tap event on the video\n   * turns the controls off, then the touchend event bubbles up to the player,\n   * which if it reported user activity, would turn the controls right back on.\n   * (We also don't want to completely block touch events from bubbling up)\n   * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n   * to turn the controls back on on a mobile device.\n   * Here we're setting the default component behavior to report user activity\n   * whenever touch events happen, and this can be turned off by components that\n   * want touch events to act differently.\n   *\n   * @method enableTouchActivity\n   */\n  enableTouchActivity() {\n    // Don't continue if the root player doesn't support reporting user activity\n    if (!this.player() || !this.player().reportUserActivity) {\n      return;\n    }\n\n    // listener for reporting that the user is active\n    const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n    let touchHolding;\n\n    this.on('touchstart', function() {\n      report();\n      // For as long as the they are touching the device or have their mouse down,\n      // we consider them active even if they're not moving their finger or mouse.\n      // So we want to continue to update that they are active\n      this.clearInterval(touchHolding);\n      // report at the same interval as activityCheck\n      touchHolding = this.setInterval(report, 250);\n    });\n\n    const touchEnd = function(event) {\n      report();\n      // stop the interval that maintains activity if the touch is holding\n      this.clearInterval(touchHolding);\n    };\n\n    this.on('touchmove', report);\n    this.on('touchend', touchEnd);\n    this.on('touchcancel', touchEnd);\n  }\n\n  /**\n   * Creates timeout and sets up disposal automatically.\n   *\n   * @param {Function} fn The function to run after the timeout.\n   * @param {Number} timeout Number of ms to delay before executing specified function.\n   * @return {Number} Returns the timeout ID\n   * @method setTimeout\n   */\n  setTimeout(fn, timeout) {\n    fn = Fn.bind(this, fn);\n\n    // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n    let timeoutId = window.setTimeout(fn, timeout);\n\n    const disposeFn = function() {\n      this.clearTimeout(timeoutId);\n    };\n\n    disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n    this.on('dispose', disposeFn);\n\n    return timeoutId;\n  }\n\n  /**\n   * Clears a timeout and removes the associated dispose listener\n   *\n   * @param {Number} timeoutId The id of the timeout to clear\n   * @return {Number} Returns the timeout ID\n   * @method clearTimeout\n   */\n  clearTimeout(timeoutId) {\n    window.clearTimeout(timeoutId);\n\n    const disposeFn = function() {};\n\n    disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n    this.off('dispose', disposeFn);\n\n    return timeoutId;\n  }\n\n  /**\n   * Creates an interval and sets up disposal automatically.\n   *\n   * @param {Function} fn The function to run every N seconds.\n   * @param {Number} interval Number of ms to delay before executing specified function.\n   * @return {Number} Returns the interval ID\n   * @method setInterval\n   */\n  setInterval(fn, interval) {\n    fn = Fn.bind(this, fn);\n\n    let intervalId = window.setInterval(fn, interval);\n\n    const disposeFn = function() {\n      this.clearInterval(intervalId);\n    };\n\n    disposeFn.guid = `vjs-interval-${intervalId}`;\n\n    this.on('dispose', disposeFn);\n\n    return intervalId;\n  }\n\n  /**\n   * Clears an interval and removes the associated dispose listener\n   *\n   * @param {Number} intervalId The id of the interval to clear\n   * @return {Number} Returns the interval ID\n   * @method clearInterval\n   */\n  clearInterval(intervalId) {\n    window.clearInterval(intervalId);\n\n    const disposeFn = function() {};\n\n    disposeFn.guid = `vjs-interval-${intervalId}`;\n\n    this.off('dispose', disposeFn);\n\n    return intervalId;\n  }\n\n  /**\n   * Registers a component\n   *\n   * @param {String} name Name of the component to register\n   * @param {Object} comp The component to register\n   * @static\n   * @method registerComponent\n   */\n  static registerComponent(name, comp) {\n    if (!Component.components_) {\n      Component.components_ = {};\n    }\n\n    Component.components_[name] = comp;\n    return comp;\n  }\n\n  /**\n   * Gets a component by name\n   *\n   * @param {String} name Name of the component to get\n   * @return {Component}\n   * @static\n   * @method getComponent\n   */\n  static getComponent(name) {\n    if (Component.components_ && Component.components_[name]) {\n      return Component.components_[name];\n    }\n\n    if (window && window.videojs && window.videojs[name]) {\n      log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n      return window.videojs[name];\n    }\n  }\n\n  /**\n   * Sets up the constructor using the supplied init method\n   * or uses the init of the parent object\n   *\n   * @param {Object} props An object of properties\n   * @static\n   * @deprecated\n   * @method extend\n   */\n  static extend(props) {\n    props = props || {};\n\n    log.warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n    // Set up the constructor using the supplied init method\n    // or using the init of the parent object\n    // Make sure to check the unobfuscated version for external libs\n    let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n    // In Resig's simple class inheritance (previously used) the constructor\n    //  is a function that calls `this.init.apply(arguments)`\n    // However that would prevent us from using `ParentObject.call(this);`\n    //  in a Child constructor because the `this` in `this.init`\n    //  would still refer to the Child and cause an infinite loop.\n    // We would instead have to do\n    //    `ParentObject.prototype.init.apply(this, arguments);`\n    //  Bleh. We're not creating a _super() function, so it's good to keep\n    //  the parent constructor reference simple.\n    let subObj = function() {\n      init.apply(this, arguments);\n    };\n\n    // Inherit from this object's prototype\n    subObj.prototype = Object.create(this.prototype);\n    // Reset the constructor property for subObj otherwise\n    // instances of subObj would have the constructor of the parent Object\n    subObj.prototype.constructor = subObj;\n\n    // Make the class extendable\n    subObj.extend = Component.extend;\n\n    // Extend subObj's prototype with functions and other properties from props\n    for (let name in props) {\n      if (props.hasOwnProperty(name)) {\n        subObj.prototype[name] = props[name];\n      }\n    }\n\n    return subObj;\n  }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file audio-track-button.js\n */\nimport TrackButton from '../track-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport AudioTrackMenuItem from './audio-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TrackButton\n * @class AudioTrackButton\n */\nclass AudioTrackButton extends TrackButton {\n  constructor(player, options = {}) {\n    options.tracks = player.audioTracks && player.audioTracks();\n\n    super(player, options);\n\n    this.el_.setAttribute('aria-label', 'Audio Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-audio-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create a menu item for each audio track\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems(items = []) {\n    let tracks = this.player_.audioTracks && this.player_.audioTracks();\n\n    if (!tracks) {\n      return items;\n    }\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      items.push(new AudioTrackMenuItem(this.player_, {\n        // MenuItem is selectable\n        'selectable': true,\n        'track': track\n      }));\n    }\n\n    return items;\n  }\n}\n\nComponent.registerComponent('AudioTrackButton', AudioTrackButton);\nexport default AudioTrackButton;\n","/**\n * @file audio-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The audio track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class AudioTrackMenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n  constructor(player, options) {\n    let track = options.track;\n    let tracks = player.audioTracks();\n\n    // Modify options for parent MenuItem class's init.\n    options.label = track.label || track.language || 'Unknown';\n    options.selected = track.enabled;\n\n    super(player, options);\n\n    this.track = track;\n\n    if (tracks) {\n      let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n      tracks.addEventListener('change', changeHandler);\n      this.on('dispose', () => {\n        tracks.removeEventListener('change', changeHandler);\n      });\n    }\n  }\n\n  /**\n   * Handle click on audio track\n   *\n   * @method handleClick\n   */\n  handleClick(event) {\n    let tracks = this.player_.audioTracks();\n\n    super.handleClick(event);\n\n    if (!tracks) return;\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      if (track === this.track) {\n        track.enabled = true;\n      }\n    }\n  }\n\n  /**\n   * Handle audio track change\n   *\n   * @method handleTracksChange\n   */\n  handleTracksChange(event) {\n    this.selected(this.track.enabled);\n  }\n}\n\nComponent.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nexport default AudioTrackMenuItem;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport DescriptionsButton from './text-track-controls/descriptions-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport AudioTrackButton from './audio-track-controls/audio-track-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-control-bar',\n      dir: 'ltr'\n    }, {\n      'role': 'group' // The control bar is a group, so it can contain menuitems\n    });\n  }\n}\n\nControlBar.prototype.options_ = {\n  loadEvent: 'play',\n  children: [\n    'playToggle',\n    'volumeMenuButton',\n    'currentTimeDisplay',\n    'timeDivider',\n    'durationDisplay',\n    'progressControl',\n    'liveDisplay',\n    'remainingTimeDisplay',\n    'customControlSpacer',\n    'playbackRateMenuButton',\n    'chaptersButton',\n    'descriptionsButton',\n    'subtitlesButton',\n    'captionsButton',\n    'audioTrackButton',\n    'fullscreenToggle'\n  ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handles click for full screen\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    if (!this.player_.isFullscreen()) {\n      this.player_.requestFullscreen();\n      this.controlText('Non-Fullscreen');\n    } else {\n      this.player_.exitFullscreen();\n      this.controlText('Fullscreen');\n    }\n  }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.updateShowing();\n    this.on(this.player(), 'durationchange', this.updateShowing);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    var el = super.createEl('div', {\n      className: 'vjs-live-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-live-display',\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Stream Type')}</span>${this.localize('LIVE')}`\n    }, {\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  updateShowing() {\n    if (this.player().duration() === Infinity) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.on(player, 'volumechange', this.update);\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n\n    this.on(player, 'loadstart', function() {\n      this.update(); // We need to update the button to account for a default muted state.\n\n      if (player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-mute-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handle click on mute\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player_.muted( this.player_.muted() ? false : true );\n  }\n\n  /**\n   * Update volume\n   *\n   * @method update\n   */\n  update() {\n    var vol = this.player_.volume(),\n        level = 3;\n\n    if (vol === 0 || this.player_.muted()) {\n      level = 0;\n    } else if (vol < 0.33) {\n      level = 1;\n    } else if (vol < 0.67) {\n      level = 2;\n    }\n\n    // Don't rewrite the button text if the actual text doesn't change.\n    // This causes unnecessary and confusing information for screen reader users.\n    // This check is needed because this function gets called every time the volume level is changed.\n    let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n    if (this.controlText() !== toMute) {\n      this.controlText(toMute);\n    }\n\n    /* TODO improve muted icon classes */\n    for (var i = 0; i < 4; i++) {\n      Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n    }\n    Dom.addElClass(this.el_, `vjs-vol-${level}`);\n  }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'play', this.handlePlay);\n    this.on(player, 'pause', this.handlePause);\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-play-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handle click to toggle between play and pause\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    if (this.player_.paused()) {\n      this.player_.play();\n    } else {\n      this.player_.pause();\n    }\n  }\n\n  /**\n   * Add the vjs-playing class to the element so it can change appearance\n   *\n   * @method handlePlay\n   */\n  handlePlay() {\n    this.removeClass('vjs-paused');\n    this.addClass('vjs-playing');\n    this.controlText('Pause'); // change the button text to \"Pause\"\n  }\n\n  /**\n   * Add the vjs-paused class to the element so it can change appearance\n   *\n   * @method handlePause\n   */\n  handlePause() {\n    this.removeClass('vjs-playing');\n    this.addClass('vjs-paused');\n    this.controlText('Play'); // change the button text to \"Play\"\n  }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.updateVisibility();\n    this.updateLabel();\n\n    this.on(player, 'loadstart', this.updateVisibility);\n    this.on(player, 'ratechange', this.updateLabel);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl();\n\n    this.labelEl_ = Dom.createEl('div', {\n      className: 'vjs-playback-rate-value',\n      innerHTML: 1.0\n    });\n\n    el.appendChild(this.labelEl_);\n\n    return el;\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-playback-rate ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the playback rate menu\n   *\n   * @return {Menu} Menu object populated with items\n   * @method createMenu\n   */\n  createMenu() {\n    let menu = new Menu(this.player());\n    let rates = this.playbackRates();\n\n    if (rates) {\n      for (let i = rates.length - 1; i >= 0; i--) {\n        menu.addChild(\n          new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n        );\n      }\n    }\n\n    return menu;\n  }\n\n  /**\n   * Updates ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateARIAAttributes() {\n    // Current playback rate\n    this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n  }\n\n  /**\n   * Handle menu item click\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    // select next rate option\n    let currentRate = this.player().playbackRate();\n    let rates = this.playbackRates();\n\n    // this will select first one if the last one currently selected\n    let newRate = rates[0];\n    for (let i = 0; i < rates.length ; i++) {\n      if (rates[i] > currentRate) {\n        newRate = rates[i];\n        break;\n      }\n    }\n    this.player().playbackRate(newRate);\n  }\n\n  /**\n   * Get possible playback rates\n   *\n   * @return {Array} Possible playback rates\n   * @method playbackRates\n   */\n  playbackRates() {\n    return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n  }\n\n  /**\n   * Get whether playback rates is supported by the tech\n   * and an array of playback rates exists\n   *\n   * @return {Boolean} Whether changing playback rate is supported\n   * @method playbackRateSupported\n   */\n  playbackRateSupported() {\n    return this.player().tech_\n      && this.player().tech_['featuresPlaybackRate']\n      && this.playbackRates()\n      && this.playbackRates().length > 0\n    ;\n  }\n\n  /**\n   * Hide playback rate controls when they're no playback rate options to select\n   *\n   * @method updateVisibility\n   */\n  updateVisibility() {\n    if (this.playbackRateSupported()) {\n      this.removeClass('vjs-hidden');\n    } else {\n      this.addClass('vjs-hidden');\n    }\n  }\n\n  /**\n   * Update button label when rate changed\n   *\n   * @method updateLabel\n   */\n  updateLabel() {\n    if (this.playbackRateSupported()) {\n      this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n    }\n  }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let label = options['rate'];\n    let rate = parseFloat(label, 10);\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = label;\n    options['selected'] = rate === 1;\n    super(player, options);\n\n    this.label = label;\n    this.rate = rate;\n\n    this.on(player, 'ratechange', this.update);\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    super.handleClick();\n    this.player().playbackRate(this.rate);\n  }\n\n  /**\n   * Update playback rate with selected rate\n   *\n   * @method update\n   */\n  update() {\n    this.selected(this.player().playbackRate() === this.rate);\n  }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'progress', this.update);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-load-progress',\n      innerHTML: `<span class=\"vjs-control-text\"><span>${this.localize('Loaded')}</span>: 0%</span>`\n    });\n  }\n\n  /**\n   * Update progress bar\n   *\n   * @method update\n   */\n  update() {\n    let buffered = this.player_.buffered();\n    let duration = this.player_.duration();\n    let bufferedEnd = this.player_.bufferedEnd();\n    let children = this.el_.children;\n\n    // get the percent width of a time compared to the total end\n    let percentify = function (time, end){\n      let percent = (time / end) || 0; // no NaN\n      return ((percent >= 1 ? 1 : percent) * 100) + '%';\n    };\n\n    // update the width of the progress bar\n    this.el_.style.width = percentify(bufferedEnd, duration);\n\n    // add child elements to represent the individual buffered time ranges\n    for (let i = 0; i < buffered.length; i++) {\n      let start = buffered.start(i);\n      let end = buffered.end(i);\n      let part = children[i];\n\n      if (!part) {\n        part = this.el_.appendChild(Dom.createEl());\n      }\n\n      // set the percent based on the width of the progress bar (bufferedEnd)\n      part.style.left = percentify(start, bufferedEnd);\n      part.style.width = percentify(end - start, bufferedEnd);\n    }\n\n    // remove unused buffered range elements\n    for (let i = children.length; i > buffered.length; i--) {\n      this.el_.removeChild(children[i-1]);\n    }\n  }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file mouse-time-display.js\n */\nimport window from 'global/window';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport throttle from 'lodash-compat/function/throttle';\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\nclass MouseTimeDisplay extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.tooltip = Dom.createEl('div', {className: 'vjs-time-tooltip'});\n      this.el().appendChild(this.tooltip);\n      this.addClass('vjs-keep-tooltips-inside');\n    }\n\n    this.update(0, 0);\n\n    player.on('ready', () => {\n      this.on(player.controlBar.progressControl.el(), 'mousemove', throttle(Fn.bind(this, this.handleMouseMove), 25));\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-mouse-display'\n    });\n  }\n\n  handleMouseMove(event) {\n    let duration = this.player_.duration();\n    let newTime = this.calculateDistance(event) * duration;\n    let position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n\n    this.update(newTime, position);\n  }\n\n  update(newTime, position) {\n    let time = formatTime(newTime, this.player_.duration());\n\n    this.el().style.left = position + 'px';\n    this.el().setAttribute('data-current-time', time);\n\n    if (this.keepTooltipsInside) {\n      let clampedPosition = this.clampPosition_(position);\n      let difference = position - clampedPosition + 1;\n      let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltip).width);\n      let tooltipWidthHalf = tooltipWidth / 2;\n\n      this.tooltip.innerHTML = time;\n      this.tooltip.style.right = `-${tooltipWidthHalf - difference}px`;\n    }\n  }\n\n  calculateDistance(event) {\n    return Dom.getPointerPosition(this.el().parentNode, event).x;\n  }\n\n  /**\n   * This takes in a horizontal position for the bar and returns a clamped position.\n   * Clamped position means that it will keep the position greater than half the width\n   * of the tooltip and smaller than the player width minus half the width o the tooltip.\n   * It will only clamp the position if `keepTooltipsInside` option is set.\n   *\n   * @param {Number} position the position the bar wants to be\n   * @return {Number} newPosition the (potentially) clamped position\n   * @method clampPosition_\n   */\n  clampPosition_(position) {\n    if (!this.keepTooltipsInside) {\n      return position;\n    }\n\n    let playerWidth = parseFloat(window.getComputedStyle(this.player().el()).width);\n    let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltip).width);\n    let tooltipWidthHalf = tooltipWidth / 2;\n    let actualPosition = position;\n\n    if (position < tooltipWidthHalf) {\n      actualPosition = Math.ceil(tooltipWidthHalf);\n    } else if (position > (playerWidth - tooltipWidthHalf)) {\n      actualPosition = Math.floor(playerWidth - tooltipWidthHalf);\n    }\n\n    return actualPosition;\n  }\n}\n\nComponent.registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexport default MouseTimeDisplay;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.updateDataAttr();\n    this.on(player, 'timeupdate', this.updateDataAttr);\n    player.ready(Fn.bind(this, this.updateDataAttr));\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.addClass('vjs-keep-tooltips-inside');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-play-progress vjs-slider-bar',\n      innerHTML: `<span class=\"vjs-control-text\"><span>${this.localize('Progress')}</span>: 0%</span>`\n    });\n  }\n\n  updateDataAttr() {\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n  }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\nimport MouseTimeDisplay from './mouse-time-display.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-progress-control vjs-control'\n    });\n  }\n}\n\nProgressControl.prototype.options_ = {\n  children: [\n    'seekBar'\n  ]\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport window from 'global/window';\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport TooltipProgressBar from './tooltip-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport assign from 'object.assign';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'timeupdate', this.updateProgress);\n    this.on(player, 'ended', this.updateProgress);\n    player.ready(Fn.bind(this, this.updateProgress));\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.tooltipProgressBar = this.addChild('TooltipProgressBar');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-progress-holder'\n    }, {\n      'aria-label': 'progress bar'\n    });\n  }\n\n  /**\n   * Update ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateProgress() {\n    this.updateAriaAttributes(this.el_);\n\n    if (this.keepTooltipsInside) {\n      this.updateAriaAttributes(this.tooltipProgressBar.el_);\n      this.tooltipProgressBar.el_.style.width = this.bar.el_.style.width;\n\n      let playerWidth = parseFloat(window.getComputedStyle(this.player().el()).width);\n      let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltipProgressBar.tooltip).width);\n      let tooltipStyle = this.tooltipProgressBar.el().style;\n      tooltipStyle.maxWidth = Math.floor(playerWidth - (tooltipWidth / 2)) + 'px';\n      tooltipStyle.minWidth = Math.ceil(tooltipWidth / 2) + 'px';\n      tooltipStyle.right = `-${tooltipWidth / 2}px`;\n    }\n  }\n\n  updateAriaAttributes(el) {\n    // Allows for smooth scrubbing, when player can't keep up.\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n    el.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n  }\n\n  /**\n   * Get percentage of video played\n   *\n   * @return {Number} Percentage played\n   * @method getPercent\n   */\n  getPercent() {\n    let percent = this.player_.currentTime() / this.player_.duration();\n    return percent >= 1 ? 1 : percent;\n  }\n\n  /**\n   * Handle mouse down on seek bar\n   *\n   * @method handleMouseDown\n   */\n  handleMouseDown(event) {\n    super.handleMouseDown(event);\n\n    this.player_.scrubbing(true);\n\n    this.videoWasPlaying = !this.player_.paused();\n    this.player_.pause();\n  }\n\n  /**\n   * Handle mouse move on seek bar\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove(event) {\n    let newTime = this.calculateDistance(event) * this.player_.duration();\n\n    // Don't let video end while scrubbing.\n    if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n    // Set new time (tell player to seek to new time)\n    this.player_.currentTime(newTime);\n  }\n\n  /**\n   * Handle mouse up on seek bar\n   *\n   * @method handleMouseUp\n   */\n  handleMouseUp(event) {\n    super.handleMouseUp(event);\n\n    this.player_.scrubbing(false);\n    if (this.videoWasPlaying) {\n      this.player_.play();\n    }\n  }\n\n  /**\n   * Move more quickly fast forward for keyboard-only users\n   *\n   * @method stepForward\n   */\n  stepForward() {\n    this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n  }\n\n  /**\n   * Move more quickly rewind for keyboard-only users\n   *\n   * @method stepBack\n   */\n  stepBack() {\n    this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n  }\n\n}\n\nSeekBar.prototype.options_ = {\n  children: [\n    'loadProgressBar',\n    'mouseTimeDisplay',\n    'playProgressBar'\n  ],\n  'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass TooltipProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.updateDataAttr();\n    this.on(player, 'timeupdate', this.updateDataAttr);\n    player.ready(Fn.bind(this, this.updateDataAttr));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-tooltip-progress-bar vjs-slider-bar',\n      innerHTML: `<div class=\"vjs-time-tooltip\"></div>\n        <span class=\"vjs-control-text\"><span>${this.localize('Progress')}</span>: 0%</span>`\n    });\n\n    this.tooltip = el.querySelector('.vjs-time-tooltip');\n\n    return el;\n  }\n\n  updateDataAttr() {\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    let formattedTime = formatTime(time, this.player_.duration());\n    this.el_.setAttribute('data-current-time', formattedTime);\n    this.tooltip.innerHTML = formattedTime;\n  }\n\n}\n\nComponent.registerComponent('TooltipProgressBar', TooltipProgressBar);\nexport default TooltipProgressBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl({\n      className: this.buildCSSClass(),\n    });\n\n    // No-flex/table-cell mode requires there be some content\n    // in the cell to fill the remaining space of the table.\n    el.innerHTML = '&nbsp;';\n    return el;\n  }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-spacer ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n  constructor(player, options) {\n    options['track'] = {\n      'kind': options['kind'],\n      'player': player,\n      'label': options['kind'] + ' settings',\n      'selectable': false,\n      'default': false,\n      mode: 'disabled'\n    };\n\n    // CaptionSettingsMenuItem has no concept of 'selected'\n    options['selectable'] = false;\n\n    super(player, options);\n    this.addClass('vjs-texttrack-settings');\n    this.controlText(', opens ' + options['kind'] + ' settings dialog');\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player().getChild('textTrackSettings').show();\n    this.player().getChild('textTrackSettings').el_.focus();\n  }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Captions Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-captions-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Update caption menu items\n   *\n   * @method update\n   */\n  update() {\n    let threshold = 2;\n    super.update();\n\n    // if native, then threshold is 1 because no settings button\n    if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n      threshold = 1;\n    }\n\n    if (this.items && this.items.length > threshold) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Create caption menu items\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems() {\n    let items = [];\n\n    if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n      items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n    }\n\n    return super.createItems(items);\n  }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Chapters Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-chapters-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create a menu item for each text track\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems() {\n    let items = [];\n\n    let tracks = this.player_.textTracks();\n\n    if (!tracks) {\n      return items;\n    }\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n      if (track['kind'] === this.kind_) {\n        items.push(new TextTrackMenuItem(this.player_, {\n          'track': track\n        }));\n      }\n    }\n\n    return items;\n  }\n\n  /**\n   * Create menu from chapter buttons\n   *\n   * @return {Menu} Menu of chapter buttons\n   * @method createMenu\n   */\n  createMenu() {\n    let tracks = this.player_.textTracks() || [];\n    let chaptersTrack;\n    let items = this.items = [];\n\n    for (let i = 0, length = tracks.length; i < length; i++) {\n      let track = tracks[i];\n\n      if (track['kind'] === this.kind_) {\n        chaptersTrack = track;\n\n        break;\n      }\n    }\n\n    let menu = this.menu;\n    if (menu === undefined) {\n      menu = new Menu(this.player_);\n      let title = Dom.createEl('li', {\n        className: 'vjs-menu-title',\n        innerHTML: toTitleCase(this.kind_),\n        tabIndex: -1\n      });\n      menu.children_.unshift(title);\n      Dom.insertElFirst(title, menu.contentEl());\n    }\n\n    if (chaptersTrack && chaptersTrack.cues == null) {\n      chaptersTrack['mode'] = 'hidden';\n\n      let remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(chaptersTrack);\n\n      if (remoteTextTrackEl) {\n        remoteTextTrackEl.addEventListener('load', (event) => this.update());\n      }\n    }\n\n    if (chaptersTrack && chaptersTrack.cues && chaptersTrack.cues.length > 0) {\n      let cues = chaptersTrack['cues'], cue;\n\n      for (let i = 0, l = cues.length; i < l; i++) {\n        cue = cues[i];\n\n        let mi = new ChaptersTrackMenuItem(this.player_, {\n          'track': chaptersTrack,\n          'cue': cue\n        });\n\n        items.push(mi);\n\n        menu.addChild(mi);\n      }\n\n      this.addChild(menu);\n    }\n\n    if (this.items.length > 0) {\n      this.show();\n    }\n\n    return menu;\n  }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let track = options['track'];\n    let cue = options['cue'];\n    let currentTime = player.currentTime();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = cue.text;\n    options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n    super(player, options);\n\n    this.track = track;\n    this.cue = cue;\n    track.addEventListener('cuechange', Fn.bind(this, this.update));\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    super.handleClick();\n    this.player_.currentTime(this.cue.startTime);\n    this.update(this.cue.startTime);\n  }\n\n  /**\n   * Update chapter menu item\n   *\n   * @method update\n   */\n  update() {\n    let cue = this.cue;\n    let currentTime = this.player_.currentTime();\n\n    // vjs.log(currentTime, cue.startTime);\n    this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n  }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file descriptions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The button component for toggling and selecting descriptions\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class DescriptionsButton\n */\nclass DescriptionsButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label', 'Descriptions Menu');\n\n    let tracks = player.textTracks();\n\n    if (tracks) {\n      let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n      tracks.addEventListener('change', changeHandler);\n      this.on('dispose', function() {\n        tracks.removeEventListener('change', changeHandler);\n      });\n    }\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    let tracks = this.player().textTracks();\n    let disabled = false;\n\n    // Check whether a track of a different kind is showing\n    for (let i = 0, l = tracks.length; i < l; i++) {\n      let track = tracks[i];\n      if (track['kind'] !== this.kind_ && track['mode'] === 'showing') {\n        disabled = true;\n        break;\n      }\n    }\n\n    // If another track is showing, disable this menu button\n    if (disabled) {\n      this.disable();\n    } else {\n      this.enable();\n    }\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-descriptions-button ${super.buildCSSClass()}`;\n  }\n\n}\n\nDescriptionsButton.prototype.kind_ = 'descriptions';\nDescriptionsButton.prototype.controlText_ = 'Descriptions';\n\nComponent.registerComponent('DescriptionsButton', DescriptionsButton);\nexport default DescriptionsButton;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n  constructor(player, options){\n    // Create pseudo track info\n    // Requires options['kind']\n    options['track'] = {\n      'kind': options['kind'],\n      'player': player,\n      'label': options['kind'] + ' off',\n      'default': false,\n      'mode': 'disabled'\n    };\n\n    // MenuItem is selectable\n    options['selectable'] = true;\n\n    super(player, options);\n    this.selected(true);\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @param {Object} event Event object\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    let tracks = this.player().textTracks();\n    let selected = true;\n\n    for (let i = 0, l = tracks.length; i < l; i++) {\n      let track = tracks[i];\n      if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n        selected = false;\n        break;\n      }\n    }\n\n    this.selected(selected);\n  }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Subtitles Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-subtitles-button ${super.buildCSSClass()}`;\n  }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport TrackButton from '../track-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends TrackButton {\n\n  constructor(player, options = {}){\n    options.tracks = player.textTracks();\n\n    super(player, options);\n  }\n\n  /**\n   * Create a menu item for each text track\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems(items=[]) {\n    // Add an OFF menu item to turn all tracks off\n    items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n    let tracks = this.player_.textTracks();\n\n    if (!tracks) {\n      return items;\n    }\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      // only add tracks that are of the appropriate kind and have a label\n      if (track['kind'] === this.kind_) {\n        items.push(new TextTrackMenuItem(this.player_, {\n          // MenuItem is selectable\n          'selectable': true,\n          'track': track\n        }));\n      }\n    }\n\n    return items;\n  }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let track = options['track'];\n    let tracks = player.textTracks();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = track['label'] || track['language'] || 'Unknown';\n    options['selected'] = track['default'] || track['mode'] === 'showing';\n\n    super(player, options);\n\n    this.track = track;\n\n    if (tracks) {\n      let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n      tracks.addEventListener('change', changeHandler);\n      this.on('dispose', function() {\n        tracks.removeEventListener('change', changeHandler);\n      });\n    }\n\n    // iOS7 doesn't dispatch change events to TextTrackLists when an\n    // associated track's mode changes. Without something like\n    // Object.observe() (also not present on iOS7), it's not\n    // possible to detect changes to the mode attribute and polyfill\n    // the change event. As a poor substitute, we manually dispatch\n    // change events whenever the controls modify the mode.\n    if (tracks && tracks.onchange === undefined) {\n      let event;\n\n      this.on(['tap', 'click'], function() {\n        if (typeof window.Event !== 'object') {\n          // Android 2.3 throws an Illegal Constructor error for window.Event\n          try {\n            event = new window.Event('change');\n          } catch(err){}\n        }\n\n        if (!event) {\n          event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n        }\n\n        tracks.dispatchEvent(event);\n      });\n    }\n  }\n\n  /**\n   * Handle click on text track\n   *\n   * @method handleClick\n   */\n  handleClick(event) {\n    let kind = this.track['kind'];\n    let tracks = this.player_.textTracks();\n\n    super.handleClick(event);\n\n    if (!tracks) return;\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      if (track['kind'] !== kind) {\n        continue;\n      }\n\n      if (track === this.track) {\n        track['mode'] = 'showing';\n      } else {\n        track['mode'] = 'disabled';\n      }\n    }\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    this.selected(this.track['mode'] === 'showing');\n  }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'timeupdate', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-current-time vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-current-time-display',\n      // label the current time for screen reader users\n      innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00',\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update current time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    // Allows for smooth scrubbing, when player can't keep up.\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    let localizedText = this.localize('Current Time');\n    let formattedTime = formatTime(time, this.player_.duration());\n    if (formattedTime !== this.formattedTime_) {\n      this.formattedTime_ = formattedTime;\n      this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> ${formattedTime}`;\n    }\n  }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n    // however the durationchange event fires before this.player_.duration() is set,\n    // so the value cannot be written out using this method.\n    // Once the order of durationchange and this.player_.duration() being set is figured out,\n    // this can be updated.\n    this.on(player, 'timeupdate', this.updateContent);\n    this.on(player, 'loadedmetadata', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-duration vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-duration-display',\n      // label the duration time for screen reader users\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Duration Time')}</span> 0:00`\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update duration time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    let duration = this.player_.duration();\n    if (duration && this.duration_ !== duration) {\n      this.duration_ = duration;\n      let localizedText = this.localize('Duration Time');\n      let formattedTime = formatTime(duration);\n      this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> ${formattedTime}`; // label the duration time for screen reader users\n    }\n  }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'timeupdate', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-remaining-time vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-remaining-time-display',\n      // label the remaining time for screen reader users\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Remaining Time')}</span> -0:00`,\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update remaining time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    if (this.player_.duration()) {\n      const localizedText = this.localize('Remaining Time');\n      const formattedTime = formatTime(this.player_.remainingTime());\n      if (formattedTime !== this.formattedTime_) {\n        this.formattedTime_ = formattedTime;\n        this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> -${formattedTime}`;\n      }\n    }\n\n    // Allows for smooth scrubbing, when player can't keep up.\n    // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n  }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-time-control vjs-time-divider',\n      innerHTML: '<div><span>/</span></div>'\n    });\n  }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file track-button.js\n */\nimport MenuButton from '../menu/menu-button.js';\nimport Component from '../component.js';\nimport * as Fn from '../utils/fn.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TrackButton\n */\nclass TrackButton extends MenuButton {\n\n  constructor(player, options){\n    let tracks = options.tracks;\n\n    super(player, options);\n\n    if (this.items.length <= 1) {\n      this.hide();\n    }\n\n    if (!tracks) {\n      return;\n    }\n\n    let updateHandler = Fn.bind(this, this.update);\n    tracks.addEventListener('removetrack', updateHandler);\n    tracks.addEventListener('addtrack', updateHandler);\n\n    this.player_.on('dispose', function() {\n      tracks.removeEventListener('removetrack', updateHandler);\n      tracks.removeEventListener('addtrack', updateHandler);\n    });\n  }\n\n}\n\nComponent.registerComponent('TrackButton', TrackButton);\nexport default TrackButton;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'volumechange', this.updateARIAAttributes);\n    player.ready(Fn.bind(this, this.updateARIAAttributes));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-bar vjs-slider-bar'\n    }, {\n      'aria-label': 'volume level'\n    });\n  }\n\n  /**\n   * Handle mouse move on volume bar\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove(event) {\n    this.checkMuted();\n    this.player_.volume(this.calculateDistance(event));\n  }\n\n  checkMuted() {\n    if (this.player_.muted()) {\n      this.player_.muted(false);\n    }\n  }\n\n  /**\n   * Get percent of volume level\n   *\n   * @retun {Number} Volume level percent\n   * @method getPercent\n   */\n  getPercent() {\n    if (this.player_.muted()) {\n      return 0;\n    } else {\n      return this.player_.volume();\n    }\n  }\n\n  /**\n   * Increase volume level for keyboard users\n   *\n   * @method stepForward\n   */\n  stepForward() {\n    this.checkMuted();\n    this.player_.volume(this.player_.volume() + 0.1);\n  }\n\n  /**\n   * Decrease volume level for keyboard users\n   *\n   * @method stepBack\n   */\n  stepBack() {\n    this.checkMuted();\n    this.player_.volume(this.player_.volume() - 0.1);\n  }\n\n  /**\n   * Update ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateARIAAttributes() {\n    // Current value of volume bar as a percentage\n    let volume = (this.player_.volume() * 100).toFixed(2);\n    this.el_.setAttribute('aria-valuenow', volume);\n    this.el_.setAttribute('aria-valuetext', volume + '%');\n  }\n\n}\n\nVolumeBar.prototype.options_ = {\n  children: [\n    'volumeLevel'\n  ],\n  'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    // hide volume controls when they're not supported by the current tech\n    if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    this.on(player, 'loadstart', function(){\n      if (player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-control vjs-control'\n    });\n  }\n\n}\n\nVolumeControl.prototype.options_ = {\n  children: [\n    'volumeBar'\n  ]\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-level',\n      innerHTML: '<span class=\"vjs-control-text\"></span>'\n    });\n  }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport * as Fn from '../utils/fn.js';\nimport Component from '../component.js';\nimport Popup from '../popup/popup.js';\nimport PopupButton from '../popup/popup-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume popup\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends PopupButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends PopupButton {\n\n  constructor(player, options={}){\n    // Default to inline\n    if (options.inline === undefined) {\n      options.inline = true;\n    }\n\n    // If the vertical option isn't passed at all, default to true.\n    if (options.vertical === undefined) {\n      // If an inline volumeMenuButton is used, we should default to using\n      // a horizontal slider for obvious reasons.\n      if (options.inline) {\n        options.vertical = false;\n      } else {\n        options.vertical = true;\n      }\n    }\n\n    // The vertical option needs to be set on the volumeBar as well,\n    // since that will need to be passed along to the VolumeBar constructor\n    options.volumeBar = options.volumeBar || {};\n    options.volumeBar.vertical = !!options.vertical;\n\n    super(player, options);\n\n    // Same listeners as MuteToggle\n    this.on(player, 'volumechange', this.volumeUpdate);\n    this.on(player, 'loadstart', this.volumeUpdate);\n\n    // hide mute toggle if the current tech doesn't support volume control\n    function updateVisibility() {\n      if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }\n\n    updateVisibility.call(this);\n    this.on(player, 'loadstart', updateVisibility);\n\n    this.on(this.volumeBar, ['slideractive', 'focus'], function(){\n      this.addClass('vjs-slider-active');\n    });\n\n    this.on(this.volumeBar, ['sliderinactive', 'blur'], function(){\n      this.removeClass('vjs-slider-active');\n    });\n\n    this.on(this.volumeBar, ['focus'], function(){\n      this.addClass('vjs-lock-showing');\n    });\n\n    this.on(this.volumeBar, ['blur'], function(){\n      this.removeClass('vjs-lock-showing');\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    let orientationClass = '';\n    if (!!this.options_.vertical) {\n      orientationClass = 'vjs-volume-menu-button-vertical';\n    } else {\n      orientationClass = 'vjs-volume-menu-button-horizontal';\n    }\n\n    return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {Popup} The volume popup button\n   * @method createPopup\n   */\n  createPopup() {\n    let popup = new Popup(this.player_, {\n      contentElType: 'div'\n    });\n\n    let vb = new VolumeBar(this.player_, this.options_.volumeBar);\n\n    popup.addChild(vb);\n\n    this.menuContent = popup;\n    this.volumeBar = vb;\n\n    this.attachVolumeBarEvents();\n\n    return popup;\n  }\n\n  /**\n   * Handle click on volume popup and calls super\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    MuteToggle.prototype.handleClick.call(this);\n    super.handleClick();\n  }\n\n  attachVolumeBarEvents() {\n    this.menuContent.on(['mousedown', 'touchdown'], Fn.bind(this, this.handleMouseDown));\n  }\n\n  handleMouseDown(event) {\n    this.on(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n    this.on(this.el_.ownerDocument, ['mouseup', 'touchend'], this.handleMouseUp);\n  }\n\n  handleMouseUp(event) {\n    this.off(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n  }\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport ModalDialog from './modal-dialog';\n\nimport * as Dom from './utils/dom';\nimport mergeOptions from './utils/merge-options';\n\n/**\n * Display that an error has occurred making the video unplayable.\n *\n * @extends ModalDialog\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends ModalDialog {\n\n  /**\n   * Constructor for error display modal.\n   *\n   * @param  {Player} player\n   * @param  {Object} [options]\n   */\n  constructor(player, options) {\n    super(player, options);\n    this.on(player, 'error', this.open);\n  }\n\n  /**\n   * Include the old class for backward-compatibility.\n   *\n   * This can be removed in 6.0.\n   *\n   * @method buildCSSClass\n   * @deprecated\n   * @return {String}\n   */\n  buildCSSClass() {\n    return `vjs-error-display ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Generates the modal content based on the player error.\n   *\n   * @return {String|Null}\n   */\n  content() {\n    let error = this.player().error();\n    return error ? this.localize(error.message) : '';\n  }\n}\n\nErrorDisplay.prototype.options_ = mergeOptions(ModalDialog.prototype.options_, {\n  fillAlways: true,\n  temporary: false,\n  uncloseable: true\n});\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n  // Remove the addEventListener alias before calling Events.on\n  // so we don't get into an infinite type loop\n  let ael = this.addEventListener;\n  this.addEventListener = () => {};\n  Events.on(this, type, fn);\n  this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n  Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n  // Remove the addEventListener alias before calling Events.on\n  // so we don't get into an infinite type loop\n  let ael = this.addEventListener;\n  this.addEventListener = () => {};\n  Events.one(this, type, fn);\n  this.addEventListener = ael;\n};\n\nEventTarget.prototype.trigger = function(event) {\n  let type = event.type || event;\n\n  if (typeof event === 'string') {\n    event = {\n      type: type\n    };\n  }\n  event = Events.fixEvent(event);\n\n  if (this.allowedEvents_[type] && this['on' + type]) {\n    this['on' + type](event);\n  }\n\n  Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n  if (typeof superClass !== 'function' && superClass !== null) {\n    throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n\n  if (superClass) {\n    // node\n    subClass.super_ = superClass;\n  }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n *   constructor: function(player, options) {\n *     Button.call(this, player, options);\n *   },\n *   onClick: function() {\n *     // doSomething\n *   }\n * });\n * ```\n */\nconst extendFn = function(superClass, subClassMethods={}) {\n  let subClass = function() {\n    superClass.apply(this, arguments);\n  };\n  let methods = {};\n\n  if (typeof subClassMethods === 'object') {\n    if (typeof subClassMethods.init === 'function') {\n      log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n      subClassMethods.constructor = subClassMethods.init;\n    }\n    if (subClassMethods.constructor !== Object.prototype.constructor) {\n      subClass = subClassMethods.constructor;\n    }\n    methods = subClassMethods;\n  } else if (typeof subClassMethods === 'function') {\n    subClass = subClassMethods;\n  }\n\n  _inherits(subClass, superClass);\n\n  // Extend subObj's prototype with functions and other properties from props\n  for (var name in methods) {\n    if (methods.hasOwnProperty(name)) {\n      subClass.prototype[name] = methods[name];\n    }\n  }\n\n  return subClass;\n};\n\nexport default extendFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n  // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n  [\n    'requestFullscreen',\n    'exitFullscreen',\n    'fullscreenElement',\n    'fullscreenEnabled',\n    'fullscreenchange',\n    'fullscreenerror'\n  ],\n  // WebKit\n  [\n    'webkitRequestFullscreen',\n    'webkitExitFullscreen',\n    'webkitFullscreenElement',\n    'webkitFullscreenEnabled',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  // Old WebKit (Safari 5.1)\n  [\n    'webkitRequestFullScreen',\n    'webkitCancelFullScreen',\n    'webkitCurrentFullScreenElement',\n    'webkitCancelFullScreen',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  // Mozilla\n  [\n    'mozRequestFullScreen',\n    'mozCancelFullScreen',\n    'mozFullScreenElement',\n    'mozFullScreenEnabled',\n    'mozfullscreenchange',\n    'mozfullscreenerror'\n  ],\n  // Microsoft\n  [\n    'msRequestFullscreen',\n    'msExitFullscreen',\n    'msFullscreenElement',\n    'msFullscreenEnabled',\n    'MSFullscreenChange',\n    'MSFullscreenError'\n  ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n  // check for exitFullscreen function\n  if (apiMap[i][1] in document) {\n    browserApi = apiMap[i];\n    break;\n  }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n  for (let i=0; i<browserApi.length; i++) {\n    FullscreenApi[specApi[i]] = browserApi[i];\n  }\n}\n\nexport default FullscreenApi;\n","/**\n * @file loading-spinner.js\n */\nimport Component from './component';\n\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n *\n * @extends Component\n * @class LoadingSpinner\n */\nclass LoadingSpinner extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-loading-spinner',\n      dir: 'ltr'\n    });\n  }\n}\n\nComponent.registerComponent('LoadingSpinner', LoadingSpinner);\nexport default LoadingSpinner;\n","/**\n * @file media-error.js\n */\nimport assign from 'object.assign';\n\n/*\n * Custom MediaError to mimic the HTML5 MediaError\n *\n * @param {Number} code The media error code\n */\nlet MediaError = function(code){\n  if (typeof code === 'number') {\n    this.code = code;\n  } else if (typeof code === 'string') {\n    // default code is zero, so this is a custom error\n    this.message = code;\n  } else if (typeof code === 'object') { // object\n    assign(this, code);\n  }\n\n  if (!this.message) {\n    this.message = MediaError.defaultMessages[this.code] || '';\n  }\n};\n\n/*\n * The error code that refers two one of the defined\n * MediaError types\n *\n * @type {Number}\n */\nMediaError.prototype.code = 0;\n\n/*\n * An optional message to be shown with the error.\n * Message is not part of the HTML5 video spec\n * but allows for more informative custom errors.\n *\n * @type {String}\n */\nMediaError.prototype.message = '';\n\n/*\n * An optional status code that can be set by plugins\n * to allow even more detail about the error.\n * For example the HLS plugin might provide the specific\n * HTTP status code that was returned when the error\n * occurred, then allowing a custom error overlay\n * to display more information.\n *\n * @type {Array}\n */\nMediaError.prototype.status = null;\n\nMediaError.errorTypes = [\n  'MEDIA_ERR_CUSTOM',            // = 0\n  'MEDIA_ERR_ABORTED',           // = 1\n  'MEDIA_ERR_NETWORK',           // = 2\n  'MEDIA_ERR_DECODE',            // = 3\n  'MEDIA_ERR_SRC_NOT_SUPPORTED', // = 4\n  'MEDIA_ERR_ENCRYPTED'          // = 5\n];\n\nMediaError.defaultMessages = {\n  1: 'You aborted the media playback',\n  2: 'A network error caused the media download to fail part-way.',\n  3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',\n  4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',\n  5: 'The media is encrypted and we do not have the keys to decrypt it.'\n};\n\n// Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\nfor (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {\n  MediaError[MediaError.errorTypes[errNum]] = errNum;\n  // values should be accessible on both the class and instance\n  MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;\n}\n\nexport default MediaError;\n","/**\n * @file menu-button.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport Menu from './menu.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * A button class with a popup menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuButton\n */\nclass MenuButton extends ClickableComponent {\n\n  constructor(player, options={}){\n    super(player, options);\n\n    this.update();\n\n    this.enabled_ = true;\n\n    this.el_.setAttribute('aria-haspopup', 'true');\n    this.el_.setAttribute('role', 'menuitem');\n    this.on('keydown', this.handleSubmenuKeyPress);\n  }\n\n  /**\n   * Update menu\n   *\n   * @method update\n   */\n  update() {\n    let menu = this.createMenu();\n\n    if (this.menu) {\n      this.removeChild(this.menu);\n    }\n\n    this.menu = menu;\n    this.addChild(menu);\n\n    /**\n     * Track the state of the menu button\n     *\n     * @type {Boolean}\n     * @private\n     */\n    this.buttonPressed_ = false;\n    this.el_.setAttribute('aria-expanded', 'false');\n\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    } else if (this.items && this.items.length > 1) {\n      this.show();\n    }\n  }\n\n  /**\n   * Create menu\n   *\n   * @return {Menu} The constructed menu\n   * @method createMenu\n   */\n  createMenu() {\n    var menu = new Menu(this.player_);\n\n    // Add a title list item to the top\n    if (this.options_.title) {\n      let title = Dom.createEl('li', {\n        className: 'vjs-menu-title',\n        innerHTML: toTitleCase(this.options_.title),\n        tabIndex: -1\n      });\n      menu.children_.unshift(title);\n      Dom.insertElFirst(title, menu.contentEl());\n    }\n\n    this.items = this['createItems']();\n\n    if (this.items) {\n      // Add menu items to the menu\n      for (var i = 0; i < this.items.length; i++) {\n        menu.addItem(this.items[i]);\n      }\n    }\n\n    return menu;\n  }\n\n  /**\n   * Create the list of menu items. Specific to each subclass.\n   *\n   * @method createItems\n   */\n  createItems(){}\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    var menuButtonClass = 'vjs-menu-button';\n\n    // If the inline option is passed, we want to use different styles altogether.\n    if (this.options_.inline === true) {\n      menuButtonClass += '-inline';\n    } else {\n      menuButtonClass += '-popup';\n    }\n\n    return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * When you click the button it adds focus, which\n   * will show the menu indefinitely.\n   * So we'll remove focus when the mouse leaves the button.\n   * Focus is needed for tab navigation.\n   * Allow sub components to stack CSS class names\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.one('mouseout', Fn.bind(this, function(){\n      this.menu.unlockShowing();\n      this.el_.blur();\n    }));\n    if (this.buttonPressed_){\n      this.unpressButton();\n    } else {\n      this.pressButton();\n    }\n  }\n\n  /**\n   * Handle key press on menu\n   *\n   * @param {Object} event Key press event\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n\n    // Escape (27) key or Tab (9) key unpress the 'button'\n    if (event.which === 27 || event.which === 9) {\n      if (this.buttonPressed_) {\n        this.unpressButton();\n      }\n      // Don't preventDefault for Tab key - we still want to lose focus\n      if (event.which !== 9) {\n        event.preventDefault();\n      }\n    // Up (38) key or Down (40) key press the 'button'\n    } else if (event.which === 38 || event.which === 40) {\n      if (!this.buttonPressed_) {\n        this.pressButton();\n        event.preventDefault();\n      }\n    } else {\n      super.handleKeyPress(event);\n    }\n  }\n\n  /**\n   * Handle key press on submenu\n   *\n   * @param {Object} event Key press event\n   * @method handleSubmenuKeyPress\n   */\n  handleSubmenuKeyPress(event) {\n\n    // Escape (27) key or Tab (9) key unpress the 'button'\n    if (event.which === 27 || event.which === 9){\n      if (this.buttonPressed_){\n        this.unpressButton();\n      }\n      // Don't preventDefault for Tab key - we still want to lose focus\n      if (event.which !== 9) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  /**\n   * Makes changes based on button pressed\n   *\n   * @method pressButton\n   */\n  pressButton() {\n    if (this.enabled_) {\n      this.buttonPressed_ = true;\n      this.menu.lockShowing();\n      this.el_.setAttribute('aria-expanded', 'true');\n      this.menu.focus(); // set the focus into the submenu\n    }\n  }\n\n  /**\n   * Makes changes based on button unpressed\n   *\n   * @method unpressButton\n   */\n  unpressButton() {\n    if (this.enabled_) {\n      this.buttonPressed_ = false;\n      this.menu.unlockShowing();\n      this.el_.setAttribute('aria-expanded', 'false');\n      this.el_.focus(); // Set focus back to this menu button\n    }\n  }\n\n  /**\n   * Disable the menu button\n   *\n   * @return {Component}\n   * @method disable\n   */\n  disable() {\n    // Unpress, but don't force focus on this button\n    this.buttonPressed_ = false;\n    this.menu.unlockShowing();\n    this.el_.setAttribute('aria-expanded', 'false');\n\n    this.enabled_ = false;\n\n    return super.disable();\n  }\n\n  /**\n   * Enable the menu button\n   *\n   * @return {Component}\n   * @method disable\n   */\n  enable() {\n    this.enabled_ = true;\n\n    return super.enable();\n  }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends ClickableComponent {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.selectable = options['selectable'];\n\n    this.selected(options['selected']);\n\n    if (this.selectable) {\n      // TODO: May need to be either menuitemcheckbox or menuitemradio,\n      //       and may need logical grouping of menu items.\n      this.el_.setAttribute('role', 'menuitemcheckbox');\n    } else {\n      this.el_.setAttribute('role', 'menuitem');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Desc\n   * @param {Object=} props Desc\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(type, props, attrs) {\n    return super.createEl('li', assign({\n      className: 'vjs-menu-item',\n      innerHTML: this.localize(this.options_['label']),\n      tabIndex: -1\n    }, props), attrs);\n  }\n\n  /**\n   * Handle a click on the menu item, and set it to selected\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.selected(true);\n  }\n\n  /**\n   * Set this menu item as selected or not\n   *\n   * @param  {Boolean} selected\n   * @method selected\n   */\n  selected(selected) {\n    if (this.selectable) {\n      if (selected) {\n        this.addClass('vjs-selected');\n        this.el_.setAttribute('aria-checked','true');\n        // aria-checked isn't fully supported by browsers/screen readers,\n        // so indicate selected state to screen reader in the control text.\n        this.controlText(', selected');\n      } else {\n        this.removeClass('vjs-selected');\n        this.el_.setAttribute('aria-checked','false');\n        // Indicate un-selected state to screen reader\n        // Note that a space clears out the selected state text\n        this.controlText(' ');\n      }\n    }\n  }\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n  constructor (player, options) {\n    super(player, options);\n\n    this.focusedChild_ = -1;\n\n    this.on('keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Add a menu item to the menu\n   *\n   * @param {Object|String} component Component or component type to add\n   * @method addItem\n   */\n  addItem(component) {\n    this.addChild(component);\n    component.on('click', Fn.bind(this, function(){\n      this.unlockShowing();\n      //TODO: Need to set keyboard focus back to the menuButton\n    }));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let contentElType = this.options_.contentElType || 'ul';\n    this.contentEl_ = Dom.createEl(contentElType, {\n      className: 'vjs-menu-content'\n    });\n    this.contentEl_.setAttribute('role', 'menu');\n    var el = super.createEl('div', {\n      append: this.contentEl_,\n      className: 'vjs-menu'\n    });\n    el.setAttribute('role', 'presentation');\n    el.appendChild(this.contentEl_);\n\n    // Prevent clicks from bubbling up. Needed for Menu Buttons,\n    // where a click on the parent is significant\n    Events.on(el, 'click', function(event){\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    });\n\n    return el;\n  }\n\n  /**\n   * Handle key press for menu\n   *\n   * @param {Object} event Event object\n   * @method handleKeyPress\n   */\n  handleKeyPress (event) {\n    if (event.which === 37 || event.which === 40) { // Left and Down Arrows\n      event.preventDefault();\n      this.stepForward();\n    } else if (event.which === 38 || event.which === 39) { // Up and Right Arrows\n      event.preventDefault();\n      this.stepBack();\n    }\n  }\n\n  /**\n   * Move to next (lower) menu item for keyboard users\n   *\n   * @method stepForward\n   */\n   stepForward () {\n     let stepChild = 0;\n\n     if (this.focusedChild_ !== undefined) {\n       stepChild = this.focusedChild_ + 1;\n     }\n     this.focus(stepChild);\n   }\n\n   /**\n    * Move to previous (higher) menu item for keyboard users\n    *\n    * @method stepBack\n    */\n  stepBack () {\n    let stepChild = 0;\n\n    if (this.focusedChild_ !== undefined) {\n      stepChild = this.focusedChild_ - 1;\n    }\n    this.focus(stepChild);\n  }\n\n  /**\n   * Set focus on a menu item in the menu\n   *\n   * @param {Object|String} item Index of child item set focus on\n   * @method focus\n   */\n  focus (item = 0) {\n    let children = this.children().slice();\n    let haveTitle = children.length && children[0].className &&\n      /vjs-menu-title/.test(children[0].className);\n\n    if (haveTitle) {\n      children.shift();\n    }\n\n    if (children.length > 0) {\n      if (item < 0) {\n        item = 0;\n      } else if (item >= children.length) {\n        item = children.length - 1;\n      }\n\n      this.focusedChild_ = item;\n\n      children[item].el_.focus();\n    }\n  }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file modal-dialog.js\n */\nimport * as Dom from './utils/dom';\nimport * as Fn from './utils/fn';\nimport log from './utils/log';\n\nimport Component from './component';\nimport CloseButton from './close-button';\n\nconst MODAL_CLASS_NAME = 'vjs-modal-dialog';\nconst ESC = 27;\n\n/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n * @class ModalDialog\n */\nclass ModalDialog extends Component {\n\n  /**\n   * Constructor for modals.\n   *\n   * @param  {Player} player\n   * @param  {Object} [options]\n   * @param  {Mixed} [options.content=undefined]\n   *         Provide customized content for this modal.\n   *\n   * @param  {String} [options.description]\n   *         A text description for the modal, primarily for accessibility.\n   *\n   * @param  {Boolean} [options.fillAlways=false]\n   *         Normally, modals are automatically filled only the first time\n   *         they open. This tells the modal to refresh its content\n   *         every time it opens.\n   *\n   * @param  {String} [options.label]\n   *         A text label for the modal, primarily for accessibility.\n   *\n   * @param  {Boolean} [options.temporary=true]\n   *         If `true`, the modal can only be opened once; it will be\n   *         disposed as soon as it's closed.\n   *\n   * @param  {Boolean} [options.uncloseable=false]\n   *         If `true`, the user will not be able to close the modal\n   *         through the UI in the normal ways. Programmatic closing is\n   *         still possible.\n   *\n   */\n  constructor(player, options) {\n    super(player, options);\n    this.opened_ = this.hasBeenOpened_ = this.hasBeenFilled_ = false;\n\n    this.closeable(!this.options_.uncloseable);\n    this.content(this.options_.content);\n\n    // Make sure the contentEl is defined AFTER any children are initialized\n    // because we only want the contents of the modal in the contentEl\n    // (not the UI elements like the close button).\n    this.contentEl_ = Dom.createEl('div', {\n      className: `${MODAL_CLASS_NAME}-content`\n    }, {\n      role: 'document'\n    });\n\n    this.descEl_ = Dom.createEl('p', {\n      className: `${MODAL_CLASS_NAME}-description vjs-offscreen`,\n      id: this.el().getAttribute('aria-describedby')\n    });\n\n    Dom.textContent(this.descEl_, this.description());\n    this.el_.appendChild(this.descEl_);\n    this.el_.appendChild(this.contentEl_);\n  }\n\n  /**\n   * Create the modal's DOM element\n   *\n   * @method createEl\n   * @return {Element}\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass(),\n      tabIndex: -1\n    }, {\n      'aria-describedby': `${this.id()}_description`,\n      'aria-hidden': 'true',\n      'aria-label': this.label(),\n      role: 'dialog'\n    });\n  }\n\n  /**\n   * Build the modal's CSS class.\n   *\n   * @method buildCSSClass\n   * @return {String}\n   */\n  buildCSSClass() {\n    return `${MODAL_CLASS_NAME} vjs-hidden ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handles key presses on the document, looking for ESC, which closes\n   * the modal.\n   *\n   * @method handleKeyPress\n   * @param  {Event} e\n   */\n  handleKeyPress(e) {\n    if (e.which === ESC && this.closeable()) {\n      this.close();\n    }\n  }\n\n  /**\n   * Returns the label string for this modal. Primarily used for accessibility.\n   *\n   * @return {String}\n   */\n  label() {\n    return this.options_.label || this.localize('Modal Window');\n  }\n\n  /**\n   * Returns the description string for this modal. Primarily used for\n   * accessibility.\n   *\n   * @return {String}\n   */\n  description() {\n    let desc = this.options_.description || this.localize('This is a modal window.');\n\n    // Append a universal closeability message if the modal is closeable.\n    if (this.closeable()) {\n      desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');\n    }\n\n    return desc;\n  }\n\n  /**\n   * Opens the modal.\n   *\n   * @method open\n   * @return {ModalDialog}\n   */\n  open() {\n    if (!this.opened_) {\n      let player = this.player();\n\n      this.trigger('beforemodalopen');\n      this.opened_ = true;\n\n      // Fill content if the modal has never opened before and\n      // never been filled.\n      if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {\n        this.fill();\n      }\n\n      // If the player was playing, pause it and take note of its previously\n      // playing state.\n      this.wasPlaying_ = !player.paused();\n\n      if (this.wasPlaying_) {\n        player.pause();\n      }\n\n      if (this.closeable()) {\n        this.on(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n      }\n\n      player.controls(false);\n      this.show();\n      this.el().setAttribute('aria-hidden', 'false');\n      this.trigger('modalopen');\n      this.hasBeenOpened_ = true;\n    }\n    return this;\n  }\n\n  /**\n   * Whether or not the modal is opened currently.\n   *\n   * @method opened\n   * @param  {Boolean} [value]\n   *         If given, it will open (`true`) or close (`false`) the modal.\n   *\n   * @return {Boolean}\n   */\n  opened(value) {\n    if (typeof value === 'boolean') {\n      this[value ? 'open' : 'close']();\n    }\n    return this.opened_;\n  }\n\n  /**\n   * Closes the modal.\n   *\n   * @method close\n   * @return {ModalDialog}\n   */\n  close() {\n    if (this.opened_) {\n      let player = this.player();\n\n      this.trigger('beforemodalclose');\n      this.opened_ = false;\n\n      if (this.wasPlaying_) {\n        player.play();\n      }\n\n      if (this.closeable()) {\n        this.off(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n      }\n\n      player.controls(true);\n      this.hide();\n      this.el().setAttribute('aria-hidden', 'true');\n      this.trigger('modalclose');\n\n      if (this.options_.temporary) {\n        this.dispose();\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Whether or not the modal is closeable via the UI.\n   *\n   * @method closeable\n   * @param  {Boolean} [value]\n   *         If given as a Boolean, it will set the `closeable` option.\n   *\n   * @return {Boolean}\n   */\n  closeable(value) {\n    if (typeof value === 'boolean') {\n      let closeable = this.closeable_ = !!value;\n      let close = this.getChild('closeButton');\n\n      // If this is being made closeable and has no close button, add one.\n      if (closeable && !close) {\n\n        // The close button should be a child of the modal - not its\n        // content element, so temporarily change the content element.\n        let temp = this.contentEl_;\n        this.contentEl_ = this.el_;\n        close = this.addChild('closeButton');\n        this.contentEl_ = temp;\n        this.on(close, 'close', this.close);\n      }\n\n      // If this is being made uncloseable and has a close button, remove it.\n      if (!closeable && close) {\n        this.off(close, 'close', this.close);\n        this.removeChild(close);\n        close.dispose();\n      }\n    }\n    return this.closeable_;\n  }\n\n  /**\n   * Fill the modal's content element with the modal's \"content\" option.\n   *\n   * The content element will be emptied before this change takes place.\n   *\n   * @method fill\n   * @return {ModalDialog}\n   */\n  fill() {\n    return this.fillWith(this.content());\n  }\n\n  /**\n   * Fill the modal's content element with arbitrary content.\n   *\n   * The content element will be emptied before this change takes place.\n   *\n   * @method fillWith\n   * @param  {Mixed} [content]\n   *         The same rules apply to this as apply to the `content` option.\n   *\n   * @return {ModalDialog}\n   */\n  fillWith(content) {\n    let contentEl = this.contentEl();\n    let parentEl = contentEl.parentNode;\n    let nextSiblingEl = contentEl.nextSibling;\n\n    this.trigger('beforemodalfill');\n    this.hasBeenFilled_ = true;\n\n    // Detach the content element from the DOM before performing\n    // manipulation to avoid modifying the live DOM multiple times.\n    parentEl.removeChild(contentEl);\n    this.empty();\n    Dom.insertContent(contentEl, content);\n    this.trigger('modalfill');\n\n    // Re-inject the re-filled content element.\n    if (nextSiblingEl) {\n      parentEl.insertBefore(contentEl, nextSiblingEl);\n    } else {\n      parentEl.appendChild(contentEl);\n    }\n\n    return this;\n  }\n\n  /**\n   * Empties the content element.\n   *\n   * This happens automatically anytime the modal is filled.\n   *\n   * @method empty\n   * @return {ModalDialog}\n   */\n  empty() {\n    this.trigger('beforemodalempty');\n    Dom.emptyEl(this.contentEl());\n    this.trigger('modalempty');\n    return this;\n  }\n\n  /**\n   * Gets or sets the modal content, which gets normalized before being\n   * rendered into the DOM.\n   *\n   * This does not update the DOM or fill the modal, but it is called during\n   * that process.\n   *\n   * @method content\n   * @param  {Mixed} [value]\n   *         If defined, sets the internal content value to be used on the\n   *         next call(s) to `fill`. This value is normalized before being\n   *         inserted. To \"clear\" the internal content value, pass `null`.\n   *\n   * @return {Mixed}\n   */\n  content(value) {\n    if (typeof value !== 'undefined') {\n      this.content_ = value;\n    }\n    return this.content_;\n  }\n}\n\n/*\n * Modal dialog default options.\n *\n * @type {Object}\n * @private\n */\nModalDialog.prototype.options_ = {\n  temporary: true\n};\n\nComponent.registerComponent('ModalDialog', ModalDialog);\nexport default ModalDialog;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\nimport AudioTrackList from './tracks/audio-track-list.js';\nimport VideoTrackList from './tracks/video-track-list.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\nimport ModalDialog from './modal-dialog';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Tech from './tech/tech.js';\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n *   <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag        The original video tag used for configuring options\n * @param {Object=} options    Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  constructor(tag, options, ready){\n    // Make sure tag ID exists\n    tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = assign(Player.getTagSettings(tag), options);\n\n    // Delay the initialization of children because we need to set up\n    // player properties first, and can't use `this` before `super()`\n    options.initChildren = false;\n\n    // Same with creating the element\n    options.createEl = false;\n\n    // we don't want the player to report touch activity on itself\n    // see enableTouchActivity in Component\n    options.reportTouchActivity = false;\n\n    // Run base component initializing with new options\n    super(null, options, ready);\n\n    // if the global option object was accidentally blown away by\n    // someone, bail early with an informative error\n    if (!this.options_ ||\n        !this.options_.techOrder ||\n        !this.options_.techOrder.length) {\n      throw new Error('No techOrder specified. Did you overwrite ' +\n                      'videojs.options instead of just changing the ' +\n                      'properties you want to override?');\n    }\n\n    this.tag = tag; // Store the original tag used to set options\n\n    // Store the tag attributes used to restore html5 element\n    this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n    // Update current language\n    this.language(this.options_.language);\n\n    // Update Supported Languages\n    if (options.languages) {\n      // Normalise player option languages to lowercase\n      let languagesToLower = {};\n\n      Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n        languagesToLower[name.toLowerCase()] = options.languages[name];\n      });\n      this.languages_ = languagesToLower;\n    } else {\n      this.languages_ = Player.prototype.options_.languages;\n    }\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options.poster || '';\n\n    // Set controls\n    this.controls_ = !!options.controls;\n\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    /*\n     * Store the internal state of scrubbing\n     *\n     * @private\n     * @return {Boolean} True if the user is scrubbing\n     */\n    this.scrubbing_ = false;\n\n    this.el_ = this.createEl();\n\n    // We also want to pass the original player options to each component and plugin\n    // as well so they don't need to reach back into the player for options later.\n    // We also need to do another copy of this.options_ so we don't end up with\n    // an infinite loop.\n    let playerOptionsCopy = mergeOptions(this.options_);\n\n    // Load plugins\n    if (options.plugins) {\n      let plugins = options.plugins;\n\n      Object.getOwnPropertyNames(plugins).forEach(function(name){\n        if (typeof this[name] === 'function') {\n          this[name](plugins[name]);\n        } else {\n          log.error('Unable to find plugin:', name);\n        }\n      }, this);\n    }\n\n    this.options_.playerOptions = playerOptionsCopy;\n\n    this.initChildren();\n\n    // Set isAudio based on whether or not an audio tag was used\n    this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // Set ARIA label and region role depending on player type\n    this.el_.setAttribute('role', 'region');\n    if (this.isAudio()) {\n      this.el_.setAttribute('aria-label', 'audio player');\n    } else {\n      this.el_.setAttribute('aria-label', 'video player');\n    }\n\n    if (this.isAudio()) {\n      this.addClass('vjs-audio');\n    }\n\n    if (this.flexNotSupported_()) {\n      this.addClass('vjs-no-flex');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (browser.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // iOS Safari has broken hover handling\n    if (!browser.IS_IOS) {\n      this.addClass('vjs-workinghover');\n    }\n\n    // Make player easily findable by ID\n    Player.players[this.id_] = this;\n\n    // When the player is first initialized, trigger activity so components\n    // like the control bar show themselves if needed\n    this.userActive(true);\n    this.reportUserActivity();\n    this.listenForUserActivity_();\n\n    this.on('fullscreenchange', this.handleFullscreenChange_);\n    this.on('stageclick', this.handleStageClick_);\n  }\n\n  /**\n   * Destroys the video player and does any necessary cleanup\n   * ```js\n   *     myPlayer.dispose();\n   * ```\n   * This is especially helpful if you are dynamically adding and removing videos\n   * to/from the DOM.\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.trigger('dispose');\n    // prevent dispose from being called twice\n    this.off('dispose');\n\n    if (this.styleEl_ && this.styleEl_.parentNode) {\n      this.styleEl_.parentNode.removeChild(this.styleEl_);\n    }\n\n    // Kill reference to this player\n    Player.players[this.id_] = null;\n    if (this.tag && this.tag.player) { this.tag.player = null; }\n    if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n    if (this.tech_) { this.tech_.dispose(); }\n\n    super.dispose();\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = this.el_ = super.createEl('div');\n    let tag = this.tag;\n\n    // Remove width/height attrs from tag so CSS can make it 100% width/height\n    tag.removeAttribute('width');\n    tag.removeAttribute('height');\n\n    // Copy over all the attributes from the tag, including ID and class\n    // ID will now reference player box, not the video tag\n    const attrs = Dom.getElAttributes(tag);\n\n    Object.getOwnPropertyNames(attrs).forEach(function(attr){\n      // workaround so we don't totally break IE7\n      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n      if (attr === 'class') {\n        el.className = attrs[attr];\n      } else {\n        el.setAttribute(attr, attrs[attr]);\n      }\n    });\n\n    // Update tag id/class for use as HTML5 playback tech\n    // Might think we should do this after embedding in container so .vjs-tech class\n    // doesn't flash 100% width/height, but class only applies with .video-js parent\n    tag.playerId = tag.id;\n    tag.id += '_html5_api';\n    tag.className = 'vjs-tech';\n\n    // Make player findable on elements\n    tag.player = el.player = this;\n    // Default state of video is paused\n    this.addClass('vjs-paused');\n\n    // Add a style element in the player that we'll use to set the width/height\n    // of the player in a way that's still overrideable by CSS, just like the\n    // video element\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n      this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n      let defaultsStyleEl = Dom.$('.vjs-styles-defaults');\n      let head = Dom.$('head');\n      head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n    }\n\n    // Pass in the width/height/aspectRatio options which will update the style el\n    this.width(this.options_.width);\n    this.height(this.options_.height);\n    this.fluid(this.options_.fluid);\n    this.aspectRatio(this.options_.aspectRatio);\n\n    // Hide any links within the video/audio tag, because IE doesn't hide them completely.\n    let links = tag.getElementsByTagName('a');\n    for (let i = 0; i < links.length; i++) {\n      let linkEl = links.item(i);\n      Dom.addElClass(linkEl, 'vjs-hidden');\n      linkEl.setAttribute('hidden', 'hidden');\n    }\n\n    // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n    // keep track of the original for later so we can know if the source originally failed\n    tag.initNetworkState_ = tag.networkState;\n\n    // Wrap video tag in div (el/box) container\n    if (tag.parentNode) {\n      tag.parentNode.insertBefore(el, tag);\n    }\n\n    // insert the tag as the first child of the player element\n    // then manually add it to the children array so that this.addChild\n    // will work properly for other components\n    Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n    this.children_.unshift(tag);\n\n    this.el_ = el;\n\n    return el;\n  }\n\n  /**\n   * Get/set player width\n   *\n   * @param {Number=} value Value for width\n   * @return {Number} Width when getting\n   * @method width\n   */\n  width(value) {\n    return this.dimension('width', value);\n  }\n\n  /**\n   * Get/set player height\n   *\n   * @param {Number=} value Value for height\n   * @return {Number} Height when getting\n   * @method height\n   */\n  height(value) {\n    return this.dimension('height', value);\n  }\n\n  /**\n   * Get/set dimension for player\n   *\n   * @param {String} dimension Either width or height\n   * @param {Number=} value Value for dimension\n   * @return {Component}\n   * @method dimension\n   */\n  dimension(dimension, value) {\n    let privDimension = dimension + '_';\n\n    if (value === undefined) {\n      return this[privDimension] || 0;\n    }\n\n    if (value === '') {\n      // If an empty string is given, reset the dimension to be automatic\n      this[privDimension] = undefined;\n    } else {\n      let parsedVal = parseFloat(value);\n\n      if (isNaN(parsedVal)) {\n        log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n        return this;\n      }\n\n      this[privDimension] = parsedVal;\n    }\n\n    this.updateStyleEl_();\n    return this;\n  }\n\n  /**\n   * Add/remove the vjs-fluid class\n   *\n   * @param {Boolean} bool Value of true adds the class, value of false removes the class\n   * @method fluid\n   */\n  fluid(bool) {\n    if (bool === undefined) {\n      return !!this.fluid_;\n    }\n\n    this.fluid_ = !!bool;\n\n    if (bool) {\n      this.addClass('vjs-fluid');\n    } else {\n      this.removeClass('vjs-fluid');\n    }\n  }\n\n  /**\n   * Get/Set the aspect ratio\n   *\n   * @param {String=} ratio Aspect ratio for player\n   * @return aspectRatio\n   * @method aspectRatio\n   */\n  aspectRatio(ratio) {\n    if (ratio === undefined) {\n      return this.aspectRatio_;\n    }\n\n    // Check for width:height format\n    if (!/^\\d+\\:\\d+$/.test(ratio)) {\n      throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n    }\n    this.aspectRatio_ = ratio;\n\n    // We're assuming if you set an aspect ratio you want fluid mode,\n    // because in fixed mode you could calculate width and height yourself.\n    this.fluid(true);\n\n    this.updateStyleEl_();\n  }\n\n  /**\n   * Update styles of the player element (height, width and aspect ratio)\n   *\n   * @method updateStyleEl_\n   */\n  updateStyleEl_() {\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE === true) {\n      const width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;\n      const height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;\n      let techEl = this.tech_ && this.tech_.el();\n\n      if (techEl) {\n        if (width >= 0) {\n          techEl.width = width;\n        }\n        if (height >= 0) {\n          techEl.height = height;\n        }\n      }\n\n      return;\n    }\n\n    let width;\n    let height;\n    let aspectRatio;\n    let idClass;\n\n    // The aspect ratio is either used directly or to calculate width and height.\n    if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n      // Use any aspectRatio that's been specifically set\n      aspectRatio = this.aspectRatio_;\n    } else if (this.videoWidth()) {\n      // Otherwise try to get the aspect ratio from the video metadata\n      aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n    } else {\n      // Or use a default. The video element's is 2:1, but 16:9 is more common.\n      aspectRatio = '16:9';\n    }\n\n    // Get the ratio as a decimal we can use to calculate dimensions\n    let ratioParts = aspectRatio.split(':');\n    let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n    if (this.width_ !== undefined) {\n      // Use any width that's been specifically set\n      width = this.width_;\n    } else if (this.height_ !== undefined) {\n      // Or calulate the width from the aspect ratio if a height has been set\n      width = this.height_ / ratioMultiplier;\n    } else {\n      // Or use the video's metadata, or use the video el's default of 300\n      width = this.videoWidth() || 300;\n    }\n\n    if (this.height_ !== undefined) {\n      // Use any height that's been specifically set\n      height = this.height_;\n    } else {\n      // Otherwise calculate the height from the ratio and the width\n      height = width  * ratioMultiplier;\n    }\n\n    // Ensure the CSS class is valid by starting with an alpha character\n    if (/^[^a-zA-Z]/.test(this.id())) {\n      idClass = 'dimensions-'+this.id();\n    } else {\n      idClass = this.id()+'-dimensions';\n    }\n\n    // Ensure the right class is still on the player for the style element\n    this.addClass(idClass);\n\n    stylesheet.setTextContent(this.styleEl_, `\n      .${idClass} {\n        width: ${width}px;\n        height: ${height}px;\n      }\n\n      .${idClass}.vjs-fluid {\n        padding-top: ${ratioMultiplier * 100}%;\n      }\n    `);\n  }\n\n  /**\n   * Load the Media Playback Technology (tech)\n   * Load/Create an instance of playback technology including element and API methods\n   * And append playback element in player div.\n   *\n   * @param {String} techName Name of the playback technology\n   * @param {String} source Video source\n   * @method loadTech_\n   * @private\n   */\n  loadTech_(techName, source) {\n\n    // Pause and remove current playback technology\n    if (this.tech_) {\n      this.unloadTech_();\n    }\n\n    // get rid of the HTML5 video tag as soon as we are using another tech\n    if (techName !== 'Html5' && this.tag) {\n      Tech.getTech('Html5').disposeMediaElement(this.tag);\n      this.tag.player = null;\n      this.tag = null;\n    }\n\n    this.techName_ = techName;\n\n    // Turn off API access because we're loading a new tech that might load asynchronously\n    this.isReady_ = false;\n\n    // Grab tech-specific options from player options and add source and parent element to use.\n    var techOptions = assign({\n      'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n      'source': source,\n      'playerId': this.id(),\n      'techId': `${this.id()}_${techName}_api`,\n      'videoTracks': this.videoTracks_,\n      'textTracks': this.textTracks_,\n      'audioTracks': this.audioTracks_,\n      'autoplay': this.options_.autoplay,\n      'preload': this.options_.preload,\n      'loop': this.options_.loop,\n      'muted': this.options_.muted,\n      'poster': this.poster(),\n      'language': this.language(),\n      'vtt.js': this.options_['vtt.js']\n    }, this.options_[techName.toLowerCase()]);\n\n    if (this.tag) {\n      techOptions.tag = this.tag;\n    }\n\n    if (source) {\n      this.currentType_ = source.type;\n      if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n        techOptions.startTime = this.cache_.currentTime;\n      }\n\n      this.cache_.src = source.src;\n    }\n\n    // Initialize tech instance\n    let techComponent = Tech.getTech(techName);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!techComponent) {\n      techComponent = Component.getComponent(techName);\n    }\n    this.tech_ = new techComponent(techOptions);\n\n    // player.triggerReady is always async, so don't need this to be async\n    this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n    textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n    // Listen to all HTML5-defined events and trigger them on the player\n    this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n    this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n    this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n    this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n    this.on(this.tech_, 'playing', this.handleTechPlaying_);\n    this.on(this.tech_, 'ended', this.handleTechEnded_);\n    this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n    this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n    this.on(this.tech_, 'play', this.handleTechPlay_);\n    this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n    this.on(this.tech_, 'pause', this.handleTechPause_);\n    this.on(this.tech_, 'progress', this.handleTechProgress_);\n    this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n    this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n    this.on(this.tech_, 'error', this.handleTechError_);\n    this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n    this.on(this.tech_, 'abort', this.handleTechAbort_);\n    this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n    this.on(this.tech_, 'stalled', this.handleTechStalled_);\n    this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n    this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n    this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n    this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n    this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n    this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n    this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n    this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n    this.usingNativeControls(this.techGet_('controls'));\n\n    if (this.controls() && !this.usingNativeControls()) {\n      this.addTechControlsListeners_();\n    }\n\n    // Add the tech element in the DOM if it was not already there\n    // Make sure to not insert the original video element if using Html5\n    if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n      Dom.insertElFirst(this.tech_.el(), this.el());\n    }\n\n    // Get rid of the original video tag reference after the first tech is loaded\n    if (this.tag) {\n      this.tag.player = null;\n      this.tag = null;\n    }\n  }\n\n  /**\n   * Unload playback technology\n   *\n   * @method unloadTech_\n   * @private\n   */\n  unloadTech_() {\n    // Save the current text tracks so that we can reuse the same text tracks with the next tech\n    this.videoTracks_ = this.videoTracks();\n    this.textTracks_ = this.textTracks();\n    this.audioTracks_ = this.audioTracks();\n    this.textTracksJson_ = textTrackConverter.textTracksToJson(this.tech_);\n\n    this.isReady_ = false;\n\n    this.tech_.dispose();\n\n    this.tech_ = false;\n  }\n\n  /**\n   * Return a reference to the current tech.\n   * It will only return a reference to the tech if given an object with the\n   * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse\n   * of techs by plugins.\n   *\n   * @param {Object}\n   * @return {Object} The Tech\n   * @method tech\n   */\n  tech(safety) {\n    if (safety && safety.IWillNotUseThisInPlugins) {\n      return this.tech_;\n    }\n    let errorText = `\n      Please make sure that you are not using this inside of a plugin.\n      To disable this alert and error, please pass in an object with\n      \\`IWillNotUseThisInPlugins\\` to the \\`tech\\` method. See\n      https://github.com/videojs/video.js/issues/2617 for more info.\n    `;\n    window.alert(errorText);\n    throw new Error(errorText);\n  }\n\n  /**\n   * Set up click and touch listeners for the playback element\n   *\n   * On desktops, a click on the video itself will toggle playback,\n   * on a mobile device a click on the video toggles controls.\n   * (toggling controls is done by toggling the user state between active and\n   * inactive)\n   * A tap can signal that a user has become active, or has become inactive\n   * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n   * quick tap should hide them again (signaling the user is in an inactive\n   * viewing state)\n   * In addition to this, we still want the user to be considered inactive after\n   * a few seconds of inactivity.\n   * Note: the only part of iOS interaction we can't mimic with this setup\n   * is a touch and hold on the video element counting as activity in order to\n   * keep the controls showing, but that shouldn't be an issue. A touch and hold\n   * on any controls will still keep the user active\n   *\n   * @private\n   * @method addTechControlsListeners_\n   */\n  addTechControlsListeners_() {\n    // Make sure to remove all the previous listeners in case we are called multiple times.\n    this.removeTechControlsListeners_();\n\n    // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n    // trigger mousedown/up.\n    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n    // Any touch events are set to block the mousedown event from happening\n    this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n    // If the controls were hidden we don't want that to change without a tap event\n    // so we'll check if the controls were already showing before reporting user\n    // activity\n    this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n    // The tap listener needs to come after the touchend listener because the tap\n    // listener cancels out any reportedUserActivity when setting userActive(false)\n    this.on(this.tech_, 'tap', this.handleTechTap_);\n  }\n\n  /**\n   * Remove the listeners used for click and tap controls. This is needed for\n   * toggling to controls disabled, where a tap/touch should do nothing.\n   *\n   * @method removeTechControlsListeners_\n   * @private\n   */\n  removeTechControlsListeners_() {\n    // We don't want to just use `this.off()` because there might be other needed\n    // listeners added by techs that extend this.\n    this.off(this.tech_, 'tap', this.handleTechTap_);\n    this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n    this.off(this.tech_, 'mousedown', this.handleTechClick_);\n  }\n\n  /**\n   * Player waits for the tech to be ready\n   *\n   * @method handleTechReady_\n   * @private\n   */\n  handleTechReady_() {\n    this.triggerReady();\n\n    // Keep the same volume as before\n    if (this.cache_.volume) {\n      this.techCall_('setVolume', this.cache_.volume);\n    }\n\n    // Look if the tech found a higher resolution poster while loading\n    this.handleTechPosterChange_();\n\n    // Update the duration if available\n    this.handleTechDurationChange_();\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    if (this.src() && this.tag && this.options_.autoplay && this.paused()) {\n      delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n      this.play();\n    }\n  }\n\n  /**\n   * Fired when the user agent begins looking for media data\n   *\n   * @private\n   * @method handleTechLoadStart_\n   */\n  handleTechLoadStart_() {\n    // TODO: Update to use `emptied` event instead. See #1277.\n\n    this.removeClass('vjs-ended');\n\n    // reset the error state\n    this.error(null);\n\n    // If it's already playing we want to trigger a firstplay event now.\n    // The firstplay event relies on both the play and loadstart events\n    // which can happen in any order for a new source\n    if (!this.paused()) {\n      this.trigger('loadstart');\n      this.trigger('firstplay');\n    } else {\n      // reset the hasStarted state\n      this.hasStarted(false);\n      this.trigger('loadstart');\n    }\n  }\n\n  /**\n   * Add/remove the vjs-has-started class\n   *\n   * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n   * @return {Boolean} Boolean value if has started\n   * @private\n   * @method hasStarted\n   */\n  hasStarted(hasStarted) {\n    if (hasStarted !== undefined) {\n      // only update if this is a new value\n      if (this.hasStarted_ !== hasStarted) {\n        this.hasStarted_ = hasStarted;\n        if (hasStarted) {\n          this.addClass('vjs-has-started');\n          // trigger the firstplay event if this newly has played\n          this.trigger('firstplay');\n        } else {\n          this.removeClass('vjs-has-started');\n        }\n      }\n      return this;\n    }\n    return !!this.hasStarted_;\n  }\n\n  /**\n   * Fired whenever the media begins or resumes playback\n   *\n   * @private\n   * @method handleTechPlay_\n   */\n  handleTechPlay_() {\n    this.removeClass('vjs-ended');\n    this.removeClass('vjs-paused');\n    this.addClass('vjs-playing');\n\n    // hide the poster when the user hits play\n    // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n    this.hasStarted(true);\n\n    this.trigger('play');\n  }\n\n  /**\n   * Fired whenever the media begins waiting\n   *\n   * @private\n   * @method handleTechWaiting_\n   */\n  handleTechWaiting_() {\n    this.addClass('vjs-waiting');\n    this.trigger('waiting');\n    this.one('timeupdate', () => this.removeClass('vjs-waiting'));\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlay_\n   */\n  handleTechCanPlay_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplay');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlayThrough_\n   */\n  handleTechCanPlayThrough_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplaythrough');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechPlaying_\n   */\n  handleTechPlaying_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('playing');\n  }\n\n  /**\n   * Fired whenever the player is jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeking_\n   */\n  handleTechSeeking_() {\n    this.addClass('vjs-seeking');\n    this.trigger('seeking');\n  }\n\n  /**\n   * Fired when the player has finished jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeked_\n   */\n  handleTechSeeked_() {\n    this.removeClass('vjs-seeking');\n    this.trigger('seeked');\n  }\n\n  /**\n   * Fired the first time a video is played\n   * Not part of the HLS spec, and we're not sure if this is the best\n   * implementation yet, so use sparingly. If you don't have a reason to\n   * prevent playback, use `myPlayer.one('play');` instead.\n   *\n   * @private\n   * @method handleTechFirstPlay_\n   */\n  handleTechFirstPlay_() {\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_.starttime){\n      this.currentTime(this.options_.starttime);\n    }\n\n    this.addClass('vjs-has-started');\n    this.trigger('firstplay');\n  }\n\n  /**\n   * Fired whenever the media has been paused\n   *\n   * @private\n   * @method handleTechPause_\n   */\n  handleTechPause_() {\n    this.removeClass('vjs-playing');\n    this.addClass('vjs-paused');\n    this.trigger('pause');\n  }\n\n  /**\n   * Fired while the user agent is downloading media data\n   *\n   * @private\n   * @method handleTechProgress_\n   */\n  handleTechProgress_() {\n    this.trigger('progress');\n  }\n\n  /**\n   * Fired when the end of the media resource is reached (currentTime == duration)\n   *\n   * @private\n   * @method handleTechEnded_\n   */\n  handleTechEnded_() {\n    this.addClass('vjs-ended');\n    if (this.options_.loop) {\n      this.currentTime(0);\n      this.play();\n    } else if (!this.paused()) {\n      this.pause();\n    }\n\n    this.trigger('ended');\n  }\n\n  /**\n   * Fired when the duration of the media resource is first known or changed\n   *\n   * @private\n   * @method handleTechDurationChange_\n   */\n  handleTechDurationChange_() {\n    this.duration(this.techGet_('duration'));\n  }\n\n  /**\n   * Handle a click on the media element to play/pause\n   *\n   * @param {Object=} event Event object\n   * @private\n   * @method handleTechClick_\n   */\n  handleTechClick_(event) {\n    // We're using mousedown to detect clicks thanks to Flash, but mousedown\n    // will also be triggered with right-clicks, so we need to prevent that\n    if (event.button !== 0) return;\n\n    // When controls are disabled a click should not toggle playback because\n    // the click is considered a control\n    if (this.controls()) {\n      if (this.paused()) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    }\n  }\n\n  /**\n   * Handle a tap on the media element. It will toggle the user\n   * activity state, which hides and shows the controls.\n   *\n   * @private\n   * @method handleTechTap_\n   */\n  handleTechTap_() {\n    this.userActive(!this.userActive());\n  }\n\n  /**\n   * Handle touch to start\n   *\n   * @private\n   * @method handleTechTouchStart_\n   */\n  handleTechTouchStart_() {\n    this.userWasActive = this.userActive();\n  }\n\n  /**\n   * Handle touch to move\n   *\n   * @private\n   * @method handleTechTouchMove_\n   */\n  handleTechTouchMove_() {\n    if (this.userWasActive){\n      this.reportUserActivity();\n    }\n  }\n\n  /**\n   * Handle touch to end\n   *\n   * @private\n   * @method handleTechTouchEnd_\n   */\n  handleTechTouchEnd_(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n  }\n\n  /**\n   * Fired when the player switches in or out of fullscreen mode\n   *\n   * @private\n   * @method handleFullscreenChange_\n   */\n  handleFullscreenChange_() {\n    if (this.isFullscreen()) {\n      this.addClass('vjs-fullscreen');\n    } else {\n      this.removeClass('vjs-fullscreen');\n    }\n  }\n\n  /**\n   * native click events on the SWF aren't triggered on IE11, Win8.1RT\n   * use stageclick events triggered from inside the SWF instead\n   *\n   * @private\n   * @method handleStageClick_\n   */\n  handleStageClick_() {\n    this.reportUserActivity();\n  }\n\n  /**\n   * Handle Tech Fullscreen Change\n   *\n   * @private\n   * @method handleTechFullscreenChange_\n   */\n  handleTechFullscreenChange_(event, data) {\n    if (data) {\n      this.isFullscreen(data.isFullscreen);\n    }\n    this.trigger('fullscreenchange');\n  }\n\n  /**\n   * Fires when an error occurred during the loading of an audio/video\n   *\n   * @private\n   * @method handleTechError_\n   */\n  handleTechError_() {\n    let error = this.tech_.error();\n    this.error(error);\n  }\n\n  /**\n   * Fires when the browser is intentionally not getting media data\n   *\n   * @private\n   * @method handleTechSuspend_\n   */\n  handleTechSuspend_() {\n    this.trigger('suspend');\n  }\n\n  /**\n   * Fires when the loading of an audio/video is aborted\n   *\n   * @private\n   * @method handleTechAbort_\n   */\n  handleTechAbort_() {\n    this.trigger('abort');\n  }\n\n  /**\n   * Fires when the current playlist is empty\n   *\n   * @private\n   * @method handleTechEmptied_\n   */\n  handleTechEmptied_() {\n    this.trigger('emptied');\n  }\n\n  /**\n   * Fires when the browser is trying to get media data, but data is not available\n   *\n   * @private\n   * @method handleTechStalled_\n   */\n  handleTechStalled_() {\n    this.trigger('stalled');\n  }\n\n  /**\n   * Fires when the browser has loaded meta data for the audio/video\n   *\n   * @private\n   * @method handleTechLoadedMetaData_\n   */\n  handleTechLoadedMetaData_() {\n    this.trigger('loadedmetadata');\n  }\n\n  /**\n   * Fires when the browser has loaded the current frame of the audio/video\n   *\n   * @private\n   * @method handleTechLoadedData_\n   */\n  handleTechLoadedData_() {\n    this.trigger('loadeddata');\n  }\n\n  /**\n   * Fires when the current playback position has changed\n   *\n   * @private\n   * @method handleTechTimeUpdate_\n   */\n  handleTechTimeUpdate_() {\n    this.trigger('timeupdate');\n  }\n\n  /**\n   * Fires when the playing speed of the audio/video is changed\n   *\n   * @private\n   * @method handleTechRateChange_\n   */\n  handleTechRateChange_() {\n    this.trigger('ratechange');\n  }\n\n  /**\n   * Fires when the volume has been changed\n   *\n   * @private\n   * @method handleTechVolumeChange_\n   */\n  handleTechVolumeChange_() {\n    this.trigger('volumechange');\n  }\n\n  /**\n   * Fires when the text track has been changed\n   *\n   * @private\n   * @method handleTechTextTrackChange_\n   */\n  handleTechTextTrackChange_() {\n    this.trigger('texttrackchange');\n  }\n\n  /**\n   * Get object for cached values.\n   *\n   * @return {Object}\n   * @method getCache\n   */\n  getCache() {\n    return this.cache_;\n  }\n\n  /**\n   * Pass values to the playback tech\n   *\n   * @param {String=} method Method\n   * @param {Object=} arg Argument\n   * @private\n   * @method techCall_\n   */\n  techCall_(method, arg) {\n    // If it's not ready yet, call method when it is\n    if (this.tech_ && !this.tech_.isReady_) {\n      this.tech_.ready(function(){\n        this[method](arg);\n      }, true);\n\n    // Otherwise call method now\n    } else {\n      try {\n        this.tech_[method](arg);\n      } catch(e) {\n        log(e);\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Get calls can't wait for the tech, and sometimes don't need to.\n   *\n   * @param {String} method Tech method\n   * @return {Method}\n   * @private\n   * @method techGet_\n   */\n  techGet_(method) {\n    if (this.tech_ && this.tech_.isReady_) {\n\n      // Flash likes to die and reload when you hide or reposition it.\n      // In these cases the object methods go away and we get errors.\n      // When that happens we'll catch the errors and inform tech that it's not ready any more.\n      try {\n        return this.tech_[method]();\n      } catch(e) {\n        // When building additional tech libs, an expected method may not be defined yet\n        if (this.tech_[method] === undefined) {\n          log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n        } else {\n          // When a method isn't available on the object it throws a TypeError\n          if (e.name === 'TypeError') {\n            log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n            this.tech_.isReady_ = false;\n          } else {\n            log(e);\n          }\n        }\n        throw e;\n      }\n    }\n\n    return;\n  }\n\n  /**\n   * start media playback\n   * ```js\n   *     myPlayer.play();\n   * ```\n   *\n   * @return {Player} self\n   * @method play\n   */\n  play() {\n    this.techCall_('play');\n    return this;\n  }\n\n  /**\n   * Pause the video playback\n   * ```js\n   *     myPlayer.pause();\n   * ```\n   *\n   * @return {Player} self\n   * @method pause\n   */\n  pause() {\n    this.techCall_('pause');\n    return this;\n  }\n\n  /**\n   * Check if the player is paused\n   * ```js\n   *     var isPaused = myPlayer.paused();\n   *     var isPlaying = !myPlayer.paused();\n   * ```\n   *\n   * @return {Boolean} false if the media is currently playing, or true otherwise\n   * @method paused\n   */\n  paused() {\n    // The initial state of paused should be true (in Safari it's actually false)\n    return (this.techGet_('paused') === false) ? false : true;\n  }\n\n  /**\n   * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n   * has clicked the progress bar handle and is dragging it along the progress bar.\n   *\n   * @param  {Boolean} isScrubbing   True/false the user is scrubbing\n   * @return {Boolean}               The scrubbing status when getting\n   * @return {Object}                The player when setting\n   * @method scrubbing\n   */\n  scrubbing(isScrubbing) {\n    if (isScrubbing !== undefined) {\n      this.scrubbing_ = !!isScrubbing;\n\n      if (isScrubbing) {\n        this.addClass('vjs-scrubbing');\n      } else {\n        this.removeClass('vjs-scrubbing');\n      }\n\n      return this;\n    }\n\n    return this.scrubbing_;\n  }\n\n  /**\n   * Get or set the current time (in seconds)\n   * ```js\n   *     // get\n   *     var whereYouAt = myPlayer.currentTime();\n   *     // set\n   *     myPlayer.currentTime(120); // 2 minutes into the video\n   * ```\n   *\n   * @param  {Number|String=} seconds The time to seek to\n   * @return {Number}        The time in seconds, when not setting\n   * @return {Player}    self, when the current time is set\n   * @method currentTime\n   */\n  currentTime(seconds) {\n    if (seconds !== undefined) {\n\n      this.techCall_('setCurrentTime', seconds);\n\n      return this;\n    }\n\n    // cache last currentTime and return. default to 0 seconds\n    //\n    // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n    // currentTime when scrubbing, but may not provide much performance benefit afterall.\n    // Should be tested. Also something has to read the actual current time or the cache will\n    // never get updated.\n    return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n  }\n\n  /**\n   * Get the length in time of the video in seconds\n   * ```js\n   *     var lengthOfVideo = myPlayer.duration();\n   * ```\n   * **NOTE**: The video must have started loading before the duration can be\n   * known, and in the case of Flash, may not be known until the video starts\n   * playing.\n   *\n   * @param {Number} seconds Duration when setting\n   * @return {Number} The duration of the video in seconds when getting\n   * @method duration\n   */\n  duration(seconds) {\n    if (seconds === undefined) {\n      return this.cache_.duration || 0;\n    }\n\n    seconds = parseFloat(seconds) || 0;\n\n    // Standardize on Inifity for signaling video is live\n    if (seconds < 0) {\n      seconds = Infinity;\n    }\n\n    if (seconds !== this.cache_.duration) {\n      // Cache the last set value for optimized scrubbing (esp. Flash)\n      this.cache_.duration = seconds;\n\n      if (seconds === Infinity) {\n        this.addClass('vjs-live');\n      } else {\n        this.removeClass('vjs-live');\n      }\n\n      this.trigger('durationchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Calculates how much time is left.\n   * ```js\n   *     var timeLeft = myPlayer.remainingTime();\n   * ```\n   * Not a native video element function, but useful\n   *\n   * @return {Number} The time remaining in seconds\n   * @method remainingTime\n   */\n  remainingTime() {\n    return this.duration() - this.currentTime();\n  }\n\n  // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n  // Buffered returns a timerange object.\n  // Kind of like an array of portions of the video that have been downloaded.\n\n  /**\n   * Get a TimeRange object with the times of the video that have been downloaded\n   * If you just want the percent of the video that's been downloaded,\n   * use bufferedPercent.\n   * ```js\n   *     // Number of different ranges of time have been buffered. Usually 1.\n   *     numberOfRanges = bufferedTimeRange.length,\n   *     // Time in seconds when the first range starts. Usually 0.\n   *     firstRangeStart = bufferedTimeRange.start(0),\n   *     // Time in seconds when the first range ends\n   *     firstRangeEnd = bufferedTimeRange.end(0),\n   *     // Length in seconds of the first time range\n   *     firstRangeLength = firstRangeEnd - firstRangeStart;\n   * ```\n   *\n   * @return {Object} A mock TimeRange object (following HTML spec)\n   * @method buffered\n   */\n  buffered() {\n    var buffered = this.techGet_('buffered');\n\n    if (!buffered || !buffered.length) {\n      buffered = createTimeRange(0,0);\n    }\n\n    return buffered;\n  }\n\n  /**\n   * Get the percent (as a decimal) of the video that's been downloaded\n   * ```js\n   *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n   * ```\n   * 0 means none, 1 means all.\n   * (This method isn't in the HTML5 spec, but it's very convenient)\n   *\n   * @return {Number} A decimal between 0 and 1 representing the percent\n   * @method bufferedPercent\n   */\n  bufferedPercent() {\n    return bufferedPercent(this.buffered(), this.duration());\n  }\n\n  /**\n   * Get the ending time of the last buffered time range\n   * This is used in the progress bar to encapsulate all time ranges.\n   *\n   * @return {Number} The end of the last buffered time range\n   * @method bufferedEnd\n   */\n  bufferedEnd() {\n    var buffered = this.buffered(),\n        duration = this.duration(),\n        end = buffered.end(buffered.length-1);\n\n    if (end > duration) {\n      end = duration;\n    }\n\n    return end;\n  }\n\n  /**\n   * Get or set the current volume of the media\n   * ```js\n   *     // get\n   *     var howLoudIsIt = myPlayer.volume();\n   *     // set\n   *     myPlayer.volume(0.5); // Set volume to half\n   * ```\n   * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n   *\n   * @param  {Number} percentAsDecimal The new volume as a decimal percent\n   * @return {Number}              The current volume when getting\n   * @return {Player}              self when setting\n   * @method volume\n   */\n  volume(percentAsDecimal) {\n    let vol;\n\n    if (percentAsDecimal !== undefined) {\n      vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n      this.cache_.volume = vol;\n      this.techCall_('setVolume', vol);\n\n      return this;\n    }\n\n    // Default to 1 when returning current volume.\n    vol = parseFloat(this.techGet_('volume'));\n    return (isNaN(vol)) ? 1 : vol;\n  }\n\n\n  /**\n   * Get the current muted state, or turn mute on or off\n   * ```js\n   *     // get\n   *     var isVolumeMuted = myPlayer.muted();\n   *     // set\n   *     myPlayer.muted(true); // mute the volume\n   * ```\n   *\n   * @param  {Boolean=} muted True to mute, false to unmute\n   * @return {Boolean} True if mute is on, false if not when getting\n   * @return {Player} self when setting mute\n   * @method muted\n   */\n  muted(muted) {\n    if (muted !== undefined) {\n      this.techCall_('setMuted', muted);\n      return this;\n    }\n    return this.techGet_('muted') || false; // Default to false\n  }\n\n  // Check if current tech can support native fullscreen\n  // (e.g. with built in controls like iOS, so not our flash swf)\n  /**\n   * Check to see if fullscreen is supported\n   *\n   * @return {Boolean}\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    return this.techGet_('supportsFullScreen') || false;\n  }\n\n  /**\n   * Check if the player is in fullscreen mode\n   * ```js\n   *     // get\n   *     var fullscreenOrNot = myPlayer.isFullscreen();\n   *     // set\n   *     myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n   * ```\n   * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n   * property and instead document.fullscreenElement is used. But isFullscreen is\n   * still a valuable property for internal player workings.\n   *\n   * @param  {Boolean=} isFS Update the player's fullscreen state\n   * @return {Boolean} true if fullscreen false if not when getting\n   * @return {Player} self when setting\n   * @method isFullscreen\n   */\n  isFullscreen(isFS) {\n    if (isFS !== undefined) {\n      this.isFullscreen_ = !!isFS;\n      return this;\n    }\n    return !!this.isFullscreen_;\n  }\n\n  /**\n   * Increase the size of the video to full screen\n   * ```js\n   *     myPlayer.requestFullscreen();\n   * ```\n   * In some browsers, full screen is not supported natively, so it enters\n   * \"full window mode\", where the video fills the browser window.\n   * In browsers and devices that support native full screen, sometimes the\n   * browser's default controls will be shown, and not the Video.js custom skin.\n   * This includes most mobile devices (iOS, Android) and older versions of\n   * Safari.\n   *\n   * @return {Player} self\n   * @method requestFullscreen\n   */\n  requestFullscreen() {\n    var fsApi = FullscreenApi;\n\n    this.isFullscreen(true);\n\n    if (fsApi.requestFullscreen) {\n      // the browser supports going fullscreen at the element level so we can\n      // take the controls fullscreen as well as the video\n\n      // Trigger fullscreenchange event after change\n      // We have to specifically add this each time, and remove\n      // when canceling fullscreen. Otherwise if there's multiple\n      // players on a page, they would all be reacting to the same fullscreen\n      // events\n      Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n        this.isFullscreen(document[fsApi.fullscreenElement]);\n\n        // If cancelling fullscreen, remove event listener.\n        if (this.isFullscreen() === false) {\n          Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n        }\n\n        this.trigger('fullscreenchange');\n      }));\n\n      this.el_[fsApi.requestFullscreen]();\n\n    } else if (this.tech_.supportsFullScreen()) {\n      // we can't take the video.js controls fullscreen but we can go fullscreen\n      // with native controls\n      this.techCall_('enterFullScreen');\n    } else {\n      // fullscreen isn't supported so we'll just stretch the video element to\n      // fill the viewport\n      this.enterFullWindow();\n      this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Return the video to its normal size after having been in full screen mode\n   * ```js\n   *     myPlayer.exitFullscreen();\n   * ```\n   *\n   * @return {Player} self\n   * @method exitFullscreen\n   */\n  exitFullscreen() {\n    var fsApi = FullscreenApi;\n    this.isFullscreen(false);\n\n    // Check for browser element fullscreen support\n    if (fsApi.requestFullscreen) {\n      document[fsApi.exitFullscreen]();\n    } else if (this.tech_.supportsFullScreen()) {\n     this.techCall_('exitFullScreen');\n    } else {\n     this.exitFullWindow();\n     this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n   *\n   * @method enterFullWindow\n   */\n  enterFullWindow() {\n    this.isFullWindow = true;\n\n    // Storing original doc overflow value to return to when fullscreen is off\n    this.docOrigOverflow = document.documentElement.style.overflow;\n\n    // Add listener for esc key to exit fullscreen\n    Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n    // Hide any scroll bars\n    document.documentElement.style.overflow = 'hidden';\n\n    // Apply fullscreen styles\n    Dom.addElClass(document.body, 'vjs-full-window');\n\n    this.trigger('enterFullWindow');\n  }\n\n  /**\n   * Check for call to either exit full window or full screen on ESC key\n   *\n   * @param {String} event Event to check for key press\n   * @method fullWindowOnEscKey\n   */\n  fullWindowOnEscKey(event) {\n    if (event.keyCode === 27) {\n      if (this.isFullscreen() === true) {\n        this.exitFullscreen();\n      } else {\n        this.exitFullWindow();\n      }\n    }\n  }\n\n  /**\n   * Exit full window\n   *\n   * @method exitFullWindow\n   */\n  exitFullWindow() {\n    this.isFullWindow = false;\n    Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n    // Unhide scroll bars.\n    document.documentElement.style.overflow = this.docOrigOverflow;\n\n    // Remove fullscreen styles\n    Dom.removeElClass(document.body, 'vjs-full-window');\n\n    // Resize the box, controller, and poster to original sizes\n    // this.positionAll();\n    this.trigger('exitFullWindow');\n  }\n\n  /**\n   * Check whether the player can play a given mimetype\n   *\n   * @param {String} type The mimetype to check\n   * @return {String} 'probably', 'maybe', or '' (empty string)\n   * @method canPlayType\n   */\n  canPlayType(type) {\n    let can;\n\n    // Loop through each playback technology in the options order\n    for (let i = 0, j = this.options_.techOrder; i < j.length; i++) {\n      let techName = toTitleCase(j[i]);\n      let tech = Tech.getTech(techName);\n\n      // Support old behavior of techs being registered as components.\n      // Remove once that deprecated behavior is removed.\n      if (!tech) {\n        tech = Component.getComponent(techName);\n      }\n\n      // Check if the current tech is defined before continuing\n      if (!tech) {\n        log.error(`The \"${techName}\" tech is undefined. Skipped browser support check for that tech.`);\n        continue;\n      }\n\n      // Check if the browser supports this technology\n      if (tech.isSupported()) {\n        can = tech.canPlayType(type);\n\n        if (can) {\n          return can;\n        }\n      }\n    }\n\n    return '';\n  }\n\n  /**\n   * Select source based on tech-order or source-order\n   * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,\n   * defaults to tech-order selection\n   *\n   * @param {Array} sources The sources for a media asset\n   * @return {Object|Boolean} Object of source and tech order, otherwise false\n   * @method selectSource\n   */\n  selectSource(sources) {\n    // Get only the techs specified in `techOrder` that exist and are supported by the\n    // current platform\n    let techs =\n      this.options_.techOrder\n        .map(toTitleCase)\n        .map((techName) => {\n          // `Component.getComponent(...)` is for support of old behavior of techs\n          // being registered as components.\n          // Remove once that deprecated behavior is removed.\n          return [techName, Tech.getTech(techName) || Component.getComponent(techName)];\n        })\n        .filter(([techName, tech]) => {\n          // Check if the current tech is defined before continuing\n          if (tech) {\n            // Check if the browser supports this technology\n            return tech.isSupported();\n          }\n\n          log.error(`The \"${techName}\" tech is undefined. Skipped browser support check for that tech.`);\n          return false;\n        });\n\n    // Iterate over each `innerArray` element once per `outerArray` element and execute\n    // `tester` with both. If `tester` returns a non-falsy value, exit early and return\n    // that value.\n    let findFirstPassingTechSourcePair = function (outerArray, innerArray, tester) {\n      let found;\n\n      outerArray.some((outerChoice) => {\n        return innerArray.some((innerChoice) => {\n          found = tester(outerChoice, innerChoice);\n\n          if (found) {\n            return true;\n          }\n        });\n      });\n\n      return found;\n    };\n\n    let foundSourceAndTech;\n    let flip = (fn) => (a, b) => fn(b, a);\n    let finder = ([techName, tech], source) => {\n      if (tech.canPlaySource(source, this.options_[techName.toLowerCase()])) {\n        return {source: source, tech: techName};\n      }\n    };\n\n    // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources\n    // to select from them based on their priority.\n    if (this.options_.sourceOrder) {\n      // Source-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));\n    } else {\n      // Tech-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);\n    }\n\n    return foundSourceAndTech || false;\n  }\n\n  /**\n   * The source function updates the video source\n   * There are three types of variables you can pass as the argument.\n   * **URL String**: A URL to the the video file. Use this method if you are sure\n   * the current playback technology (HTML5/Flash) can support the source you\n   * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n   * ```js\n   *     myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n   * ```\n   * **Source Object (or element):* * A javascript object containing information\n   * about the source file. Use this method if you want the player to determine if\n   * it can support the file using the type information.\n   * ```js\n   *     myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n   * ```\n   * **Array of Source Objects:* * To provide multiple versions of the source so\n   * that it can be played using HTML5 across browsers you can use an array of\n   * source objects. Video.js will detect which version is supported and load that\n   * file.\n   * ```js\n   *     myPlayer.src([\n   *       { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n   *       { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n   *       { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n   *     ]);\n   * ```\n   *\n   * @param  {String|Object|Array=} source The source URL, object, or array of sources\n   * @return {String} The current video source when getting\n   * @return {String} The player when setting\n   * @method src\n   */\n  src(source) {\n    if (source === undefined) {\n      return this.techGet_('src');\n    }\n\n    let currentTech = Tech.getTech(this.techName_);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!currentTech) {\n      currentTech = Component.getComponent(this.techName_);\n    }\n\n    // case: Array of source objects to choose from and pick the best to play\n    if (Array.isArray(source)) {\n      this.sourceList_(source);\n\n    // case: URL String (http://myvideo...)\n    } else if (typeof source === 'string') {\n      // create a source object from the string\n      this.src({ src: source });\n\n    // case: Source object { src: '', type: '' ... }\n    } else if (source instanceof Object) {\n      // check if the source has a type and the loaded tech cannot play the source\n      // if there's no type we'll just try the current tech\n      if (source.type && !currentTech.canPlaySource(source, this.options_[this.techName_.toLowerCase()])) {\n        // create a source list with the current source and send through\n        // the tech loop to check for a compatible technology\n        this.sourceList_([source]);\n      } else {\n        this.cache_.src = source.src;\n        this.currentType_ = source.type || '';\n\n        // wait until the tech is ready to set the source\n        this.ready(function(){\n\n          // The setSource tech method was added with source handlers\n          // so older techs won't support it\n          // We need to check the direct prototype for the case where subclasses\n          // of the tech do not support source handlers\n          if (currentTech.prototype.hasOwnProperty('setSource')) {\n            this.techCall_('setSource', source);\n          } else {\n            this.techCall_('src', source.src);\n          }\n\n          if (this.options_.preload === 'auto') {\n            this.load();\n          }\n\n          if (this.options_.autoplay) {\n            this.play();\n          }\n\n        // Set the source synchronously if possible (#2326)\n        }, true);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Handle an array of source objects\n   *\n   * @param  {Array} sources Array of source objects\n   * @private\n   * @method sourceList_\n   */\n  sourceList_(sources) {\n    var sourceTech = this.selectSource(sources);\n\n    if (sourceTech) {\n      if (sourceTech.tech === this.techName_) {\n        // if this technology is already loaded, set the source\n        this.src(sourceTech.source);\n      } else {\n        // load this technology with the chosen source\n        this.loadTech_(sourceTech.tech, sourceTech.source);\n      }\n    } else {\n      // We need to wrap this in a timeout to give folks a chance to add error event handlers\n      this.setTimeout( function() {\n        this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });\n      }, 0);\n\n      // we could not find an appropriate tech, but let's still notify the delegate that this is it\n      // this needs a better comment about why this is needed\n      this.triggerReady();\n    }\n  }\n\n  /**\n   * Begin loading the src data.\n   *\n   * @return {Player} Returns the player\n   * @method load\n   */\n  load() {\n    this.techCall_('load');\n    return this;\n  }\n\n  /**\n   * Reset the player. Loads the first tech in the techOrder,\n   * and calls `reset` on the tech`.\n   *\n   * @return {Player} Returns the player\n   * @method reset\n   */\n  reset() {\n    this.loadTech_(toTitleCase(this.options_.techOrder[0]), null);\n    this.techCall_('reset');\n    return this;\n  }\n\n  /**\n   * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4\n   * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.\n   *\n   * @return {String} The current source\n   * @method currentSrc\n   */\n  currentSrc() {\n    return this.techGet_('currentSrc') || this.cache_.src || '';\n  }\n\n  /**\n   * Get the current source type e.g. video/mp4\n   * This can allow you rebuild the current source object so that you could load the same\n   * source and tech later\n   *\n   * @return {String} The source MIME type\n   * @method currentType\n   */\n  currentType() {\n    return this.currentType_ || '';\n  }\n\n  /**\n   * Get or set the preload attribute\n   *\n   * @param {Boolean} value Boolean to determine if preload should be used\n   * @return {String} The preload attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method preload\n   */\n  preload(value) {\n    if (value !== undefined) {\n      this.techCall_('setPreload', value);\n      this.options_.preload = value;\n      return this;\n    }\n    return this.techGet_('preload');\n  }\n\n  /**\n   * Get or set the autoplay attribute.\n   *\n   * @param {Boolean} value Boolean to determine if video should autoplay\n   * @return {String} The autoplay attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method autoplay\n   */\n  autoplay(value) {\n    if (value !== undefined) {\n      this.techCall_('setAutoplay', value);\n      this.options_.autoplay = value;\n      return this;\n    }\n    return this.techGet_('autoplay', value);\n  }\n\n  /**\n   * Get or set the loop attribute on the video element.\n   *\n   * @param {Boolean} value Boolean to determine if video should loop\n   * @return {String} The loop attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method loop\n   */\n  loop(value) {\n    if (value !== undefined) {\n      this.techCall_('setLoop', value);\n      this.options_['loop'] = value;\n      return this;\n    }\n    return this.techGet_('loop');\n  }\n\n  /**\n   * Get or set the poster image source url\n   *\n   * ##### EXAMPLE:\n   * ```js\n   *     // get\n   *     var currentPoster = myPlayer.poster();\n   *     // set\n   *     myPlayer.poster('http://example.com/myImage.jpg');\n   * ```\n   *\n   * @param  {String=} src Poster image source URL\n   * @return {String} poster URL when getting\n   * @return {Player} self when setting\n   * @method poster\n   */\n  poster(src) {\n    if (src === undefined) {\n      return this.poster_;\n    }\n\n    // The correct way to remove a poster is to set as an empty string\n    // other falsey values will throw errors\n    if (!src) {\n      src = '';\n    }\n\n    // update the internal poster variable\n    this.poster_ = src;\n\n    // update the tech's poster\n    this.techCall_('setPoster', src);\n\n    // alert components that the poster has been set\n    this.trigger('posterchange');\n\n    return this;\n  }\n\n  /**\n   * Some techs (e.g. YouTube) can provide a poster source in an\n   * asynchronous way. We want the poster component to use this\n   * poster source so that it covers up the tech's controls.\n   * (YouTube's play button). However we only want to use this\n   * soruce if the player user hasn't set a poster through\n   * the normal APIs.\n   *\n   * @private\n   * @method handleTechPosterChange_\n   */\n  handleTechPosterChange_() {\n    if (!this.poster_ && this.tech_ && this.tech_.poster) {\n      this.poster_ = this.tech_.poster() || '';\n\n      // Let components know the poster has changed\n      this.trigger('posterchange');\n    }\n  }\n\n  /**\n   * Get or set whether or not the controls are showing.\n   *\n   * @param  {Boolean} bool Set controls to showing or not\n   * @return {Boolean}    Controls are showing\n   * @method controls\n   */\n  controls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.controls_ !== bool) {\n        this.controls_ = bool;\n\n        if (this.usingNativeControls()) {\n          this.techCall_('setControls', bool);\n        }\n\n        if (bool) {\n          this.removeClass('vjs-controls-disabled');\n          this.addClass('vjs-controls-enabled');\n          this.trigger('controlsenabled');\n\n          if (!this.usingNativeControls()) {\n            this.addTechControlsListeners_();\n          }\n        } else {\n          this.removeClass('vjs-controls-enabled');\n          this.addClass('vjs-controls-disabled');\n          this.trigger('controlsdisabled');\n\n          if (!this.usingNativeControls()) {\n            this.removeTechControlsListeners_();\n          }\n        }\n      }\n      return this;\n    }\n    return !!this.controls_;\n  }\n\n  /**\n   * Toggle native controls on/off. Native controls are the controls built into\n   * devices (e.g. default iPhone controls), Flash, or other techs\n   * (e.g. Vimeo Controls)\n   * **This should only be set by the current tech, because only the tech knows\n   * if it can support native controls**\n   *\n   * @param  {Boolean} bool    True signals that native controls are on\n   * @return {Player}      Returns the player\n   * @private\n   * @method usingNativeControls\n   */\n  usingNativeControls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.usingNativeControls_ !== bool) {\n        this.usingNativeControls_ = bool;\n        if (bool) {\n          this.addClass('vjs-using-native-controls');\n\n          /**\n            * player is using the native device controls\n           *\n            * @event usingnativecontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingnativecontrols');\n        } else {\n          this.removeClass('vjs-using-native-controls');\n\n          /**\n            * player is using the custom HTML controls\n           *\n            * @event usingcustomcontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingcustomcontrols');\n        }\n      }\n      return this;\n    }\n    return !!this.usingNativeControls_;\n  }\n\n  /**\n   * Set or get the current MediaError\n   *\n   * @param  {*} err A MediaError or a String/Number to be turned into a MediaError\n   * @return {MediaError|null}     when getting\n   * @return {Player}              when setting\n   * @method error\n   */\n  error(err) {\n    if (err === undefined) {\n      return this.error_ || null;\n    }\n\n    // restoring to default\n    if (err === null) {\n      this.error_ = err;\n      this.removeClass('vjs-error');\n      this.errorDisplay.close();\n      return this;\n    }\n\n    // error instance\n    if (err instanceof MediaError) {\n      this.error_ = err;\n    } else {\n      this.error_ = new MediaError(err);\n    }\n\n    // add the vjs-error classname to the player\n    this.addClass('vjs-error');\n\n    // log the name of the error type and any message\n    // ie8 just logs \"[object object]\" if you just log the error object\n    log.error(`(CODE:${this.error_.code} ${MediaError.errorTypes[this.error_.code]})`, this.error_.message, this.error_);\n\n    // fire an error event on the player\n    this.trigger('error');\n\n    return this;\n  }\n\n  /**\n   * Returns whether or not the player is in the \"ended\" state.\n   *\n   * @return {Boolean} True if the player is in the ended state, false if not.\n   * @method ended\n   */\n  ended() { return this.techGet_('ended'); }\n\n  /**\n   * Returns whether or not the player is in the \"seeking\" state.\n   *\n   * @return {Boolean} True if the player is in the seeking state, false if not.\n   * @method seeking\n   */\n  seeking() { return this.techGet_('seeking'); }\n\n  /**\n   * Returns the TimeRanges of the media that are currently available\n   * for seeking to.\n   *\n   * @return {TimeRanges} the seekable intervals of the media timeline\n   * @method seekable\n   */\n  seekable() { return this.techGet_('seekable'); }\n\n  /**\n   * Report user activity\n   *\n   * @param {Object} event Event object\n   * @method reportUserActivity\n   */\n  reportUserActivity(event) {\n    this.userActivity_ = true;\n  }\n\n  /**\n   * Get/set if user is active\n   *\n   * @param {Boolean} bool Value when setting\n   * @return {Boolean} Value if user is active user when getting\n   * @method userActive\n   */\n  userActive(bool) {\n    if (bool !== undefined) {\n      bool = !!bool;\n      if (bool !== this.userActive_) {\n        this.userActive_ = bool;\n        if (bool) {\n          // If the user was inactive and is now active we want to reset the\n          // inactivity timer\n          this.userActivity_ = true;\n          this.removeClass('vjs-user-inactive');\n          this.addClass('vjs-user-active');\n          this.trigger('useractive');\n        } else {\n          // We're switching the state to inactive manually, so erase any other\n          // activity\n          this.userActivity_ = false;\n\n          // Chrome/Safari/IE have bugs where when you change the cursor it can\n          // trigger a mousemove event. This causes an issue when you're hiding\n          // the cursor when the user is inactive, and a mousemove signals user\n          // activity. Making it impossible to go into inactive mode. Specifically\n          // this happens in fullscreen when we really need to hide the cursor.\n          //\n          // When this gets resolved in ALL browsers it can be removed\n          // https://code.google.com/p/chromium/issues/detail?id=103041\n          if(this.tech_) {\n            this.tech_.one('mousemove', function(e){\n              e.stopPropagation();\n              e.preventDefault();\n            });\n          }\n\n          this.removeClass('vjs-user-active');\n          this.addClass('vjs-user-inactive');\n          this.trigger('userinactive');\n        }\n      }\n      return this;\n    }\n    return this.userActive_;\n  }\n\n  /**\n   * Listen for user activity based on timeout value\n   *\n   * @private\n   * @method listenForUserActivity_\n   */\n  listenForUserActivity_() {\n    let mouseInProgress, lastMoveX, lastMoveY;\n\n    let handleActivity = Fn.bind(this, this.reportUserActivity);\n\n    let handleMouseMove = function(e) {\n      // #1068 - Prevent mousemove spamming\n      // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970\n      if(e.screenX !== lastMoveX || e.screenY !== lastMoveY) {\n        lastMoveX = e.screenX;\n        lastMoveY = e.screenY;\n        handleActivity();\n      }\n    };\n\n    let handleMouseDown = function() {\n      handleActivity();\n      // For as long as the they are touching the device or have their mouse down,\n      // we consider them active even if they're not moving their finger or mouse.\n      // So we want to continue to update that they are active\n      this.clearInterval(mouseInProgress);\n      // Setting userActivity=true now and setting the interval to the same time\n      // as the activityCheck interval (250) should ensure we never miss the\n      // next activityCheck\n      mouseInProgress = this.setInterval(handleActivity, 250);\n    };\n\n    let handleMouseUp = function(event) {\n      handleActivity();\n      // Stop the interval that maintains activity if the mouse/touch is down\n      this.clearInterval(mouseInProgress);\n    };\n\n    // Any mouse movement will be considered user activity\n    this.on('mousedown', handleMouseDown);\n    this.on('mousemove', handleMouseMove);\n    this.on('mouseup', handleMouseUp);\n\n    // Listen for keyboard navigation\n    // Shouldn't need to use inProgress interval because of key repeat\n    this.on('keydown', handleActivity);\n    this.on('keyup', handleActivity);\n\n    // Run an interval every 250 milliseconds instead of stuffing everything into\n    // the mousemove/touchmove function itself, to prevent performance degradation.\n    // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n    // then gets picked up by this loop\n    // http://ejohn.org/blog/learning-from-twitter/\n    let inactivityTimeout;\n    let activityCheck = this.setInterval(function() {\n      // Check to see if mouse/touch activity has happened\n      if (this.userActivity_) {\n        // Reset the activity tracker\n        this.userActivity_ = false;\n\n        // If the user state was inactive, set the state to active\n        this.userActive(true);\n\n        // Clear any existing inactivity timeout to start the timer over\n        this.clearTimeout(inactivityTimeout);\n\n        var timeout = this.options_['inactivityTimeout'];\n        if (timeout > 0) {\n          // In <timeout> milliseconds, if no more activity has occurred the\n          // user will be considered inactive\n          inactivityTimeout = this.setTimeout(function () {\n            // Protect against the case where the inactivityTimeout can trigger just\n            // before the next user activity is picked up by the activityCheck loop\n            // causing a flicker\n            if (!this.userActivity_) {\n                this.userActive(false);\n            }\n          }, timeout);\n        }\n      }\n    }, 250);\n  }\n\n  /**\n   * Gets or sets the current playback rate.  A playback rate of\n   * 1.0 represents normal speed and 0.5 would indicate half-speed\n   * playback, for instance.\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n   *\n   * @param  {Number} rate    New playback rate to set.\n   * @return {Number}         Returns the new playback rate when setting\n   * @return {Number}         Returns the current playback rate when getting\n   * @method playbackRate\n   */\n  playbackRate(rate) {\n    if (rate !== undefined) {\n      this.techCall_('setPlaybackRate', rate);\n      return this;\n    }\n\n    if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n      return this.techGet_('playbackRate');\n    } else {\n      return 1.0;\n    }\n  }\n\n  /**\n   * Gets or sets the audio flag\n   *\n   * @param  {Boolean} bool    True signals that this is an audio player.\n   * @return {Boolean}         Returns true if player is audio, false if not when getting\n   * @return {Player}      Returns the player if setting\n   * @private\n   * @method isAudio\n   */\n  isAudio(bool) {\n    if (bool !== undefined) {\n      this.isAudio_ = !!bool;\n      return this;\n    }\n\n    return !!this.isAudio_;\n  }\n\n  /**\n   * Returns the current state of network activity for the element, from\n   * the codes in the list below.\n   * - NETWORK_EMPTY (numeric value 0)\n   *   The element has not yet been initialised. All attributes are in\n   *   their initial states.\n   * - NETWORK_IDLE (numeric value 1)\n   *   The element's resource selection algorithm is active and has\n   *   selected a resource, but it is not actually using the network at\n   *   this time.\n   * - NETWORK_LOADING (numeric value 2)\n   *   The user agent is actively trying to download data.\n   * - NETWORK_NO_SOURCE (numeric value 3)\n   *   The element's resource selection algorithm is active, but it has\n   *   not yet found a resource to use.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n   * @return {Number} the current network activity state\n   * @method networkState\n   */\n  networkState() {\n    return this.techGet_('networkState');\n  }\n\n  /**\n   * Returns a value that expresses the current state of the element\n   * with respect to rendering the current playback position, from the\n   * codes in the list below.\n   * - HAVE_NOTHING (numeric value 0)\n   *   No information regarding the media resource is available.\n   * - HAVE_METADATA (numeric value 1)\n   *   Enough of the resource has been obtained that the duration of the\n   *   resource is available.\n   * - HAVE_CURRENT_DATA (numeric value 2)\n   *   Data for the immediate current playback position is available.\n   * - HAVE_FUTURE_DATA (numeric value 3)\n   *   Data for the immediate current playback position is available, as\n   *   well as enough data for the user agent to advance the current\n   *   playback position in the direction of playback.\n   * - HAVE_ENOUGH_DATA (numeric value 4)\n   *   The user agent estimates that enough data is available for\n   *   playback to proceed uninterrupted.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n   * @return {Number} the current playback rendering state\n   * @method readyState\n   */\n  readyState() {\n    return this.techGet_('readyState');\n  }\n\n  /**\n   * Get a video track list\n   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n   *\n   * @return {VideoTrackList} thes current video track list\n   * @method videoTracks\n   */\n  videoTracks() {\n    // if we have not yet loadTech_, we create videoTracks_\n    // these will be passed to the tech during loading\n    if (!this.tech_) {\n      this.videoTracks_ = this.videoTracks_ || new VideoTrackList();\n      return this.videoTracks_;\n    }\n\n    return this.tech_.videoTracks();\n  }\n\n  /**\n   * Get an audio track list\n   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n   *\n   * @return {AudioTrackList} thes current audio track list\n   * @method audioTracks\n   */\n  audioTracks() {\n    // if we have not yet loadTech_, we create videoTracks_\n    // these will be passed to the tech during loading\n    if (!this.tech_) {\n      this.audioTracks_ = this.audioTracks_ || new AudioTrackList();\n      return this.audioTracks_;\n    }\n\n    return this.tech_.audioTracks();\n  }\n\n  /*\n    * Text tracks are tracks of timed text events.\n    * Captions - text displayed over the video for the hearing impaired\n    * Subtitles - text displayed over the video for those who don't understand language in the video\n    * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n    * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n    */\n\n  /**\n   * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n   *\n   * @return {Array}           Array of track objects\n   * @method textTracks\n   */\n  textTracks() {\n    // cannot use techGet_ directly because it checks to see whether the tech is ready.\n    // Flash is unlikely to be ready in time but textTracks should still work.\n    return this.tech_ && this.tech_['textTracks']();\n  }\n\n  /**\n   * Get an array of remote text tracks\n   *\n   * @return {Array}\n   * @method remoteTextTracks\n   */\n  remoteTextTracks() {\n    return this.tech_ && this.tech_['remoteTextTracks']();\n  }\n\n  /**\n   * Get an array of remote html track elements\n   *\n   * @return {HTMLTrackElement[]}\n   * @method remoteTextTrackEls\n   */\n  remoteTextTrackEls() {\n    return this.tech_ && this.tech_['remoteTextTrackEls']();\n  }\n\n  /**\n   * Add a text track\n   * In addition to the W3C settings we allow adding additional info through options.\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n   *\n   * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n   * @param {String=} label       Optional label\n   * @param {String=} language    Optional language\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n  }\n\n  /**\n   * Add a remote text track\n   *\n   * @param {Object} options    Options for remote text track\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options) {\n    return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n  }\n\n  /**\n   * Remove a remote text track\n   *\n   * @param {Object} track    Remote text track to remove\n   * @method removeRemoteTextTrack\n   */\n  // destructure the input into an object with a track argument, defaulting to arguments[0]\n  // default the whole argument to an empty object if nothing was passed in\n  removeRemoteTextTrack({track = arguments[0]} = {}) { // jshint ignore:line\n    this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n  }\n\n  /**\n   * Get video width\n   *\n   * @return {Number} Video width\n   * @method videoWidth\n   */\n  videoWidth() {\n    return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n  }\n\n  /**\n   * Get video height\n   *\n   * @return {Number} Video height\n   * @method videoHeight\n   */\n  videoHeight() {\n    return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n  }\n\n  // Methods to add support for\n  // initialTime: function(){ return this.techCall_('initialTime'); },\n  // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n  // played: function(){ return this.techCall_('played'); },\n  // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n  // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n  /**\n   * The player's language code\n   * NOTE: The language should be set in the player options if you want the\n   * the controls to be built with a specific language. Changing the lanugage\n   * later will not update controls text.\n   *\n   * @param {String} code  The locale string\n   * @return {String}      The locale string when getting\n   * @return {Player}      self when setting\n   * @method language\n   */\n  language(code) {\n    if (code === undefined) {\n      return this.language_;\n    }\n\n    this.language_ = (''+code).toLowerCase();\n    return this;\n  }\n\n  /**\n   * Get the player's language dictionary\n   * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n   * Languages specified directly in the player options have precedence\n   *\n   * @return {Array} Array of languages\n   * @method languages\n   */\n  languages() {\n    return  mergeOptions(Player.prototype.options_.languages, this.languages_);\n  }\n\n  /**\n   * Converts track info to JSON\n   *\n   * @return {Object} JSON object of options\n   * @method toJSON\n   */\n  toJSON() {\n    let options = mergeOptions(this.options_);\n    let tracks = options.tracks;\n\n    options.tracks = [];\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      // deep merge tracks and null out player so no circular references\n      track = mergeOptions(track);\n      track.player = undefined;\n      options.tracks[i] = track;\n    }\n\n    return options;\n  }\n\n  /**\n   * Creates a simple modal dialog (an instance of the `ModalDialog`\n   * component) that immediately overlays the player with arbitrary\n   * content and removes itself when closed.\n   *\n   * @param {String|Function|Element|Array|Null} content\n   *        Same as `ModalDialog#content`'s param of the same name.\n   *\n   *        The most straight-forward usage is to provide a string or DOM\n   *        element.\n   *\n   * @param {Object} [options]\n   *        Extra options which will be passed on to the `ModalDialog`.\n   *\n   * @return {ModalDialog}\n   */\n  createModal(content, options) {\n    let player = this;\n\n    options = options || {};\n    options.content = content || '';\n\n    let modal = new ModalDialog(player, options);\n\n    player.addChild(modal);\n    modal.on('dispose', function() {\n      player.removeChild(modal);\n    });\n\n    return modal.open();\n  }\n\n  /**\n   * Gets tag settings\n   *\n   * @param {Element} tag The player tag\n   * @return {Array} An array of sources and track objects\n   * @static\n   * @method getTagSettings\n   */\n  static getTagSettings(tag) {\n    let baseOptions = {\n      'sources': [],\n      'tracks': []\n    };\n\n    const tagOptions = Dom.getElAttributes(tag);\n    const dataSetup = tagOptions['data-setup'];\n\n    // Check if data-setup attr exists.\n    if (dataSetup !== null){\n      // Parse options JSON\n      // If empty string, make it a parsable json object.\n      const [err, data] = safeParseTuple(dataSetup || '{}');\n      if (err) {\n        log.error(err);\n      }\n      assign(tagOptions, data);\n    }\n\n    assign(baseOptions, tagOptions);\n\n    // Get tag children settings\n    if (tag.hasChildNodes()) {\n      const children = tag.childNodes;\n\n      for (let i=0, j=children.length; i<j; i++) {\n        const child = children[i];\n        // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n        const childName = child.nodeName.toLowerCase();\n        if (childName === 'source') {\n          baseOptions.sources.push(Dom.getElAttributes(child));\n        } else if (childName === 'track') {\n          baseOptions.tracks.push(Dom.getElAttributes(child));\n        }\n      }\n    }\n\n    return baseOptions;\n  }\n\n}\n\n/*\n * Global player list\n *\n * @type {Object}\n */\nPlayer.players = {};\n\nlet navigator = window.navigator;\n/*\n * Player instance options, surfaced using options\n * options = Player.prototype.options_\n * Make changes in options, not here.\n *\n * @type {Object}\n * @private\n */\nPlayer.prototype.options_ = {\n  // Default order of fallback technology\n  techOrder: ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  html5: {},\n  flash: {},\n\n  // defaultVolume: 0.85,\n  defaultVolume: 0.00, // The freakin seaguls are driving me crazy!\n\n  // default inactivity timeout\n  inactivityTimeout: 2000,\n\n  // default playback rates\n  playbackRates: [],\n  // Add playback rate selection by adding rates\n  // 'playbackRates': [0.5, 1, 1.5, 2],\n\n  // Included control sets\n  children: [\n    'mediaLoader',\n    'posterImage',\n    'textTrackDisplay',\n    'loadingSpinner',\n    'bigPlayButton',\n    'controlBar',\n    'errorDisplay',\n    'textTrackSettings'\n  ],\n\n  language: document.getElementsByTagName('html')[0].getAttribute('lang') || navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en',\n\n  // locales and their language translations\n  languages: {},\n\n  // Default message to show when a video cannot be played.\n  notSupportedMessage: 'No compatible source was found for this media.'\n};\n\n/**\n * Fired when the player has initial duration and dimension information\n *\n * @event loadedmetadata\n */\nPlayer.prototype.handleLoadedMetaData_;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n *\n * @event loadeddata\n */\nPlayer.prototype.handleLoadedData_;\n\n/**\n * Fired when the user is active, e.g. moves the mouse over the player\n *\n * @event useractive\n */\nPlayer.prototype.handleUserActive_;\n\n/**\n * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction\n *\n * @event userinactive\n */\nPlayer.prototype.handleUserInactive_;\n\n/**\n * Fired when the current playback position has changed *\n * During playback this is fired every 15-250 milliseconds, depending on the\n * playback technology in use.\n *\n * @event timeupdate\n */\nPlayer.prototype.handleTimeUpdate_;\n\n/**\n * Fired when video playback ends\n *\n * @event ended\n */\nPlayer.prototype.handleTechEnded_;\n\n/**\n * Fired when the volume changes\n *\n * @event volumechange\n */\nPlayer.prototype.handleVolumeChange_;\n\n/**\n * Fired when an error occurs\n *\n * @event error\n */\nPlayer.prototype.handleError_;\n\nPlayer.prototype.flexNotSupported_ = function() {\n  var elem = document.createElement('i');\n\n  // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more\n  // common flex features that we can rely on when checking for flex support.\n  return !('flexBasis' in elem.style ||\n          'webkitFlexBasis' in elem.style ||\n          'mozFlexBasis' in elem.style ||\n          'msFlexBasis' in elem.style ||\n          'msFlexOrder' in elem.style /* IE10-specific (2012 flex spec)  */);\n};\n\nComponent.registerComponent('Player', Player);\nexport default Player;\n","/**\n * @file plugins.js\n */\nimport Player from './player.js';\n\n/**\n * The method for registering a video.js plugin\n *\n * @param  {String} name The name of the plugin\n * @param  {Function} init The function that is run when the player inits\n * @method plugin\n */\nvar plugin = function(name, init){\n  Player.prototype[name] = init;\n};\n\nexport default plugin;\n","/**\n * @file popup-button.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport Popup from './popup.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * A button class with a popup control\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends ClickableComponent\n * @class PopupButton\n */\nclass PopupButton extends ClickableComponent {\n\n  constructor(player, options={}){\n    super(player, options);\n\n    this.update();\n  }\n\n  /**\n   * Update popup\n   *\n   * @method update\n   */\n  update() {\n    let popup = this.createPopup();\n\n    if (this.popup) {\n      this.removeChild(this.popup);\n    }\n\n    this.popup = popup;\n    this.addChild(popup);\n\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    } else if (this.items && this.items.length > 1) {\n      this.show();\n    }\n  }\n\n  /**\n   * Create popup - Override with specific functionality for component\n   *\n   * @return {Popup} The constructed popup\n   * @method createPopup\n   */\n  createPopup() {}\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    var menuButtonClass = 'vjs-menu-button';\n\n    // If the inline option is passed, we want to use different styles altogether.\n    if (this.options_.inline === true) {\n      menuButtonClass += '-inline';\n    } else {\n      menuButtonClass += '-popup';\n    }\n\n    return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n  }\n\n}\n\nComponent.registerComponent('PopupButton', PopupButton);\nexport default PopupButton;\n","/**\n * @file popup.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Popup component is used to build pop up controls.\n *\n * @extends Component\n * @class Popup\n */\nclass Popup extends Component {\n\n  /**\n   * Add a popup item to the popup\n   *\n   * @param {Object|String} component Component or component type to add\n   * @method addItem\n   */\n  addItem(component) {\n    this.addChild(component);\n    component.on('click', Fn.bind(this, function(){\n      this.unlockShowing();\n    }));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let contentElType = this.options_.contentElType || 'ul';\n    this.contentEl_ = Dom.createEl(contentElType, {\n      className: 'vjs-menu-content'\n    });\n    var el = super.createEl('div', {\n      append: this.contentEl_,\n      className: 'vjs-menu'\n    });\n    el.appendChild(this.contentEl_);\n\n    // Prevent clicks from bubbling up. Needed for Popup Buttons,\n    // where a click on the parent is significant\n    Events.on(el, 'click', function(event){\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    });\n\n    return el;\n  }\n}\n\nComponent.registerComponent('Popup', Popup);\nexport default Popup;\n","/**\n * @file poster-image.js\n */\nimport ClickableComponent from './clickable-component.js';\nimport Component from './component.js';\nimport * as Fn from './utils/fn.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\n\n/**\n * The component that handles showing the poster image.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PosterImage\n */\nclass PosterImage extends ClickableComponent {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.update();\n    player.on('posterchange', Fn.bind(this, this.update));\n  }\n\n  /**\n   * Clean up the poster image\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.player().off('posterchange', this.update);\n    super.dispose();\n  }\n\n  /**\n   * Create the poster's image element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = Dom.createEl('div', {\n      className: 'vjs-poster',\n\n      // Don't want poster to be tabbable.\n      tabIndex: -1\n    });\n\n    // To ensure the poster image resizes while maintaining its original aspect\n    // ratio, use a div with `background-size` when available. For browsers that\n    // do not support `background-size` (e.g. IE8), fall back on using a regular\n    // img element.\n    if (!browser.BACKGROUND_SIZE_SUPPORTED) {\n      this.fallbackImg_ = Dom.createEl('img');\n      el.appendChild(this.fallbackImg_);\n    }\n\n    return el;\n  }\n\n  /**\n   * Event handler for updates to the player's poster source\n   *\n   * @method update\n   */\n  update() {\n    let url = this.player().poster();\n\n    this.setSrc(url);\n\n    // If there's no poster source we should display:none on this component\n    // so it's not still clickable or right-clickable\n    if (url) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Set the poster source depending on the display method\n   *\n   * @param {String} url The URL to the poster source\n   * @method setSrc\n   */\n  setSrc(url) {\n    if (this.fallbackImg_) {\n      this.fallbackImg_.src = url;\n    } else {\n      let backgroundImage = '';\n      // Any falsey values should stay as an empty string, otherwise\n      // this will throw an extra error\n      if (url) {\n        backgroundImage = `url(\"${url}\")`;\n      }\n\n      this.el_.style.backgroundImage = backgroundImage;\n    }\n  }\n\n  /**\n   * Event handler for clicks on the poster image\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    // We don't want a click to trigger playback when controls are disabled\n    // but CSS should be hiding the poster to prevent that from happening\n    if (this.player_.paused()) {\n      this.player_.play();\n    } else {\n      this.player_.pause();\n    }\n  }\n\n}\n\nComponent.registerComponent('PosterImage', PosterImage);\nexport default PosterImage;\n","/**\n * @file setup.js\n *\n * Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\nimport * as Events from './utils/events.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nlet _windowLoaded = false;\nlet videojs;\n\n\n// Automatically set up any tags that have a data-setup attribute\nvar autoSetup = function(){\n  // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*\n  // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));\n  // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));\n  // var mediaEls = vids.concat(audios);\n\n  // Because IE8 doesn't support calling slice on a node list, we need to loop through each list of elements\n  // to build up a new, combined list of elements.\n  var vids = document.getElementsByTagName('video');\n  var audios = document.getElementsByTagName('audio');\n  var mediaEls = [];\n  if (vids && vids.length > 0) {\n    for(let i=0, e=vids.length; i<e; i++) {\n      mediaEls.push(vids[i]);\n    }\n  }\n  if (audios && audios.length > 0) {\n    for(let i=0, e=audios.length; i<e; i++) {\n      mediaEls.push(audios[i]);\n    }\n  }\n\n  // Check if any media elements exist\n  if (mediaEls && mediaEls.length > 0) {\n\n    for (let i=0, e=mediaEls.length; i<e; i++) {\n      let mediaEl = mediaEls[i];\n\n      // Check if element exists, has getAttribute func.\n      // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n      if (mediaEl && mediaEl.getAttribute) {\n\n        // Make sure this player hasn't already been set up.\n        if (mediaEl['player'] === undefined) {\n          let options = mediaEl.getAttribute('data-setup');\n\n          // Check if data-setup attr exists.\n          // We only auto-setup if they've added the data-setup attr.\n          if (options !== null) {\n            // Create new video.js instance.\n            let player = videojs(mediaEl);\n          }\n        }\n\n      // If getAttribute isn't defined, we need to wait for the DOM.\n      } else {\n        autoSetupTimeout(1);\n        break;\n      }\n    }\n\n  // No videos were found, so keep looping unless page is finished loading.\n  } else if (!_windowLoaded) {\n    autoSetupTimeout(1);\n  }\n};\n\n// Pause to let the DOM keep processing\nvar autoSetupTimeout = function(wait, vjs){\n  if (vjs) {\n    videojs = vjs;\n  }\n\n  setTimeout(autoSetup, wait);\n};\n\nif (document.readyState === 'complete') {\n  _windowLoaded = true;\n} else {\n  Events.one(window, 'load', function(){\n    _windowLoaded = true;\n  });\n}\n\nvar hasLoaded = function() {\n  return _windowLoaded;\n};\n\nexport { autoSetup, autoSetupTimeout, hasLoaded };\n","/**\n * @file slider.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport assign from 'object.assign';\n\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class Slider\n */\nclass Slider extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    // Set property names to bar to match with the child Slider class is looking for\n    this.bar = this.getChild(this.options_.barName);\n\n    // Set a horizontal or vertical class on the slider depending on the slider type\n    this.vertical(!!this.options_.vertical);\n\n    this.on('mousedown', this.handleMouseDown);\n    this.on('touchstart', this.handleMouseDown);\n    this.on('focus', this.handleFocus);\n    this.on('blur', this.handleBlur);\n    this.on('click', this.handleClick);\n\n    this.on(player, 'controlsvisible', this.update);\n    this.on(player, this.playerEvent, this.update);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String} type Type of element to create\n   * @param {Object=} props List of properties in Object form\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(type, props={}, attributes={}) {\n    // Add the slider element class to all sub classes\n    props.className = props.className + ' vjs-slider';\n    props = assign({\n      tabIndex: 0\n    }, props);\n\n    attributes = assign({\n      'role': 'slider',\n      'aria-valuenow': 0,\n      'aria-valuemin': 0,\n      'aria-valuemax': 100,\n      tabIndex: 0\n    }, attributes);\n\n    return super.createEl(type, props, attributes);\n  }\n\n  /**\n   * Handle mouse down on slider\n   *\n   * @param {Object} event Mouse down event object\n   * @method handleMouseDown\n   */\n  handleMouseDown(event) {\n    let doc = this.bar.el_.ownerDocument;\n\n    event.preventDefault();\n    Dom.blockTextSelection();\n\n    this.addClass('vjs-sliding');\n    this.trigger('slideractive');\n\n    this.on(doc, 'mousemove', this.handleMouseMove);\n    this.on(doc, 'mouseup', this.handleMouseUp);\n    this.on(doc, 'touchmove', this.handleMouseMove);\n    this.on(doc, 'touchend', this.handleMouseUp);\n\n    this.handleMouseMove(event);\n  }\n\n  /**\n   * To be overridden by a subclass\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove() {}\n\n  /**\n   * Handle mouse up on Slider\n   *\n   * @method handleMouseUp\n   */\n  handleMouseUp() {\n    let doc = this.bar.el_.ownerDocument;\n\n    Dom.unblockTextSelection();\n\n    this.removeClass('vjs-sliding');\n    this.trigger('sliderinactive');\n\n    this.off(doc, 'mousemove', this.handleMouseMove);\n    this.off(doc, 'mouseup', this.handleMouseUp);\n    this.off(doc, 'touchmove', this.handleMouseMove);\n    this.off(doc, 'touchend', this.handleMouseUp);\n\n    this.update();\n  }\n\n  /**\n   * Update slider\n   *\n   * @method update\n   */\n  update() {\n    // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n    // execution stack. The player is destroyed before then update will cause an error\n    if (!this.el_) return;\n\n    // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n    // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n    // var progress =  (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n    let progress = this.getPercent();\n    let bar = this.bar;\n\n    // If there's no bar...\n    if (!bar) return;\n\n    // Protect against no duration and other division issues\n    if (typeof progress !== 'number' ||\n        progress !== progress ||\n        progress < 0 ||\n        progress === Infinity) {\n          progress = 0;\n    }\n\n    // Convert to a percentage for setting\n    let percentage = (progress * 100).toFixed(2) + '%';\n\n    // Set the new bar width or height\n    if (this.vertical()) {\n      bar.el().style.height = percentage;\n    } else {\n      bar.el().style.width = percentage;\n    }\n  }\n\n  /**\n   * Calculate distance for slider\n   *\n   * @param {Object} event Event object\n   * @method calculateDistance\n   */\n  calculateDistance(event){\n    let position = Dom.getPointerPosition(this.el_, event);\n    if (this.vertical()) {\n      return position.y;\n    }\n    return position.x;\n  }\n\n  /**\n   * Handle on focus for slider\n   *\n   * @method handleFocus\n   */\n  handleFocus() {\n    this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Handle key press for slider\n   *\n   * @param {Object} event Event object\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    if (event.which === 37 || event.which === 40) { // Left and Down Arrows\n      event.preventDefault();\n      this.stepBack();\n    } else if (event.which === 38 || event.which === 39) { // Up and Right Arrows\n      event.preventDefault();\n      this.stepForward();\n    }\n  }\n\n  /**\n   * Handle on blur for slider\n   *\n   * @method handleBlur\n   */\n  handleBlur() {\n    this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Listener for click events on slider, used to prevent clicks\n   *   from bubbling up to parent elements like button menus.\n   *\n   * @param {Object} event Event object\n   * @method handleClick\n   */\n  handleClick(event) {\n    event.stopImmediatePropagation();\n    event.preventDefault();\n  }\n\n  /**\n   * Get/set if slider is horizontal for vertical\n   *\n   * @param {Boolean} bool True if slider is vertical, false is horizontal\n   * @return {Boolean} True if slider is vertical, false is horizontal\n   * @method vertical\n   */\n  vertical(bool) {\n    if (bool === undefined) {\n      return this.vertical_ || false;\n    }\n\n    this.vertical_ = !!bool;\n\n    if (this.vertical_) {\n      this.addClass('vjs-slider-vertical');\n    } else {\n      this.addClass('vjs-slider-horizontal');\n    }\n\n    return this;\n  }\n\n}\n\nComponent.registerComponent('Slider', Slider);\nexport default Slider;\n","/**\n * @file flash-rtmp.js\n */\nfunction FlashRtmpDecorator(Flash) {\n  Flash.streamingFormats = {\n    'rtmp/mp4': 'MP4',\n    'rtmp/flv': 'FLV'\n  };\n\n  Flash.streamFromParts = function(connection, stream) {\n    return connection + '&' + stream;\n  };\n\n  Flash.streamToParts = function(src) {\n    let parts = {\n      connection: '',\n      stream: ''\n    };\n\n    if (!src) return parts;\n\n    // Look for the normal URL separator we expect, '&'.\n    // If found, we split the URL into two pieces around the\n    // first '&'.\n    let connEnd = src.search(/&(?!\\w+=)/);\n    let streamBegin;\n    if (connEnd !== -1) {\n      streamBegin = connEnd + 1;\n    }\n    else {\n      // If there's not a '&', we use the last '/' as the delimiter.\n      connEnd = streamBegin = src.lastIndexOf('/') + 1;\n      if (connEnd === 0) {\n        // really, there's not a '/'?\n        connEnd = streamBegin = src.length;\n      }\n    }\n    parts.connection = src.substring(0, connEnd);\n    parts.stream = src.substring(streamBegin, src.length);\n\n    return parts;\n  };\n\n  Flash.isStreamingType = function(srcType) {\n    return srcType in Flash.streamingFormats;\n  };\n\n  // RTMP has four variations, any string starting\n  // with one of these protocols should be valid\n  Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\n  Flash.isStreamingSrc = function(src) {\n    return Flash.RTMP_RE.test(src);\n  };\n\n  /**\n   * A source handler for RTMP urls\n   * @type {Object}\n   */\n  Flash.rtmpSourceHandler = {};\n\n  /**\n   * Check if Flash can play the given videotype\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  Flash.rtmpSourceHandler.canPlayType = function(type){\n    if (Flash.isStreamingType(type)) {\n      return 'maybe';\n    }\n\n    return '';\n  };\n\n  /**\n   * Check if Flash can handle the source natively\n   * @param  {Object} source  The source object\n   * @param  {Object} options The options passed to the tech\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  Flash.rtmpSourceHandler.canHandleSource = function(source, options){\n    let can = Flash.rtmpSourceHandler.canPlayType(source.type);\n\n    if (can) {\n      return can;\n    }\n\n    if (Flash.isStreamingSrc(source.src)) {\n      return 'maybe';\n    }\n\n    return '';\n  };\n\n  /**\n   * Pass the source to the flash object\n   * Adaptive source handlers will have more complicated workflows before passing\n   * video data to the video element\n   * @param  {Object} source   The source object\n   * @param  {Flash}  tech     The instance of the Flash tech\n   * @param  {Object} options  The options to pass to the source\n   */\n  Flash.rtmpSourceHandler.handleSource = function(source, tech, options){\n    let srcParts = Flash.streamToParts(source.src);\n\n    tech['setRtmpConnection'](srcParts.connection);\n    tech['setRtmpStream'](srcParts.stream);\n  };\n\n  // Register the native source handler\n  Flash.registerSourceHandler(Flash.rtmpSourceHandler);\n\n  return Flash;\n}\n\nexport default FlashRtmpDecorator;\n","/**\n * @file flash.js\n * VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\nimport Tech from './tech';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport FlashRtmpDecorator from './flash-rtmp';\nimport Component from '../component';\nimport window from 'global/window';\nimport assign from 'object.assign';\n\nlet navigator = window.navigator;\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Flash\n */\nclass Flash extends Tech {\n\n  constructor(options, ready){\n    super(options, ready);\n\n    // Set the source when ready\n    if (options.source) {\n      this.ready(function(){\n        this.setSource(options.source);\n      }, true);\n    }\n\n    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n    // This allows resetting the playhead when we catch the reload\n    if (options.startTime) {\n      this.ready(function(){\n        this.load();\n        this.play();\n        this.currentTime(options.startTime);\n      }, true);\n    }\n\n    // Add global window functions that the swf expects\n    // A 4.x workflow we weren't able to solve for in 5.0\n    // because of the need to hard code these functions\n    // into the swf for security reasons\n    window.videojs = window.videojs || {};\n    window.videojs.Flash = window.videojs.Flash || {};\n    window.videojs.Flash.onReady = Flash.onReady;\n    window.videojs.Flash.onEvent = Flash.onEvent;\n    window.videojs.Flash.onError = Flash.onError;\n\n    this.on('seeked', function() {\n      this.lastSeekTarget_ = undefined;\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let options = this.options_;\n\n    // If video.js is hosted locally you should also set the location\n    // for the hosted swf, which should be relative to the page (not video.js)\n    // Otherwise this adds a CDN url.\n    // The CDN also auto-adds a swf URL for that specific version.\n    if (!options.swf) {\n      options.swf = '//vjs.zencdn.net/swf/__SWF_VERSION__/video-js.swf';\n    }\n\n    // Generate ID for swf object\n    let objId = options.techId;\n\n    // Merge default flashvars with ones passed in to init\n    let flashVars = assign({\n\n      // SWF Callback Functions\n      'readyFunction': 'videojs.Flash.onReady',\n      'eventProxyFunction': 'videojs.Flash.onEvent',\n      'errorEventProxyFunction': 'videojs.Flash.onError',\n\n      // Player Settings\n      'autoplay': options.autoplay,\n      'preload': options.preload,\n      'loop': options.loop,\n      'muted': options.muted\n\n    }, options.flashVars);\n\n    // Merge default parames with ones passed in\n    let params = assign({\n      'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n      'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n    }, options.params);\n\n    // Merge default attributes with ones passed in\n    let attributes = assign({\n      'id': objId,\n      'name': objId, // Both ID and Name needed or swf to identify itself\n      'class': 'vjs-tech'\n    }, options.attributes);\n\n    this.el_ = Flash.embed(options.swf, flashVars, params, attributes);\n    this.el_.tech = this;\n\n    return this.el_;\n  }\n\n  /**\n   * Play for flash tech\n   *\n   * @method play\n   */\n  play() {\n    if (this.ended()) {\n      this.setCurrentTime(0);\n    }\n    this.el_.vjs_play();\n  }\n\n  /**\n   * Pause for flash tech\n   *\n   * @method pause\n   */\n  pause() {\n    this.el_.vjs_pause();\n  }\n\n  /**\n   * Get/set video\n   *\n   * @param {Object=} src Source object\n   * @return {Object}\n   * @method src\n   */\n  src(src) {\n    if (src === undefined) {\n      return this.currentSrc();\n    }\n\n    // Setting src through `src` not `setSrc` will be deprecated\n    return this.setSrc(src);\n  }\n\n  /**\n   * Set video\n   *\n   * @param {Object=} src Source object\n   * @deprecated\n   * @method setSrc\n   */\n  setSrc(src) {\n    // Make sure source URL is absolute.\n    src = Url.getAbsoluteURL(src);\n    this.el_.vjs_src(src);\n\n    // Currently the SWF doesn't autoplay if you load a source later.\n    // e.g. Load player w/ no source, wait 2s, set src.\n    if (this.autoplay()) {\n      var tech = this;\n      this.setTimeout(function(){ tech.play(); }, 0);\n    }\n  }\n\n  /**\n   * Returns true if the tech is currently seeking.\n   * @return {boolean} true if seeking\n   */\n  seeking() {\n    return this.lastSeekTarget_ !== undefined;\n  }\n\n  /**\n   * Set current time\n   *\n   * @param {Number} time Current time of video\n   * @method setCurrentTime\n   */\n  setCurrentTime(time) {\n    let seekable = this.seekable();\n    if (seekable.length) {\n      // clamp to the current seekable range\n      time = time > seekable.start(0) ? time : seekable.start(0);\n      time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n      this.lastSeekTarget_ = time;\n      this.trigger('seeking');\n      this.el_.vjs_setProperty('currentTime', time);\n      super.setCurrentTime();\n    }\n  }\n\n  /**\n   * Get current time\n   *\n   * @param {Number=} time Current time of video\n   * @return {Number} Current time\n   * @method currentTime\n   */\n  currentTime(time) {\n    // when seeking make the reported time keep up with the requested time\n    // by reading the time we're seeking to\n    if (this.seeking()) {\n      return this.lastSeekTarget_ || 0;\n    }\n    return this.el_.vjs_getProperty('currentTime');\n  }\n\n  /**\n   * Get current source\n   *\n   * @method currentSrc\n   */\n  currentSrc() {\n    if (this.currentSource_) {\n      return this.currentSource_.src;\n    } else {\n      return this.el_.vjs_getProperty('currentSrc');\n    }\n  }\n\n  /**\n   * Load media into player\n   *\n   * @method load\n   */\n  load() {\n    this.el_.vjs_load();\n  }\n\n  /**\n   * Get poster\n   *\n   * @method poster\n   */\n  poster() {\n    this.el_.vjs_getProperty('poster');\n  }\n\n  /**\n   * Poster images are not handled by the Flash tech so make this a no-op\n   *\n   * @method setPoster\n   */\n  setPoster() {}\n\n  /**\n   * Determine if can seek in media\n   *\n   * @return {TimeRangeObject}\n   * @method seekable\n   */\n  seekable() {\n    const duration = this.duration();\n    if (duration === 0) {\n      return createTimeRange();\n    }\n    return createTimeRange(0, duration);\n  }\n\n  /**\n   * Get buffered time range\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() {\n    let ranges = this.el_.vjs_getProperty('buffered');\n    if (ranges.length === 0) {\n      return createTimeRange();\n    }\n    return createTimeRange(ranges[0][0], ranges[0][1]);\n  }\n\n  /**\n   * Get fullscreen support -\n   * Flash does not allow fullscreen through javascript\n   * so always returns false\n   *\n   * @return {Boolean} false\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    return false; // Flash does not allow fullscreen through javascript\n  }\n\n  /**\n   * Request to enter fullscreen\n   * Flash does not allow fullscreen through javascript\n   * so always returns false\n   *\n   * @return {Boolean} false\n   * @method enterFullScreen\n   */\n  enterFullScreen() {\n    return false;\n  }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n  _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n  _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n  _createGetter(_readWrite[i]);\n  _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n  _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n  return Flash.version()[0] >= 10;\n  // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param  {Object} source   The source object\n * @param  {Flash} tech  The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/**\n * Check if Flash can play the given videotype\n * @param  {String} type    The mimetype to check\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canPlayType = function(type){\n  if (type in Flash.formats) {\n    return 'maybe';\n  }\n\n  return '';\n};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param  {Object} source  The source object\n * @param  {Object} options The options passed to the tech\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source, options){\n  var type;\n\n  function guessMimeType(src) {\n    var ext = Url.getFileExtension(src);\n    if (ext) {\n      return `video/${ext}`;\n    }\n    return '';\n  }\n\n  if (!source.type) {\n    type = guessMimeType(source.src);\n  } else {\n    // Strip code information from the type because we don't get that specific\n    type = source.type.replace(/;.*/, '').toLowerCase();\n  }\n\n  return Flash.nativeSourceHandler.canPlayType(type);\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param  {Object} source   The source object\n * @param  {Flash}  tech     The instance of the Flash tech\n * @param  {Object} options  The options to pass to the source\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech, options){\n  tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n  'video/flv': 'FLV',\n  'video/x-flv': 'FLV',\n  'video/mp4': 'MP4',\n  'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n  let el = Dom.getEl(currSwf);\n  let tech = el && el.tech;\n\n  // if there is no el then the tech has been disposed\n  // and the tech element was removed from the player div\n  if (tech && tech.el()) {\n    // check that the flash object is really ready\n    Flash.checkReady(tech);\n  }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n  // stop worrying if the tech has been disposed\n  if (!tech.el()) {\n    return;\n  }\n\n  // check if API property exists\n  if (tech.el().vjs_getProperty) {\n    // tell tech it's ready\n    tech.triggerReady();\n  } else {\n    // wait longer\n    this.setTimeout(function(){\n      Flash['checkReady'](tech);\n    }, 50);\n  }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n  let tech = Dom.getEl(swfID).tech;\n  tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n  const tech = Dom.getEl(swfID).tech;\n\n  // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n  if (err === 'srcnotfound') {\n    return tech.error(4);\n  }\n\n  // trigger a custom error\n  tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n  let version = '0,0,0';\n\n  // IE\n  try {\n    version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n  // other browsers\n  } catch(e) {\n    try {\n      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n      }\n    } catch(err) {}\n  }\n  return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n  const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n  // Get element by embedding code and retrieving created element\n  const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n  return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n  const objTag = '<object type=\"application/x-shockwave-flash\" ';\n  let flashVarsString = '';\n  let paramsString = '';\n  let attrsString = '';\n\n  // Convert flash vars to string\n  if (flashVars) {\n    Object.getOwnPropertyNames(flashVars).forEach(function(key){\n      flashVarsString += `${key}=${flashVars[key]}&amp;`;\n    });\n  }\n\n  // Add swf, flashVars, and other default params\n  params = assign({\n    'movie': swf,\n    'flashvars': flashVarsString,\n    'allowScriptAccess': 'always', // Required to talk to swf\n    'allowNetworking': 'all' // All should be default, but having security issues.\n  }, params);\n\n  // Create param tags string\n  Object.getOwnPropertyNames(params).forEach(function(key){\n    paramsString += `<param name=\"${key}\" value=\"${params[key]}\" />`;\n  });\n\n  attributes = assign({\n    // Add swf to attributes (need both for IE and Others to work)\n    'data': swf,\n\n    // Default to 100% width/height\n    'width': '100%',\n    'height': '100%'\n\n  }, attributes);\n\n  // Create Attributes string\n  Object.getOwnPropertyNames(attributes).forEach(function(key){\n    attrsString += `${key}=\"${attributes[key]}\" `;\n  });\n\n  return `${objTag}${attrsString}>${paramsString}</object>`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nTech.registerTech('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport tsml from 'tsml';\nimport TextTrack from '../../../src/js/tracks/text-track.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n  constructor(options, ready){\n    super(options, ready);\n\n    const source = options.source;\n    let crossoriginTracks = false;\n\n    // Set the source if one is provided\n    // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n    // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n    // anyway so the error gets fired.\n    if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n      this.setSource(source);\n    } else {\n      this.handleLateInit_(this.el_);\n    }\n\n    if (this.el_.hasChildNodes()) {\n\n      let nodes = this.el_.childNodes;\n      let nodesLength = nodes.length;\n      let removeNodes = [];\n\n      while (nodesLength--) {\n        let node = nodes[nodesLength];\n        let nodeName = node.nodeName.toLowerCase();\n\n        if (nodeName === 'track') {\n          if (!this.featuresNativeTextTracks) {\n            // Empty video tag tracks so the built-in player doesn't use them also.\n            // This may not be fast enough to stop HTML5 browsers from reading the tags\n            // so we'll need to turn off any default tracks if we're manually doing\n            // captions and subtitles. videoElement.textTracks\n            removeNodes.push(node);\n          } else {\n            // store HTMLTrackElement and TextTrack to remote list\n            this.remoteTextTrackEls().addTrackElement_(node);\n            this.remoteTextTracks().addTrack_(node.track);\n            if (!crossoriginTracks &&\n                !this.el_.hasAttribute('crossorigin') &&\n                Url.isCrossOrigin(node.src)) {\n              crossoriginTracks = true;\n            }\n          }\n        }\n      }\n\n      for (let i=0; i<removeNodes.length; i++) {\n        this.el_.removeChild(removeNodes[i]);\n      }\n    }\n\n    let trackTypes = ['audio', 'video'];\n\n    // ProxyNativeTextTracks\n    trackTypes.forEach((type) => {\n      let capitalType = toTitleCase(type);\n\n      if (!this[`featuresNative${capitalType}Tracks`]) {\n        return;\n      }\n      let tl = this.el()[`${type}Tracks`];\n\n      if (tl && tl.addEventListener) {\n        tl.addEventListener('change', Fn.bind(this, this[`handle${capitalType}TrackChange_`]));\n        tl.addEventListener('addtrack', Fn.bind(this, this[`handle${capitalType}TrackAdd_`]));\n        tl.addEventListener('removetrack', Fn.bind(this, this[`handle${capitalType}TrackRemove_`]));\n      }\n    });\n\n    if (this.featuresNativeTextTracks) {\n      if (crossoriginTracks) {\n        log.warn(tsml`Text Tracks are being loaded from another origin but the crossorigin attribute isn't used. \n            This may prevent text tracks from loading.`);\n      }\n\n      this.handleTextTrackChange_ = Fn.bind(this, this.handleTextTrackChange);\n      this.handleTextTrackAdd_ = Fn.bind(this, this.handleTextTrackAdd);\n      this.handleTextTrackRemove_ = Fn.bind(this, this.handleTextTrackRemove);\n      this.proxyNativeTextTracks_();\n    }\n\n    // Determine if native controls should be used\n    // Our goal should be to get the custom controls on mobile solid everywhere\n    // so we can remove this all together. Right now this will block custom\n    // controls on touch enabled laptops like the Chrome Pixel\n    if (browser.TOUCH_ENABLED && options.nativeControlsForTouch === true ||\n        browser.IS_IPHONE ||\n        browser.IS_NATIVE_ANDROID) {\n      this.setControls(true);\n    }\n\n    this.triggerReady();\n  }\n\n  /**\n   * Dispose of html5 media element\n   *\n   * @method dispose\n   */\n  dispose() {\n    // Un-ProxyNativeTracks\n    ['audio', 'video', 'text'].forEach((type) => {\n      let capitalType = toTitleCase(type);\n      let tl = this.el_[`${type}Tracks`];\n\n      if (tl && tl.removeEventListener) {\n        tl.removeEventListener('change', this[`handle${capitalType}TrackChange_`]);\n        tl.removeEventListener('addtrack', this[`handle${capitalType}TrackAdd_`]);\n        tl.removeEventListener('removetrack', this[`handle${capitalType}TrackRemove_`]);\n      }\n    });\n\n    Html5.disposeMediaElement(this.el_);\n    // tech will handle clearing of the emulated track list\n    super.dispose();\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = this.options_.tag;\n\n    // Check if this browser supports moving the element into the box.\n    // On the iPhone video will break if you move the element,\n    // So we have to create a brand new element.\n    if (!el || this['movingMediaElementInDOM'] === false) {\n\n      // If the original tag is still there, clone and remove it.\n      if (el) {\n        const clone = el.cloneNode(true);\n        el.parentNode.insertBefore(clone, el);\n        Html5.disposeMediaElement(el);\n        el = clone;\n      } else {\n        el = document.createElement('video');\n\n        // determine if native controls should be used\n        let tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag);\n        let attributes = mergeOptions({}, tagAttributes);\n        if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) {\n          delete attributes.controls;\n        }\n\n        Dom.setElAttributes(el,\n          assign(attributes, {\n            id: this.options_.techId,\n            class: 'vjs-tech'\n          })\n        );\n      }\n    }\n\n    // Update specific tag settings, in case they were overridden\n    let settingsAttrs = ['autoplay','preload','loop','muted'];\n    for (let i = settingsAttrs.length - 1; i >= 0; i--) {\n      const attr = settingsAttrs[i];\n      let overwriteAttrs = {};\n      if (typeof this.options_[attr] !== 'undefined') {\n        overwriteAttrs[attr] = this.options_[attr];\n      }\n      Dom.setElAttributes(el, overwriteAttrs);\n    }\n\n    return el;\n    // jenniisawesome = true;\n  }\n\n  // If we're loading the playback object after it has started loading\n  // or playing the video (often with autoplay on) then the loadstart event\n  // has already fired and we need to fire it manually because many things\n  // rely on it.\n  handleLateInit_(el) {\n    if (el.networkState === 0 || el.networkState === 3) {\n      // The video element hasn't started loading the source yet\n      // or didn't find a source\n      return;\n    }\n\n    if (el.readyState === 0) {\n      // NetworkState is set synchronously BUT loadstart is fired at the\n      // end of the current stack, usually before setInterval(fn, 0).\n      // So at this point we know loadstart may have already fired or is\n      // about to fire, and either way the player hasn't seen it yet.\n      // We don't want to fire loadstart prematurely here and cause a\n      // double loadstart so we'll wait and see if it happens between now\n      // and the next loop, and fire it if not.\n      // HOWEVER, we also want to make sure it fires before loadedmetadata\n      // which could also happen between now and the next loop, so we'll\n      // watch for that also.\n      let loadstartFired = false;\n      let setLoadstartFired = function() {\n        loadstartFired = true;\n      };\n      this.on('loadstart', setLoadstartFired);\n\n      let triggerLoadstart = function() {\n        // We did miss the original loadstart. Make sure the player\n        // sees loadstart before loadedmetadata\n        if (!loadstartFired) {\n          this.trigger('loadstart');\n        }\n      };\n      this.on('loadedmetadata', triggerLoadstart);\n\n      this.ready(function(){\n        this.off('loadstart', setLoadstartFired);\n        this.off('loadedmetadata', triggerLoadstart);\n\n        if (!loadstartFired) {\n          // We did miss the original native loadstart. Fire it now.\n          this.trigger('loadstart');\n        }\n      });\n\n      return;\n    }\n\n    // From here on we know that loadstart already fired and we missed it.\n    // The other readyState events aren't as much of a problem if we double\n    // them, so not going to go to as much trouble as loadstart to prevent\n    // that unless we find reason to.\n    let eventsToTrigger = ['loadstart'];\n\n    // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n    eventsToTrigger.push('loadedmetadata');\n\n    // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n    if (el.readyState >= 2) {\n      eventsToTrigger.push('loadeddata');\n    }\n\n    // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n    if (el.readyState >= 3) {\n      eventsToTrigger.push('canplay');\n    }\n\n    // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n    if (el.readyState >= 4) {\n      eventsToTrigger.push('canplaythrough');\n    }\n\n    // We still need to give the player time to add event listeners\n    this.ready(function(){\n      eventsToTrigger.forEach(function(type){\n        this.trigger(type);\n      }, this);\n    });\n  }\n\n  proxyNativeTextTracks_() {\n    let tt = this.el().textTracks;\n\n    if (tt) {\n      // Add tracks - if player is initialised after DOM loaded, textTracks\n      // will not trigger addtrack\n      for (let i = 0; i < tt.length; i++) {\n        this.textTracks().addTrack_(tt[i]);\n      }\n\n      if (tt.addEventListener) {\n        tt.addEventListener('change', this.handleTextTrackChange_);\n        tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n        tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n      }\n    }\n  }\n\n  handleTextTrackChange(e) {\n    let tt = this.textTracks();\n    this.textTracks().trigger({\n      type: 'change',\n      target: tt,\n      currentTarget: tt,\n      srcElement: tt\n    });\n  }\n\n  handleTextTrackAdd(e) {\n    this.textTracks().addTrack_(e.track);\n  }\n\n  handleTextTrackRemove(e) {\n    this.textTracks().removeTrack_(e.track);\n  }\n\n  handleVideoTrackChange_(e) {\n    let vt = this.videoTracks();\n    this.videoTracks().trigger({\n      type: 'change',\n      target: vt,\n      currentTarget: vt,\n      srcElement: vt\n    });\n  }\n\n  handleVideoTrackAdd_(e) {\n    this.videoTracks().addTrack_(e.track);\n  }\n\n  handleVideoTrackRemove_(e) {\n    this.videoTracks().removeTrack_(e.track);\n  }\n\n  handleAudioTrackChange_(e) {\n    let audioTrackList = this.audioTracks();\n    this.audioTracks().trigger({\n      type: 'change',\n      target: audioTrackList,\n      currentTarget: audioTrackList,\n      srcElement: audioTrackList\n    });\n  }\n\n  handleAudioTrackAdd_(e) {\n    this.audioTracks().addTrack_(e.track);\n  }\n\n  handleAudioTrackRemove_(e) {\n    this.audioTracks().removeTrack_(e.track);\n  }\n\n\n  /**\n   * Play for html5 tech\n   *\n   * @method play\n   */\n  play() { this.el_.play(); }\n\n  /**\n   * Pause for html5 tech\n   *\n   * @method pause\n   */\n  pause() { this.el_.pause(); }\n\n  /**\n   * Paused for html5 tech\n   *\n   * @return {Boolean}\n   * @method paused\n   */\n  paused() { return this.el_.paused; }\n\n  /**\n   * Get current time\n   *\n   * @return {Number}\n   * @method currentTime\n   */\n  currentTime() { return this.el_.currentTime; }\n\n  /**\n   * Set current time\n   *\n   * @param {Number} seconds Current time of video\n   * @method setCurrentTime\n   */\n  setCurrentTime(seconds) {\n    try {\n      this.el_.currentTime = seconds;\n    } catch(e) {\n      log(e, 'Video is not ready. (Video.js)');\n      // this.warning(VideoJS.warnings.videoNotReady);\n    }\n  }\n\n  /**\n   * Get duration\n   *\n   * @return {Number}\n   * @method duration\n   */\n  duration() { return this.el_.duration || 0; }\n\n  /**\n   * Get a TimeRange object that represents the intersection\n   * of the time ranges for which the user agent has all\n   * relevant media\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() { return this.el_.buffered; }\n\n  /**\n   * Get volume level\n   *\n   * @return {Number}\n   * @method volume\n   */\n  volume() { return this.el_.volume; }\n\n  /**\n   * Set volume level\n   *\n   * @param {Number} percentAsDecimal Volume percent as a decimal\n   * @method setVolume\n   */\n  setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n  /**\n   * Get if muted\n   *\n   * @return {Boolean}\n   * @method muted\n   */\n  muted() { return this.el_.muted; }\n\n  /**\n   * Set muted\n   *\n   * @param {Boolean} If player is to be muted or note\n   * @method setMuted\n   */\n  setMuted(muted) { this.el_.muted = muted; }\n\n  /**\n   * Get player width\n   *\n   * @return {Number}\n   * @method width\n   */\n  width() { return this.el_.offsetWidth; }\n\n  /**\n   * Get player height\n   *\n   * @return {Number}\n   * @method height\n   */\n  height() {  return this.el_.offsetHeight; }\n\n  /**\n   * Get if there is fullscreen support\n   *\n   * @return {Boolean}\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    if (typeof this.el_.webkitEnterFullScreen === 'function') {\n      let userAgent = window.navigator.userAgent;\n      // Seems to be broken in Chromium/Chrome && Safari in Leopard\n      if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Request to enter fullscreen\n   *\n   * @method enterFullScreen\n   */\n  enterFullScreen() {\n    var video = this.el_;\n\n    if ('webkitDisplayingFullscreen' in video) {\n      this.one('webkitbeginfullscreen', function() {\n        this.one('webkitendfullscreen', function() {\n          this.trigger('fullscreenchange', { isFullscreen: false });\n        });\n\n        this.trigger('fullscreenchange', { isFullscreen: true });\n      });\n    }\n\n    if (video.paused && video.networkState <= video.HAVE_METADATA) {\n      // attempt to prime the video element for programmatic access\n      // this isn't necessary on the desktop but shouldn't hurt\n      this.el_.play();\n\n      // playing and pausing synchronously during the transition to fullscreen\n      // can get iOS ~6.1 devices into a play/pause loop\n      this.setTimeout(function(){\n        video.pause();\n        video.webkitEnterFullScreen();\n      }, 0);\n    } else {\n      video.webkitEnterFullScreen();\n    }\n  }\n\n  /**\n   * Request to exit fullscreen\n   *\n   * @method exitFullScreen\n   */\n  exitFullScreen() {\n    this.el_.webkitExitFullScreen();\n  }\n\n  /**\n   * Get/set video\n   *\n   * @param {Object=} src Source object\n   * @return {Object}\n   * @method src\n   */\n  src(src) {\n    if (src === undefined) {\n      return this.el_.src;\n    } else {\n      // Setting src through `src` instead of `setSrc` will be deprecated\n      this.setSrc(src);\n    }\n  }\n\n  /**\n   * Set video\n   *\n   * @param {Object} src Source object\n   * @deprecated\n   * @method setSrc\n   */\n  setSrc(src) {\n    this.el_.src = src;\n  }\n\n  /**\n   * Load media into player\n   *\n   * @method load\n   */\n  load(){\n    this.el_.load();\n  }\n\n  /**\n   * Reset the tech. Removes all sources and calls `load`.\n   *\n   * @method reset\n   */\n  reset() {\n    Html5.resetMediaElement(this.el_);\n  }\n\n  /**\n   * Get current source\n   *\n   * @return {Object}\n   * @method currentSrc\n   */\n  currentSrc() {\n    if (this.currentSource_) {\n      return this.currentSource_.src;\n    } else {\n      return this.el_.currentSrc;\n    }\n  }\n\n  /**\n   * Get poster\n   *\n   * @return {String}\n   * @method poster\n   */\n  poster() { return this.el_.poster; }\n\n  /**\n   * Set poster\n   *\n   * @param {String} val URL to poster image\n   * @method\n   */\n  setPoster(val) { this.el_.poster = val; }\n\n  /**\n   * Get preload attribute\n   *\n   * @return {String}\n   * @method preload\n   */\n  preload() { return this.el_.preload; }\n\n  /**\n   * Set preload attribute\n   *\n   * @param {String} val Value for preload attribute\n   * @method setPreload\n   */\n  setPreload(val) { this.el_.preload = val; }\n\n  /**\n   * Get autoplay attribute\n   *\n   * @return {String}\n   * @method autoplay\n   */\n  autoplay() { return this.el_.autoplay; }\n\n  /**\n   * Set autoplay attribute\n   *\n   * @param {String} val Value for preload attribute\n   * @method setAutoplay\n   */\n  setAutoplay(val) { this.el_.autoplay = val; }\n\n  /**\n   * Get controls attribute\n   *\n   * @return {String}\n   * @method controls\n   */\n  controls() { return this.el_.controls; }\n\n  /**\n   * Set controls attribute\n   *\n   * @param {String} val Value for controls attribute\n   * @method setControls\n   */\n  setControls(val) { this.el_.controls = !!val; }\n\n  /**\n   * Get loop attribute\n   *\n   * @return {String}\n   * @method loop\n   */\n  loop() { return this.el_.loop; }\n\n  /**\n   * Set loop attribute\n   *\n   * @param {String} val Value for loop attribute\n   * @method setLoop\n   */\n  setLoop(val) { this.el_.loop = val; }\n\n  /**\n   * Get error value\n   *\n   * @return {String}\n   * @method error\n   */\n  error() { return this.el_.error; }\n\n  /**\n   * Get whether or not the player is in the \"seeking\" state\n   *\n   * @return {Boolean}\n   * @method seeking\n   */\n  seeking() { return this.el_.seeking; }\n\n  /**\n   * Get a TimeRanges object that represents the\n   * ranges of the media resource to which it is possible\n   * for the user agent to seek.\n   *\n   * @return {TimeRangeObject}\n   * @method seekable\n   */\n  seekable() { return this.el_.seekable; }\n\n  /**\n   * Get if video ended\n   *\n   * @return {Boolean}\n   * @method ended\n   */\n  ended() { return this.el_.ended; }\n\n  /**\n   * Get the value of the muted content attribute\n   * This attribute has no dynamic effect, it only\n   * controls the default state of the element\n   *\n   * @return {Boolean}\n   * @method defaultMuted\n   */\n  defaultMuted() { return this.el_.defaultMuted; }\n\n  /**\n   * Get desired speed at which the media resource is to play\n   *\n   * @return {Number}\n   * @method playbackRate\n   */\n  playbackRate() { return this.el_.playbackRate; }\n\n  /**\n   * Returns a TimeRanges object that represents the ranges of the\n   * media resource that the user agent has played.\n   * @return {TimeRangeObject} the range of points on the media\n   * timeline that has been reached through normal playback\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n   */\n  played() { return this.el_.played; }\n\n  /**\n   * Set desired speed at which the media resource is to play\n   *\n   * @param {Number} val Speed at which the media resource is to play\n   * @method setPlaybackRate\n   */\n  setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n  /**\n   * Get the current state of network activity for the element, from\n   * the list below\n   * NETWORK_EMPTY (numeric value 0)\n   * NETWORK_IDLE (numeric value 1)\n   * NETWORK_LOADING (numeric value 2)\n   * NETWORK_NO_SOURCE (numeric value 3)\n   *\n   * @return {Number}\n   * @method networkState\n   */\n  networkState() { return this.el_.networkState; }\n\n  /**\n   * Get a value that expresses the current state of the element\n   * with respect to rendering the current playback position, from\n   * the codes in the list below\n   * HAVE_NOTHING (numeric value 0)\n   * HAVE_METADATA (numeric value 1)\n   * HAVE_CURRENT_DATA (numeric value 2)\n   * HAVE_FUTURE_DATA (numeric value 3)\n   * HAVE_ENOUGH_DATA (numeric value 4)\n   *\n   * @return {Number}\n   * @method readyState\n   */\n  readyState() { return this.el_.readyState; }\n\n  /**\n   * Get width of video\n   *\n   * @return {Number}\n   * @method videoWidth\n   */\n  videoWidth() { return this.el_.videoWidth; }\n\n  /**\n   * Get height of video\n   *\n   * @return {Number}\n   * @method videoHeight\n   */\n  videoHeight() { return this.el_.videoHeight; }\n\n  /**\n   * Get text tracks\n   *\n   * @return {TextTrackList}\n   * @method textTracks\n   */\n  textTracks() {\n    return super.textTracks();\n  }\n\n  /**\n   * Creates and returns a text track object\n   *\n   * @param {String} kind Text track kind (subtitles, captions, descriptions\n   *                                       chapters and metadata)\n   * @param {String=} label Label to identify the text track\n   * @param {String=} language Two letter language abbreviation\n   * @return {TextTrackObject}\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.addTextTrack(kind, label, language);\n    }\n\n    return this.el_.addTextTrack(kind, label, language);\n  }\n\n  /**\n   * Creates a remote text track object and returns a html track element\n   *\n   * @param {Object} options The object should contain values for\n   * kind, language, label and src (location of the WebVTT file)\n   * @return {HTMLTrackElement}\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options={}) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.addRemoteTextTrack(options);\n    }\n\n    let htmlTrackElement = document.createElement('track');\n\n    if (options.kind) {\n      htmlTrackElement.kind = options.kind;\n    }\n    if (options.label) {\n      htmlTrackElement.label = options.label;\n    }\n    if (options.language || options.srclang) {\n      htmlTrackElement.srclang = options.language || options.srclang;\n    }\n    if (options.default) {\n      htmlTrackElement.default = options.default;\n    }\n    if (options.id) {\n      htmlTrackElement.id = options.id;\n    }\n    if (options.src) {\n      htmlTrackElement.src = options.src;\n    }\n\n    this.el().appendChild(htmlTrackElement);\n\n    // store HTMLTrackElement and TextTrack to remote list\n    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n    this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n    return htmlTrackElement;\n  }\n\n  /**\n   * Remove remote text track from TextTrackList object\n   *\n   * @param {TextTrackObject} track Texttrack object to remove\n   * @method removeRemoteTextTrack\n   */\n  removeRemoteTextTrack(track) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.removeRemoteTextTrack(track);\n    }\n\n    let tracks, i;\n\n    let trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n    // remove HTMLTrackElement and TextTrack from remote list\n    this.remoteTextTrackEls().removeTrackElement_(trackElement);\n    this.remoteTextTracks().removeTrack_(track);\n\n    tracks = this.$$('track');\n\n    i = tracks.length;\n    while (i--) {\n      if (track === tracks[i] || track === tracks[i].track) {\n        this.el().removeChild(tracks[i]);\n      }\n    }\n  }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n  // IE9 with no Media Player is a LIAR! (#984)\n  try {\n    Html5.TEST_VID['volume'] = 0.5;\n  } catch (e) {\n    return false;\n  }\n\n  return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param  {Object} source   The source object\n * @param  {Html5} tech  The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can play the given videotype\n *\n * @param  {String} type    The mimetype to check\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canPlayType = function(type){\n  // IE9 on Windows 7 without MediaPlayer throws an error here\n  // https://github.com/videojs/video.js/issues/519\n  try {\n    return Html5.TEST_VID.canPlayType(type);\n  } catch(e) {\n    return '';\n  }\n};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param  {Object} source  The source object\n * @param  {Object} options The options passed to the tech\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source, options){\n  var match, ext;\n\n  // If a type was provided we should rely on that\n  if (source.type) {\n    return Html5.nativeSourceHandler.canPlayType(source.type);\n  } else if (source.src) {\n    // If no type, fall back to checking 'video/[EXTENSION]'\n    ext = Url.getFileExtension(source.src);\n\n    return Html5.nativeSourceHandler.canPlayType(`video/${ext}`);\n  }\n\n  return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param  {Object} source   The source object\n * @param  {Html5}  tech     The instance of the Html5 tech\n * @param  {Object} options  The options to pass to the source\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech, options){\n  tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n  var volume =  Html5.TEST_VID.volume;\n  Html5.TEST_VID.volume = (volume / 2) + 0.1;\n  return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Boolean}\n */\nHtml5.canControlPlaybackRate = function(){\n  // Playback rate API is implemented in Android Chrome, but doesn't do anything\n  // https://github.com/videojs/video.js/issues/3180\n  if (browser.IS_ANDROID && browser.IS_CHROME) {\n    return false;\n  }\n  var playbackRate = Html5.TEST_VID.playbackRate;\n  Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n  return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n  var supportsTextTracks;\n\n  // Figure out native text track support\n  // If mode is a number, we cannot change it because it'll disappear from view.\n  // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n  // Firefox isn't playing nice either with modifying the mode\n  // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n  supportsTextTracks = !!Html5.TEST_VID.textTracks;\n  if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n    supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n  }\n  if (supportsTextTracks && browser.IS_FIREFOX) {\n    supportsTextTracks = false;\n  }\n  if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n    supportsTextTracks = false;\n  }\n\n  return supportsTextTracks;\n};\n\n/*\n * Check to see if native video tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeVideoTracks = function() {\n  let supportsVideoTracks = !!Html5.TEST_VID.videoTracks;\n  return supportsVideoTracks;\n};\n\n/*\n * Check to see if native audio tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeAudioTracks = function() {\n  let supportsAudioTracks = !!Html5.TEST_VID.audioTracks;\n  return supportsAudioTracks;\n};\n\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n  'loadstart',\n  'suspend',\n  'abort',\n  'error',\n  'emptied',\n  'stalled',\n  'loadedmetadata',\n  'loadeddata',\n  'canplay',\n  'canplaythrough',\n  'playing',\n  'waiting',\n  'seeking',\n  'seeked',\n  'ended',\n  'durationchange',\n  'timeupdate',\n  'progress',\n  'play',\n  'pause',\n  'ratechange',\n  'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n/**\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeVideoTracks'] = Html5.supportsNativeVideoTracks();\n\n/**\n * Sets the tech's status on native audio track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeAudioTracks'] = Html5.supportsNativeAudioTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n  // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n  if (browser.ANDROID_VERSION >= 4.0) {\n    if (!canPlayType) {\n      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n    }\n\n    Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n      if (type && mpegurlRE.test(type)) {\n        return 'maybe';\n      }\n      return canPlayType.call(this, type);\n    };\n  }\n\n  // Override Android 2.2 and less canPlayType method which is broken\n  if (browser.IS_OLD_ANDROID) {\n    if (!canPlayType) {\n      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n    }\n\n    Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n      if (type && mp4RE.test(type)) {\n        return 'maybe';\n      }\n      return canPlayType.call(this, type);\n    };\n  }\n};\n\nHtml5.unpatchCanPlayType = function() {\n  var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n  Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n  canPlayType = null;\n  return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n  if (!el) { return; }\n\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n\n  // remove any child track or source nodes to prevent their loading\n  while(el.hasChildNodes()) {\n    el.removeChild(el.firstChild);\n  }\n\n  // remove any src reference. not setting `src=''` because that causes a warning\n  // in firefox\n  el.removeAttribute('src');\n\n  // force the media element to update its loading state by calling load()\n  // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n  if (typeof el.load === 'function') {\n    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n    (function() {\n      try {\n        el.load();\n      } catch (e) {\n        // not supported\n      }\n    })();\n  }\n};\n\nHtml5.resetMediaElement = function(el){\n  if (!el) { return; }\n\n  let sources = el.querySelectorAll('source');\n  let i = sources.length;\n  while (i--) {\n    el.removeChild(sources[i]);\n  }\n\n  // remove any src reference.\n  // not setting `src=''` because that throws an error\n  el.removeAttribute('src');\n\n  if (typeof el.load === 'function') {\n    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n    (function() {\n      try {\n        el.load();\n      } catch (e) {}\n    })();\n  }\n};\n\nComponent.registerComponent('Html5', Html5);\nTech.registerTech('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component.js';\nimport Tech from './tech.js';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n\n    // If there are no sources when the player is initialized,\n    // load the first supported playback technology.\n\n    if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n      for (let i=0, j=options.playerOptions['techOrder']; i<j.length; i++) {\n        let techName = toTitleCase(j[i]);\n        let tech = Tech.getTech(techName);\n        // Support old behavior of techs being registered as components.\n        // Remove once that deprecated behavior is removed.\n        if (!techName) {\n          tech = Component.getComponent(techName);\n        }\n\n        // Check if the browser supports this technology\n        if (tech && tech.isSupported()) {\n          player.loadTech_(techName);\n          break;\n        }\n      }\n    } else {\n      // // Loop through playback technologies (HTML5, Flash) and check for support.\n      // // Then load the best source.\n      // // A few assumptions here:\n      // //   All playback technologies respect preload false.\n      player.src(options.playerOptions['sources']);\n    }\n  }\n}\n\nComponent.registerComponent('MediaLoader', MediaLoader);\nexport default MediaLoader;\n","/**\n * @file tech.js\n * Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\nimport Component from '../component';\nimport HTMLTrackElement from '../tracks/html-track-element';\nimport HTMLTrackElementList from '../tracks/html-track-element-list';\nimport mergeOptions from '../utils/merge-options.js';\nimport TextTrack from '../tracks/text-track';\nimport TextTrackList from '../tracks/text-track-list';\nimport VideoTrack from '../tracks/video-track';\nimport VideoTrackList from '../tracks/video-track-list';\nimport AudioTrackList from '../tracks/audio-track-list';\nimport AudioTrack from '../tracks/audio-track';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport { bufferedPercent } from '../utils/buffer.js';\nimport MediaError from '../media-error.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n *\n * @param {Object=} options Options object\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Tech\n */\nclass Tech extends Component {\n\n  constructor(options={}, ready=function(){}){\n    // we don't want the tech to report user activity automatically.\n    // This is done manually in addControlsListeners\n    options.reportTouchActivity = false;\n    super(null, options, ready);\n\n    // keep track of whether the current source has played at all to\n    // implement a very limited played()\n    this.hasStarted_ = false;\n    this.on('playing', function() {\n      this.hasStarted_ = true;\n    });\n    this.on('loadstart', function() {\n      this.hasStarted_ = false;\n    });\n\n    this.textTracks_ = options.textTracks;\n    this.videoTracks_ = options.videoTracks;\n    this.audioTracks_ = options.audioTracks;\n\n    // Manually track progress in cases where the browser/flash player doesn't report it.\n    if (!this.featuresProgressEvents) {\n      this.manualProgressOn();\n    }\n\n    // Manually track timeupdates in cases where the browser/flash player doesn't report it.\n    if (!this.featuresTimeupdateEvents) {\n      this.manualTimeUpdatesOn();\n    }\n\n    if (options.nativeCaptions === false || options.nativeTextTracks === false) {\n      this.featuresNativeTextTracks = false;\n    }\n\n    if (!this.featuresNativeTextTracks) {\n      this.on('ready', this.emulateTextTracks);\n    }\n\n    this.initTextTrackListeners();\n    this.initTrackListeners();\n\n    // Turn on component tap events\n    this.emitTapEvents();\n  }\n\n  /* Fallbacks for unsupported event types\n  ================================================================================ */\n  // Manually trigger progress events based on changes to the buffered amount\n  // Many flash players and older HTML5 browsers don't send progress or progress-like events\n  /**\n   * Turn on progress events\n   *\n   * @method manualProgressOn\n   */\n  manualProgressOn() {\n    this.on('durationchange', this.onDurationChange);\n\n    this.manualProgress = true;\n\n    // Trigger progress watching when a source begins loading\n    this.one('ready', this.trackProgress);\n  }\n\n  /**\n   * Turn off progress events\n   *\n   * @method manualProgressOff\n   */\n  manualProgressOff() {\n    this.manualProgress = false;\n    this.stopTrackingProgress();\n\n    this.off('durationchange', this.onDurationChange);\n  }\n\n  /**\n   * Track progress\n   *\n   * @method trackProgress\n   */\n  trackProgress() {\n    this.stopTrackingProgress();\n    this.progressInterval = this.setInterval(Fn.bind(this, function(){\n      // Don't trigger unless buffered amount is greater than last time\n\n      let numBufferedPercent = this.bufferedPercent();\n\n      if (this.bufferedPercent_ !== numBufferedPercent) {\n        this.trigger('progress');\n      }\n\n      this.bufferedPercent_ = numBufferedPercent;\n\n      if (numBufferedPercent === 1) {\n        this.stopTrackingProgress();\n      }\n    }), 500);\n  }\n\n  /**\n   * Update duration\n   *\n   * @method onDurationChange\n   */\n  onDurationChange() {\n    this.duration_ = this.duration();\n  }\n\n  /**\n   * Create and get TimeRange object for buffering\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() {\n    return createTimeRange(0, 0);\n  }\n\n  /**\n   * Get buffered percent\n   *\n   * @return {Number}\n   * @method bufferedPercent\n   */\n  bufferedPercent() {\n    return bufferedPercent(this.buffered(), this.duration_);\n  }\n\n  /**\n   * Stops tracking progress by clearing progress interval\n   *\n   * @method stopTrackingProgress\n   */\n  stopTrackingProgress() {\n    this.clearInterval(this.progressInterval);\n  }\n\n  /*! Time Tracking -------------------------------------------------------------- */\n  /**\n   * Set event listeners for on play and pause and tracking current time\n   *\n   * @method manualTimeUpdatesOn\n   */\n  manualTimeUpdatesOn() {\n    this.manualTimeUpdates = true;\n\n    this.on('play', this.trackCurrentTime);\n    this.on('pause', this.stopTrackingCurrentTime);\n  }\n\n  /**\n   * Remove event listeners for on play and pause and tracking current time\n   *\n   * @method manualTimeUpdatesOff\n   */\n  manualTimeUpdatesOff() {\n    this.manualTimeUpdates = false;\n    this.stopTrackingCurrentTime();\n    this.off('play', this.trackCurrentTime);\n    this.off('pause', this.stopTrackingCurrentTime);\n  }\n\n  /**\n   * Tracks current time\n   *\n   * @method trackCurrentTime\n   */\n  trackCurrentTime() {\n    if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n    this.currentTimeInterval = this.setInterval(function(){\n      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n    }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n  }\n\n  /**\n   * Turn off play progress tracking (when paused or dragging)\n   *\n   * @method stopTrackingCurrentTime\n   */\n  stopTrackingCurrentTime() {\n    this.clearInterval(this.currentTimeInterval);\n\n    // #1002 - if the video ends right before the next timeupdate would happen,\n    // the progress bar won't make it all the way to the end\n    this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n  }\n\n  /**\n   * Turn off any manual progress or timeupdate tracking\n   *\n   * @method dispose\n   */\n  dispose() {\n\n    // clear out all tracks because we can't reuse them between techs\n    this.clearTracks(['audio', 'video', 'text']);\n\n    // Turn off any manual progress or timeupdate tracking\n    if (this.manualProgress) { this.manualProgressOff(); }\n\n    if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n    super.dispose();\n  }\n\n  /**\n   * clear out a track list, or multiple track lists\n   *\n   * Note: Techs without source handlers should call this between\n   * sources for video & audio tracks, as usually you don't want\n   * to use them between tracks and we have no automatic way to do\n   * it for you\n   *\n   * @method clearTracks\n   * @param {Array|String} types type(s) of track lists to empty\n   */\n  clearTracks(types) {\n    types = [].concat(types);\n    // clear out all tracks because we can't reuse them between techs\n    types.forEach((type) => {\n      let list = this[`${type}Tracks`]() || [];\n      let i = list.length;\n      while (i--) {\n        let track = list[i];\n        if (type === 'text') {\n          this.removeRemoteTextTrack(track);\n        }\n        list.removeTrack_(track);\n      }\n    });\n  }\n\n  /**\n   * Reset the tech. Removes all sources and resets readyState.\n   *\n   * @method reset\n   */\n  reset() {}\n\n  /**\n   * When invoked without an argument, returns a MediaError object\n   * representing the current error state of the player or null if\n   * there is no error. When invoked with an argument, set the current\n   * error state of the player.\n   * @param {MediaError=} err    Optional an error object\n   * @return {MediaError}        the current error object or null\n   * @method error\n   */\n  error(err) {\n    if (err !== undefined) {\n      if (err instanceof MediaError) {\n        this.error_ = err;\n      } else {\n        this.error_ = new MediaError(err);\n      }\n      this.trigger('error');\n    }\n    return this.error_;\n  }\n\n  /**\n   * Return the time ranges that have been played through for the\n   * current source. This implementation is incomplete. It does not\n   * track the played time ranges, only whether the source has played\n   * at all or not.\n   * @return {TimeRangeObject} a single time range if this video has\n   * played or an empty set of ranges if not.\n   * @method played\n   */\n  played() {\n    if (this.hasStarted_) {\n      return createTimeRange(0, 0);\n    }\n    return createTimeRange();\n  }\n\n  /**\n   * Set current time\n   *\n   * @method setCurrentTime\n   */\n  setCurrentTime() {\n    // improve the accuracy of manual timeupdates\n    if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n  }\n\n  /**\n   * Initialize texttrack listeners\n   *\n   * @method initTextTrackListeners\n   */\n  initTextTrackListeners() {\n    let textTrackListChanges = Fn.bind(this, function() {\n      this.trigger('texttrackchange');\n    });\n\n    let tracks = this.textTracks();\n\n    if (!tracks) return;\n\n    tracks.addEventListener('removetrack', textTrackListChanges);\n    tracks.addEventListener('addtrack', textTrackListChanges);\n\n    this.on('dispose', Fn.bind(this, function() {\n      tracks.removeEventListener('removetrack', textTrackListChanges);\n      tracks.removeEventListener('addtrack', textTrackListChanges);\n    }));\n  }\n\n\n  /**\n   * Initialize audio and video track listeners\n   *\n   * @method initTrackListeners\n   */\n  initTrackListeners() {\n    const trackTypes = ['video', 'audio'];\n\n    trackTypes.forEach((type) => {\n      let trackListChanges = () => {\n        this.trigger(`${type}trackchange`);\n      };\n\n      let tracks = this[`${type}Tracks`]();\n\n      tracks.addEventListener('removetrack', trackListChanges);\n      tracks.addEventListener('addtrack', trackListChanges);\n\n      this.on('dispose', () => {\n        tracks.removeEventListener('removetrack', trackListChanges);\n        tracks.removeEventListener('addtrack', trackListChanges);\n      });\n    });\n  }\n\n  /**\n   * Emulate texttracks\n   *\n   * @method emulateTextTracks\n   */\n  emulateTextTracks() {\n    let tracks = this.textTracks();\n    if (!tracks) {\n      return;\n    }\n\n    if (!window['WebVTT'] && this.el().parentNode != null) {\n      let script = document.createElement('script');\n      script.src = this.options_['vtt.js'] || '../node_modules/videojs-vtt.js/dist/vtt.js';\n      script.onload = () => {\n        this.trigger('vttjsloaded');\n      };\n      script.onerror = () => {\n        this.trigger('vttjserror');\n      };\n      this.on('dispose', () => {\n        script.onload = null;\n        script.onerror = null;\n      });\n      // but have not loaded yet and we set it to true before the inject so that\n      // we don't overwrite the injected window.WebVTT if it loads right away\n      window['WebVTT'] = true;\n      this.el().parentNode.appendChild(script);\n    }\n\n    let updateDisplay = () => this.trigger('texttrackchange');\n    let textTracksChanges = () => {\n      updateDisplay();\n\n      for (let i = 0; i < tracks.length; i++) {\n        let track = tracks[i];\n        track.removeEventListener('cuechange', updateDisplay);\n        if (track.mode === 'showing') {\n          track.addEventListener('cuechange', updateDisplay);\n        }\n      }\n    };\n\n    textTracksChanges();\n    tracks.addEventListener('change', textTracksChanges);\n\n    this.on('dispose', function() {\n      tracks.removeEventListener('change', textTracksChanges);\n    });\n  }\n\n  /**\n   * Get videotracks\n   *\n   * @returns {VideoTrackList}\n   * @method videoTracks\n   */\n  videoTracks() {\n    this.videoTracks_ = this.videoTracks_ || new VideoTrackList();\n    return this.videoTracks_;\n  }\n\n  /**\n   * Get audiotracklist\n   *\n   * @returns {AudioTrackList}\n   * @method audioTracks\n   */\n  audioTracks() {\n    this.audioTracks_ = this.audioTracks_ || new AudioTrackList();\n    return this.audioTracks_;\n  }\n\n  /*\n   * Provide default methods for text tracks.\n   *\n   * Html5 tech overrides these.\n   */\n\n  /**\n   * Get texttracks\n   *\n   * @returns {TextTrackList}\n   * @method textTracks\n   */\n  textTracks() {\n    this.textTracks_ = this.textTracks_ || new TextTrackList();\n    return this.textTracks_;\n  }\n\n  /**\n   * Get remote texttracks\n   *\n   * @returns {TextTrackList}\n   * @method remoteTextTracks\n   */\n  remoteTextTracks() {\n    this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n    return this.remoteTextTracks_;\n  }\n\n  /**\n   * Get remote htmltrackelements\n   *\n   * @returns {HTMLTrackElementList}\n   * @method remoteTextTrackEls\n   */\n  remoteTextTrackEls() {\n    this.remoteTextTrackEls_ = this.remoteTextTrackEls_ || new HTMLTrackElementList();\n    return this.remoteTextTrackEls_;\n  }\n\n  /**\n   * Creates and returns a remote text track object\n   *\n   * @param {String} kind Text track kind (subtitles, captions, descriptions\n   *                                       chapters and metadata)\n   * @param {String=} label Label to identify the text track\n   * @param {String=} language Two letter language abbreviation\n   * @return {TextTrackObject}\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    if (!kind) {\n      throw new Error('TextTrack kind is required but was not provided');\n    }\n\n    return createTrackHelper(this, kind, label, language);\n  }\n\n  /**\n   * Creates a remote text track object and returns a emulated html track element\n   *\n   * @param {Object} options The object should contain values for\n   * kind, language, label and src (location of the WebVTT file)\n   * @return {HTMLTrackElement}\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options) {\n    let track = mergeOptions(options, {\n      tech: this\n    });\n\n    let htmlTrackElement = new HTMLTrackElement(track);\n\n    // store HTMLTrackElement and TextTrack to remote list\n    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n    this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n    // must come after remoteTextTracks()\n    this.textTracks().addTrack_(htmlTrackElement.track);\n\n    return htmlTrackElement;\n  }\n\n  /**\n   * Remove remote texttrack\n   *\n   * @param {TextTrackObject} track Texttrack to remove\n   * @method removeRemoteTextTrack\n   */\n  removeRemoteTextTrack(track) {\n    this.textTracks().removeTrack_(track);\n\n    let trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n    // remove HTMLTrackElement and TextTrack from remote list\n    this.remoteTextTrackEls().removeTrackElement_(trackElement);\n    this.remoteTextTracks().removeTrack_(track);\n  }\n\n  /**\n   * Provide a default setPoster method for techs\n   * Poster support for techs should be optional, so we don't want techs to\n   * break if they don't have a way to set a poster.\n   *\n   * @method setPoster\n   */\n  setPoster() {}\n\n  /*\n   * Check if the tech can support the given type\n   *\n   * The base tech does not support any type, but source handlers might\n   * overwrite this.\n   *\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  canPlayType() {\n    return '';\n  }\n\n  /*\n   * Return whether the argument is a Tech or not.\n   * Can be passed either a Class like `Html5` or a instance like `player.tech_`\n   *\n   * @param {Object} component An item to check\n   * @return {Boolean}         Whether it is a tech or not\n   */\n  static isTech(component) {\n    return component.prototype instanceof Tech ||\n           component instanceof Tech ||\n           component === Tech;\n  }\n\n  /**\n   * Registers a Tech\n   *\n   * @param {String} name Name of the Tech to register\n   * @param {Object} tech The tech to register\n   * @static\n   * @method registerComponent\n   */\n  static registerTech(name, tech) {\n    if (!Tech.techs_) {\n      Tech.techs_ = {};\n    }\n\n    if (!Tech.isTech(tech)) {\n      throw new Error(`Tech ${name} must be a Tech`);\n    }\n\n    Tech.techs_[name] = tech;\n    return tech;\n  }\n\n  /**\n   * Gets a component by name\n   *\n   * @param {String} name Name of the component to get\n   * @return {Component}\n   * @static\n   * @method getComponent\n   */\n  static getTech(name) {\n    if (Tech.techs_ && Tech.techs_[name]) {\n      return Tech.techs_[name];\n    }\n\n    if (window && window.videojs && window.videojs[name]) {\n      log.warn(`The ${name} tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)`);\n      return window.videojs[name];\n    }\n  }\n}\n\n/**\n * List of associated text tracks\n *\n * @type {TextTrackList}\n * @private\n */\nTech.prototype.textTracks_;\n\n/**\n * List of associated audio tracks\n *\n * @type {AudioTrackList}\n * @private\n */\nTech.prototype.audioTracks_;\n\n/**\n * List of associated video tracks\n *\n * @type {VideoTrackList}\n * @private\n */\nTech.prototype.videoTracks_;\n\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n  let tracks = self.textTracks();\n\n  options.kind = kind;\n\n  if (label) {\n    options.label = label;\n  }\n  if (language) {\n    options.language = language;\n  }\n  options.tech = self;\n\n  let track = new TextTrack(options);\n  tracks.addTrack_(track);\n\n  return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n *   Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n   /*\n    * Register a source handler\n    * Source handlers are scripts for handling specific formats.\n    * The source handler pattern is used for adaptive formats (HLS, DASH) that\n    * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n    * @param  {Function} handler  The source handler\n    * @param  {Boolean}  first    Register it before any existing handlers\n    */\n   _Tech.registerSourceHandler = function(handler, index){\n    let handlers = _Tech.sourceHandlers;\n\n    if (!handlers) {\n      handlers = _Tech.sourceHandlers = [];\n    }\n\n    if (index === undefined) {\n      // add to the end of the list\n      index = handlers.length;\n    }\n\n    handlers.splice(index, 0, handler);\n  };\n\n  /*\n   * Check if the tech can support the given type\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  _Tech.canPlayType = function(type){\n    let handlers = _Tech.sourceHandlers || [];\n    let can;\n\n    for (let i = 0; i < handlers.length; i++) {\n      can = handlers[i].canPlayType(type);\n\n      if (can) {\n        return can;\n      }\n    }\n\n    return '';\n  };\n\n   /*\n    * Return the first source handler that supports the source\n    * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n    * @param  {Object} source  The source object\n    * @param  {Object} options The options passed to the tech\n    * @returns {Object}       The first source handler that supports the source\n    * @returns {null}         Null if no source handler is found\n    */\n   _Tech.selectSourceHandler = function(source, options){\n    let handlers = _Tech.sourceHandlers || [];\n    let can;\n\n    for (let i = 0; i < handlers.length; i++) {\n      can = handlers[i].canHandleSource(source, options);\n\n      if (can) {\n        return handlers[i];\n      }\n    }\n\n    return null;\n  };\n\n  /*\n   * Check if the tech can support the given source\n   * @param  {Object} srcObj  The source object\n   * @param  {Object} options The options passed to the tech\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  _Tech.canPlaySource = function(srcObj, options){\n    let sh = _Tech.selectSourceHandler(srcObj, options);\n\n    if (sh) {\n      return sh.canHandleSource(srcObj, options);\n    }\n\n    return '';\n  };\n\n  /*\n   * When using a source handler, prefer its implementation of\n   * any function normally provided by the tech.\n   */\n  let deferrable = [\n      'seekable',\n      'duration'\n    ];\n\n  deferrable.forEach(function (fnName) {\n    let originalFn = this[fnName];\n\n    if (typeof originalFn !== 'function') {\n      return;\n    }\n\n    this[fnName] = function() {\n      if (this.sourceHandler_ && this.sourceHandler_[fnName]) {\n        return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments);\n      }\n      return originalFn.apply(this, arguments);\n    };\n  }, _Tech.prototype);\n\n   /*\n    * Create a function for setting the source using a source object\n    * and source handlers.\n    * Should never be called unless a source handler was found.\n    * @param {Object} source  A source object with src and type keys\n    * @return {Tech} self\n    */\n   _Tech.prototype.setSource = function(source){\n    let sh = _Tech.selectSourceHandler(source, this.options_);\n\n    if (!sh) {\n      // Fall back to a native source hander when unsupported sources are\n      // deliberately set\n      if (_Tech.nativeSourceHandler) {\n        sh = _Tech.nativeSourceHandler;\n      } else {\n        log.error('No source hander found for the current source.');\n      }\n    }\n\n    // Dispose any existing source handler\n    this.disposeSourceHandler();\n    this.off('dispose', this.disposeSourceHandler);\n\n    // if we have a source and get another one\n    // then we are loading something new\n    // than clear all of our current tracks\n    if (this.currentSource_) {\n      this.clearTracks(['audio', 'video']);\n\n      this.currentSource_ = null;\n    }\n\n    if (sh !== _Tech.nativeSourceHandler) {\n\n      this.currentSource_ = source;\n\n      // Catch if someone replaced the src without calling setSource.\n      // If they do, set currentSource_ to null and dispose our source handler.\n      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n      this.one(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n\n    }\n\n    this.sourceHandler_ = sh.handleSource(source, this, this.options_);\n    this.on('dispose', this.disposeSourceHandler);\n\n    return this;\n  };\n\n  // On the first loadstart after setSource\n  _Tech.prototype.firstLoadStartListener_ = function() {\n    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n  };\n\n  // On successive loadstarts when setSource has not been called again\n  _Tech.prototype.successiveLoadStartListener_ = function() {\n    this.currentSource_ = null;\n    this.disposeSourceHandler();\n    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n  };\n\n  /*\n   * Clean up any existing source handler\n   */\n  _Tech.prototype.disposeSourceHandler = function() {\n    if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n      this.sourceHandler_.dispose();\n    }\n  };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nTech.registerTech('Tech', Tech);\nexport default Tech;\n","/**\n * @file audio-track-list.js\n */\nimport TrackList from './track-list';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * anywhere we call this function we diverge from the spec\n * as we only support one enabled audiotrack at a time\n *\n * @param {Array|AudioTrackList} list list to work on\n * @param {AudioTrack} track the track to skip\n */\nconst disableOthers = function(list, track) {\n  for (let i = 0; i < list.length; i++) {\n    if (track.id === list[i].id) {\n      continue;\n    }\n    // another audio track is enabled, disable it\n    list[i].enabled = false;\n  }\n};\n/**\n * A list of possible audio tracks. All functionality is in the\n * base class Tracklist and the spec for AudioTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n *\n * interface AudioTrackList : EventTarget {\n *   readonly attribute unsigned long length;\n *   getter AudioTrack (unsigned long index);\n *   AudioTrack? getTrackById(DOMString id);\n *\n *   attribute EventHandler onchange;\n *   attribute EventHandler onaddtrack;\n *   attribute EventHandler onremovetrack;\n * };\n *\n * @param {AudioTrack[]} tracks a list of audio tracks to instantiate the list with\n * @extends TrackList\n * @class AudioTrackList\n */\nclass AudioTrackList extends TrackList {\n  constructor(tracks = []) {\n    let list;\n\n    // make sure only 1 track is enabled\n    // sorted from last index to first index\n    for (let i = tracks.length - 1; i >= 0; i--) {\n      if (tracks[i].enabled) {\n        disableOthers(tracks, tracks[i]);\n        break;\n      }\n    }\n\n    // IE8 forces us to implement inheritance ourselves\n    // as it does not support Object.defineProperty properly\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n      for (let prop in TrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TrackList.prototype[prop];\n        }\n      }\n      for (let prop in AudioTrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = AudioTrackList.prototype[prop];\n        }\n      }\n    }\n\n    list = super(tracks, list);\n    list.changing_ = false;\n\n    return list;\n  }\n\n  addTrack_(track) {\n    if (track.enabled) {\n      disableOthers(this, track);\n    }\n\n    super.addTrack_(track);\n    // native tracks don't have this\n    if (!track.addEventListener) {\n      return;\n    }\n\n    track.addEventListener('enabledchange', () => {\n      // when we are disabling other tracks (since we don't support\n      // more than one track at a time) we will set changing_\n      // to true so that we don't trigger additional change events\n      if (this.changing_) {\n        return;\n      }\n      this.changing_ = true;\n      disableOthers(this, track);\n      this.changing_ = false;\n      this.trigger('change');\n    });\n  }\n\n  addTrack(track) {\n    this.addTrack_(track);\n  }\n\n  removeTrack(track) {\n    super.removeTrack_(track);\n  }\n\n}\n\nexport default AudioTrackList;\n","import {AudioTrackKind} from './track-enums';\nimport Track from './track';\nimport merge from '../utils/merge-options';\nimport * as browser from '../utils/browser.js';\n\n/**\n * A single audio text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack\n *\n * interface AudioTrack {\n *   readonly attribute DOMString id;\n *   readonly attribute DOMString kind;\n *   readonly attribute DOMString label;\n *   readonly attribute DOMString language;\n *   attribute boolean enabled;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @class AudioTrack\n */\nclass AudioTrack extends Track {\n  constructor(options = {}) {\n    let settings = merge(options, {\n      kind: AudioTrackKind[options.kind] || ''\n    });\n    // on IE8 this will be a document element\n    // for every other browser this will be a normal object\n    let track = super(settings);\n    let enabled = false;\n\n    if (browser.IS_IE8) {\n      for (let prop in AudioTrack.prototype) {\n        if (prop !== 'constructor') {\n          track[prop] = AudioTrack.prototype[prop];\n        }\n      }\n    }\n\n    Object.defineProperty(track, 'enabled', {\n      get() { return enabled; },\n      set(newEnabled) {\n        // an invalid or unchanged value\n        if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {\n          return;\n        }\n        enabled = newEnabled;\n        this.trigger('enabledchange');\n      }\n    });\n\n    // if the user sets this track to selected then\n    // set selected to that true value otherwise\n    // we keep it false\n    if (settings.enabled) {\n      track.enabled = settings.enabled;\n    }\n    track.loaded_ = true;\n\n    return track;\n  }\n}\n\nexport default AudioTrack;\n","/**\n * @file html-track-element-list.js\n */\n\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\nclass HtmlTrackElementList {\n  constructor(trackElements = []) {\n    let list = this;\n\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n\n      for (let prop in HtmlTrackElementList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = HtmlTrackElementList.prototype[prop];\n        }\n      }\n    }\n\n    list.trackElements_ = [];\n\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.trackElements_.length;\n      }\n    });\n\n    for (let i = 0, length = trackElements.length; i < length; i++) {\n      list.addTrackElement_(trackElements[i]);\n    }\n\n    if (browser.IS_IE8) {\n      return list;\n    }\n  }\n\n  addTrackElement_(trackElement) {\n    this.trackElements_.push(trackElement);\n  }\n\n  getTrackElementByTrack_(track) {\n    let trackElement_;\n\n    for (let i = 0, length = this.trackElements_.length; i < length; i++) {\n      if (track === this.trackElements_[i].track) {\n        trackElement_ = this.trackElements_[i];\n\n        break;\n      }\n    }\n\n    return trackElement_;\n  }\n\n  removeTrackElement_(trackElement) {\n    for (let i = 0, length = this.trackElements_.length; i < length; i++) {\n      if (trackElement === this.trackElements_[i]) {\n        this.trackElements_.splice(i, 1);\n\n        break;\n      }\n    }\n  }\n}\n\nexport default HtmlTrackElementList;\n","/**\n * @file html-track-element.js\n */\n\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport EventTarget from '../event-target';\nimport TextTrack from '../tracks/text-track';\n\nconst NONE = 0;\nconst LOADING = 1;\nconst LOADED = 2;\nconst ERROR = 3;\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement\n *\n * interface HTMLTrackElement : HTMLElement {\n *   attribute DOMString kind;\n *   attribute DOMString src;\n *   attribute DOMString srclang;\n *   attribute DOMString label;\n *   attribute boolean default;\n *\n *   const unsigned short NONE = 0;\n *   const unsigned short LOADING = 1;\n *   const unsigned short LOADED = 2;\n *   const unsigned short ERROR = 3;\n *   readonly attribute unsigned short readyState;\n *\n *   readonly attribute TextTrack track;\n * };\n *\n * @param {Object} options TextTrack configuration\n * @class HTMLTrackElement\n */\n\nclass HTMLTrackElement extends EventTarget {\n  constructor(options = {}) {\n    super();\n\n    let readyState,\n        trackElement = this;\n\n    if (browser.IS_IE8) {\n      trackElement = document.createElement('custom');\n\n      for (let prop in HTMLTrackElement.prototype) {\n        if (prop !== 'constructor') {\n          trackElement[prop] = HTMLTrackElement.prototype[prop];\n        }\n      }\n    }\n\n    let track = new TextTrack(options);\n\n    trackElement.kind = track.kind;\n    trackElement.src = track.src;\n    trackElement.srclang = track.language;\n    trackElement.label = track.label;\n    trackElement.default = track.default;\n\n    Object.defineProperty(trackElement, 'readyState', {\n      get() {\n        return readyState;\n      }\n    });\n\n    Object.defineProperty(trackElement, 'track', {\n      get() {\n        return track;\n      }\n    });\n\n    readyState = NONE;\n\n    track.addEventListener('loadeddata', function() {\n      readyState = LOADED;\n\n      trackElement.trigger({\n        type: 'load',\n        target: trackElement\n      });\n    });\n\n    if (browser.IS_IE8) {\n      return trackElement;\n    }\n  }\n}\n\nHTMLTrackElement.prototype.allowedEvents_ = {\n  load: 'load'\n};\n\nHTMLTrackElement.NONE = NONE;\nHTMLTrackElement.LOADING = LOADING;\nHTMLTrackElement.LOADED = LOADED;\nHTMLTrackElement.ERROR = ERROR;\n\nexport default HTMLTrackElement;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * A List of text track cues as defined in:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n *   readonly attribute unsigned long length;\n *   getter TextTrackCue (unsigned long index);\n *   TextTrackCue? getCueById(DOMString id);\n * };\n *\n * @param {Array} cues A list of cues to be initialized with\n * @class TextTrackCueList\n */\n\nclass TextTrackCueList {\n  constructor(cues) {\n    let list = this;\n\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n\n      for (let prop in TextTrackCueList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TextTrackCueList.prototype[prop];\n        }\n      }\n    }\n\n    TextTrackCueList.prototype.setCues_.call(list, cues);\n\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.length_;\n      }\n    });\n\n    if (browser.IS_IE8) {\n      return list;\n    }\n  }\n\n  /**\n   * A setter for cues in this list\n   *\n   * @param {Array} cues an array of cues\n   * @method setCues_\n   * @private\n   */\n  setCues_(cues) {\n    let oldLength = this.length || 0;\n    let i = 0;\n    let l = cues.length;\n\n    this.cues_ = cues;\n    this.length_ = cues.length;\n\n    let defineProp = function(index) {\n      if (!('' + index in this)) {\n        Object.defineProperty(this, '' + index, {\n          get() {\n            return this.cues_[index];\n          }\n        });\n      }\n    };\n\n    if (oldLength < l) {\n      i = oldLength;\n\n      for (; i < l; i++) {\n        defineProp.call(this, i);\n      }\n    }\n  }\n\n  /**\n   * Get a cue that is currently in the Cue list by id\n   *\n   * @param {String} id\n   * @method getCueById\n   * @return {Object} a single cue\n   */\n  getCueById(id) {\n    let result = null;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      let cue = this[i];\n\n      if (cue.id === id) {\n        result = cue;\n        break;\n      }\n    }\n\n    return result;\n  }\n}\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n  monospace:             'monospace',\n  sansSerif:             'sans-serif',\n  serif:                 'serif',\n  monospaceSansSerif:    '\"Andale Mono\", \"Lucida Console\", monospace',\n  monospaceSerif:        '\"Courier New\", monospace',\n  proportionalSansSerif: 'sans-serif',\n  proportionalSerif:     'serif',\n  casual:                '\"Comic Sans MS\", Impact, fantasy',\n  script:                '\"Monotype Corsiva\", cursive',\n  smallcaps:             '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n\n    player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n    player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n    // This used to be called during player init, but was causing an error\n    // if a track should show by default and the display hadn't loaded yet.\n    // Should probably be moved to an external track loader when we support\n    // tracks that don't need a display.\n    player.ready(Fn.bind(this, function() {\n      if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n        this.hide();\n        return;\n      }\n\n      player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n      let tracks = this.options_.playerOptions['tracks'] || [];\n      for (let i = 0; i < tracks.length; i++) {\n        let track = tracks[i];\n        this.player_.addRemoteTextTrack(track);\n      }\n\n      let modes = {'captions': 1, 'subtitles': 1};\n      let trackList = this.player_.textTracks();\n      let firstDesc;\n      let firstCaptions;\n\n      if (trackList) {\n        for (let i = 0; i < trackList.length; i++) {\n          let track = trackList[i];\n          if (track.default) {\n            if (track.kind === 'descriptions' && !firstDesc) {\n              firstDesc = track;\n            } else if (track.kind in modes && !firstCaptions) {\n              firstCaptions = track;\n            }\n          }\n        }\n\n        // We want to show the first default track but captions and subtitles\n        // take precedence over descriptions.\n        // So, display the first default captions or subtitles track\n        // and otherwise the first default descriptions track.\n        if (firstCaptions) {\n          firstCaptions.mode = 'showing';\n        } else if (firstDesc) {\n          firstDesc.mode = 'showing';\n        }\n      }\n    }));\n  }\n\n  /**\n   * Toggle display texttracks\n   *\n   * @method toggleDisplay\n   */\n  toggleDisplay() {\n    if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-text-track-display'\n    }, {\n      'aria-live': 'assertive',\n      'aria-atomic': 'true'\n    });\n  }\n\n  /**\n   * Clear display texttracks\n   *\n   * @method clearDisplay\n   */\n  clearDisplay() {\n    if (typeof window['WebVTT'] === 'function') {\n      window['WebVTT']['processCues'](window, [], this.el_);\n    }\n  }\n\n  /**\n   * Update display texttracks\n   *\n   * @method updateDisplay\n   */\n  updateDisplay() {\n    var tracks = this.player_.textTracks();\n\n    this.clearDisplay();\n\n    if (!tracks) {\n      return;\n    }\n\n    // Track display prioritization model: if multiple tracks are 'showing',\n    //  display the first 'subtitles' or 'captions' track which is 'showing',\n    //  otherwise display the first 'descriptions' track which is 'showing'\n\n    let descriptionsTrack = null;\n    let captionsSubtitlesTrack = null;\n\n    let i = tracks.length;\n    while (i--) {\n      let track = tracks[i];\n      if (track['mode'] === 'showing') {\n        if (track['kind'] === 'descriptions') {\n          descriptionsTrack = track;\n        } else {\n          captionsSubtitlesTrack = track;\n        }\n      }\n    }\n\n    if (captionsSubtitlesTrack) {\n      this.updateForTrack(captionsSubtitlesTrack);\n    } else if (descriptionsTrack) {\n      this.updateForTrack(descriptionsTrack);\n    }\n  }\n\n  /**\n   * Add texttrack to texttrack list\n   *\n   * @param {TextTrackObject} track Texttrack object to be added to list\n   * @method updateForTrack\n   */\n  updateForTrack(track) {\n    if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n      return;\n    }\n\n    let overrides = this.player_['textTrackSettings'].getValues();\n\n    let cues = [];\n    for (let i = 0; i < track['activeCues'].length; i++) {\n      cues.push(track['activeCues'][i]);\n    }\n\n    window['WebVTT']['processCues'](window, cues, this.el_);\n\n    let i = cues.length;\n    while (i--) {\n      let cue = cues[i];\n      if (!cue) {\n        continue;\n      }\n\n      let cueDiv = cue.displayState;\n      if (overrides.color) {\n        cueDiv.firstChild.style.color = overrides.color;\n      }\n      if (overrides.textOpacity) {\n        tryUpdateStyle(cueDiv.firstChild,\n                       'color',\n                       constructColor(overrides.color || '#fff',\n                                      overrides.textOpacity));\n      }\n      if (overrides.backgroundColor) {\n        cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n      }\n      if (overrides.backgroundOpacity) {\n        tryUpdateStyle(cueDiv.firstChild,\n                       'backgroundColor',\n                       constructColor(overrides.backgroundColor || '#000',\n                                      overrides.backgroundOpacity));\n      }\n      if (overrides.windowColor) {\n        if (overrides.windowOpacity) {\n          tryUpdateStyle(cueDiv,\n                         'backgroundColor',\n                         constructColor(overrides.windowColor, overrides.windowOpacity));\n        } else {\n          cueDiv.style.backgroundColor = overrides.windowColor;\n        }\n      }\n      if (overrides.edgeStyle) {\n        if (overrides.edgeStyle === 'dropshadow') {\n          cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'raised') {\n          cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'depressed') {\n          cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'uniform') {\n          cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n        }\n      }\n      if (overrides.fontPercent && overrides.fontPercent !== 1) {\n        const fontSize = window.parseFloat(cueDiv.style.fontSize);\n        cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n        cueDiv.style.height = 'auto';\n        cueDiv.style.top = 'auto';\n        cueDiv.style.bottom = '2px';\n      }\n      if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n        if (overrides.fontFamily === 'small-caps') {\n          cueDiv.firstChild.style.fontVariant = 'small-caps';\n        } else {\n          cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n        }\n      }\n    }\n  }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n  return 'rgba(' +\n    // color looks like \"#f0e\"\n    parseInt(color[1] + color[1], 16) + ',' +\n    parseInt(color[2] + color[2], 16) + ',' +\n    parseInt(color[3] + color[3], 16) + ',' +\n    opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n  //\n  try {\n    el.style[style] = rule;\n  } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n  let ret = ['kind', 'label', 'language', 'id',\n             'inBandMetadataTrackDispatchType',\n             'mode', 'src'].reduce((acc, prop, i) => {\n    if (track[prop]) {\n      acc[prop] = track[prop];\n    }\n    \n    return acc;\n  }, {\n    cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n      return {\n        startTime: cue.startTime,\n        endTime: cue.endTime,\n        text: cue.text,\n        id: cue.id\n      };\n    })\n  });\n\n  return ret;\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n\n  let trackEls = tech.$$('track');\n\n  let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n  let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n    let json = trackToJson_(trackEl.track);\n    if (trackEl.src) {\n      json.src = trackEl.src;\n    }\n    return json;\n  });\n\n  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n    return trackObjs.indexOf(track) === -1;\n  }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n  json.forEach(function(track) {\n    let addedTrack = tech.addRemoteTextTrack(track).track;\n    if (!track.src && track.cues) {\n      track.cues.forEach((cue) => addedTrack.addCue(cue));\n    }\n  });\n\n  return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport TrackList from './track-list';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * A list of possible text tracks. All functionality is in the\n * base class TrackList. The spec for TextTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n *   readonly attribute unsigned long length;\n *   getter TextTrack (unsigned long index);\n *   TextTrack? getTrackById(DOMString id);\n *\n *   attribute EventHandler onchange;\n *   attribute EventHandler onaddtrack;\n *   attribute EventHandler onremovetrack;\n * };\n *\n * @param {TextTrack[]} tracks A list of tracks to initialize the list with\n * @extends TrackList\n * @class TextTrackList\n */\nclass TextTrackList extends TrackList {\n  constructor(tracks = []) {\n    let list;\n\n    // IE8 forces us to implement inheritance ourselves\n    // as it does not support Object.defineProperty properly\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n      for (let prop in TrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TrackList.prototype[prop];\n        }\n      }\n      for (let prop in TextTrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TextTrackList.prototype[prop];\n        }\n      }\n    }\n\n    list = super(tracks, list);\n    return list;\n  }\n\n  addTrack_(track) {\n    super.addTrack_(track);\n    track.addEventListener('modechange', Fn.bind(this, function() {\n      this.trigger('change');\n    }));\n  }\n\n  /**\n   * Remove TextTrack from TextTrackList\n   * NOTE: Be mindful of what is passed in as it may be a HTMLTrackElement\n   *\n   * @param {TextTrack} rtrack\n   * @method removeTrack_\n   * @private\n   */\n  removeTrack_(rtrack) {\n    let track;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      if (this[i] === rtrack) {\n        track = this[i];\n        if (track.off) {\n          track.off();\n        }\n\n        this.tracks_.splice(i, 1);\n\n        break;\n      }\n    }\n\n    if (!track) {\n      return;\n    }\n\n    this.trigger({\n      track,\n      type: 'removetrack'\n    });\n  }\n\n  /**\n   * Get a TextTrack from TextTrackList by a tracks id\n   *\n   * @param {String} id - the id of the track to get\n   * @method getTrackById\n   * @return {TextTrack}\n   * @private\n   */\n  getTrackById(id) {\n    let result = null;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      let track = this[i];\n\n      if (track.id === id) {\n        result = track;\n        break;\n      }\n    }\n\n    return result;\n  }\n}\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n    this.hide();\n\n    // Grab `persistTextTrackSettings` from the player options if not passed in child options\n    if (options.persistTextTrackSettings === undefined) {\n      this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n    }\n\n    Events.on(this.$('.vjs-done-button'), 'click', Fn.bind(this, function() {\n      this.saveSettings();\n      this.hide();\n    }));\n\n    Events.on(this.$('.vjs-default-button'), 'click', Fn.bind(this, function() {\n      this.$('.vjs-fg-color > select').selectedIndex = 0;\n      this.$('.vjs-bg-color > select').selectedIndex = 0;\n      this.$('.window-color > select').selectedIndex = 0;\n      this.$('.vjs-text-opacity > select').selectedIndex = 0;\n      this.$('.vjs-bg-opacity > select').selectedIndex = 0;\n      this.$('.vjs-window-opacity > select').selectedIndex = 0;\n      this.$('.vjs-edge-style select').selectedIndex = 0;\n      this.$('.vjs-font-family select').selectedIndex = 0;\n      this.$('.vjs-font-percent select').selectedIndex = 2;\n      this.updateDisplay();\n    }));\n\n    Events.on(this.$('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n    if (this.options_.persistTextTrackSettings) {\n      this.restoreSettings();\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-caption-settings vjs-modal-overlay',\n      innerHTML: captionOptionsMenuTemplate()\n    });\n  }\n\n  /**\n   * Get texttrack settings\n   * Settings are\n   * .vjs-edge-style\n   * .vjs-font-family\n   * .vjs-fg-color\n   * .vjs-text-opacity\n   * .vjs-bg-color\n   * .vjs-bg-opacity\n   * .window-color\n   * .vjs-window-opacity\n   *\n   * @return {Object}\n   * @method getValues\n   */\n  getValues() {\n    const textEdge = getSelectedOptionValue(this.$('.vjs-edge-style select'));\n    const fontFamily = getSelectedOptionValue(this.$('.vjs-font-family select'));\n    const fgColor = getSelectedOptionValue(this.$('.vjs-fg-color > select'));\n    const textOpacity = getSelectedOptionValue(this.$('.vjs-text-opacity > select'));\n    const bgColor = getSelectedOptionValue(this.$('.vjs-bg-color > select'));\n    const bgOpacity = getSelectedOptionValue(this.$('.vjs-bg-opacity > select'));\n    const windowColor = getSelectedOptionValue(this.$('.window-color > select'));\n    const windowOpacity = getSelectedOptionValue(this.$('.vjs-window-opacity > select'));\n    const fontPercent = window['parseFloat'](getSelectedOptionValue(this.$('.vjs-font-percent > select')));\n\n    let result = {\n      'backgroundOpacity': bgOpacity,\n      'textOpacity': textOpacity,\n      'windowOpacity': windowOpacity,\n      'edgeStyle': textEdge,\n      'fontFamily': fontFamily,\n      'color': fgColor,\n      'backgroundColor': bgColor,\n      'windowColor': windowColor,\n      'fontPercent': fontPercent\n    };\n    for (let name in result) {\n      if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n        delete result[name];\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Set texttrack settings\n   * Settings are\n   * .vjs-edge-style\n   * .vjs-font-family\n   * .vjs-fg-color\n   * .vjs-text-opacity\n   * .vjs-bg-color\n   * .vjs-bg-opacity\n   * .window-color\n   * .vjs-window-opacity\n   *\n   * @param {Object} values Object with texttrack setting values\n   * @method setValues\n   */\n  setValues(values) {\n    setSelectedOption(this.$('.vjs-edge-style select'), values.edgeStyle);\n    setSelectedOption(this.$('.vjs-font-family select'), values.fontFamily);\n    setSelectedOption(this.$('.vjs-fg-color > select'), values.color);\n    setSelectedOption(this.$('.vjs-text-opacity > select'), values.textOpacity);\n    setSelectedOption(this.$('.vjs-bg-color > select'), values.backgroundColor);\n    setSelectedOption(this.$('.vjs-bg-opacity > select'), values.backgroundOpacity);\n    setSelectedOption(this.$('.window-color > select'), values.windowColor);\n    setSelectedOption(this.$('.vjs-window-opacity > select'), values.windowOpacity);\n\n    let fontPercent = values.fontPercent;\n\n    if (fontPercent) {\n      fontPercent = fontPercent.toFixed(2);\n    }\n\n    setSelectedOption(this.$('.vjs-font-percent > select'), fontPercent);\n  }\n\n  /**\n   * Restore texttrack settings\n   *\n   * @method restoreSettings\n   */\n  restoreSettings() {\n    let err, values;\n\n    try {\n      [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n      if (err) {\n        log.error(err);\n      }\n    } catch (e) {\n      log.warn(e);\n    }\n\n    if (values) {\n      this.setValues(values);\n    }\n  }\n\n  /**\n   * Save texttrack settings to local storage\n   *\n   * @method saveSettings\n   */\n  saveSettings() {\n    if (!this.options_.persistTextTrackSettings) {\n      return;\n    }\n\n    let values = this.getValues();\n    try {\n      if (Object.getOwnPropertyNames(values).length > 0) {\n        window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n      } else {\n        window.localStorage.removeItem('vjs-text-track-settings');\n      }\n    } catch (e) {\n      log.warn(e);\n    }\n  }\n\n  /**\n   * Update display of texttrack settings\n   *\n   * @method updateDisplay\n   */\n  updateDisplay() {\n    let ttDisplay = this.player_.getChild('textTrackDisplay');\n    if (ttDisplay) {\n      ttDisplay.updateDisplay();\n    }\n  }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n  let selectedOption;\n  // not all browsers support selectedOptions, so, fallback to options\n  if (target.selectedOptions) {\n    selectedOption = target.selectedOptions[0];\n  } else if (target.options) {\n    selectedOption = target.options[target.options.selectedIndex];\n  }\n\n  return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n  if (!value) {\n    return;\n  }\n\n  let i;\n  for (i = 0; i < target.options.length; i++) {\n    const option = target.options[i];\n    if (option.value === value) {\n      break;\n    }\n  }\n\n  target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n  let template = `<div class=\"vjs-tracksettings\">\n      <div class=\"vjs-tracksettings-colors\">\n        <div class=\"vjs-fg-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Foreground</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-text-opacity vjs-opacity\">\n              <select>\n                <option value=\"\">---</option>\n                <option value=\"1\">Opaque</option>\n                <option value=\"0.5\">Semi-Opaque</option>\n              </select>\n            </span>\n        </div> <!-- vjs-fg-color -->\n        <div class=\"vjs-bg-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Background</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-bg-opacity vjs-opacity\">\n                <select>\n                  <option value=\"\">---</option>\n                  <option value=\"1\">Opaque</option>\n                  <option value=\"0.5\">Semi-Transparent</option>\n                  <option value=\"0\">Transparent</option>\n                </select>\n            </span>\n        </div> <!-- vjs-bg-color -->\n        <div class=\"window-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Window</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-window-opacity vjs-opacity\">\n                <select>\n                  <option value=\"\">---</option>\n                  <option value=\"1\">Opaque</option>\n                  <option value=\"0.5\">Semi-Transparent</option>\n                  <option value=\"0\">Transparent</option>\n                </select>\n            </span>\n        </div> <!-- vjs-window-color -->\n      </div> <!-- vjs-tracksettings -->\n      <div class=\"vjs-tracksettings-font\">\n        <div class=\"vjs-font-percent vjs-tracksetting\">\n          <label class=\"vjs-label\">Font Size</label>\n          <select>\n            <option value=\"0.50\">50%</option>\n            <option value=\"0.75\">75%</option>\n            <option value=\"1.00\" selected>100%</option>\n            <option value=\"1.25\">125%</option>\n            <option value=\"1.50\">150%</option>\n            <option value=\"1.75\">175%</option>\n            <option value=\"2.00\">200%</option>\n            <option value=\"3.00\">300%</option>\n            <option value=\"4.00\">400%</option>\n          </select>\n        </div> <!-- vjs-font-percent -->\n        <div class=\"vjs-edge-style vjs-tracksetting\">\n          <label class=\"vjs-label\">Text Edge Style</label>\n          <select>\n            <option value=\"none\">None</option>\n            <option value=\"raised\">Raised</option>\n            <option value=\"depressed\">Depressed</option>\n            <option value=\"uniform\">Uniform</option>\n            <option value=\"dropshadow\">Dropshadow</option>\n          </select>\n        </div> <!-- vjs-edge-style -->\n        <div class=\"vjs-font-family vjs-tracksetting\">\n          <label class=\"vjs-label\">Font Family</label>\n          <select>\n            <option value=\"\">Default</option>\n            <option value=\"monospaceSerif\">Monospace Serif</option>\n            <option value=\"proportionalSerif\">Proportional Serif</option>\n            <option value=\"monospaceSansSerif\">Monospace Sans-Serif</option>\n            <option value=\"proportionalSansSerif\">Proportional Sans-Serif</option>\n            <option value=\"casual\">Casual</option>\n            <option value=\"script\">Script</option>\n            <option value=\"small-caps\">Small Caps</option>\n          </select>\n        </div> <!-- vjs-font-family -->\n      </div>\n    </div>\n    <div class=\"vjs-tracksettings-controls\">\n      <button class=\"vjs-default-button\">Defaults</button>\n      <button class=\"vjs-done-button\">Done</button>\n    </div>`;\n\n    return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport {TextTrackKind, TextTrackMode} from './track-enums';\nimport log from '../utils/log.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport Track from './track.js';\nimport { isCrossOrigin } from '../utils/url.js';\nimport XHR from 'xhr';\nimport merge from '../utils/merge-options';\nimport * as browser from '../utils/browser.js';\n\n/**\n * takes a webvtt file contents and parses it into cues\n *\n * @param {String} srcContent webVTT file contents\n * @param {Track} track track to addcues to\n */\nconst parseCues = function(srcContent, track) {\n  let parser = new window.WebVTT.Parser(window,\n                                        window.vttjs,\n                                        window.WebVTT.StringDecoder());\n  let errors = [];\n\n  parser.oncue = function(cue) {\n    track.addCue(cue);\n  };\n\n  parser.onparsingerror = function(error) {\n    errors.push(error);\n  };\n\n  parser.onflush = function() {\n    track.trigger({\n      type: 'loadeddata',\n      target: track\n    });\n  };\n\n  parser.parse(srcContent);\n  if (errors.length > 0) {\n    if (console.groupCollapsed) {\n      console.groupCollapsed(`Text Track parsing errors for ${track.src}`);\n    }\n    errors.forEach((error) => log.error(error));\n    if (console.groupEnd) {\n      console.groupEnd();\n    }\n  }\n\n  parser.flush();\n};\n\n/**\n * load a track from a  specifed url\n *\n * @param {String} src url to load track from\n * @param {Track} track track to addcues to\n */\nconst loadTrack = function(src, track) {\n  let opts = {\n    uri: src\n  };\n  let crossOrigin = isCrossOrigin(src);\n\n  if (crossOrigin) {\n    opts.cors = crossOrigin;\n  }\n\n  XHR(opts, Fn.bind(this, function(err, response, responseBody) {\n    if (err) {\n      return log.error(err, response);\n    }\n\n    track.loaded_ = true;\n\n    // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n    // NOTE: this is only used for the alt/video.novtt.js build\n    if (typeof window.WebVTT !== 'function') {\n      if (track.tech_) {\n        let loadHandler = () => parseCues(responseBody, track);\n        track.tech_.on('vttjsloaded', loadHandler);\n        track.tech_.on('vttjserror', () => {\n          log.error(`vttjs failed to load, stopping trying to process ${track.src}`);\n          track.tech_.off('vttjsloaded', loadHandler);\n        });\n\n      }\n    } else {\n      parseCues(responseBody, track);\n    }\n\n  }));\n};\n\n/**\n * A single text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n *   readonly attribute TextTrackKind kind;\n *   readonly attribute DOMString label;\n *   readonly attribute DOMString language;\n *\n *   readonly attribute DOMString id;\n *   readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n *   attribute TextTrackMode mode;\n *\n *   readonly attribute TextTrackCueList? cues;\n *   readonly attribute TextTrackCueList? activeCues;\n *\n *   void addCue(TextTrackCue cue);\n *   void removeCue(TextTrackCue cue);\n *\n *   attribute EventHandler oncuechange;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @extends Track\n * @class TextTrack\n */\nclass TextTrack extends Track {\n  constructor(options = {}) {\n    if (!options.tech) {\n      throw new Error('A tech was not provided.');\n    }\n\n    let settings = merge(options, {\n      kind: TextTrackKind[options.kind] || 'subtitles',\n      language: options.language || options.srclang || ''\n    });\n    let mode = TextTrackMode[settings.mode] || 'disabled';\n    let default_ = settings.default;\n\n    if (settings.kind === 'metadata' || settings.kind === 'chapters') {\n      mode = 'hidden';\n    }\n    // on IE8 this will be a document element\n    // for every other browser this will be a normal object\n    let tt = super(settings);\n    tt.tech_ = settings.tech;\n\n    if (browser.IS_IE8) {\n      for (let prop in TextTrack.prototype) {\n        if (prop !== 'constructor') {\n          tt[prop] = TextTrack.prototype[prop];\n        }\n      }\n    }\n\n    tt.cues_ = [];\n    tt.activeCues_ = [];\n\n    let cues = new TextTrackCueList(tt.cues_);\n    let activeCues = new TextTrackCueList(tt.activeCues_);\n    let changed = false;\n    let timeupdateHandler = Fn.bind(tt, function() {\n      this.activeCues;\n      if (changed) {\n        this.trigger('cuechange');\n        changed = false;\n      }\n    });\n\n    if (mode !== 'disabled') {\n      tt.tech_.on('timeupdate', timeupdateHandler);\n    }\n\n    Object.defineProperty(tt, 'default', {\n      get() {\n        return default_;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'mode', {\n      get() {\n        return mode;\n      },\n      set(newMode) {\n        if (!TextTrackMode[newMode]) {\n          return;\n        }\n        mode = newMode;\n        if (mode === 'showing') {\n          this.tech_.on('timeupdate', timeupdateHandler);\n        }\n        this.trigger('modechange');\n      }\n    });\n\n    Object.defineProperty(tt, 'cues', {\n      get() {\n        if (!this.loaded_) {\n          return null;\n        }\n\n        return cues;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'activeCues', {\n      get() {\n        if (!this.loaded_) {\n          return null;\n        }\n\n        // nothing to do\n        if (this.cues.length === 0) {\n          return activeCues;\n        }\n\n        let ct = this.tech_.currentTime();\n        let active = [];\n\n        for (let i = 0, l = this.cues.length; i < l; i++) {\n          let cue = this.cues[i];\n\n          if (cue.startTime <= ct && cue.endTime >= ct) {\n            active.push(cue);\n          } else if (cue.startTime === cue.endTime &&\n                     cue.startTime <= ct &&\n                     cue.startTime + 0.5 >= ct) {\n            active.push(cue);\n          }\n        }\n\n        changed = false;\n\n        if (active.length !== this.activeCues_.length) {\n          changed = true;\n        } else {\n          for (let i = 0; i < active.length; i++) {\n            if (this.activeCues_.indexOf(active[i]) === -1) {\n              changed = true;\n            }\n          }\n        }\n\n        this.activeCues_ = active;\n        activeCues.setCues_(this.activeCues_);\n\n        return activeCues;\n      },\n      set() {}\n    });\n\n    if (settings.src) {\n      tt.src = settings.src;\n      loadTrack(settings.src, tt);\n    } else {\n      tt.loaded_ = true;\n    }\n\n    return tt;\n  }\n\n  /**\n   * add a cue to the internal list of cues\n   *\n   * @param {Object} cue the cue to add to our internal list\n   * @method addCue\n   */\n  addCue(cue) {\n    let tracks = this.tech_.textTracks();\n\n    if (tracks) {\n      for (let i = 0; i < tracks.length; i++) {\n        if (tracks[i] !== this) {\n          tracks[i].removeCue(cue);\n        }\n      }\n    }\n\n    this.cues_.push(cue);\n    this.cues.setCues_(this.cues_);\n  }\n\n  /**\n   * remvoe a cue from our internal list\n   *\n   * @param {Object} removeCue the cue to remove from our internal list\n   * @method removeCue\n   */\n  removeCue(removeCue) {\n    let removed = false;\n\n    for (let i = 0, l = this.cues_.length; i < l; i++) {\n      let cue = this.cues_[i];\n\n      if (cue === removeCue) {\n        this.cues_.splice(i, 1);\n        removed = true;\n      }\n    }\n\n    if (removed) {\n      this.cues.setCues_(this.cues_);\n    }\n  }\n}\n\n/**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n  cuechange: 'cuechange'\n};\n\nexport default TextTrack;\n","/**\n * @file track-kinds.js\n */\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind\n *\n * enum VideoTrackKind {\n *   \"alternative\",\n *   \"captions\",\n *   \"main\",\n *   \"sign\",\n *   \"subtitles\",\n *   \"commentary\",\n *   \"\",\n * };\n */\nconst VideoTrackKind = {\n  alternative: 'alternative',\n  captions: 'captions',\n  main: 'main',\n  sign: 'sign',\n  subtitles: 'subtitles',\n  commentary: 'commentary',\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind\n *\n * enum AudioTrackKind {\n *   \"alternative\",\n *   \"descriptions\",\n *   \"main\",\n *   \"main-desc\",\n *   \"translation\",\n *   \"commentary\",\n *   \"\",\n * };\n */\nconst AudioTrackKind = {\n  alternative: 'alternative',\n  descriptions: 'descriptions',\n  main: 'main',\n  'main-desc': 'main-desc',\n  translation: 'translation',\n  commentary: 'commentary',\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind {\n *   \"subtitles\",\n *   \"captions\",\n *   \"descriptions\",\n *   \"chapters\",\n *   \"metadata\"\n * };\n */\nconst TextTrackKind = {\n  subtitles: 'subtitles',\n  captions: 'captions',\n  descriptions: 'descriptions',\n  chapters: 'chapters',\n  metadata: 'metadata'\n};\n\n\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\",  \"hidden\",  \"showing\" };\n */\nconst TextTrackMode = {\n  disabled: 'disabled',\n  hidden: 'hidden',\n  showing: 'showing'\n};\n\n/* jshint ignore:start */\n// we ignore jshint here because it does not see\n// AudioTrackKind as defined here\nexport default { VideoTrackKind, AudioTrackKind, TextTrackKind, TextTrackMode };\n/* jshint ignore:end */\n\n","/**\n * @file track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * Common functionaliy between Text, Audio, and Video TrackLists\n * Interfaces defined in the following spec:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html\n *\n * @param {Track[]} tracks A list of tracks to initialize the list with\n * @param {Object} list the child object with inheritance done manually for ie8\n * @extends EventTarget\n * @class TrackList\n */\nclass TrackList extends EventTarget {\n  constructor(tracks = [], list = null) {\n    super();\n    if (!list) {\n      list = this;\n      if (browser.IS_IE8) {\n        list = document.createElement('custom');\n        for (let prop in TrackList.prototype) {\n          if (prop !== 'constructor') {\n            list[prop] = TrackList.prototype[prop];\n          }\n        }\n      }\n    }\n\n    list.tracks_ = [];\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.tracks_.length;\n      }\n    });\n\n    for (let i = 0; i < tracks.length; i++) {\n      list.addTrack_(tracks[i]);\n    }\n\n    return list;\n  }\n\n  /**\n   * Add a Track from TrackList\n   *\n   * @param {Mixed} track\n   * @method addTrack_\n   * @private\n   */\n  addTrack_(track) {\n    let index = this.tracks_.length;\n\n    if (!('' + index in this)) {\n      Object.defineProperty(this, index, {\n        get() {\n          return this.tracks_[index];\n        }\n      });\n    }\n\n    // Do not add duplicate tracks\n    if (this.tracks_.indexOf(track) === -1) {\n      this.tracks_.push(track);\n      this.trigger({\n        track,\n        type: 'addtrack'\n      });\n    }\n  }\n\n  /**\n   * Remove a Track from TrackList\n   *\n   * @param {Track} rtrack track to be removed\n   * @method removeTrack_\n   * @private\n   */\n  removeTrack_(rtrack) {\n    let track;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      if (this[i] === rtrack) {\n        track = this[i];\n        if (track.off) {\n          track.off();\n        }\n\n        this.tracks_.splice(i, 1);\n\n        break;\n      }\n    }\n\n    if (!track) {\n      return;\n    }\n\n    this.trigger({\n      track,\n      type: 'removetrack'\n    });\n  }\n\n  /**\n   * Get a Track from the TrackList by a tracks id\n   *\n   * @param {String} id - the id of the track to get\n   * @method getTrackById\n   * @return {Track}\n   * @private\n   */\n  getTrackById(id) {\n    let result = null;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      let track = this[i];\n      if (track.id === id) {\n        result = track;\n        break;\n      }\n    }\n\n    return result;\n  }\n}\n\n/**\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTrackList.prototype.allowedEvents_ = {\n  change: 'change',\n  addtrack: 'addtrack',\n  removetrack: 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TrackList.prototype.allowedEvents_) {\n  TrackList.prototype['on' + event] = null;\n}\n\nexport default TrackList;\n","/**\n * @file track.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport * as Guid from '../utils/guid.js';\nimport EventTarget from '../event-target';\n\n/**\n * setup the common parts of an audio, video, or text track\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html\n *\n * @param {String} type The type of track we are dealing with audio|video|text\n * @param {Object=} options Object of option names and values\n * @extends EventTarget\n * @class Track\n */\nclass Track extends EventTarget {\n  constructor(options = {}) {\n    super();\n\n    let track = this;\n    if (browser.IS_IE8) {\n      track = document.createElement('custom');\n      for (let prop in Track.prototype) {\n        if (prop !== 'constructor') {\n          track[prop] = Track.prototype[prop];\n        }\n      }\n    }\n\n    let trackProps = {\n      id: options.id || 'vjs_track_' + Guid.newGUID(),\n      kind: options.kind || '',\n      label: options.label || '',\n      language: options.language || ''\n    };\n\n    for (let key in trackProps) {\n      Object.defineProperty(track, key, {\n        get() { return trackProps[key]; },\n        set() {}\n      });\n    }\n\n    return track;\n  }\n}\n\nexport default Track;\n","/**\n * @file video-track-list.js\n */\nimport TrackList from './track-list';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * disable other video tracks before selecting the new one\n *\n * @param {Array|VideoTrackList} list list to work on\n * @param {VideoTrack} track the track to skip\n */\nconst disableOthers = function(list, track) {\n  for (let i = 0; i < list.length; i++) {\n    if (track.id === list[i].id) {\n      continue;\n    }\n    // another audio track is enabled, disable it\n    list[i].selected = false;\n  }\n};\n\n/**\n* A list of possiblee video tracks. Most functionality is in the\n * base class Tracklist and the spec for VideoTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n *\n * interface VideoTrackList : EventTarget {\n *   readonly attribute unsigned long length;\n *   getter VideoTrack (unsigned long index);\n *   VideoTrack? getTrackById(DOMString id);\n *   readonly attribute long selectedIndex;\n *\n *   attribute EventHandler onchange;\n *   attribute EventHandler onaddtrack;\n *   attribute EventHandler onremovetrack;\n * };\n *\n * @param {VideoTrack[]} tracks a list of video tracks to instantiate the list with\n # @extends TrackList\n * @class VideoTrackList\n */\nclass VideoTrackList extends TrackList {\n\n  constructor(tracks = []) {\n    let list;\n\n    // make sure only 1 track is enabled\n    // sorted from last index to first index\n    for (let i = tracks.length - 1; i >= 0; i--) {\n      if (tracks[i].selected) {\n        disableOthers(tracks, tracks[i]);\n        break;\n      }\n    }\n\n    // IE8 forces us to implement inheritance ourselves\n    // as it does not support Object.defineProperty properly\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n      for (let prop in TrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TrackList.prototype[prop];\n        }\n      }\n      for (let prop in VideoTrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = VideoTrackList.prototype[prop];\n        }\n      }\n    }\n\n    list = super(tracks, list);\n    list.changing_ = false;\n\n    Object.defineProperty(list, 'selectedIndex', {\n      get() {\n        for (let i = 0; i < this.length; i++) {\n          if (this[i].selected) {\n            return i;\n          }\n        }\n        return -1;\n      },\n      set() {}\n    });\n\n    return list;\n  }\n\n  addTrack_(track) {\n    if (track.selected) {\n      disableOthers(this, track);\n    }\n\n    super.addTrack_(track);\n    // native tracks don't have this\n    if (!track.addEventListener) {\n      return;\n    }\n    track.addEventListener('selectedchange', () => {\n      if (this.changing_) {\n        return;\n      }\n      this.changing_ = true;\n      disableOthers(this, track);\n      this.changing_ = false;\n      this.trigger('change');\n    });\n  }\n\n  addTrack(track) {\n    this.addTrack_(track);\n  }\n\n  removeTrack(track) {\n    super.removeTrack_(track);\n  }\n\n}\n\nexport default VideoTrackList;\n","import {VideoTrackKind} from './track-enums';\nimport Track from './track';\nimport merge from '../utils/merge-options';\nimport * as browser from '../utils/browser.js';\n\n/**\n * A single video text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack\n *\n * interface VideoTrack {\n *   readonly attribute DOMString id;\n *   readonly attribute DOMString kind;\n *   readonly attribute DOMString label;\n *   readonly attribute DOMString language;\n *   attribute boolean selected;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @class VideoTrack\n */\nclass VideoTrack extends Track {\n  constructor(options = {}) {\n    let settings = merge(options, {\n      kind: VideoTrackKind[options.kind] || ''\n    });\n\n    // on IE8 this will be a document element\n    // for every other browser this will be a normal object\n    let track = super(settings);\n    let selected = false;\n\n    if (browser.IS_IE8) {\n      for (let prop in VideoTrack.prototype) {\n        if (prop !== 'constructor') {\n          track[prop] = VideoTrack.prototype[prop];\n        }\n      }\n    }\n\n    Object.defineProperty(track, 'selected', {\n      get() { return selected; },\n      set(newSelected) {\n        // an invalid or unchanged value\n        if (typeof newSelected !== 'boolean' || newSelected === selected) {\n          return;\n        }\n        selected = newSelected;\n        this.trigger('selectedchange');\n      }\n    });\n\n    // if the user sets this track to selected then\n    // set selected to that true value otherwise\n    // we keep it false\n    if (settings.selected) {\n      track.selected = settings.selected;\n    }\n\n    return track;\n  }\n}\n\nexport default VideoTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\n\n// The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT) && !IS_IPAD;\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n  var match = USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_EDGE = (/Edge/i).test(USER_AGENT);\nexport const IS_CHROME = !IS_EDGE && (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param  {Object} Buffered object\n * @param  {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n  var bufferedDuration = 0,\n      start, end;\n\n  if (!duration) {\n    return 0;\n  }\n\n  if (!buffered || !buffered.length) {\n    buffered = createTimeRange(0, 0);\n  }\n\n  for (let i = 0; i < buffered.length; i++){\n    start = buffered.start(i);\n    end   = buffered.end(i);\n\n    // buffered end can be bigger than duration by a very small fraction\n    if (end > duration) {\n      end = duration;\n    }\n\n    bufferedDuration += end - start;\n  }\n\n  return bufferedDuration / duration;\n}\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport  * as Guid from './guid.js';\nimport log from './log.js';\nimport tsml from 'tsml';\n\n/**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @param  {String} str\n * @return {Boolean}\n */\nfunction isNonBlankString(str) {\n  return typeof str === 'string' && /\\S/.test(str);\n}\n\n/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @param  {String} str\n * @return {Boolean}\n */\nfunction throwIfWhitespace(str) {\n  if (/\\s/.test(str)) {\n    throw new Error('class has illegal whitespace characters');\n  }\n}\n\n/**\n * Produce a regular expression for matching a class name.\n *\n * @param  {String} className\n * @return {RegExp}\n */\nfunction classRegExp(className) {\n  return new RegExp('(^|\\\\s)' + className + '($|\\\\s)');\n}\n\n/**\n * Creates functions to query the DOM using a given method.\n *\n * @function createQuerier\n * @private\n * @param  {String} method\n * @return {Function}\n */\nfunction createQuerier(method) {\n  return function (selector, context) {\n    if (!isNonBlankString(selector)) {\n      return document[method](null);\n    }\n    if (isNonBlankString(context)) {\n      context = document.querySelector(context);\n    }\n    return (isEl(context) ? context : document)[method](selector);\n  };\n}\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param  {String} [tagName='div'] Name of tag to be created.\n * @param  {Object} [properties={}] Element properties to be applied.\n * @param  {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}, attributes={}){\n  let el = document.createElement(tagName);\n\n  Object.getOwnPropertyNames(properties).forEach(function(propName){\n    let val = properties[propName];\n\n    // See #2176\n    // We originally were accepting both properties and attributes in the\n    // same object, but that doesn't work so well.\n    if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n      log.warn(tsml`Setting attributes in the second argument of createEl()\n                has been deprecated. Use the third argument instead.\n                createEl(type, properties, attributes). Attempting to set ${propName} to ${val}.`);\n      el.setAttribute(propName, val);\n    } else {\n      el[propName] = val;\n    }\n  });\n\n  Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n    let val = attributes[attrName];\n    el.setAttribute(attrName, attributes[attrName]);\n  });\n\n  return el;\n}\n\n/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param  {Element} el\n * @param  {String} text\n * @return {Element}\n * @function textContent\n */\nexport function textContent(el, text) {\n  if (typeof el.textContent === 'undefined') {\n    el.innerText = text;\n  } else {\n    el.textContent = text;\n  }\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param  {Element} child   Element to insert\n * @param  {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n  let id = el[elIdAttr];\n\n  if (!id) {\n    id = el[elIdAttr] = Guid.newGUID();\n  }\n\n  if (!elData[id]) {\n    elData[id] = {};\n  }\n\n  return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param  {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n  const id = el[elIdAttr];\n\n  if (!id) {\n    return false;\n  }\n\n  return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param  {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n  let id = el[elIdAttr];\n\n  if (!id) {\n    return;\n  }\n\n  // Remove all stored data\n  delete elData[id];\n\n  // Remove the elIdAttr property from the DOM node\n  try {\n    delete el[elIdAttr];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(elIdAttr);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[elIdAttr] = null;\n    }\n  }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @function hasElClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nexport function hasElClass(element, classToCheck) {\n  if (element.classList) {\n    return element.classList.contains(classToCheck);\n  } else {\n    throwIfWhitespace(classToCheck);\n    return classRegExp(classToCheck).test(element.className);\n  }\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @function addElClass\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nexport function addElClass(element, classToAdd) {\n  if (element.classList) {\n    element.classList.add(classToAdd);\n\n  // Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n  // in the case of classList not being supported.\n  } else if (!hasElClass(element, classToAdd)) {\n    element.className = (element.className + ' ' + classToAdd).trim();\n  }\n\n  return element;\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @function removeElClass\n * @param {Element} element    Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\nexport function removeElClass(element, classToRemove) {\n  if (element.classList) {\n    element.classList.remove(classToRemove);\n  } else {\n    throwIfWhitespace(classToRemove);\n    element.className = element.className.split(/\\s+/).filter(function(c) {\n      return c !== classToRemove;\n    }).join(' ');\n  }\n\n  return element;\n}\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @function toggleElClass\n * @param    {Element} element\n * @param    {String} classToToggle\n * @param    {Boolean|Function} [predicate]\n *           Can be a function that returns a Boolean. If `true`, the class\n *           will be added; if `false`, the class will be removed. If not\n *           given, the class will be added if not present and vice versa.\n */\nexport function toggleElClass(element, classToToggle, predicate) {\n\n  // This CANNOT use `classList` internally because IE does not support the\n  // second parameter to the `classList.toggle()` method! Which is fine because\n  // `classList` will be used by the add/remove functions.\n  let has = hasElClass(element, classToToggle);\n\n  if (typeof predicate === 'function') {\n    predicate = predicate(element, classToToggle);\n  }\n\n  if (typeof predicate !== 'boolean') {\n    predicate = !has;\n  }\n\n  // If the necessary class operation matches the current state of the\n  // element, no action is required.\n  if (predicate === has) {\n    return;\n  }\n\n  if (predicate) {\n    addElClass(element, classToToggle);\n  } else {\n    removeElClass(element, classToToggle);\n  }\n\n  return element;\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param  {Element} el         Target element.\n * @param  {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n  Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n    let attrValue = attributes[attrName];\n\n    if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n      el.removeAttribute(attrName);\n    } else {\n      el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n    }\n  });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @function blockTextSelection\n */\nexport function blockTextSelection() {\n  document.body.focus();\n  document.onselectstart = function() {\n    return false;\n  };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @function unblockTextSelection\n */\nexport function unblockTextSelection() {\n  document.onselectstart = function() {\n    return true;\n  };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @function findElPosition\n * @param {Element} el Element from which to get offset\n * @return {Object}\n */\nexport function findElPosition(el) {\n  let box;\n\n  if (el.getBoundingClientRect && el.parentNode) {\n    box = el.getBoundingClientRect();\n  }\n\n  if (!box) {\n    return {\n      left: 0,\n      top: 0\n    };\n  }\n\n  const docEl = document.documentElement;\n  const body = document.body;\n\n  const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n  const scrollLeft = window.pageXOffset || body.scrollLeft;\n  const left = box.left + scrollLeft - clientLeft;\n\n  const clientTop = docEl.clientTop || body.clientTop || 0;\n  const scrollTop = window.pageYOffset || body.scrollTop;\n  const top = box.top + scrollTop - clientTop;\n\n  // Android sometimes returns slightly off decimal values, so need to round\n  return {\n    left: Math.round(left),\n    top: Math.round(top)\n  };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @function getPointerPosition\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object} This object will have x and y coordinates corresponding to the mouse position\n */\nexport function getPointerPosition(el, event) {\n  let position = {};\n  let box = findElPosition(el);\n  let boxW = el.offsetWidth;\n  let boxH = el.offsetHeight;\n\n  let boxY = box.top;\n  let boxX = box.left;\n  let pageY = event.pageY;\n  let pageX = event.pageX;\n\n  if (event.changedTouches) {\n    pageX = event.changedTouches[0].pageX;\n    pageY = event.changedTouches[0].pageY;\n  }\n\n  position.y = Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n  position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n  return position;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @function isEl\n * @param    {Mixed} value\n * @return   {Boolean}\n */\nexport function isEl(value) {\n  return !!value && typeof value === 'object' && value.nodeType === 1;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param  {Mixed} value\n * @return {Boolean}\n */\nexport function isTextNode(value) {\n  return !!value && typeof value === 'object' && value.nodeType === 3;\n}\n\n/**\n * Empties the contents of an element.\n *\n * @function emptyEl\n * @param    {Element} el\n * @return   {Element}\n */\nexport function emptyEl(el) {\n  while (el.firstChild) {\n    el.removeChild(el.firstChild);\n  }\n  return el;\n}\n\n/**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but protects\n * from falling into the trap of simply writing to `innerHTML`, which is\n * an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @function normalizeContent\n * @param    {String|Element|TextNode|Array|Function} content\n * @return   {Array}\n */\nexport function normalizeContent(content) {\n\n  // First, invoke content if it is a function. If it produces an array,\n  // that needs to happen before normalization.\n  if (typeof content === 'function') {\n    content = content();\n  }\n\n  // Next up, normalize to an array, so one or many items can be normalized,\n  // filtered, and returned.\n  return (Array.isArray(content) ? content : [content]).map(value => {\n\n    // First, invoke value if it is a function to produce a new value,\n    // which will be subsequently normalized to a Node of some kind.\n    if (typeof value === 'function') {\n      value = value();\n    }\n\n    if (isEl(value) || isTextNode(value)) {\n      return value;\n    }\n\n    if (typeof value === 'string' && /\\S/.test(value)) {\n      return document.createTextNode(value);\n    }\n  }).filter(value => value);\n}\n\n/**\n * Normalizes and appends content to an element.\n *\n * @function appendContent\n * @param    {Element} el\n * @param    {String|Element|TextNode|Array|Function} content\n *           See: `normalizeContent`\n * @return   {Element}\n */\nexport function appendContent(el, content) {\n  normalizeContent(content).forEach(node => el.appendChild(node));\n  return el;\n}\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @function insertContent\n * @param    {Element} el\n * @param    {String|Element|TextNode|Array|Function} content\n *           See: `normalizeContent`\n * @return   {Element}\n */\nexport function insertContent(el, content) {\n  return appendContent(emptyEl(el), content);\n}\n\n/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $\n * @param    {String} selector\n *           A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param    {Element|String} [context=document]\n *           A DOM element within which to query. Can also be a selector\n *           string in which case the first matching element will be used\n *           as context. If missing (or no element matches selector), falls\n *           back to `document`.\n *\n * @return   {Element|null}\n */\nexport const $ = createQuerier('querySelector');\n\n/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $$\n * @param    {String} selector\n *           A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param    {Element|String} [context=document]\n *           A DOM element within which to query. Can also be a selector\n *           string in which case the first matching element will be used\n *           as context. If missing (or no element matches selector), falls\n *           back to `document`.\n *\n * @return   {NodeList}\n */\nexport const $$ = createQuerier('querySelectorAll');\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport  * as Dom from './dom.js';\nimport  * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String|Array}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(on, elem, type, fn);\n  }\n\n  let data = Dom.getElData(elem);\n\n  // We need a place to store all our handler data\n  if (!data.handlers) data.handlers = {};\n\n  if (!data.handlers[type]) data.handlers[type] = [];\n\n  if (!fn.guid) fn.guid = Guid.newGUID();\n\n  data.handlers[type].push(fn);\n\n  if (!data.dispatcher) {\n    data.disabled = false;\n\n    data.dispatcher = function (event, hash){\n\n      if (data.disabled) return;\n      event = fixEvent(event);\n\n      var handlers = data.handlers[event.type];\n\n      if (handlers) {\n        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n        var handlersCopy = handlers.slice(0);\n\n        for (var m = 0, n = handlersCopy.length; m < n; m++) {\n          if (event.isImmediatePropagationStopped()) {\n            break;\n          } else {\n            handlersCopy[m].call(elem, event, hash);\n          }\n        }\n      }\n    };\n  }\n\n  if (data.handlers[type].length === 1) {\n    if (elem.addEventListener) {\n      elem.addEventListener(type, data.dispatcher, false);\n    } else if (elem.attachEvent) {\n      elem.attachEvent('on' + type, data.dispatcher);\n    }\n  }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n  // Don't want to add a cache object through getElData if not needed\n  if (!Dom.hasElData(elem)) return;\n\n  let data = Dom.getElData(elem);\n\n  // If no events exist, nothing to unbind\n  if (!data.handlers) { return; }\n\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(off, elem, type, fn);\n  }\n\n  // Utility function\n  var removeType = function(t){\n     data.handlers[t] = [];\n     _cleanUpEvents(elem,t);\n  };\n\n  // Are we removing all bound events?\n  if (!type) {\n    for (let t in data.handlers) removeType(t);\n    return;\n  }\n\n  var handlers = data.handlers[type];\n\n  // If no handlers exist, nothing to unbind\n  if (!handlers) return;\n\n  // If no listener was provided, remove all listeners for type\n  if (!fn) {\n    removeType(type);\n    return;\n  }\n\n  // We're only removing a single handler\n  if (fn.guid) {\n    for (let n = 0; n < handlers.length; n++) {\n      if (handlers[n].guid === fn.guid) {\n        handlers.splice(n--, 1);\n      }\n    }\n  }\n\n  _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param  {Element|Object}      elem  Element to trigger an event on\n * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param  {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n  // Fetches element data and a reference to the parent (for bubbling).\n  // Don't want to add a data object to cache for every parent,\n  // so checking hasElData first.\n  var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n  var parent = elem.parentNode || elem.ownerDocument;\n      // type = event.type || event,\n      // handler;\n\n  // If an event name was passed as a string, creates an event out of it\n  if (typeof event === 'string') {\n    event = { type:event, target:elem };\n  }\n  // Normalizes the event properties.\n  event = fixEvent(event);\n\n  // If the passed element has a dispatcher, executes the established handlers.\n  if (elemData.dispatcher) {\n    elemData.dispatcher.call(elem, event, hash);\n  }\n\n  // Unless explicitly stopped or the event does not bubble (e.g. media events)\n    // recursively calls this function to bubble the event up the DOM.\n    if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n      trigger.call(null, parent, event, hash);\n\n  // If at the top of the DOM, triggers the default action unless disabled.\n  } else if (!parent && !event.defaultPrevented) {\n    var targetData = Dom.getElData(event.target);\n\n    // Checks if the target has a default action for this event.\n    if (event.target[event.type]) {\n      // Temporarily disables event dispatching on the target as we have already executed the handler.\n      targetData.disabled = true;\n      // Executes the default action.\n      if (typeof event.target[event.type] === 'function') {\n        event.target[event.type]();\n      }\n      // Re-enables event dispatching.\n      targetData.disabled = false;\n    }\n  }\n\n  // Inform the triggerer if the default was prevented by returning false\n  return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param  {Element|Object}   elem Element or object to\n * @param  {String|Array}   type Name/type of event\n * @param  {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(one, elem, type, fn);\n  }\n  var func = function(){\n    off(elem, type, func);\n    fn.apply(this, arguments);\n  };\n  // copy the guid to the new function so it can removed using the original function's ID\n  func.guid = fn.guid = fn.guid || Guid.newGUID();\n  on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param  {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n  function returnTrue() { return true; }\n  function returnFalse() { return false; }\n\n  // Test if fixing up is needed\n  // Used to check if !event.stopPropagation instead of isPropagationStopped\n  // But native events return true for stopPropagation, but don't have\n  // other expected methods like isPropagationStopped. Seems to be a problem\n  // with the Javascript Ninja code. So we're just overriding all events now.\n  if (!event || !event.isPropagationStopped) {\n    var old = event || window.event;\n\n    event = {};\n    // Clone the old object so that we can modify the values event = {};\n    // IE8 Doesn't like when you mess with native event properties\n    // Firefox returns false for event.hasOwnProperty('type') and other props\n    //  which makes copying more difficult.\n    // TODO: Probably best to create a whitelist of event props\n    for (var key in old) {\n      // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n      // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n      // and webkitMovementX/Y\n      if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' &&\n          key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n        // Chrome 32+ warns if you try to copy deprecated returnValue, but\n        // we still want to if preventDefault isn't supported (IE8).\n        if (!(key === 'returnValue' && old.preventDefault)) {\n          event[key] = old[key];\n        }\n      }\n    }\n\n    // The event occurred on this element\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    // Handle which other element the event is related to\n    if (!event.relatedTarget) {\n      event.relatedTarget = event.fromElement === event.target ?\n        event.toElement :\n        event.fromElement;\n    }\n\n    // Stop the default browser action\n    event.preventDefault = function () {\n      if (old.preventDefault) {\n        old.preventDefault();\n      }\n      event.returnValue = false;\n      old.returnValue = false;\n      event.defaultPrevented = true;\n    };\n\n    event.defaultPrevented = false;\n\n    // Stop the event from bubbling\n    event.stopPropagation = function () {\n      if (old.stopPropagation) {\n        old.stopPropagation();\n      }\n      event.cancelBubble = true;\n      old.cancelBubble = true;\n      event.isPropagationStopped = returnTrue;\n    };\n\n    event.isPropagationStopped = returnFalse;\n\n    // Stop the event from bubbling and executing other handlers\n    event.stopImmediatePropagation = function () {\n      if (old.stopImmediatePropagation) {\n        old.stopImmediatePropagation();\n      }\n      event.isImmediatePropagationStopped = returnTrue;\n      event.stopPropagation();\n    };\n\n    event.isImmediatePropagationStopped = returnFalse;\n\n    // Handle mouse position\n    if (event.clientX != null) {\n      var doc = document.documentElement, body = document.body;\n\n      event.pageX = event.clientX +\n        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n        (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = event.clientY +\n        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n        (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // Handle key presses\n    event.which = event.charCode || event.keyCode;\n\n    // Fix button for mouse clicks:\n    // 0 == left; 1 == middle; 2 == right\n    if (event.button != null) {\n      event.button = (event.button & 1 ? 0 :\n        (event.button & 4 ? 1 :\n          (event.button & 2 ? 2 : 0)));\n    }\n  }\n\n  // Returns fixed-up instance\n  return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param  {Element|Object} elem Element to clean up\n * @param  {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n  var data = Dom.getElData(elem);\n\n  // Remove the events of a particular type if there are none left\n  if (data.handlers[type].length === 0) {\n    delete data.handlers[type];\n    // data.handlers[type] = null;\n    // Setting to null was causing an error with data.handlers\n\n    // Remove the meta-handler from the element\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, data.dispatcher, false);\n    } else if (elem.detachEvent) {\n      elem.detachEvent('on' + type, data.dispatcher);\n    }\n  }\n\n  // Remove the events object if there are no types left\n  if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n    delete data.handlers;\n    delete data.dispatcher;\n    delete data.disabled;\n  }\n\n  // Finally remove the element data if there is no data left\n  if (Object.getOwnPropertyNames(data).length === 0) {\n    Dom.removeElData(elem);\n  }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param  {Function} fn   The event method we want to use.\n * @param  {Element|Object} elem Element or object to bind listeners to\n * @param  {String}   type Type of event to bind to.\n * @param  {Function} callback   Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n  types.forEach(function(type) {\n    //Call the event method for each one of the types\n    fn(elem, type, callback);\n  });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = newGUID(); }\n\n  // Create the new function that changes the context\n  let ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n  seconds = seconds < 0 ? 0 : seconds;\n  let s = Math.floor(seconds % 60);\n  let m = Math.floor(seconds / 60 % 60);\n  let h = Math.floor(seconds / 3600);\n  const gm = Math.floor(guide / 60 % 60);\n  const gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n  return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n  _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n  _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n  _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param  {String} type The type of message, or `null` for `log`\n * @param  {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n  // convert args to an array to get array functions\n  let argsArray = Array.prototype.slice.call(args);\n  // if there's no console then don't try to output messages\n  // they will still be stored in log.history\n  // Was setting these once outside of this function, but containing them\n  // in the function makes it easier to test cases where console doesn't exist\n  let noop = function(){};\n\n  let console = window['console'] || {\n    'log': noop,\n    'warn': noop,\n    'error': noop\n  };\n\n  if (type) {\n    // add the type to the front of the message\n    argsArray.unshift(type.toUpperCase()+':');\n  } else {\n    // default to log with no prefix\n    type = 'log';\n  }\n\n  // add to history\n  log.history.push(argsArray);\n\n  // add console prefix after adding to history\n  argsArray.unshift('VIDEOJS:');\n\n  // call appropriate log function\n  if (console[type].apply) {\n    console[type].apply(console, argsArray);\n  } else {\n    // ie8 doesn't allow error.apply, but it will just join() the array anyway\n    console[type](argsArray.join(' '));\n  }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n  // If we're not working with a plain object, copy the value as is\n  // If source is an array, for instance, it will replace destination\n  if (!isPlain(source)) {\n    return source;\n  }\n\n  // If the new value is a plain object but the first object value is not\n  // we need to create a new object for the first object to merge with.\n  // This makes it consistent with how merge() works by default\n  // and also protects from later changes the to first object affecting\n  // the second object's values.\n  if (!isPlain(destination)) {\n    return mergeOptions(source);\n  }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties.  Previously `deepMerge`.\n *\n * @param  {...Object} source One or more objects to merge\n * @returns {Object}          a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n  // contruct the call dynamically to handle the variable number of\n  // objects to merge\n  let args = Array.prototype.slice.call(arguments);\n\n  // unshift an empty object into the front of the call as the target\n  // of the merge\n  args.unshift({});\n\n  // customize conflict resolution to match our historical merge behavior\n  args.push(customizer);\n\n  merge.apply(null, args);\n\n  // return the mutated result object\n  return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n  let style = document.createElement('style');\n  style.className = className;\n\n  return style;\n};\n\nexport let setTextContent = function(el, content) {\n  if (el.styleSheet) {\n    el.styleSheet.cssText = content;\n  } else {\n    el.textContent = content;\n  }\n};\n","import log from './log.js';\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param  {(Number|Array)} Start of a single range or an array of ranges\n * @param  {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\nexport function createTimeRanges(start, end){\n  if (Array.isArray(start)) {\n    return createTimeRangesObj(start);\n  } else if (start === undefined || end === undefined) {\n    return createTimeRangesObj();\n  }\n  return createTimeRangesObj([[start, end]]);\n}\n\nexport { createTimeRanges as createTimeRange };\n\nfunction createTimeRangesObj(ranges){\n  if (ranges === undefined || ranges.length === 0) {\n    return {\n      length: 0,\n      start: function() {\n        throw new Error('This TimeRanges object is empty');\n      },\n      end: function() {\n        throw new Error('This TimeRanges object is empty');\n      }\n    };\n  }\n  return {\n    length: ranges.length,\n    start: getRange.bind(null, 'start', 0, ranges),\n    end: getRange.bind(null, 'end', 1, ranges)\n  };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex){\n  if (rangeIndex === undefined) {\n    log.warn(`DEPRECATED: Function '${fnName}' on 'TimeRanges' called without an index argument.`);\n    rangeIndex = 0;\n  }\n  rangeCheck(fnName, rangeIndex, ranges.length - 1);\n  return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex){\n  if (index < 0 || index > maxIndex) {\n    throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is greater than or equal to the maximum bound (${maxIndex}).`);\n  }\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n  const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n  // add the url to an anchor and let the browser parse the URL\n  let a = document.createElement('a');\n  a.href = url;\n\n  // IE8 (and 9?) Fix\n  // ie8 doesn't parse the URL correctly until the anchor is actually\n  // added to the body, and an innerHTML is needed to trigger the parsing\n  let addToBody = (a.host === '' && a.protocol !== 'file:');\n  let div;\n  if (addToBody) {\n    div = document.createElement('div');\n    div.innerHTML = `<a href=\"${url}\"></a>`;\n    a = div.firstChild;\n    // prevent the div from affecting layout\n    div.setAttribute('style', 'display:none; position:absolute;');\n    document.body.appendChild(div);\n  }\n\n  // Copy the specific URL properties to a new object\n  // This is also needed for IE8 because the anchor loses its\n  // properties when it's removed from the dom\n  let details = {};\n  for (var i = 0; i < props.length; i++) {\n    details[props[i]] = a[props[i]];\n  }\n\n  // IE9 adds the port to the host property unlike everyone else. If\n  // a port identifier is added for standard ports, strip it.\n  if (details.protocol === 'http:') {\n    details.host = details.host.replace(/:80$/, '');\n  }\n  if (details.protocol === 'https:') {\n    details.host = details.host.replace(/:443$/, '');\n  }\n\n  if (addToBody) {\n    document.body.removeChild(div);\n  }\n\n  return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    let div = document.createElement('div');\n    div.innerHTML = `<a href=\"${url}\">x</a>`;\n    url = div.firstChild.href;\n  }\n\n  return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String}    path    The fileName path like '/path/to/file.mp4'\n * @returns {String}          The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n  if(typeof path === 'string'){\n    let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n    let pathParts = splitPathRe.exec(path);\n\n    if (pathParts) {\n      return pathParts.pop().toLowerCase();\n    }\n  }\n\n  return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean}   Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n  let winLoc = window.location;\n  let urlInfo = parseUrl(url);\n\n  // IE8 protocol relative urls will return ':' for protocol\n  let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n  // Check if url is for another domain/origin\n  // IE8 doesn't know location.origin, so we won't rely on it here\n  let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n  return crossOrigin;\n};\n","/**\n * @file video.js\n */\nimport window from 'global/window';\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\nimport TextTrack from './tracks/text-track.js';\nimport AudioTrack from './tracks/audio-track.js';\nimport VideoTrack from './tracks/video-track.js';\n\nimport { createTimeRanges } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendFn from './extend.js';\nimport merge from 'lodash-compat/object/merge';\nimport xhr from 'xhr';\n\n// Include the built-in techs\nimport Tech from './tech/tech.js';\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n  document.createElement('video');\n  document.createElement('audio');\n  document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n *     var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param  {String|Element} id      Video element or video element ID\n * @param  {Object=} options        Optional options object for config/settings\n * @param  {Function=} ready        Optional ready callback\n * @return {Player}                 A player instance\n * @mixes videojs\n * @method videojs\n */\nlet videojs = function(id, options, ready){\n  let tag; // Element of ID\n\n  // Allow for element or ID to be passed in\n  // String ID\n  if (typeof id === 'string') {\n\n    // Adjust for jQuery ID syntax\n    if (id.indexOf('#') === 0) {\n      id = id.slice(1);\n    }\n\n    // If a player instance has already been created for this ID return it.\n    if (videojs.getPlayers()[id]) {\n\n      // If options or ready funtion are passed, warn\n      if (options) {\n        log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n      }\n\n      if (ready) {\n        videojs.getPlayers()[id].ready(ready);\n      }\n\n      return videojs.getPlayers()[id];\n\n    // Otherwise get element for ID\n    } else {\n      tag = Dom.getEl(id);\n    }\n\n  // ID is a media element\n  } else {\n    tag = id;\n  }\n\n  // Check for a useable element\n  if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n    throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n  }\n\n  // Element may have a player attr referring to an already created player instance.\n  // If not, set up a new player and return the instance.\n  return tag['player'] || Player.players[tag.playerId] || new Player(tag, options, ready);\n};\n\n// Add default styles\nif (window.VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n  let style = Dom.$('.vjs-styles-defaults');\n\n  if (!style) {\n    style = stylesheet.createStyleElement('vjs-styles-defaults');\n    let head = Dom.$('head');\n    head.insertBefore(style, head.firstChild);\n    stylesheet.setTextContent(style, `\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    `);\n  }\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n *     videojs.options.autoplay = true\n *     // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = () => Player.players;\n\n/**\n * Expose players object.\n *\n * @memberOf videojs\n * @property {Object} players\n */\nvideojs.players = Player.players;\n\n/**\n * Get a component class object by name\n * ```js\n *     var VjsButton = videojs.getComponent('Button');\n *     // Create a new instance of the component\n *     var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n *     // Get a component to subclass\n *     var VjsButton = videojs.getComponent('Button');\n *     // Subclass the component (see 'extend' doc for more info)\n *     var MySpecialButton = videojs.extend(VjsButton, {});\n *     // Register the new component\n *     VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n *     // (optionally) add the new component as a default player child\n *     myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = (name, comp) => {\n  if (Tech.isTech(comp)) {\n    log.warn(`The ${name} tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)`);\n  }\n\n  Component.registerComponent.call(Component, name, comp);\n};\n\n/**\n * Get a Tech class object by name\n * ```js\n *     var Html5 = videojs.getTech('Html5');\n *     // Create a new instance of the component\n *     var html5 = new Html5(options);\n * ```\n *\n * @return {Tech} Tech identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getTech = Tech.getTech;\n\n/**\n * Register a Tech so it can referred to by name.\n * This is used in the tech order for the player.\n *\n * ```js\n *     // get the Html5 Tech\n *     var Html5 = videojs.getTech('Html5');\n *     var MyTech = videojs.extend(Html5, {});\n *     // Register the new Tech\n *     VjsButton.registerTech('Tech', MyTech);\n *     var player = videojs('myplayer', {\n *       techOrder: ['myTech', 'html5']\n *     });\n * ```\n *\n * @param {String} The class name of the tech\n * @param {Tech} The tech class\n * @return {Tech} The newly registered Tech\n * @mixes videojs\n * @method registerTech\n */\nvideojs.registerTech = Tech.registerTech;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n *     // Create a basic javascript 'class'\n *     function MyClass(name){\n *       // Set a property at initialization\n *       this.myName = name;\n *     }\n *     // Create an instance method\n *     MyClass.prototype.sayMyName = function(){\n *       alert(this.myName);\n *     };\n *     // Subclass the exisitng class and change the name\n *     // when initializing\n *     var MySubClass = videojs.extend(MyClass, {\n *       constructor: function(name) {\n *         // Call the super class constructor for the subclass\n *         MyClass.call(this, name)\n *       }\n *     });\n *     // Create an instance of the new sub class\n *     var myInstance = new MySubClass('John');\n *     myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n *                   Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = extendFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n *     var defaultOptions = {\n *       foo: true,\n *       bar: {\n *         a: true,\n *         b: [1,2,3]\n *       }\n *     };\n *     var newOptions = {\n *       foo: false,\n *       bar: {\n *         b: [4,5,6]\n *       }\n *     };\n *     var result = videojs.mergeOptions(defaultOptions, newOptions);\n *     // result.foo = false;\n *     // result.bar.a = true;\n *     // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} defaults  The options object whose values will be overriden\n * @param {Object} overrides The options object with values to override the first\n * @param {Object} etc       Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n *     videojs.bind(newContext, function(){\n *       this === newContext\n *     });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param  {*}        context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}  uid     An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n *     // Make a plugin that alerts when the player plays\n *     videojs.plugin('myPlugin', function(myPluginOptions) {\n *       myPluginOptions = myPluginOptions || {};\n *\n *       var player = this;\n *       var alertText = myPluginOptions.text || 'Player is playing!'\n *\n *       player.on('play', function(){\n *         alert(alertText);\n *       });\n *     });\n *     // USAGE EXAMPLES\n *     // EXAMPLE 1: New player with plugin options, call plugin immediately\n *     var player1 = videojs('idOne', {\n *       myPlugin: {\n *         text: 'Custom text!'\n *       }\n *     });\n *     // Click play\n *     // --> Should alert 'Custom text!'\n *     // EXAMPLE 3: New player, initialize plugin later\n *     var player3 = videojs('idThree');\n *     // Click play\n *     // --> NO ALERT\n *     // Click pause\n *     // Initialize plugin using the plugin function on the player instance\n *     player3.myPlugin({\n *       text: 'Plugin added later!'\n *     });\n *     // Click play\n *     // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} name The plugin name\n * @param {Function} fn The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n *     videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param  {String} code The language code or dictionary property\n * @param  {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n  code = ('' + code).toLowerCase();\n  return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param  {Number|Array} start Start time in seconds or an array of ranges\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean}   Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String|Array}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param  {Element|Object}   elem Element or object to\n * @param  {String|Array}   type Name/type of event\n * @param  {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param  {Element|Object}      elem  Element to trigger an event on\n * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param  {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n *     videojs.xhr({\n *       body: someJSONString,\n *       uri: \"/foo\",\n *       headers: {\n *         \"Content-Type\": \"application/json\"\n *       }\n *     }, function (err, resp, body) {\n *       // check resp.statusCode\n *     });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = xhr;\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = TextTrack;\n\n/**\n * export the AudioTrack class so that source handlers can create\n * AudioTracks and then add them to the players AudioTrackList\n *\n * @type {Function}\n */\nvideojs.AudioTrack = AudioTrack;\n\n/**\n * export the VideoTrack class so that source handlers can create\n * VideoTracks and then add them to the players VideoTrackList\n *\n * @type {Function}\n */\nvideojs.VideoTrack = VideoTrack;\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @method isEl\n * @param  {Mixed} value\n * @return {Boolean}\n */\nvideojs.isEl = Dom.isEl;\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @method isTextNode\n * @param  {Mixed} value\n * @return {Boolean}\n */\nvideojs.isTextNode = Dom.isTextNode;\n\n/**\n * Creates an element and applies properties.\n *\n * @method createEl\n * @param  {String} [tagName='div'] Name of tag to be created.\n * @param  {Object} [properties={}] Element properties to be applied.\n * @param  {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n */\nvideojs.createEl = Dom.createEl;\n\n/**\n * Check if an element has a CSS class\n *\n * @method hasClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nvideojs.hasClass = Dom.hasElClass;\n\n/**\n * Add a CSS class name to an element\n *\n * @method addClass\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nvideojs.addClass = Dom.addElClass;\n\n/**\n * Remove a CSS class name from an element\n *\n * @method removeClass\n * @param {Element} element    Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\nvideojs.removeClass = Dom.removeElClass;\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @method toggleElClass\n * @param  {Element} element\n * @param  {String} classToToggle\n * @param  {Boolean|Function} [predicate]\n *         Can be a function that returns a Boolean. If `true`, the class\n *         will be added; if `false`, the class will be removed. If not\n *         given, the class will be added if not present and vice versa.\n */\nvideojs.toggleClass = Dom.toggleElClass;\n\n/**\n * Apply attributes to an HTML element.\n *\n * @method setAttributes\n * @param  {Element} el         Target element.\n * @param  {Object=} attributes Element attributes to be applied.\n */\nvideojs.setAttributes = Dom.setElAttributes;\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @method getAttributes\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n */\nvideojs.getAttributes = Dom.getElAttributes;\n\n/**\n * Empties the contents of an element.\n *\n * @method emptyEl\n * @param  {Element} el\n * @return {Element}\n */\nvideojs.emptyEl = Dom.emptyEl;\n\n/**\n * Normalizes and appends content to an element.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @method appendContent\n * @param  {Element} el\n * @param  {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.appendContent = Dom.appendContent;\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @method insertContent\n * @param  {Element} el\n * @param  {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.insertContent = Dom.insertContent;\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n  define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n  module['exports'] = videojs;\n}\n\nexport default videojs;\n"]}