{"version":3,"sources":["../node_modules/react-ace/lib/ace.js","../node_modules/react-ace/lib/diff.js","../node_modules/ace-builds/src-noconflict/ext-split.js","../node_modules/lodash.get/index.js","../node_modules/diff-match-patch/index.js","../node_modules/react-copy-to-clipboard/lib/index.js","../node_modules/react-copy-to-clipboard/lib/Component.js","../node_modules/copy-to-clipboard/index.js","../node_modules/toggle-selection/index.js","../node_modules/react-ace/lib/index.js","../node_modules/lodash.isequal/index.js","../node_modules/react-ace/lib/editorOptions.js","../node_modules/ace-builds/src-noconflict/ace.js","../node_modules/webpack/buildin/amd-define.js","../node_modules/react-ace/lib/split.js","../node_modules/ace-builds/src-noconflict/mode-python.js","../node_modules/ace-builds/src-noconflict/theme-dracula.js"],"names":["__extends","this","_extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","defineProperty","exports","value","PropTypes","__webpack_require__","React","isEqual","editorOptions_1","ace","getAceInstance","Range","require","ReactAce","_super","props","_this","editorEvents","forEach","method","bind","debounce","componentDidMount","_a","className","onBeforeLoad","onValidate","mode","focus","theme","fontSize","defaultValue","cursorStart","showGutter","wrapEnabled","showPrintMargin","_b","scrollMargin","keyboardHandler","onLoad","commands","annotations","markers","placeholder","editor","edit","refEditor","editorProps","keys","debounceChangePeriod","onChange","renderer","setScrollMargin","getSession","setMode","setTheme","setFontSize","setValue","navigateToFileEnd","navigateFileEnd","setShowGutter","setUseWrapMode","setShowPrintMargin","on","onFocus","onBlur","onCopy","onPaste","onInput","updatePlaceholder","selection","onSelectionChange","onCursorChange","getAnnotations","session","onScroll","setAnnotations","handleMarkers","availableOptions","$options","editorOptions","option","setOption","console","warn","handleOptions","isArray","command","exec","bindKey","addCommand","setKeyboardHandler","resize","componentDidUpdate","prevProps","oldProps","nextProps","appliedClassesArray_1","trim","split","oldClass","index","indexOf","splice","join","getValue","silent","pos","toJSON","fromJSON","setOptions","handleScrollMargins","height","width","margins","setScrollMargins","componentWillUnmount","destroy","event","getSelection","text","y","currentMarkers","getMarkers","removeMarker","id","clazz","startRow","startCol","endRow","endCol","type","inFront","range","addMarker","showPlaceholder","node","placeholderNode","scroller","removeChild","document","createElement","textContent","style","padding","position","zIndex","appendChild","updateRef","item","render","name","divStyle","ref","propTypes","string","bool","oneOfType","number","func","minLines","maxLines","readOnly","highlightActiveLine","tabSize","object","array","enableSnippets","enableBasicAutocompletion","enableLiveAutocompletion","defaultProps","Component","default","split_1","DiffMatchPatch","DiffComponent","state","diff","setState","dmp","lhString","rhString","diff_main","diff_cleanupSemantic","diffedLines","generateDiffedLines","setCodeMarkers","C","left","right","cursor","chunk","chunkType","lines","firstChar","lastChar","linesToHighlight","push","startLine","endLine","Error","codeEditorSettings","newMarkerSet","markerObj","orientation","splits","module","define","oop","EventEmitter","Editor","Renderer","VirtualRenderer","EditSession","Split","container","BELOW","BESIDE","$container","$theme","$splits","$editorCSS","$editors","$orientation","setSplits","$cEditor","implement","$createEditor","el","cssText","_emit","$fontSize","getSplits","getEditor","idx","getCurrentEditor","blur","keybinding","callback","scope","size","$cloneSession","getDocument","getMode","undoManager","getUndoManager","setUndoManager","setTabSize","getTabSize","setUseSoftTabs","getUseSoftTabs","setOverwrite","getOverwrite","setBreakpoints","getBreakpoints","getUseWrapMode","setUseWorker","getUseWorker","setWrapLimitRange","$wrapLimitRange","min","max","$foldData","$cloneFoldData","setSession","some","getOrientation","setOrientation","clientWidth","clientHeight","editorWidth","top","editorHeight","m","global","FUNC_ERROR_TEXT","HASH_UNDEFINED","INFINITY","funcTag","genTag","symbolTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","freeGlobal","freeSelf","self","root","Function","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","IE_PROTO","funcToString","toString","objectToString","reIsNative","RegExp","replace","Symbol","Map","getNative","nativeCreate","symbolProto","undefined","symbolToString","Hash","entries","clear","entry","set","ListCache","MapCache","assocIndexOf","key","other","baseGet","path","isSymbol","test","isKey","stringToPath","toKey","baseIsNative","isObject","tag","isFunction","result","e","isHostObject","toSource","getMapData","map","data","__data__","isKeyable","has","get","pop","hash","memoize","baseToString","match","quote","resolver","TypeError","memoized","args","cache","Cache","isObjectLike","diff_match_patch","Diff_Timeout","Diff_EditCost","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","Diff","text1","text2","opt_checklines","opt_deadline","Number","MAX_VALUE","Date","getTime","deadline","checklines","commonlength","diff_commonPrefix","commonprefix","substring","diff_commonSuffix","commonsuffix","diffs","diff_compute_","unshift","diff_cleanupMerge","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","concat","diff_lineMode_","diff_bisect_","a","diff_linesToChars_","chars1","chars2","linearray","lineArray","diff_charsToLines_","pointer","count_delete","count_insert","text_delete","text_insert","j","text1_length","text2_length","max_d","Math","ceil","v_offset","v_length","v1","v2","x","delta","front","k1start","k1end","k2start","k2end","k1","k1_offset","y1","x1","charAt","k2_offset","x2","diff_bisectSplit_","k2","y2","text1a","text2a","text1b","text2b","diffsb","lineHash","diff_linesToCharsMunge_","chars","lineStart","lineEnd","lineArrayLength","line","String","fromCharCode","charCodeAt","pointermin","pointermax","pointermid","pointerstart","floor","pointerend","diff_commonOverlap_","text_length","best","pattern","found","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","hm2","changes","equalities","equalitiesLength","lastequality","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","overlap_length2","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumericRegex_","nonAlphaNumeric2","whitespace1","whitespaceRegex_","whitespace2","lineBreak1","linebreakRegex_","lineBreak2","blankLine1","blanklineEndRegex_","blankLine2","blanklineStartRegex_","equality1","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_xIndex","loc","last_chars1","last_chars2","diff_prettyHtml","html","pattern_amp","pattern_lt","pattern_gt","pattern_para","op","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","encodeURI","diff_fromDelta","diffsLength","tokens","param","decodeURI","ex","parseInt","isNaN","match_main","match_bitap_","match_alphabet_","match_bitapScore_","accuracy","proximity","abs","score_threshold","best_loc","lastIndexOf","bin_min","bin_mid","matchmask","last_rd","bin_max","start","finish","rd","charMatch","patch_addContext_","patch","start2","length1","prefix","suffix","start1","length2","patch_make","opt_b","opt_c","patches","patch_obj","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","slice","patch_apply","nullPadding","patch_addPadding","patch_splitMax","results","start_loc","expected_loc","end_loc","index2","index1","mod","paddingLength","extraLength","patch_size","bigpatch","precontext","empty","shift","postcontext","patch_toText","patch_fromText","textline","textPointer","patchHeader","sign","CopyToClipboard","_extends","target","source","_createClass","defineProperties","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_copyToClipboard2","obj","__esModule","_possibleConstructorReturn","ReferenceError","_React$PureComponent","_ref","_temp","instance","_classCallCheck","_len","_key","getPrototypeOf","onClick","_this$props","children","options","elem","Children","only","subClass","superClass","_inherits","PureComponent","_props","_objectWithoutProperties","cloneElement","deselectCurrent","defaultMessage","debug","message","reselectPrevious","mark","success","createRange","all","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","preventDefault","clipboardData","clearData","setData","body","selectNodeContents","addRange","execCommand","err","error","window","copyKey","navigator","userAgent","prompt","removeRange","removeAllRanges","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","ace_1","diff_1","LARGE_ARRAY_SIZE","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","undefinedTag","arrayBufferTag","dataViewTag","reIsUint","typedArrayTags","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arraySome","predicate","mapToArray","setToArray","transform","nativeObjectToString","Buffer","Uint8Array","propertyIsEnumerable","symToStringTag","toStringTag","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeKeys","arg","DataView","Promise","Set","WeakMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolValueOf","valueOf","SetCache","values","add","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","iteratee","baseTimes","isIndex","eq","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","baseIsEqual","bitmask","customizer","stack","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","byteLength","byteOffset","buffer","convert","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","getAllKeys","objLength","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseKeys","Ctor","proto","isPrototype","arrLength","seen","arrValue","othIndex","keysFunc","symbolsFunc","offset","arrayPush","baseGetAllKeys","getSymbols","pairs","resIndex","arrayFilter","symbol","ArrayBuffer","resolve","ctorString","isLength","baseUnary","acequire","fn","delay","timer","context","clearTimeout","setTimeout","deps","payload","modules","payloads","original","trace","_require","parentId","lookup","params","l","dep","packagedModule","moduleName","normalizeModule","chunks","previous","uri","packaged","ns","exportAce","real","compliantExecNpcg","compliantLastIndexIncrement","lastIndex","str","r2","regex","from","ignoreCase","multiline","extended","sticky","_xregexp","captureNames","Empty","that","bound","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","lengthBefore","array_splice","deleteCount","removeCount","removed","insert","remove","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","fun","toObject","thisp","filter","every","reduce","reduceRight","sought","toInteger","getOwnPropertyDescriptor","property","getter","setter","getOwnPropertyNames","isPrototypeOf","toLocaleString","properties","Type","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","now","ws","trimBeginRegexp","trimEndRegexp","o","Element","parentNode","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","os","platform","toLowerCase","ua","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","useragent","buildDom","arr","parent","refs","txt","createTextNode","els","ch","childIndex","val","setAttribute","getDocumentHead","doc","head","getElementsByTagName","documentElement","createElementNS","removeChildren","element","innerHTML","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","classes","toggleCssClass","setCssClass","include","hasCssString","sheets","querySelectorAll","importCssString","getRootNode","insertBefore","firstChild","importCssStylsheet","rel","href","scrollbarWidth","inner","minWidth","display","outer","overflow","noScrollbar","offsetWidth","withScrollbar","computedStyle","getComputedStyle","setStyle","styles","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","animationName","translate","tx","ty","round","inherits","ctor","superCtor","super_","mixin","Keys","ret","MODIFIER_KEYS","16","17","18","224","91","92","93","KEY_MODS","ctrl","alt","super","meta","cmd","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","-13","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","pressedKeys","ts","addListener","attachEvent","wrapper","_wrapper","removeListener","removeEventListener","detachEvent","stopEvent","cancelBubble","getButton","ctrlKey","altKey","shiftKey","button","1","2","4","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","3","onMousedown","isNewClick","clientX","clientY","_clicks","onDblclick","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","cb","timeout","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","startColumn","endColumn","row","column","end","contains","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","last","stringReverse","reverse","stringRepeat","count","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","createMap","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","deferredCall","fcn","deferred","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","dom","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","KEYS","MODS","valueResetRegex","TextInput","host","opacity","copied","pasted","inComposition","sendingText","tempStyle","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","hasFocus","resetSelection","$focusScroll","preventScroll","isTransformed","getBoundingClientRect","ancestors","parentElement","removeAttribute","curOp","onCompositionEnd","newValue","selectionEnd","setSelectionRange","afterContextMenu","getRange","selectionStart","getLine","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","onTextInput","onCompositionUpdate","inputType","MAX_LINE_LENGTH","handleClipboardData","forceIEMime","mime","getData","doCopy","isCut","getCopyText","onCut","select","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","compositionStartOffset","off","closeTimeout","syncComposition","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","move","textInput","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","down","findKeyCommand","addIosSelectionHandler","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","anchor","ev","inSelection","getDocumentPosition","mousedownEvent","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","_signal","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","scrollTop","setDragImage","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","animationSteps","clickCount","vX","vY","createContextMenu","handleClick","action","getAttribute","selected","hasUndo","replaceChild","class","updateMenu","readText","then","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","pageY","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","onload","_","isAbort","qualifyURL","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeAllListeners","optionsProvider","optList","getOptions","optionNames","hidden","getOption","opt","forwardTo","handlesSet","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","$moduleUrls","loadWorkerFromBlob","sharedPopups","$modes","moduleUrl","component","parts","sep","base","re","setModuleUrl","subst","$loading","loadModule","moduleType","afterLoad","_reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","attributes","attr","m1","version","DefaultGutterHandler","config","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","selectionChanged","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","len","_getCharClass","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","$wrapData","indent","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","visualIdx","getSelections","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","isTabStop","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","r1","rangeList","toSingleRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","next","consumeLineEnd","merge","TextHighlightRules","$rules","addRules","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","list","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","\"","'","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","iterator","$matchTokenType","iterator2","bracket","wordChars","code","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","$id","delegations","functionName","$delegator","language","transformAction","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","word","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","MAX","to","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","SearchHighlight","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","containsRow","walk","lastEnd","isNewRow","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","k","restoreRange","Folding","side","getFoldsInRange","foldLines","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","manual","markbegin","markbeginend","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$brackets",")","(","]","[","{","}","<",">","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","reset","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","$useSoftTabs","$indentWithTabs","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","clearBreakpoints","setBreakpoint","clearBreakpoint","marker","addDynamicMarker","markerId","highlight","$searchHighlight","highlightLines","clearAnnotations","inToken","wordRange","useWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","$scrollTop","setScrollTop","$scrollLeft","setScrollLeft","scrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","useWrapMode","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","find","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","isDefault","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","description","centerSelection","gotoLine","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","$opResetTimer","$lastSel","docChanged","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onScrollTopChange","onScrollLeftChange","updateFull","oldEditor","onResize","getTheme","getFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","lineIndent","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","reg","wordPairs","negate","firstCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","$placeholder","content","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","fontFamily","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","lastLineNumber","$renderer","UndoManager","$maxRev","allowMerge","$lastDelta","lastDeltas","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","$redoStack","undoSelectionRange","$syncRev","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","nextDelta","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","childNodes","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","rparen","lparen","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","onScreen","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","$recursionLimit","_flush","change","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","contentRect","observe","setPolling","disconnect","$getZoom","getZoom","zoom","$initTransformMeasureNodes","_t","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","$printMarginEl","containerEl","posTop","posLeft","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","pageX","$useTextareaForIME","addToken","newToken","$themeId","cssClass","isDark","setMouseCursor","attachToShadowRoot","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","$doc","emit","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","_id","getElementById","env","oldNode","createEditSession","ace_builds_1","ext_split_1","SplitComponent","splitEditor","defaultValueForEditor","valueForEditor","newAnnotations","newMarkers","sp","nextValue","oldAnnotations","oldMarkers","value_1","value_2","value_3","arrayOf","PythonHighlightRules","keywordMapper","invalid.deprecated","support.function","variable.language","constant.language","keyword","integer","pointFloat","floatNumber","stringEscape","strPre","strRawPre","strFormatPre","strRawFormatPre","qqstring3","qstring3","qqstring","qstring","rawqqstring3","rawqstring3","rawqqstring","rawqstring","fqqstring3","fqstring3","fqqstring","fqstring","rfqqstring3","rfqstring3","rfqqstring","rfqstring","fqstringParRules","constants","BaseFoldMode","PythonFoldMode","outdents","pass","return","raise","break","continue"],"mappings":"2FAEA,IAAAA,EAAAC,WAAAD,WAAA,WACA,IAAAE,EAAA,SAAAC,EAAAC,GAWA,OAVAF,EAAAG,OAAAC,gBAAA,CACAC,UAAA,cACKC,OAAA,SAAAL,EAAAC,GACLD,EAAAI,UAAAH,IACK,SAAAD,EAAAC,GACL,QAAAK,KAAAL,EACAA,EAAAM,eAAAD,KAAAN,EAAAM,GAAAL,EAAAK,MAIAN,EAAAC,IAGA,gBAAAD,EAAAC,GAGA,SAAAO,IACAV,KAAAW,YAAAT,EAHAD,EAAAC,EAAAC,GAMAD,EAAAU,UAAA,OAAAT,EAAAC,OAAAS,OAAAV,IAAAO,EAAAE,UAAAT,EAAAS,UAAA,IAAAF,IAtBA,GA0BAI,EAAAd,WAAAc,UAAA,WAaA,OAZAA,EAAAV,OAAAW,QAAA,SAAAC,GACA,QAAAC,EAAAC,EAAA,EAAAC,EAAAC,UAAAC,OAA4CH,EAAAC,EAAOD,IAGnD,QAAAV,KAFAS,EAAAG,UAAAF,GAGAd,OAAAQ,UAAAH,eAAAa,KAAAL,EAAAT,KAAAQ,EAAAR,GAAAS,EAAAT,IAIA,OAAAQ,IAGAO,MAAAvB,KAAAoB,YAGAhB,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAGA,IAAAC,EAAgBC,EAAQ,GAExBC,EAAYD,EAAQ,GAEpBE,EAAcF,EAAQ,KAEtBG,EAAsBH,EAAQ,KAE9BI,EAAAD,EAAAE,iBAEAC,EAAAF,EAAAG,QAAA,aAAAD,MAEAE,EAEA,SAAAC,GAGA,SAAAD,EAAAE,GACA,IAAAC,EAAAF,EAAAf,KAAAtB,KAAAsC,IAAAtC,KAMA,OAJA+B,EAAAS,aAAAC,QAAA,SAAAC,GACAH,EAAAG,GAAAH,EAAAG,GAAAC,KAAAJ,KAEAA,EAAAK,SAAAb,EAAAa,SACAL,EAkdA,OA3dAxC,EAAAqC,EAAAC,GAYAD,EAAAxB,UAAAiC,kBAAA,WACA,IAAAN,EAAAvC,KAEA8C,EAAA9C,KAAAsC,MACAS,EAAAD,EAAAC,UACAC,EAAAF,EAAAE,aACAC,EAAAH,EAAAG,WACAC,EAAAJ,EAAAI,KACAC,EAAAL,EAAAK,MACAC,EAAAN,EAAAM,MACAC,EAAAP,EAAAO,SACA3B,EAAAoB,EAAApB,MACA4B,EAAAR,EAAAQ,aACAC,EAAAT,EAAAS,YACAC,EAAAV,EAAAU,WACAC,EAAAX,EAAAW,YACAC,EAAAZ,EAAAY,gBACAC,EAAAb,EAAAc,aACAA,OAAA,IAAAD,EAAA,UAAAA,EACAE,EAAAf,EAAAe,gBACAC,EAAAhB,EAAAgB,OACAC,EAAAjB,EAAAiB,SACAC,EAAAlB,EAAAkB,YACAC,EAAAnB,EAAAmB,QACAC,EAAApB,EAAAoB,YACAlE,KAAAmE,OAAAnC,EAAAoC,KAAApE,KAAAqE,WAEArB,GACAA,EAAAhB,GAKA,IAFA,IAAAsC,EAAAlE,OAAAmE,KAAAvE,KAAAsC,MAAAgC,aAEApD,EAAA,EAAmBA,EAAAoD,EAAAjD,OAAwBH,IAC3ClB,KAAAmE,OAAAG,EAAApD,IAAAlB,KAAAsC,MAAAgC,cAAApD,IAGAlB,KAAAsC,MAAAkC,uBACAxE,KAAAyE,SAAAzE,KAAA4C,SAAA5C,KAAAyE,SAAAzE,KAAAsC,MAAAkC,uBAGAxE,KAAAmE,OAAAO,SAAAC,gBAAAf,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IACA5D,KAAAmE,OAAAS,aAAAC,QAAA,YAAA3B,GACAlD,KAAAmE,OAAAW,SAAA,aAAA1B,GACApD,KAAAmE,OAAAY,YAAA1B,GACArD,KAAAmE,OAAAS,aAAAI,SAAA1B,GAAA5B,EAAA6B,GAEAvD,KAAAsC,MAAA2C,mBACAjF,KAAAmE,OAAAe,kBAGAlF,KAAAmE,OAAAO,SAAAS,cAAA3B,GACAxD,KAAAmE,OAAAS,aAAAQ,eAAA3B,GACAzD,KAAAmE,OAAAkB,mBAAA3B,GACA1D,KAAAmE,OAAAmB,GAAA,QAAAtF,KAAAuF,SACAvF,KAAAmE,OAAAmB,GAAA,OAAAtF,KAAAwF,QACAxF,KAAAmE,OAAAmB,GAAA,OAAAtF,KAAAyF,QACAzF,KAAAmE,OAAAmB,GAAA,QAAAtF,KAAA0F,SACA1F,KAAAmE,OAAAmB,GAAA,SAAAtF,KAAAyE,UACAzE,KAAAmE,OAAAmB,GAAA,QAAAtF,KAAA2F,SAEAzB,GACAlE,KAAA4F,oBAGA5F,KAAAmE,OAAAS,aAAAiB,UAAAP,GAAA,kBAAAtF,KAAA8F,mBACA9F,KAAAmE,OAAAS,aAAAiB,UAAAP,GAAA,eAAAtF,KAAA+F,gBAEA9C,GACAjD,KAAAmE,OAAAS,aAAAU,GAAA,8BAEA,IAAAtB,EAAAzB,EAAA4B,OAAAS,aAAAoB,iBAEAzD,EAAAD,MAAAW,WAAAe,KAIAhE,KAAAmE,OAAA8B,QAAAX,GAAA,kBAAAtF,KAAAkG,UACAlG,KAAAmE,OAAAS,aAAAuB,eAAAnC,GAAA,IAEAC,KAAA5C,OAAA,GACArB,KAAAoG,cAAAnC,GAIA,IAAAoC,EAAArG,KAAAmE,OAAAmC,SACAvE,EAAAwE,cAAA9D,QAAA,SAAA+D,GACAH,EAAA5F,eAAA+F,GACAjE,EAAA4B,OAAAsC,UAAAD,EAAAjE,EAAAD,MAAAkE,IACOjE,EAAAD,MAAAkE,IACPE,QAAAC,KAAA,2BAAAH,EAAA,iHAGAxG,KAAA4G,cAAA5G,KAAAsC,OAEA/B,MAAAsG,QAAA9C,IACAA,EAAAtB,QAAA,SAAAqE,GACA,kBAAAA,EAAAC,KACAxE,EAAA4B,OAAAJ,SAAAiD,QAAAF,EAAAE,QAAAF,EAAAC,MAEAxE,EAAA4B,OAAAJ,SAAAkD,WAAAH,KAKAjD,GACA7D,KAAAmE,OAAA+C,mBAAA,gBAAArD,GAGAd,IACA/C,KAAAqE,UAAAtB,WAAA,IAAAA,GAGAe,GACAA,EAAA9D,KAAAmE,QAGAnE,KAAAmE,OAAAgD,SAEAhE,GACAnD,KAAAmE,OAAAhB,SAIAf,EAAAxB,UAAAwG,mBAAA,SAAAC,GAIA,IAHA,IAAAC,EAAAD,EACAE,EAAAvH,KAAAsC,MAEApB,EAAA,EAAmBA,EAAAa,EAAAwE,cAAAlF,OAA0CH,IAAA,CAC7D,IAAAsF,EAAAzE,EAAAwE,cAAArF,GAEAqG,EAAAf,KAAAc,EAAAd,IACAxG,KAAAmE,OAAAsC,UAAAD,EAAAe,EAAAf,IAIA,GAAAe,EAAAxE,YAAAuE,EAAAvE,UAAA,CACA,IACAyE,EADAxH,KAAAqE,UAAAtB,UACA0E,OAAAC,MAAA,KACAJ,EAAAvE,UAAA0E,OAAAC,MAAA,KACAjF,QAAA,SAAAkF,GACA,IAAAC,EAAAJ,EAAAK,QAAAF,GACAH,EAAAM,OAAAF,EAAA,KAEA5H,KAAAqE,UAAAtB,UAAA,IAAAwE,EAAAxE,UAAA,IAAAyE,EAAAO,KAAA,KAIA,GAAA/H,KAAAmE,QAAAnE,KAAAmE,OAAA6D,aAAAT,EAAA7F,MAAA,CAEA1B,KAAAiI,QAAA,EACA,IAAAC,EAAAlI,KAAAmE,OAAA8B,QAAAJ,UAAAsC,SACAnI,KAAAmE,OAAAa,SAAAuC,EAAA7F,MAAA6F,EAAAhE,aACAvD,KAAAmE,OAAA8B,QAAAJ,UAAAuC,SAAAF,GACAlI,KAAAiI,QAAA,EAGAV,EAAArD,cAAAoD,EAAApD,aACAlE,KAAA4F,oBAGA2B,EAAArE,OAAAoE,EAAApE,MACAlD,KAAAmE,OAAAS,aAAAC,QAAA,YAAA0C,EAAArE,MAGAqE,EAAAnE,QAAAkE,EAAAlE,OACApD,KAAAmE,OAAAW,SAAA,aAAAyC,EAAAnE,OAGAmE,EAAA1D,kBAAAyD,EAAAzD,kBACA0D,EAAA1D,gBACA7D,KAAAmE,OAAA+C,mBAAA,gBAAAK,EAAA1D,iBAEA7D,KAAAmE,OAAA+C,mBAAA,OAIAK,EAAAlE,WAAAiE,EAAAjE,UACArD,KAAAmE,OAAAY,YAAAwC,EAAAlE,UAGAkE,EAAA9D,cAAA6D,EAAA7D,aACAzD,KAAAmE,OAAAS,aAAAQ,eAAAmC,EAAA9D,aAGA8D,EAAA7D,kBAAA4D,EAAA5D,iBACA1D,KAAAmE,OAAAkB,mBAAAkC,EAAA7D,iBAGA6D,EAAA/D,aAAA8D,EAAA9D,YACAxD,KAAAmE,OAAAO,SAAAS,cAAAoC,EAAA/D,YAGA1B,EAAAyF,EAAAc,WAAAf,EAAAe,aACArI,KAAA4G,cAAAW,GAGAzF,EAAAyF,EAAAvD,YAAAsD,EAAAtD,cACAhE,KAAAmE,OAAAS,aAAAuB,eAAAoB,EAAAvD,aAAA,KAGAlC,EAAAyF,EAAAtD,QAAAqD,EAAArD,UAAA1D,MAAAsG,QAAAU,EAAAtD,UACAjE,KAAAoG,cAAAmB,EAAAtD,SAIAnC,EAAAyF,EAAA3D,aAAA0D,EAAA1D,eACA5D,KAAAsI,oBAAAf,EAAA3D,cAGAyD,EAAAkB,SAAAvI,KAAAsC,MAAAiG,QAAAlB,EAAAmB,QAAAxI,KAAAsC,MAAAkG,OACAxI,KAAAmE,OAAAgD,SAGAnH,KAAAsC,MAAAa,QAAAkE,EAAAlE,OACAnD,KAAAmE,OAAAhB,SAIAf,EAAAxB,UAAA0H,oBAAA,SAAAG,QACA,IAAAA,IACAA,EAAA,WAGAzI,KAAAmE,OAAAO,SAAAgE,iBAAAD,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAGArG,EAAAxB,UAAA+H,qBAAA,WACA3I,KAAAmE,OAAAyE,UACA5I,KAAAmE,OAAA,MAGA/B,EAAAxB,UAAA6D,SAAA,SAAAoE,GACA,GAAA7I,KAAAsC,MAAAmC,WAAAzE,KAAAiI,OAAA,CACA,IAAAvG,EAAA1B,KAAAmE,OAAA6D,WACAhI,KAAAsC,MAAAmC,SAAA/C,EAAAmH,KAIAzG,EAAAxB,UAAAkF,kBAAA,SAAA+C,GACA,GAAA7I,KAAAsC,MAAAwD,kBAAA,CACA,IAAApE,EAAA1B,KAAAmE,OAAA2E,eACA9I,KAAAsC,MAAAwD,kBAAApE,EAAAmH,KAIAzG,EAAAxB,UAAAmF,eAAA,SAAA8C,GACA,GAAA7I,KAAAsC,MAAAyD,eAAA,CACA,IAAArE,EAAA1B,KAAAmE,OAAA2E,eACA9I,KAAAsC,MAAAyD,eAAArE,EAAAmH,KAIAzG,EAAAxB,UAAA+E,QAAA,SAAAkD,GACA7I,KAAAsC,MAAAqD,SACA3F,KAAAsC,MAAAqD,QAAAkD,GAGA7I,KAAAsC,MAAA4B,aACAlE,KAAA4F,qBAIAxD,EAAAxB,UAAA2E,QAAA,SAAAsD,GACA7I,KAAAsC,MAAAiD,SACAvF,KAAAsC,MAAAiD,QAAAsD,EAAA7I,KAAAmE,SAIA/B,EAAAxB,UAAA4E,OAAA,SAAAqD,GACA7I,KAAAsC,MAAAkD,QACAxF,KAAAsC,MAAAkD,OAAAqD,EAAA7I,KAAAmE,SAIA/B,EAAAxB,UAAA6E,OAAA,SAAAsD,GACA/I,KAAAsC,MAAAmD,QACAzF,KAAAsC,MAAAmD,OAAAsD,IAIA3G,EAAAxB,UAAA8E,QAAA,SAAAqD,GACA/I,KAAAsC,MAAAoD,SACA1F,KAAAsC,MAAAoD,QAAAqD,IAIA3G,EAAAxB,UAAAsF,SAAA,WACAlG,KAAAsC,MAAA4D,UACAlG,KAAAsC,MAAA4D,SAAAlG,KAAAmE,SAIA/B,EAAAxB,UAAAgG,cAAA,SAAAtE,GAGA,IAFA,IAAA+F,EAAAjI,OAAAmE,KAAAjC,EAAA+F,YAEAW,EAAA,EAAmBA,EAAAX,EAAAhH,OAAuB2H,IAC1ChJ,KAAAmE,OAAAsC,UAAA4B,EAAAW,GAAA1G,EAAA+F,aAAAW,MAIA5G,EAAAxB,UAAAwF,cAAA,SAAAnC,GACA,IAAA1B,EAAAvC,KAGAiJ,EAAAjJ,KAAAmE,OAAAS,aAAAsE,YAAA,GAEA,QAAAhI,KAAA+H,EACAA,EAAAxI,eAAAS,IACAlB,KAAAmE,OAAAS,aAAAuE,aAAAF,EAAA/H,GAAAkI,IAOA,QAAAlI,KAFA+H,EAAAjJ,KAAAmE,OAAAS,aAAAsE,YAAA,GAGAD,EAAAxI,eAAAS,IAAA,oBAAA+H,EAAA/H,GAAAmI,OAAA,sBAAAJ,EAAA/H,GAAAmI,OACArJ,KAAAmE,OAAAS,aAAAuE,aAAAF,EAAA/H,GAAAkI,IAKAnF,EAAAxB,QAAA,SAAAK,GACA,IAAAwG,EAAAxG,EAAAwG,SACAC,EAAAzG,EAAAyG,SACAC,EAAA1G,EAAA0G,OACAC,EAAA3G,EAAA2G,OACA1G,EAAAD,EAAAC,UACA2G,EAAA5G,EAAA4G,KACA/F,EAAAb,EAAA6G,QACAA,OAAA,IAAAhG,KACAiG,EAAA,IAAA1H,EAAAoH,EAAAC,EAAAC,EAAAC,GAEAlH,EAAA4B,OAAAS,aAAAiF,UAAAD,EAAA7G,EAAA2G,EAAAC,MAIAvH,EAAAxB,UAAAgF,kBAAA,WAEA,IAAAzB,EAAAnE,KAAAmE,OACAD,EAAAlE,KAAAsC,MAAA4B,YACA4F,GAAA3F,EAAA8B,QAAA+B,WAAA3G,OACA0I,EAAA5F,EAAAO,SAAAsF,iBAEAF,GAAAC,GACA5F,EAAAO,SAAAuF,SAAAC,YAAA/F,EAAAO,SAAAsF,iBACA7F,EAAAO,SAAAsF,gBAAA,MACKF,IAAAC,IACLA,EAAA5F,EAAAO,SAAAsF,gBAAAG,SAAAC,cAAA,QACAC,YAAAnG,GAAA,GACA6F,EAAAhH,UAAA,8BACAgH,EAAAO,MAAAC,QAAA,QACAR,EAAAO,MAAAE,SAAA,WACAT,EAAAO,MAAAG,OAAA,IACAtG,EAAAO,SAAAuF,SAAAS,YAAAX,IACKD,GAAAC,IACLA,EAAAM,YAAAnG,IAIA9B,EAAAxB,UAAA+J,UAAA,SAAAC,GACA5K,KAAAqE,UAAAuG,GAGAxI,EAAAxB,UAAAiK,OAAA,WACA,IAAA/H,EAAA9C,KAAAsC,MACAwI,EAAAhI,EAAAgI,KACAtC,EAAA1F,EAAA0F,MACAD,EAAAzF,EAAAyF,OACA+B,EAAAxH,EAAAwH,MAEAS,EAAAjK,EAAA,CACA0H,QACAD,UACK+B,GAEL,OAAAzI,EAAAuI,cAAA,OACAY,IAAAhL,KAAA2K,UACAvB,GAAA0B,EACAR,MAAAS,KAIA3I,EAAA6I,UAAA,CACA/H,KAAAvB,EAAAuJ,OACA/H,MAAAxB,EAAAwJ,KACA/H,MAAAzB,EAAAuJ,OACAJ,KAAAnJ,EAAAuJ,OACAnI,UAAApB,EAAAuJ,OACA3C,OAAA5G,EAAAuJ,OACA1C,MAAA7G,EAAAuJ,OACA7H,SAAA1B,EAAAyJ,UAAA,CAAAzJ,EAAA0J,OAAA1J,EAAAuJ,SACA1H,WAAA7B,EAAAwJ,KACA1G,SAAA9C,EAAA2J,KACA7F,OAAA9D,EAAA2J,KACA5F,QAAA/D,EAAA2J,KACA/F,QAAA5D,EAAA2J,KACA3F,QAAAhE,EAAA2J,KACA9F,OAAA7D,EAAA2J,KACApF,SAAAvE,EAAA2J,KACA5J,MAAAC,EAAAuJ,OACA5H,aAAA3B,EAAAuJ,OACApH,OAAAnC,EAAA2J,KACAxF,kBAAAnE,EAAA2J,KACAvF,eAAApE,EAAA2J,KACAtI,aAAArB,EAAA2J,KACArI,WAAAtB,EAAA2J,KACAC,SAAA5J,EAAA0J,OACAG,SAAA7J,EAAA0J,OACAI,SAAA9J,EAAAwJ,KACAO,oBAAA/J,EAAAwJ,KACAQ,QAAAhK,EAAA0J,OACA3H,gBAAA/B,EAAAwJ,KACA5H,YAAA5B,EAAA0J,OACA7G,qBAAA7C,EAAA0J,OACA/G,YAAA3C,EAAAiK,OACAvD,WAAA1G,EAAAiK,OACAtB,MAAA3I,EAAAiK,OACAhI,aAAAjC,EAAAkK,MACA7H,YAAArC,EAAAkK,MACA5H,QAAAtC,EAAAkK,MACAhI,gBAAAlC,EAAAuJ,OACAzH,YAAA9B,EAAAwJ,KACAW,eAAAnK,EAAAwJ,KACAY,0BAAApK,EAAAyJ,UAAA,CAAAzJ,EAAAwJ,KAAAxJ,EAAAkK,QACAG,yBAAArK,EAAAyJ,UAAA,CAAAzJ,EAAAwJ,KAAAxJ,EAAAkK,QACA5G,kBAAAtD,EAAAwJ,KACApH,SAAApC,EAAAkK,MACA3H,YAAAvC,EAAAuJ,QAEA9I,EAAA6J,aAAA,CACAnB,KAAA,aACA3H,OAAA,EACAD,KAAA,GACAE,MAAA,GACAmF,OAAA,QACAC,MAAA,QACA9G,MAAA,GACA2B,SAAA,GACAyI,gBAAA,EACAtI,YAAA,EACAiB,SAAA,KACAiB,QAAA,KACA5B,OAAA,KACAoC,SAAA,KACAqF,SAAA,KACAC,SAAA,KACAC,UAAA,EACAC,qBAAA,EACAhI,iBAAA,EACAiI,QAAA,EACApI,YAAA,EACAe,YAAA,GACAgG,MAAA,GACA1G,aAAA,UACAyE,WAAA,GACA5E,aAAA,EACAsI,2BAAA,EACAC,0BAAA,EACA9H,YAAA,KACAe,mBAAA,GAEA7C,EA5dA,CA6dCP,EAAAqK,WAEDzK,EAAA0K,QAAA/J,qCC3hBA,IAAArC,EAAAC,WAAAD,WAAA,WACA,IAAAE,EAAA,SAAAC,EAAAC,GAWA,OAVAF,EAAAG,OAAAC,gBAAA,CACAC,UAAA,cACKC,OAAA,SAAAL,EAAAC,GACLD,EAAAI,UAAAH,IACK,SAAAD,EAAAC,GACL,QAAAK,KAAAL,EACAA,EAAAM,eAAAD,KAAAN,EAAAM,GAAAL,EAAAK,MAIAN,EAAAC,IAGA,gBAAAD,EAAAC,GAGA,SAAAO,IACAV,KAAAW,YAAAT,EAHAD,EAAAC,EAAAC,GAMAD,EAAAU,UAAA,OAAAT,EAAAC,OAAAS,OAAAV,IAAAO,EAAAE,UAAAT,EAAAS,UAAA,IAAAF,IAtBA,GA0BAN,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAGA,IAAAC,EAAgBC,EAAQ,GAExBC,EAAYD,EAAQ,GAEpBwK,EAAcxK,EAAQ,KAEtByK,EAAqBzK,EAAQ,MAE7B0K,EAEA,SAAAjK,GAGA,SAAAiK,EAAAhK,GACA,IAAAC,EAAAF,EAAAf,KAAAtB,KAAAsC,IAAAtC,KAOA,OALAuC,EAAAgK,MAAA,CACA7K,MAAAa,EAAAD,MAAAZ,OAEAa,EAAAkC,SAAAlC,EAAAkC,SAAA9B,KAAAJ,GACAA,EAAAiK,KAAAjK,EAAAiK,KAAA7J,KAAAJ,GACAA,EAoRA,OA9RAxC,EAAAuM,EAAAjK,GAaAiK,EAAA1L,UAAAwG,mBAAA,WACA,IAAA1F,EAAA1B,KAAAsC,MAAAZ,MAEAA,IAAA1B,KAAAuM,MAAA7K,OACA1B,KAAAyM,SAAA,CACA/K,WAKA4K,EAAA1L,UAAA6D,SAAA,SAAA/C,GACA1B,KAAAyM,SAAA,CACA/K,UAGA1B,KAAAsC,MAAAmC,UACAzE,KAAAsC,MAAAmC,SAAA/C,IAIA4K,EAAA1L,UAAA4L,KAAA,WACA,IAAAE,EAAA,IAAAL,EACAM,EAAA3M,KAAAuM,MAAA7K,MAAA,GACAkL,EAAA5M,KAAAuM,MAAA7K,MAAA,GAEA,OAAAiL,EAAAtL,QAAA,IAAAuL,EAAAvL,OACA,SAGA,IAAAmL,EAAAE,EAAAG,UAAAF,EAAAC,GACAF,EAAAI,qBAAAN,GACA,IAAAO,EAAA/M,KAAAgN,oBAAAR,GAEA,OADAxM,KAAAiN,eAAAF,IAIAT,EAAA1L,UAAAoM,oBAAA,SAAAR,GACA,IAAAU,EACA,EADAA,GAEA,EAFAA,EAGA,EAEAH,EAAA,CACAI,KAAA,GACAC,MAAA,IAEAC,EAAA,CACAF,KAAA,EACAC,MAAA,GAiFA,OA/EAZ,EAAA/J,QAAA,SAAA6K,GACA,IAAAC,EAAAD,EAAA,GACAvE,EAAAuE,EAAA,GACAE,EAAAzE,EAAArB,MAAA,MAAArG,OAAA,EAEA,OAAA0H,EAAA1H,OAAA,CAIA,IAAAoM,EAAA1E,EAAA,GACA2E,EAAA3E,IAAA1H,OAAA,GACAsM,EAAA,EAEA,OAAAJ,GACA,KAAAL,EACAG,EAAAF,MAAAK,EACAH,EAAAD,OAAAI,EACA,MAEA,KAAAN,EAEA,OAAAO,IACAJ,EAAAF,OACAK,KAKA,KAFAG,EAAAH,IAGAT,EAAAK,MAAAQ,KAAA,CACAC,UAAAR,EAAAD,MACAU,QAAAT,EAAAD,QAKA,OAAAM,IACAC,GAAA,GAGAZ,EAAAI,KAAAS,KAAA,CACAC,UAAAR,EAAAF,KACAW,QAAAT,EAAAF,KAAAQ,IAEAN,EAAAF,MAAAK,EACA,MAEA,KAAAN,EAEA,OAAAO,IACAJ,EAAAD,QACAI,KAKA,KAFAG,EAAAH,IAGAT,EAAAI,KAAAS,KAAA,CACAC,UAAAR,EAAAF,KACAW,QAAAT,EAAAF,OAKA,OAAAO,IACAC,GAAA,GAGAZ,EAAAK,MAAAQ,KAAA,CACAC,UAAAR,EAAAD,MACAU,QAAAT,EAAAD,MAAAO,IAEAN,EAAAD,OAAAI,EACA,MAEA,QACA,UAAAO,MAAA,kCAGAhB,GAKAT,EAAA1L,UAAAqM,eAAA,SAAAF,QACA,IAAAA,IACAA,EAAA,CACAI,KAAA,GACAC,MAAA,KAUA,IANA,IAAAY,EAAA,GACAC,EAAA,CACAd,KAAA,GACAC,MAAA,IAGAlM,EAAA,EAAmBA,EAAA6L,EAAAI,KAAA9L,OAA6BH,IAAA,CAChD,IAAAgN,EAAA,CACA5E,SAAAyD,EAAAI,KAAAjM,GAAA2M,UAAA,EACArE,OAAAuD,EAAAI,KAAAjM,GAAA4M,QACApE,KAAA,OACA3G,UAAA,cAEAkL,EAAAd,KAAAS,KAAAM,GAGA,IAAAhN,EAAA,EAAmBA,EAAA6L,EAAAK,MAAA/L,OAA8BH,IAAA,CACjDgN,EAAA,CACA5E,SAAAyD,EAAAK,MAAAlM,GAAA2M,UAAA,EACArE,OAAAuD,EAAAK,MAAAlM,GAAA4M,QACApE,KAAA,OACA3G,UAAA,cAEAkL,EAAAb,MAAAQ,KAAAM,GAKA,OAFAF,EAAA,GAAAC,EAAAd,KACAa,EAAA,GAAAC,EAAAb,MACAY,GAGA1B,EAAA1L,UAAAiK,OAAA,WACA,IAAA5G,EAAAjE,KAAAwM,OACA,OAAA3K,EAAAuI,cAAAgC,EAAAD,QAAA,CACArB,KAAA9K,KAAAsC,MAAAwI,KACA/H,UAAA/C,KAAAsC,MAAAS,UACAI,MAAAnD,KAAAsC,MAAAa,MACAgL,YAAAnO,KAAAsC,MAAA6L,YACAC,OAAApO,KAAAsC,MAAA8L,OACAlL,KAAAlD,KAAAsC,MAAAY,KACAE,MAAApD,KAAAsC,MAAAc,MACAmF,OAAAvI,KAAAsC,MAAAiG,OACAC,MAAAxI,KAAAsC,MAAAkG,MACAnF,SAAArD,KAAAsC,MAAAe,SACAG,WAAAxD,KAAAsC,MAAAkB,WACAiB,SAAAzE,KAAAyE,SACAiB,QAAA1F,KAAAsC,MAAAoD,QACA5B,OAAA9D,KAAAsC,MAAAwB,OACAoC,SAAAlG,KAAAsC,MAAA4D,SACAqF,SAAAvL,KAAAsC,MAAAiJ,SACAC,SAAAxL,KAAAsC,MAAAkJ,SACAC,SAAAzL,KAAAsC,MAAAmJ,SACAC,oBAAA1L,KAAAsC,MAAAoJ,oBACAhI,gBAAA1D,KAAAsC,MAAAoB,gBACAiI,QAAA3L,KAAAsC,MAAAqJ,QACApI,YAAAvD,KAAAsC,MAAAiB,YACAe,YAAAtE,KAAAsC,MAAAgC,YACAgG,MAAAtK,KAAAsC,MAAAgI,MACA1G,aAAA5D,KAAAsC,MAAAsB,aACAyE,WAAArI,KAAAsC,MAAA+F,WACA5E,YAAAzD,KAAAsC,MAAAmB,YACAsI,0BAAA/L,KAAAsC,MAAAyJ,0BACAC,yBAAAhM,KAAAsC,MAAA0J,yBACAtK,MAAA1B,KAAAuM,MAAA7K,MACAuC,aAIAqI,EAAArB,UAAA,CACA1H,YAAA5B,EAAA0J,OACA/G,YAAA3C,EAAAiK,OACAG,0BAAApK,EAAAwJ,KACAa,yBAAArK,EAAAwJ,KACAhI,MAAAxB,EAAAwJ,KACA9H,SAAA1B,EAAA0J,OACA9C,OAAA5G,EAAAuJ,OACAQ,oBAAA/J,EAAAwJ,KACAK,SAAA7J,EAAA0J,OACAE,SAAA5J,EAAA0J,OACAnI,KAAAvB,EAAAuJ,OACAJ,KAAAnJ,EAAAuJ,OACAnI,UAAApB,EAAAuJ,OACApH,OAAAnC,EAAA2J,KACA5F,QAAA/D,EAAA2J,KACApF,SAAAvE,EAAA2J,KACA7G,SAAA9C,EAAA2J,KACA6C,YAAAxM,EAAAuJ,OACAO,SAAA9J,EAAAwJ,KACAvH,aAAAjC,EAAAkK,MACAxD,WAAA1G,EAAAiK,OACApI,WAAA7B,EAAAwJ,KACAzH,gBAAA/B,EAAAwJ,KACAiD,OAAAzM,EAAA0J,OACAf,MAAA3I,EAAAiK,OACAD,QAAAhK,EAAA0J,OACAjI,MAAAzB,EAAAuJ,OACAxJ,MAAAC,EAAAkK,MACArD,MAAA7G,EAAAuJ,OACAzH,YAAA9B,EAAAwJ,MAEAmB,EAAAL,aAAA,CACA1I,YAAA,EACAe,YAAA,GACAyH,2BAAA,EACAC,0BAAA,EACA7I,OAAA,EACAE,SAAA,GACAkF,OAAA,QACAmD,qBAAA,EACAF,SAAA,KACAD,SAAA,KACArI,KAAA,GACA4H,KAAA,aACAhH,OAAA,KACAoC,SAAA,KACAR,QAAA,KACAjB,SAAA,KACA0J,YAAA,SACA1C,UAAA,EACA7H,aAAA,UACAyE,WAAA,GACA7E,YAAA,EACAE,iBAAA,EACA0K,OAAA,EACA9D,MAAA,GACAqB,QAAA,EACAvI,MAAA,SACA1B,MAAA,QACA8G,MAAA,QACA/E,aAAA,GAEA6I,EA/RA,CAgSCzK,EAAAqK,WAEDzK,EAAA0K,QAAAG,yBC5UA,SAAA+B,GAAArM,IAAAsM,OAAA,gKAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAIAqM,GAFArM,EAAA,cAEAA,EAAA,uBAAAqM,cAEAC,EAAAtM,EAAA,YAAAsM,OAEAC,EAAAvM,EAAA,sBAAAwM,gBAEAC,EAAAzM,EAAA,kBAAAyM,YAEAC,EAAA,SAAAC,EAAA1L,EAAAgL,GACApO,KAAA+O,MAAA,EACA/O,KAAAgP,OAAA,EACAhP,KAAAiP,WAAAH,EACA9O,KAAAkP,OAAA9L,EACApD,KAAAmP,QAAA,EACAnP,KAAAoP,WAAA,GACApP,KAAAqP,SAAA,GACArP,KAAAsP,aAAAtP,KAAAgP,OACAhP,KAAAuP,UAAAnB,GAAA,GACApO,KAAAwP,SAAAxP,KAAAqP,SAAA,GACArP,KAAAsF,GAAA,iBAAAnB,GACAnE,KAAAwP,SAAArL,GACKxB,KAAA3C,SAGL,WACAuO,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA0P,cAAA,WACA,IAAAC,EAAAxF,SAAAC,cAAA,OACAuF,EAAA5M,UAAA/C,KAAAoP,WACAO,EAAArF,MAAAsF,QAAA,0CACA5P,KAAAiP,WAAAvE,YAAAiF,GACA,IAAAxL,EAAA,IAAAsK,EAAA,IAAAC,EAAAiB,EAAA3P,KAAAkP,SAMA,OALA/K,EAAAmB,GAAA,mBACAtF,KAAA6P,MAAA,QAAA1L,IACOxB,KAAA3C,OACPA,KAAAqP,SAAAzB,KAAAzJ,GACAA,EAAAY,YAAA/E,KAAA8P,WACA3L,GAGAnE,KAAAuP,UAAA,SAAAnB,GACA,IAAAjK,EAEA,GAAAiK,EAAA,EACA,4CAGA,GAAAA,GAAApO,KAAAmP,QAAA,CAEO,GAAAf,EAAApO,KAAAmP,QAAA,CACP,KAAAnP,KAAAmP,QAAAnP,KAAAqP,SAAAhO,QAAArB,KAAAmP,QAAAf,GACAjK,EAAAnE,KAAAqP,SAAArP,KAAAmP,SACAnP,KAAAiP,WAAAvE,YAAAvG,EAAA2K,WACA3K,EAAAY,YAAA/E,KAAA8P,WACA9P,KAAAmP,UAGA,KAAAnP,KAAAmP,QAAAf,GACApO,KAAA0P,gBACA1P,KAAAmP,eAGA,KAAAnP,KAAAmP,QAAAf,GACAjK,EAAAnE,KAAAqP,SAAArP,KAAAmP,QAAA,GACAnP,KAAAiP,WAAA/E,YAAA/F,EAAA2K,WACA9O,KAAAmP,UAIAnP,KAAAmH,WAGAnH,KAAA+P,UAAA,WACA,OAAA/P,KAAAmP,SAGAnP,KAAAgQ,UAAA,SAAAC,GACA,OAAAjQ,KAAAqP,SAAAY,IAGAjQ,KAAAkQ,iBAAA,WACA,OAAAlQ,KAAAwP,UAGAxP,KAAAmD,MAAA,WACAnD,KAAAwP,SAAArM,SAGAnD,KAAAmQ,KAAA,WACAnQ,KAAAwP,SAAAW,QAGAnQ,KAAA8E,SAAA,SAAA1B,GACApD,KAAAqP,SAAA5M,QAAA,SAAA0B,GACAA,EAAAW,SAAA1B,MAIApD,KAAAkH,mBAAA,SAAAkJ,GACApQ,KAAAqP,SAAA5M,QAAA,SAAA0B,GACAA,EAAA+C,mBAAAkJ,MAIApQ,KAAAyC,QAAA,SAAA4N,EAAAC,GACAtQ,KAAAqP,SAAA5M,QAAA4N,EAAAC,IAGAtQ,KAAA8P,UAAA,GAEA9P,KAAA+E,YAAA,SAAAwL,GACAvQ,KAAA8P,UAAAS,EACAvQ,KAAAyC,QAAA,SAAA0B,GACAA,EAAAY,YAAAwL,MAIAvQ,KAAAwQ,cAAA,SAAAvK,GACA,IAAAhF,EAAA,IAAA2N,EAAA3I,EAAAwK,cAAAxK,EAAAyK,WACAC,EAAA1K,EAAA2K,iBAUA,OATA3P,EAAA4P,eAAAF,GACA1P,EAAA6P,WAAA7K,EAAA8K,cACA9P,EAAA+P,eAAA/K,EAAAgL,kBACAhQ,EAAAiQ,aAAAjL,EAAAkL,gBACAlQ,EAAAmQ,eAAAnL,EAAAoL,kBACApQ,EAAAmE,eAAAa,EAAAqL,kBACArQ,EAAAsQ,aAAAtL,EAAAuL,gBACAvQ,EAAAwQ,kBAAAxL,EAAAyL,gBAAAC,IAAA1L,EAAAyL,gBAAAE,KACA3Q,EAAA4Q,UAAA5L,EAAA6L,iBACA7Q,GAGAjB,KAAA+R,WAAA,SAAA9L,EAAAgK,GACA,IAAA9L,EAiBA,OAdAA,EADA,MAAA8L,EACAjQ,KAAAwP,SAEAxP,KAAAqP,SAAAY,GAGAjQ,KAAAqP,SAAA2C,KAAA,SAAA7N,GACA,OAAAA,EAAA8B,gBAIAA,EAAAjG,KAAAwQ,cAAAvK,IAGA9B,EAAA4N,WAAA9L,GACAA,GAGAjG,KAAAiS,eAAA,WACA,OAAAjS,KAAAsP,cAGAtP,KAAAkS,eAAA,SAAA/D,GACAnO,KAAAsP,cAAAnB,IAIAnO,KAAAsP,aAAAnB,EACAnO,KAAAmH,WAGAnH,KAAAmH,OAAA,WACA,IAEAhD,EAFAqE,EAAAxI,KAAAiP,WAAAkD,YACA5J,EAAAvI,KAAAiP,WAAAmD,aAGA,GAAApS,KAAAsP,cAAAtP,KAAAgP,OAGA,IAFA,IAAAqD,EAAA7J,EAAAxI,KAAAmP,QAEAjO,EAAA,EAAuBA,EAAAlB,KAAAmP,QAAkBjO,KACzCiD,EAAAnE,KAAAqP,SAAAnO,IACA4N,UAAAxE,MAAA9B,MAAA6J,EAAA,KACAlO,EAAA2K,UAAAxE,MAAAgI,IAAA,MACAnO,EAAA2K,UAAAxE,MAAA6C,KAAAjM,EAAAmR,EAAA,KACAlO,EAAA2K,UAAAxE,MAAA/B,SAAA,KACApE,EAAAgD,aAGA,KAAAoL,EAAAhK,EAAAvI,KAAAmP,QAEA,IAAAjO,EAAA,EAAuBA,EAAAlB,KAAAmP,QAAkBjO,KACzCiD,EAAAnE,KAAAqP,SAAAnO,IACA4N,UAAAxE,MAAA9B,QAAA,KACArE,EAAA2K,UAAAxE,MAAAgI,IAAApR,EAAAqR,EAAA,KACApO,EAAA2K,UAAAxE,MAAA6C,KAAA,MACAhJ,EAAA2K,UAAAxE,MAAA/B,OAAAgK,EAAA,KACApO,EAAAgD,aAIG7F,KAAAuN,EAAAjO,WACHa,EAAAoN,UAEA7M,IAAAsM,OAAA,oEAAAnM,EAAAV,EAAA4M,GACA,aAEAA,EAAA5M,QAAAU,EAAA,cAIAH,IAAAG,QAAA,2BAAAqQ,GAC+DnE,IAC/DA,EAAA5M,QAAA+Q,mDCvNA,SAAAC,GAUA,IAAAC,EAAA,sBAGAC,EAAA,4BAGAC,EAAA,IAGAC,EAAA,oBACAC,EAAA,6BACAC,EAAA,kBAGAC,EAAA,mDACAC,EAAA,QACAC,EAAA,MACAC,EAAA,mGASAC,EAAA,WAGAC,EAAA,8BAGAC,EAAA,iBAAAb,QAAArS,iBAAAqS,EAGAc,EAAA,iBAAAC,iBAAApT,iBAAAoT,KAGAC,EAAAH,GAAAC,GAAAG,SAAA,cAAAA,GAsCA,IAAAC,EAAApT,MAAAK,UACAgT,EAAAF,SAAA9S,UACAiT,EAAAzT,OAAAQ,UAGAkT,EAAAL,EAAA,sBAGAM,EAAA,WACA,IAAAC,EAAA,SAAAjN,KAAA+M,KAAAvP,MAAAuP,EAAAvP,KAAA0P,UAAA,IACA,OAAAD,EAAA,iBAAAA,EAAA,GAFA,GAOAE,EAAAN,EAAAO,SAGA1T,EAAAoT,EAAApT,eAOA2T,EAAAP,EAAAM,SAGAE,EAAAC,OAAA,IAAAJ,EAAA5S,KAAAb,GAAA8T,QAjFA,sBAiFA,QAAAA,QAAA,uEAGAC,EAAAf,EAAAe,OACA1M,EAAA6L,EAAA7L,OAGA2M,EAAAC,EAAAjB,EAAA,OACAkB,EAAAD,EAAAtU,OAAA,UAGAwU,EAAAJ,IAAA5T,eAAAiU,EACAC,EAAAF,IAAAT,cAAAU,EASA,SAAAE,EAAAC,GACA,IAAApN,GAAA,EACAvG,EAAA2T,IAAA3T,OAAA,EAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KAkGA,SAAAE,EAAAJ,GACA,IAAApN,GAAA,EACAvG,EAAA2T,IAAA3T,OAAA,EAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KAiHA,SAAAG,EAAAL,GACA,IAAApN,GAAA,EACAvG,EAAA2T,IAAA3T,OAAA,EAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KA6FA,SAAAI,EAAAzJ,EAAA0J,GAGA,IAFA,IAoUA7T,EAAA8T,EApUAnU,EAAAwK,EAAAxK,OAEAA,KACA,IAiUAK,EAjUAmK,EAAAxK,GAAA,OAiUAmU,EAjUAD,IAkUA7T,OAAA8T,MAjUA,OAAAnU,EAIA,SAYA,SAAAoU,EAAA7J,EAAA8J,GAKA,IAwDA,IAAAhU,EA3DAkG,EAAA,EACAvG,GAFAqU,EAqGA,SAAAhU,EAAAkK,GACA,GAAA/E,EAAAnF,GACA,SAGA,IAAAgI,SAAAhI,EAEA,aAAAgI,GAAA,UAAAA,GAAA,WAAAA,GAAA,MAAAhI,GAAAiU,EAAAjU,GACA,SAGA,OAAAuR,EAAA2C,KAAAlU,KAAAsR,EAAA4C,KAAAlU,IAAA,MAAAkK,GAAAlK,KAAAtB,OAAAwL,GAhHAiK,CAAAH,EAAA9J,GAAA,CAAA8J,GA6DA7O,EADAnF,EA5DAgU,GA6DAhU,EAAAoU,EAAApU,IA3DAL,OAEA,MAAAuK,GAAAhE,EAAAvG,GACAuK,IAAAmK,EAAAL,EAAA9N,OAGA,OAAAA,MAAAvG,EAAAuK,OAAAiJ,EAYA,SAAAmB,EAAAtU,GACA,SAAAuU,EAAAvU,KAmHA4J,EAnHA5J,EAoHAqS,QAAAzI,MAqNA,SAAA5J,GAGA,IAAAwU,EAAAD,EAAAvU,GAAA0S,EAAA9S,KAAAI,GAAA,GACA,OAAAwU,GAAArD,GAAAqD,GAAApD,EAzUAqD,CAAAzU,IArbA,SAAAA,GAGA,IAAA0U,GAAA,EAEA,SAAA1U,GAAA,mBAAAA,EAAAyS,SACA,IACAiC,KAAA1U,EAAA,IACK,MAAA2U,IAGL,OAAAD,EA0aAE,CAAA5U,GAAA2S,EAAAhB,GACAuC,KAgKA,SAAAtK,GACA,SAAAA,EAAA,CACA,IACA,OAAA4I,EAAA5S,KAAAgK,GACK,MAAA+K,IAEL,IACA,OAAA/K,EAAA,GACK,MAAA+K,KAGL,SA3KAE,CAAA7U,IA8GA,IAAA4J,EA/DA,SAAAkL,EAAAC,EAAAlB,GACA,IAAAmB,EAAAD,EAAAE,SACA,OAgDA,SAAAjV,GACA,IAAAgI,SAAAhI,EACA,gBAAAgI,GAAA,UAAAA,GAAA,UAAAA,GAAA,WAAAA,EAAA,cAAAhI,EAAA,OAAAA,EAlDAkV,CAAArB,GAAAmB,EAAA,iBAAAnB,EAAA,iBAAAmB,EAAAD,IAYA,SAAA/B,EAAA9I,EAAA2J,GACA,IAAA7T,EAhgBA,SAAAkK,EAAA2J,GACA,aAAA3J,OAAAiJ,EAAAjJ,EAAA2J,GA+fAvN,CAAA4D,EAAA2J,GACA,OAAAS,EAAAtU,UAAAmT,EAxVAE,EAAAnU,UAAAqU,MAzEA,WACAjV,KAAA2W,SAAAhC,IAAA,UAyEAI,EAAAnU,UAAA,OA3DA,SAAA2U,GACA,OAAAvV,KAAA6W,IAAAtB,WAAAvV,KAAA2W,SAAApB,IA2DAR,EAAAnU,UAAAkW,IA9CA,SAAAvB,GACA,IAAAmB,EAAA1W,KAAA2W,SAEA,GAAAhC,EAAA,CACA,IAAAyB,EAAAM,EAAAnB,GACA,OAAAa,IAAAzD,OAAAkC,EAAAuB,EAGA,OAAA3V,EAAAa,KAAAoV,EAAAnB,GAAAmB,EAAAnB,QAAAV,GAuCAE,EAAAnU,UAAAiW,IA1BA,SAAAtB,GACA,IAAAmB,EAAA1W,KAAA2W,SACA,OAAAhC,OAAAE,IAAA6B,EAAAnB,GAAA9U,EAAAa,KAAAoV,EAAAnB,IAyBAR,EAAAnU,UAAAuU,IAXA,SAAAI,EAAA7T,GAGA,OAFA1B,KAAA2W,SACApB,GAAAZ,QAAAE,IAAAnT,EAAAiR,EAAAjR,EACA1B,MA4HAoV,EAAAxU,UAAAqU,MAxFA,WACAjV,KAAA2W,SAAA,IAwFAvB,EAAAxU,UAAA,OA3EA,SAAA2U,GACA,IAAAmB,EAAA1W,KAAA2W,SACA/O,EAAA0N,EAAAoB,EAAAnB,GAEA,QAAA3N,EAAA,KAMAA,GAFA8O,EAAArV,OAAA,EAGAqV,EAAAK,MAEAjP,EAAAxG,KAAAoV,EAAA9O,EAAA,IAGA,IA4DAwN,EAAAxU,UAAAkW,IA/CA,SAAAvB,GACA,IAAAmB,EAAA1W,KAAA2W,SACA/O,EAAA0N,EAAAoB,EAAAnB,GACA,OAAA3N,EAAA,OAAAiN,EAAA6B,EAAA9O,GAAA,IA6CAwN,EAAAxU,UAAAiW,IAhCA,SAAAtB,GACA,OAAAD,EAAAtV,KAAA2W,SAAApB,IAAA,GAgCAH,EAAAxU,UAAAuU,IAlBA,SAAAI,EAAA7T,GACA,IAAAgV,EAAA1W,KAAA2W,SACA/O,EAAA0N,EAAAoB,EAAAnB,GAQA,OANA3N,EAAA,EACA8O,EAAA9I,KAAA,CAAA2H,EAAA7T,IAEAgV,EAAA9O,GAAA,GAAAlG,EAGA1B,MAuGAqV,EAAAzU,UAAAqU,MAnEA,WACAjV,KAAA2W,SAAA,CACAK,KAAA,IAAAjC,EACA0B,IAAA,IAAAhC,GAAAW,GACAlK,OAAA,IAAA6J,IAgEAM,EAAAzU,UAAA,OAlDA,SAAA2U,GACA,OAAAiB,EAAAxW,KAAAuV,GAAA,OAAAA,IAkDAF,EAAAzU,UAAAkW,IArCA,SAAAvB,GACA,OAAAiB,EAAAxW,KAAAuV,GAAAuB,IAAAvB,IAqCAF,EAAAzU,UAAAiW,IAxBA,SAAAtB,GACA,OAAAiB,EAAAxW,KAAAuV,GAAAsB,IAAAtB,IAwBAF,EAAAzU,UAAAuU,IAVA,SAAAI,EAAA7T,GAEA,OADA8U,EAAAxW,KAAAuV,GAAAJ,IAAAI,EAAA7T,GACA1B,MA4LA,IAAA8V,EAAAmB,EAAA,SAAA/L,GAyTA,IAAAxJ,EAxTAwJ,EAyTA,OADAxJ,EAxTAwJ,GAyTA,GAxaA,SAAAxJ,GAEA,oBAAAA,EACA,OAAAA,EAGA,GAAAiU,EAAAjU,GACA,OAAAoT,IAAAxT,KAAAI,GAAA,GAGA,IAAA0U,EAAA1U,EAAA,GACA,WAAA0U,GAAA,EAAA1U,IAAAkR,EAAA,KAAAwD,EA6ZAc,CAAAxV,GAxTA,IAAA0U,EAAA,GASA,OAPAlD,EAAA0C,KAAA1K,IACAkL,EAAAxI,KAAA,IAGA1C,EAAAqJ,QAAApB,EAAA,SAAAgE,EAAA9L,EAAA+L,EAAAlM,GACAkL,EAAAxI,KAAAwJ,EAAAlM,EAAAqJ,QAAAnB,EAAA,MAAA/H,GAAA8L,KAEAf,IAUA,SAAAL,EAAArU,GACA,oBAAAA,GAAAiU,EAAAjU,GACA,OAAAA,EAGA,IAAA0U,EAAA1U,EAAA,GACA,WAAA0U,GAAA,EAAA1U,IAAAkR,EAAA,KAAAwD,EAsEA,SAAAa,EAAA3L,EAAA+L,GACA,sBAAA/L,GAAA+L,GAAA,mBAAAA,EACA,UAAAC,UAAA5E,GAGA,IAAA6E,EAAA,SAAAA,IACA,IAAAC,EAAApW,UACAmU,EAAA8B,IAAA9V,MAAAvB,KAAAwX,KAAA,GACAC,EAAAF,EAAAE,MAEA,GAAAA,EAAAZ,IAAAtB,GACA,OAAAkC,EAAAX,IAAAvB,GAGA,IAAAa,EAAA9K,EAAA/J,MAAAvB,KAAAwX,GAEA,OADAD,EAAAE,QAAAtC,IAAAI,EAAAa,GACAA,GAIA,OADAmB,EAAAE,MAAA,IAAAR,EAAAS,OAAArC,GACAkC,EAIAN,EAAAS,MAAArC,EA8DA,IAAAxO,EAAAtG,MAAAsG,QAoDA,SAAAoP,EAAAvU,GACA,IAAAgI,SAAAhI,EACA,QAAAA,IAAA,UAAAgI,GAAA,YAAAA,GAkDA,SAAAiM,EAAAjU,GACA,uBAAAA,GAvBA,SAAAA,GACA,QAAAA,GAAA,iBAAAA,EAsBAiW,CAAAjW,IAAA0S,EAAA9S,KAAAI,IAAAqR,EA4DA1E,EAAA5M,QALA,SAAAmK,EAAA8J,EAAApS,GACA,IAAA8S,EAAA,MAAAxK,OAAAiJ,EAAAY,EAAA7J,EAAA8J,GACA,YAAAb,IAAAuB,EAAA9S,EAAA8S,0CCn7BA,SAAAwB,IAIA5X,KAAA6X,aAAA,EAEA7X,KAAA8X,cAAA,EAEA9X,KAAA+X,gBAAA,GAIA/X,KAAAgY,eAAA,IAKAhY,KAAAiY,sBAAA,GAEAjY,KAAAkY,aAAA,EAEAlY,KAAAmY,cAAA,GAeAP,EAAAQ,KAeAR,EAAAhX,UAAAiM,UAAA,SAAAwL,EAAAC,EAAAC,EAAAC,GAEA,oBAAAA,IAEAA,EADAxY,KAAA6X,cAAA,EACAY,OAAAC,WAEA,IAAAC,MAAAC,UAAA,IAAA5Y,KAAA6X,cAIA,IAAAgB,EAAAL,EAEA,SAAAH,GAAA,MAAAC,EACA,UAAAvK,MAAA,2BAIA,GAAAsK,GAAAC,EACA,OAAAD,EACA,EArCA,EAqCAA,IAGA,GAGA,oBAAAE,IACAA,GAAA,GAGA,IAAAO,EAAAP,EAEAQ,EAAA/Y,KAAAgZ,kBAAAX,EAAAC,GACAW,EAAAZ,EAAAa,UAAA,EAAAH,GACAV,IAAAa,UAAAH,GACAT,IAAAY,UAAAH,GAEAA,EAAA/Y,KAAAmZ,kBAAAd,EAAAC,GACA,IAAAc,EAAAf,EAAAa,UAAAb,EAAAhX,OAAA0X,GACAV,IAAAa,UAAA,EAAAb,EAAAhX,OAAA0X,GACAT,IAAAY,UAAA,EAAAZ,EAAAjX,OAAA0X,GAEA,IAAAM,EAAArZ,KAAAsZ,cAAAjB,EAAAC,EAAAQ,EAAAD,GAWA,OATAI,GACAI,EAAAE,QAAA,CA9DA,EA8DAN,IAGAG,GACAC,EAAAzL,KAAA,CAlEA,EAkEAwL,IAGApZ,KAAAwZ,kBAAAH,GACAA,GAgBAzB,EAAAhX,UAAA0Y,cAAA,SAAAjB,EAAAC,EAAAQ,EAAAD,GACA,IAAAQ,EAEA,IAAAhB,EAEA,QA5FA,EA4FAC,IAGA,IAAAA,EAEA,SAlGA,EAkGAD,IAGA,IAAAoB,EAAApB,EAAAhX,OAAAiX,EAAAjX,OAAAgX,EAAAC,EACAoB,EAAArB,EAAAhX,OAAAiX,EAAAjX,OAAAiX,EAAAD,EACAnX,EAAAuY,EAAA5R,QAAA6R,GAEA,OAAAxY,EAQA,OANAmY,EAAA,EA1GA,EA0GAI,EAAAP,UAAA,EAAAhY,IAAA,CAzGA,EAyGAwY,GAAA,CA1GA,EA0GAD,EAAAP,UAAAhY,EAAAwY,EAAArY,UAEAgX,EAAAhX,OAAAiX,EAAAjX,SACAgY,EAAA,MAAAA,EAAA,OA9GA,GAiHAA,EAGA,MAAAK,EAAArY,OAGA,SAvHA,EAuHAgX,GAAA,CAtHA,EAsHAC,IAIA,IAAAqB,EAAA3Z,KAAA4Z,gBAAAvB,EAAAC,GAEA,GAAAqB,EAAA,CAEA,IAAAE,EAAAF,EAAA,GACAG,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GACAM,EAAAN,EAAA,GAEAO,EAAAla,KAAA6M,UAAAgN,EAAAE,EAAAjB,EAAAD,GACAsB,EAAAna,KAAA6M,UAAAiN,EAAAE,EAAAlB,EAAAD,GAEA,OAAAqB,EAAAE,OAAA,EAtIA,EAsIAH,IAAAE,GAGA,OAAArB,GAAAT,EAAAhX,OAAA,KAAAiX,EAAAjX,OAAA,IACArB,KAAAqa,eAAAhC,EAAAC,EAAAO,GAGA7Y,KAAAsa,aAAAjC,EAAAC,EAAAO,IAcAjB,EAAAhX,UAAAyZ,eAAA,SAAAhC,EAAAC,EAAAO,GAGAR,GADAkC,EAAAva,KAAAwa,mBAAAnC,EAAAC,IACAmC,OACAnC,EAAAiC,EAAAG,OACA,IAAAC,EAAAJ,EAAAK,UACAvB,EAAArZ,KAAA6M,UAAAwL,EAAAC,GAAA,EAAAO,GAEA7Y,KAAA6a,mBAAAxB,EAAAsB,GAEA3a,KAAA8M,qBAAAuM,GAGAA,EAAAzL,KAAA,CAxKA,EAwKA,KAOA,IANA,IAAAkN,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAA,GAEAJ,EAAAzB,EAAAhY,QAAA,CACA,OAAAgY,EAAAyB,GAAA,IACA,KAlLA,EAmLAE,IACAE,GAAA7B,EAAAyB,GAAA,GACA,MAEA,KAxLA,EAyLAC,IACAE,GAAA5B,EAAAyB,GAAA,GACA,MAEA,KA3LA,EA6LA,GAAAC,GAAA,GAAAC,GAAA,GAEA3B,EAAAvR,OAAAgT,EAAAC,EAAAC,EAAAD,EAAAC,GACAF,IAAAC,EAAAC,EAGA,IAFA,IAAAT,EAEAY,GAFAZ,EAAAva,KAAA6M,UAAAoO,EAAAC,GAAA,EAAArC,IAEAxX,OAAA,EAAoC8Z,GAAA,EAAQA,IAC5C9B,EAAAvR,OAAAgT,EAAA,EAAAP,EAAAY,IAGAL,GAAAP,EAAAlZ,OAGA2Z,EAAA,EACAD,EAAA,EACAE,EAAA,GACAC,EAAA,GAIAJ,IAKA,OAFAzB,EAAAtC,MAEAsC,GAcAzB,EAAAhX,UAAA0Z,aAAA,SAAAjC,EAAAC,EAAAO,GAWA,IATA,IAAAuC,EAAA/C,EAAAhX,OACAga,EAAA/C,EAAAjX,OACAia,EAAAC,KAAAC,MAAAJ,EAAAC,GAAA,GACAI,EAAAH,EACAI,EAAA,EAAAJ,EACAK,EAAA,IAAApb,MAAAmb,GACAE,EAAA,IAAArb,MAAAmb,GAGAG,EAAA,EAAiBA,EAAAH,EAAcG,IAC/BF,EAAAE,IAAA,EACAD,EAAAC,IAAA,EAGAF,EAAAF,EAAA,KACAG,EAAAH,EAAA,KAYA,IAXA,IAAAK,EAAAV,EAAAC,EAGAU,EAAAD,EAAA,KAGAE,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAjc,EAAA,EAAiBA,EAAAob,MAEjB,IAAA3C,MAAAC,UAAAC,GAF4B3Y,IAAA,CAO5B,QAAAkc,GAAAlc,EAAA8b,EAA+BI,GAAAlc,EAAA+b,EAAiBG,GAAA,GAYhD,IAXA,IAAAC,EAAAZ,EAAAW,EASAE,GALAC,EADAH,IAAAlc,GAAAkc,GAAAlc,GAAAyb,EAAAU,EAAA,GAAAV,EAAAU,EAAA,GACAV,EAAAU,EAAA,GAEAV,EAAAU,EAAA,MAGAD,EAEAG,EAAAnB,GAAAkB,EAAAjB,GAAAhD,EAAAmE,OAAAD,IAAAjE,EAAAkE,OAAAF,IACAC,IACAD,IAKA,GAFAX,EAAAU,GAAAE,EAEAA,EAAAnB,EAEAa,GAAA,OACO,GAAAK,EAAAjB,EAEPW,GAAA,OACO,GAAAD,EAAA,CAGP,IAFAU,EAAAhB,EAAAK,EAAAM,IAEA,GAAAK,EAAAf,IAAA,GAAAE,EAAAa,GAIA,GAAAF,IAFAG,EAAAtB,EAAAQ,EAAAa,IAIA,OAAAzc,KAAA2c,kBAAAtE,EAAAC,EAAAiE,EAAAD,EAAAzD,IAOA,QAAA+D,GAAA1c,EAAAgc,EAA+BU,GAAA1c,EAAAic,EAAiBS,GAAA,GAYhD,IAXA,IACAF,EADAD,EAAAhB,EAAAmB,EASAC,GALAH,EADAE,IAAA1c,GAAA0c,GAAA1c,GAAA0b,EAAAa,EAAA,GAAAb,EAAAa,EAAA,GACAb,EAAAa,EAAA,GAEAb,EAAAa,EAAA,MAGAG,EAEAF,EAAAtB,GAAAyB,EAAAxB,GAAAhD,EAAAmE,OAAApB,EAAAsB,EAAA,IAAApE,EAAAkE,OAAAnB,EAAAwB,EAAA,IACAH,IACAG,IAKA,GAFAjB,EAAAa,GAAAC,EAEAA,EAAAtB,EAEAe,GAAA,OACO,GAAAU,EAAAxB,EAEPa,GAAA,OACO,IAAAH,EAAA,CAGP,IAFAM,EAAAZ,EAAAK,EAAAc,IAEA,GAAAP,EAAAX,IAAA,GAAAC,EAAAU,GAAA,CACA,IAAAE,EACAD,EAAAb,GADAc,EAAAZ,EAAAU,IACAA,EAIA,GAAAE,IAFAG,EAAAtB,EAAAsB,GAIA,OAAA1c,KAAA2c,kBAAAtE,EAAAC,EAAAiE,EAAAD,EAAAzD,MASA,SAhWA,EAgWAR,GAAA,CA/VA,EA+VAC,KAeAV,EAAAhX,UAAA+b,kBAAA,SAAAtE,EAAAC,EAAAuD,EAAA7S,EAAA6P,GACA,IAAAiE,EAAAzE,EAAAa,UAAA,EAAA2C,GACAkB,EAAAzE,EAAAY,UAAA,EAAAlQ,GACAgU,EAAA3E,EAAAa,UAAA2C,GACAoB,EAAA3E,EAAAY,UAAAlQ,GAEAqQ,EAAArZ,KAAA6M,UAAAiQ,EAAAC,GAAA,EAAAlE,GACAqE,EAAAld,KAAA6M,UAAAmQ,EAAAC,GAAA,EAAApE,GACA,OAAAQ,EAAAe,OAAA8C,IAeAtF,EAAAhX,UAAA4Z,mBAAA,SAAAnC,EAAAC,GACA,IAAAsC,EAAA,GAEAuC,EAAA,GAcA,SAAAC,EAAArU,GAUA,IATA,IAAAsU,EAAA,GAIAC,EAAA,EACAC,GAAA,EAEAC,EAAA5C,EAAAvZ,OAEAkc,EAAAxU,EAAA1H,OAAA,KAGA,IAFAkc,EAAAxU,EAAAlB,QAAA,KAAAyV,MAGAC,EAAAxU,EAAA1H,OAAA,GAGA,IAAAoc,EAAA1U,EAAAmQ,UAAAoE,EAAAC,EAAA,GACAD,EAAAC,EAAA,GAEAJ,EAAA1c,eAAA0c,EAAA1c,eAAAgd,QAAA5I,IAAAsI,EAAAM,IACAJ,GAAAK,OAAAC,aAAAR,EAAAM,KAEAJ,GAAAK,OAAAC,aAAAH,GACAL,EAAAM,GAAAD,EACA5C,EAAA4C,KAAAC,GAIA,OAAAJ,EAKA,OA5CAzC,EAAA,MA4CA,CACAH,OAHA2C,EAAA/E,GAIAqC,OAHA0C,EAAA9E,GAIAsC,cAYAhD,EAAAhX,UAAAia,mBAAA,SAAAxB,EAAAuB,GACA,QAAAiB,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IAAA,CAInC,IAHA,IAAAwB,EAAAhE,EAAAwC,GAAA,GACA9S,EAAA,GAEAC,EAAA,EAAmBA,EAAAqU,EAAAhc,OAAkB2H,IACrCD,EAAAC,GAAA4R,EAAAyC,EAAAO,WAAA5U,IAGAqQ,EAAAwC,GAAA,GAAA9S,EAAAhB,KAAA,MAYA6P,EAAAhX,UAAAoY,kBAAA,SAAAX,EAAAC,GAEA,IAAAD,IAAAC,GAAAD,EAAAmE,OAAA,IAAAlE,EAAAkE,OAAA,GACA,SAUA,IALA,IAAAqB,EAAA,EACAC,EAAAvC,KAAA5J,IAAA0G,EAAAhX,OAAAiX,EAAAjX,QACA0c,EAAAD,EACAE,EAAA,EAEAH,EAAAE,GACA1F,EAAAa,UAAA8E,EAAAD,IAAAzF,EAAAY,UAAA8E,EAAAD,GAEAC,EADAH,EAAAE,EAGAD,EAAAC,EAGAA,EAAAxC,KAAA0C,OAAAH,EAAAD,GAAA,EAAAA,GAGA,OAAAE,GAUAnG,EAAAhX,UAAAuY,kBAAA,SAAAd,EAAAC,GAEA,IAAAD,IAAAC,GAAAD,EAAAmE,OAAAnE,EAAAhX,OAAA,IAAAiX,EAAAkE,OAAAlE,EAAAjX,OAAA,GACA,SAUA,IALA,IAAAwc,EAAA,EACAC,EAAAvC,KAAA5J,IAAA0G,EAAAhX,OAAAiX,EAAAjX,QACA0c,EAAAD,EACAI,EAAA,EAEAL,EAAAE,GACA1F,EAAAa,UAAAb,EAAAhX,OAAA0c,EAAA1F,EAAAhX,OAAA6c,IAAA5F,EAAAY,UAAAZ,EAAAjX,OAAA0c,EAAAzF,EAAAjX,OAAA6c,GAEAA,EADAL,EAAAE,EAGAD,EAAAC,EAGAA,EAAAxC,KAAA0C,OAAAH,EAAAD,GAAA,EAAAA,GAGA,OAAAE,GAYAnG,EAAAhX,UAAAud,oBAAA,SAAA9F,EAAAC,GAEA,IAAA8C,EAAA/C,EAAAhX,OACAga,EAAA/C,EAAAjX,OAEA,MAAA+Z,GAAA,GAAAC,EACA,SAIAD,EAAAC,EACAhD,IAAAa,UAAAkC,EAAAC,GACGD,EAAAC,IACH/C,IAAAY,UAAA,EAAAkC,IAGA,IAAAgD,EAAA7C,KAAA5J,IAAAyJ,EAAAC,GAEA,GAAAhD,GAAAC,EACA,OAAA8F,EASA,IAHA,IAAAC,EAAA,EACAhd,EAAA,IAEA,CACA,IAAAid,EAAAjG,EAAAa,UAAAkF,EAAA/c,GACAkd,EAAAjG,EAAAzQ,QAAAyW,GAEA,OAAAC,EACA,OAAAF,EAGAhd,GAAAkd,EAEA,GAAAA,GAAAlG,EAAAa,UAAAkF,EAAA/c,IAAAiX,EAAAY,UAAA,EAAA7X,KACAgd,EAAAhd,EACAA,OAiBAuW,EAAAhX,UAAAgZ,gBAAA,SAAAvB,EAAAC,GACA,GAAAtY,KAAA6X,cAAA,EAEA,YAGA,IAAA4B,EAAApB,EAAAhX,OAAAiX,EAAAjX,OAAAgX,EAAAC,EACAoB,EAAArB,EAAAhX,OAAAiX,EAAAjX,OAAAiX,EAAAD,EAEA,GAAAoB,EAAApY,OAAA,KAAAqY,EAAArY,OAAAoY,EAAApY,OACA,YAGA,IAAAqL,EAAA1M,KAeA,SAAAwe,EAAA/E,EAAAC,EAAAxY,GAOA,IALA,IAGAud,EAAAC,EAAAC,EAAAC,EAHAC,EAAApF,EAAAP,UAAAhY,IAAAqa,KAAA0C,MAAAxE,EAAApY,OAAA,IACA8Z,GAAA,EACA2D,EAAA,IAGA,IAAA3D,EAAAzB,EAAA7R,QAAAgX,EAAA1D,EAAA,MACA,IAAA4D,EAAArS,EAAAsM,kBAAAS,EAAAP,UAAAhY,GAAAwY,EAAAR,UAAAiC,IACA6D,EAAAtS,EAAAyM,kBAAAM,EAAAP,UAAA,EAAAhY,GAAAwY,EAAAR,UAAA,EAAAiC,IAEA2D,EAAAzd,OAAA2d,EAAAD,IACAD,EAAApF,EAAAR,UAAAiC,EAAA6D,EAAA7D,GAAAzB,EAAAR,UAAAiC,IAAA4D,GACAN,EAAAhF,EAAAP,UAAA,EAAAhY,EAAA8d,GACAN,EAAAjF,EAAAP,UAAAhY,EAAA6d,GACAJ,EAAAjF,EAAAR,UAAA,EAAAiC,EAAA6D,GACAJ,EAAAlF,EAAAR,UAAAiC,EAAA4D,IAIA,SAAAD,EAAAzd,QAAAoY,EAAApY,OACA,CAAAod,EAAAC,EAAAC,EAAAC,EAAAE,GAEA,KAKA,IAGAnF,EAcAE,EAAAC,EAAAC,EAAAC,EAjBAiF,EAAAT,EAAA/E,EAAAC,EAAA6B,KAAAC,KAAA/B,EAAApY,OAAA,IAEA6d,EAAAV,EAAA/E,EAAAC,EAAA6B,KAAAC,KAAA/B,EAAApY,OAAA,IAGA,OAAA4d,GAAAC,GAQAvF,EANGuF,EAEAD,GAIHA,EAAA,GAAA5d,OAAA6d,EAAA,GAAA7d,OAAA4d,EAHAC,EAFAD,EAWA5G,EAAAhX,OAAAiX,EAAAjX,QACAwY,EAAAF,EAAA,GACAG,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,KAEAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GACAE,EAAAF,EAAA,GACAG,EAAAH,EAAA,IAIA,CAAAE,EAAAC,EAAAC,EAAAC,EADAL,EAAA,KAzBA,MAkCA/B,EAAAhX,UAAAkM,qBAAA,SAAAuM,GAmBA,IAlBA,IAAA8F,GAAA,EACAC,EAAA,GAEAC,EAAA,EAIAC,EAAA,KAEAxE,EAAA,EAGAyE,EAAA,EACAC,EAAA,EAEAC,EAAA,EACAC,EAAA,EAEA5E,EAAAzB,EAAAhY,QA7sBA,GA8sBAgY,EAAAyB,GAAA,IAEAsE,EAAAC,KAAAvE,EACAyE,EAAAE,EACAD,EAAAE,EACAD,EAAA,EACAC,EAAA,EACAJ,EAAAjG,EAAAyB,GAAA,KAttBA,GAytBAzB,EAAAyB,GAAA,GACA2E,GAAApG,EAAAyB,GAAA,GAAAzZ,OAEAqe,GAAArG,EAAAyB,GAAA,GAAAzZ,OAKAie,KAAAje,QAAAka,KAAA3J,IAAA2N,EAAAC,IAAAF,EAAAje,QAAAka,KAAA3J,IAAA6N,EAAAC,KAEArG,EAAAvR,OAAAsX,EAAAC,EAAA,OApuBA,EAouBAC,IAEAjG,EAAA+F,EAAAC,EAAA,SAruBA,EAuuBAA,IAGAvE,IADAuE,EACA,EAAAD,EAAAC,EAAA,MACAE,EAAA,EAEAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAJ,EAAA,KACAH,GAAA,IAIArE,IAiBA,IAbAqE,GACAnf,KAAAwZ,kBAAAH,GAGArZ,KAAA2f,6BAAAtG,GAOAyB,EAAA,EAEAA,EAAAzB,EAAAhY,QAAA,CACA,IAxwBA,GAwwBAgY,EAAAyB,EAAA,OAvwBA,GAuwBAzB,EAAAyB,GAAA,IACA,IAAA8E,EAAAvG,EAAAyB,EAAA,MACA+E,EAAAxG,EAAAyB,GAAA,GACAgF,EAAA9f,KAAAme,oBAAAyB,EAAAC,GACAE,EAAA/f,KAAAme,oBAAA0B,EAAAD,GAEAE,GAAAC,GACAD,GAAAF,EAAAve,OAAA,GAAAye,GAAAD,EAAAxe,OAAA,KAEAgY,EAAAvR,OAAAgT,EAAA,GA/wBA,EA+wBA+E,EAAA3G,UAAA,EAAA4G,KACAzG,EAAAyB,EAAA,MAAA8E,EAAA1G,UAAA,EAAA0G,EAAAve,OAAAye,GACAzG,EAAAyB,EAAA,MAAA+E,EAAA3G,UAAA4G,GACAhF,MAGAiF,GAAAH,EAAAve,OAAA,GAAA0e,GAAAF,EAAAxe,OAAA,KAGAgY,EAAAvR,OAAAgT,EAAA,GAxxBA,EAwxBA8E,EAAA1G,UAAA,EAAA6G,KACA1G,EAAAyB,EAAA,MA1xBA,EA2xBAzB,EAAAyB,EAAA,MAAA+E,EAAA3G,UAAA,EAAA2G,EAAAxe,OAAA0e,GACA1G,EAAAyB,EAAA,OA7xBA,EA8xBAzB,EAAAyB,EAAA,MAAA8E,EAAA1G,UAAA6G,GACAjF,KAIAA,IAGAA,MAWAlD,EAAAhX,UAAA+e,6BAAA,SAAAtG,GAWA,SAAA2G,EAAAC,EAAAC,GACA,IAAAD,IAAAC,EAEA,SAQA,IAAAC,EAAAF,EAAAzD,OAAAyD,EAAA5e,OAAA,GACA+e,EAAAF,EAAA1D,OAAA,GACA6D,EAAAF,EAAAhJ,MAAAS,EAAA0I,uBACAC,EAAAH,EAAAjJ,MAAAS,EAAA0I,uBACAE,EAAAH,GAAAF,EAAAhJ,MAAAS,EAAA6I,kBACAC,EAAAH,GAAAH,EAAAjJ,MAAAS,EAAA6I,kBACAE,EAAAH,GAAAL,EAAAhJ,MAAAS,EAAAgJ,iBACAC,EAAAH,GAAAN,EAAAjJ,MAAAS,EAAAgJ,iBACAE,EAAAH,GAAAV,EAAA9I,MAAAS,EAAAmJ,oBACAC,EAAAH,GAAAX,EAAA/I,MAAAS,EAAAqJ,sBAEA,OAAAH,GAAAE,EAEA,EACKL,GAAAE,EAEL,EACKR,IAAAG,GAAAE,EAEL,EACKF,GAAAE,EAEL,EACKL,GAAAE,EAEL,EAGA,EAKA,IAFA,IAAAzF,EAAA,EAEAA,EAAAzB,EAAAhY,OAAA,IACA,GAv2BA,GAu2BAgY,EAAAyB,EAAA,OAv2BA,GAu2BAzB,EAAAyB,EAAA,OAEA,IAAAoG,EAAA7H,EAAAyB,EAAA,MACA1W,EAAAiV,EAAAyB,GAAA,GACAqG,EAAA9H,EAAAyB,EAAA,MAEAsG,EAAAphB,KAAAmZ,kBAAA+H,EAAA9c,GAEA,GAAAgd,EAAA,CACA,IAAAC,EAAAjd,EAAA8U,UAAA9U,EAAA/C,OAAA+f,GACAF,IAAAhI,UAAA,EAAAgI,EAAA7f,OAAA+f,GACAhd,EAAAid,EAAAjd,EAAA8U,UAAA,EAAA9U,EAAA/C,OAAA+f,GACAD,EAAAE,EAAAF,EASA,IALA,IAAAG,EAAAJ,EACAK,EAAAnd,EACAod,EAAAL,EACAM,EAAAzB,EAAAkB,EAAA9c,GAAA4b,EAAA5b,EAAA+c,GAEA/c,EAAAoY,OAAA,KAAA2E,EAAA3E,OAAA,KACA0E,GAAA9c,EAAAoY,OAAA,GACApY,IAAA8U,UAAA,GAAAiI,EAAA3E,OAAA,GACA2E,IAAAjI,UAAA,GACA,IAAAwI,EAAA1B,EAAAkB,EAAA9c,GAAA4b,EAAA5b,EAAA+c,GAEAO,GAAAD,IACAA,EAAAC,EACAJ,EAAAJ,EACAK,EAAAnd,EACAod,EAAAL,GAIA9H,EAAAyB,EAAA,OAAAwG,IAEAA,EACAjI,EAAAyB,EAAA,MAAAwG,GAEAjI,EAAAvR,OAAAgT,EAAA,KACAA,KAGAzB,EAAAyB,GAAA,GAAAyG,EAEAC,EACAnI,EAAAyB,EAAA,MAAA0G,GAEAnI,EAAAvR,OAAAgT,EAAA,KACAA,MAKAA,MAKAlD,EAAA0I,sBAAA,eACA1I,EAAA6I,iBAAA,KACA7I,EAAAgJ,gBAAA,SACAhJ,EAAAmJ,mBAAA,WACAnJ,EAAAqJ,qBAAA,cAMArJ,EAAAhX,UAAA+gB,uBAAA,SAAAtI,GAqBA,IApBA,IAAA8F,GAAA,EACAC,EAAA,GAEAC,EAAA,EAIAC,EAAA,KAEAxE,EAAA,EAGA8G,GAAA,EAEAC,GAAA,EAEAC,GAAA,EAEAC,GAAA,EAEAjH,EAAAzB,EAAAhY,QAl8BA,GAm8BAgY,EAAAyB,GAAA,IAEAzB,EAAAyB,GAAA,GAAAzZ,OAAArB,KAAA8X,gBAAAgK,GAAAC,IAEA3C,EAAAC,KAAAvE,EACA8G,EAAAE,EACAD,EAAAE,EACAzC,EAAAjG,EAAAyB,GAAA,KAGAuE,EAAA,EACAC,EAAA,MAGAwC,EAAAC,GAAA,KAn9BA,GAs9BA1I,EAAAyB,GAAA,GACAiH,GAAA,EAEAD,GAAA,EAYAxC,IAAAsC,GAAAC,GAAAC,GAAAC,GAAAzC,EAAAje,OAAArB,KAAA8X,cAAA,GAAA8J,EAAAC,EAAAC,EAAAC,GAAA,KAEA1I,EAAAvR,OAAAsX,EAAAC,EAAA,OAv+BA,EAu+BAC,IAEAjG,EAAA+F,EAAAC,EAAA,SAx+BA,EAy+BAA,IAEAC,EAAA,KAEAsC,GAAAC,GAEAC,EAAAC,GAAA,EACA1C,EAAA,IAIAvE,IAFAuE,EAEA,EAAAD,EAAAC,EAAA,MACAyC,EAAAC,GAAA,GAGA5C,GAAA,IAIArE,IAGAqE,GACAnf,KAAAwZ,kBAAAH,IAUAzB,EAAAhX,UAAA4Y,kBAAA,SAAAH,GACAA,EAAAzL,KAAA,CA1gCA,EA0gCA,KASA,IAPA,IAKAmL,EALA+B,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAA,GAGAJ,EAAAzB,EAAAhY,QACA,OAAAgY,EAAAyB,GAAA,IACA,KAthCA,EAuhCAE,IACAE,GAAA7B,EAAAyB,GAAA,GACAA,IACA,MAEA,KA7hCA,EA8hCAC,IACAE,GAAA5B,EAAAyB,GAAA,GACAA,IACA,MAEA,KAjiCA,EAmiCAC,EAAAC,EAAA,GACA,IAAAD,GAAA,IAAAC,IAIA,KAFAjC,EAAA/Y,KAAAgZ,kBAAAkC,EAAAD,MAGAH,EAAAC,EAAAC,EAAA,GAziCA,GAyiCA3B,EAAAyB,EAAAC,EAAAC,EAAA,MACA3B,EAAAyB,EAAAC,EAAAC,EAAA,OAAAE,EAAAhC,UAAA,EAAAH,IAEAM,EAAAvR,OAAA,KA5iCA,EA4iCAoT,EAAAhC,UAAA,EAAAH,KACA+B,KAGAI,IAAAhC,UAAAH,GACAkC,IAAA/B,UAAAH,IAMA,KAFAA,EAAA/Y,KAAAmZ,kBAAA+B,EAAAD,MAGA5B,EAAAyB,GAAA,GAAAI,EAAAhC,UAAAgC,EAAA7Z,OAAA0X,GAAAM,EAAAyB,GAAA,GACAI,IAAAhC,UAAA,EAAAgC,EAAA7Z,OAAA0X,GACAkC,IAAA/B,UAAA,EAAA+B,EAAA5Z,OAAA0X,KAKA,IAAAgC,EACA1B,EAAAvR,OAAAgT,EAAAE,EAAAD,EAAAC,EAAA,CAjkCA,EAikCAE,IACW,IAAAF,EACX3B,EAAAvR,OAAAgT,EAAAC,IAAAC,EAAA,EApkCA,EAokCAC,IAEA5B,EAAAvR,OAAAgT,EAAAC,EAAAC,EAAAD,EAAAC,EAAA,EAtkCA,EAskCAC,GAAA,CArkCA,EAqkCAC,IAGAJ,IAAAC,EAAAC,GAAAD,EAAA,MAAAC,EAAA,QACS,IAAAF,GAxkCT,GAwkCSzB,EAAAyB,EAAA,OAETzB,EAAAyB,EAAA,OAAAzB,EAAAyB,GAAA,GACAzB,EAAAvR,OAAAgT,EAAA,IAEAA,IAGAE,EAAA,EACAD,EAAA,EACAE,EAAA,GACAC,EAAA,GAKA,KAAA7B,IAAAhY,OAAA,OACAgY,EAAAtC,MAMA,IAAAoI,GAAA,EAGA,IAFArE,EAAA,EAEAA,EAAAzB,EAAAhY,OAAA,GAlmCA,GAmmCAgY,EAAAyB,EAAA,OAnmCA,GAmmCAzB,EAAAyB,EAAA,QAEAzB,EAAAyB,GAAA,GAAA5B,UAAAG,EAAAyB,GAAA,GAAAzZ,OAAAgY,EAAAyB,EAAA,MAAAzZ,SAAAgY,EAAAyB,EAAA,OAEAzB,EAAAyB,GAAA,GAAAzB,EAAAyB,EAAA,MAAAzB,EAAAyB,GAAA,GAAA5B,UAAA,EAAAG,EAAAyB,GAAA,GAAAzZ,OAAAgY,EAAAyB,EAAA,MAAAzZ,QACAgY,EAAAyB,EAAA,MAAAzB,EAAAyB,EAAA,MAAAzB,EAAAyB,EAAA,MACAzB,EAAAvR,OAAAgT,EAAA,KACAqE,GAAA,GACO9F,EAAAyB,GAAA,GAAA5B,UAAA,EAAAG,EAAAyB,EAAA,MAAAzZ,SAAAgY,EAAAyB,EAAA,QAEPzB,EAAAyB,EAAA,OAAAzB,EAAAyB,EAAA,MACAzB,EAAAyB,GAAA,GAAAzB,EAAAyB,GAAA,GAAA5B,UAAAG,EAAAyB,EAAA,MAAAzZ,QAAAgY,EAAAyB,EAAA,MACAzB,EAAAvR,OAAAgT,EAAA,KACAqE,GAAA,IAIArE,IAIAqE,GACAnf,KAAAwZ,kBAAAH,IAaAzB,EAAAhX,UAAAohB,YAAA,SAAA3I,EAAA4I,GACA,IAIApG,EAJApB,EAAA,EACAC,EAAA,EACAwH,EAAA,EACAC,EAAA,EAGA,IAAAtG,EAAA,EAAaA,EAAAxC,EAAAhY,SA9oCb,IA+oCAgY,EAAAwC,GAAA,KAEApB,GAAApB,EAAAwC,GAAA,GAAAxa,SAlpCA,IAqpCAgY,EAAAwC,GAAA,KAEAnB,GAAArB,EAAAwC,GAAA,GAAAxa,UAGAoZ,EAAAwH,IAX+BpG,IAgB/BqG,EAAAzH,EACA0H,EAAAzH,EAIA,OAAArB,EAAAhY,QAAAwa,IApqCA,IAoqCAxC,EAAAwC,GAAA,GACAsG,EAIAA,GAAAF,EAAAC,IASAtK,EAAAhX,UAAAwhB,gBAAA,SAAA/I,GAOA,IANA,IAAAgJ,EAAA,GACAC,EAAA,KACAC,EAAA,KACAC,EAAA,KACAC,EAAA,MAEA5G,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IAAA,CACnC,IAAA6G,EAAArJ,EAAAwC,GAAA,GAIA9S,EAFAsQ,EAAAwC,GAAA,GAEAtH,QAAA+N,EAAA,SAA+C/N,QAAAgO,EAAA,QAA4BhO,QAAAiO,EAAA,QAA4BjO,QAAAkO,EAAA,cAEvG,OAAAC,GACA,KAhsCA,EAisCAL,EAAAxG,GAAA,oCAAkD9S,EAAA,SAClD,MAEA,KArsCA,EAssCAsZ,EAAAxG,GAAA,oCAAkD9S,EAAA,SAClD,MAEA,KAvsCA,EAwsCAsZ,EAAAxG,GAAA,SAAA9S,EAAA,WAKA,OAAAsZ,EAAAta,KAAA,KASA6P,EAAAhX,UAAA+hB,WAAA,SAAAtJ,GAGA,IAFA,IAAAtQ,EAAA,GAEA8S,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IA1tCnC,IA2tCAxC,EAAAwC,GAAA,KACA9S,EAAA8S,GAAAxC,EAAAwC,GAAA,IAIA,OAAA9S,EAAAhB,KAAA,KASA6P,EAAAhX,UAAAgiB,WAAA,SAAAvJ,GAGA,IAFA,IAAAtQ,EAAA,GAEA8S,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,KA7uCnC,IA8uCAxC,EAAAwC,GAAA,KACA9S,EAAA8S,GAAAxC,EAAAwC,GAAA,IAIA,OAAA9S,EAAAhB,KAAA,KAUA6P,EAAAhX,UAAAiiB,iBAAA,SAAAxJ,GAKA,IAJA,IAAAyJ,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAnH,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IAAA,CACnC,IAAA6G,EAAArJ,EAAAwC,GAAA,GACAnF,EAAA2C,EAAAwC,GAAA,GAEA,OAAA6G,GACA,KAtwCA,EAuwCAK,GAAArM,EAAArV,OACA,MAEA,KA3wCA,EA4wCA2hB,GAAAtM,EAAArV,OACA,MAEA,KA7wCA,EA+wCAyhB,GAAAvH,KAAA3J,IAAAmR,EAAAC,GACAD,EAAA,EACAC,EAAA,GAMA,OADAF,GAAAvH,KAAA3J,IAAAmR,EAAAC,IAaApL,EAAAhX,UAAAqiB,aAAA,SAAA5J,GAGA,IAFA,IAAAtQ,EAAA,GAEA8S,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IACnC,OAAAxC,EAAAwC,GAAA,IACA,KAzyCA,EA0yCA9S,EAAA8S,GAAA,IAAAqH,UAAA7J,EAAAwC,GAAA,IACA,MAEA,KA9yCA,EA+yCA9S,EAAA8S,GAAA,IAAAxC,EAAAwC,GAAA,GAAAxa,OACA,MAEA,KAhzCA,EAizCA0H,EAAA8S,GAAA,IAAAxC,EAAAwC,GAAA,GAAAxa,OAKA,OAAA0H,EAAAhB,KAAA,MAAAwM,QAAA,aAYAqD,EAAAhX,UAAAuiB,eAAA,SAAA9K,EAAAyD,GAQA,IAPA,IAAAzC,EAAA,GACA+J,EAAA,EAEAtI,EAAA,EAEAuI,EAAAvH,EAAApU,MAAA,OAEAmU,EAAA,EAAiBA,EAAAwH,EAAAhiB,OAAmBwa,IAAA,CAGpC,IAAAyH,EAAAD,EAAAxH,GAAA3C,UAAA,GAEA,OAAAmK,EAAAxH,GAAAW,OAAA,IACA,QACA,IACAnD,EAAA+J,KAAA,CAn1CA,EAm1CAG,UAAAD,IACS,MAAAE,GAET,UAAAzV,MAAA,qCAAAuV,GAGA,MAEA,QAEA,QACA,IAAAniB,EAAAsiB,SAAAH,EAAA,IAEA,GAAAI,MAAAviB,MAAA,EACA,UAAA4M,MAAA,qCAAAuV,GAGA,IAAAva,EAAAsP,EAAAa,UAAA4B,KAAA3Z,GAEA,KAAAkiB,EAAAxH,GAAAW,OAAA,GACAnD,EAAA+J,KAAA,CAt2CA,EAs2CAra,GAEAsQ,EAAA+J,KAAA,EA12CA,EA02CAra,GAGA,MAEA,QAGA,GAAAsa,EAAAxH,GACA,UAAA9N,MAAA,6CAAAsV,EAAAxH,KAMA,GAAAf,GAAAzC,EAAAhX,OACA,UAAA0M,MAAA,iBAAA+M,EAAA,wCAAAzC,EAAAhX,OAAA,MAGA,OAAAgY,GAYAzB,EAAAhX,UAAA+iB,WAAA,SAAA5a,EAAAuV,EAAA2D,GAEA,SAAAlZ,GAAA,MAAAuV,GAAA,MAAA2D,EACA,UAAAlU,MAAA,4BAKA,OAFAkU,EAAA1G,KAAA3J,IAAA,EAAA2J,KAAA5J,IAAAsQ,EAAAlZ,EAAA1H,SAEA0H,GAAAuV,EAEA,EACGvV,EAAA1H,OAGA0H,EAAAmQ,UAAA+I,IAAA3D,EAAAjd,SAAAid,EAEH2D,EAGAjiB,KAAA4jB,aAAA7a,EAAAuV,EAAA2D,IANA,GAoBArK,EAAAhX,UAAAgjB,aAAA,SAAA7a,EAAAuV,EAAA2D,GACA,GAAA3D,EAAAjd,OAAArB,KAAAmY,cACA,UAAApK,MAAA,sCAIA,IAAA9M,EAAAjB,KAAA6jB,gBAAAvF,GACA5R,EAAA1M,KAWA,SAAA8jB,EAAAzN,EAAAwF,GACA,IAAAkI,EAAA1N,EAAAiI,EAAAjd,OACA2iB,EAAAzI,KAAA0I,IAAAhC,EAAApG,GAEA,OAAAnP,EAAAsL,eAKA+L,EAAAC,EAAAtX,EAAAsL,eAHAgM,EAAA,EAAAD,EAOA,IAAAG,EAAAlkB,KAAA+X,gBAEAoM,EAAApb,EAAAlB,QAAAyW,EAAA2D,IAEA,GAAAkC,IACAD,EAAA3I,KAAA5J,IAAAmS,EAAA,EAAAK,GAAAD,IAIA,IAFAC,EAAApb,EAAAqb,YAAA9F,EAAA2D,EAAA3D,EAAAjd,WAGA6iB,EAAA3I,KAAA5J,IAAAmS,EAAA,EAAAK,GAAAD,KAKA,IAEAG,EAAAC,EAFAC,EAAA,GAAAjG,EAAAjd,OAAA,EACA8iB,GAAA,EAKA,IAHA,IACAK,EADAC,EAAAnG,EAAAjd,OAAA0H,EAAA1H,OAGAnB,EAAA,EAAiBA,EAAAoe,EAAAjd,OAAoBnB,IAAA,CAOrC,IAHAmkB,EAAA,EACAC,EAAAG,EAEAJ,EAAAC,GACAR,EAAA5jB,EAAA+hB,EAAAqC,IAAAJ,EACAG,EAAAC,EAEAG,EAAAH,EAGAA,EAAA/I,KAAA0C,OAAAwG,EAAAJ,GAAA,EAAAA,GAIAI,EAAAH,EACA,IAAAI,EAAAnJ,KAAA3J,IAAA,EAAAqQ,EAAAqC,EAAA,GACAK,EAAApJ,KAAA5J,IAAAsQ,EAAAqC,EAAAvb,EAAA1H,QAAAid,EAAAjd,OACAujB,EAAArkB,MAAAokB,EAAA,GACAC,EAAAD,EAAA,OAAAzkB,GAAA,EAEA,QAAAib,EAAAwJ,EAAwBxJ,GAAAuJ,EAAYvJ,IAAA,CAGpC,IAAA0J,EAAA5jB,EAAA8H,EAAAyT,OAAArB,EAAA,IAUA,GANAyJ,EAAAzJ,GAFA,IAAAjb,GAEA0kB,EAAAzJ,EAAA,SAAA0J,GAGAD,EAAAzJ,EAAA,SAAA0J,GAAAL,EAAArJ,EAAA,GAAAqJ,EAAArJ,KAAA,IAAAqJ,EAAArJ,EAAA,GAGAyJ,EAAAzJ,GAAAoJ,EAAA,CACA,IAAA7C,EAAAoC,EAAA5jB,EAAAib,EAAA,GAGA,GAAAuG,GAAAwC,EAAA,CAKA,GAHAA,EAAAxC,KACAyC,EAAAhJ,EAAA,GAEA8G,GAKA,MAHAyC,EAAAnJ,KAAA3J,IAAA,IAAAqQ,EAAAkC,KAUA,GAAAL,EAAA5jB,EAAA,EAAA+hB,GAAAiC,EACA,MAGAM,EAAAI,EAGA,OAAAT,GAUAvM,EAAAhX,UAAAijB,gBAAA,SAAAvF,GAGA,IAFA,IAAArd,EAAA,GAEAC,EAAA,EAAiBA,EAAAod,EAAAjd,OAAoBH,IACrCD,EAAAqd,EAAA9B,OAAAtb,IAAA,EAGA,IAAAA,EAAA,EAAiBA,EAAAod,EAAAjd,OAAoBH,IACrCD,EAAAqd,EAAA9B,OAAAtb,KAAA,GAAAod,EAAAjd,OAAAH,EAAA,EAGA,OAAAD,GAYA2W,EAAAhX,UAAAkkB,kBAAA,SAAAC,EAAAhc,GACA,MAAAA,EAAA1H,OAAA,CAQA,IAJA,IAAAid,EAAAvV,EAAAmQ,UAAA6L,EAAAC,OAAAD,EAAAC,OAAAD,EAAAE,SACA1a,EAAA,EAGAxB,EAAAlB,QAAAyW,IAAAvV,EAAAqb,YAAA9F,MAAAjd,OAAArB,KAAAmY,cAAAnY,KAAAkY,aAAAlY,KAAAkY,cACA3N,GAAAvK,KAAAkY,aACAoG,EAAAvV,EAAAmQ,UAAA6L,EAAAC,OAAAza,EAAAwa,EAAAC,OAAAD,EAAAE,QAAA1a,GAIAA,GAAAvK,KAAAkY,aAEA,IAAAgN,EAAAnc,EAAAmQ,UAAA6L,EAAAC,OAAAza,EAAAwa,EAAAC,QAEAE,GACAH,EAAA1L,MAAAE,QAAA,CAllDA,EAklDA2L,IAIA,IAAAC,EAAApc,EAAAmQ,UAAA6L,EAAAC,OAAAD,EAAAE,QAAAF,EAAAC,OAAAD,EAAAE,QAAA1a,GAEA4a,GACAJ,EAAA1L,MAAAzL,KAAA,CAzlDA,EAylDAuX,IAIAJ,EAAAK,QAAAF,EAAA7jB,OACA0jB,EAAAC,QAAAE,EAAA7jB,OAEA0jB,EAAAE,SAAAC,EAAA7jB,OAAA8jB,EAAA9jB,OACA0jB,EAAAM,SAAAH,EAAA7jB,OAAA8jB,EAAA9jB,SA0BAuW,EAAAhX,UAAA0kB,WAAA,SAAA/K,EAAAgL,EAAAC,GACA,IAAAnN,EAAAgB,EAEA,oBAAAkB,GAAA,iBAAAgL,GAAA,oBAAAC,EAGAnN,EAEAkC,GACAlB,EAAArZ,KAAA6M,UAAAwL,EAEAkN,GAAA,IAEAlkB,OAAA,IACArB,KAAA8M,qBAAAuM,GACArZ,KAAA2hB,uBAAAtI,SAEG,GAAAkB,GAAA,iBAAAA,GAAA,oBAAAgL,GAAA,oBAAAC,EAGHnM,EAEAkB,EACAlC,EAAArY,KAAA2iB,WAAAtJ,QACG,oBAAAkB,GAAAgL,GAAA,iBAAAA,GAAA,oBAAAC,EAEHnN,EAEAkC,EACAlB,EAEAkM,MACG,qBAAAhL,GAAA,iBAAAgL,IAAAC,GAAA,iBAAAA,EAUH,UAAAzX,MAAA,sCAPAsK,EAEAkC,EACAlB,EAEAmM,EAKA,OAAAnM,EAAAhY,OACA,SAiBA,IAdA,IAAAokB,EAAA,GACAV,EAAA,IAAAnN,EAAA8N,UACAC,EAAA,EAEAC,EAAA,EAEAC,EAAA,EAKAC,EAAAzN,EACA0N,EAAA1N,EAEAwD,EAAA,EAAiBA,EAAAxC,EAAAhY,OAAkBwa,IAAA,CACnC,IAAAmK,EAAA3M,EAAAwC,GAAA,GACAoK,EAAA5M,EAAAwC,GAAA,GAQA,OANA8J,GA9rDA,IA8rDAK,IAEAjB,EAAAK,OAAAQ,EACAb,EAAAC,OAAAa,GAGAG,GACA,KAtsDA,EAusDAjB,EAAA1L,MAAAsM,KAAAtM,EAAAwC,GACAkJ,EAAAM,SAAAY,EAAA5kB,OACA0kB,IAAA7M,UAAA,EAAA2M,GAAAI,EAAAF,EAAA7M,UAAA2M,GACA,MAEA,KA7sDA,EA8sDAd,EAAAE,SAAAgB,EAAA5kB,OACA0jB,EAAA1L,MAAAsM,KAAAtM,EAAAwC,GACAkK,IAAA7M,UAAA,EAAA2M,GAAAE,EAAA7M,UAAA2M,EAAAI,EAAA5kB,QACA,MAEA,KAjtDA,EAktDA4kB,EAAA5kB,QAAA,EAAArB,KAAAkY,cAAAyN,GAAAtM,EAAAhY,QAAAwa,EAAA,GAEAkJ,EAAA1L,MAAAsM,KAAAtM,EAAAwC,GACAkJ,EAAAE,SAAAgB,EAAA5kB,OACA0jB,EAAAM,SAAAY,EAAA5kB,QACS4kB,EAAA5kB,QAAA,EAAArB,KAAAkY,cAETyN,IACA3lB,KAAA8kB,kBAAAC,EAAAe,GACAL,EAAA7X,KAAAmX,GACAA,EAAA,IAAAnN,EAAA8N,UACAC,EAAA,EAKAG,EAAAC,EACAH,EAAAC,GApuDA,IA4uDAG,IACAJ,GAAAK,EAAA5kB,SA9uDA,IAivDA2kB,IACAH,GAAAI,EAAA5kB,QAUA,OALAskB,IACA3lB,KAAA8kB,kBAAAC,EAAAe,GACAL,EAAA7X,KAAAmX,IAGAU,GASA7N,EAAAhX,UAAAslB,eAAA,SAAAT,GAIA,IAFA,IAAAU,EAAA,GAEAtK,EAAA,EAAiBA,EAAA4J,EAAApkB,OAAoBwa,IAAA,CACrC,IAAAkJ,EAAAU,EAAA5J,GACAuK,EAAA,IAAAxO,EAAA8N,UACAU,EAAA/M,MAAA,GAEA,QAAArQ,EAAA,EAAmBA,EAAA+b,EAAA1L,MAAAhY,OAAwB2H,IAC3Cod,EAAA/M,MAAArQ,GAAA+b,EAAA1L,MAAArQ,GAAAqd,QAGAD,EAAAhB,OAAAL,EAAAK,OACAgB,EAAApB,OAAAD,EAAAC,OACAoB,EAAAnB,QAAAF,EAAAE,QACAmB,EAAAf,QAAAN,EAAAM,QACAc,EAAAtK,GAAAuK,EAGA,OAAAD,GAYAvO,EAAAhX,UAAA0lB,YAAA,SAAAb,EAAA1c,GACA,MAAA0c,EAAApkB,OACA,OAAA0H,EAAA,IAIA0c,EAAAzlB,KAAAkmB,eAAAT,GACA,IAAAc,EAAAvmB,KAAAwmB,iBAAAf,GACA1c,EAAAwd,EAAAxd,EAAAwd,EACAvmB,KAAAymB,eAAAhB,GAQA,IAHA,IAAA3J,EAAA,EACA4K,EAAA,GAEA7K,EAAA,EAAiBA,EAAA4J,EAAApkB,OAAoBwa,IAAA,CACrC,IAEA8K,EA6BArO,EA/BAsO,EAAAnB,EAAA5J,GAAAmJ,OAAAlJ,EACAzD,EAAArY,KAAA2iB,WAAA8C,EAAA5J,GAAAxC,OAEAwN,GAAA,EAmBA,GAjBAxO,EAAAhX,OAAArB,KAAAmY,eAKA,IAFAwO,EAAA3mB,KAAA2jB,WAAA5a,EAAAsP,EAAAa,UAAA,EAAAlZ,KAAAmY,eAAAyO,OAKA,IAFAC,EAAA7mB,KAAA2jB,WAAA5a,EAAAsP,EAAAa,UAAAb,EAAAhX,OAAArB,KAAAmY,eAAAyO,EAAAvO,EAAAhX,OAAArB,KAAAmY,iBAEAwO,GAAAE,KAEAF,GAAA,GAIAA,EAAA3mB,KAAA2jB,WAAA5a,EAAAsP,EAAAuO,IAGA,GAAAD,EAEAD,EAAA7K,IAAA,EAEAC,GAAA2J,EAAA5J,GAAAwJ,QAAAI,EAAA5J,GAAAoJ,aAaA,GAVAyB,EAAA7K,IAAA,EACAC,EAAA6K,EAAAC,EASAvO,IALAC,GADA,GAAAuO,EACA9d,EAAAmQ,UAAAyN,IAAAtO,EAAAhX,QAEA0H,EAAAmQ,UAAAyN,EAAAE,EAAA7mB,KAAAmY,gBAKApP,IAAAmQ,UAAA,EAAAyN,GAAA3mB,KAAA4iB,WAAA6C,EAAA5J,GAAAxC,OAAAtQ,EAAAmQ,UAAAyN,EAAAtO,EAAAhX,YACO,CAGP,IAAAgY,EAAArZ,KAAA6M,UAAAwL,EAAAC,GAAA,GAEA,GAAAD,EAAAhX,OAAArB,KAAAmY,eAAAnY,KAAA6iB,iBAAAxJ,GAAAhB,EAAAhX,OAAArB,KAAAiY,sBAEAyO,EAAA7K,IAAA,MACS,CACT7b,KAAA2f,6BAAAtG,GAIA,IAHA,IACAyN,EADAC,EAAA,EAGA/d,EAAA,EAAyBA,EAAAyc,EAAA5J,GAAAxC,MAAAhY,OAA6B2H,IAAA,CACtD,IAAAge,EAAAvB,EAAA5J,GAAAxC,MAAArQ,GA72DA,IA+2DAge,EAAA,KACAF,EAAA9mB,KAAAgiB,YAAA3I,EAAA0N,IAj3DA,IAo3DAC,EAAA,GAEAje,IAAAmQ,UAAA,EAAAyN,EAAAG,GAAAE,EAAA,GAAAje,EAAAmQ,UAAAyN,EAAAG,IAv3DA,IAw3DaE,EAAA,KAEbje,IAAAmQ,UAAA,EAAAyN,EAAAG,GAAA/d,EAAAmQ,UAAAyN,EAAA3mB,KAAAgiB,YAAA3I,EAAA0N,EAAAC,EAAA,GAAA3lB,WA13DA,IA63DA2lB,EAAA,KACAD,GAAAC,EAAA,GAAA3lB,WAUA,OADA0H,IAAAmQ,UAAAqN,EAAAllB,OAAA0H,EAAA1H,OAAAklB,EAAAllB,QACAqlB,IAUA9O,EAAAhX,UAAA4lB,iBAAA,SAAAf,GAIA,IAHA,IAAAwB,EAAAjnB,KAAAkY,aACAqO,EAAA,GAEA1K,EAAA,EAAiBA,GAAAoL,EAAoBpL,IACrC0K,GAAA7I,OAAAC,aAAA9B,GAIA,IAAAA,EAAA,EAAiBA,EAAA4J,EAAApkB,OAAoBwa,IACrC4J,EAAA5J,GAAAuJ,QAAA6B,EACAxB,EAAA5J,GAAAmJ,QAAAiC,EAIA,IAAAlC,EAAAU,EAAA,GACApM,EAAA0L,EAAA1L,MAEA,MAAAA,EAAAhY,QAl6DA,GAk6DAgY,EAAA,MAEAA,EAAAE,QAAA,CAp6DA,EAo6DAgN,IACAxB,EAAAK,QAAA6B,EAEAlC,EAAAC,QAAAiC,EAEAlC,EAAAE,SAAAgC,EACAlC,EAAAM,SAAA4B,OACG,GAAAA,EAAA5N,EAAA,MAAAhY,OAAA,CAEH,IAAA6lB,EAAAD,EAAA5N,EAAA,MAAAhY,OACAgY,EAAA,MAAAkN,EAAArN,UAAAG,EAAA,MAAAhY,QAAAgY,EAAA,MACA0L,EAAAK,QAAA8B,EACAnC,EAAAC,QAAAkC,EACAnC,EAAAE,SAAAiC,EACAnC,EAAAM,SAAA6B,EAOA,OAFA7N,GADA0L,EAAAU,IAAApkB,OAAA,IACAgY,OAEAhY,QAz7DA,GAy7DAgY,IAAAhY,OAAA,MAEAgY,EAAAzL,KAAA,CA37DA,EA27DA2Y,IACAxB,EAAAE,SAAAgC,EACAlC,EAAAM,SAAA4B,OACG,GAAAA,EAAA5N,IAAAhY,OAAA,MAAAA,OAAA,CAEH6lB,EAAAD,EAAA5N,IAAAhY,OAAA,MAAAA,OACAgY,IAAAhY,OAAA,OAAAklB,EAAArN,UAAA,EAAAgO,GACAnC,EAAAE,SAAAiC,EACAnC,EAAAM,SAAA6B,EAGA,OAAAX,GAUA3O,EAAAhX,UAAA6lB,eAAA,SAAAhB,GAGA,IAFA,IAAA0B,EAAAnnB,KAAAmY,cAEA0D,EAAA,EAAiBA,EAAA4J,EAAApkB,OAAoBwa,IACrC,KAAA4J,EAAA5J,GAAAoJ,SAAAkC,GAAA,CAIA,IAAAC,EAAA3B,EAAA5J,GAEA4J,EAAA3d,OAAA+T,IAAA,GAKA,IAJA,IAAAuJ,EAAAgC,EAAAhC,OACAJ,EAAAoC,EAAApC,OACAqC,EAAA,GAEA,IAAAD,EAAA/N,MAAAhY,QAAA,CAEA,IAAA0jB,EAAA,IAAAnN,EAAA8N,UACA4B,GAAA,EASA,IARAvC,EAAAK,SAAAiC,EAAAhmB,OACA0jB,EAAAC,SAAAqC,EAAAhmB,OAEA,KAAAgmB,IACAtC,EAAAE,QAAAF,EAAAM,QAAAgC,EAAAhmB,OACA0jB,EAAA1L,MAAAzL,KAAA,CAx+DA,EAw+DAyZ,KAGA,IAAAD,EAAA/N,MAAAhY,QAAA0jB,EAAAE,QAAAkC,EAAAnnB,KAAAkY,cAAA,CACA,IAAA8N,EAAAoB,EAAA/N,MAAA,MACA4M,EAAAmB,EAAA/N,MAAA,MA9+DA,IAg/DA2M,GAEAjB,EAAAM,SAAAY,EAAA5kB,OACA2jB,GAAAiB,EAAA5kB,OACA0jB,EAAA1L,MAAAzL,KAAAwZ,EAAA/N,MAAAkO,SACAD,GAAA,IAt/DA,IAu/DStB,GAAA,GAAAjB,EAAA1L,MAAAhY,QAr/DT,GAq/DS0jB,EAAA1L,MAAA,OAAA4M,EAAA5kB,OAAA,EAAA8lB,GAETpC,EAAAE,SAAAgB,EAAA5kB,OACA+jB,GAAAa,EAAA5kB,OACAimB,GAAA,EACAvC,EAAA1L,MAAAzL,KAAA,CAAAoY,EAAAC,IACAmB,EAAA/N,MAAAkO,UAGAtB,IAAA/M,UAAA,EAAAiO,EAAApC,EAAAE,QAAAjlB,KAAAkY,cACA6M,EAAAE,SAAAgB,EAAA5kB,OACA+jB,GAAAa,EAAA5kB,OAhgEA,IAkgEA2kB,GACAjB,EAAAM,SAAAY,EAAA5kB,OACA2jB,GAAAiB,EAAA5kB,QAEAimB,GAAA,EAGAvC,EAAA1L,MAAAzL,KAAA,CAAAoY,EAAAC,IAEAA,GAAAmB,EAAA/N,MAAA,MACA+N,EAAA/N,MAAAkO,QAEAH,EAAA/N,MAAA,MAAA+N,EAAA/N,MAAA,MAAAH,UAAA+M,EAAA5kB,SAOAgmB,GADAA,EAAArnB,KAAA4iB,WAAAmC,EAAA1L,QACAH,UAAAmO,EAAAhmB,OAAArB,KAAAkY,cAEA,IAAAsP,EAAAxnB,KAAA2iB,WAAAyE,EAAA/N,OAAAH,UAAA,EAAAlZ,KAAAkY,cAEA,KAAAsP,IACAzC,EAAAE,SAAAuC,EAAAnmB,OACA0jB,EAAAM,SAAAmC,EAAAnmB,OAEA,IAAA0jB,EAAA1L,MAAAhY,QA7hEA,IA6hEA0jB,EAAA1L,MAAA0L,EAAA1L,MAAAhY,OAAA,MACA0jB,EAAA1L,MAAA0L,EAAA1L,MAAAhY,OAAA,OAAAmmB,EAEAzC,EAAA1L,MAAAzL,KAAA,CAhiEA,EAgiEA4Z,KAIAF,GACA7B,EAAA3d,SAAA+T,EAAA,EAAAkJ,MAYAnN,EAAAhX,UAAA6mB,aAAA,SAAAhC,GAGA,IAFA,IAAA1c,EAAA,GAEA8S,EAAA,EAAiBA,EAAA4J,EAAApkB,OAAoBwa,IACrC9S,EAAA8S,GAAA4J,EAAA5J,GAGA,OAAA9S,EAAAhB,KAAA,KAUA6P,EAAAhX,UAAA8mB,eAAA,SAAAC,GACA,IAAAlC,EAAA,GAEA,IAAAkC,EACA,OAAAlC,EAOA,IAJA,IAAA1c,EAAA4e,EAAAjgB,MAAA,MACAkgB,EAAA,EACAC,EAAA,uCAEAD,EAAA7e,EAAA1H,QAAA,CACA,IAAAmR,EAAAzJ,EAAA6e,GAAAzQ,MAAA0Q,GAEA,IAAArV,EACA,UAAAzE,MAAA,yBAAAhF,EAAA6e,IAGA,IAAA7C,EAAA,IAAAnN,EAAA8N,UA4BA,IA3BAD,EAAA7X,KAAAmX,GACAA,EAAAK,OAAA3B,SAAAjR,EAAA,OAEA,KAAAA,EAAA,IACAuS,EAAAK,SACAL,EAAAE,QAAA,GACK,KAAAzS,EAAA,GACLuS,EAAAE,QAAA,GAEAF,EAAAK,SACAL,EAAAE,QAAAxB,SAAAjR,EAAA,QAGAuS,EAAAC,OAAAvB,SAAAjR,EAAA,OAEA,KAAAA,EAAA,IACAuS,EAAAC,SACAD,EAAAM,QAAA,GACK,KAAA7S,EAAA,GACLuS,EAAAM,QAAA,GAEAN,EAAAC,SACAD,EAAAM,QAAA5B,SAAAjR,EAAA,QAGAoV,IAEAA,EAAA7e,EAAA1H,QAAA,CACA,IAAAymB,EAAA/e,EAAA6e,GAAApL,OAAA,GAEA,IACA,IAAAiB,EAAA8F,UAAAxa,EAAA6e,GAAA1O,UAAA,IACO,MAAAsK,GAEP,UAAAzV,MAAA,qCAAA0P,GAGA,QAAAqK,EAEA/C,EAAA1L,MAAAzL,KAAA,EA9nEA,EA8nEA6P,SACO,QAAAqK,EAEP/C,EAAA1L,MAAAzL,KAAA,CAhoEA,EAgoEA6P,SACO,QAAAqK,EAEP/C,EAAA1L,MAAAzL,KAAA,CAloEA,EAkoEA6P,QACO,SAAAqK,EAEP,MACO,QAAAA,EAGP,UAAA/Z,MAAA,uBAAA+Z,EAAA,SAAArK,GAGAmK,KAIA,OAAAnC,GAQA7N,EAAA8N,UAAA,WAEA1lB,KAAAqZ,MAAA,GAGArZ,KAAAolB,OAAA,KAGAplB,KAAAglB,OAAA,KAGAhlB,KAAAilB,QAAA,EAGAjlB,KAAAqlB,QAAA,GAUAzN,EAAA8N,UAAA9kB,UAAAuT,SAAA,WAsBA,IArBA,IAmBAuO,EADA3Z,EAAA,SAhBA,IAAA/I,KAAAilB,QACAjlB,KAAAolB,OAAA,KACG,GAAAplB,KAAAilB,QACHjlB,KAAAolB,OAAA,EAEAplB,KAAAolB,OAAA,MAAAplB,KAAAilB,SAWA,MARA,IAAAjlB,KAAAqlB,QACArlB,KAAAglB,OAAA,KACG,GAAAhlB,KAAAqlB,QACHrlB,KAAAglB,OAAA,EAEAhlB,KAAAglB,OAAA,MAAAhlB,KAAAqlB,SAGA,SAGAxJ,EAAA,EAAiBA,EAAA7b,KAAAqZ,MAAAhY,OAAuBwa,IAAA,CACxC,OAAA7b,KAAAqZ,MAAAwC,GAAA,IACA,KAzsEA,EA0sEA6G,EAAA,IACA,MAEA,KA9sEA,EA+sEAA,EAAA,IACA,MAEA,KAhtEA,EAitEAA,EAAA,IAIA3Z,EAAA8S,EAAA,GAAA6G,EAAAQ,UAAAljB,KAAAqZ,MAAAwC,GAAA,SAGA,OAAA9S,EAAAhB,KAAA,IAAAwM,QAAA,aAIAlG,EAAA5M,QAAAmW,EACAvJ,EAAA5M,QAAA,iBAAAmW,EACAvJ,EAAA5M,QAAA,aAhuEA,EAiuEA4M,EAAA5M,QAAA,YAhuEA,EAiuEA4M,EAAA5M,QAAA,WAhuEA,oCC3DA,IACAsmB,EADenmB,EAAQ,KACvBmmB,gBAEAA,oBACA1Z,EAAA5M,QAAAsmB,oCCJA3nB,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAEAD,EAAAsmB,qBAAAlT,EAEA,IAAAmT,EAAA5nB,OAAAW,QAAA,SAAAknB,GACA,QAAA/mB,EAAA,EAAiBA,EAAAE,UAAAC,OAAsBH,IAAA,CACvC,IAAAgnB,EAAA9mB,UAAAF,GAEA,QAAAqU,KAAA2S,EACA9nB,OAAAQ,UAAAH,eAAAa,KAAA4mB,EAAA3S,KACA0S,EAAA1S,GAAA2S,EAAA3S,IAKA,OAAA0S,GAGAE,EAAA,WACA,SAAAC,EAAAH,EAAA3lB,GACA,QAAApB,EAAA,EAAmBA,EAAAoB,EAAAjB,OAAkBH,IAAA,CACrC,IAAAmnB,EAAA/lB,EAAApB,GACAmnB,EAAAC,WAAAD,EAAAC,aAAA,EACAD,EAAAE,cAAA,EACA,UAAAF,MAAAG,UAAA,GACApoB,OAAAoB,eAAAymB,EAAAI,EAAA9S,IAAA8S,IAIA,gBAAAI,EAAAC,EAAAC,GAGA,OAFAD,GAAAN,EAAAK,EAAA7nB,UAAA8nB,GACAC,GAAAP,EAAAK,EAAAE,GACAF,GAdA,GAoBAG,EAAAC,EAFajnB,EAAQ,IAMrBknB,EAAAD,EAFuBjnB,EAAQ,MAI/B,SAAAinB,EAAAE,GACA,OAAAA,KAAAC,WAAAD,EAAA,CACA5c,QAAA4c,GAsBA,SAAAE,EAAAzV,EAAAlS,GACA,IAAAkS,EACA,UAAA0V,eAAA,6DAGA,OAAA5nB,GAAA,kBAAAA,GAAA,oBAAAA,EAAAkS,EAAAlS,GAmBAG,EAAAsmB,gBAAA,SAAAoB,GAGA,SAAApB,IACA,IAAAqB,EAEAC,EAAA9mB,GApCA,SAAA+mB,EAAAb,GACA,KAAAa,aAAAb,GACA,UAAAnR,UAAA,qCAoCAiS,CAAAvpB,KAAA+nB,GAEA,QAAAyB,EAAApoB,UAAAC,OAAAmW,EAAAjX,MAAAipB,GAAAC,EAAA,EAAmEA,EAAAD,EAAaC,IAChFjS,EAAAiS,GAAAroB,UAAAqoB,GAGA,OAAAJ,EAAA9mB,EAAA0mB,EAAAjpB,MAAAopB,EAAArB,EAAAznB,WAAAF,OAAAspB,eAAA3B,IAAAzmB,KAAAC,MAAA6nB,EAAA,CAAAppB,MAAAoa,OAAA5C,KAAAjV,EAAAonB,QAAA,SAAA9gB,GACA,IAAA+gB,EAAArnB,EAAAD,MACAyG,EAAA6gB,EAAA7gB,KACAtD,EAAAmkB,EAAAnkB,OACAokB,EAAAD,EAAAC,SACAC,EAAAF,EAAAE,QAEAC,EAAAnB,EAAAzc,QAAA6d,SAAAC,KAAAJ,GAEAzT,GAAA,EAAA0S,EAAA3c,SAAApD,EAAA+gB,GAEArkB,GACAA,EAAAsD,EAAAqN,GAIA2T,KAAAznB,OAAA,oBAAAynB,EAAAznB,MAAAqnB,SACAI,EAAAznB,MAAAqnB,QAAA9gB,IAEKogB,EAAA1mB,EAAA8mB,GAqBL,OAtEA,SAAAa,EAAAC,GACA,uBAAAA,GAAA,OAAAA,EACA,UAAA7S,UAAA,kEAAA6S,GAGAD,EAAAtpB,UAAAR,OAAAS,OAAAspB,KAAAvpB,UAAA,CACAD,YAAA,CACAe,MAAAwoB,EACA5B,YAAA,EACAE,UAAA,EACAD,cAAA,KAGA4B,IAAA/pB,OAAAC,eAAAD,OAAAC,eAAA6pB,EAAAC,GAAAD,EAAA5pB,UAAA6pB,GAIAC,CAAArC,EAsDCa,EAAAzc,QAAAke,eAnBDlC,EAAAJ,EAAA,EACAxS,IAAA,SACA7T,MAAA,WACA,IAAA4oB,EAAAtqB,KAAAsC,MAIAunB,GAHAS,EAAAvhB,KACAuhB,EAAA7kB,OACA6kB,EAAAR,QACAQ,EAAAT,UACAvnB,EAtFA,SAAAymB,EAAAxkB,GACA,IAAA0jB,EAAA,GAEA,QAAA/mB,KAAA6nB,EACAxkB,EAAAsD,QAAA3G,IAAA,GACAd,OAAAQ,UAAAH,eAAAa,KAAAynB,EAAA7nB,KACA+mB,EAAA/mB,GAAA6nB,EAAA7nB,IAGA,OAAA+mB,EA6EAsC,CAAAD,EAAA,wCAEAP,EAAAnB,EAAAzc,QAAA6d,SAAAC,KAAAJ,GAEA,OAAAjB,EAAAzc,QAAAqe,aAAAT,EAAA/B,EAAA,GAA2D1lB,EAAA,CAC3DqnB,QAAA3pB,KAAA2pB,eAKA5B,EAtDA,IAyDA9b,aAAA,CACAxG,YAAAoP,EACAiV,aAAAjV,qCCxJA,IAAA4V,EAAsB7oB,EAAQ,KAE9B8oB,EAAA,mCA4FArc,EAAA5M,QArFA,SAAAsH,EAAA+gB,GACA,IAAAa,EACAC,EACAC,EACAjhB,EACA/D,EACAilB,EACAC,GAAA,EAEAjB,IACAA,EAAA,IAGAa,EAAAb,EAAAa,QAAA,EAEA,IAiCA,GAhCAE,EAAAJ,IACA7gB,EAAAO,SAAA6gB,cACAnlB,EAAAsE,SAAArB,gBACAgiB,EAAA3gB,SAAAC,cAAA,SACAC,YAAAtB,EAEA+hB,EAAAxgB,MAAA2gB,IAAA,QAEAH,EAAAxgB,MAAAE,SAAA,QACAsgB,EAAAxgB,MAAAgI,IAAA,EACAwY,EAAAxgB,MAAA4gB,KAAA,mBAEAJ,EAAAxgB,MAAA6gB,WAAA,MAEAL,EAAAxgB,MAAA8gB,iBAAA,OACAN,EAAAxgB,MAAA+gB,cAAA,OACAP,EAAAxgB,MAAAghB,aAAA,OACAR,EAAAxgB,MAAAihB,WAAA,OACAT,EAAAU,iBAAA,gBAAAnV,GACAA,EAAAoV,kBAEA3B,EAAA4B,SACArV,EAAAsV,iBACAtV,EAAAuV,cAAAC,YACAxV,EAAAuV,cAAAE,QAAAhC,EAAA4B,OAAA3iB,MAGAoB,SAAA4hB,KAAArhB,YAAAogB,GACAlhB,EAAAoiB,mBAAAlB,GACAjlB,EAAAomB,SAAAriB,IACAO,SAAA+hB,YAAA,QAGA,UAAAne,MAAA,iCAGAgd,GAAA,EACG,MAAAoB,GACHxB,GAAAjkB,QAAA0lB,MAAA,qCAAAD,GACAxB,GAAAjkB,QAAAC,KAAA,4BAEA,IACA0lB,OAAAT,cAAAE,QAAAhC,EAAA4B,QAAA,OAAA3iB,GACAgiB,GAAA,EACK,MAAAoB,GACLxB,GAAAjkB,QAAA0lB,MAAA,uCAAAD,GACAxB,GAAAjkB,QAAA0lB,MAAA,0BACAxB,EApEA,SAAAA,GACA,IAAA0B,GAAA,YAAA1W,KAAA2W,UAAAC,WAAA,sBACA,OAAA5B,EAAArW,QAAA,gBAAsC+X,GAkEtCZ,CAAA,YAAA5B,IAAAc,QAAAF,GACA2B,OAAAI,OAAA7B,EAAA7hB,IAEG,QACHlD,IACA,mBAAAA,EAAA6mB,YACA7mB,EAAA6mB,YAAA9iB,GAEA/D,EAAA8mB,mBAIA7B,GACA3gB,SAAA4hB,KAAA7hB,YAAA4gB,GAGAD,IAGA,OAAAE,sBC7FA1c,EAAA5M,QAAA,WACA,IAAAoE,EAAAsE,SAAArB,eAEA,IAAAjD,EAAA+mB,WACA,oBAMA,IAHA,IAAAC,EAAA1iB,SAAA2iB,cACAC,EAAA,GAEA7rB,EAAA,EAAiBA,EAAA2E,EAAA+mB,WAA0B1rB,IAC3C6rB,EAAAnf,KAAA/H,EAAAmnB,WAAA9rB,IAGA,OAAA2rB,EAAAI,QAAAC,eAEA,YACA,eACAL,EAAA1c,OACA,MAEA,QACA0c,EAAA,KAKA,OADAhnB,EAAA8mB,kBACA,WACA,UAAA9mB,EAAA6D,MAAA7D,EAAA8mB,kBAEA9mB,EAAA+mB,YACAG,EAAAtqB,QAAA,SAAAmH,GACA/D,EAAAomB,SAAAriB,KAIAijB,KAAA1pB,4CClCA/C,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAGA,IAAAyrB,EAAYvrB,EAAQ,MAEpBwrB,EAAaxrB,EAAQ,MAErBH,EAAA+K,KAAA4gB,EAAAjhB,QAEA,IAAAC,EAAcxK,EAAQ,KAEtBH,EAAAiG,MAAA0E,EAAAD,QACA1K,EAAA0K,QAAAghB,EAAAhhB,8BCfA,SAAAsG,EAAApE,GAUA,IAAAgf,EAAA,IAGA1a,EAAA,4BAGA2a,EAAA,EACAC,EAAA,EAGAC,EAAA,iBAGAC,EAAA,qBACAC,EAAA,iBACAC,EAAA,yBACAC,EAAA,mBACAC,EAAA,gBACAC,EAAA,iBACAjb,EAAA,oBACAC,EAAA,6BACAib,EAAA,eACAC,EAAA,kBACAC,EAAA,gBACAC,EAAA,kBAEAC,EAAA,iBACAC,EAAA,kBACAC,EAAA,eACAC,EAAA,kBACAvb,EAAA,kBACAwb,EAAA,qBAEAC,EAAA,uBACAC,EAAA,oBAkBApb,EAAA,8BAGAqb,EAAA,mBAGAC,EAAA,GACAA,EAxBA,yBAwBAA,EAvBA,yBAuBAA,EAtBA,sBAsBAA,EArBA,uBAqBAA,EApBA,uBAoBAA,EAnBA,uBAmBAA,EAlBA,8BAkBAA,EAjBA,wBAiBAA,EAhBA,yBAgBA,EACAA,EAAAlB,GAAAkB,EAAAjB,GAAAiB,EAAAH,GAAAG,EAAAf,GAAAe,EAAAF,GAAAE,EAAAd,GAAAc,EAAAb,GAAAa,EAAA9b,GAAA8b,EAAAZ,GAAAY,EAAAX,GAAAW,EAAAT,GAAAS,EAAAP,GAAAO,EAAAN,GAAAM,EAAAL,GAAAK,EA5BA,qBA4BA,EAGA,IAAArb,EAAA,iBAAAb,QAAArS,iBAAAqS,EAGAc,EAAA,iBAAAC,iBAAApT,iBAAAoT,KAGAC,EAAAH,GAAAC,GAAAG,SAAA,cAAAA,GAGAkb,EAA4CntB,MAAAotB,UAAAptB,EAG5CqtB,EAAAF,GAAA,iBAAAvgB,SAAAwgB,UAAAxgB,EAGA0gB,EAAAD,KAAArtB,UAAAmtB,EAGAI,EAAAD,GAAAzb,EAAA2b,QAGAC,EAAA,WACA,IACA,OAAAF,KAAAG,SAAAH,EAAAG,QAAA,QACG,MAAA9Y,KAHH,GAQA+Y,EAAAF,KAAAG,aA4DA,SAAAC,EAAAzjB,EAAA0jB,GAIA,IAHA,IAAA3nB,GAAA,EACAvG,EAAA,MAAAwK,EAAA,EAAAA,EAAAxK,SAEAuG,EAAAvG,GACA,GAAAkuB,EAAA1jB,EAAAjE,KAAAiE,GACA,SAIA,SAwEA,SAAA2jB,EAAA/Y,GACA,IAAA7O,GAAA,EACAwO,EAAA7V,MAAAkW,EAAAlG,MAIA,OAHAkG,EAAAhU,QAAA,SAAAf,EAAA6T,GACAa,IAAAxO,GAAA,CAAA2N,EAAA7T,KAEA0U,EA0BA,SAAAqZ,EAAAta,GACA,IAAAvN,GAAA,EACAwO,EAAA7V,MAAA4U,EAAA5E,MAIA,OAHA4E,EAAA1S,QAAA,SAAAf,GACA0U,IAAAxO,GAAAlG,IAEA0U,EAKA,IAzBA9K,EAAAokB,EAyBA/b,EAAApT,MAAAK,UACAgT,EAAAF,SAAA9S,UACAiT,EAAAzT,OAAAQ,UAGAkT,EAAAL,EAAA,sBAGAS,EAAAN,EAAAO,SAGA1T,EAAAoT,EAAApT,eAGAsT,EAAA,WACA,IAAAC,EAAA,SAAAjN,KAAA+M,KAAAvP,MAAAuP,EAAAvP,KAAA0P,UAAA,IACA,OAAAD,EAAA,iBAAAA,EAAA,GAFA,GAWA2b,EAAA9b,EAAAM,SAGAE,EAAAC,OAAA,IAAAJ,EAAA5S,KAAAb,GAAA8T,QAhQA,sBAgQA,QAAAA,QAAA,uEAGAqb,GAAAb,EAAAtb,EAAAmc,YAAA/a,EACAL,GAAAf,EAAAe,OACAqb,GAAApc,EAAAoc,WACAC,GAAAjc,EAAAic,qBACAhoB,GAAA6L,EAAA7L,OACAioB,GAAAvb,MAAAwb,iBAAAnb,EAGAob,GAAA7vB,OAAA8vB,sBACAC,GAAAP,MAAAQ,cAAAvb,EACAwb,IAlEA/kB,EAkEAlL,OAAAmE,KAlEAmrB,EAkEAtvB,OAjEA,SAAAkwB,GACA,OAAAhlB,EAAAokB,EAAAY,MAmEAC,GAAA7b,GAAAjB,EAAA,YACAgB,GAAAC,GAAAjB,EAAA,OACA+c,GAAA9b,GAAAjB,EAAA,WACAgd,GAAA/b,GAAAjB,EAAA,OACAid,GAAAhc,GAAAjB,EAAA,WACAkB,GAAAD,GAAAtU,OAAA,UAGAuwB,GAAApa,GAAAga,IACAK,GAAAra,GAAA9B,IACAoc,GAAAta,GAAAia,IACAM,GAAAva,GAAAka,IACAM,GAAAxa,GAAAma,IAGA9b,GAAAJ,MAAA5T,eAAAiU,EACAmc,GAAApc,MAAAqc,aAAApc,EASA,SAAAE,GAAAC,GACA,IAAApN,GAAA,EACAvG,EAAA,MAAA2T,EAAA,EAAAA,EAAA3T,OAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KAsGA,SAAAE,GAAAJ,GACA,IAAApN,GAAA,EACAvG,EAAA,MAAA2T,EAAA,EAAAA,EAAA3T,OAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KAoHA,SAAAG,GAAAL,GACA,IAAApN,GAAA,EACAvG,EAAA,MAAA2T,EAAA,EAAAA,EAAA3T,OAGA,IAFArB,KAAAiV,UAEArN,EAAAvG,GAAA,CACA,IAAA6T,EAAAF,EAAApN,GACA5H,KAAAmV,IAAAD,EAAA,GAAAA,EAAA,KAmGA,SAAAgc,GAAAC,GACA,IAAAvpB,GAAA,EACAvG,EAAA,MAAA8vB,EAAA,EAAAA,EAAA9vB,OAGA,IAFArB,KAAA2W,SAAA,IAAAtB,KAEAzN,EAAAvG,GACArB,KAAAoxB,IAAAD,EAAAvpB,IA8CA,SAAAypB,GAAArc,GACA,IAAA0B,EAAA1W,KAAA2W,SAAA,IAAAvB,GAAAJ,GACAhV,KAAAuQ,KAAAmG,EAAAnG,KA2GA,SAAA+gB,GAAA5vB,EAAA6vB,GACA,IAAAC,EAAA3qB,GAAAnF,GACA+vB,GAAAD,GAAAE,GAAAhwB,GACAiwB,GAAAH,IAAAC,GAAArB,GAAA1uB,GACAkwB,GAAAJ,IAAAC,IAAAE,GAAAtC,GAAA3tB,GACAmwB,EAAAL,GAAAC,GAAAE,GAAAC,EACAxb,EAAAyb,EApqBA,SAAA1wB,EAAA2wB,GAIA,IAHA,IAAAlqB,GAAA,EACAwO,EAAA7V,MAAAY,KAEAyG,EAAAzG,GACAiV,EAAAxO,GAAAkqB,EAAAlqB,GAGA,OAAAwO,EA4pBA2b,CAAArwB,EAAAL,OAAAqc,QAAA,GACArc,EAAA+U,EAAA/U,OAEA,QAAAkU,KAAA7T,GACA6vB,IAAA9wB,EAAAa,KAAAI,EAAA6T,IAAAsc,IACA,UAAAtc,GACAoc,IAAA,UAAApc,GAAA,UAAAA,IACAqc,IAAA,UAAArc,GAAA,cAAAA,GAAA,cAAAA,IACAyc,GAAAzc,EAAAlU,KACA+U,EAAAxI,KAAA2H,GAIA,OAAAa,EAYA,SAAAd,GAAAzJ,EAAA0J,GAGA,IAFA,IAAAlU,EAAAwK,EAAAxK,OAEAA,KACA,GAAA4wB,GAAApmB,EAAAxK,GAAA,GAAAkU,GACA,OAAAlU,EAIA,SA4BA,SAAA6wB,GAAAxwB,GACA,aAAAA,OACAmT,IAAAnT,EAAA6sB,EAAAN,EAGA8B,UAAA3vB,OAAAsB,GA4bA,SAAAA,GACA,IAAAywB,EAAA1xB,EAAAa,KAAAI,EAAAquB,IACA7Z,EAAAxU,EAAAquB,IAEA,IACAruB,EAAAquB,SAAAlb,EACA,IAAAud,GAAA,EACG,MAAA/b,IAEH,IAAAD,EAAAuZ,EAAAruB,KAAAI,GAEA0wB,IACAD,EACAzwB,EAAAquB,IAAA7Z,SAEAxU,EAAAquB,KAIA,OAAA3Z,EA/cAic,CAAA3wB,GAwkBA,SAAAA,GACA,OAAAiuB,EAAAruB,KAAAI,GAzkBA0S,CAAA1S,GAWA,SAAA4wB,GAAA5wB,GACA,OAAAiW,GAAAjW,IAAAwwB,GAAAxwB,IAAA+rB,EAkBA,SAAA8E,GAAA7wB,EAAA8T,EAAAgd,EAAAC,EAAAC,GACA,OAAAhxB,IAAA8T,IAIA,MAAA9T,GAAA,MAAA8T,IAAAmC,GAAAjW,KAAAiW,GAAAnC,GACA9T,OAAA8T,MAqBA,SAAA5J,EAAA4J,EAAAgd,EAAAC,EAAAE,EAAAD,GACA,IAAAE,EAAA/rB,GAAA+E,GACAinB,EAAAhsB,GAAA2O,GACAsd,EAAAF,EAAAlF,EAAAqF,GAAAnnB,GACAonB,EAAAH,EAAAnF,EAAAqF,GAAAvd,GAGAyd,GAFAH,KAAArF,EAAAS,EAAA4E,IAEA5E,EACAgF,GAFAF,KAAAvF,EAAAS,EAAA8E,IAEA9E,EACAiF,EAAAL,GAAAE,EAEA,GAAAG,GAAA/C,GAAAxkB,GAAA,CACA,IAAAwkB,GAAA5a,GACA,SAGAod,GAAA,EACAK,GAAA,EAGA,GAAAE,IAAAF,EAEA,OADAP,MAAA,IAAArB,IACAuB,GAAAvD,GAAAzjB,GAAAwnB,GAAAxnB,EAAA4J,EAAAgd,EAAAC,EAAAE,EAAAD,GAyKA,SAAA9mB,EAAA4J,EAAAU,EAAAsc,EAAAC,EAAAE,EAAAD,GACA,OAAAxc,GACA,KAAAuY,EACA,GAAA7iB,EAAAynB,YAAA7d,EAAA6d,YAAAznB,EAAA0nB,YAAA9d,EAAA8d,WACA,SAGA1nB,IAAA2nB,OACA/d,IAAA+d,OAEA,KAAA/E,EACA,QAAA5iB,EAAAynB,YAAA7d,EAAA6d,aAAAV,EAAA,IAAA9C,GAAAjkB,GAAA,IAAAikB,GAAAra,KAMA,KAAAoY,EACA,KAAAC,EACA,KAAAG,EAGA,OAAAiE,IAAArmB,GAAA4J,GAEA,KAAAsY,EACA,OAAAliB,EAAAd,MAAA0K,EAAA1K,MAAAc,EAAAgf,SAAApV,EAAAoV,QAEA,KAAAwD,EACA,KAAAE,EAIA,OAAA1iB,GAAA4J,EAAA,GAEA,KAAAuY,EACA,IAAAyF,EAAAhE,EAEA,KAAAnB,EACA,IAAAoF,EAAAjB,EAAAlF,EAGA,GAFAkG,MAAA/D,GAEA7jB,EAAA2E,MAAAiF,EAAAjF,OAAAkjB,EACA,SAIA,IAAAC,EAAAhB,EAAA5b,IAAAlL,GAEA,GAAA8nB,EACA,OAAAA,GAAAle,EAGAgd,GAAAjF,EAEAmF,EAAAvd,IAAAvJ,EAAA4J,GACA,IAAAY,EAAAgd,GAAAI,EAAA5nB,GAAA4nB,EAAAhe,GAAAgd,EAAAC,EAAAE,EAAAD,GAEA,OADAA,EAAA,OAAA9mB,GACAwK,EAEA,KAAArD,EACA,GAAAie,GACA,OAAAA,GAAA1vB,KAAAsK,IAAAolB,GAAA1vB,KAAAkU,GAKA,SA3OAme,CAAA/nB,EAAA4J,EAAAsd,EAAAN,EAAAC,EAAAE,EAAAD,GAGA,KAAAF,EAAAlF,GAAA,CACA,IAAAsG,EAAAX,GAAAxyB,EAAAa,KAAAsK,EAAA,eACAioB,EAAAX,GAAAzyB,EAAAa,KAAAkU,EAAA,eAEA,GAAAoe,GAAAC,EAAA,CACA,IAAAC,EAAAF,EAAAhoB,EAAAlK,QAAAkK,EACAmoB,EAAAF,EAAAre,EAAA9T,QAAA8T,EAEA,OADAkd,MAAA,IAAArB,IACAsB,EAAAmB,EAAAC,EAAAvB,EAAAC,EAAAC,IAIA,IAAAS,EACA,SAIA,OADAT,MAAA,IAAArB,IAyOA,SAAAzlB,EAAA4J,EAAAgd,EAAAC,EAAAE,EAAAD,GACA,IAAAe,EAAAjB,EAAAlF,EACA0G,EAAAC,GAAAroB,GACAsoB,EAAAF,EAAA3yB,OAEA8yB,EADAF,GAAAze,GACAnU,OAEA,GAAA6yB,GAAAC,IAAAV,EACA,SAKA,IAFA,IAAA7rB,EAAAssB,EAEAtsB,KAAA,CACA,IAAA2N,EAAAye,EAAApsB,GAEA,KAAA6rB,EAAAle,KAAAC,EAAA/U,EAAAa,KAAAkU,EAAAD,IACA,SAKA,IAAAme,EAAAhB,EAAA5b,IAAAlL,GAEA,GAAA8nB,GAAAhB,EAAA5b,IAAAtB,GACA,OAAAke,GAAAle,EAGA,IAAAY,GAAA,EACAsc,EAAAvd,IAAAvJ,EAAA4J,GACAkd,EAAAvd,IAAAK,EAAA5J,GAGA,IAFA,IAAAwoB,EAAAX,IAEA7rB,EAAAssB,GAAA,CACA3e,EAAAye,EAAApsB,GACA,IAAAysB,EAAAzoB,EAAA2J,GACA+e,EAAA9e,EAAAD,GAEA,GAAAkd,EACA,IAAA8B,EAAAd,EAAAhB,EAAA6B,EAAAD,EAAA9e,EAAAC,EAAA5J,EAAA8mB,GAAAD,EAAA4B,EAAAC,EAAA/e,EAAA3J,EAAA4J,EAAAkd,GAIA,UAAA7d,IAAA0f,EAAAF,IAAAC,GAAA3B,EAAA0B,EAAAC,EAAA9B,EAAAC,EAAAC,GAAA6B,GAAA,CACAne,GAAA,EACA,MAGAge,MAAA,eAAA7e,GAGA,GAAAa,IAAAge,EAAA,CACA,IAAAI,EAAA5oB,EAAAjL,YACA8zB,EAAAjf,EAAA7U,YAEA6zB,GAAAC,GAAA,gBAAA7oB,GAAA,gBAAA4J,KAAA,mBAAAgf,mBAAA,mBAAAC,qBACAre,GAAA,GAMA,OAFAsc,EAAA,OAAA9mB,GACA8mB,EAAA,OAAAld,GACAY,EAtSAse,CAAA9oB,EAAA4J,EAAAgd,EAAAC,EAAAE,EAAAD,GA5DAiC,CAAAjzB,EAAA8T,EAAAgd,EAAAC,EAAAF,GAAAG,IAwEA,SAAA1c,GAAAtU,GACA,SAAAuU,GAAAvU,KA8bA4J,EA9bA5J,EA+bAqS,QAAAzI,MA3bA6K,GAAAzU,GAAA2S,EAAAhB,GACAuC,KAAAW,GAAA7U,IAybA,IAAA4J,EAlaA,SAAAspB,GAAAhpB,GACA,IA6aA,SAAAlK,GACA,IAAAmzB,EAAAnzB,KAAAf,YACAm0B,EAAA,mBAAAD,KAAAj0B,WAAAiT,EACA,OAAAnS,IAAAozB,EAhbAC,CAAAnpB,GACA,OAAAykB,GAAAzkB,GAGA,IAAAwK,EAAA,GAEA,QAAAb,KAAAnV,OAAAwL,GACAnL,EAAAa,KAAAsK,EAAA2J,IAAA,eAAAA,GACAa,EAAAxI,KAAA2H,GAIA,OAAAa,EAiBA,SAAAgd,GAAAvnB,EAAA2J,EAAAgd,EAAAC,EAAAE,EAAAD,GACA,IAAAe,EAAAjB,EAAAlF,EACA0H,EAAAnpB,EAAAxK,OACA8yB,EAAA3e,EAAAnU,OAEA,GAAA2zB,GAAAb,KAAAV,GAAAU,EAAAa,GACA,SAIA,IAAAtB,EAAAhB,EAAA5b,IAAAjL,GAEA,GAAA6nB,GAAAhB,EAAA5b,IAAAtB,GACA,OAAAke,GAAAle,EAGA,IAAA5N,GAAA,EACAwO,GAAA,EACA6e,EAAAzC,EAAAjF,EAAA,IAAA2D,QAAArc,EAIA,IAHA6d,EAAAvd,IAAAtJ,EAAA2J,GACAkd,EAAAvd,IAAAK,EAAA3J,KAEAjE,EAAAotB,GAAA,CACA,IAAAE,EAAArpB,EAAAjE,GACA0sB,EAAA9e,EAAA5N,GAEA,GAAA6qB,EACA,IAAA8B,EAAAd,EAAAhB,EAAA6B,EAAAY,EAAAttB,EAAA4N,EAAA3J,EAAA6mB,GAAAD,EAAAyC,EAAAZ,EAAA1sB,EAAAiE,EAAA2J,EAAAkd,GAGA,QAAA7d,IAAA0f,EAAA,CACA,GAAAA,EACA,SAGAne,GAAA,EACA,MAIA,GAAA6e,GACA,IAAA3F,EAAA9Z,EAAA,SAAA8e,EAAAa,GACA,GAz5BA5f,EAy5BA4f,GAAAF,EAx5BApe,IAAAtB,KAw5BA2f,IAAAZ,GAAA3B,EAAAuC,EAAAZ,EAAA9B,EAAAC,EAAAC,IACA,OAAAuC,EAAArnB,KAAAunB,GA15BA,IAAA5f,IA45BO,CACPa,GAAA,EACA,YAEK,GAAA8e,IAAAZ,IAAA3B,EAAAuC,EAAAZ,EAAA9B,EAAAC,EAAAC,GAAA,CACLtc,GAAA,EACA,OAMA,OAFAsc,EAAA,OAAA7mB,GACA6mB,EAAA,OAAAld,GACAY,EAiLA,SAAA6d,GAAAroB,GACA,OAvaA,SAAAA,EAAAwpB,EAAAC,GACA,IAAAjf,EAAAgf,EAAAxpB,GACA,OAAA/E,GAAA+E,GAAAwK,EArwBA,SAAAvK,EAAAslB,GAKA,IAJA,IAAAvpB,GAAA,EACAvG,EAAA8vB,EAAA9vB,OACAi0B,EAAAzpB,EAAAxK,SAEAuG,EAAAvG,GACAwK,EAAAypB,EAAA1tB,GAAAupB,EAAAvpB,GAGA,OAAAiE,EA4vBA0pB,CAAAnf,EAAAif,EAAAzpB,IAqaA4pB,CAAA5pB,EAAArH,GAAAkxB,IAYA,SAAAjf,GAAAC,EAAAlB,GACA,IAAAmB,EAAAD,EAAAE,SACA,OA8HA,SAAAjV,GACA,IAAAgI,SAAAhI,EACA,gBAAAgI,GAAA,UAAAA,GAAA,UAAAA,GAAA,WAAAA,EAAA,cAAAhI,EAAA,OAAAA,EAhIAkV,CAAArB,GAAAmB,EAAA,iBAAAnB,EAAA,iBAAAmB,EAAAD,IAYA,SAAA/B,GAAA9I,EAAA2J,GACA,IAAA7T,EAxmCA,SAAAkK,EAAA2J,GACA,aAAA3J,OAAAiJ,EAAAjJ,EAAA2J,GAumCAvN,CAAA4D,EAAA2J,GACA,OAAAS,GAAAtU,UAAAmT,EA74BAE,GAAAnU,UAAAqU,MA7EA,WACAjV,KAAA2W,SAAAhC,MAAA,SACA3U,KAAAuQ,KAAA,GA4EAwE,GAAAnU,UAAA,OA9DA,SAAA2U,GACA,IAAAa,EAAApW,KAAA6W,IAAAtB,WAAAvV,KAAA2W,SAAApB,GAEA,OADAvV,KAAAuQ,MAAA6F,EAAA,IACAA,GA4DArB,GAAAnU,UAAAkW,IA/CA,SAAAvB,GACA,IAAAmB,EAAA1W,KAAA2W,SAEA,GAAAhC,GAAA,CACA,IAAAyB,EAAAM,EAAAnB,GACA,OAAAa,IAAAzD,OAAAkC,EAAAuB,EAGA,OAAA3V,EAAAa,KAAAoV,EAAAnB,GAAAmB,EAAAnB,QAAAV,GAwCAE,GAAAnU,UAAAiW,IA3BA,SAAAtB,GACA,IAAAmB,EAAA1W,KAAA2W,SACA,OAAAhC,QAAAE,IAAA6B,EAAAnB,GAAA9U,EAAAa,KAAAoV,EAAAnB,IA0BAR,GAAAnU,UAAAuU,IAZA,SAAAI,EAAA7T,GACA,IAAAgV,EAAA1W,KAAA2W,SAGA,OAFA3W,KAAAuQ,MAAAvQ,KAAA6W,IAAAtB,GAAA,IACAmB,EAAAnB,GAAAZ,SAAAE,IAAAnT,EAAAiR,EAAAjR,EACA1B,MA+HAoV,GAAAxU,UAAAqU,MA3FA,WACAjV,KAAA2W,SAAA,GACA3W,KAAAuQ,KAAA,GA0FA6E,GAAAxU,UAAA,OA7EA,SAAA2U,GACA,IAAAmB,EAAA1W,KAAA2W,SACA/O,EAAA0N,GAAAoB,EAAAnB,GAEA,QAAA3N,EAAA,KAMAA,GAFA8O,EAAArV,OAAA,EAGAqV,EAAAK,MAEAjP,GAAAxG,KAAAoV,EAAA9O,EAAA,KAGA5H,KAAAuQ,MACA,IA6DA6E,GAAAxU,UAAAkW,IAhDA,SAAAvB,GACA,IAAAmB,EAAA1W,KAAA2W,SACA/O,EAAA0N,GAAAoB,EAAAnB,GACA,OAAA3N,EAAA,OAAAiN,EAAA6B,EAAA9O,GAAA,IA8CAwN,GAAAxU,UAAAiW,IAjCA,SAAAtB,GACA,OAAAD,GAAAtV,KAAA2W,SAAApB,IAAA,GAiCAH,GAAAxU,UAAAuU,IAnBA,SAAAI,EAAA7T,GACA,IAAAgV,EAAA1W,KAAA2W,SACA/O,EAAA0N,GAAAoB,EAAAnB,GASA,OAPA3N,EAAA,KACA5H,KAAAuQ,KACAmG,EAAA9I,KAAA,CAAA2H,EAAA7T,KAEAgV,EAAA9O,GAAA,GAAAlG,EAGA1B,MA6GAqV,GAAAzU,UAAAqU,MAzEA,WACAjV,KAAAuQ,KAAA,EACAvQ,KAAA2W,SAAA,CACAK,KAAA,IAAAjC,GACA0B,IAAA,IAAAhC,IAAAW,IACAlK,OAAA,IAAA6J,KAqEAM,GAAAzU,UAAA,OAvDA,SAAA2U,GACA,IAAAa,EAAAI,GAAAxW,KAAAuV,GAAA,OAAAA,GAEA,OADAvV,KAAAuQ,MAAA6F,EAAA,IACAA,GAqDAf,GAAAzU,UAAAkW,IAxCA,SAAAvB,GACA,OAAAiB,GAAAxW,KAAAuV,GAAAuB,IAAAvB,IAwCAF,GAAAzU,UAAAiW,IA3BA,SAAAtB,GACA,OAAAiB,GAAAxW,KAAAuV,GAAAsB,IAAAtB,IA2BAF,GAAAzU,UAAAuU,IAbA,SAAAI,EAAA7T,GACA,IAAAgV,EAAAF,GAAAxW,KAAAuV,GACAhF,EAAAmG,EAAAnG,KAGA,OAFAmG,EAAAvB,IAAAI,EAAA7T,GACA1B,KAAAuQ,MAAAmG,EAAAnG,QAAA,IACAvQ,MA4DAkxB,GAAAtwB,UAAAwwB,IAAAF,GAAAtwB,UAAAgN,KArBA,SAAAlM,GAGA,OAFA1B,KAAA2W,SAAAxB,IAAAzT,EAAAiR,GAEA3S,MAmBAkxB,GAAAtwB,UAAAiW,IANA,SAAAnV,GACA,OAAA1B,KAAA2W,SAAAE,IAAAnV,IA6GA2vB,GAAAzwB,UAAAqU,MAlFA,WACAjV,KAAA2W,SAAA,IAAAvB,GACApV,KAAAuQ,KAAA,GAiFA8gB,GAAAzwB,UAAA,OApEA,SAAA2U,GACA,IAAAmB,EAAA1W,KAAA2W,SACAP,EAAAM,EAAA,OAAAnB,GAEA,OADAvV,KAAAuQ,KAAAmG,EAAAnG,KACA6F,GAiEAib,GAAAzwB,UAAAkW,IApDA,SAAAvB,GACA,OAAAvV,KAAA2W,SAAAG,IAAAvB,IAoDA8b,GAAAzwB,UAAAiW,IAvCA,SAAAtB,GACA,OAAAvV,KAAA2W,SAAAE,IAAAtB,IAuCA8b,GAAAzwB,UAAAuU,IAzBA,SAAAI,EAAA7T,GACA,IAAAgV,EAAA1W,KAAA2W,SAEA,GAAAD,aAAAtB,GAAA,CACA,IAAAsgB,EAAAhf,EAAAC,SAEA,IAAAlC,IAAAihB,EAAAr0B,OAAAgsB,EAAA,EAGA,OAFAqI,EAAA9nB,KAAA,CAAA2H,EAAA7T,IACA1B,KAAAuQ,OAAAmG,EAAAnG,KACAvQ,KAGA0W,EAAA1W,KAAA2W,SAAA,IAAAtB,GAAAqgB,GAKA,OAFAhf,EAAAvB,IAAAI,EAAA7T,GACA1B,KAAAuQ,KAAAmG,EAAAnG,KACAvQ,MAqjBA,IAAAy1B,GAAAxF,GAAA,SAAArkB,GACA,aAAAA,EACA,IAGAA,EAAAxL,OAAAwL,GA9wCA,SAAAC,EAAA0jB,GAMA,IALA,IAAA3nB,GAAA,EACAvG,EAAA,MAAAwK,EAAA,EAAAA,EAAAxK,OACAs0B,EAAA,EACAvf,EAAA,KAEAxO,EAAAvG,GAAA,CACA,IAAAK,EAAAmK,EAAAjE,GAEA2nB,EAAA7tB,EAAAkG,EAAAiE,KACAuK,EAAAuf,KAAAj0B,GAIA,OAAA0U,EAiwCAwf,CAAA3F,GAAArkB,GAAA,SAAAiqB,GACA,OAAA/F,GAAAxuB,KAAAsK,EAAAiqB,OAweA,WACA,UA9dA9C,GAAAb,GAwCA,SAAAF,GAAAtwB,EAAAL,GAEA,SADAA,EAAA,MAAAA,EAAAmsB,EAAAnsB,KACA,iBAAAK,GAAAgtB,EAAA9Y,KAAAlU,QAAA,GAAAA,EAAA,MAAAA,EAAAL,EA8DA,SAAAkV,GAAAjL,GACA,SAAAA,EAAA,CACA,IACA,OAAA4I,EAAA5S,KAAAgK,GACK,MAAA+K,IAEL,IACA,OAAA/K,EAAA,GACK,MAAA+K,KAGL,SAoCA,SAAA4b,GAAAvwB,EAAA8T,GACA,OAAA9T,IAAA8T,GAAA9T,OAAA8T,OAtJA+a,IAAAwC,GAAA,IAAAxC,GAAA,IAAAuF,YAAA,MAAArH,GAAAha,IAAAse,GAAA,IAAAte,KAAAsZ,GAAAyC,IA32CA,oBA22CAuC,GAAAvC,GAAAuF,YAAAtF,IAAAsC,GAAA,IAAAtC,KAAApC,GAAAqC,IAp2CA,oBAo2CAqC,GAAA,IAAArC,OACAqC,GAAA,SAAArxB,GACA,IAAA0U,EAAA8b,GAAAxwB,GACAmzB,EAAAze,GAAA8X,EAAAxsB,EAAAf,iBAAAkU,EACAmhB,EAAAnB,EAAAte,GAAAse,GAAA,GAEA,GAAAmB,EACA,OAAAA,GACA,KAAArF,GACA,OAAAlC,EAEA,KAAAmC,GACA,OAAA7C,EAEA,KAAA8C,GACA,MA13CA,mBA43CA,KAAAC,GACA,OAAAzC,EAEA,KAAA0C,GACA,MAz3CA,mBA63CA,OAAA3a,IAmJA,IAAAsb,GAAAY,GAAA,WACA,OAAAlxB,UADA,IAECkxB,GAAA,SAAA5wB,GACD,OAAAiW,GAAAjW,IAAAjB,EAAAa,KAAAI,EAAA,YAAAouB,GAAAxuB,KAAAI,EAAA,WA0BAmF,GAAAtG,MAAAsG,QAiDA,IAAAupB,GAAAD,IAmPA,WACA,UAhMA,SAAAha,GAAAzU,GACA,IAAAuU,GAAAvU,GACA,SAKA,IAAAwU,EAAAgc,GAAAxwB,GACA,OAAAwU,GAAArD,GAAAqD,GAAApD,GAAAoD,GAAAyX,GAAAzX,GAAAiY,EA8BA,SAAA8H,GAAAv0B,GACA,uBAAAA,MAAA,GAAAA,EAAA,MAAAA,GAAA8rB,EA6BA,SAAAvX,GAAAvU,GACA,IAAAgI,SAAAhI,EACA,aAAAA,IAAA,UAAAgI,GAAA,YAAAA,GA4BA,SAAAiO,GAAAjW,GACA,aAAAA,GAAA,iBAAAA,EAqBA,IAAA2tB,GAAAD,EAxmDA,SAAA9jB,GACA,gBAAA5J,GACA,OAAA4J,EAAA5J,IAsmDAw0B,CAAA9G,GApxBA,SAAA1tB,GACA,OAAAiW,GAAAjW,IAAAu0B,GAAAv0B,EAAAL,WAAAstB,EAAAuD,GAAAxwB,KAizBA,SAAA6C,GAAAqH,GACA,OAhOA,OADAlK,EAiOAkK,IAhOAqqB,GAAAv0B,EAAAL,UAAA8U,GAAAzU,GAgOA4vB,GAAA1lB,GAAAgpB,GAAAhpB,GAjOA,IAAAlK,EA6QA2M,EAAA5M,QAzNA,SAAAC,EAAA8T,GACA,OAAA+c,GAAA7wB,EAAA8T,mECrqDApV,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAGAD,EAAA8E,cADA,2IAGA9E,EAAAe,aADA,yIAgBAf,EAAAQ,eAbA,WACA,IAAAD,EASA,OAPAqqB,OAAArqB,KACAA,EAAAqqB,OAAArqB,KACAm0B,SAAA9J,OAAArqB,IAAAG,SAAAkqB,OAAArqB,IAAAm0B,SAEAn0B,EAAUJ,EAAQ,KAGlBI,GAiBAP,EAAAmB,SAZA,SAAAwzB,EAAAC,GACA,IAAAC,EAAA,KACA,kBACA,IAAAC,EAAAv2B,KACAwX,EAAApW,UACAo1B,aAAAF,GACAA,EAAAG,WAAA,WACAL,EAAA70B,MAAAg1B,EAAA/e,IACK6e,2BCjCL,SAAAhoB,IAmCA,WACA,IAEAoE,EAAA,WACA,OAAAzS,KADA,GAIAyS,GAAA,oBAAA4Z,SAAA5Z,EAAA4Z,QAIA,IAAA/d,EAAA,SAAAA,EAAAD,EAAAqoB,EAAAC,GACA,kBAAAtoB,GAQA,GAAAjN,UAAAC,SAAAs1B,EAAAD,GAEApoB,EAAAsoB,QAAAvoB,KACAC,EAAAuoB,SAAAxoB,GAAAsoB,EACAroB,EAAAsoB,QAAAvoB,GAAA,OAXAC,EAAAwoB,SAAAxoB,EAAAwoB,SAAAv1B,MAAAvB,KAAAoB,YACAsF,QAAA0lB,MAAA,mDACA1lB,QAAAqwB,UAaAzoB,EAAAsoB,QAAA,GACAtoB,EAAAuoB,SAAA,GAKA,IAAAG,EAAA,SAAAC,EAAA5oB,EAAAgC,GACA,qBAAAhC,EAAA,CACA,IAAAsoB,EAAAO,EAAAD,EAAA5oB,GAEA,QAAAwG,GAAA8hB,EAEA,OADAtmB,OACAsmB,OAEK,sBAAAv2B,OAAAQ,UAAAuT,SAAA7S,KAAA+M,GAAA,CAGL,IAFA,IAAA8oB,EAAA,GAEAj2B,EAAA,EAAAk2B,EAAA/oB,EAAAhN,OAAwCH,EAAAk2B,IAAOl2B,EAAA,CAC/C,IAAAm2B,EAAAH,EAAAD,EAAA5oB,EAAAnN,IACA,QAAA2T,GAAAwiB,GAAAl1B,EAAA20B,SAAA,OACAK,EAAAvpB,KAAAypB,GAGA,OAAAhnB,KAAA9O,MAAA,KAAA41B,KAAA,IAIAh1B,EAAA,SAAAA,EAAAkM,EAAAgC,GACA,IAAAinB,EAAAN,EAAA,GAAA3oB,EAAAgC,GAEA,YAAAwE,GAAAyiB,GAAAn1B,EAAA20B,SAAA30B,EAAA20B,SAAAv1B,MAAAvB,KAAAoB,WACAk2B,GA6BAJ,EAAA,SAAAD,EAAAM,GACAA,EA3BA,SAAAC,EAAAP,EAAAM,GAEA,QAAAA,EAAA1vB,QAAA,MACA,IAAA4vB,EAAAF,EAAA7vB,MAAA,KACA,OAAA8vB,EAAAP,EAAAQ,EAAA,QAAAD,EAAAP,EAAAQ,EAAA,IAIA,QAAAF,EAAA/a,OAAA,GAIA,IAFA+a,EADAN,EAAAvvB,MAAA,KAAA2e,MAAA,MAAAte,KAAA,KACA,IAAAwvB,GAEA,IAAAA,EAAA1vB,QAAA,MAAA6vB,GAAAH,GAAA,CACA,IAAAG,EAAAH,EACAA,IAAAhjB,QAAA,cAAAA,QAAA,qBAIA,OAAAgjB,EASAC,CAAAP,EAAAM,GACA,IAAAlpB,EAAAC,EAAAsoB,QAAAW,GAEA,IAAAlpB,EAAA,CAGA,uBAFAA,EAAAC,EAAAuoB,SAAAU,IAEA,CACA,IAAA91B,EAAA,GACAulB,EAAA,CACA5d,GAAAmuB,EACAI,IAAA,GACAl2B,UACAm2B,UAAA,GAQAn2B,EADA4M,EAJA,SAAAA,EAAAgC,GACA,OAAA2mB,EAAAO,EAAAlpB,EAAAgC,IAGA5O,EAAAulB,IACAA,EAAAvlB,QACA6M,EAAAsoB,QAAAW,GAAA91B,SACA6M,EAAAuoB,SAAAU,GAGAlpB,EAAAC,EAAAsoB,QAAAW,GAAA91B,GAAA4M,EAGA,OAAAA,IAGA,SAAAwpB,GACA,IAAApkB,EAAAhB,EAEAolB,IACAplB,EAAAolB,KAAAplB,EAAAolB,GAAA,IACApkB,EAAAhB,EAAAolB,IAGApkB,EAAAnF,QAAAmF,EAAAnF,OAAAspB,WACAtpB,EAAAwoB,SAAArjB,EAAAnF,OACAmF,EAAAnF,SACAmF,EAAAnF,OAAAspB,UAAA,GAGAnkB,EAAAtR,SAAAsR,EAAAtR,QAAAy1B,WACAz1B,EAAA20B,SAAArjB,EAAAtR,QACAsR,EAAAtR,UACAsR,EAAAtR,QAAAy1B,UAAA,GAIAE,CA5IA,OADA,GAgJA91B,IAAAsM,OAAA,yDAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA0pB,EAAA,CACAhxB,KAAAuN,OAAA1T,UAAAmG,KACA6O,KAAAtB,OAAA1T,UAAAgV,KACAuB,MAAAuG,OAAA9c,UAAAuW,MACA5C,QAAAmJ,OAAA9c,UAAA2T,QACA7M,MAAAgW,OAAA9c,UAAA8G,OAEAswB,OAAAnjB,IAAAkjB,EAAAhxB,KAAAzF,KAAA,cAEA22B,EAAA,WACA,IAAApc,EAAA,KAEA,OADAkc,EAAAniB,KAAAtU,KAAAua,EAAA,KACAA,EAAAqc,UAHA,GAMAD,GAAAD,IAEA1jB,OAAA1T,UAAAmG,KAAA,SAAAoxB,GACA,IACArtB,EACAstB,EAiCAC,EAnCAlhB,EAAA4gB,EAAAhxB,KAAAxF,MAAAvB,KAAAoB,WAIA,oBAAA+2B,GAAAhhB,EAAA,CAUA,IATA6gB,GAAA7gB,EAAA9V,OAAA,GAmCA,SAAAwK,EAAAjB,EAAA0tB,GACA,GAAA/3B,MAAAK,UAAAiH,QACA,OAAAgE,EAAAhE,QAAA+C,EAAA0tB,GAEA,QAAAp3B,EAAAo3B,GAAA,EAA2Bp3B,EAAA2K,EAAAxK,OAAkBH,IAC7C,GAAA2K,EAAA3K,KAAA0J,EAAA,OAAA1J,EAGA,SA3CA2G,CAAAsP,EAAA,SACAihB,EAAA9jB,OAAAtU,KAAAkoB,OAAA6P,EAAAxjB,QAAAjT,OA6BA+2B,EA7BAr4B,MA8BAyS,OAAA,SAAA4lB,EAAAE,WAAA,SAAAF,EAAAG,UAAA,SAAAH,EAAAI,SAAA,SACAJ,EAAAK,OAAA,QA/BA,SACAX,EAAAxjB,QAAAjT,KAAA62B,EAAA9R,MAAAlP,EAAAvP,OAAAwwB,EAAA,WACA,QAAAl3B,EAAA,EAAyBA,EAAAE,UAAAC,OAAA,EAA0BH,SACnD2T,IAAAzT,UAAAF,KAAAiW,EAAAjW,QAAA2T,MAKA7U,KAAA24B,UAAA34B,KAAA24B,SAAAC,aACA,QAAA13B,EAAA,EAAuBA,EAAAiW,EAAA9V,OAAkBH,KACzC4J,EAAA9K,KAAA24B,SAAAC,aAAA13B,EAAA,MACAiW,EAAArM,GAAAqM,EAAAjW,KAIA+2B,GAAAj4B,KAAAyS,SAAA0E,EAAA,GAAA9V,QAAArB,KAAAk4B,UAAA/gB,EAAAvP,OAAA5H,KAAAk4B,YAGA,OAAA/gB,GAGA8gB,IACA3jB,OAAA1T,UAAAgV,KAAA,SAAAuiB,GACA,IAAAhhB,EAAA4gB,EAAAhxB,KAAAzF,KAAAtB,KAAAm4B,GAEA,OADAhhB,GAAAnX,KAAAyS,SAAA0E,EAAA,GAAA9V,QAAArB,KAAAk4B,UAAA/gB,EAAAvP,OAAA5H,KAAAk4B,cACA/gB,OAoBAnV,IAAAsM,OAAA,2DAAAnM,EAAAV,EAAA4M,GACA,SAAAwqB,KAEAnlB,SAAA9S,UAAA+B,OACA+Q,SAAA9S,UAAA+B,KAAA,SAAAm2B,GAEA,IAAA7Q,EAAAjoB,KAEA,sBAAAioB,EACA,UAAA3Q,UAAA,kDAAA2Q,GAGA,IAAAzQ,EAAA6O,EAAA/kB,KAAAF,UAAA,GAEA23B,EAAA,SAAAA,IACA,GAAA/4B,gBAAA+4B,EAAA,CACA,IAAA3iB,EAAA6R,EAAA1mB,MAAAvB,KAAAwX,EAAA4C,OAAAiM,EAAA/kB,KAAAF,aAEA,OAAAhB,OAAAgW,OACAA,EAGApW,KAEA,OAAAioB,EAAA1mB,MAAAu3B,EAAAthB,EAAA4C,OAAAiM,EAAA/kB,KAAAF,cAUA,OANA6mB,EAAArnB,YACAi4B,EAAAj4B,UAAAqnB,EAAArnB,UACAm4B,EAAAn4B,UAAA,IAAAi4B,EACAA,EAAAj4B,UAAA,MAGAm4B,IAIA,IAQAC,EACAC,EACAC,EACAC,EACAC,EAZA93B,EAAAoS,SAAA9S,UAAAU,KACA+3B,EAAA94B,MAAAK,UACA04B,EAAAl5B,OAAAQ,UACAylB,EAAAgT,EAAAhT,MAEAkT,EAAAj4B,EAAAqB,KAAA22B,EAAAnlB,UAEAqlB,EAAAl4B,EAAAqB,KAAA22B,EAAA74B,gBAcA,IAPA24B,EAAAI,EAAAF,EAAA,uBACAN,EAAA13B,EAAAqB,KAAA22B,EAAAG,kBACAR,EAAA33B,EAAAqB,KAAA22B,EAAAI,kBACAR,EAAA53B,EAAAqB,KAAA22B,EAAAK,kBACAR,EAAA73B,EAAAqB,KAAA22B,EAAAM,mBAGA,SAAA9xB,OAAA,GAAAzG,OACA,cAEA,SAAAw4B,EAAAzC,GACA,IAAA7c,EAAA,IAAAha,MAAA62B,EAAA,GAEA,OADA7c,EAAA,GAAAA,EAAA,KACAA,EAGA,IACAuf,EADAjuB,EAAA,GAUA,GARAA,EAAA/D,OAAAvG,MAAAsK,EAAAguB,EAAA,KACAhuB,EAAA/D,OAAAvG,MAAAsK,EAAAguB,EAAA,KACAC,EAAAjuB,EAAAxK,OAEAwK,EAAA/D,OAAA,WAEA+D,EAAAxK,OAEAy4B,EAAA,GAAAjuB,EAAAxK,OACA,SAnBA,GAqBK,CAEL,IAAA04B,EAAAx5B,MAAAK,UAAAkH,OAEAvH,MAAAK,UAAAkH,OAAA,SAAA4c,EAAAsV,GACA,OAAA54B,UAAAC,OAGA04B,EAAAx4B,MAAAvB,KAAA,UAAA0kB,EAAA,EAAAA,OAAA,IAAAsV,EAAAh6B,KAAAqB,OAAAqjB,EAAAsV,GAAA5f,OAAAiM,EAAA/kB,KAAAF,UAAA,KAFA,SAOAb,MAAAK,UAAAkH,OAAA,SAAAI,EAAA+xB,GACA,IAAA54B,EAAArB,KAAAqB,OAEA6G,EAAA,EACAA,EAAA7G,IAAA6G,EAAA7G,QACS,GAAA6G,EACTA,EAAA,EACSA,EAAA,IACTA,EAAAqT,KAAA3J,IAAAvQ,EAAA6G,EAAA,IAGAA,EAAA+xB,EAAA54B,IAAA44B,EAAA54B,EAAA6G,GACA,IAAAgyB,EAAAl6B,KAAAqmB,MAAAne,IAAA+xB,GACAE,EAAA9T,EAAA/kB,KAAAF,UAAA,GACAgwB,EAAA+I,EAAA94B,OAEA,GAAA6G,IAAA7G,EACA+vB,GACApxB,KAAA4N,KAAArM,MAAAvB,KAAAm6B,OAES,CACT,IAAAC,EAAA7e,KAAA5J,IAAAsoB,EAAA54B,EAAA6G,GACAmyB,EAAAnyB,EAAAkyB,EACAE,EAAAD,EAAAjJ,EAAAgJ,EACAG,EAAAl5B,EAAAg5B,EACAG,EAAAn5B,EAAA+4B,EAEA,GAAAE,EAAAD,EAEA,QAAAn5B,EAAA,EAA2BA,EAAAq5B,IAAer5B,EAC1ClB,KAAAs6B,EAAAp5B,GAAAlB,KAAAq6B,EAAAn5B,QAEW,GAAAo5B,EAAAD,EAEX,IAAAn5B,EAAAq5B,EAA+Br5B,KAC/BlB,KAAAs6B,EAAAp5B,GAAAlB,KAAAq6B,EAAAn5B,GAKA,GAAAkwB,GAAAlpB,IAAAsyB,EACAx6B,KAAAqB,OAAAm5B,EAEAx6B,KAAA4N,KAAArM,MAAAvB,KAAAm6B,QAIA,IAFAn6B,KAAAqB,OAAAm5B,EAAApJ,EAEAlwB,EAAA,EAAuBA,EAAAkwB,IAASlwB,EAChClB,KAAAkI,EAAAhH,GAAAi5B,EAAAj5B,GAKA,OAAAg5B,GAKA35B,MAAAsG,UACAtG,MAAAsG,QAAA,SAAAkiB,GACA,wBAAAwQ,EAAAxQ,KAIA,IAwTA0R,EAqHAC,EA7aAC,EAAAv6B,OAAA,KACAw6B,EAAA,KAAAD,EAAA,WAAAA,GAiRA,GA/QAp6B,MAAAK,UAAA6B,UACAlC,MAAAK,UAAA6B,QAAA,SAAAo4B,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAmvB,EAAA35B,UAAA,GACAF,GAAA,EACAG,EAAAmS,EAAAnS,SAAA,EAEA,wBAAAk4B,EAAAsB,GACA,UAAAvjB,UAGA,OAAApW,EAAAG,GACAH,KAAAsS,GACAqnB,EAAAv5B,KAAAy5B,EAAAvnB,EAAAtS,KAAA0K,KAMArL,MAAAK,UAAA6V,MACAlW,MAAAK,UAAA6V,IAAA,SAAAokB,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EACA+U,EAAA7V,MAAAc,GACA05B,EAAA35B,UAAA,GAEA,wBAAAm4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,QAAA35B,EAAA,EAAqBA,EAAAG,EAAYH,IACjCA,KAAAsS,IAAA4C,EAAAlV,GAAA25B,EAAAv5B,KAAAy5B,EAAAvnB,EAAAtS,KAAA0K,IAGA,OAAAwK,IAIA7V,MAAAK,UAAAo6B,SACAz6B,MAAAK,UAAAo6B,OAAA,SAAAH,GAGA,IAIAn5B,EAJAkK,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EACA+U,EAAA,GAEA2kB,EAAA35B,UAAA,GAEA,wBAAAm4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,QAAA35B,EAAA,EAAqBA,EAAAG,EAAYH,IACjCA,KAAAsS,IACA9R,EAAA8R,EAAAtS,GAEA25B,EAAAv5B,KAAAy5B,EAAAr5B,EAAAR,EAAA0K,IACAwK,EAAAxI,KAAAlM,IAKA,OAAA0U,IAIA7V,MAAAK,UAAAq6B,QACA16B,MAAAK,UAAAq6B,MAAA,SAAAJ,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EACA05B,EAAA35B,UAAA,GAEA,wBAAAm4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,QAAA35B,EAAA,EAAqBA,EAAAG,EAAYH,IACjC,GAAAA,KAAAsS,IAAAqnB,EAAAv5B,KAAAy5B,EAAAvnB,EAAAtS,KAAA0K,GACA,SAIA,WAIArL,MAAAK,UAAAoR,OACAzR,MAAAK,UAAAoR,KAAA,SAAA6oB,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EACA05B,EAAA35B,UAAA,GAEA,wBAAAm4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,QAAA35B,EAAA,EAAqBA,EAAAG,EAAYH,IACjC,GAAAA,KAAAsS,GAAAqnB,EAAAv5B,KAAAy5B,EAAAvnB,EAAAtS,KAAA0K,GACA,SAIA,WAIArL,MAAAK,UAAAs6B,SACA36B,MAAAK,UAAAs6B,OAAA,SAAAL,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EAEA,wBAAAk4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,IAAAx5B,GAAA,GAAAD,UAAAC,OACA,UAAAiW,UAAA,+CAGA,IACAlB,EADAlV,EAAA,EAGA,GAAAE,UAAAC,QAAA,EACA+U,EAAAhV,UAAA,QAEA,QACA,GAAAF,KAAAsS,EAAA,CACA4C,EAAA5C,EAAAtS,KACA,MAGA,KAAAA,GAAAG,EACA,UAAAiW,UAAA,+CAKA,KAAYpW,EAAAG,EAAYH,IACxBA,KAAAsS,IACA4C,EAAAykB,EAAAv5B,UAAA,EAAA8U,EAAA5C,EAAAtS,KAAA0K,IAIA,OAAAwK,IAIA7V,MAAAK,UAAAu6B,cACA56B,MAAAK,UAAAu6B,YAAA,SAAAN,GAGA,IAAAjvB,EAAAkvB,EAAA96B,MACAwT,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAkE,EACAvK,EAAAmS,EAAAnS,SAAA,EAEA,wBAAAk4B,EAAAsB,GACA,UAAAvjB,UAAAujB,EAAA,sBAGA,IAAAx5B,GAAA,GAAAD,UAAAC,OACA,UAAAiW,UAAA,oDAGA,IAAAlB,EACAlV,EAAAG,EAAA,EAEA,GAAAD,UAAAC,QAAA,EACA+U,EAAAhV,UAAA,QAEA,QACA,GAAAF,KAAAsS,EAAA,CACA4C,EAAA5C,EAAAtS,KACA,MAGA,KAAAA,EAAA,EACA,UAAAoW,UAAA,oDAKA,GACApW,KAAAlB,OACAoW,EAAAykB,EAAAv5B,UAAA,EAAA8U,EAAA5C,EAAAtS,KAAA0K,UAEO1K,KAEP,OAAAkV,IAIA7V,MAAAK,UAAAiH,UAAA,SAAAA,QAAA,OACAtH,MAAAK,UAAAiH,QAAA,SAAAuzB,GAGA,IAAA5nB,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAozB,EAAA96B,MACAqB,EAAAmS,EAAAnS,SAAA,EAEA,IAAAA,EACA,SAGA,IAAAH,EAAA,EAQA,IANAE,UAAAC,OAAA,IACAH,EAAAm6B,EAAAj6B,UAAA,KAGAF,KAAA,EAAAA,EAAAqa,KAAA3J,IAAA,EAAAvQ,EAAAH,GAEYA,EAAAG,EAAYH,IACxB,GAAAA,KAAAsS,KAAAtS,KAAAk6B,EACA,OAAAl6B,EAIA,WAIAX,MAAAK,UAAAwjB,cAAA,SAAAA,YAAA,QACA7jB,MAAAK,UAAAwjB,YAAA,SAAAgX,GAGA,IAAA5nB,EAAAonB,GAAA,mBAAArB,EAAAv5B,WAAA0H,MAAA,IAAAozB,EAAA96B,MACAqB,EAAAmS,EAAAnS,SAAA,EAEA,IAAAA,EACA,SAGA,IAAAH,EAAAG,EAAA,EAQA,IANAD,UAAAC,OAAA,IACAH,EAAAqa,KAAA5J,IAAAzQ,EAAAm6B,EAAAj6B,UAAA,MAGAF,KAAA,EAAAA,EAAAG,EAAAka,KAAA0I,IAAA/iB,GAEYA,GAAA,EAAQA,IACpB,GAAAA,KAAAsS,GAAA4nB,IAAA5nB,EAAAtS,GACA,OAAAA,EAIA,WAIAd,OAAAspB,iBACAtpB,OAAAspB,eAAA,SAAA9d,GACA,OAAAA,EAAAtL,YAAAsL,EAAAjL,YAAAiL,EAAAjL,YAAAC,UAAA04B,MAIAl5B,OAAAk7B,yBAAA,CAGAl7B,OAAAk7B,yBAAA,SAAA1vB,EAAA2vB,GACA,oBAAA3vB,GAAA,mBAAAA,GAAA,OAAAA,EAAA,UAAA0L,UAHA,2DAGA1L,GACA,GAAA4tB,EAAA5tB,EAAA2vB,GAAA,CACA,IAAAlT,EAMA,GALAA,EAAA,CACAC,YAAA,EACAC,cAAA,GAGA6Q,EAAA,CACA,IAAAx4B,EAAAgL,EAAAtL,UACAsL,EAAAtL,UAAAg5B,EACA,IAAAkC,EAAAtC,EAAAttB,EAAA2vB,GACAE,EAAAtC,EAAAvtB,EAAA2vB,GAGA,GAFA3vB,EAAAtL,UAAAM,EAEA46B,GAAAC,EAGA,OAFAD,IAAAnT,EAAAvR,IAAA0kB,GACAC,IAAApT,EAAAlT,IAAAsmB,GACApT,EAKA,OADAA,EAAA3mB,MAAAkK,EAAA2vB,GACAlT,KAIAjoB,OAAAs7B,sBACAt7B,OAAAs7B,oBAAA,SAAA9vB,GACA,OAAAxL,OAAAmE,KAAAqH,KAIAxL,OAAAS,UAIA45B,EADA,OAAAr6B,OAAAQ,UAAAN,UACA,WACA,OACAA,UAAA,OAIA,WACA,IAAAgnB,EAAA,GAEA,QAAApmB,KAAAomB,EACAA,EAAApmB,GAAA,KAIA,OADAomB,EAAA3mB,YAAA2mB,EAAA7mB,eAAA6mB,EAAAwI,qBAAAxI,EAAAqU,cAAArU,EAAAsU,eAAAtU,EAAAnT,SAAAmT,EAAA2J,QAAA3J,EAAAhnB,UAAA,KACAgnB,GAIAlnB,OAAAS,OAAA,SAAAD,EAAAi7B,GACA,IAAAjwB,EAEA,UAAAhL,EACAgL,EAAA6uB,QACO,CACP,oBAAA75B,EAAA,UAAA0W,UAAA,2BAAA1W,EAAA,iBAEA,IAAAk7B,EAAA,aAEAA,EAAAl7B,aACAgL,EAAA,IAAAkwB,GACAx7B,UAAAM,EAIA,YADA,IAAAi7B,GAAAz7B,OAAAgoB,iBAAAxc,EAAAiwB,GACAjwB,IAIA,SAAAmwB,EAAAnwB,GACA,IAEA,OADAxL,OAAAoB,eAAAoK,EAAA,eACA,aAAAA,EACK,MAAAowB,KAGL,GAAA57B,OAAAoB,eAAA,CACA,IAAAy6B,EAAAF,EAAA,IACAG,EAAA,oBAAA/xB,UAAA4xB,EAAA5xB,SAAAC,cAAA,QAEA,IAAA6xB,IAAAC,EACA,IAAAC,EAAA/7B,OAAAoB,eAIA,IAAApB,OAAAoB,gBAAA26B,EAAA,CAKA/7B,OAAAoB,eAAA,SAAAoK,EAAA2vB,EAAAlT,GACA,oBAAAzc,GAAA,mBAAAA,GAAA,OAAAA,EAAA,UAAA0L,UAJA,+CAIA1L,GACA,oBAAAyc,GAAA,mBAAAA,GAAA,OAAAA,EAAA,UAAA/Q,UANA,2CAMA+Q,GAEA,GAAA8T,EACA,IACA,OAAAA,EAAA76B,KAAAlB,OAAAwL,EAAA2vB,EAAAlT,GACS,MAAA2T,IAGT,GAAAxC,EAAAnR,EAAA,SACA,GAAA+Q,IAAAF,EAAAttB,EAAA2vB,IAAApC,EAAAvtB,EAAA2vB,IAAA,CACA,IAAA36B,EAAAgL,EAAAtL,UACAsL,EAAAtL,UAAAg5B,SACA1tB,EAAA2vB,GACA3vB,EAAA2vB,GAAAlT,EAAA3mB,MACAkK,EAAAtL,UAAAM,OAEAgL,EAAA2vB,GAAAlT,EAAA3mB,UAEO,CACP,IAAA03B,EAAA,UAAA9hB,UAvBA,kEAwBAkiB,EAAAnR,EAAA,QAAA2Q,EAAAptB,EAAA2vB,EAAAlT,EAAAvR,KACA0iB,EAAAnR,EAAA,QAAA4Q,EAAArtB,EAAA2vB,EAAAlT,EAAAlT,KAGA,OAAAvJ,GAIAxL,OAAAgoB,mBACAhoB,OAAAgoB,iBAAA,SAAAxc,EAAAiwB,GACA,QAAAN,KAAAM,EACArC,EAAAqC,EAAAN,IAAAn7B,OAAAoB,eAAAoK,EAAA2vB,EAAAM,EAAAN,IAGA,OAAA3vB,IAIAxL,OAAAg8B,OACAh8B,OAAAg8B,KAAA,SAAAxwB,GACA,OAAAA,IAIAxL,OAAAi8B,SACAj8B,OAAAi8B,OAAA,SAAAzwB,GACA,OAAAA,IAIA,IACAxL,OAAAi8B,OAAA,cACG,MAAAL,GACH57B,OAAAi8B,QAAA3B,EAQKt6B,OAAAi8B,OAPL,SAAAzwB,GACA,yBAAAA,EACAA,EAEA8uB,EAAA9uB,KA2CA,GArCAxL,OAAAk8B,oBACAl8B,OAAAk8B,kBAAA,SAAA1wB,GACA,OAAAA,IAIAxL,OAAAm8B,WACAn8B,OAAAm8B,SAAA,SAAA3wB,GACA,WAIAxL,OAAAo8B,WACAp8B,OAAAo8B,SAAA,SAAA5wB,GACA,WAIAxL,OAAAq8B,eACAr8B,OAAAq8B,aAAA,SAAA7wB,GACA,GAAAxL,OAAAwL,OACA,UAAA0L,UAKA,IAFA,IAAAxM,EAAA,GAEA0uB,EAAA5tB,EAAAd,IACAA,GAAA,IAGAc,EAAAd,IAAA,EACA,IAAA4xB,EAAAlD,EAAA5tB,EAAAd,GAEA,cADAc,EAAAd,GACA4xB,KAIAt8B,OAAAmE,KAAA,CACA,IAAAo4B,GAAA,EACAC,EAAA,8GACAC,EAAAD,EAAAv7B,OAEA,QAAAkU,IAAA,CACApB,SAAA,MAEAwoB,GAAA,EAGAv8B,OAAAmE,KAAA,SAAAqH,GACA,oBAAAA,GAAA,mBAAAA,GAAA,OAAAA,EACA,UAAA0L,UAAA,sCAGA,IAAA/S,EAAA,GAEA,QAAAuG,KAAAc,EACA4tB,EAAA5tB,EAAAd,IACAvG,EAAAqJ,KAAA9C,GAIA,GAAA6xB,EACA,QAAAz7B,EAAA,EAAA47B,EAAAD,EAA6C37B,EAAA47B,EAAQ57B,IAAA,CACrD,IAAA67B,EAAAH,EAAA17B,GAEAs4B,EAAA5tB,EAAAmxB,IACAx4B,EAAAqJ,KAAAmvB,GAKA,OAAAx4B,GAIAoU,KAAAqkB,MACArkB,KAAAqkB,IAAA,WACA,WAAArkB,MAAAC,YAIA,IAAAqkB,EAAA,8HAEA,IAAAvf,OAAA9c,UAAA6G,KAAA,CACAw1B,EAAA,IAAAA,EAAA,IACA,IAAAC,EAAA,IAAA5oB,OAAA,IAAA2oB,IAAA,KACAE,EAAA,IAAA7oB,OAAA2oB,IAAA,MAEAvf,OAAA9c,UAAA6G,KAAA,WACA,OAAAiW,OAAA1d,MAAAuU,QAAA2oB,EAAA,IAAA3oB,QAAA4oB,EAAA,KAIA,SAAA9B,EAAAl6B,GAUA,OATAA,QAEAA,EAEAA,EAAA,EACK,IAAAA,OAAA,KAAAA,KAAA,MACLA,KAAA,OAAAoa,KAAA0C,MAAA1C,KAAA0I,IAAA9iB,KAGAA,EAsCA,IAAA25B,EAAA,SAAAsC,GACA,SAAAA,EAEA,UAAA9lB,UAAA,iBAAA8lB,EAAA,cAGA,OAAAh9B,OAAAg9B,MAGAp7B,IAAAsM,OAAA,qGAAAnM,EAAAV,EAAA4M,GACA,aAEAlM,EAAA,YAEAA,EAAA,cAEA,oBAAAk7B,iBAAAz8B,UAAAw5B,QACAh6B,OAAAoB,eAAA67B,QAAAz8B,UAAA,UACA0nB,YAAA,EACAE,UAAA,EACAD,cAAA,EACA7mB,MAAA,WACA1B,KAAAs9B,YAAAt9B,KAAAs9B,WAAApzB,YAAAlK,WAKAgC,IAAAsM,OAAA,4DAAAnM,EAAAV,EAAA4M,GACA,aAEA5M,EAAA87B,GAAA,CACAC,MAAA,QACAC,IAAA,MACAC,QAAA,WAGAj8B,EAAAk8B,MAAA,WACA,OAAAl8B,EAAAm8B,MACAn8B,EAAA87B,GAAAE,IACKh8B,EAAAo8B,QACLp8B,EAAA87B,GAAAC,MAEA/7B,EAAA87B,GAAAG,SAIA,IAAAI,EAAA,iBAAAvR,oBAAA,GAEAwR,GAAA,iBAAAh3B,KAAA+2B,EAAAE,WAAA,cAAAC,cACAC,EAAAJ,EAAAtR,WAAA,GACA2R,EAAAL,EAAAK,SAAA,GACA18B,EAAA28B,MAAA,OAAAL,EACAt8B,EAAAm8B,MAAA,OAAAG,EACAt8B,EAAAo8B,QAAA,SAAAE,EACAt8B,EAAA48B,KAAA,+BAAAF,KAAAt2B,QAAA,gBAAAy2B,YAAAJ,EAAA/mB,MAAA,4DAAwJ,QAAAmnB,YAAAJ,EAAA/mB,MAAA,sDAAuF,QAE/O1V,EAAA88B,QAAA98B,EAAA48B,MAAA58B,EAAA48B,KAAA,EACA58B,EAAA+8B,QAAA/8B,EAAAg9B,UAAAP,EAAA/mB,MAAA,eACA1V,EAAAi9B,QAAA,iBAAAC,OAAA,kBAAAv+B,OAAAQ,UAAAuT,SAAA7S,KAAA+qB,OAAAsS,OACAl9B,EAAAm9B,SAAAN,WAAAJ,EAAAx2B,MAAA,qBAAAmN,EACApT,EAAAo9B,SAAAP,WAAAJ,EAAAx2B,MAAA,sBAAAmN,EACApT,EAAAq9B,OAAAR,WAAAJ,EAAAx2B,MAAA,oBAAAmN,EACApT,EAAAs9B,MAAAb,EAAAr2B,QAAA,eACApG,EAAAu9B,UAAAd,EAAAr2B,QAAA,cACApG,EAAAw9B,WAAAf,EAAAr2B,QAAA,aACApG,EAAAy9B,MAAA,mBAAAtpB,KAAAsoB,KAAA7R,OAAA8S,SACA19B,EAAAy9B,QAAAz9B,EAAAm8B,OAAA,GACAn8B,EAAA29B,SAAA39B,EAAAy9B,OAAAz9B,EAAAu9B,YAEAh9B,IAAAsM,OAAA,0EAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAgxB,EAAAl9B,EAAA,eA0NA,GAtNAV,EAAA69B,SAAA,SAAAA,EAAAC,EAAAC,EAAAC,GACA,oBAAAF,KAAA,CACA,IAAAG,EAAAv1B,SAAAw1B,eAAAJ,GAEA,OADAC,KAAA90B,YAAAg1B,GACAA,EAGA,IAAAn/B,MAAAsG,QAAA04B,GAAA,OAAAA,EAEA,oBAAAA,EAAA,KAAAA,EAAA,IAGA,IAFA,IAAAK,EAAA,GAEA1+B,EAAA,EAAqBA,EAAAq+B,EAAAl+B,OAAgBH,IAAA,CACrC,IAAA2+B,EAAAP,EAAAC,EAAAr+B,GAAAs+B,EAAAC,GACAI,GAAAD,EAAAhyB,KAAAiyB,GAGA,OAAAD,EAGA,IAAAjwB,EAAAxF,SAAAC,cAAAm1B,EAAA,IACAzV,EAAAyV,EAAA,GACAO,EAAA,EACAhW,GAAA,iBAAAA,IAAAvpB,MAAAsG,QAAAijB,KAAAgW,EAAA,GAEA,IAAA5+B,EAAA4+B,EAA4B5+B,EAAAq+B,EAAAl+B,OAAgBH,IAC5Co+B,EAAAC,EAAAr+B,GAAAyO,EAAA8vB,GAoBA,OAjBA,GAAAK,GACA1/B,OAAAmE,KAAAulB,GAAArnB,QAAA,SAAAtB,GACA,IAAA4+B,EAAAjW,EAAA3oB,GAEA,UAAAA,EACAwO,EAAA5M,UAAAxC,MAAAsG,QAAAk5B,KAAAh4B,KAAA,KAAAg4B,EACS,mBAAAA,GAAA,SAAA5+B,EACTwO,EAAAxO,GAAA4+B,EACS,QAAA5+B,EACTs+B,MAAAM,GAAApwB,GACS,MAAAowB,GACTpwB,EAAAqwB,aAAA7+B,EAAA4+B,KAKAP,KAAA90B,YAAAiF,GACAA,GAGAlO,EAAAw+B,gBAAA,SAAAC,GAEA,OADAA,MAAA/1B,UACA+1B,EAAAC,MAAAD,EAAAE,qBAAA,YAAAF,EAAAG,iBAGA5+B,EAAA2I,cAAA,SAAA8L,EAAA2hB,GACA,OAAA1tB,SAAAm2B,gBAAAn2B,SAAAm2B,gBAAAzI,GAzDA,+BAyDA3hB,GAAA/L,SAAAC,cAAA8L,IAGAzU,EAAA8+B,eAAA,SAAAC,GACAA,EAAAC,UAAA,IAGAh/B,EAAAk+B,eAAA,SAAAt1B,EAAAm2B,GAEA,OADAA,IAAAE,cAAAv2B,UACAw1B,eAAAt1B,IAGA5I,EAAAk/B,eAAA,SAAAH,GAEA,OADAA,IAAAE,cAAAv2B,UACAy2B,0BAGAn/B,EAAAo/B,YAAA,SAAAlxB,EAAA7E,GAEA,YADA6E,EAAA5M,UAAA,IAAA2E,MAAA,QACAG,QAAAiD,IAGArJ,EAAAq/B,YAAA,SAAAnxB,EAAA7E,GACArJ,EAAAo/B,YAAAlxB,EAAA7E,KACA6E,EAAA5M,WAAA,IAAA+H,IAIArJ,EAAAs/B,eAAA,SAAApxB,EAAA7E,GAGA,IAFA,IAAAk2B,EAAArxB,EAAA5M,UAAA2E,MAAA,UAEA,CACA,IAAAE,EAAAo5B,EAAAn5B,QAAAiD,GAEA,OAAAlD,EACA,MAGAo5B,EAAAl5B,OAAAF,EAAA,GAGA+H,EAAA5M,UAAAi+B,EAAAj5B,KAAA,MAGAtG,EAAAw/B,eAAA,SAAAtxB,EAAA7E,GAIA,IAHA,IAAAk2B,EAAArxB,EAAA5M,UAAA2E,MAAA,QACA0pB,GAAA,IAEA,CACA,IAAAxpB,EAAAo5B,EAAAn5B,QAAAiD,GAEA,OAAAlD,EACA,MAGAwpB,GAAA,EACA4P,EAAAl5B,OAAAF,EAAA,GAKA,OAFAwpB,GAAA4P,EAAApzB,KAAA9C,GACA6E,EAAA5M,UAAAi+B,EAAAj5B,KAAA,KACAqpB,GAGA3vB,EAAAy/B,YAAA,SAAAn3B,EAAAhH,EAAAo+B,GACAA,EACA1/B,EAAAq/B,YAAA/2B,EAAAhH,GAEAtB,EAAAs/B,eAAAh3B,EAAAhH,IAIAtB,EAAA2/B,aAAA,SAAAh4B,EAAA82B,GACA,IACAmB,EADAz5B,EAAA,EAIA,GAAAy5B,GAFAnB,KAAA/1B,UAEAm3B,iBAAA,SACA,KAAA15B,EAAAy5B,EAAAhgC,QACA,GAAAggC,EAAAz5B,KAAAwB,OAAA,UAKA3H,EAAA8/B,gBAAA,SAAA3xB,EAAAxG,EAAA6e,GACA,IAAAnZ,EAAAmZ,EAEAA,KAAAuZ,cAGA1yB,EAAAmZ,EAAAuZ,gBACA1yB,GAAAmZ,IAHAnZ,EAAA3E,UAMA,IAAA+1B,EAAApxB,EAAA4xB,eAAA5xB,EACA,GAAA1F,GAAA3H,EAAA2/B,aAAAh4B,EAAA0F,GAAA,YACA1F,IAAAwG,GAAA,2BAAAxG,EAAA,OACA,IAAAkB,EAAA7I,EAAA2I,cAAA,SACAE,EAAAI,YAAAw1B,EAAAP,eAAA/vB,IACAxG,IAAAkB,EAAAlB,MACA0F,GAAAoxB,IAAApxB,EAAArN,EAAAw+B,gBAAAC,IACApxB,EAAA2yB,aAAAn3B,EAAAwE,EAAA4yB,aAGAjgC,EAAAkgC,mBAAA,SAAAhK,EAAAuI,GACAz+B,EAAA69B,SAAA,SACAsC,IAAA,aACAC,KAAAlK,IACKl2B,EAAAw+B,gBAAAC,KAGLz+B,EAAAqgC,eAAA,SAAA33B,GACA,IAAA43B,EAAAtgC,EAAA2I,cAAA,aACA23B,EAAAz3B,MAAA9B,MAAA,OACAu5B,EAAAz3B,MAAA03B,SAAA,MACAD,EAAAz3B,MAAA/B,OAAA,QACAw5B,EAAAz3B,MAAA23B,QAAA,QACA,IAAAC,EAAAzgC,EAAA2I,cAAA,aACAE,EAAA43B,EAAA53B,MACAA,EAAAE,SAAA,WACAF,EAAA6C,KAAA,WACA7C,EAAA63B,SAAA,SACA73B,EAAA9B,MAAA,QACA8B,EAAA03B,SAAA,MACA13B,EAAA/B,OAAA,QACA+B,EAAA23B,QAAA,QACAC,EAAAx3B,YAAAq3B,GACA,IAAAhW,EAAA5hB,EAAAk2B,gBACAtU,EAAArhB,YAAAw3B,GACA,IAAAE,EAAAL,EAAAM,YACA/3B,EAAA63B,SAAA,SACA,IAAAG,EAAAP,EAAAM,YAOA,OALAD,GAAAE,IACAA,EAAAJ,EAAA/vB,aAGA4Z,EAAA7hB,YAAAg4B,GACAE,EAAAE,GAGA,oBAAAn4B,WACA1I,EAAA8/B,gBAAA,cAGA9/B,EAAA8gC,cAAA,SAAA/B,EAAAl2B,GACA,OAAA+hB,OAAAmW,iBAAAhC,EAAA,SAGA/+B,EAAAghC,SAAA,SAAAC,EAAAnH,EAAA75B,GACAghC,EAAAnH,KAAA75B,IACAghC,EAAAnH,GAAA75B,IAIAD,EAAAkhC,mBAAA,EACAlhC,EAAAmhC,oBAAA,EACAnhC,EAAAohC,QAAAxD,EAAAjB,OAAA,qBAAA/R,eAAAyW,kBAAA,IAEA,qBAAA34B,SAAA,CACA,IAAA44B,EAAA54B,SAAAC,cAAA,OACA3I,EAAAohC,aAAAhuB,IAAAkuB,EAAAz4B,MAAAolB,YAAAjuB,EAAAmhC,oBAAA,GACAvD,EAAAP,QAAA,qBAAAiE,EAAAz4B,MAAA04B,gBAAAvhC,EAAAkhC,mBAAA,GACAI,EAAA,KAGAthC,EAAAmhC,mBACAnhC,EAAAwhC,UAAA,SAAAzC,EAAA0C,EAAAC,GACA3C,EAAAl2B,MAAAolB,UAAA,aAAAnU,KAAA6nB,MAAAF,GAAA,OAAA3nB,KAAA6nB,MAAAD,GAAA,OAGA1hC,EAAAwhC,UAAA,SAAAzC,EAAA0C,EAAAC,GACA3C,EAAAl2B,MAAAgI,IAAAiJ,KAAA6nB,MAAAD,GAAA,KACA3C,EAAAl2B,MAAA6C,KAAAoO,KAAA6nB,MAAAF,GAAA,QAIAlhC,IAAAsM,OAAA,sDAAAnM,EAAAV,EAAA4M,GACA,aAEA5M,EAAA4hC,SAAA,SAAAC,EAAAC,GACAD,EAAAE,OAAAD,EACAD,EAAA1iC,UAAAR,OAAAS,OAAA0iC,EAAA3iC,UAAA,CACAD,YAAA,CACAe,MAAA4hC,EACAhb,YAAA,EACAE,UAAA,EACAD,cAAA,MAKA9mB,EAAAgiC,MAAA,SAAA1a,EAAA0a,GACA,QAAAluB,KAAAkuB,EACA1a,EAAAxT,GAAAkuB,EAAAluB,GAGA,OAAAwT,GAGAtnB,EAAAgO,UAAA,SAAAqlB,EAAA2O,GACAhiC,EAAAgiC,MAAA3O,EAAA2O,MAGAzhC,IAAAsM,OAAA,qEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,SAEAuhC,EAAA,WACA,IA0HA54B,EAAA5J,EA1HAyiC,EAAA,CACAC,cAAA,CACAC,GAAA,QACAC,GAAA,OACAC,GAAA,MACAC,IAAA,OACAC,GAAA,WACAC,GAAA,YACAC,GAAA,eAEAC,SAAA,CACAC,KAAA,EACAC,IAAA,EACA99B,OAAA,EACA+gB,MAAA,EACAgd,MAAA,EACAC,KAAA,EACA19B,QAAA,EACA29B,IAAA,GAEAC,cAAA,CACAC,EAAA,YACAC,EAAA,MACAC,GAAA,SACAC,GAAA,QACAC,GAAA,MACAC,GAAA,QACAC,GAAA,SACAC,GAAA,WACAC,GAAA,MACAC,GAAA,OACAC,GAAA,OACAC,GAAA,KACAC,GAAA,QACAC,GAAA,OACAC,GAAA,QACAC,GAAA,SACAC,GAAA,SACAC,GAAA,UACAC,GAAA,UACAC,GAAA,UACAC,GAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,IAAA,UACAC,MAAA,cACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MACAC,IAAA,MACAC,IAAA,MACAC,IAAA,UACAC,IAAA,cAEAC,eAAA,CACArC,GAAA,IACAsC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,GAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,MAKA,IAAAzpC,KAAAyiC,EAAAe,cACA55B,EAAA64B,EAAAe,cAAAxjC,GAAA+8B,cACA0F,EAAA74B,GAAA2Y,SAAAviB,EAAA,IAGA,IAAAA,KAAAyiC,EAAA0D,eACAv8B,EAAA64B,EAAA0D,eAAAnmC,GAAA+8B,cACA0F,EAAA74B,GAAA2Y,SAAAviB,EAAA,IAuBA,OApBAqN,EAAAk1B,MAAAE,IAAAC,eACAr1B,EAAAk1B,MAAAE,IAAA0D,gBACA94B,EAAAk1B,MAAAE,IAAAe,eACAf,EAAAiH,MAAAjH,EAAA,OACAA,EAAAkH,OAAAlH,EAAAmH,IACAnH,EAAAoH,IAAApH,EAAA,OACAA,EAAA,SAEA,WAGA,IAFA,IAAAqH,EAAA,6BAEA9pC,EAAAqa,KAAA0vB,IAAA,EAAAD,EAAA3pC,QAA4CH,KAC5CyiC,EAAAS,SAAAljC,GAAA8pC,EAAAhQ,OAAA,SAAAnf,GACA,OAAA3a,EAAAyiC,EAAAS,SAAAvoB,KACS9T,KAAA,SANT,GAUA47B,EAAAS,SAAA,MACAT,EAAAS,UAAA,YACAT,EA3JA,GA8JAp1B,EAAAk1B,MAAAhiC,EAAAiiC,GAEAjiC,EAAAypC,gBAAA,SAAAC,GACA,IAAAC,EAAA1H,EAAAyH,GAEA,MADA,iBAAAC,MAAA1tB,OAAAC,aAAAwtB,IACAC,EAAAnN,iBAGAj8B,IAAAsM,OAAA,2FAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA9J,EAAApC,EAAA,UAEAk9B,EAAAl9B,EAAA,eAEAkpC,EAAA,KACAC,EAAA,EAEA7pC,EAAA8pC,YAAA,SAAAxhB,EAAArgB,EAAA2G,GACA,GAAA0Z,EAAAyB,iBACA,OAAAzB,EAAAyB,iBAAA9hB,EAAA2G,GAAA,GAGA,GAAA0Z,EAAAyhB,YAAA,CACA,IAAAC,EAAA,WACAp7B,EAAA/O,KAAAyoB,EAAAsC,OAAAxjB,QAGAwH,EAAAq7B,SAAAD,EACA1hB,EAAAyhB,YAAA,KAAA9hC,EAAA+hC,KAIAhqC,EAAAkqC,eAAA,SAAA5hB,EAAArgB,EAAA2G,GACA,GAAA0Z,EAAA6hB,oBACA,OAAA7hB,EAAA6hB,oBAAAliC,EAAA2G,GAAA,GAGA0Z,EAAA8hB,aACA9hB,EAAA8hB,YAAA,KAAAniC,EAAA2G,EAAAq7B,UAAAr7B,IAIA5O,EAAAqqC,UAAA,SAAAz1B,GAGA,OAFA5U,EAAAgqB,gBAAApV,GACA5U,EAAAkqB,eAAAtV,IACA,GAGA5U,EAAAgqB,gBAAA,SAAApV,GACAA,EAAAoV,gBAAApV,EAAAoV,kBAA+CpV,EAAA01B,cAAA,GAG/CtqC,EAAAkqB,eAAA,SAAAtV,GACAA,EAAAsV,eAAAtV,EAAAsV,iBAA6CtV,EAAAqmB,aAAA,GAG7Cj7B,EAAAuqC,UAAA,SAAA31B,GACA,kBAAAA,EAAA3M,KAAA,EACA,eAAA2M,EAAA3M,MAAA21B,EAAAzB,OAAAvnB,EAAA41B,UAAA51B,EAAA61B,SAAA71B,EAAA81B,SAAA,EAEA91B,EAAAsV,eACAtV,EAAA+1B,OAEA,CACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACOl2B,EAAA+1B,SAIP3qC,EAAA+qC,QAAA,SAAA78B,EAAA88B,EAAAC,GACA,SAAAC,EAAAt2B,GACAo2B,KAAAp2B,GACAq2B,KAAAr2B,GACA5U,EAAAkqC,eAAAxhC,SAAA,YAAAsiC,GAAA,GACAhrC,EAAAkqC,eAAAxhC,SAAA,UAAAwiC,GAAA,GACAlrC,EAAAkqC,eAAAxhC,SAAA,YAAAwiC,GAAA,GAMA,OAHAlrC,EAAA8pC,YAAAphC,SAAA,YAAAsiC,GAAA,GACAhrC,EAAA8pC,YAAAphC,SAAA,UAAAwiC,GAAA,GACAlrC,EAAA8pC,YAAAphC,SAAA,YAAAwiC,GAAA,GACAA,GAGAlrC,EAAAmrC,sBAAA,SAAAj9B,EAAAU,GACA,iBAAAV,EACAlO,EAAA8pC,YAAA57B,EAAA,sBAAA0G,QAGAxB,IAAAwB,EAAAw2B,aACAx2B,EAAAy2B,QAAAz2B,EAAAw2B,YAHA,EAIAx2B,EAAA02B,QAAA12B,EAAA22B,YAJA,IAMA32B,EAAAy2B,OAAA,EACAz2B,EAAA02B,QAAA12B,EAAA42B,WAPA,GAUA58B,EAAAgG,KAEK,YAAA1G,EACLlO,EAAA8pC,YAAA57B,EAAA,iBAAA0G,GAGA,OAAAA,EAAA62B,WACA,KAAA72B,EAAA82B,gBACA92B,EAAAy2B,OAJA,IAIAz2B,EAAA+2B,QAAA,EACA/2B,EAAA02B,OALA,IAKA12B,EAAAg3B,QAAA,EACA,MAEA,KAAAh3B,EAAAi3B,eACA,KAAAj3B,EAAAk3B,eACAl3B,EAAAy2B,OAAA,GAAAz2B,EAAA+2B,QAAA,GACA/2B,EAAA02B,OAAA,GAAA12B,EAAAg3B,QAAA,GAIAh9B,EAAAgG,KAGA5U,EAAA8pC,YAAA57B,EAAA,0BAAA0G,GACAA,EAAAm3B,MAAAn3B,EAAAm3B,MAAAn3B,EAAAo3B,iBACAp3B,EAAAy2B,OAAA,GAAAz2B,EAAAq3B,QAAA,GACAr3B,EAAA02B,OAAA,IAEA12B,EAAAy2B,OAAA,EACAz2B,EAAA02B,OAAA,GAAA12B,EAAAq3B,QAAA,IAGAr9B,EAAAgG,MAKA5U,EAAAksC,0BAAA,SAAAC,EAAAC,EAAApB,EAAAqB,GACA,IACAC,EAAAC,EAAA1X,EADA2X,EAAA,EAEAC,EAAA,CACA5B,EAAA,WACA6B,EAAA,cACA5B,EAAA,aAGA,SAAA6B,EAAA/3B,GAUA,GATA,IAAA5U,EAAAuqC,UAAA31B,GACA43B,EAAA,EACO53B,EAAAq3B,OAAA,IACPO,EACA,IAAAA,EAAA,GAEAA,EAAA,EAGA5O,EAAAhB,KAAA,CACA,IAAAgQ,EAAA9yB,KAAA0I,IAAA5N,EAAAi4B,QAAAP,GAAA,GAAAxyB,KAAA0I,IAAA5N,EAAAk4B,QAAAP,GAAA,EACA1X,IAAA+X,IAAAJ,EAAA,GACA3X,GAAAE,aAAAF,GACAA,EAAAG,WAAA,WACAH,EAAA,MACSuX,EAAAI,EAAA,SAET,GAAAA,IACAF,EAAA13B,EAAAi4B,QACAN,EAAA33B,EAAAk4B,SAMA,GAFAl4B,EAAAm4B,QAAAP,EACAxB,EAAAqB,GAAA,YAAAz3B,GACA43B,EAAA,EAAAA,EAAA,OAAiC,GAAAA,EAAA,SAAAxB,EAAAqB,GAAAI,EAAAD,GAAA53B,GAGjC,SAAAo4B,EAAAp4B,GACA43B,EAAA,EACA3X,GAAAE,aAAAF,GACAA,EAAAG,WAAA,WACAH,EAAA,MACOuX,EAAAI,EAAA,SACPxB,EAAAqB,GAAA,YAAAz3B,GACAo2B,EAAAqB,GAAAI,EAAAD,GAAA53B,GAGA9V,MAAAsG,QAAA+mC,OAAA,CAAAA,IACAA,EAAAnrC,QAAA,SAAAkN,GACAlO,EAAA8pC,YAAA57B,EAAA,YAAAy+B,GACA/O,EAAAd,SAAA98B,EAAA8pC,YAAA57B,EAAA,WAAA8+B,MAIA,IAAAC,GAAArP,EAAAzB,QAAAyB,EAAAX,SAAA,kBAAArS,OAEG,SAAAhW,GACH,UAAAA,EAAA41B,QAAA,MAAA51B,EAAA61B,OAAA,MAAA71B,EAAA81B,SAAA,MAAA91B,EAAAs4B,QAAA,MAHA,SAAAt4B,GACA,UAAAA,EAAAs4B,QAAA,MAAAt4B,EAAA61B,OAAA,MAAA71B,EAAA81B,SAAA,MAAA91B,EAAA41B,QAAA,MASA,SAAA2C,EAAAv+B,EAAAgG,EAAA80B,GACA,IAAA0D,EAAAH,EAAAr4B,GAEA,IAAAgpB,EAAAzB,OAAAyN,EAAA,CAGA,GAFAh1B,EAAAy4B,mBAAAz4B,EAAAy4B,iBAAA,OAAAz4B,EAAAy4B,iBAAA,UAAAD,GAAA,GAEAxD,EAAA0D,MAAA,CACA,SAAAF,GAAqD,OAArDxD,EAAA0D,MAAA,EAGA,QAAA5D,GAAA,KAAAA,EAAA,CACA,IAAA6D,EAAA,aAAA34B,IAAA24B,SAAA34B,EAAA44B,YAEA,QAAA9D,GAAA,IAAA6D,EACA,GAAA3D,EAAAF,KAAAG,EAAAj1B,EAAA64B,gBACS,QAAA/D,GAAA,IAAA0D,GAAA,IAAAG,EAAA,CACT34B,EAAA64B,UAAA5D,EACA,KAAAD,EAAA0D,OAAA,KASA,IAJA5D,KAAA5mC,EAAAq/B,gBACAuH,GAAA,IAGA0D,GAAA,KAAA1D,KAGA,KAFA6D,EAAA,aAAA34B,IAAA24B,SAAA34B,EAAA44B,eAGA5+B,EAAAgG,EAAAw4B,GAAA1D,GACA90B,EAAA84B,mBAAA,OAIA,GAAA9P,EAAAJ,YAAA,EAAA4P,EAAA,CAEA,GADAx+B,EAAAgG,EAAAw4B,EAAA1D,GACA90B,EAAA84B,iBAAA,OAAqCN,IAAA,EAGrC,SAAAA,GAAA1D,KAAA5mC,EAAAmgC,eAAAyG,KAAA5mC,EAAA8iC,iBAIAh3B,EAAAgG,EAAAw4B,EAAA1D,GAuCA,SAAAiE,IACA/D,EAAAjrC,OAAAS,OAAA,MAGA,GA3FAY,EAAA4tC,kBAAA,SAAAh5B,GACA,OAAA9R,EAAA6/B,SAAAsK,EAAAr4B,KAkDA5U,EAAA6tC,sBAAA,SAAA3/B,EAAAU,GACA,IAAAk7B,EAAA9pC,EAAA8pC,YAEA,GAAAlM,EAAAkQ,YAAAlQ,EAAAX,WAAA,kBAAArS,QAAA,CACA,IAAAmjB,EAAA,KACAjE,EAAA57B,EAAA,mBAAA0G,GACAm5B,EAAAn5B,EAAA80B,UAEAI,EAAA57B,EAAA,oBAAA0G,GACA,OAAAu4B,EAAAv+B,EAAAgG,EAAAm5B,SAEK,CACL,IAAAC,EAAA,KACAlE,EAAA57B,EAAA,mBAAA0G,GACAg1B,EAAAh1B,EAAA80B,UAAAE,EAAAh1B,EAAA80B,UAAA,KACA,IAAA/0B,EAAAw4B,EAAAv+B,EAAAgG,IAAA80B,SAEA,OADAsE,EAAAp5B,EAAA84B,iBACA/4B,IAEAm1B,EAAA57B,EAAA,oBAAA0G,GACAo5B,IAAAp5B,EAAA41B,SAAA51B,EAAA61B,QAAA71B,EAAA81B,UAAA91B,EAAAs4B,WACAltC,EAAAqqC,UAAAz1B,GACAo5B,EAAA,QAGAlE,EAAA57B,EAAA,iBAAA0G,GACAg1B,EAAAh1B,EAAA80B,SAAA,OAGAE,IACA+D,IACA7D,EAAAlf,OAAA,QAAA+iB,MASA,iBAAA/iB,eAAAqjB,cAAArQ,EAAAd,QAAA,CACA,IAAAoR,EAAA,EAEAluC,EAAAmuC,SAAA,SAAAv/B,EAAAw/B,GACAA,KAAAxjB,OACA,IAAAyjB,EAAA,wBAAAH,IAUAluC,EAAA8pC,YAAAsE,EAAA,UARA,SAAAE,EAAA15B,GACAA,EAAAK,MAAAo5B,IACAruC,EAAAgqB,gBAAApV,GACA5U,EAAAkqC,eAAAkE,EAAA,UAAAE,GACA1/B,OAKAw/B,EAAAH,YAAAI,EAAA,MAIAruC,EAAAuuC,cAAA,EAEAvuC,EAAAwuC,OAAA,SAAAC,EAAAC,GACA,OAAA1Z,WAAA,SAAA2Z,IACA3uC,EAAAuuC,aAGAvZ,WAAA2Z,EAAA,KAFAF,KAIKC,IAGL1uC,EAAA4uC,aAAA,KAEA5uC,EAAA6uC,UAAA,SAAAja,GACA50B,EAAA4uC,cAAA7Z,aAAA/0B,EAAA4uC,cACA5uC,EAAAuuC,cAAA,EACAvuC,EAAA4uC,aAAA5Z,WAAA,WACAh1B,EAAAuuC,cAAA,GACK3Z,GAAA,MAGL50B,EAAA8uC,UAAA,iBAAAlkB,gBAAAmkB,uBAAAnkB,OAAAokB,0BAAApkB,OAAAqkB,6BAAArkB,OAAAskB,yBAAAtkB,OAAAukB,wBACAnvC,EAAA8uC,UAAA9uC,EAAA8uC,UAAA9uC,EAAA8uC,UAAA5tC,KAAA0pB,QAA4E5qB,EAAA8uC,UAAA,SAAAlgC,GAC5EomB,WAAApmB,EAAA,OAGArO,IAAAsM,OAAA,oDAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAIAnM,EAAA,SAAAoH,EAAAunC,EAAArnC,EAAAsnC,GACA9wC,KAAA0kB,MAAA,CACAqsB,IAAAznC,EACA0nC,OAAAH,GAEA7wC,KAAAixC,IAAA,CACAF,IAAAvnC,EACAwnC,OAAAF,KAIA,WACA9wC,KAAA8B,QAAA,SAAA8H,GACA,OAAA5J,KAAA0kB,MAAAqsB,MAAAnnC,EAAA8a,MAAAqsB,KAAA/wC,KAAAixC,IAAAF,MAAAnnC,EAAAqnC,IAAAF,KAAA/wC,KAAA0kB,MAAAssB,SAAApnC,EAAA8a,MAAAssB,QAAAhxC,KAAAixC,IAAAD,SAAApnC,EAAAqnC,IAAAD,QAGAhxC,KAAAmU,SAAA,WACA,iBAAAnU,KAAA0kB,MAAAqsB,IAAA,IAAA/wC,KAAA0kB,MAAAssB,OAAA,SAAAhxC,KAAAixC,IAAAF,IAAA,IAAA/wC,KAAAixC,IAAAD,OAAA,KAGAhxC,KAAAkxC,SAAA,SAAAH,EAAAC,GACA,UAAAhxC,KAAAmxC,QAAAJ,EAAAC,IAGAhxC,KAAAoxC,aAAA,SAAAxnC,GACA,IAAAynC,EACAJ,EAAArnC,EAAAqnC,IACAvsB,EAAA9a,EAAA8a,MAGA,WAFA2sB,EAAArxC,KAAAmxC,QAAAF,EAAAF,IAAAE,EAAAD,SAKA,IAFAK,EAAArxC,KAAAmxC,QAAAzsB,EAAAqsB,IAAArsB,EAAAssB,SAGA,EACS,GAAAK,EACT,EAEA,GAEO,GAAAA,GACP,GAIA,IAFAA,EAAArxC,KAAAmxC,QAAAzsB,EAAAqsB,IAAArsB,EAAAssB,UAGA,EACS,GAAAK,EACT,GAEA,GAKArxC,KAAAsxC,aAAA,SAAA9wC,GACA,OAAAR,KAAAmxC,QAAA3wC,EAAAuwC,IAAAvwC,EAAAwwC,SAGAhxC,KAAAuxC,cAAA,SAAA3nC,GACA,UAAA5J,KAAAsxC,aAAA1nC,EAAA8a,QAAA,GAAA1kB,KAAAsxC,aAAA1nC,EAAAqnC,MAGAjxC,KAAAwxC,WAAA,SAAA5nC,GACA,IAAAynC,EAAArxC,KAAAoxC,aAAAxnC,GACA,UAAAynC,GAAA,GAAAA,GAAA,GAAAA,GAGArxC,KAAAyxC,MAAA,SAAAV,EAAAC,GACA,OAAAhxC,KAAAixC,IAAAF,QAAA/wC,KAAAixC,IAAAD,WAGAhxC,KAAA0xC,QAAA,SAAAX,EAAAC,GACA,OAAAhxC,KAAA0kB,MAAAqsB,QAAA/wC,KAAA0kB,MAAAssB,WAGAhxC,KAAA2xC,SAAA,SAAAZ,EAAAC,GACA,iBAAAD,GACA/wC,KAAA0kB,MAAAssB,OAAAD,EAAAC,OACAhxC,KAAA0kB,MAAAqsB,YAEA/wC,KAAA0kB,MAAAqsB,MACA/wC,KAAA0kB,MAAAssB,WAIAhxC,KAAA4xC,OAAA,SAAAb,EAAAC,GACA,iBAAAD,GACA/wC,KAAAixC,IAAAD,OAAAD,EAAAC,OACAhxC,KAAAixC,IAAAF,YAEA/wC,KAAAixC,IAAAF,MACA/wC,KAAAixC,IAAAD,WAIAhxC,KAAA6xC,OAAA,SAAAd,EAAAC,GACA,UAAAhxC,KAAAmxC,QAAAJ,EAAAC,MACAhxC,KAAAyxC,MAAAV,EAAAC,KAAAhxC,KAAA0xC,QAAAX,EAAAC,KAUAhxC,KAAA8xC,YAAA,SAAAf,EAAAC,GACA,UAAAhxC,KAAAmxC,QAAAJ,EAAAC,KACAhxC,KAAAyxC,MAAAV,EAAAC,IAUAhxC,KAAA+xC,UAAA,SAAAhB,EAAAC,GACA,UAAAhxC,KAAAmxC,QAAAJ,EAAAC,KACAhxC,KAAA0xC,QAAAX,EAAAC,IAUAhxC,KAAAmxC,QAAA,SAAAJ,EAAAC,GACA,OAAAhxC,KAAAgyC,eACAjB,IAAA/wC,KAAA0kB,MAAAqsB,IAKAA,EAAA/wC,KAAA0kB,MAAAqsB,KAAA,EACAA,EAAA/wC,KAAAixC,IAAAF,IAAA,EACA/wC,KAAA0kB,MAAAqsB,QAAAC,GAAAhxC,KAAA0kB,MAAAssB,OAAA,KACAhxC,KAAAixC,IAAAF,QAAAC,GAAAhxC,KAAAixC,IAAAD,OAAA,IACA,EARAA,EAAAhxC,KAAA0kB,MAAAssB,QAAA,EAAAA,EAAAhxC,KAAAixC,IAAAD,OAAA,KAWAhxC,KAAAiyC,aAAA,SAAAlB,EAAAC,GACA,OAAAhxC,KAAA0kB,MAAAqsB,QAAA/wC,KAAA0kB,MAAAssB,WACA,EAEAhxC,KAAAmxC,QAAAJ,EAAAC,IAIAhxC,KAAAkyC,WAAA,SAAAnB,EAAAC,GACA,OAAAhxC,KAAAixC,IAAAF,QAAA/wC,KAAAixC,IAAAD,UACA,EAEAhxC,KAAAmxC,QAAAJ,EAAAC,IAIAhxC,KAAAmyC,cAAA,SAAApB,EAAAC,GACA,OAAAhxC,KAAAixC,IAAAF,QAAA/wC,KAAAixC,IAAAD,UACA,EACOhxC,KAAA0kB,MAAAqsB,QAAA/wC,KAAA0kB,MAAAssB,WACP,EAEAhxC,KAAAmxC,QAAAJ,EAAAC,IAIAhxC,KAAAoyC,SAAA,SAAAC,EAAAC,GACA,GAAAtyC,KAAAixC,IAAAF,IAAAuB,EAAA,IAAArB,EAAA,CACAF,IAAAuB,EAAA,EACAtB,OAAA,QACQ,GAAAhxC,KAAAixC,IAAAF,IAAAsB,EAAApB,EAAA,CACRF,IAAAsB,EACArB,OAAA,GAEA,GAAAhxC,KAAA0kB,MAAAqsB,IAAAuB,EAAA,IAAA5tB,EAAA,CACAqsB,IAAAuB,EAAA,EACAtB,OAAA,QACQ,GAAAhxC,KAAA0kB,MAAAqsB,IAAAsB,EAAA3tB,EAAA,CACRqsB,IAAAsB,EACArB,OAAA,GAEA,OAAA9uC,EAAAqwC,WAAA7tB,GAAA1kB,KAAA0kB,MAAAusB,GAAAjxC,KAAAixC,MAGAjxC,KAAAwyC,OAAA,SAAAzB,EAAAC,GACA,IAAAK,EAAArxC,KAAAmxC,QAAAJ,EAAAC,GACA,MAAAK,EAAA,OAAArxC,KAAgC,OAAAqxC,EAAA,IAAA3sB,EAAA,CAChCqsB,MACAC,eACQ,IAAAC,EAAA,CACRF,MACAC,UAEA,OAAA9uC,EAAAqwC,WAAA7tB,GAAA1kB,KAAA0kB,MAAAusB,GAAAjxC,KAAAixC,MAGAjxC,KAAAyyC,QAAA,WACA,OAAAzyC,KAAA0kB,MAAAqsB,MAAA/wC,KAAAixC,IAAAF,KAAA/wC,KAAA0kB,MAAAssB,SAAAhxC,KAAAixC,IAAAD,QAGAhxC,KAAAgyC,YAAA,WACA,OAAAhyC,KAAA0kB,MAAAqsB,MAAA/wC,KAAAixC,IAAAF,KAGA/wC,KAAA0yC,MAAA,WACA,OAAAxwC,EAAAqwC,WAAAvyC,KAAA0kB,MAAA1kB,KAAAixC,MAGAjxC,KAAA2yC,aAAA,WACA,UAAA3yC,KAAAixC,IAAAD,OAAA,IAAA9uC,EAAAlC,KAAA0kB,MAAAqsB,IAAA,EAAAx1B,KAAA3J,IAAA5R,KAAA0kB,MAAAqsB,IAAA/wC,KAAAixC,IAAAF,IAAA,MAAmH,IAAA7uC,EAAAlC,KAAA0kB,MAAAqsB,IAAA,EAAA/wC,KAAAixC,IAAAF,IAAA,IAGnH/wC,KAAA4yC,cAAA,SAAA3sC,GACA,IAAA4sC,EAAA5sC,EAAA6sC,yBAAA9yC,KAAA0kB,OACAquB,EAAA9sC,EAAA6sC,yBAAA9yC,KAAAixC,KACA,WAAA/uC,EAAA2wC,EAAA9B,IAAA8B,EAAA7B,OAAA+B,EAAAhC,IAAAgC,EAAA/B,SAGAhxC,KAAAgzC,OAAA,SAAAjC,EAAAC,GACAhxC,KAAA0kB,MAAAqsB,OACA/wC,KAAA0kB,MAAAssB,UACAhxC,KAAAixC,IAAAF,OACA/wC,KAAAixC,IAAAD,aAEG1vC,KAAAY,EAAAtB,WAEHsB,EAAAqwC,WAAA,SAAA7tB,EAAAusB,GACA,WAAA/uC,EAAAwiB,EAAAqsB,IAAArsB,EAAAssB,OAAAC,EAAAF,IAAAE,EAAAD,SAGA9uC,EAAA+wC,cAhPA,SAAAC,EAAAC,GACA,OAAAD,EAAAnC,IAAAoC,EAAApC,KAAAmC,EAAAlC,OAAAmC,EAAAnC,QAiPA9uC,EAAA+wC,cAAA,SAAAC,EAAAC,GACA,OAAAD,EAAAnC,IAAAoC,EAAApC,KAAAmC,EAAAlC,OAAAmC,EAAAnC,QAGAvvC,EAAAS,UAEAF,IAAAsM,OAAA,uDAAAnM,EAAAV,EAAA4M,GACA,aAEA5M,EAAA2xC,KAAA,SAAA74B,GACA,OAAAA,IAAAlZ,OAAA,IAGAI,EAAA4xC,cAAA,SAAAnoC,GACA,OAAAA,EAAAxD,MAAA,IAAA4rC,UAAAvrC,KAAA,KAGAtG,EAAA8xC,aAAA,SAAAroC,EAAAsoC,GAGA,IAFA,IAAAp9B,EAAA,GAEAo9B,EAAA,GACA,EAAAA,IAAAp9B,GAAAlL,IACAsoC,IAAA,KAAAtoC,MAGA,OAAAkL,GAGA,IAAA8mB,EAAA,SACAC,EAAA,SAEA17B,EAAAgyC,eAAA,SAAAvoC,GACA,OAAAA,EAAAqJ,QAAA2oB,EAAA,KAGAz7B,EAAAiyC,gBAAA,SAAAxoC,GACA,OAAAA,EAAAqJ,QAAA4oB,EAAA,KAGA17B,EAAAkyC,WAAA,SAAA5qB,GACA,IAAA6qB,EAAA,GAEA,QAAAr+B,KAAAwT,EACA6qB,EAAAr+B,GAAAwT,EAAAxT,GAGA,OAAAq+B,GAGAnyC,EAAAoyC,UAAA,SAAAhoC,GAGA,IAFA,IAAA+nC,EAAA,GAEA1yC,EAAA,EAAAk2B,EAAAvrB,EAAAxK,OAAqCH,EAAAk2B,EAAOl2B,IAC5C2K,EAAA3K,IAAA,iBAAA2K,EAAA3K,GAAA0yC,EAAA1yC,GAAAlB,KAAA2zC,WAAA9nC,EAAA3K,IAAuF0yC,EAAA1yC,GAAA2K,EAAA3K,GAGvF,OAAA0yC,GAGAnyC,EAAAqyC,SAAA,SAAAA,EAAA/qB,GACA,qBAAAA,MAAA,OAAAA,EACA,IAAA6qB,EAEA,GAAArzC,MAAAsG,QAAAkiB,GAAA,CACA6qB,EAAA,GAEA,QAAAr+B,EAAA,EAAuBA,EAAAwT,EAAA1nB,OAAkBkU,IACzCq+B,EAAAr+B,GAAAu+B,EAAA/qB,EAAAxT,IAGA,OAAAq+B,EAGA,uBAAAxzC,OAAAQ,UAAAuT,SAAA7S,KAAAynB,GAAA,OAAAA,EAGA,QAAAxT,KAFAq+B,EAAA,GAEA7qB,EACA6qB,EAAAr+B,GAAAu+B,EAAA/qB,EAAAxT,IAGA,OAAAq+B,GAGAnyC,EAAAsyC,WAAA,SAAAxU,GAGA,IAFA,IAAA9oB,EAAA,GAEAvV,EAAA,EAAmBA,EAAAq+B,EAAAl+B,OAAgBH,IACnCuV,EAAA8oB,EAAAr+B,IAAA,EAGA,OAAAuV,GAGAhV,EAAAuyC,UAAA,SAAA1xC,GACA,IAAAmU,EAAArW,OAAAS,OAAA,MAEA,QAAAK,KAAAoB,EACAmU,EAAAvV,GAAAoB,EAAApB,GAGA,OAAAuV,GAGAhV,EAAAwyC,YAAA,SAAApoC,EAAAnK,GACA,QAAAR,EAAA,EAAmBA,GAAA2K,EAAAxK,OAAmBH,IACtCQ,IAAAmK,EAAA3K,IACA2K,EAAA/D,OAAA5G,EAAA,IAKAO,EAAAyyC,aAAA,SAAA/b,GACA,OAAAA,EAAA5jB,QAAA,0BAAkC,SAGlC9S,EAAA0yC,WAAA,SAAAhc,GACA,UAAAA,GAAA5jB,QAAA,cAA0CA,QAAA,cAAuBA,QAAA,cAAuBA,QAAA,eAGxF9S,EAAA2yC,gBAAA,SAAAlpC,EAAAmpC,GACA,IAAAC,EAAA,GAOA,OANAppC,EAAAqJ,QAAA8/B,EAAA,SAAAlc,GACAmc,EAAA1mC,KAAA,CACA0nB,OAAAl0B,oBAAAC,OAAA,GACAA,OAAA82B,EAAA92B,WAGAizC,GAGA7yC,EAAA8yC,aAAA,SAAAC,GACA,IAAAle,EAAA,KAEAjmB,EAAA,WACAimB,EAAA,KACAke,KAGAC,EAAA,SAAAA,EAAAtE,GAGA,OAFAsE,EAAAC,SACApe,EAAAG,WAAApmB,EAAA8/B,GAAA,GACAsE,GAqBA,OAlBAA,EAAAE,SAAAF,EAEAA,EAAAnzC,KAAA,WAGA,OAFAtB,KAAA00C,SACAF,IACAC,GAGAA,EAAAC,OAAA,WAGA,OAFAle,aAAAF,GACAA,EAAA,KACAme,GAGAA,EAAAG,UAAA,WACA,OAAAte,GAGAme,GAGAhzC,EAAAozC,YAAA,SAAAL,EAAAM,GACA,IAAAxe,EAAA,KAEAjmB,EAAA,WACAimB,EAAA,KACAke,KAGAO,EAAA,SAAA5E,GACA,MAAA7Z,MAAAG,WAAApmB,EAAA8/B,GAAA2E,KAwBA,OArBAC,EAAA1e,MAAA,SAAA8Z,GACA7Z,GAAAE,aAAAF,GACAA,EAAAG,WAAApmB,EAAA8/B,GAAA2E,IAGAC,EAAAJ,SAAAI,EAEAA,EAAAzzC,KAAA,WACAtB,KAAA00C,SACAF,KAGAO,EAAAL,OAAA,WACApe,GAAAE,aAAAF,GACAA,EAAA,MAGAye,EAAAH,UAAA,WACA,OAAAte,GAGAye,KAGA/yC,IAAAsM,OAAA,wDAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA2mC,EACA3mC,EAAA5M,QAAA,CACAwzC,UAAA,EACAC,eAAA,WACA,SAAAF,KAAAr8B,KAAAqkB,MAAA,MACAgY,GAAA,IAEAN,OAAA,WACAM,EAAAr8B,KAAAqkB,UAIAh7B,IAAAsM,OAAA,iKAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAxF,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEAgzC,EAAAhzC,EAAA,cAEAizC,EAAAjzC,EAAA,eAEAkzC,EAAAlzC,EAAA,gBAEAmzC,EAAAjW,EAAAR,SAAA,GACA0W,EAAAlW,EAAAhB,KACAmX,EAAAnW,EAAAR,SAAA,GAGA4W,EAAAtzC,EAAA,eAEAuzC,EAAAD,EAAArR,SACAlF,EAAAG,EAAAH,MACAyW,EAAAzW,EAAA,UAwlBAz9B,EAAAm0C,UAtlBA,SAAAtY,EAAAuY,GACA,IAAA9sC,EAAAosC,EAAA/qC,cAAA,YACArB,EAAAhG,UAAA,iBACAgG,EAAAi3B,aAAA,cACAj3B,EAAAi3B,aAAA,qBACAj3B,EAAAi3B,aAAA,wBACAj3B,EAAAi3B,aAAA,iBACAj3B,EAAAuB,MAAAwrC,QAAA,IACAxY,EAAAmE,aAAA14B,EAAAu0B,EAAAoE,YACA,IAAAqU,GAAA,EACAC,GAAA,EACAC,GAAA,EACAC,GAAA,EACAC,EAAA,GACA9W,EAAAD,WAAAr2B,EAAAuB,MAAAjH,SAAA,OACA,IAAA+yC,GAAA,EACAC,GAAA,EACAC,EAAA,GACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EAEA,IACA,IAAAC,EAAAvsC,SAAA2iB,gBAAA/jB,EACK,MAAAsN,IAELxN,EAAA0iC,YAAAxiC,EAAA,gBAAAsN,GACAggC,IACAR,EAAArwC,OAAA6Q,GACAqgC,GAAA,KAEA7tC,EAAA0iC,YAAAxiC,EAAA,iBAAAsN,GACA,IAAAggC,EAAA,CAGA,GAFAK,GAAA,EAEArX,EAAAP,OACA,IACA,IAAA30B,SAAAwsC,WAAA,OACS,MAAAtgC,IAGTw/B,EAAAtwC,QAAA8Q,GACAgpB,EAAAP,OAAArI,WAAAmgB,GAAuDA,OAEvD52C,KAAA62C,cAAA,EAEA72C,KAAAmD,MAAA,WACA,GAAAgzC,GAAAX,GAAA,WAAAx1C,KAAA62C,aAAA,OAAA9tC,EAAA5F,MAAA,CACA2zC,eAAA,IAEA,IAAAxkC,EAAAvJ,EAAAuB,MAAAgI,IACAvJ,EAAAuB,MAAAE,SAAA,QACAzB,EAAAuB,MAAAgI,IAAA,MAEA,IACA,IAAAykC,EAAA,GAAAhuC,EAAAiuC,wBAAA1kC,IACO,MAAA+D,GACP,OAGA,IAAA4gC,EAAA,GAEA,GAAAF,EAGA,IAFA,IAAA/1C,EAAA+H,EAAAmuC,cAEAl2C,GAAA,GAAAA,EAAA6tB,UACAooB,EAAArpC,KAAA5M,GACAA,EAAAg/B,aAAA,oBACAh/B,KAAAk2C,eAAAl2C,EAAAwgC,YAAAxgC,EAAAwgC,cAAAqU,KAA0E70C,EAAAk2C,cAI1EnuC,EAAA5F,MAAA,CACA2zC,eAAA,IAGAC,GACAE,EAAAx0C,QAAA,SAAAjC,GACAA,EAAA22C,gBAAA,mBAIA1gB,WAAA,WACA1tB,EAAAuB,MAAAE,SAAA,GACA,OAAAzB,EAAAuB,MAAAgI,MAAAvJ,EAAAuB,MAAAgI,QACO,IAGPtS,KAAAmQ,KAAA,WACApH,EAAAoH,QAGAnQ,KAAA02C,UAAA,WACA,OAAAA,GAGAb,EAAAvwC,GAAA,gCACAuwC,EAAAuB,OAAA,gBAAAvB,EAAAuB,MAAAtwC,QAAAgE,OAEAmrC,IACAK,EAAAvtC,EAAArH,MAAA,GACA21C,KAGAT,OAEA,IAAAA,EAAA1X,EAAA,SAAAx9B,GACA,GAAAg1C,KAAAX,GAAAr0C,KAAAw0C,EAAA,CACAx0C,MAAA,IACA,IAAA41C,EAAA,QAAA51C,EAAA,WACA41C,GAAAvuC,EAAArH,QAAAqH,EAAArH,MAAA40C,EAAAgB,GACA,IACAC,EAAA,GAAA71C,EAAAL,SAAAw0C,EAAAhwC,UAAA4sC,UAAA,MADA,GAGA8D,GAAAC,GAAAe,GACAxuC,EAAAyuC,kBAJA,EAIAD,GAGAhB,EAPA,EAQAC,EAAAe,IACK,WACL,IAAAtB,IAAAC,IACAQ,GAAAe,GAAA,CACAxB,GAAA,EACA,IAAApwC,EAAAgwC,EAAAhwC,UACA+D,EAAA/D,EAAA6xC,WACA3G,EAAAlrC,EAAAwH,OAAA0jC,IACA4G,EAAA/tC,EAAA8a,MAAAssB,OACAuG,EAAA3tC,EAAAqnC,IAAAD,OACAvzB,EAAAo4B,EAAA5vC,QAAA2xC,QAAA7G,GAEA,GAAAnnC,EAAA8a,MAAAqsB,OAAA,CACA,IAAA8G,EAAAhC,EAAA5vC,QAAA2xC,QAAA7G,EAAA,GACA4G,EAAA/tC,EAAA8a,MAAAqsB,MAAA,IAAA4G,EACAJ,GAAAM,EAAAx2C,OAAA,EACAoc,EAAAo6B,EAAA,KAAAp6B,OACO,GAAA7T,EAAAqnC,IAAAF,OAAA,CACP,IAAA+G,EAAAjC,EAAA5vC,QAAA2xC,QAAA7G,EAAA,GACAwG,EAAA3tC,EAAAqnC,IAAAF,MAAA,EAAA+G,EAAAz2C,OAAAk2C,EACAA,GAAA95B,EAAApc,OAAA,EACAoc,IAAA,KAAAq6B,EAGAr6B,EAAApc,OAvJA,MAwJAs2C,EAxJA,KAwJAJ,EAxJA,IAyJA95B,IAAA4I,MAAA,EAzJA,MA2JA5I,EAAA,KACAk6B,EAAA,EACAJ,EAAA,IAIA,IAAAD,EAAA75B,EAAA,OAYA,GAVA65B,GAAAhB,IACAvtC,EAAArH,MAAA40C,EAAAgB,EACAf,EAAAC,EAAAc,EAAAj2C,QAGAo2C,IACAlB,EAAAxtC,EAAA4uC,eACAnB,EAAAztC,EAAAwuC,cAGAf,GAAAe,GAAAhB,GAAAoB,GAAA5uC,EAAAwuC,cAAAf,EAEA,IACAztC,EAAAyuC,kBAAAG,EAAAJ,GACAhB,EAAAoB,EACAnB,EAAAe,EACW,MAAAlhC,IAGX4/B,GAAA,IAEAS,GAAAb,EAAAtwC,UAEA,IAeAwyC,EAAA,KAEA/3C,KAAAg4C,gBAAA,SAAA9H,GACA6H,EAAA7H,GAGAlwC,KAAAi4C,gBAAA,WACA,OAAAF,GAGA,IAAAN,GAAA,EAEAS,EAAA,SAAAx2C,EAAAy2C,GAGA,GAFAV,OAAA,GAEAzB,EAIA,OAHAY,IACAl1C,GAAAm0C,EAAAnwC,QAAAhE,GACAs0C,GAAA,EACA,GAWA,IATA,IAAA2B,EAAA5uC,EAAA4uC,eACAJ,EAAAxuC,EAAAwuC,aACAa,EAAA7B,EACA8B,EAAA/B,EAAAj1C,OAAAm1C,EACA8B,EAAA52C,EACA62C,EAAA72C,EAAAL,OAAAs2C,EACAa,EAAA92C,EAAAL,OAAAk2C,EACAr2C,EAAA,EAEAk3C,EAAA,GAAA9B,EAAAp1C,IAAAQ,EAAAR,IACAA,IACAk3C,IAMA,IAHAE,IAAAjyB,MAAAnlB,GACAA,EAAA,EAEAm3C,EAAA,GAAA/B,EAAAj1C,OAAAH,EAAAq1C,EAAA,GAAAD,IAAAj1C,OAAAH,IAAAQ,IAAAL,OAAAH,IACAA,IACAm3C,IAGAE,GAAAr3C,EAAA,EACAs3C,GAAAt3C,EAAA,EACA,IAAAu3C,EAAAH,EAAAj3C,OAAAH,EAAA,EAQA,OANAu3C,EAAA,IACAL,GAAAK,EACAA,EAAA,GAGAH,IAAAjyB,MAAA,EAAAoyB,GACAN,GAAAG,GAAAC,GAAAH,GAAAC,GAAAG,GACAtC,GAAA,EAEAoC,IAAAF,IAAAC,IAAAE,IAAAC,GAAApC,EACAP,EAAA6C,YAAAJ,GAEAzC,EAAA6C,YAAAJ,EAAA,CACAF,aACAC,cACAE,eACAC,eAIAtC,GAAA,EACAI,EAAA50C,EACA60C,EAAAoB,EACAnB,EAAAe,EACAd,EAAA+B,EACAF,GAnBA,IAuBA3yC,EAAA,SAAA0Q,GACA,GAAA4/B,EAAA,OAAA0C,IAEA,GAAAtiC,KAAAuiC,UAAA,CACA,kBAAAviC,EAAAuiC,UAAA,OAAA/C,EAAA3pB,YAAA,QACA,kBAAA7V,EAAAuiC,UAAA,OAAA/C,EAAA3pB,YAAA,QAGA,IAAAxV,EAAA3N,EAAArH,MACA42C,EAAAJ,EAAAxhC,GAAA,IACAA,EAAArV,OAAAw3C,KAAAlD,EAAA//B,KAAA0iC,KAAA1B,KAGAkC,EAAA,SAAAA,EAAAziC,EAAAK,EAAAqiC,GACA,IAAAntB,EAAAvV,EAAAuV,eAAAS,OAAAT,cACA,GAAAA,IAAA0pB,EAAA,CACA,IAAA0D,EAAAzD,GAAAwD,EAAA,oBAEA,IACA,OAAAriC,GACA,IAAAkV,EAAAE,QAAAktB,EAAAtiC,GAEAkV,EAAAqtB,QAAAD,GAEO,MAAA3iC,GACP,IAAA0iC,EAAA,OAAAD,EAAAziC,EAAAK,GAAA,MAIAwiC,EAAA,SAAA7iC,EAAA8iC,GACA,IAAAziC,EAAAm/B,EAAAuD,cACA,IAAA1iC,EAAA,OAAA7N,EAAA8iB,eAAAtV,GAEAyiC,EAAAziC,EAAAK,IACAwoB,IACA0X,EAAAlgC,GACAq/B,EAAAr/B,EACA+f,WAAA,WACAsf,GAAA,GACW,KAGXoD,EAAAtD,EAAAwD,QAAAxD,EAAApwC,SACAoD,EAAA8iB,eAAAtV,KAEA0/B,GAAA,EACAhtC,EAAArH,MAAAgV,EACA3N,EAAAuwC,SACA7iB,WAAA,WACAsf,GAAA,EACAa,IACAuC,EAAAtD,EAAAwD,QAAAxD,EAAApwC,aAKA4zC,EAAA,SAAAhjC,GACA6iC,EAAA7iC,GAAA,IAGA5Q,EAAA,SAAA4Q,GACA6iC,EAAA7iC,GAAA,IAGA3Q,EAAA,SAAA2Q,GACA,IAAAK,EAAAoiC,EAAAziC,GACAg/B,EAAAH,mBAEA,iBAAAx+B,GACAA,GAAAm/B,EAAAnwC,QAAAgR,EAAAL,GACAgpB,EAAAhB,MAAA5H,WAAAmgB,GACA/tC,EAAA8iB,eAAAtV,KAEAtN,EAAArH,MAAA,GACAs0C,GAAA,KAIAntC,EAAAymC,sBAAAvmC,EAAA8sC,EAAA0D,aAAA52C,KAAAkzC,IACAhtC,EAAA0iC,YAAAxiC,EAAA,SAtKA,SAAAsN,GACA4/B,IAEAF,EACAA,GAAA,EARA,SAAAhtC,GACA,WAAAA,EAAA4uC,gBAAA5uC,EAAAwuC,cAAAjB,EAAAj1C,QAAA0H,EAAArH,QAAA40C,MAAAvtC,EAAAwuC,eAAAf,EAQOgD,CAAAzwC,KACP8sC,EAAA4D,YACA7C,QAgKA/tC,EAAA0iC,YAAAxiC,EAAA,QAAApD,GACAkD,EAAA0iC,YAAAxiC,EAAA,MAAAswC,GACAxwC,EAAA0iC,YAAAxiC,EAAA,OAAAtD,GACAoD,EAAA0iC,YAAAxiC,EAAA,QAAArD,GAEA,UAAAqD,GAAA,WAAAA,GAAA,YAAAA,GACAF,EAAA0iC,YAAAjO,EAAA,mBAAAjnB,GACA,KAAAgpB,EAAAzB,OAAAvnB,EAAAs4B,UAAAt4B,EAAA41B,QAEA,OAAA51B,EAAA80B,SACA,QACA1lC,EAAA4Q,GACA,MAEA,QACA3Q,EAAA2Q,GACA,MAEA,QACAgjC,EAAAhjC,MAMA,IAwBAsiC,EAAA,WACA,GAAA1C,GAAAJ,EAAA8C,sBAAA9C,EAAA6D,UAAA,CACA,GAAAtD,EAAA,OAAAuD,IAEA,GAAA1D,EAAA2D,kBACA/D,EAAA8C,oBAAA5vC,EAAArH,WACO,CACP,IAAAgV,EAAA3N,EAAArH,MACAw2C,EAAAxhC,GAEAu/B,EAAA4D,cACA5D,EAAA1f,UACA0f,EAAA4D,YAAAn1B,MAAAssB,OAAAiF,EAAA0B,eAAA1B,EAAA1f,QAAAujB,wBAGA7D,EAAA4D,YAAA5I,IAAAD,OAAAiF,EAAA4D,YAAAn1B,MAAAssB,OAAAwF,EAAAP,EAAA0B,eAAAlB,MAKAY,EAAA,SAAAhhC,GACAw/B,EAAAwB,mBAAAxB,EAAA6D,YACAzD,GAAA,EACAJ,EAAAwB,mBACAxB,EAAAkE,IAAA,YAAAJ,GACAtjC,GAAA1Q,MAGA,SAAAg0C,IACAtD,GAAA,EACAttC,EAAAoH,OACApH,EAAA5F,QACAkzC,GAAA,EAGA,IAkEA2D,EAlEAC,EAAA7E,EAAAP,YAAA8D,EAAA,IAAAhE,SAAAhyC,KAAA,WAoEA,SAAAu3C,IACA1jB,aAAAwjB,GACAA,EAAAvjB,WAAA,WACA0f,IACAptC,EAAAuB,MAAAsF,QAAAumC,EACAA,EAAA,IAGAN,EAAAnxC,SAAAy1C,iBAAA,EACAtE,EAAAnxC,SAAA01C,uBAAAvE,EAAAnxC,SAAA21C,yBACO,GAlEPxxC,EAAA0iC,YAAAxiC,EAAA,mBAvEA,SAAAsN,GACA,IAAA4/B,GAAAJ,EAAAyE,qBAAAzE,EAAA6D,YACAzD,EAAA,IACAG,GAAA,CACA3f,WAAAkiB,EAAA,GACA9C,EAAAvwC,GAAA,YAAAq0C,GACA,IAAA/vC,EAAAisC,EAAA0E,oBACA3wC,EAAAqnC,IAAAF,IAAAnnC,EAAA8a,MAAAqsB,IACAnnC,EAAAqnC,IAAAD,OAAApnC,EAAA8a,MAAAssB,OACAiF,EAAA4D,YAAAjwC,EACAqsC,EAAA0B,eAAApB,EACAV,EAAAyE,mBAAArE,GAEAA,EAAA2D,mBACA7wC,EAAArH,MAAA,GACA40C,EAAA,GACAC,EAAA,EACAC,EAAA,IAEAztC,EAAAyxC,oBAAAvE,EAAA1f,QAAAxtB,EAAAyxC,qBACAzxC,EAAA0xC,kBAAAxE,EAAA1f,QAAAxtB,EAAA0xC,uBAoDA5xC,EAAA0iC,YAAAxiC,EAAA,oBAAA4vC,GACA9vC,EAAA0iC,YAAAxiC,EAAA,QAZA,SAAAsN,GACA,IAAAA,EAAA80B,SAAApiC,EAAArH,MAAAL,OAAA0H,EAAA4uC,iBACA1B,IAAAK,EAAAvtC,EAAArH,OACA60C,EAAAC,GAAA,EACAI,KAGAqD,MAMApxC,EAAA0iC,YAAAxiC,EAAA,UAAAkxC,GACApxC,EAAA0iC,YAAAxiC,EAAA,iBAAAsuC,GAEAr3C,KAAA06C,WAAA,WACA,OAAA3xC,GAGA/I,KAAA26C,eAAA,SAAAj5C,GACA00C,EAAA10C,EACAqH,EAAA0C,UAAA,GAGAzL,KAAA46C,YAAA,SAAAnvC,GACA2qC,IAAArtC,EAAA0C,aAGAzL,KAAA66C,0BAAA,SAAAn5C,KAEA1B,KAAA86C,cAAA,SAAAzkC,GACAohC,GAAA,EACAb,IAEAf,EAAAhmC,MAAA,qBACAoY,OAAA4tB,EACAkF,SAAA1kC,IAGArW,KAAAg7C,YAAA3kC,GAAA,IAGArW,KAAAg7C,YAAA,SAAA3kC,EAAA4kC,GACA9E,MAAAptC,EAAAuB,MAAAsF,SACA7G,EAAAuB,MAAAsF,SAAAqrC,EAAA,kBAA2D,KAAA5b,EAAAhB,KAAA,eAAyC,sBAAAkY,EAAAC,GAAAX,EAAAnxC,SAAAw2C,eAAA,SACpG,IAAAC,EAAAtF,EAAA/mC,UAAAkoC,wBACA1sC,EAAA6qC,EAAA5S,cAAAsT,EAAA/mC,WACAwD,EAAA6oC,EAAA7oC,KAAAmR,SAAAnZ,EAAA8wC,iBAAA,GACAjuC,EAAAguC,EAAAhuC,MAAAsW,SAAA03B,EAAAE,kBAAA,GACAC,EAAAH,EAAAI,OAAAjpC,EAAAvJ,EAAAqJ,aAAA,EAEAopC,EAAA,SAAAnlC,GACA8+B,EAAAlS,UAAAl6B,EAAAsN,EAAAi4B,QAAAnhC,EAAA,EAAAoO,KAAA5J,IAAA0E,EAAAk4B,QAAAj8B,EAAA,EAAAgpC,KAGAE,EAAAnlC,GACA,aAAAA,EAAA3M,OACAmsC,EAAAnxC,SAAAy1C,iBAAA,EACA3jB,aAAAwjB,GACA3a,EAAAjB,OAAAv1B,EAAA2jC,QAAAqJ,EAAA/mC,UAAA0sC,EAAAtB,KAGAl6C,KAAAk6C,qBAgBA,IAAAY,EAAA,SAAAzkC,GACAw/B,EAAA4F,UAAAX,cAAAzkC,GACA6jC,KAGArxC,EAAA0iC,YAAAxiC,EAAA,UAAA+xC,GACAjyC,EAAA0iC,YAAAxiC,EAAA,qBAAAsN,GACAA,EAAAsV,iBACAuuB,MAEArxC,EAAA0iC,YAAAsK,EAAAnxC,SAAAuF,SAAA,cAAA6wC,GACAjyC,EAAA0iC,YAAAxiC,EAAA,cAAA+xC,GACA5b,GAEA,SAAA5B,EAAAuY,EAAA9sC,GACA,IAAA2yC,EAAA,KACAC,GAAA,EACA5yC,EAAAyiB,iBAAA,mBAAAnV,GACAqlC,GAAAllB,aAAAklB,GACAC,GAAA,IACO,GACP5yC,EAAAyiB,iBAAA,iBAAAnV,GACAqlC,EAAAjlB,WAAA,WACAklB,GAAA,GACS,OACF,GAEP,IAAAC,EAAA,SAAAvlC,GACA,GAAAlM,SAAA2iB,gBAAA/jB,KACA4yC,GAAA1F,GAAAJ,EAAAgG,cAAAC,kBAEA/F,EAAA,CAIA,IAAA4B,EAAA5uC,EAAA4uC,eACAJ,EAAAxuC,EAAAwuC,aACAhiC,EAAA,KACAwmC,EAAA,EAwBA,GAtBA,GAAApE,EACApiC,EAAAkgC,EAAAuG,GACS,GAAArE,EACTpiC,EAAAkgC,EAAAwG,KACS1E,EAAAf,GAAA,MAAAF,EAAAiB,GACThiC,EAAAkgC,EAAAxE,IACS0G,EAAApB,GAAA,KAAAD,EAAAqB,EAAA,IACTpiC,EAAAkgC,EAAAtoC,KACA4uC,EAAArG,EAAAlvC,QACSmxC,EAAApB,GAAAoB,GAAApB,GAAAC,GAAAD,GAAAoB,GAAAJ,EACThiC,EAAAkgC,EAAAtoC,KACSoqC,EAAAf,GAAAF,EAAAjwB,MAAA,EAAAkxB,GAAA7vC,MAAA,MAAArG,OAAA,EACTkU,EAAAkgC,EAAAyG,KACS3E,EAAAf,GAAA,KAAAF,EAAAiB,EAAA,IACThiC,EAAAkgC,EAAAroC,MACA2uC,EAAArG,EAAAlvC,SACS+wC,EAAAf,GAAAe,GAAAf,MAAAD,GAAAoB,GAAAJ,KACThiC,EAAAkgC,EAAAroC,OAGAuqC,IAAAJ,IAAAwE,GAAArG,EAAAnuB,OAEAhS,EAAA,CACA,IAAAa,EAAAy/B,EAAA0D,aAAA,GAA2CwC,EAAAxmC,GAE3C,IAAAa,GAAAy/B,EAAA9xC,SAAA,CACAwR,EAAAkgC,EAAAvK,gBAAA31B,GACA,IAAAzO,EAAA+uC,EAAA9xC,SAAAo4C,eAAAJ,EAAAxmC,GACAzO,GAAA+uC,EAAA3pB,YAAAplB,GAGAyvC,EAAAoB,EACAnB,EAAAe,EACAX,EAAA,OAIAzsC,SAAAqhB,iBAAA,kBAAAowB,GACA/F,EAAAvwC,GAAA,qBACA6E,SAAAyhC,oBAAA,kBAAAgQ,KAnEAQ,CAAA9e,EAAAuY,EAAA9sC,MA0EA/G,IAAAsM,OAAA,yFAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAgxB,EAAAl9B,EAAA,oBAMA,SAAAk6C,EAAAC,GACAA,EAAAC,gBAAA,KACA,IAAAp4C,EAAAm4C,EAAAn4C,OACAA,EAAAq4C,kBAAA,YAAAx8C,KAAAy8C,YAAA95C,KAAA25C,IACAn4C,EAAAq4C,kBAAA,WAAAx8C,KAAA08C,cAAA/5C,KAAA25C,IACAn4C,EAAAq4C,kBAAA,cAAAx8C,KAAA28C,cAAAh6C,KAAA25C,IACAn4C,EAAAq4C,kBAAA,YAAAx8C,KAAA48C,YAAAj6C,KAAA25C,IACAn4C,EAAAq4C,kBAAA,aAAAx8C,KAAA68C,aAAAl6C,KAAA25C,IACA,+HACA75C,QAAA,SAAAoZ,GACAygC,EAAAzgC,GAAA7b,KAAA6b,IACK7b,MACLs8C,EAAAQ,cAAA98C,KAAA+8C,kBAAAp6C,KAAA25C,EAAA,gBACAA,EAAAU,cAAAh9C,KAAA+8C,kBAAAp6C,KAAA25C,EAAA,gBAyOA,SAAAW,EAAArzC,EAAAyD,GACA,GAAAzD,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,IAAA,IAAAM,EAAA,EAAAhkC,EAAA2jC,OAAApnC,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,YAA8G,GAAApnC,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,IAAA,GAAAnnC,EAAA8a,MAAAssB,QAAApnC,EAAAqnC,IAAAD,OAAuHK,EAAA,EAAAhkC,EAAA0jC,IAAAnnC,EAAA8a,MAAAqsB,IAAAnnC,EAAAqnC,IAAAF,SAAvH,IAAAM,EAAAhkC,EAAA2jC,OAAA,EAC9G,OAAAK,EAAA,GACAhkC,OAAAzD,EAAA8a,MACAw4B,OAAAtzC,EAAAqnC,KACM,CACN5jC,OAAAzD,EAAAqnC,IACAiM,OAAAtzC,EAAA8a,QA7OA,WACA1kB,KAAAy8C,YAAA,SAAAU,GACA,IAAAC,EAAAD,EAAAC,cACAl1C,EAAAi1C,EAAAE,sBACAr9C,KAAAs9C,eAAAH,EACA,IAAAh5C,EAAAnE,KAAAmE,OACAioC,EAAA+Q,EAAAnR,YAEA,WAAAI,IACAjoC,EAAAo2C,oBACA9H,WACA,GAAArG,IAAAjoC,EAAA0B,UAAA03C,eAAAr1C,QAEA,GAAAkkC,IACAjoC,EAAAs3C,UAAAX,cAAAqC,EAAApC,UACA1b,EAAAZ,WAAA0e,EAAAxxB,qBAMA3rB,KAAAs9C,eAAAE,KAAA7kC,KAAAqkB,OAEAogB,GAAAj5C,EAAAuyC,cACAvyC,EAAAhB,SAEAnD,KAAAy9C,eAAAz9C,KAAAu8C,iBAAAp4C,EAAAu5C,oBAOA19C,KAAA29C,aAAAR,GACAn9C,KAAA49C,YAAA11C,EAAAi1C,EAAApC,SAAAvM,QAAA,GACA2O,EAAAxxB,mBARA3rB,KAAAyM,SAAA,kBACAzM,KAAA29C,aAAAR,MAUAn9C,KAAA49C,YAAA,SAAA11C,EAAA21C,GACA31C,KAAAlI,KAAAmE,OAAAO,SAAAo5C,wBAAA99C,KAAA6b,EAAA7b,KAAAgJ,GACA,IAAA7E,EAAAnE,KAAAmE,OACAnE,KAAAs9C,iBACAt9C,KAAAs9C,eAAAS,cAAA55C,EAAA0B,UAAAm4C,iBAAA91C,GAAoF21C,GAAA15C,EAAA0B,UAAA03C,eAAAr1C,GACpF21C,GAAA79C,KAAAs5C,SAEAn1C,EAAAO,SAAAuF,SAAAg0C,YACA95C,EAAAO,SAAAuF,SAAAg0C,aAGA95C,EAAAs+B,SAAA,iBACAziC,KAAAyM,SAAA,YAGAzM,KAAAs5C,OAAA,WACA,IAAA4D,EACA/4C,EAAAnE,KAAAmE,OACAkJ,EAAAlJ,EAAAO,SAAAo5C,wBAAA99C,KAAA6b,EAAA7b,KAAAgJ,GAEA,GAAAhJ,KAAAu8C,gBAAA,CACA,IAAAlL,EAAArxC,KAAAu8C,gBAAAjL,aAAAjkC,GAEA,OAAAgkC,EACA6L,EAAAl9C,KAAAu8C,gBAAAtL,SACS,MAAAI,EACT6L,EAAAl9C,KAAAu8C,gBAAA73B,UACS,CACT,IAAAw5B,EAAAjB,EAAAj9C,KAAAu8C,gBAAAlvC,GACAA,EAAA6wC,EAAA7wC,OACA6vC,EAAAgB,EAAAhB,OAGA/4C,EAAA0B,UAAAs4C,mBAAAjB,EAAAnM,IAAAmM,EAAAlM,QAGA7sC,EAAA0B,UAAAm4C,iBAAA3wC,GACAlJ,EAAAO,SAAA05C,wBAGAp+C,KAAA+8C,kBAAA,SAAAsB,GACA,IAAAnB,EACA/4C,EAAAnE,KAAAmE,OACAkJ,EAAAlJ,EAAAO,SAAAo5C,wBAAA99C,KAAA6b,EAAA7b,KAAAgJ,GACAY,EAAAzF,EAAA0B,UAAAw4C,GAAAhxC,EAAA0jC,IAAA1jC,EAAA2jC,QAEA,GAAAhxC,KAAAu8C,gBAAA,CACA,IAAA+B,EAAAt+C,KAAAu8C,gBAAAjL,aAAA1nC,EAAA8a,OACA65B,EAAAv+C,KAAAu8C,gBAAAjL,aAAA1nC,EAAAqnC,KAEA,OAAAqN,GAAAC,GAAA,EACArB,EAAAl9C,KAAAu8C,gBAAAtL,IACArnC,EAAAqnC,IAAAF,KAAA1jC,EAAA0jC,KAAAnnC,EAAAqnC,IAAAD,QAAA3jC,EAAA2jC,SAAA3jC,EAAAzD,EAAA8a,YACS,MAAA65B,GAAAD,GAAA,EACTpB,EAAAl9C,KAAAu8C,gBAAA73B,MACA9a,EAAA8a,MAAAqsB,KAAA1jC,EAAA0jC,KAAAnnC,EAAA8a,MAAAssB,QAAA3jC,EAAA2jC,SAAA3jC,EAAAzD,EAAAqnC,UACS,OAAAqN,GAAA,GAAAC,EACTlxC,EAAAzD,EAAAqnC,IACAiM,EAAAtzC,EAAA8a,UACS,CACT,IAAAw5B,EAAAjB,EAAAj9C,KAAAu8C,gBAAAlvC,GACAA,EAAA6wC,EAAA7wC,OACA6vC,EAAAgB,EAAAhB,OAGA/4C,EAAA0B,UAAAs4C,mBAAAjB,EAAAnM,IAAAmM,EAAAlM,QAGA7sC,EAAA0B,UAAAm4C,iBAAA3wC,GACAlJ,EAAAO,SAAA05C,wBAGAp+C,KAAAw+C,UAAAx+C,KAAAy+C,aAAAz+C,KAAA0+C,iBAAA1+C,KAAA2+C,iBAAA,WACA3+C,KAAAu8C,gBAAA,KACAv8C,KAAAmE,OAAAy6C,WAAA,iBAEA5+C,KAAAmE,OAAAO,SAAAuF,SAAA40C,gBACA7+C,KAAAmE,OAAAO,SAAAuF,SAAA40C,kBAIA7+C,KAAA8+C,UAAA,WACA,IA0GAC,EAAAC,EAAAC,EAAAC,EA1GAC,GA0GAJ,EA1GA/+C,KAAAs9C,eAAAzhC,EA0GAmjC,EA1GAh/C,KAAAs9C,eAAAt0C,EA0GAi2C,EA1GAj/C,KAAA6b,EA0GAqjC,EA1GAl/C,KAAAgJ,EA2GAuS,KAAA6jC,KAAA7jC,KAAA0vB,IAAAgU,EAAAF,EAAA,GAAAxjC,KAAA0vB,IAAAiU,EAAAF,EAAA,KA1GAxB,EAAA7kC,KAAAqkB,OACAmiB,EA9IA,GA8IA3B,EAAAx9C,KAAAs9C,eAAAE,KAAAx9C,KAAAy9C,gBAAAz9C,KAAA49C,YAAA59C,KAAAs9C,eAAAD,wBAGAr9C,KAAA08C,cAAA,SAAAS,GACA,IAAAj1C,EAAAi1C,EAAAE,sBACAl5C,EAAAnE,KAAAmE,OAEAyF,EADAzF,EAAA8B,QACAo5C,gBAAAn3C,GAEA0B,GACAA,EAAA6oC,YACA7oC,EAAA8a,MAAAssB,SACApnC,EAAAqnC,IAAAD,UAGAhxC,KAAAyM,SAAA,YAEA7C,EAAAzF,EAAA0B,UAAAy5C,aAAAp3C,EAAA6oC,IAAA7oC,EAAA8oC,QACAhxC,KAAAyM,SAAA,kBAGAzM,KAAAu8C,gBAAA3yC,EACA5J,KAAAs5C,UAGAt5C,KAAA28C,cAAA,SAAAQ,GACA,IAAAj1C,EAAAi1C,EAAAE,sBACAl5C,EAAAnE,KAAAmE,OACAnE,KAAAyM,SAAA,iBACA,IAAA7C,EAAAzF,EAAAo2C,oBAEA3wC,EAAAooC,eAAApoC,EAAAsnC,SAAAhpC,EAAA6oC,IAAA7oC,EAAA8oC,SACAhxC,KAAAu8C,gBAAAp4C,EAAA0B,UAAA05C,aAAA31C,EAAA8a,MAAAqsB,KACA/wC,KAAAu8C,gBAAAtL,IAAA9sC,EAAA0B,UAAA05C,aAAA31C,EAAAqnC,IAAAF,KAAAE,KAEAjxC,KAAAu8C,gBAAAp4C,EAAA0B,UAAA05C,aAAAr3C,EAAA6oC,KAGA/wC,KAAAs5C,UAGAt5C,KAAA48C,YAAA,SAAAO,GACA,IAAAh5C,EAAAnE,KAAAmE,OACAA,EAAAs1C,YACAz5C,KAAAu8C,gBAAAp4C,EAAAo2C,oBACAv6C,KAAAyM,SAAA,cAGAzM,KAAA68C,aAAA,SAAAM,GACA,IAAAA,EAAAqC,cAAA,CAEArC,EAAAY,eAAAZ,EAAApQ,SAAAoQ,EAAArQ,SACAqQ,EAAArQ,OAAAqQ,EAAApQ,OACAoQ,EAAApQ,OAAA,GAGA,IAAA5oC,EAAAnE,KAAAmE,OACAnE,KAAAy/C,cAAAz/C,KAAAy/C,YAAA,CACAz+C,EAAA,EACA0+C,GAAA,EACAC,GAAA,EACAC,QAAA,IAEA,IAAAC,EAAA7/C,KAAAy/C,YACAz+C,EAAAm8C,EAAApC,SAAA7L,UACA4Q,EAAA9+C,EAAA6+C,EAAA7+C,EACA0+C,EAAAI,EAAA3C,EAAArQ,OAAAgT,EAAAD,EAAAH,GACAC,EAAAG,EAAA3C,EAAApQ,OAAA+S,EAAAD,EAAAF,GAEAG,EAjNA,MAkNAJ,KAAAG,EAAAH,IAAA,EACAC,KAAAE,EAAAF,IAAA,GAGA,IAAAI,EAAAxkC,KAAA0I,IAAAy7B,EAAAC,GACAK,GAAA,EAIA,GAHAD,GAAA,GAAA57C,EAAAO,SAAAu7C,eAAA9C,EAAArQ,OAAAqQ,EAAA+C,MAAA,KAAAF,GAAA,GACAD,GAAA,GAAA57C,EAAAO,SAAAu7C,eAAA,EAAA9C,EAAApQ,OAAAoQ,EAAA+C,SAAAF,GAAA,GAEAA,EACAH,EAAAD,QAAA5+C,OACO,GAAAA,EAAA6+C,EAAAD,QA7NP,IA6NO,CACPrkC,KAAA0I,IAAAy7B,IAAA,IAAAnkC,KAAA0I,IAAA47B,EAAAH,KAAAnkC,KAAA0I,IAAA07B,IAAA,IAAApkC,KAAA0I,IAAA47B,EAAAF,KAGAK,GAAA,EACAH,EAAAD,QAAA5+C,GAEA6+C,EAAAD,QAAA,EAQA,OAJAC,EAAA7+C,IACA6+C,EAAAH,KACAG,EAAAF,KAEAK,GACA77C,EAAAO,SAAAy7C,SAAAhD,EAAArQ,OAAAqQ,EAAA+C,MAAA/C,EAAApQ,OAAAoQ,EAAA+C,OACA/C,EAAAiD,aAFA,MAKG9+C,KAAA+6C,EAAAz7C,WACHa,EAAA46C,oBAiBAr6C,IAAAsM,OAAA,kFAAAnM,EAAAV,EAAA4M,GACA,aAEAlM,EAAA,iBAEAgzC,EAAAhzC,EAAA,aAEA,SAAAk+C,EAAA/iB,GACAt9B,KAAAsgD,QAAA,EACAtgD,KAAAugD,SAAA,KACAvgD,KAAAwgD,YAAAljB,GAGA,WACAt9B,KAAAygD,MAAA,WAKA,OAJAzgD,KAAAugD,SAAApL,EAAA/qC,cAAA,OACApK,KAAAugD,SAAAx9C,UAAA,cACA/C,KAAAugD,SAAAj2C,MAAA23B,QAAA,OACAjiC,KAAAwgD,YAAA91C,YAAA1K,KAAAugD,UACAvgD,KAAAugD,UAGAvgD,KAAA06C,WAAA,WACA,OAAA16C,KAAAugD,UAAAvgD,KAAAygD,SAGAzgD,KAAA0gD,QAAA,SAAA33C,GACA/I,KAAA06C,aAAArwC,YAAAtB,GAGA/I,KAAA2gD,QAAA,SAAAt+B,GACAriB,KAAA06C,aAAAja,UAAApe,GAGAriB,KAAA4gD,YAAA,SAAA/kC,EAAA7S,GACAhJ,KAAA06C,aAAApwC,MAAA6C,KAAA0O,EAAA,KACA7b,KAAA06C,aAAApwC,MAAAgI,IAAAtJ,EAAA,MAGAhJ,KAAA6gD,aAAA,SAAA99C,GACAoyC,EAAArU,YAAA9gC,KAAA06C,aAAA33C,IAGA/C,KAAA8gD,KAAA,SAAA/3C,EAAA8S,EAAA7S,GACA,MAAAD,GAAA/I,KAAA0gD,QAAA33C,GACA,MAAA8S,GAAA,MAAA7S,GAAAhJ,KAAA4gD,YAAA/kC,EAAA7S,GAEAhJ,KAAAsgD,SACAtgD,KAAA06C,aAAApwC,MAAA23B,QAAA,QACAjiC,KAAAsgD,QAAA,IAIAtgD,KAAA+gD,KAAA,WACA/gD,KAAAsgD,SACAtgD,KAAA06C,aAAApwC,MAAA23B,QAAA,OACAjiC,KAAAsgD,QAAA,IAIAtgD,KAAAghD,UAAA,WACA,OAAAhhD,KAAA06C,aAAAuG,cAGAjhD,KAAAkhD,SAAA,WACA,OAAAlhD,KAAA06C,aAAArY,aAGAriC,KAAA4I,QAAA,WACA5I,KAAAsgD,QAAA,EAEAtgD,KAAAugD,UAAAvgD,KAAAugD,SAAAjjB,YACAt9B,KAAAugD,SAAAjjB,WAAApzB,YAAAlK,KAAAugD,aAGGj/C,KAAA++C,EAAAz/C,WACHa,EAAA4+C,YAEAr+C,IAAAsM,OAAA,qIAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cAEAoM,EAAApM,EAAA,cAEA0G,EAAA1G,EAAA,gBAEAk+C,EAAAl+C,EAAA,cAAAk+C,QAiGA,SAAAc,EAAA7jB,GACA+iB,EAAA/+C,KAAAtB,KAAAs9B,GAGA/uB,EAAA80B,SAAA8d,EAAAd,GACA,WACArgD,KAAA4gD,YAAA,SAAA/kC,EAAA7S,GACA,IAAAo4C,EAAA/0B,OAAAg1B,YAAAl3C,SAAAk2B,gBAAAluB,YACAmvC,EAAAj1B,OAAAk1B,aAAAp3C,SAAAk2B,gBAAAjuB,aACA5J,EAAAxI,KAAAkhD,WACA34C,EAAAvI,KAAAghD,aACAnlC,GAAA,IAGArT,EAAA44C,IACAvlC,KAAArT,EAAA44C,IAHAp4C,GAAA,IAMAT,EAAA+4C,IACAt4C,GAAA,GAAAT,GAGA83C,EAAAz/C,UAAAggD,YAAAt/C,KAAAtB,KAAA6b,EAAA7S,KAEG1H,KAAA6/C,EAAAvgD,WACHa,EAAA+/C,cAxHA,SAAAlF,GACA,IAqBAmF,EAAAC,EAAAC,EArBAx9C,EAAAm4C,EAAAn4C,OACAy9C,EAAAz9C,EAAAO,SAAAm9C,aACAC,EAAA,IAAAX,EAAAh9C,EAAA2K,WAqDA,SAAAizC,IACAN,MAAAjrB,aAAAirB,IAEAE,IACAG,EAAAf,OACAY,EAAA,KAEAx9C,EAAA69C,QAAA,oBAAAF,GAEA39C,EAAAynC,oBAAA,aAAAmW,IAIA,SAAAE,EAAA5rC,GACAyrC,EAAAlB,YAAAvqC,EAAAwF,EAAAxF,EAAArN,GAlEAszC,EAAAn4C,OAAAq4C,kBAAA,2BAAAnmC,GACA,GAAAlS,EAAAuyC,aAAA,GAAArgC,EAAA21B,aAEA,eADA4V,EAAAM,UAAA7rC,GACA,CACA,IAAA06B,EAAA16B,EAAAgnC,sBAAAtM,IACAlrC,EAAA1B,EAAA8B,QAAAJ,UACA,GAAAwQ,EAAA0nC,cAAAl4C,EAAAs8C,SAAApR,EAAA,OAAsD,CACtD,MAAA16B,EAAA0kC,SAAArN,OAEA,OADAvpC,EAAAs1C,YACApjC,EAAAsV,iBAGA2wB,EAAAC,gBAAAp4C,EAAA0B,UAAA05C,aAAAxO,GAIA,OAFAuL,EAAA7vC,SAAA,iBACA6vC,EAAAqB,aAAAtnC,GACAA,EAAAsV,oBAqDA2wB,EAAAn4C,OAAAq4C,kBAAA,2BAAAnmC,GACA,IAAA4R,EAAA5R,EAAA0kC,SAAA9yB,QAAA5R,EAAA0kC,SAAAqH,WACA,GAAAjN,EAAAtU,YAAA5Y,EAAA,0BAAA85B,IACAJ,GAAArF,EAAA+F,sBAAAJ,EAAA5rC,GACAqrC,EAAArrC,EACAorC,IACAA,EAAAhrB,WAAA,WACAgrB,EAAA,KACAC,IAAApF,EAAAR,eAzDA,WACA,IAAA/K,EAAA2Q,EAAArE,sBAAAtM,IACAuR,EAAAV,EAAAW,aAAAxR,GACA,IAAAuR,EAAA,OAAAP,IAGA,GAAAhR,GAFA5sC,EAAA8B,QAAAu8C,YAEA,CACA,IAAAC,EAAAt+C,EAAAO,SAAAg+C,yBAAA,EAAAhB,EAAA14C,GAAA+nC,IACA7oC,EAAAw5C,EAAAiB,KACA,GAAAF,EAAAt+C,EAAA8B,QAAA28C,oBAAA16C,EAAA6oC,IAAA7oC,EAAA8oC,QAAA,OAAA+Q,IAGA,GAAAJ,GAAAW,EASA,GARAX,EAAAW,EAAAv5C,KAAAhB,KAAA,SACA+5C,EAAAnB,QAAAgB,GACAG,EAAAhB,OAEA38C,EAAA69C,QAAA,oBAAAF,GAEA39C,EAAAmB,GAAA,aAAAy8C,GAEAzF,EAAA+F,qBACAJ,EAAAP,OACO,CACP,IACAvG,EADAuG,EAAA3G,SAAA9yB,OACA+uB,wBACA1sC,EAAAw3C,EAAApH,aAAApwC,MACAA,EAAA6C,KAAAguC,EAAA/tC,MAAA,KACA9C,EAAAgI,IAAA6oC,EAAAI,OAAA,MA6BAsH,GAAsEd,KAC/D,OAEPl5C,EAAA0iC,YAAApnC,EAAAO,SAAAo+C,QAAA,oBAAAzsC,GACAqrC,EAAA,KACAC,IAAAF,IACAA,EAAAhrB,WAAA,WACAgrB,EAAA,KACAM,KACO,OAEP59C,EAAAmB,GAAA,gBAAAy8C,MA8BA//C,IAAAsM,OAAA,oGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAxF,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEA4gD,EAAAthD,EAAAshD,WAAA,SAAAhI,EAAA52C,GACAnE,KAAA+6C,WACA/6C,KAAAmE,SACAnE,KAAA6b,EAAA7b,KAAAsuC,QAAAyM,EAAAzM,QACAtuC,KAAAgJ,EAAAhJ,KAAAuuC,QAAAwM,EAAAxM,QACAvuC,KAAA2iD,KAAA,KACA3iD,KAAAgjD,aAAA,KACAhjD,KAAAijD,oBAAA,EACAjjD,KAAAmvC,kBAAA,IAGA,WACAnvC,KAAAyrB,gBAAA,WACA5iB,EAAA4iB,gBAAAzrB,KAAA+6C,UACA/6C,KAAAijD,oBAAA,GAGAjjD,KAAA2rB,eAAA,WACA9iB,EAAA8iB,eAAA3rB,KAAA+6C,UACA/6C,KAAAmvC,kBAAA,GAGAnvC,KAAAogD,KAAA,WACApgD,KAAAyrB,kBACAzrB,KAAA2rB,kBAGA3rB,KAAAq9C,oBAAA,WACA,OAAAr9C,KAAA2iD,KAAA3iD,KAAA2iD,MACA3iD,KAAA2iD,KAAA3iD,KAAAmE,OAAAO,SAAAo5C,wBAAA99C,KAAAsuC,QAAAtuC,KAAAuuC,SACAvuC,KAAA2iD,OAGA3iD,KAAAo9C,YAAA,WACA,UAAAp9C,KAAAgjD,aAAA,OAAAhjD,KAAAgjD,aACA,IACAE,EADAljD,KAAAmE,OACAo2C,oBACA,GAAA2I,EAAAzQ,UAAAzyC,KAAAgjD,cAAA,MAA8D,CAC9D,IAAA96C,EAAAlI,KAAAq9C,sBACAr9C,KAAAgjD,aAAAE,EAAAhS,SAAAhpC,EAAA6oC,IAAA7oC,EAAA8oC,QAEA,OAAAhxC,KAAAgjD,cAGAhjD,KAAAgsC,UAAA,WACA,OAAAnjC,EAAAmjC,UAAAhsC,KAAA+6C,WAGA/6C,KAAA+9C,YAAA,WACA,OAAA/9C,KAAA+6C,SAAA5O,UAGAnsC,KAAAw/C,YAAAngB,EAAAzB,MAAA,WACA,OAAA59B,KAAA+6C,SAAApM,SACK,WACL,OAAA3uC,KAAA+6C,SAAA9O,WAEG3qC,KAAAyhD,EAAAniD,aAEHoB,IAAAsM,OAAA,uHAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cAEA0G,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEAghD,EAAA,IACAC,EAAA,IACAC,EAAA,EAEA,SAAAC,EAAAhH,GACA,IAAAn4C,EAAAm4C,EAAAn4C,OACAo/C,EAAApO,EAAA/qC,cAAA,OACAm5C,EAAAC,IAAA,6EACAnkB,EAAAX,UAAA6kB,EAAAj5C,MAAAsF,QAAA,kFACA,oEACAnN,QAAA,SAAAoZ,GACAygC,EAAAzgC,GAAA7b,KAAA6b,IACK7b,MACLmE,EAAAqnB,iBAAA,YAAAxrB,KAAAy8C,YAAA95C,KAAA25C,IACA,IACAmH,EAAA5nC,EAAA7S,EACA06C,EAAA95C,EACA+5C,EAEAC,EACAC,EACAC,EACAC,EACAC,EATAC,EAAA9/C,EAAA2K,UAIAo1C,EAAA,EAoMA,SAAAC,IACA,IAAAC,EAAAT,GAlEA,SAAAt2C,EAAA+2C,GACA,IAAApnB,EAAArkB,KAAAqkB,MACAqnB,GAAAD,GAAA/2C,EAAA0jC,KAAAqT,EAAArT,IACAuT,GAAAF,GAAA/2C,EAAA2jC,QAAAoT,EAAApT,QAEA+S,GAAAM,GAAAC,GACAngD,EAAAogD,qBAAAl3C,GACA02C,EAAA/mB,EACAgnB,EAAA,CACAnoC,IACA7S,MAGAw7C,EAAAR,EAAAnoC,EAAAmoC,EAAAh7C,EAAA6S,EAAA7S,GAEAq6C,EACAU,EAAA,KACS/mB,EAAA+mB,GAAAX,IACTj/C,EAAAO,SAAA05C,uBACA2F,EAAA,OAiDA3F,CADAuF,EAAAx/C,EAAAO,SAAAo5C,wBAAAjiC,EAAA7S,GACAo7C,GA5CA,SAAA/2C,EAAA+2C,GACA,IAAApnB,EAAArkB,KAAAqkB,MACAynB,EAAAtgD,EAAAO,SAAAggD,YAAAD,WACAvJ,EAAA/2C,EAAAO,SAAAggD,YAAAxJ,eACAyJ,EAAAxgD,EAAAO,SAAAuF,SAAA+sC,wBACA4N,EAAA,CACA/oC,EAAA,CACA1O,KAAA0O,EAAA8oC,EAAAx3C,KACAC,MAAAu3C,EAAAv3C,MAAAyO,GAEA7S,EAAA,CACAsJ,IAAAtJ,EAAA27C,EAAAryC,IACAipC,OAAAoJ,EAAApJ,OAAAvyC,IAGA67C,EAAAtpC,KAAA5J,IAAAizC,EAAA/oC,EAAA1O,KAAAy3C,EAAA/oC,EAAAzO,OACA03C,EAAAvpC,KAAA5J,IAAAizC,EAAA57C,EAAAsJ,IAAAsyC,EAAA57C,EAAAuyC,QACAwJ,EAAA,CACAhU,IAAA1jC,EAAA0jC,IACAC,OAAA3jC,EAAA2jC,QAGA6T,EAAA3J,GAAA,IACA6J,EAAA/T,QAAA4T,EAAA/oC,EAAA1O,KAAAy3C,EAAA/oC,EAAAzO,OAAA,KAGA03C,EAAAL,GAAA,IACAM,EAAAhU,KAAA6T,EAAA57C,EAAAsJ,IAAAsyC,EAAA57C,EAAAuyC,QAAA,KAGA,IAAAyJ,EAAA33C,EAAA0jC,KAAAgU,EAAAhU,IACAkU,EAAA53C,EAAA2jC,QAAA+T,EAAA/T,OACAqT,GAAAD,GAAA/2C,EAAA0jC,KAAAqT,EAAArT,IAEAiU,GAAAC,IAAAZ,EACAP,EAA4D9mB,EAAA8mB,GAAAX,GAAAh/C,EAAAO,SAAA05C,qBAAA2G,GAA5DjB,EAAA9mB,EAEA8mB,EAAA,KAQAoB,CAAAvB,EAAAS,GAGA,SAAAe,IACAv7C,EAAAzF,EAAA0B,UAAAu/C,kBACA3B,EAAAt/C,EAAA8B,QAAA4D,UAAAD,EAAA,gBAAAzF,EAAAkhD,qBACAlhD,EAAAmhD,iBACAnhD,EAAAuyC,aAAAvyC,EAAAO,SAAA6gD,aAAAC,aAAA,GACAC,cAAA/B,GACAS,IACAT,EAAAgC,YAAAvB,EAAA,IACAD,EAAA,EACAr7C,EAAA0iC,YAAAphC,SAAA,YAAAw7C,GAGA,SAAAC,IACAH,cAAA/B,GACAv/C,EAAA8B,QAAAkD,aAAAs6C,GACAA,EAAA,KACAt/C,EAAA0B,UAAAggD,kBAAAj8C,GACAzF,EAAAuyC,cAAAmN,GAAA1/C,EAAA2hD,oBACAl8C,EAAA,KACA+5C,EAAA,KACAO,EAAA,EACAJ,EAAA,KACAC,EAAA,KACAl7C,EAAA8iC,eAAAxhC,SAAA,YAAAw7C,GA3NA3lD,KAAA+lD,YAAA,SAAA1vC,GACA,GAAArW,KAAAgmD,aAAA/B,EAAAgC,UAAA,CACA,IAAAzyC,EAAAxT,KAKA,OAJAy2B,WAAA,WACAjjB,EAAAoqC,cACApqC,EAAAmqC,aAAAtnC,IACS,GACTA,EAAAsV,iBAGA/hB,EAAAzF,EAAAo2C,oBACA,IAAA2L,EAAA7vC,EAAA6vC,aACAA,EAAAC,cAAAhiD,EAAAiiD,cAAA,kBAEA/mB,EAAAX,UACAv6B,EAAA2K,UAAApE,YAAA64C,GACAA,EAAA8C,UAAA,GAGAH,EAAAI,cAAAJ,EAAAI,aAAA/C,EAAA,KAEAlkB,EAAAX,SACAv6B,EAAA2K,UAAA5E,YAAAq5C,GAGA2C,EAAAr6B,YACAq6B,EAAAp6B,QAAA,OAAA3nB,EAAA8B,QAAAsgD,gBACA1C,GAAA,EACA7jD,KAAAyM,SAAA,SAGAzM,KAAAwmD,UAAA,SAAAnwC,GAKA,GAJA4tC,EAAAgC,WAAA,EACApC,GAAA,EACA7jD,KAAAyM,SAAA,OAEAtI,EAAAiiD,cAAA,CACA,IAAAK,EAAApwC,EAAA6vC,aAAAO,WACA7C,GAAA,QAAA6C,GAAAtiD,EAAA8B,QAAAm0B,OAAAj2B,EAAAo2C,qBACAp2C,EAAA2hD,oBAGA9lD,KAAAmE,OAAAy6C,WAAA,gBACA5+C,KAAAmE,OAAAO,SAAAgiD,eAAA,KAGA1mD,KAAA2mD,YAAA,SAAAtwC,GACA,IAAAlS,EAAAiiD,eAAAQ,EAAAvwC,EAAA6vC,cAMA,OALArqC,EAAAxF,EAAAi4B,QACAtlC,EAAAqN,EAAAk4B,QACAkV,GAAA0B,IACAjB,IACA7tC,EAAA6vC,aAAAO,WAAA7C,EAAAiD,EAAAxwC,GACAxN,EAAA8iB,eAAAtV,IAGArW,KAAA8mD,WAAA,SAAAzwC,GACA,IAAAlS,EAAAiiD,eAAAQ,EAAAvwC,EAAA6vC,cAWA,OAVArqC,EAAAxF,EAAAi4B,QACAtlC,EAAAqN,EAAAk4B,QAEAkV,IACA0B,IACAjB,KAGA,OAAA6C,MAAA,MACA1wC,EAAA6vC,aAAAO,WAAA7C,EAAAiD,EAAAxwC,GACAxN,EAAA8iB,eAAAtV,IAGArW,KAAAgnD,YAAA,SAAA3wC,GAGA,KAFA6tC,GAEA,GAAAT,EAGA,OAFAmC,IACAhC,EAAA,KACA/6C,EAAA8iB,eAAAtV,IAIArW,KAAAinD,OAAA,SAAA5wC,GACA,GAAAstC,EAAA,CACA,IAAAuC,EAAA7vC,EAAA6vC,aAEA,GAAArC,EACA,OAAAD,GACA,WAEAh6C,EADAA,EAAAsnC,SAAAyS,EAAA5S,IAAA4S,EAAA3S,QACA,CACAtsB,MAAAi/B,EACA1S,IAAA0S,GAGAx/C,EAAA+iD,SAAAt9C,EAAA+5C,GAGA,MAEA,WACA/5C,EAAAzF,EAAA+iD,SAAAt9C,EAAA+5C,GAAA,OAGO,CACP,IAAAwD,EAAAjB,EAAAjN,QAAA,QACArvC,EAAA,CACA8a,MAAAi/B,EACA1S,IAAA9sC,EAAA8B,QAAAk0B,OAAAwpB,EAAAwD,IAEAhjD,EAAAhB,QACAygD,EAAA,KAIA,OADAgC,IACA/8C,EAAA8iB,eAAAtV,KAGAxN,EAAA0iC,YAAA0Y,EAAA,YAAAjkD,KAAA+lD,YAAApjD,KAAA25C,IACAzzC,EAAA0iC,YAAA0Y,EAAA,UAAAjkD,KAAAwmD,UAAA7jD,KAAA25C,IACAzzC,EAAA0iC,YAAA0Y,EAAA,YAAAjkD,KAAA2mD,YAAAhkD,KAAA25C,IACAzzC,EAAA0iC,YAAA0Y,EAAA,WAAAjkD,KAAA8mD,WAAAnkD,KAAA25C,IACAzzC,EAAA0iC,YAAA0Y,EAAA,YAAAjkD,KAAAgnD,YAAArkD,KAAA25C,IACAzzC,EAAA0iC,YAAA0Y,EAAA,OAAAjkD,KAAAinD,OAAAtkD,KAAA25C,IAoGA,IAAAyK,EAAA,KAEA,SAAApB,IACA,MAAAoB,IACAA,EAAAtwB,WAAA,WACA,MAAAswB,GAAAtD,GAAAmC,KACS,KAIT,SAAAgB,EAAAV,GACA,IAAAkB,EAAAlB,EAAAkB,MACA,OAAAA,GAAA7mD,MAAAK,UAAAoR,KAAA1Q,KAAA8lD,EAAA,SAAA19C,GACA,oBAAAA,GAAA,QAAAA,IAIA,SAAAm9C,EAAAxwC,GACA,IAAAgxC,EAAA,0CAEAC,EAAAjoB,EAAAzB,MAAAvnB,EAAA61B,OAAA71B,EAAA41B,QACAka,EAAA,gBAEA,IACAA,EAAA9vC,EAAA6vC,aAAAC,cAAAloB,cACO,MAAA5nB,IAEP,IAAAowC,EAAA,OAEA,OADAa,GAAAD,EAAAx/C,QAAAs+C,IAAA,EAAAM,EAAA,OATA,qDAS4F5+C,QAAAs+C,IAAA,EAAAM,EAAA,OAAsEY,EAAAx/C,QAAAs+C,IAAA,IAAAM,EAAA,QAClKA,GAsFA,SAAAjC,EAAAzF,EAAAC,EAAAC,EAAAC,GACA,OAAA3jC,KAAA6jC,KAAA7jC,KAAA0vB,IAAAgU,EAAAF,EAAA,GAAAxjC,KAAA0vB,IAAAiU,EAAAF,EAAA,KAnFA,WACAh/C,KAAAunD,SAAA,WACA5uC,KAAAqkB,MAAAh9B,KAAAs9C,eAAAE,KACAx9C,KAAAmE,OAAAqjD,gBAAAxnD,KAAAynD,aAGAznD,KAAA0nD,YAAA,WACA1nD,KAAAmE,OAAA2K,UACAm3C,WAAA,EACAjmD,KAAA49C,YAAA59C,KAAAs9C,eAAAD,uBACAr9C,KAAAw+C,aAGAx+C,KAAA2nD,aAAA,SAAAtxC,GACArW,KAAAmE,OAAA2hD,oBACA9lD,KAAAmE,OAAAy6C,WAAA,gBACA5+C,KAAAmE,OAAAO,SAAAgiD,eAAA,IACA1mD,KAAA0nD,eAGA1nD,KAAAynD,UAAA,WACAznD,KAAAgmD,YAAA,EACA,IAAA7hD,EAAAnE,KAAAmE,OACAA,EAAA2K,UACAm3C,WAAA,EACA9hD,EAAAO,SAAA6gD,aAAAC,aAAA,GACArhD,EAAAs+B,SAAA,gBACA,IAAAmlB,EAAAvoB,EAAAjB,MAAA,iBACAj6B,EAAAO,SAAAgiD,eAAAkB,GACA5nD,KAAAyM,SAAA,cAGAzM,KAAA6nD,YAAA,SAAAxxC,GACA,IAAA4R,EAAAjoB,KAAAmE,OAAA2K,UAEAuwB,EAAAhB,MAAA,aAAAr+B,KAAAuM,QACAi4C,EAAAxkD,KAAAs9C,eAAAzhC,EAAA7b,KAAAs9C,eAAAt0C,EAAAhJ,KAAA6b,EAAA7b,KAAAgJ,GACA,GAAAif,EAAA6/B,YAGA,aAAA9nD,KAAAuM,QACAi4C,EAAAxkD,KAAAs9C,eAAAzhC,EAAA7b,KAAAs9C,eAAAt0C,EAAAhJ,KAAA6b,EAAA7b,KAAAgJ,GAEA,IACAif,EAAAg+B,WAAA,EACAjmD,KAAA49C,YAAA59C,KAAAs9C,eAAAD,0BAKAr9C,KAAAy8C,YAAA,SAAApmC,GACA,GAAArW,KAAA+nD,aAAA,CACA/nD,KAAAs9C,eAAAjnC,EACA,IAAAlS,EAAAnE,KAAAmE,OACAi5C,EAAA/mC,EAAA+mC,cACAhR,EAAA/1B,EAAA21B,YAGA,QAFA31B,EAAA0kC,SAAArN,QAAA,IAEA,IAAAtB,GAAAgR,EAAA,CACA,GAAA/mC,EAAAlS,OAAAu5C,oBAAArnC,EAAAmpC,eAAAnpC,EAAA0nC,eAAA,OACA/9C,KAAAs9C,eAAAE,KAAA7kC,KAAAqkB,MACA,IAAAgrB,EAAA3xC,EAAA0kC,SAAA9yB,QAAA5R,EAAA0kC,SAAAqH,WAGA,GAFA,iBAAA4F,MAAAC,aAAA,MAEA9jD,EAAAqjD,eAAA,CACA,GAAAnoB,EAAAT,SACA5+B,KAAAgmD,YAAA,EACA7hD,EAAA2K,UACAm3C,WAAA,EAGAjmD,KAAAyM,SAAA,iBAEAzM,KAAAynD,YAGAznD,KAAA29C,aAAAtnC,EAAArW,KAAA6nD,YAAAllD,KAAA3C,OACAqW,EAAA84B,kBAAA,OAGG7tC,KAAAgiD,EAAA1iD,WAMHa,EAAA6hD,oBAEAthD,IAAAsM,OAAA,wGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA00C,EAAA5gD,EAAA,iBAAA4gD,WAEA5N,EAAAhzC,EAAA,cAEAV,EAAAymD,kBAAA,SAAAv4C,EAAAxL,GACA,IACA4pC,EACAC,EACAma,EACAC,EACAC,EACAC,EAEApgD,EAIAqgD,EACAC,EAbAtlD,EAAA,SAOAulD,EAAA,EAEAC,EAAA,EACAC,EAAA,EACAC,EAAA,EAIA,SAAAC,IACA,IAAAxT,EAAAhpB,OAAAE,WAAAF,OAAAE,UAAA8oB,UACAiL,GAAA,EA6BAwI,EAAA,SAAAzyC,GACA,IAAA0yC,EAAA1yC,EAAA4R,OAAA+gC,aAAA,UAEA,WAAAD,IAAAzI,EAEA,OADAA,KA/BA,WACA,IAAA2I,EAAA9kD,EAAAi1C,cACA8P,EAAA/kD,EAAA8B,QAAA2K,iBAAAs4C,UACAV,EAAAW,aAAAhU,EAAA7V,SAAAghB,EAAA,SAAA2I,GAAA,SACAG,MAAA,oBACAL,OAAA,aACS,cAAAE,GAAA,SACTG,MAAA,oBACAL,OAAA,QACS,QAAAE,GAAA,SACTG,MAAA,oBACAL,OAAA,OACS,OAAA1T,GAAA,SACT+T,MAAA,oBACAL,OAAA,SACS,SAAAG,GAAA,SACTE,MAAA,oBACAL,OAAA,QACS,iBACTK,MAAA,oBACAL,OAAA,QACS,iBACTK,MAAA,oBACAL,OAAA,sBACS,sBAAAP,EAAA9mB,YAQT2nB,GAGA,SAAAN,EACA1T,EAAAiU,WAAAC,KAAA,SAAAxgD,GACA5E,EAAA+nB,YAAA68B,EAAAhgD,KAESggD,IACT,OAAAA,GAAA,QAAAA,IACA1T,IAAAmU,UAAArlD,EAAAi1C,eAAqEjvC,SAAA+hB,YAAA,SAGrE/nB,EAAA+nB,YAAA68B,IAGAP,EAAA9mB,WAAAp3B,MAAA23B,QAAA,OACAqe,GAAA,EACA,sBAAAyI,GAAA5kD,EAAAhB,SAGAqlD,EAAArT,EAAA7V,SAAA,QACA8pB,MAAA,kBACAK,aAAA,SAAApzC,GACAnT,EAAA,OACAmT,EAAAoV,kBACApV,EAAAsV,iBACAxnB,EAAAs3C,UAAAt4C,SAEAumD,WAAA,SAAArzC,GACAA,EAAAoV,kBACApV,EAAAsV,iBACAm9B,EAAAzyC,IAEAszC,QAAAb,GACO,kBACPM,MAAA,oBACAL,OAAA,QACO,QAAA5kD,EAAA2K,WAGP,SAAA86C,IACApB,GAAAK,IACA,IAAAx7C,EAAAlJ,EAAA0B,UAAAwH,OACAw8C,EAAA1lD,EAAAO,SAAAolD,wBAAAz8C,EAAA0jC,IAAA1jC,EAAA2jC,QACAmK,EAAAh3C,EAAA2K,UAAAkoC,wBACAwR,EAAAl+C,MAAAgI,IAAAu3C,EAAAE,MAAA5O,EAAA7oC,IAAA,OACAk2C,EAAAl+C,MAAA8C,MAAA,OACAo7C,EAAAl+C,MAAA23B,QAAA,GACAumB,EAAA9mB,WAAAp3B,MAAA23B,QAAA,OACA99B,EAAAmB,GAAA,QAAA0kD,GAGA,SAAAA,EAAA3zC,GACAmyC,MAAAl+C,MAAA23B,QAAA,QACA99B,EAAA41C,IAAA,QAAAiQ,GAGA,SAAAC,IACA5B,EAAA,KACA7xB,aAAA6xB,GACA,IAAAz+C,EAAAzF,EAAA0B,UAAA6xC,WACA0F,EAAAxzC,EAAAsnC,SAAAhpC,EAAA6oC,IAAA7oC,EAAA8oC,SAEApnC,EAAA6oC,WAAA2K,IACAj5C,EAAA0B,UAAA03C,eAAAr1C,GACA/D,EAAA0B,UAAAqkD,cAGAhnD,EAAA,OACA0mD,IAkBAj6C,EAAA6b,iBAAA,uBAAAnV,GACAkyC,GACApkD,EAAAs3C,UAAAf,aACAv3C,UAEAwM,EAAA6b,iBAAA,sBAAAnV,GACA,IAAA8zC,EAAA9zC,EAAA8zC,QAEA,GAAA9B,GAAA8B,EAAA9oD,OAAA,EAKA,OAJAm1B,aAAA6xB,GACAA,EAAA,KACAF,GAAA,OACAjlD,EAAA,QAIAqlD,EAAApkD,EAAA03C,cAAAC,gBAAA,EACA,IAAAsO,EAAAjmD,EAAAO,SAAAggD,YAAAD,WACA4F,EAAAlmD,EAAAO,SAAAggD,YAAAD,WACAzjD,EAAAqV,EAAA64B,UACAkZ,EAAApnD,EACA,IAAAspD,EAAAH,EAAA,GACAtuC,EAAAyuC,EAAAhc,QACAtlC,EAAAshD,EAAA/b,QACAhzB,KAAA0I,IAAA8pB,EAAAlyB,GAAAN,KAAA0I,IAAA+pB,EAAAhlC,GAAAohD,IAAAjC,GAAA,GACApa,EAAA13B,EAAAi4B,QAAAzyB,EACAmyB,EAAA33B,EAAAk4B,QAAAvlC,EACA2/C,EAAAC,EAAA,EACA,IAAAzL,EAAA,IAAA4F,EAAA1sC,EAAAlS,GAGA,GAFA+D,EAAAi1C,EAAAE,sBAEAr8C,EAAAmnD,EAAA,QAAAgC,EAAA9oD,SAAAonD,EACAC,IACAryC,EAAAsV,iBACAtV,EAAA+1B,OAAA,EAjDA,WACAic,EAAA,KACA7xB,aAAA6xB,GACAlkD,EAAA0B,UAAA03C,eAAAr1C,GACA,IAAA0B,EAAA8+C,GAAA,EAAAvkD,EAAA0B,UAAA05C,aAAAr3C,EAAA6oC,KAAA5sC,EAAA8B,QAAAo5C,gBAAAn3C,GAEA0B,MAAA6oC,UACAtuC,EAAA0B,UAAA0kD,SAAA3gD,GAEAzF,EAAA0B,UAAAqkD,aAGAhnD,EAAA,OAsCAsnD,OACO,CACP9B,EAAA,EACA,IAAAr7C,EAAAlJ,EAAA0B,UAAAwH,OACA6vC,EAAA/4C,EAAA0B,UAAA4sC,UAAAplC,EAAAlJ,EAAA0B,UAAAq3C,OACAuN,EAAAtmD,EAAAO,SAAA6gD,aAAAmF,iBAAAr9C,GAAA,GACAs9C,EAAAxmD,EAAAO,SAAA6gD,aAAAmF,iBAAAxN,GAAA,GACA/B,EAAAh3C,EAAAO,SAAAuF,SAAA+sC,wBAEA4T,EAAA,SAAA/uC,EAAA7S,GAGA,OAFA6S,GAAAwuC,GAEAxuC,GADA7S,IAAAohD,EAAA,KACAphD,GAGA,GAAAqN,EAAAi4B,QAAA6M,EAAAhuC,KAEA,YADAjK,EAAA,QAIA,IAAA2nD,EAAAD,EAAAv0C,EAAAi4B,QAAA6M,EAAAhuC,KAAAs9C,EAAAt9C,KAAAkJ,EAAAk4B,QAAA4M,EAAA7oC,IAAAm4C,EAAAn4C,KACAw4C,EAAAF,EAAAv0C,EAAAi4B,QAAA6M,EAAAhuC,KAAAw9C,EAAAx9C,KAAAkJ,EAAAk4B,QAAA4M,EAAA7oC,IAAAq4C,EAAAr4C,KACAu4C,EAAA,KAAAC,EAAA,MAAA5nD,EAAA2nD,EAAAC,EAAA,mBACA5nD,EAAA4nD,EAAA,aAAyCD,EAAA,aAAsC,SAC/ExC,EAAA5xB,WAAAwzB,EAAA,KAGA9B,EAAAnnD,IAEA2O,EAAA6b,iBAAA,oBAAAnV,GACAkyC,EAAApkD,EAAA03C,cAAAC,gBAAA,EACAwM,GAAA7C,cAAA6C,GAEA,QAAAplD,GACAA,EAAA,GACAulD,EAAA,GACOJ,GACPlkD,EAAA0B,UAAA03C,eAAAr1C,GACAugD,EAAA,EACAmB,KACO,UAAA1mD,GA+DPulD,GAAA,GACAH,EAAA5C,YAAA,WACA+C,KAAA,IACAhD,cAAA6C,GACAA,EAAA,MAGA/sC,KAAA0I,IAAA0kC,GAAA,MAAAA,EAAA,GACAptC,KAAA0I,IAAA2kC,GAAA,MAAAA,EAAA,GACAH,EAAA,KAAAE,GAAA,IACAF,EAAA,KAAAG,GAAA,IACA,IAAAmC,EAAA5mD,EAAA8B,QAAA+kD,eACA7mD,EAAAO,SAAAy7C,SAAA,GAAAwI,EAAA,GAAAC,GACAmC,GAAA5mD,EAAA8B,QAAA+kD,iBAAAvC,EAAA,IACO,IA3EPpyC,EAAAsV,iBACAq+B,KAEAJ,IAGApzB,aAAA6xB,GACAA,EAAA,OAEA14C,EAAA6b,iBAAA,qBAAAnV,GACAgyC,IACA7xB,aAAA6xB,GACAA,EAAA,MAGA,IAAA8B,EAAA9zC,EAAA8zC,QACA,KAAAA,EAAA9oD,OAAA,WAAA6B,GAAA,CACA,IAAAonD,EAAAH,EAAA,GACArd,EAAAiB,EAAAuc,EAAAhc,QACAvB,EAAAiB,EAAAsc,EAAA/b,QAEA,WAAArrC,EAAA,CACA,KAAA4pC,IAAAC,IAAA,GAAmE,OAAA12B,EAAAsV,iBAAnEzoB,EAAA,SAGA6qC,EAAAuc,EAAAhc,QACAN,EAAAsc,EAAA/b,QACAl4B,EAAAi4B,QAAAgc,EAAAhc,QACAj4B,EAAAk4B,QAAA+b,EAAA/b,QACA,IAAAvtC,EAAAqV,EAAA64B,UACA4Q,EAAA9+C,EAAAonD,EAGA,GAFAA,EAAApnD,EAEA,UAAAkC,EAAA,CACA,IAAAw+C,EAAA,IAAAqB,EAAA1sC,EAAAlS,GACAu9C,EAAAxB,MAAA,EACAwB,EAAA5U,SACA4U,EAAA3U,SACA,GAAAxxB,KAAA0I,IAAA6oB,GAAAvxB,KAAA0I,IAAA8oB,KAAAD,EAAA,GACA,GAAAvxB,KAAA0I,IAAA8oB,GAAAxxB,KAAA0I,IAAA6oB,KAAAC,EAAA,GAEA,GAAA+S,IACA6I,EAAA7b,EAAAgT,EACA8I,EAAA7b,EAAA+S,GAGA37C,EAAA0L,MAAA,aAAA6xC,GAEAA,EAAAuB,qBACA0F,EAAAC,EAAA,OAEO,CACP,IACA1gD,EADA,IAAA66C,EAAA1sC,EAAAlS,GACAk5C,sBACA,UAAAn6C,EAAAiB,EAAA0B,UAAA0+C,qBAAAr8C,GAAyE,UAAAhF,GAAAiB,EAAA0B,UAAAs4C,mBAAAj2C,EAAA6oC,IAAA7oC,EAAA8oC,QACzE7sC,EAAAO,SAAA05C,qBAAAl2C,GACAmO,EAAAsV,wBAuBA3pB,IAAAsM,OAAA,oEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,SAEAV,EAAAqV,IAAA,SAAAm0C,EAAA56C,GACA,IAAA66C,EAAA,IAAAC,eACAD,EAAAE,KAAA,MAAAH,GAAA,GAEAC,EAAAG,mBAAA,WACA,IAAAH,EAAAI,YACAj7C,EAAA66C,EAAAK,eAIAL,EAAAM,KAAA,OAGA/pD,EAAAgqD,WAAA,SAAA/1C,EAAArF,GACA,IAAA8vB,EAAAgV,EAAAlV,kBACAh/B,EAAAkJ,SAAAC,cAAA,UACAnJ,EAAAuiD,IAAA9tC,EACAyqB,EAAAz1B,YAAAzJ,GAEAA,EAAAyqD,OAAAzqD,EAAAoqD,mBAAA,SAAAM,EAAAC,IACAA,GAAA3qD,EAAAqqD,YAAA,UAAArqD,EAAAqqD,YAAA,YAAArqD,EAAAqqD,aACArqD,IAAAyqD,OAAAzqD,EAAAoqD,mBAAA,KACAO,GAAAv7C,OAKA5O,EAAAoqD,WAAA,SAAAZ,GACA,IAAA1wC,EAAApQ,SAAAC,cAAA,KAEA,OADAmQ,EAAAsnB,KAAAopB,EACA1wC,EAAAsnB,QAGA7/B,IAAAsM,OAAA,gEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAG,EAAA,GAEAid,EAAA,WACAzrB,KAAAijD,oBAAA,GAGAt3B,EAAA,WACA3rB,KAAAmvC,kBAAA,GAGA3gC,EAAAqB,MAAArB,EAAAs9C,eAAA,SAAAC,EAAA11C,GACArW,KAAAgsD,iBAAAhsD,KAAAgsD,eAAA,IACAhsD,KAAAisD,mBAAAjsD,KAAAisD,iBAAA,IACA,IAAAC,EAAAlsD,KAAAgsD,eAAAD,IAAA,GACAI,EAAAnsD,KAAAisD,iBAAAF,GACA,GAAAG,EAAA7qD,QAAA8qD,EAAA,CACA,iBAAA91C,SAAA,IACAA,EAAA3M,OAAA2M,EAAA3M,KAAAqiD,GACA11C,EAAAoV,kBAAApV,EAAAoV,mBACApV,EAAAsV,iBAAAtV,EAAAsV,kBACAugC,IAAA7lC,QAEA,QAAAnlB,EAAA,EAAmBA,EAAAgrD,EAAA7qD,SACnB6qD,EAAAhrD,GAAAmV,EAAArW,OACAqW,EAAA4sC,oBAFyC/hD,KAKzC,OAAAirD,IAAA91C,EAAA84B,iBAAAgd,EAAA91C,EAAArW,WAAA,IAGAwO,EAAAwzC,QAAA,SAAA+J,EAAA11C,GACA,IAAA61C,GAAAlsD,KAAAgsD,gBAAA,IAA8CD,GAC9C,GAAAG,EAAA,CACAA,IAAA7lC,QAEA,QAAAnlB,EAAA,EAAmBA,EAAAgrD,EAAA7qD,OAAsBH,IACzCgrD,EAAAhrD,GAAAmV,EAAArW,QAIAwO,EAAA49C,KAAA,SAAAL,EAAA17C,GACA,IAAA0kC,EAAA/0C,KAQA,GANAA,KAAAwrB,iBAAAugC,EAAA,SAAAM,IACAtX,EAAAnJ,oBAAAmgB,EAAAM,GAEAh8C,EAAA9O,MAAA,KAAAH,cAGAiP,EACA,WAAAmgB,QAAA,SAAAuF,GACA1lB,EAAA0lB,KAKAvnB,EAAAguC,kBAAA,SAAAuP,EAAA17C,GACA,IAAAi8C,EAAAtsD,KAAAisD,iBAKA,GAJAK,MAAAtsD,KAAAisD,iBAAA,CACAM,WAAA,KAGAD,EAAAP,GAAA,CACA,IAAAS,EAAAF,EAAAP,GACAU,EAAAH,EAAAC,WAAAR,GACAU,IAAAH,EAAAC,WAAAR,GAAAU,EAAA,IACAA,EAAA7+C,KAAA4+C,GACA,IAAAtrD,EAAAurD,EAAA5kD,QAAAwI,IACA,GAAAnP,GAAAurD,EAAA3kD,OAAA5G,EAAA,GAGAorD,EAAAP,GAAA17C,GAGA7B,EAAAk+C,qBAAA,SAAAX,EAAA17C,GACA,IAAAi8C,EAAAtsD,KAAAisD,iBACA,GAAAK,EAAA,CACA,IAAAG,EAAAH,EAAAC,WAAAR,GAEA,GAAAO,EAAAP,IAAA17C,EACAo8C,GAAAzsD,KAAAw8C,kBAAAuP,EAAAU,EAAA11C,YACK,GAAA01C,EAAA,CACL,IAAAvrD,EAAAurD,EAAA5kD,QAAAwI,IACA,GAAAnP,GAAAurD,EAAA3kD,OAAA5G,EAAA,MAIAsN,EAAAlJ,GAAAkJ,EAAAgd,iBAAA,SAAAugC,EAAA17C,EAAAs8C,GACA3sD,KAAAgsD,eAAAhsD,KAAAgsD,gBAAA,GACA,IAAAE,EAAAlsD,KAAAgsD,eAAAD,GAGA,OAFAG,MAAAlsD,KAAAgsD,eAAAD,GAAA,KACA,GAAAG,EAAArkD,QAAAwI,IAAA67C,EAAAS,EAAA,kBAAAt8C,GACAA,GAGA7B,EAAAurC,IAAAvrC,EAAAm9B,eAAAn9B,EAAAo9B,oBAAA,SAAAmgB,EAAA17C,GACArQ,KAAAgsD,eAAAhsD,KAAAgsD,gBAAA,GACA,IAAAE,EAAAlsD,KAAAgsD,eAAAD,GACA,GAAAG,EAAA,CACA,IAAAtkD,EAAAskD,EAAArkD,QAAAwI,IACA,IAAAzI,GAAAskD,EAAApkD,OAAAF,EAAA,KAGA4G,EAAAo+C,mBAAA,SAAAb,GACA/rD,KAAAgsD,iBAAAhsD,KAAAgsD,eAAAD,GAAA,KAGAtqD,EAAA+M,iBAEAxM,IAAAsM,OAAA,mGAAAnM,EAAAV,EAAA4M,GAGA,IAAAE,EAAApM,EAAA,SAEAqM,EAAArM,EAAA,mBAAAqM,aAEAq+C,EAAA,CACAxkD,WAAA,SAAAykD,GACA1sD,OAAAmE,KAAAuoD,GAAArqD,QAAA,SAAA8S,GACAvV,KAAAyG,UAAA8O,EAAAu3C,EAAAv3C,KACOvV,OAEP+sD,WAAA,SAAAC,GACA,IAAA52C,EAAA,GAEA,GAAA42C,EAKOzsD,MAAAsG,QAAAmmD,KACP52C,EAAA42C,EACAA,EAAA5sD,OAAAmE,KAAA6R,QAPA,CACA,IAAA0T,EAAA9pB,KAAAsG,SACA0mD,EAAA5sD,OAAAmE,KAAAulB,GAAAkR,OAAA,SAAAzlB,GACA,OAAAuU,EAAAvU,GAAA03C,SAUA,OAHAD,EAAAvqD,QAAA,SAAA8S,GACAa,EAAAb,GAAAvV,KAAAktD,UAAA33C,IACOvV,MACPoW,GAEA3P,UAAA,SAAAqE,EAAApJ,GACA,GAAA1B,KAAA,IAAA8K,KAAApJ,EAAA,CACA,IAAAyrD,EAAAntD,KAAAsG,SAAAwE,GAEA,IAAAqiD,EACA,OAAAxmD,EAAA,sBAAAmE,EAAA,KAGA,GAAAqiD,EAAAC,UAAA,OAAAptD,KAAAmtD,EAAAC,YAAAptD,KAAAmtD,EAAAC,WAAA3mD,UAAAqE,EAAApJ,GACAyrD,EAAAE,aAAArtD,KAAA,IAAA8K,GAAApJ,GACAyrD,KAAAh4C,KAAAg4C,EAAAh4C,IAAA7T,KAAAtB,KAAA0B,KAEAwrD,UAAA,SAAApiD,GACA,IAAAqiD,EAAAntD,KAAAsG,SAAAwE,GAEA,OAAAqiD,EAIAA,EAAAC,UAAAptD,KAAAmtD,EAAAC,YAAAptD,KAAAmtD,EAAAC,WAAAF,UAAApiD,GACAqiD,KAAAr2C,IAAAq2C,EAAAr2C,IAAAxV,KAAAtB,WAAA,IAAA8K,GAJAnE,EAAA,sBAAAmE,EAAA,OAQA,SAAAnE,EAAAikB,GACA,oBAAAlkB,iBAAAC,MAAAD,QAAAC,KAAApF,MAAAmF,QAAAtF,WAGA,SAAAksD,EAAAC,EAAA72C,GACA,IAAAL,EAAA,IAAAtI,MAAAw/C,GACAl3C,EAAAK,OACA,iBAAAhQ,iBAAA0lB,OAAA1lB,QAAA0lB,MAAA/V,GACAogB,WAAA,WACA,MAAApgB,IAIA,IAAAm3C,EAAA,WACAxtD,KAAAytD,gBAAA,KAGA,WACAl/C,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA0tD,cAAA,SAAA3kC,EAAArT,EAAAoU,GAYA,OAXAf,EAAAziB,WAAAtG,KAAAytD,gBAAA/3C,GAAAqT,EAAAziB,SAAA,IACAlG,OAAAmE,KAAAulB,GAAArnB,QAAA,SAAA8S,GACA,IAAA43C,EAAArjC,EAAAvU,GACA,iBAAA43C,MAAA,CACAC,UAAAD,IAEAA,EAAAriD,OAAAqiD,EAAAriD,KAAAyK,GACAwT,EAAAziB,SAAA6mD,EAAAriD,MAAAqiD,EACA,iBAAAA,IAAApkC,EAAA,IAAAokC,EAAAriD,MAAAqiD,EAAAQ,gBAEAp/C,EAAAkB,UAAAsZ,EAAA8jC,GACA7sD,MAGAA,KAAA4tD,aAAA,SAAA7kC,GACA3oB,OAAAmE,KAAAwkB,EAAAziB,UAAA7D,QAAA,SAAA8S,GACA,IAAA43C,EAAApkC,EAAAziB,SAAAiP,GACA,UAAA43C,GAAApkC,EAAAtiB,UAAA8O,EAAA43C,EAAAzrD,UAIA1B,KAAA6tD,gBAAA,SAAAn4C,EAAA5K,EAAApJ,GACA,IAAAgU,EAAA,CACA,IAAAA,KAAA1V,KAAAytD,gBACA,GAAAztD,KAAAytD,gBAAA/3C,GAAA5K,GAAA,MAGA,IAAA9K,KAAAytD,gBAAA/3C,GAAA5K,GAAA,SAGA,IAAAgjD,EAAA9tD,KAAAytD,gBAAA/3C,KAAA1V,KAAAytD,gBAAA/3C,GAAA,IAEAo4C,EAAAhjD,KACAgjD,EAAAV,UAAAptD,KAAA6tD,gBAAAC,EAAAV,UAAAtiD,EAAApJ,GAA8EosD,EAAAhjD,GAAApJ,UAI9E1B,KAAA+tD,iBAAA,SAAAr4C,EAAAs4C,GACA5tD,OAAAmE,KAAAypD,GAAAvrD,QAAA,SAAA8S,GACAvV,KAAA6tD,gBAAAn4C,EAAAH,EAAAy4C,EAAAz4C,KACOvV,OAGPA,KAAA2G,OACA3G,KAAAstD,gBACGhsD,KAAAksD,EAAA5sD,WACHa,EAAA+rD,cAEAxrD,IAAAsM,OAAA,qHAAAnM,EAAAV,EAAA4M,GAGA,IAAA+mC,EAAAjzC,EAAA,cAIA8rD,GAFA9rD,EAAA,aAEAA,EAAA,cAEAqrD,EAAArrD,EAAA,oBAAAqrD,UAEAn/C,EAAA5M,UAAA,IAAA+rD,EAEA,IAAA/6C,EAAA,WACA,OAAAzS,MAAA,oBAAAqsB,eADA,GAIAvC,EAAA,CACA8N,UAAA,EACAs2B,WAAA,KACAC,SAAA,KACAC,UAAA,KACAC,SAAA,GACAlpC,OAAA,MACAmpC,YAAA,GACAC,oBAAA,EACAC,cAAA,GAGA/sD,EAAAqV,IAAA,SAAAvB,GACA,IAAAuU,EAAArpB,eAAA8U,GAAA,UAAAxH,MAAA,uBAAAwH,GACA,OAAAuU,EAAAvU,IAGA9T,EAAA0T,IAAA,SAAAI,EAAA7T,GACA,GAAAooB,EAAArpB,eAAA8U,GAAAuU,EAAAvU,GAAA7T,OAA0D,MAAA1B,KAAA6tD,gBAAA,GAAAt4C,EAAA7T,GAAA,UAAAqM,MAAA,uBAAAwH,IAG1D9T,EAAAwpB,IAAA,WACA,OAAAmqB,EAAAzB,WAAA7pB,IAGAroB,EAAAgtD,OAAA,GAEAhtD,EAAAitD,UAAA,SAAA5jD,EAAA6jD,GACA,GAAA7kC,EAAAwkC,YAAAxjD,GAAA,OAAAgf,EAAAwkC,YAAAxjD,GACA,IAAA8jD,EAAA9jD,EAAApD,MAAA,KAEAmnD,EAAA,aADAF,KAAAC,IAAAvtD,OAAA,QACA,QACAytD,EAAAF,IAAAvtD,OAAA,GAEA,aAAAstD,GAAA,KAAAE,EAAA,CACA,IAAAE,EAAA,IAAAz6C,OAAA,IAAAq6C,EAAA,gBAAAA,EAAA,SACAG,IAAAv6C,QAAAw6C,EAAA,MAGAD,MAAAH,IAAAC,EAAAvtD,OAAA,IAAAytD,EAAAF,IAAAvtD,OAAA,IACA,IAAAqU,EAAAoU,EAAA6kC,EAAA,QASA,OAPA,MAAAj5C,EACAA,EAAAoU,EAAAukC,SACK,KAAAQ,IACLF,EAAAE,EAAA,IAGAn5C,GAAA,KAAAA,EAAA2Q,OAAA,KAAA3Q,GAAA,KACAA,EAAAi5C,EAAAE,EAAAC,EAAA9uD,KAAA8W,IAAA,WAGArV,EAAAutD,aAAA,SAAAlkD,EAAAmkD,GACA,OAAAnlC,EAAAwkC,YAAAxjD,GAAAmkD,GAGAxtD,EAAAytD,SAAA,GAEAztD,EAAA0tD,WAAA,SAAA53B,EAAAzzB,GACA,IAAAuK,EAAA+gD,EAEA7uD,MAAAsG,QAAA0wB,KACA63B,EAAA73B,EAAA,GACAA,IAAA,IAGA,IACAlpB,EAAAlM,EAAAo1B,GACK,MAAAlhB,IAEL,GAAAhI,IAAA5M,EAAAytD,SAAA33B,GAAA,OAAAzzB,KAAAuK,GAGA,GAFA5M,EAAAytD,SAAA33B,KAAA91B,EAAAytD,SAAA33B,GAAA,IACA91B,EAAAytD,SAAA33B,GAAA3pB,KAAA9J,KACArC,EAAAytD,SAAA33B,GAAAl2B,OAAA,IAEA,IAAAguD,EAAA,WACAltD,EAAA,CAAAo1B,GAAA,SAAAlpB,GACA5M,EAAAoO,MAAA,eACA/E,KAAAysB,EACAlpB,WAGA,IAAA69C,EAAAzqD,EAAAytD,SAAA33B,GACA91B,EAAAytD,SAAA33B,GAAA,KACA20B,EAAAzpD,QAAA,SAAAqB,GACAA,KAAAuK,QAKA,IAAA5M,EAAAqV,IAAA,mBAAAu4C,IACApB,EAAAxC,WAAAhqD,EAAAitD,UAAAn3B,EAAA63B,GAAAC,GAEAC,MAGA,IAAAA,EAAA,WACAxlC,EAAAukC,UAAAvkC,EAAAokC,YAAApkC,EAAAqkC,UAAArkC,EAAAskC,WAAAhuD,OAAAmE,KAAAulB,EAAAwkC,aAAAjtD,SACAqF,QAAA0lB,MAAA,kLAEAkjC,EAAA,eAMA,SAAAC,EAAA33B,GACA,GAAAnlB,KAAAtI,SAAA,CACA2f,EAAA8N,YAAAz1B,EAAAy1B,UAAAvpB,EAAAupB,UAAAnlB,EAAAnE,QAA2F1M,EAAA,KAAMg2B,SAQjG,IAPA,IA2CAO,EA3CAq3B,EAAA,GACAC,EAAA,GACAC,EAAAvlD,SAAAulD,eAAAvlD,SAAAwlD,eAGAC,GADAF,KAAAhvB,eAAAv2B,UACAi2B,qBAAA,UAEAl/B,EAAA,EAAmBA,EAAA0uD,EAAAvuD,OAAoBH,IAAA,CACvC,IAAA2uD,EAAAD,EAAA1uD,GACAsiD,EAAAqM,EAAArM,KAAAqM,EAAA7G,aAAA,OACA,GAAAxF,EAAA,CAGA,IAFA,IAAAsM,EAAAD,EAAAC,WAEA30C,EAAA,EAAAic,EAAA04B,EAAAzuD,OAA4C8Z,EAAAic,EAAOjc,IAAA,CACnD,IAAA40C,EAAAD,EAAA30C,GAEA,IAAA40C,EAAAjlD,KAAAjD,QAAA,eACA2nD,GA0BAr3B,EA1BA43B,EAAAjlD,KAAAyJ,QAAA,iBA2BA4jB,EAAA5jB,QAAA,iBAAA/B,EAAAw9C,GACA,OAAAA,EAAA9iC,kBA5BA6iC,EAAAruD,OAIA,IAAA8Q,EAAAgxC,EAAArsC,MAAA,gCACA3E,IAAAi9C,EAAAj9C,EAAA,KAcA,QAAA+C,KAXAk6C,IACAD,EAAAV,KAAAU,EAAAV,MAAAW,EACAD,EAAA53B,UAAA,GAGA43B,EAAAnB,SAAAmB,EAAAV,KACAU,EAAAtB,WAAAsB,EAAAtB,YAAAsB,EAAAV,KACAU,EAAArB,SAAAqB,EAAArB,UAAAqB,EAAAV,KACAU,EAAApB,UAAAoB,EAAApB,WAAAoB,EAAAV,YACAU,EAAAV,KAEAU,EACA,qBAAAA,EAAAj6C,IAAA9T,EAAA0T,IAAAI,EAAAi6C,EAAAj6C,KA1CAg6C,GAAA,GA8CA9tD,EAAA8tD,OAQA9tD,EAAAwuD,QAAA,UAEAjuD,IAAAsM,OAAA,kQAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAxF,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEAk6C,EAAAl6C,EAAA,sBAAAk6C,gBAEA6T,EAAA/tD,EAAA,4BAAAq/C,cAEAuB,EAAA5gD,EAAA,iBAAA4gD,WAEAO,EAAAnhD,EAAA,sBAAAmhD,gBAEA4E,EAAA/lD,EAAA,mBAAA+lD,kBAEAiI,EAAAhuD,EAAA,aAEAiuD,EAAA,SAAAjsD,GACA,IAAA4wC,EAAA/0C,KAEAA,KAAAmE,SACA,IAAAk4C,EAAAr8C,MACA,IAAAkwD,EAAAlwD,MACA,IAAAsjD,EAAAtjD,MAEA,IAAAqwD,EAAA,SAAAh6C,KACAlM,SAAAwsC,WAAAxsC,SAAAwsC,aAAAxyC,EAAAuyC,aAAAvsC,SAAA2iB,gBAAA3oB,EAAAs3C,WAAAt3C,EAAAs3C,UAAAf,gBACAruB,OAAAlpB,QACAgB,EAAAhB,SAGA8gD,EAAA9/C,EAAAO,SAAA4rD,sBACAznD,EAAA0iC,YAAA0Y,EAAA,QAAAjkD,KAAAuwD,aAAA5tD,KAAA3C,KAAA,UACA6I,EAAA0iC,YAAA0Y,EAAA,YAAAjkD,KAAA2lD,YAAAhjD,KAAA3C,KAAA,cACA6I,EAAA8kC,0BAAA,CAAAsW,EAAA9/C,EAAAO,SAAA8rD,YAAArsD,EAAAO,SAAA8rD,WAAAzuB,MAAA59B,EAAAO,SAAA+rD,YAAAtsD,EAAAO,SAAA+rD,WAAA1uB,MAAA59B,EAAAs3C,WAAAt3C,EAAAs3C,UAAAf,cAAA1f,OAAA01B,SAAA,cAAA1wD,KAAA,gBACA6I,EAAA+jC,sBAAAzoC,EAAA2K,UAAA9O,KAAA68C,aAAAl6C,KAAA3C,KAAA,eACAkoD,EAAA/jD,EAAA2K,UAAA3K,GACA,IAAAwsD,EAAAxsD,EAAAO,SAAAo+C,QACAj6C,EAAA0iC,YAAAolB,EAAA,YAAA3wD,KAAAuwD,aAAA5tD,KAAA3C,KAAA,oBACA6I,EAAA0iC,YAAAolB,EAAA,QAAA3wD,KAAAuwD,aAAA5tD,KAAA3C,KAAA,gBACA6I,EAAA0iC,YAAAolB,EAAA,WAAA3wD,KAAAuwD,aAAA5tD,KAAA3C,KAAA,mBACA6I,EAAA0iC,YAAAolB,EAAA,YAAA3wD,KAAAuwD,aAAA5tD,KAAA3C,KAAA,oBACA6I,EAAA0iC,YAAA0Y,EAAA,YAAAoM,GACAxnD,EAAA0iC,YAAAolB,EAAA,YAAAN,GAEAhxB,EAAAhB,MAAAl6B,EAAAO,SAAA8rD,aACA3nD,EAAA0iC,YAAApnC,EAAAO,SAAA8rD,WAAAhwB,QAAA,YAAA6vB,GACAxnD,EAAA0iC,YAAApnC,EAAAO,SAAA+rD,WAAAjwB,QAAA,YAAA6vB,IAGAlsD,EAAAmB,GAAA,qBAAA+Q,GACA,IAAA0+B,EAAAxoC,QAAAwoC,EAAA6b,YAAA7b,EAAAgT,aAAA,CACA,IAAA8I,EAAA1sD,EAAAO,SAAAo5C,wBAAAznC,EAAAwF,EAAAxF,EAAArN,GACAY,EAAAzF,EAAA8B,QAAAJ,UAAA6xC,WACAhzC,EAAAP,EAAAO,UAEAkF,EAAA6oC,WAAA7oC,EAAAkoC,YAAA+e,EAAA9f,IAAA8f,EAAA7f,QACAtsC,EAAAgiD,eAAA,WAEAhiD,EAAAgiD,eAAA,SAKA,WACA1mD,KAAAuwD,aAAA,SAAAzlD,EAAAuL,GACArW,KAAAmE,OAAA0L,MAAA/E,EAAA,IAAAi4C,EAAA1sC,EAAArW,KAAAmE,UAGAnE,KAAA2lD,YAAA,SAAA76C,EAAAuL,GACA,IAAA61C,EAAAlsD,KAAAmE,OAAA6nD,gBAAAhsD,KAAAmE,OAAA6nD,eAAA8E,UACA5E,KAAA7qD,QAEArB,KAAAmE,OAAA0L,MAAA/E,EAAA,IAAAi4C,EAAA1sC,EAAArW,KAAAmE,UAGAnE,KAAA68C,aAAA,SAAA/xC,EAAAuL,GACA,IAAAqrC,EAAA,IAAAqB,EAAA1sC,EAAArW,KAAAmE,QACAu9C,EAAAxB,MAAA,EAAAlgD,KAAA+wD,aACArP,EAAA5U,OAAAz2B,EAAAy2B,OACA4U,EAAA3U,OAAA12B,EAAA02B,OAEA/sC,KAAAmE,OAAA0L,MAAA/E,EAAA42C,IAGA1hD,KAAAyM,SAAA,SAAAF,GACAvM,KAAAuM,SAGAvM,KAAA29C,aAAA,SAAAR,EAAA6T,GACAhxD,KAAA6b,EAAAshC,EAAAthC,EACA7b,KAAAgJ,EAAAm0C,EAAAn0C,EACAhJ,KAAA87C,gBAAA,EACA,IAAA33C,EAAAnE,KAAAmE,OACAO,EAAA1E,KAAAmE,OAAAO,SACAA,EAAAy1C,iBAAA,EACA,IAAA3mC,EAAAxT,KAEA2lD,EAAA,SAAAtvC,GACA,GAAAA,EAAA,CACA,GAAAgpB,EAAAT,WAAAvoB,EAAA46C,OAAAz9C,EAAA09C,aAAA,OAAA19C,EAAA09C,eACA19C,EAAAqI,EAAAxF,EAAAi4B,QACA96B,EAAAxK,EAAAqN,EAAAk4B,QACAyiB,KAAA36C,GACA7C,EAAAkuC,WAAA,IAAAqB,EAAA1sC,EAAA7C,EAAArP,QACAqP,EAAA29C,aAAA,IAGAC,EAAA,SAAA/6C,GACAlS,EAAA41C,IAAA,qBAAAsX,GACA5L,cAAA/B,GACA4N,IACA99C,IAAAjH,MAAA,QAAAiH,IAAAjH,MAAA,OAAA8J,GACA7C,EAAAjH,MAAA,GACAiH,EAAAsoC,eAAAp3C,EAAAy1C,iBAAA,EACAz1C,EAAA01C,uBAAA11C,EAAA21C,wBACA7mC,EAAA+9C,oBAAA/9C,EAAA09C,aAAA,KACA76C,GAAA7C,EAAA+8C,aAAA,UAAAl6C,GACAlS,EAAAqtD,gBAGAF,EAAA,WACA99C,IAAAjH,QAAAiH,IAAAjH,SACAiH,EAAA29C,aAAA,GAGA,GAAA9xB,EAAAd,SAAA,YAAA4e,EAAApC,SAAArxC,KACA,OAAA+sB,WAAA,WACA26B,EAAAjU,KAIA,IAAAkU,EAAA,SAAAh7C,GACA7C,EAAA09C,cAEA/sD,EAAAizC,MAAAtwC,QAAAgE,MAAA3G,EAAAizC,MAAAqa,mBACAj+C,IAAAjH,MAAA,QAAAiH,IAAAjH,MAAA,SACAiH,EAAAjH,MAAA,GACAiH,EAAA09C,iBAIA/sD,EAAAmB,GAAA,qBAAA+rD,GACAltD,EAAAutD,eAAA,CACA5qD,QAAA,CACAgE,KAAA,WAGA0I,EAAA+9C,oBAAA5L,EACAnyC,EAAA09C,aAAAroD,EAAA2jC,QAAAxsC,KAAAmE,OAAA2K,UAAA62C,EAAAyL,GACA,IAAA1N,EAAAgC,YAAA4L,EAAA,KAGAtxD,KAAAkxD,aAAA,KAEAlxD,KAAA2xD,kBAAA,WACA,IAAAvR,EAAA,SAAA/pC,GACAA,KAAA0kC,UAAA,eAAA1kC,EAAA0kC,SAAArxC,OACA1J,KAAAmE,OAAA41C,IAAA,oBAAAqG,GACA/pC,KAAA0kC,UAAAlyC,EAAAijC,UAAAz1B,EAAA0kC,YACOp4C,KAAA3C,MAEPy2B,WAAA2pB,EAAA,IACApgD,KAAAmE,OAAAmB,GAAA,oBAAA86C,MAEG9+C,KAAA8uD,EAAAxvD,WACHuvD,EAAAzC,cAAA0C,EAAAxvD,UAAA,gBACAgxD,YAAA,CACAjE,aAAA,GAEAkE,UAAA,CACAlE,aAAAtuB,EAAAzB,MAAA,OAEAk0B,YAAA,CACAnE,cAAA,GAEAoE,aAAA,CACApE,aAAA,GAEAqE,oBAAA,CACArE,cAAA,KAGAlsD,EAAA2uD,iBAEApuD,IAAAsM,OAAA,+EAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cA8DAV,EAAAwwD,YA5DA,SAAA9tD,GACAA,EAAAmB,GAAA,iBAAA+Q,GACA,IAAA7L,EAAA6L,EAAAgnC,sBACAp3C,EAAA9B,EAAA8B,QACAisD,EAAAjsD,EAAAksD,UAAA3nD,EAAAumC,IAAAvmC,EAAAwmC,OAAA,GAEAkhB,IACA77C,EAAAmpC,cAAAv5C,EAAAmsD,WAAAF,GAAsDjsD,EAAAosD,WAAAH,GACtD77C,EAAA+pC,QAGA,IAAAn4B,EAAA5R,EAAA0kC,UAAA1kC,EAAA0kC,SAAA9yB,OAEAA,GAAAktB,EAAAtU,YAAA5Y,EAAA,sBACAktB,EAAAtU,YAAA5Y,EAAA,qBACAhiB,EAAAQ,UAAA,QAAAR,EAAAqL,kBACAnN,EAAAO,SAAA05C,0BAIAj6C,EAAAmB,GAAA,uBAAA+Q,GAGA,kBAFAlS,EAAAO,SAAAm9C,aAAAK,UAAA7rC,GAEA,CACA,IAAA06B,EAAA16B,EAAAgnC,sBAAAtM,IACA9qC,EAAA9B,EAAA8B,QACAA,EAAAqsD,aAAArsD,EAAAqsD,YAAAvhB,IAAA5sC,EAAA8B,QAAAssD,kBAAAxhB,EAAA16B,GACAlS,EAAAuyC,aAAAvyC,EAAAhB,QACAkT,EAAA+pC,UAGAj8C,EAAAmB,GAAA,0BAAA+Q,GAGA,kBAFAlS,EAAAO,SAAAm9C,aAAAK,UAAA7rC,GAEA,CACA,IAAA06B,EAAA16B,EAAAgnC,sBAAAtM,IACA9qC,EAAA9B,EAAA8B,QACAyQ,EAAAzQ,EAAAusD,uBAAAzhB,GAAA,GACAnnC,EAAA8M,EAAA9M,OAAA8M,EAAA+7C,WAEA,GAAA7oD,EAAA,CACAmnC,EAAAnnC,EAAA8a,MAAAqsB,IACA,IAAAmhB,EAAAjsD,EAAAksD,UAAAphB,EAAA9qC,EAAA2xC,QAAA7G,GAAA1vC,OAAA,GAEA6wD,EACAjsD,EAAAmsD,WAAAF,IAEAjsD,EAAAysD,QAAA,MAAA9oD,GACAzF,EAAAO,SAAA05C,qBAAA,CACArN,IAAAnnC,EAAA8a,MAAAqsB,IACAC,OAAA,KAKA36B,EAAA+pC,aAOAp+C,IAAAsM,OAAA,iGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAskD,EAAAxwD,EAAA,eAEA0G,EAAA1G,EAAA,gBAEAywD,EAAA,SAAAzuD,GACAnE,KAAA6yD,QAAA1uD,EACAnE,KAAA8yD,MAAA,CACA3uD,UAEAnE,KAAA+yD,UAAA,GACA/yD,KAAAw8C,kBAAAr4C,EAAAJ,YAGA,WACA/D,KAAAw8C,kBAAA,SAAAwW,GACAhzD,KAAAizD,sBAAAjzD,KAAAkzD,iBACAlzD,KAAAkzD,gBAAAF,EACAhzD,KAAAmzD,mBAAAH,EAAA,IAGAhzD,KAAAkH,mBAAA,SAAA8rD,GACA,IAAA5I,EAAApqD,KAAA+yD,UACA,GAAA3I,IAAA/oD,OAAA,IAAA2xD,EAAA,CAEA,KAAA5I,IAAA/oD,OAAA,IAAA+oD,IAAA/oD,OAAA,IAAArB,KAAAkzD,iBACAlzD,KAAAizD,sBAAA7I,IAAA/oD,OAAA,IAGArB,KAAAmzD,mBAAAH,EAAA,KAGAhzD,KAAAmzD,mBAAA,SAAAH,EAAA9qD,GACA,GAAA8qD,EAAA,CACA,mBAAAA,KAAAI,iBAAAJ,EAAAI,eAAAJ,GACA,IAAA9xD,EAAAlB,KAAA+yD,UAAAlrD,QAAAmrD,IACA,GAAA9xD,GAAAlB,KAAA+yD,UAAAjrD,OAAA5G,EAAA,QACA2T,GAAA3M,EAAAlI,KAAA+yD,UAAAnlD,KAAAolD,GAAoDhzD,KAAA+yD,UAAAjrD,OAAAI,EAAA,EAAA8qD,IACpD,GAAA9xD,GAAA8xD,EAAAK,QAAAL,EAAAK,OAAArzD,KAAA6yD,WAGA7yD,KAAAizD,sBAAA,SAAAD,GACA,IAAA9xD,EAAAlB,KAAA+yD,UAAAlrD,QAAAmrD,GACA,UAAA9xD,IACAlB,KAAA+yD,UAAAjrD,OAAA5G,EAAA,GACA8xD,EAAAM,QAAAN,EAAAM,OAAAtzD,KAAA6yD,UACA,IAGA7yD,KAAAuzD,mBAAA,WACA,OAAAvzD,KAAA+yD,UAAA/yD,KAAA+yD,UAAA1xD,OAAA,IAGArB,KAAAwzD,cAAA,WACA,IAAA98C,EAAA1W,KAAA8yD,MACA3uD,EAAAuS,EAAAvS,OACA,OAAAnE,KAAA+yD,UAAAt8C,IAAA,SAAA2zC,GACA,OAAAA,EAAAoJ,eAAApJ,EAAAoJ,cAAArvD,EAAAuS,IAAA,KACOskB,OAAA01B,SAAA3oD,KAAA,MAGP/H,KAAAyzD,sBAAA,SAAA5kB,EAAAzD,EAAAD,EAAA90B,GAKA,IAJA,IAAAq9C,EACA3oC,GAAA,EACAhnB,EAAA/D,KAAA6yD,QAAA9uD,SAEA7C,EAAAlB,KAAA+yD,UAAA1xD,OAAyCH,QACzCwyD,EAAA1zD,KAAA+yD,UAAA7xD,GAAAkyD,eAAApzD,KAAA8yD,MAAAjkB,EAAAzD,EAAAD,EAAA90B,KACAq9C,EAAA5sD,WAGAikB,EADA,QAAA2oC,EAAA5sD,SAGA/C,EAAAgD,KAAA2sD,EAAA5sD,QAAA9G,KAAA6yD,QAAAa,EAAAl8C,KAAAnB,KAGAA,IAAA,GAAAw4B,GAAA,GAAA6kB,EAAAC,WAAA,GAAAD,EAAA5sD,QAAA6sD,WACA9qD,EAAAijC,UAAAz1B,GAGA0U,MAWA,OARAA,IAAA,GAAA8jB,IACA6kB,EAAA,CACA5sD,QAAA,gBAEAikB,EAAAhnB,EAAAgD,KAAA,eAAA/G,KAAA6yD,QAAAznB,IAGArgB,GAAA/qB,KAAA6yD,QAAA7Q,SAAAhiD,KAAA6yD,QAAA7Q,QAAA,mBAAA0R,GACA3oC,GAGA/qB,KAAAu5C,aAAA,SAAAljC,EAAAw4B,EAAA1D,GACA,IAAAC,EAAAunB,EAAAznB,gBAAAC,GACA,OAAAnrC,KAAAyzD,sBAAA5kB,EAAAzD,EAAAD,EAAA90B,IAGArW,KAAA04C,YAAA,SAAA3vC,GACA,OAAA/I,KAAAyzD,uBAAA,EAAA1qD,MAEGzH,KAAAsxD,EAAAhyD,WACHa,EAAAmxD,eAEA5wD,IAAAsM,OAAA,2DAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAEAulD,EAAA,EACAC,EAAA,EACAC,GAAA,EAEAC,GAAA,EACAC,GAAA,EAGAC,EAAA,qGACAC,EAAA,mEAEAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,CAAAD,kBAAAZ,EAAAD,EAAAC,EAAAE,EAAAH,EAAAa,4BAAAb,MAAAC,EAAAE,EAAAJ,IAAAO,MAAAP,UAAAM,EAAAD,EAAAC,EAAAD,IAAAP,oBAAAO,EAAAL,YAAAJ,oDAAAI,YAAAJ,oDAAAI,QAAAc,YAAAb,EAAAa,oDAAAT,EAAAL,EAAAO,QAAAP,QAAAJ,EAAAI,IAAAc,EAAAd,IAAAO,IAAAT,IAAAE,EAAAJ,EAAAI,MAAAF,EAAAF,EAAAI,WACAgB,EAAA,CAAAZ,sBAAAU,MAAAlB,EAAAC,EAAAG,gDAAAI,EAAAH,EAAAQ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAR,EAAAE,UAAAP,8BAAAK,EAAAL,oDAAAI,GAuFA,SAAAa,EAAAC,EAAAC,EAAAC,GACA,KAAA/B,EAAA6B,GAIA,MAAAA,GAAA9B,GAAAO,GAAAJ,EAaA,IAPA,IAEA9iB,EACA4kB,EACAC,EACAC,EALAC,EAAAJ,EAAAv0D,OACAqjB,EAAA,EAMAA,EAAAsxC,GAAA,CACA,GAAAL,EAAAjxC,IAAAgxC,EAAA,CAGA,IAFAzkB,EAAAvsB,EAAA,EAEAusB,EAAA+kB,GAAAL,EAAA1kB,IAAAykB,GACAzkB,IAGA,IAAA4kB,EAAAnxC,EAAAoxC,EAAA7kB,EAAA,EAAsC4kB,EAAAC,EAASD,IAAAC,IAC/CC,EAAAH,EAAAC,GACAD,EAAAC,GAAAD,EAAAE,GACAF,EAAAE,GAAAC,EAGArxC,EAAAusB,EAGAvsB,SA7BAkxC,EAAAtiB,UAiCA,SAAA2iB,EAAA54C,EAAA+pC,EAAApmB,EAAAk1B,GACA,IACAC,EACAC,EACAJ,EACA90D,EAJAm1D,EAAAjP,EAAA8O,GAMA,OAAAG,GACA,KAAAjC,EACA,KAAAC,EACAP,GAAA,EAEA,KAAAU,EACA,KAAAD,EACA,OAAA8B,EAEA,KAAA/B,EACA,OAAAR,EAAAS,EAAAD,EAEA,KAAAK,EAGA,OAFAb,GAAA,GACA,EACAO,EAEA,KAAAO,EACA,OAAAJ,EAEA,KAAAK,EACA,OAAAqB,EAAA,GAAAA,EAAA,GAAA9O,EAAA/lD,SAAA80D,EAAAn1B,EAAAk1B,EAAA,KAAA5B,GAAA6B,GAAA5B,IAAA6B,EAAAhP,EAAA8O,EAAA,KAAA5B,GAAA8B,GAAA7B,EACAC,GAGAV,IACAsC,EAAA7B,GAGA6B,GAAAD,EAAAC,EAAA5B,GAEA,KAAAM,EAGA,OAFAqB,EAAAD,EAAA,EAAAl1B,EAAAk1B,EAAA,GAAAzB,IAEAH,GAAA4B,EAAA,EAAA9O,EAAA/lD,QAAA+lD,EAAA8O,EAAA,IAAA5B,EACAA,EAGAE,EAEA,KAAAO,EACA,GAAAmB,EAAA,GAAAl1B,EAAAk1B,EAAA,IAAA5B,EACA,OAAAA,EAGA,GAAAR,EACA,OAAAU,EAMA,IAHAtzD,EAAAg1D,EAAA,EACAF,EAAA5O,EAAA/lD,OAEAH,EAAA80D,GAAA5O,EAAAlmD,IAAA6zD,GACA7zD,IAGA,OAAAA,EAAA80D,GAAA5O,EAAAlmD,IAAAozD,EACAA,EAGAE,EAEA,KAAAQ,EAIA,IAHAgB,EAAA5O,EAAA/lD,OACAH,EAAAg1D,EAAA,EAEAh1D,EAAA80D,GAAA5O,EAAAlmD,IAAA8zD,GACA9zD,IAGA,GAAAA,EAAA80D,EAAA,CACA,IAAAM,EAAAj5C,EAAA64C,GACAK,EAAAD,GAAA,MAAAA,GAAA,aAAAA,EAGA,GAFAH,EAAA/O,EAAAlmD,GAEAq1D,IAAAJ,GAAA9B,GAAA8B,GAAAxB,GACA,OAAAN,EAIA,OAAA6B,EAAA,IAAAC,EAAA/O,EAAA8O,EAAA,KAAAzB,EACAD,EAGAxzB,EAAAk1B,EAAA,GAEA,KAAAzB,EAGA,OAFAX,GAAA,EACAC,GAAA,EACAH,EAEA,KAAAc,EAEA,OADAV,GAAA,EACAQ,EAEA,KAAAS,EACA,KAAAC,EACA,KAAAE,EACA,KAAAC,EACA,KAAAF,EACArB,GAAA,EAEA,KAAAwB,EACA,OAAAd,GAIA,SAAAgC,EAAA32B,GACA,IAAA42B,EAAA52B,EAAAjiB,WAAA,GACAk4C,EAAAW,GAAA,EAEA,UAAAX,EACAW,EAAA,IAAArC,EAAAmB,EAAAkB,GACK,GAAAX,EACL,kBAAAlgD,KAAAiqB,GAAAw0B,EAAAD,EACK,GAAA0B,EACL,yDAAAlgD,KAAAiqB,GAAAm1B,EAAwF,+BAAAp/C,KAAAiqB,GAAA00B,EAA4D,MAAAkC,EAAA1B,EAAiC,kBAAAn/C,KAAAiqB,GAAAy0B,EAA+CK,EAC/N,IAAAmB,GAAAW,GAAA,KACLjB,EAAA,IAAAiB,GACK,KAAAX,GACLW,GAAA,MAAA9B,EAGAH,EAOA/yD,EAAA2yD,IACA3yD,EAAA4yD,IACA5yD,EAAA6yD,KACA7yD,EAAAi1D,KAAA,EACAj1D,EAAA8yD,GAAA,EACA9yD,EAAAk1D,IAAA,EACAl1D,EAAAgzD,EAAA,EACAhzD,EAAAyzD,IAAA,EACAzzD,EAAAm1D,IAAA,OAEAn1D,EAAAo1D,cAAA,SAAA9tD,EAAA+tD,EAAAC,GACA,GAAAhuD,EAAA1H,OAAA,WACA,IAAAgc,EAAAtU,EAAArB,MAAA,IACAsvD,EAAA,IAAAz2D,MAAA8c,EAAAhc,QACA41D,EAAA,IAAA12D,MAAA8c,EAAAhc,QACAs0D,EAAA,GACA/B,EAAAmD,EAAA5C,EA7SA,EAwBA,SAAA92C,EAAAs4C,EAAAK,EAAAkB,GACA,IAAAC,EAAAvD,EAAAM,EAAAD,EACAmD,EAAA,KACAC,EAAA,KACAC,EAAA,KACAC,EAAA,EACAxO,EAAA,KAEAyO,GAAA,EACAt2D,EAAA,KACAg1D,EAAA,KACAl1B,EAAA,GAEA,IAAAk2B,EACA,IAAAh2D,EAAA,EAAAg2D,EAAA,GAAiCh2D,EAAA80D,EAAS90D,IAC1Cg2D,EAAAh2D,GAAAs1D,EAAAn5C,EAAAnc,IAUA,IANA2yD,EAAAD,EACAE,GAAA,GACA,EACAC,GAAA,EACAC,GAAA,EAEAkC,EAAA,EAAgBA,EAAAF,EAAUE,IAAA,CAQ1B,GAPAkB,EAAAG,EACAv2B,EAAAk1B,GAAAmB,EAAApB,EAAA54C,EAAA65C,EAAAl2B,EAAAk1B,GAEAnN,EAAA,KADAwO,EAAAJ,EAAAC,GAAAC,IAEAE,GAAA,GACA5B,EAAAO,GAAAoB,EAAAH,EAAAI,GAAA,GAEAxO,EAAA,EACA,OAAAA,EAAA,CACA,IAAA7nD,EAAAs2D,EAA2Bt2D,EAAAg1D,EAAQh1D,IACnCy0D,EAAAz0D,GAAA,EAGAs2D,GAAA,OAEAA,GAAA,EAMA,GAFAL,EAAAI,GAAA,IAGA,GAAAC,IACAA,EAAAtB,QAGA,GAAAsB,GAAA,GACA,IAAAt2D,EAAAs2D,EAA2Bt2D,EAAAg1D,EAAQh1D,IACnCy0D,EAAAz0D,GAAAo2D,EAGAE,GAAA,EAIAN,EAAAhB,IAAAzB,IACAkB,EAAAO,GAAA,GAGArC,GAAAyD,EAGA,GAAAtD,EACA,IAAA9yD,EAAA,EAAiBA,EAAA80D,EAAS90D,IAC1B,GAAAg2D,EAAAh2D,IAAAwzD,EAAA,CACAiB,EAAAz0D,GAAA0yD,EAEA,QAAAz4C,EAAAja,EAAA,EAA6Bia,GAAA,GAC7B+7C,EAAA/7C,IAAAy5C,EADqCz5C,IAErCw6C,EAAAx6C,GAAAy4C,GA4MA6D,CAAAp6C,EAAAs4C,EAAAt4C,EAAAhc,OAAAy1D,GAEA,QAAA51D,EAAA,EAAmBA,EAAA81D,EAAA31D,OAA8B21D,EAAA91D,UAIjDu0D,EAAA,EAAAE,EAAAqB,GAEAvB,EAAA,EAAAE,EAAAqB,GAEA,IAAA91D,EAAA,EAAmBA,EAAA81D,EAAA31D,OAAA,EAAkCH,IAErD41D,EAAA51D,KAAAqzD,EACAoB,EAAAz0D,GAAAO,EAAA8yD,GACOoB,EAAAz0D,KAAAmzD,IAAAyC,EAAA51D,GAAAyzD,GAAAmC,EAAA51D,GAAA+zD,GAAA6B,EAAA51D,KAAAszD,GAAAsC,EAAA51D,KAAAo0D,GACPK,EAAAz0D,GAAAO,EAAAi1D,KACOx1D,EAAA,cAAAmc,EAAAnc,EAAA,kCAAA0U,KAAAyH,EAAAnc,MACPy0D,EAAAz0D,EAAA,GAAAy0D,EAAAz0D,GAAAO,EAAAk1D,IACAz1D,KAIAmc,IAAAhc,OAAA,KAAAI,EAAAm1D,MAAAjB,EAAAt4C,EAAAhc,OAAA,GAAAI,EAAAgzD,GACA,WAAAp3C,EAAA,KAAAs4C,EAAA,GAAAl0D,EAAAyzD,KAEA,IAAAh0D,EAAA,EAAmBA,EAAA81D,EAAA31D,OAA8BH,IACjD+1D,EAAA/1D,GAAAy0D,EAAAqB,EAAA91D,IAGA,OACA81D,oBACAC,eAIAx1D,EAAAi2D,kBAAA,SAAA3uD,EAAA+tD,GAGA,IAFA,IAAAnzB,GAAA,EAEAziC,EAAA,EAAmBA,EAAA6H,EAAA1H,OAAiBH,IACpC41D,EAAA51D,GAAAs1D,EAAAztD,EAAAyT,OAAAtb,IACAyiC,GAAAmzB,EAAA51D,IAAAmzD,GAAAyC,EAAA51D,IAAAyzD,GAAAmC,EAAA51D,IAAAqzD,IAAA5wB,GAAA,GAGA,OAAAA,GAGAliC,EAAAk2D,wBAAA,SAAAC,EAAAC,GACA,QAAA32D,EAAA,EAAmBA,EAAA22D,EAAAb,kBAAA31D,OAAqCH,IACxD,GAAA22D,EAAAb,kBAAA91D,IAAA02D,EAAA,OAAA12D,EAGA,YAGAc,IAAAsM,OAAA,4FAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAypD,EAAA31D,EAAA,kBAEAizC,EAAAjzC,EAAA,cAEA41D,EAAA,kDAEAC,EAAA,SAAA/xD,GACAjG,KAAAiG,UACAjG,KAAAi4D,QAAA,GACAj4D,KAAAk4D,WAAA,KACAl4D,KAAA83D,WACA93D,KAAAm4D,WAAA,GACAn4D,KAAAo4D,IAAA,OACAp4D,KAAAq4D,gBAAA,EACAr4D,KAAAs4D,UAAA,EACAt4D,KAAAu4D,QAAA,EACAv4D,KAAAyd,KAAA,GACAzd,KAAAw4D,WAAA,EACAx4D,KAAAy4D,IAAA,OACAz4D,KAAAk1D,IAAA,SACAl1D,KAAA04D,aAAA,EACA14D,KAAA24D,YAAA,KACA34D,KAAA44D,cAAA,EACA54D,KAAA64D,WAAA,EACA74D,KAAA84D,qBAAA,EACA94D,KAAA+4D,SAAAhB,EAAAniD,KAAA3P,EAAA+B,cAGA,WACAhI,KAAAg5D,UAAA,SAAAvW,EAAAwW,EAAAC,GACA,QAAAl5D,KAAA+4D,WAEAtW,IAAAziD,KAAAk4D,aACAl4D,KAAAk4D,WAAAzV,EACAziD,KAAAm5D,cAAAF,EAAAC,GACAl5D,KAAAo5D,iBAGAp5D,KAAAi4D,QAAAhB,aAGAj3D,KAAAyE,SAAA,SAAAqX,GACA9b,KAAA+4D,SAMA/4D,KAAAk4D,WAAA,KALA,UAAAp8C,EAAAitC,QAAAgP,EAAAniD,KAAAkG,EAAAtO,MAAAzF,KAAA,SACA/H,KAAA+4D,UAAA,EACA/4D,KAAAk4D,WAAA,OAOAl4D,KAAAq5D,eAAA,WACA,IAAAJ,EAAA,EACAK,EAAAt5D,KAAAiG,QAAAszD,gBAEA,GAAAD,EAAAj4D,OAAA,CACA,IAAAuG,EAAA5H,KAAAiG,QAAAuzD,kBAAAF,EAAAt5D,KAAAk4D,YACAtwD,GAAA,IAAAqxD,EAAAj5D,KAAAiG,QAAAwzD,aAAA7xD,IAGA,OAAAqxD,GAGAj5D,KAAA05D,cAAA,WACA,IAAAR,EAAA,EACAI,EAAAt5D,KAAAiG,QAAAszD,gBAEA,GAAAD,EAAAj4D,OAIA,IAHA,IAAAs4D,EACAC,EAAA55D,KAAAiG,QAAAuzD,kBAAAF,EAAAt5D,KAAAk4D,YAEAl4D,KAAAk4D,WAAAgB,EAAA,IACAS,EAAA35D,KAAAiG,QAAAuzD,kBAAAF,EAAAt5D,KAAAk4D,WAAAgB,EAAA,MACAU,GACAA,EAAAD,EACAT,SAGAA,EAAAl5D,KAAAk4D,WAGA,OAAAgB,GAGAl5D,KAAAm5D,cAAA,SAAAF,EAAAC,QACArkD,IAAAokD,MAAAj5D,KAAAq5D,kBACA,IACAQ,EADAZ,IAAAj5D,KAAAiG,QAAAu8C,YAAA,EACAxiD,KAAAy4D,IAAAz4D,KAAAo4D,IAKA,GAJAp4D,KAAAw4D,WAAA,EACAx4D,KAAAyd,KAAAzd,KAAAiG,QAAA2xC,QAAAqhB,GACAj5D,KAAAs4D,SAAAt4D,KAAAu4D,QAAAv4D,KAAAyd,KAAAjB,OAAA,KAAAxc,KAAAk1D,IAEAl1D,KAAAiG,QAAA6zD,aAAA,CACA,IAAA1rD,EAAApO,KAAAiG,QAAA8zD,UAAAd,GAEA7qD,SACAyG,IAAAqkD,MAAAl5D,KAAA05D,iBAEAR,EAAA,GAAA9qD,EAAA/M,QACArB,KAAAw4D,WAAApqD,EAAA4rD,OACAh6D,KAAA64D,WAAA74D,KAAAw4D,WAAAx4D,KAAAm4D,WAAAL,EAAA1D,GACAp0D,KAAAyd,KAAAy7C,EAAA9qD,EAAA/M,OAAArB,KAAAyd,KAAAvE,UAAA9K,EAAA8qD,EAAA,GAAA9qD,EAAA8qD,IAAAl5D,KAAAyd,KAAAvE,UAAA9K,IAAA/M,OAAA,KAEArB,KAAAyd,KAAAzd,KAAAyd,KAAAvE,UAAA,EAAA9K,EAAA8qD,KAIAA,GAAA9qD,EAAA/M,SAAArB,KAAAyd,MAAAzd,KAAAq4D,eAAAwB,EAAA/B,EAAAlB,UAEA52D,KAAAyd,MAAAzd,KAAAq4D,eAAAwB,EAAA/B,EAAAlB,IAGA,IAEArmD,EAFAtK,EAAAjG,KAAAiG,QACAshB,EAAA,EAEAvnB,KAAAyd,KAAAzd,KAAAyd,KAAAlJ,QAAA,8CAAAsrB,EAAA3+B,GACA,aAAA2+B,GAAA55B,EAAAg0D,YAAAp6B,EAAAjiB,WAAA,KACArN,EAAA,OAAAsvB,EAAA55B,EAAAi0D,iBAAAh5D,EAAAqmB,GAAA,EACAA,GAAAhX,EAAA,EACA6kC,EAAA7B,aAAAukB,EAAAlB,IAAArmD,IAGAsvB,IAGA7/B,KAAAs4D,WACAt4D,KAAA24D,YAAAwB,MAAA9vD,YAAArK,KAAAyd,KAAAjB,OAAAxc,KAAAyd,KAAApc,OAAA,IAAAy2D,EAAAlB,IAAA52D,KAAAyd,KAAA28C,OAAA,EAAAp6D,KAAAyd,KAAApc,OAAA,GAAArB,KAAAyd,KACAzd,KAAA44D,cAAA54D,KAAA04D,aAAA14D,KAAA24D,YAAAwB,MAAAnjB,wBAAAxuC,QAIAxI,KAAAo5D,cAAA,WACA,IAAAtC,EAAA,GAEAgB,EAAAJ,kBAAA13D,KAAAyd,KAAAq5C,IAAA92D,KAAAs4D,SACAt4D,KAAAi4D,QAAAH,EAAAjB,cAAA72D,KAAAyd,KAAAq5C,EAAA92D,KAAAs4D,UAEAt4D,KAAAi4D,QAAA,IAIAj4D,KAAAq6D,YAAA,WACAr6D,KAAAk4D,WAAA,MAGAl4D,KAAAs6D,sBAAA,SAAA3B,GACA,GAAA34D,KAAAk7C,iBAAAyd,EAAA4B,eAAA/xD,MAAA,CACAxI,KAAA24D,cACA,IAAAzd,EAAAl7C,KAAAk7C,eAAAyd,EAAA4B,eAAA/xD,MACAgyD,EAAA7B,EAAA8B,kBAAA,UACAz6D,KAAAm4D,WAAAL,EAAA1D,GAAAp0D,KAAAm4D,WAAAL,EAAAxD,IAAAt0D,KAAAm4D,WAAAL,EAAApB,MAAAxb,EACAl7C,KAAAm4D,WAAAL,EAAAzD,GAAAr0D,KAAAm4D,WAAAL,EAAAvD,IAAAiG,EACAx6D,KAAAm4D,WAAAL,EAAAnB,KAAA,IAAA6D,EACAx6D,KAAAm4D,WAAAL,EAAArD,GAAAz0D,KAAAm4D,WAAAL,EAAA5C,KAAA,EACAl1D,KAAAk4D,WAAA,OAGAl4D,KAAA06D,kBAAA,SAAArC,GACAr4D,KAAAq4D,iBACAr4D,KAAAk4D,WAAA,MAGAl4D,KAAA26D,WAAA,SAAAC,GACA56D,KAAAo4D,IAAAwC,GAGA56D,KAAA66D,gBAAA,SAAAryD,GACAxI,KAAA04D,aAAAlwD,GAGAxI,KAAA86D,UAAA,SAAA/pB,GACA,QAAA/wC,KAAAu4D,cACA1jD,GAAAk8B,EAAA/wC,KAAAiG,QAAA2xC,QAAA7G,GAAAv0B,OAAA,IAAAxc,KAAAk1D,IAAmFl1D,KAAAs4D,WAGnFt4D,KAAA+6D,gBAAA,SAAA52D,EAAAm0D,GAGA,IAFA,IAAAjrD,EAAAlJ,EAAA62D,oBAEAjqB,EAAA5sC,EAAA0B,UAAAo1D,qBAAAlqB,IAA+DA,GAAA1jC,EAAA0jC,IAAmBA,IAClFunB,GAAAn0D,EAAA8B,QAAA2xC,QAAA7G,GAAAv0B,OAAA,KAAArY,EAAA8B,QAAAi1D,aAAAhG,IAA+IoD,GAAAn0D,EAAA8B,QAAA2xC,QAAA7G,GAAAv0B,OAAA,KAAArY,EAAA8B,QAAAi1D,aAAAhG,KAAA/wD,EAAA8B,QAAAi6B,IAAA/F,OAAA,CAC/I6W,OAAA,EACAD,OACS5sC,EAAA8B,QAAAi1D,aAAAhG,KAHT/wD,EAAA8B,QAAAi6B,IAAAi7B,aAAApqB,EAAA,MAOA/wC,KAAAo7D,WAAA,SAAAC,GACAA,GAAAr7D,KAAAw4D,WACA,IAAA8C,EAAAt7D,KAAAyd,KAAAjB,OAAA,KAAAxc,KAAAk1D,IAAA,IACAqG,EAAAF,EAAAC,EAAAt7D,KAAAiG,QAAAkL,eAAAkqD,IAAA,EAAAC,EACAE,EAAA1D,EAAAH,wBAAA4D,EAAAv7D,KAAAi4D,SACAtC,EAAA31D,KAAAi4D,QAAAhB,WACA9pD,EAAA,GACAnN,KAAAiG,QAAAkL,gBAAAkqD,GAAAC,GAAA3F,EAAA6F,GAAA,OAAAA,IAEA,QAAAt6D,EAAA,EAAqBA,EAAAs6D,EAAet6D,IACpCiM,GAAAnN,KAAAm4D,WAAAxC,EAAAz0D,IAMA,OAHAlB,KAAAiG,QAAAkL,gBAAAkqD,EAAAC,GAAA3F,EAAA6F,GAAA,QAAAruD,GAAAnN,KAAAm4D,WAAAxC,EAAA6F,KACAx7D,KAAAw4D,aAAArrD,GAAAnN,KAAAs4D,UAAA,EAAAt4D,KAAA64D,WAAA74D,KAAA64D,YACA74D,KAAAs4D,WAAAnrD,GAAAnN,KAAA44D,eACAzrD,GAGAnN,KAAAy7D,cAAA,SAAAlyD,EAAAE,GACA,IAEAiyD,EAFAjlD,EAAAzW,KAAAi4D,QACAtC,EAAAl/C,EAAAwgD,WAEA0E,EAAA,GACArmC,EAAA,EACAsmC,EAAArgD,KAAA5J,IAAApI,EAAAE,GAAAzJ,KAAAw4D,WACAqD,EAAAtgD,KAAA3J,IAAArI,EAAAE,GAAAzJ,KAAAw4D,WACAsD,GAAA,EACAC,GAAA,EACApkB,EAAA,EACA33C,KAAAw4D,aAAAljC,GAAAt1B,KAAAs4D,UAAA,EAAAt4D,KAAA64D,WAAA74D,KAAA64D,YAEA,QAAAjB,EAAAoE,EAAA,EAAkCA,EAAArG,EAAAt0D,OAAwB26D,IAC1DpE,EAAAnhD,EAAAugD,kBAAAgF,GACAN,EAAA/F,EAAAqG,IACAF,EAAAlE,GAAAgE,GAAAhE,EAAAiE,KAEAE,EACApkB,EAAAriB,GACSwmC,GAAAC,GACTJ,EAAA/tD,KAAA,CACAT,KAAAwqC,EACAnvC,MAAA8sB,EAAAqiB,IAIAriB,GAAAt1B,KAAAm4D,WAAAuD,GACAK,EAAAD,EAUA,GAPAA,GAAAE,IAAArG,EAAAt0D,QACAs6D,EAAA/tD,KAAA,CACAT,KAAAwqC,EACAnvC,MAAA8sB,EAAAqiB,IAIA33C,KAAAs4D,SACA,QAAAp3D,EAAA,EAAuBA,EAAAy6D,EAAAt6D,OAAuBH,IAC9Cy6D,EAAAz6D,GAAAiM,MAAAnN,KAAA44D,cAIA,OAAA+C,GAGA37D,KAAAi8D,YAAA,SAAAC,GACAl8D,KAAAs4D,WAAA4D,GAAAl8D,KAAA44D,eACA,IAAA2C,EAAA,EAEAjmC,GADA4mC,EAAA3gD,KAAA3J,IAAAsqD,EAAA,GACA,GACAV,EAAA,EACA7F,EAAA31D,KAAAi4D,QAAAhB,WACAkF,EAAAn8D,KAAAm4D,WAAAxC,EAAA6F,IAGA,IAFAx7D,KAAAw4D,aAAA0D,GAAAl8D,KAAAs4D,UAAA,EAAAt4D,KAAA64D,WAAA74D,KAAA64D,YAEAqD,EAAA5mC,EAAA6mC,EAAA,IAGA,GAFA7mC,GAAA6mC,EAEAX,IAAA7F,EAAAt0D,OAAA,GACA86D,EAAA,EACA,MAGAA,EAAAn8D,KAAAm4D,WAAAxC,IAAA6F,IAgBA,OAbAA,EAAA,GAAA7F,EAAA6F,EAAA,UAAA7F,EAAA6F,GAAA,OACAU,EAAA5mC,GAAAkmC,IACAD,EAAAv7D,KAAAi4D,QAAAjB,kBAAAwE,IACOA,EAAA,GAAA7F,EAAA6F,EAAA,UAAA7F,EAAA6F,GAAA,MACPD,EAAA,GAAAW,EAAA5mC,EAAAt1B,KAAAi4D,QAAAjB,kBAAAwE,GAAAx7D,KAAAi4D,QAAAjB,kBAAAwE,EAAA,IACOx7D,KAAAs4D,UAAAkD,IAAA7F,EAAAt0D,OAAA,OAAA86D,GAAAxG,EAAA6F,EAAA,WAAAx7D,KAAAs4D,UAAA,IAAAkD,GAAA7F,EAAA6F,GAAA,MACPD,EAAA,EAAAv7D,KAAAi4D,QAAAjB,kBAAAwE,IAEAA,EAAA,GAAA7F,EAAA6F,EAAA,cAAAW,GAAAX,IACAD,EAAAv7D,KAAAi4D,QAAAjB,kBAAAwE,IAGA,IAAAD,GAAAv7D,KAAAs4D,UAAAiD,IACAA,EAAAv7D,KAAAw4D,cAEGl3D,KAAA02D,EAAAp3D,WACHa,EAAAu2D,gBAEAh2D,IAAAsM,OAAA,yHAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAizC,EAAAjzC,EAAA,cAEAqM,EAAArM,EAAA,uBAAAqM,aAEAtM,EAAAC,EAAA,WAAAD,MAEAk6D,EAAA,SAAAn2D,GACAjG,KAAAiG,UACAjG,KAAAkgC,IAAAj6B,EAAAwK,cACAzQ,KAAAslD,iBACAtlD,KAAAqN,OAAArN,KAAAq8D,KAAAr8D,KAAAkgC,IAAAo8B,aAAA,KACAt8D,KAAAk9C,OAAAl9C,KAAAkgC,IAAAo8B,aAAA,KACAt8D,KAAAu8D,SAAA,EACA,IAAA/oD,EAAAxT,KACAA,KAAAqN,OAAA/H,GAAA,kBAAA+Q,GACA7C,EAAAgpD,gBAAA,EACAhpD,EAAA+oD,SAAA/oD,EAAA3D,MAAA,gBACA2D,EAAAipD,UAAAjpD,EAAA+oD,SAAA/oD,EAAA3D,MAAA,mBACA2D,EAAAkpD,4BAAArmD,EAAAm2C,IAAAxb,QAAA36B,EAAA3U,MAAAsvC,SAAAx9B,EAAAmpD,eAAA,QAEA38D,KAAAk9C,OAAA53C,GAAA,oBACAkO,EAAAopD,gBAAA,EACAppD,EAAAipD,UAAAjpD,EAAA+oD,SAAA/oD,EAAA3D,MAAA,uBAIA,WACAtB,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAAyyC,QAAA,WACA,OAAAzyC,KAAAy8D,UAAAz8D,KAAAk9C,OAAAnM,KAAA/wC,KAAAq8D,KAAAtrB,KAAA/wC,KAAAk9C,OAAAlM,QAAAhxC,KAAAq8D,KAAArrB,QAGAhxC,KAAAgyC,YAAA,WACA,OAAAhyC,KAAAy8D,UAAAz8D,KAAAk9C,OAAAnM,KAAA/wC,KAAAqN,OAAA0jC,KAGA/wC,KAAA68D,UAAA,WACA,OAAA78D,KAAAq8D,KAAAS,eAGA98D,KAAAm+C,mBAAA,SAAApN,EAAAC,GACAhxC,KAAAy8D,UAAA,EACAz8D,KAAAk9C,OAAA0D,YAAA7P,EAAAC,IAGAhxC,KAAA+8D,UAAA/8D,KAAAi7D,mBAAA,WACA,OAAAj7D,KAAAy8D,SAAAz8D,KAAAg9D,mBACAh9D,KAAAk9C,OAAA4f,eAGA98D,KAAAg9D,iBAAA,WACA,OAAAh9D,KAAAq8D,KAAAS,eAGA98D,KAAAi9D,YAAA,WACA,IAAA/f,EAAAl9C,KAAAk9C,OACAmf,EAAAr8D,KAAAq8D,KACA,OAAAnf,EAAAnM,IAAAsrB,EAAAtrB,KAAAmM,EAAAnM,KAAAsrB,EAAAtrB,KAAAmM,EAAAlM,OAAAqrB,EAAArrB,QAGAhxC,KAAA03C,SAAA,WACA,IAAAwF,EAAAl9C,KAAAk9C,OACAmf,EAAAr8D,KAAAq8D,KACA,OAAAr8D,KAAAy8D,SAAAv6D,EAAAqwC,WAAA8pB,KACAr8D,KAAAi9D,cAAA/6D,EAAAqwC,WAAA8pB,EAAAnf,GAAAh7C,EAAAqwC,WAAA2K,EAAAmf,IAGAr8D,KAAAslD,eAAA,WACAtlD,KAAAy8D,WACAz8D,KAAAy8D,UAAA,EAEAz8D,KAAA6P,MAAA,qBAIA7P,KAAAy5C,UAAA,WACAz5C,KAAAk9D,cAAA,IAAAzkD,OAAAC,UAAAD,OAAAC,YAGA1Y,KAAAuqD,SAAAvqD,KAAAw3C,kBAAA,SAAA5tC,EAAA0pC,GACA,IAAA5uB,EAAA4uB,EAAA1pC,EAAAqnC,IAAArnC,EAAA8a,MACAusB,EAAAqC,EAAA1pC,EAAA8a,MAAA9a,EAAAqnC,IACAjxC,KAAAk9D,cAAAx4C,EAAAqsB,IAAArsB,EAAAssB,OAAAC,EAAAF,IAAAE,EAAAD,SAGAhxC,KAAAk9D,cAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAv9D,KAAAy8D,SACAe,EAAAx9D,KAAA09C,kBACA19C,KAAAu8D,SAAA,EACAv8D,KAAAw8D,eAAAx8D,KAAA48D,gBAAA,EACA58D,KAAAk9C,OAAA0D,YAAAuc,EAAAC,GACAp9D,KAAAqN,OAAAuzC,YAAAyc,EAAAC,GACAt9D,KAAAy8D,UAAAv6D,EAAA+wC,cAAAjzC,KAAAk9C,OAAAl9C,KAAAqN,QACArN,KAAAu8D,SAAA,EACAv8D,KAAAw8D,gBAAAx8D,KAAA6P,MAAA,iBACA7P,KAAAw8D,gBAAAx8D,KAAA48D,gBAAAW,GAAAv9D,KAAAy8D,UAAAe,IAAAx9D,KAAA6P,MAAA,oBAGA7P,KAAAy9D,eAAA,SAAAC,GACA,IAAArB,EAAAr8D,KAAAq8D,KACAr8D,KAAAy8D,UAAAz8D,KAAAm+C,mBAAAke,EAAAtrB,IAAAsrB,EAAArrB,QACA0sB,EAAAp8D,KAAAtB,OAGAA,KAAAmiD,SAAA,SAAApR,EAAAC,GACAhxC,KAAAy9D,eAAA,WACAz9D,KAAA29D,aAAA5sB,EAAAC,MAIAhxC,KAAAg+C,iBAAA,SAAA91C,GACAlI,KAAAy9D,eAAA,WACAz9D,KAAAukD,qBAAAr8C,MAIAlI,KAAA49D,OAAA,SAAA7sB,EAAAC,GACAhxC,KAAAslD,iBACAtlD,KAAA29D,aAAA5sB,EAAAC,IAGAhxC,KAAAu9C,eAAA,SAAAr1C,GACAlI,KAAAslD,iBACAtlD,KAAAukD,qBAAAr8C,IAGAlI,KAAA69D,SAAA,WACA79D,KAAAy9D,eAAAz9D,KAAA89D,eAGA99D,KAAA+9D,WAAA,WACA/9D,KAAAy9D,eAAAz9D,KAAAg+D,iBAGAh+D,KAAAi+D,YAAA,WACAj+D,KAAAy9D,eAAAz9D,KAAAk+D,kBAGAl+D,KAAAm+D,WAAA,WACAn+D,KAAAy9D,eAAAz9D,KAAAo+D,iBAGAp+D,KAAAq+D,gBAAA,WACAr+D,KAAAy9D,eAAAz9D,KAAAs+D,sBAGAt+D,KAAAu+D,cAAA,WACAv+D,KAAAy9D,eAAAz9D,KAAAw+D,oBAGAx+D,KAAAy+D,cAAA,WACAz+D,KAAAy9D,eAAAz9D,KAAA0+D,oBAGA1+D,KAAA2+D,gBAAA,WACA3+D,KAAAy9D,eAAAz9D,KAAA4+D,sBAGA5+D,KAAA6+D,gBAAA,WACA7+D,KAAAy9D,eAAAz9D,KAAA8+D,sBAGA9+D,KAAA++D,eAAA,WACA/+D,KAAAy9D,eAAAz9D,KAAAg/D,qBAGAh/D,KAAAs/C,aAAA,SAAAvO,EAAAC,GACA,uBAAAA,EAAA,CACA,IAAA3jC,EAAA0jC,GAAA/wC,KAAAq8D,KACAtrB,EAAA1jC,EAAA0jC,IACAC,EAAA3jC,EAAA2jC,OAGA,OAAAhxC,KAAAiG,QAAAq5C,aAAAvO,EAAAC,IAGAhxC,KAAAkqD,WAAA,WACAlqD,KAAAw3C,kBAAAx3C,KAAAs/C,iBAGAt/C,KAAAi/D,YAAA,WACA,IAAA5xD,EAAArN,KAAA68D,YACAjzD,EAAA5J,KAAAiG,QAAAi5D,cAAA7xD,EAAA0jC,IAAA1jC,EAAA2jC,QACAhxC,KAAAw3C,kBAAA5tC,IAGA5J,KAAAu/C,aAAA,SAAAxO,EAAAouB,GACA,IACAC,EADAC,EAAA,iBAAAtuB,IAAA/wC,KAAAq8D,KAAAtrB,IAEAuuB,EAAAt/D,KAAAiG,QAAAs5D,YAAAF,GASA,OAPAC,GACAD,EAAAC,EAAA56C,MAAAqsB,IACAquB,EAAAE,EAAAruB,IAAAF,KAEAquB,EAAAC,GAGA,IAAAF,EAAA,IAAAj9D,EAAAm9D,EAAA,EAAAD,EAAAp/D,KAAAiG,QAAA2xC,QAAAwnB,GAAA/9D,QAA+G,IAAAa,EAAAm9D,EAAA,EAAAD,EAAA,MAG/Gp/D,KAAAw/D,WAAA,WACAx/D,KAAAw3C,kBAAAx3C,KAAAu/C,iBAGAv/C,KAAA89D,aAAA,WACA99D,KAAAy/D,cAAA,MAGAz/D,KAAAg+D,eAAA,WACAh+D,KAAAy/D,aAAA,MAGAz/D,KAAA0/D,qBAAA,SAAAryD,EAAA1B,EAAAo0C,GACA,IAAAr7B,EAAArX,EAAA2jC,OACAC,EAAA5jC,EAAA2jC,OAAArlC,EAOA,OALAo0C,EAAA,IACAr7B,EAAArX,EAAA2jC,OAAArlC,EACAslC,EAAA5jC,EAAA2jC,QAGAhxC,KAAAiG,QAAA05D,UAAAtyD,IAAArN,KAAAkgC,IAAA0X,QAAAvqC,EAAA0jC,KAAA1qB,MAAA3B,EAAAusB,GAAAvpC,MAAA,KAAArG,OAAA,GAAAsK,GAGA3L,KAAAo+D,eAAA,WACA,IACAlM,EADA7kD,EAAArN,KAAAq8D,KAAAS,cAGA,GAAA5K,EAAAlyD,KAAAiG,QAAAksD,UAAA9kD,EAAA0jC,IAAA1jC,EAAA2jC,QAAA,GACAhxC,KAAA29D,aAAAzL,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,aACO,OAAA3jC,EAAA2jC,OACP3jC,EAAA0jC,IAAA,GACA/wC,KAAA29D,aAAAtwD,EAAA0jC,IAAA,EAAA/wC,KAAAkgC,IAAA0X,QAAAvqC,EAAA0jC,IAAA,GAAA1vC,YAEO,CACP,IAAAsK,EAAA3L,KAAAiG,QAAA8K,aAEA/Q,KAAA0/D,qBAAAryD,EAAA1B,GAAA,KAAA3L,KAAAiG,QAAA25D,4BACA5/D,KAAAy/D,aAAA,GAAA9zD,GAEA3L,KAAAy/D,aAAA,QAKAz/D,KAAAk+D,gBAAA,WACA,IACAhM,EADA7kD,EAAArN,KAAAq8D,KAAAS,cAGA,GAAA5K,EAAAlyD,KAAAiG,QAAAksD,UAAA9kD,EAAA0jC,IAAA1jC,EAAA2jC,OAAA,GACAhxC,KAAA29D,aAAAzL,EAAAjhB,IAAAF,IAAAmhB,EAAAjhB,IAAAD,aACO,GAAAhxC,KAAAq8D,KAAArrB,QAAAhxC,KAAAkgC,IAAA0X,QAAA53C,KAAAq8D,KAAAtrB,KAAA1vC,OACPrB,KAAAq8D,KAAAtrB,IAAA/wC,KAAAkgC,IAAAsiB,YAAA,GACAxiD,KAAA29D,aAAA39D,KAAAq8D,KAAAtrB,IAAA,SAEO,CACP,IAAAplC,EAAA3L,KAAAiG,QAAA8K,aACA1D,EAAArN,KAAAq8D,KAEAr8D,KAAA0/D,qBAAAryD,EAAA1B,EAAA,KAAA3L,KAAAiG,QAAA25D,4BACA5/D,KAAAy/D,aAAA,EAAA9zD,GAEA3L,KAAAy/D,aAAA,OAKAz/D,KAAAs+D,oBAAA,WACA,IAAAvtB,EAAA/wC,KAAAq8D,KAAAtrB,IACAC,EAAAhxC,KAAAq8D,KAAArrB,OACAyR,EAAAziD,KAAAiG,QAAA28C,oBAAA7R,EAAAC,GACA6uB,EAAA7/D,KAAAiG,QAAA65D,yBAAArd,EAAA,GAEAsd,EADA//D,KAAAiG,QAAA+5D,eAAAjvB,EAAA,KAAA8uB,EAAA9uB,IAAA8uB,EAAA7uB,QACA75B,MAAA,QACA4oD,EAAA,GAAA1+D,QAAA2vC,GAAAhxC,KAAAiG,QAAAg6D,0BAAAJ,EAAA7uB,QAAA+uB,EAAA,GAAA1+D,QACArB,KAAAukD,qBAAAsb,IAGA7/D,KAAAw+D,kBAAA,WACA,IAAAnC,EAAAr8D,KAAAq8D,KACA9+C,EAAAvd,KAAAiG,QAAAi6D,iCAAA7D,EAAAtrB,IAAAsrB,EAAArrB,QAEA,GAAAhxC,KAAAq8D,KAAArrB,QAAAzzB,EAAAyzB,OAAA,CACA,IAAAvzB,EAAAzd,KAAAiG,QAAA2xC,QAAAr6B,EAAAwzB,KAEA,GAAAxzB,EAAAyzB,QAAAvzB,EAAApc,OAAA,CACA,IAAA8+D,EAAA1iD,EAAA2iD,OAAA,QACAD,EAAA,IAAA5iD,EAAAyzB,OAAAmvB,IAIAngE,KAAA29D,aAAApgD,EAAAwzB,IAAAxzB,EAAAyzB,SAGAhxC,KAAA0+D,kBAAA,WACA,IAAA3tB,EAAA/wC,KAAAkgC,IAAAsiB,YAAA,EACAxR,EAAAhxC,KAAAkgC,IAAA0X,QAAA7G,GAAA1vC,OACArB,KAAA29D,aAAA5sB,EAAAC,IAGAhxC,KAAA4+D,oBAAA,WACA5+D,KAAA29D,aAAA,MAGA39D,KAAAqgE,wBAAA,WACA,IAAAtvB,EAAA/wC,KAAAq8D,KAAAtrB,IACAC,EAAAhxC,KAAAq8D,KAAArrB,OACAvzB,EAAAzd,KAAAkgC,IAAA0X,QAAA7G,GACAuvB,EAAA7iD,EAAAvE,UAAA83B,GACAhxC,KAAAiG,QAAAs6D,WAAAroC,UAAA,EACAl4B,KAAAiG,QAAAu6D,QAAAtoC,UAAA,EACA,IAAAg6B,EAAAlyD,KAAAiG,QAAAksD,UAAAphB,EAAAC,EAAA,GAEA,GAAAkhB,EACAlyD,KAAA29D,aAAAzL,EAAAjhB,IAAAF,IAAAmhB,EAAAjhB,IAAAD,YADA,CAWA,GANAhxC,KAAAiG,QAAAs6D,WAAAx5D,KAAAu5D,KACAtvB,GAAAhxC,KAAAiG,QAAAs6D,WAAAroC,UACAl4B,KAAAiG,QAAAs6D,WAAAroC,UAAA,EACAooC,EAAA7iD,EAAAvE,UAAA83B,IAGAA,GAAAvzB,EAAApc,OAIA,OAHArB,KAAA29D,aAAA5sB,EAAAtzB,EAAApc,QACArB,KAAAk+D,uBACAntB,EAAA/wC,KAAAkgC,IAAAsiB,YAAA,GAAAxiD,KAAA8+D,uBAIA9+D,KAAAiG,QAAAu6D,QAAAz5D,KAAAu5D,KACAtvB,GAAAhxC,KAAAiG,QAAAu6D,QAAAtoC,UACAl4B,KAAAiG,QAAAu6D,QAAAtoC,UAAA,GAGAl4B,KAAA29D,aAAA5sB,EAAAC,KAGAhxC,KAAAygE,uBAAA,WACA,IAEAvO,EAFAnhB,EAAA/wC,KAAAq8D,KAAAtrB,IACAC,EAAAhxC,KAAAq8D,KAAArrB,OAGA,GAAAkhB,EAAAlyD,KAAAiG,QAAAksD,UAAAphB,EAAAC,GAAA,GACAhxC,KAAA29D,aAAAzL,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,YADA,CAKA,IAAA7Y,EAAAn4B,KAAAiG,QAAAy6D,gBAAA3vB,EAAAC,GAAA,GAEA,MAAA7Y,IACAA,EAAAn4B,KAAAkgC,IAAA0X,QAAA7G,GAAA73B,UAAA,EAAA83B,IAGA,IAAA2vB,EAAAvrB,EAAA/B,cAAAlb,GAUA,GATAn4B,KAAAiG,QAAAs6D,WAAAroC,UAAA,EACAl4B,KAAAiG,QAAAu6D,QAAAtoC,UAAA,EAEAl4B,KAAAiG,QAAAs6D,WAAAx5D,KAAA45D,KACA3vB,GAAAhxC,KAAAiG,QAAAs6D,WAAAroC,UACAyoC,IAAAt6C,MAAArmB,KAAAiG,QAAAs6D,WAAAroC,WACAl4B,KAAAiG,QAAAs6D,WAAAroC,UAAA,GAGA8Y,GAAA,EAIA,OAHAhxC,KAAA29D,aAAA5sB,EAAA,GACA/wC,KAAAo+D,sBACArtB,EAAA,GAAA/wC,KAAAg/D,sBAIAh/D,KAAAiG,QAAAu6D,QAAAz5D,KAAA45D,KACA3vB,GAAAhxC,KAAAiG,QAAAu6D,QAAAtoC,UACAl4B,KAAAiG,QAAAu6D,QAAAtoC,UAAA,GAGAl4B,KAAA29D,aAAA5sB,EAAAC,KAGAhxC,KAAA4gE,mBAAA,SAAAN,GACA,IACAzgC,EADAj4B,EAAA,EAEAi5D,EAAA,KACAL,EAAAxgE,KAAAiG,QAAAu6D,QAGA,GAFAA,EAAAtoC,UAAA,EAEAl4B,KAAAiG,QAAAu6D,QAAAz5D,KAAAu5D,GACA14D,EAAA5H,KAAAiG,QAAAu6D,QAAAtoC,cACO,CACP,MAAA2H,EAAAygC,EAAA14D,KAAAi5D,EAAAjrD,KAAAiqB,IACAj4B,IAGA,GAAAA,EAAA,EAGA,IAFA44D,EAAAtoC,UAAA,GAEA2H,EAAAygC,EAAA14D,MAAA44D,EAAA5qD,KAAAiqB,IAIA,GAHA2gC,EAAAtoC,UAAA,EACAtwB,IAEAi5D,EAAAjrD,KAAAiqB,GAAA,CACA,GAAAj4B,EAAA,GACAA,IACA,MAEA,MAAAi4B,EAAAygC,EAAA14D,KAAAi5D,EAAAjrD,KAAAiqB,IACAj4B,IAGA,GAAAA,EAAA,SAQA,OADA44D,EAAAtoC,UAAA,EACAtwB,GAGA5H,KAAA8gE,yBAAA,WACA,IAAA/vB,EAAA/wC,KAAAq8D,KAAAtrB,IACAC,EAAAhxC,KAAAq8D,KAAArrB,OACAvzB,EAAAzd,KAAAkgC,IAAA0X,QAAA7G,GACAuvB,EAAA7iD,EAAAvE,UAAA83B,GACAkhB,EAAAlyD,KAAAiG,QAAAksD,UAAAphB,EAAAC,EAAA,GACA,GAAAkhB,EAAA,OAAAlyD,KAAA29D,aAAAzL,EAAAjhB,IAAAF,IAAAmhB,EAAAjhB,IAAAD,QAEA,GAAAA,GAAAvzB,EAAApc,OAAA,CACA,IAAA+1B,EAAAp3B,KAAAkgC,IAAAsiB,YAEA,GACAzR,IACAuvB,EAAAtgE,KAAAkgC,IAAA0X,QAAA7G,SACSA,EAAA3Z,GAAA,QAAAxhB,KAAA0qD,IAET,OAAA1qD,KAAA0qD,OAAA,IACAtvB,EAAA,EAGA,IAAAppC,EAAA5H,KAAA4gE,mBAAAN,GACAtgE,KAAA29D,aAAA5sB,EAAAC,EAAAppC,IAGA5H,KAAA+gE,wBAAA,WACA,IAEA7O,EAFAnhB,EAAA/wC,KAAAq8D,KAAAtrB,IACAC,EAAAhxC,KAAAq8D,KAAArrB,OAEA,GAAAkhB,EAAAlyD,KAAAiG,QAAAksD,UAAAphB,EAAAC,GAAA,UAAAhxC,KAAA29D,aAAAzL,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,QACA,IAAAvzB,EAAAzd,KAAAiG,QAAA2xC,QAAA7G,GAAA73B,UAAA,EAAA83B,GAEA,OAAAA,EAAA,CACA,GACAD,IACAtzB,EAAAzd,KAAAkgC,IAAA0X,QAAA7G,SACSA,EAAA,WAAAn7B,KAAA6H,IAETuzB,EAAAvzB,EAAApc,OACA,OAAAuU,KAAA6H,OAAA,IAGA,IAAAkjD,EAAAvrB,EAAA/B,cAAA51B,GACA7V,EAAA5H,KAAA4gE,mBAAAD,GACA,OAAA3gE,KAAA29D,aAAA5sB,EAAAC,EAAAppC,IAGA5H,KAAA8+D,oBAAA,WACA9+D,KAAAiG,QAAA+6D,iBAAAhhE,KAAAqgE,0BAAwErgE,KAAA8gE,4BAGxE9gE,KAAAg/D,mBAAA,WACAh/D,KAAAiG,QAAA+6D,iBAAAhhE,KAAAygE,yBAAuEzgE,KAAA+gE,2BAGvE/gE,KAAAy/D,aAAA,SAAAwB,EAAA5jD,GACA,IACA6jD,EADAC,EAAAnhE,KAAAiG,QAAA6sC,yBAAA9yC,KAAAq8D,KAAAtrB,IAAA/wC,KAAAq8D,KAAArrB,QAGA,IAAA3zB,IACA,IAAA4jD,IACAjhE,KAAAiG,QAAAi1D,aAAAlC,UAAAmI,EAAApwB,IAAA/wC,KAAAq8D,KAAAtrB,MACAmwB,EAAAlhE,KAAAiG,QAAAi1D,aAAAE,WAAA+F,EAAAnwB,QACAmwB,EAAAnwB,OAAAz1B,KAAA6nB,MAAA89B,EAAAlhE,KAAAiG,QAAAi1D,aAAA/C,WAAA,KAEA+I,EAAAC,EAAAnwB,OAAAhxC,KAAAiG,QAAAi1D,aAAA/C,WAAA,IAIAn4D,KAAA28D,eAAAwE,EAAAnwB,OAAAhxC,KAAA28D,eAAwE38D,KAAA28D,eAAAwE,EAAAnwB,QAGxE,IAAAowB,EAAAphE,KAAAiG,QAAA65D,yBAAAqB,EAAApwB,IAAAkwB,EAAAE,EAAAnwB,OAAAkwB,GAEA,IAAAD,GAAA,IAAA5jD,GAAA+jD,EAAArwB,MAAA/wC,KAAAq8D,KAAAtrB,KAAAqwB,EAAApwB,SAAAhxC,KAAAq8D,KAAArrB,QACAhxC,KAAAiG,QAAAo7D,aAAArhE,KAAAiG,QAAAo7D,YAAAD,EAAArwB,OACAqwB,EAAArwB,IAAA,GAAAkwB,EAAA,IAAAG,EAAArwB,MAIA/wC,KAAA29D,aAAAyD,EAAArwB,IAAAqwB,EAAApwB,OAAA3zB,EAAA,IAAAA,IAGArd,KAAAukD,qBAAA,SAAA/5C,GACAxK,KAAA29D,aAAAnzD,EAAAumC,IAAAvmC,EAAAwmC,SAGAhxC,KAAA29D,aAAA,SAAA5sB,EAAAC,EAAAswB,GACA,IAAApP,EAAAlyD,KAAAiG,QAAAksD,UAAAphB,EAAAC,EAAA,GAEAkhB,IACAnhB,EAAAmhB,EAAAxtC,MAAAqsB,IACAC,EAAAkhB,EAAAxtC,MAAAssB,QAGAhxC,KAAA08D,4BAAA,EACA,IAAAj/C,EAAAzd,KAAAiG,QAAA2xC,QAAA7G,GAEA,kBAAAn7B,KAAA6H,EAAAjB,OAAAw0B,KAAAvzB,EAAAjB,OAAAw0B,EAAA,KACAhxC,KAAAq8D,KAAAtrB,QAAA/wC,KAAAq8D,KAAArrB,UAAA,EAAAA,GAAA,EAAwFA,GAAA,GAGxFhxC,KAAAq8D,KAAAzb,YAAA7P,EAAAC,GACAhxC,KAAA08D,4BAAA,EACA4E,IAAAthE,KAAA28D,eAAA,OAGA38D,KAAAuhE,mBAAA,SAAAxwB,EAAAC,EAAAswB,GACA,IAAAp5D,EAAAlI,KAAAiG,QAAA65D,yBAAA/uB,EAAAC,GACAhxC,KAAA29D,aAAAz1D,EAAA6oC,IAAA7oC,EAAA8oC,OAAAswB,IAGAthE,KAAAszD,OAAA,WACAtzD,KAAAq8D,KAAA/I,SACAtzD,KAAAk9C,OAAAoW,SACAtzD,KAAAiG,QAAAjG,KAAAkgC,IAAA,MAGAlgC,KAAA6lD,kBAAA,SAAAj8C,GACA5J,KAAAw3C,kBAAA5tC,IAAAyD,QAAAzD,EAAA8a,OACA1kB,KAAA28D,eAAA/yD,EAAA43D,eAAAxhE,KAAA28D,gBAGA38D,KAAAolD,gBAAA,SAAAx7C,GACA,IAAA63D,EAAAzhE,KAAA03C,WAaA,OAXA9tC,GACAA,EAAA8a,MAAAssB,OAAAywB,EAAA/8C,MAAAssB,OACApnC,EAAA8a,MAAAqsB,IAAA0wB,EAAA/8C,MAAAqsB,IACAnnC,EAAAqnC,IAAAD,OAAAywB,EAAAxwB,IAAAD,OACApnC,EAAAqnC,IAAAF,IAAA0wB,EAAAxwB,IAAAF,KAEAnnC,EAAA63D,EAGA73D,EAAAyD,OAAArN,KAAAi9D,cAAArzD,EAAA8a,MAAA9a,EAAAqnC,IACArnC,EAAA43D,cAAAxhE,KAAA28D,eACA/yD,GAGA5J,KAAA0hE,oBAAA,SAAAp2D,GACA,IAAAoZ,EAAA1kB,KAAA68D,YAEA,IACAvxD,EAAAtL,MACA,IAAAixC,EAAAjxC,KAAA68D,YACA,OAAA36D,EAAAqwC,WAAA7tB,EAAAusB,GACO,MAAA56B,GACP,OAAAnU,EAAAqwC,WAAA7tB,KACO,QACP1kB,KAAAukD,qBAAA7/B,KAIA1kB,KAAAmI,OAAA,WACA,GAAAnI,KAAA4sB,WACA,IAAAlW,EAAA1W,KAAA+sB,OAAAtW,IAAA,SAAAgrD,GACA,IAAAE,EAAAF,EAAA/uB,QAEA,OADAivB,EAAA1E,YAAAwE,EAAAp0D,QAAAo0D,EAAA/8C,MACAi9C,SAGAjrD,EAAA1W,KAAA03C,YACAulB,YAAAj9D,KAAAi9D,cAGA,OAAAvmD,GAGA1W,KAAAoI,SAAA,SAAAsO,GACA,QAAA7B,GAAA6B,EAAAgO,MAAA,CACA,GAAA1kB,KAAA4hE,WAAAlrD,EAAArV,OAAA,GACArB,KAAA6hE,cAAAnrD,EAAA,IAEA,QAAAxV,EAAAwV,EAAArV,OAAmCH,KAAK,CACxC,IAAAugE,EAAAv/D,EAAAqwC,WAAA77B,EAAAxV,GAAAwjB,MAAAhO,EAAAxV,GAAA+vC,KACAv6B,EAAAxV,GAAA+7D,cAAAwE,EAAAp0D,OAAAo0D,EAAA/8C,OACA1kB,KAAAisB,SAAAw1C,GAAA,GAGA,OAEA/qD,IAAA,GAIA1W,KAAA4hE,WAAA5hE,KAAA6hE,cAAAnrD,GACA1W,KAAAw3C,kBAAA9gC,IAAAumD,cAGAj9D,KAAA8B,QAAA,SAAA4U,GACA,IAAAA,EAAArV,QAAArB,KAAA4sB,aAAAlW,EAAArV,QAAArB,KAAA4sB,WAAA,SACA,IAAAlW,EAAArV,SAAArB,KAAA+sB,OAAA,OAAA/sB,KAAA03C,WAAA51C,QAAA4U,GAEA,QAAAxV,EAAAlB,KAAA+sB,OAAA1rB,OAAsCH,KACtC,IAAAlB,KAAA+sB,OAAA7rB,GAAAY,QAAA4U,EAAAxV,IAAA,SAGA,YAEGI,KAAA86D,EAAAx7D,WACHa,EAAA26D,cAEAp6D,IAAAsM,OAAA,qEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8hD,EAAAhuD,EAAA,YAEA2/D,EAAA,IAEAC,EAAA,SAAAC,GAKA,QAAAzsD,KAJAvV,KAAAiiE,OAAAD,EACAhiE,KAAAkiE,QAAA,GACAliE,KAAAmiE,cAAA,GAEAniE,KAAAiiE,OAAA,CAUA,IATA,IAAA11D,EAAAvM,KAAAiiE,OAAA1sD,GACA6sD,EAAA,GACAC,EAAA,EACAC,EAAAtiE,KAAAmiE,cAAA5sD,GAAA,CACAgtD,aAAA,QAEAC,EAAA,IACAC,EAAA,GAEAvhE,EAAA,EAAqBA,EAAAqL,EAAAlL,OAAkBH,IAAA,CACvC,IAAAwhE,EAAAn2D,EAAArL,GAGA,GAFAwhE,EAAAH,eAAAD,EAAAC,aAAAG,EAAAH,cACAG,EAAAC,kBAAAH,EAAA,MACA,MAAAE,EAAArqC,MAAA,CACAqqC,EAAArqC,iBAAA/jB,SAAAouD,EAAArqC,MAAAqqC,EAAArqC,MAAAlkB,WAAAkS,MAAA,OACA,IAAAu8C,EAAAF,EAAArqC,MACAwqC,EAAA,IAAAvuD,OAAA,OAAAsuD,EAAA,UAAA77D,KAAA,KAAA1F,OAAA,EAEAd,MAAAsG,QAAA67D,EAAAI,OACA,GAAAJ,EAAAI,MAAAzhE,QAAA,GAAAwhE,EACAH,EAAAI,MAAAJ,EAAAI,MAAA,GACWD,EAAA,GAAAH,EAAAI,MAAAzhE,QACXrB,KAAAstD,YAAA,qDACAoV,OACAK,WAAAF,EAAA,IAEAH,EAAAI,MAAAJ,EAAAI,MAAA,KAEAJ,EAAAM,WAAAN,EAAAI,MACAJ,EAAAI,MAAA,KACAJ,EAAAO,QAAAjjE,KAAAkjE,cAES,mBAAAR,EAAAI,OAAAJ,EAAAO,UACTP,EAAAO,QAAAJ,EAAA,EAAA7iE,KAAAmjE,YAA8DT,EAAAI,OAG9DD,EAAA,IACA,OAAAjtD,KAAA8sD,EAAArqC,OACAuqC,EAAAF,EAAArqC,MAAA9jB,QAAA,uBAAA4C,EAAAisD,GACA,YAAA3/C,SAAA2/C,EAAA,IAAAf,EAAA,MAGAQ,EAAA,EACAD,EAAA5iE,KAAAqjE,sBAAAX,EAAArqC,QAGAqqC,EAAAY,YAAA,iBAAAZ,EAAAI,OAAAL,EAAA70D,KAAA80D,IAGAJ,EAAAD,GAAAnhE,EACAmhE,GAAAQ,EACAT,EAAAx0D,KAAAg1D,GACAF,EAAAO,UAAAP,EAAAO,QAAA,OAGAb,EAAA/gE,SACAihE,EAAA,KACAF,EAAAx0D,KAAA,MAGA60D,EAAAhgE,QAAA,SAAAigE,GACAA,EAAAY,WAAAtjE,KAAAujE,qBAAAb,EAAArqC,MAAAmqC,IACOxiE,MACPA,KAAAkiE,QAAA3sD,GAAA,IAAAjB,OAAA,IAAA8tD,EAAAr6D,KAAA,eAAAy6D,MAIA,WACAxiE,KAAAwjE,kBAAA,SAAAhxD,GACAsvD,EAAA,EAAAtvD,GAGAxS,KAAAmjE,YAAA,SAAAhrC,GACA,IAAAhH,EAAAnxB,KAAAsjE,WAAAv8D,KAAAoxB,GAAA9R,MAAA,GACA+gC,EAAApnD,KAAA8iE,MAAAvhE,MAAAvB,KAAAmxB,GACA,qBAAAi2B,EAAA,QACA19C,KAAA09C,EACA1lD,MAAAy2B,IAIA,IAFA,IAAA9U,EAAA,GAEAniB,EAAA,EAAAk2B,EAAAgwB,EAAA/lD,OAAuCH,EAAAk2B,EAAOl2B,IAC9CiwB,EAAAjwB,KAAAmiB,IAAAhiB,QAAA,CACAqI,KAAA09C,EAAAlmD,GACAQ,MAAAyvB,EAAAjwB,KAIA,OAAAmiB,GAGArjB,KAAAkjE,aAAA,SAAA/qC,GACA,IAAAA,EAAA,SACA,IAAAhH,EAAAnxB,KAAAsjE,WAAAv8D,KAAAoxB,GACA,IAAAhH,EAAA,aAIA,IAHA,IAAA9N,EAAA,GACA+jC,EAAApnD,KAAAgjE,WAEA9hE,EAAA,EAAAk2B,EAAAgwB,EAAA/lD,OAAuCH,EAAAk2B,EAAOl2B,IAC9CiwB,EAAAjwB,EAAA,KAAAmiB,IAAAhiB,QAAA,CACAqI,KAAA09C,EAAAlmD,GACAQ,MAAAyvB,EAAAjwB,EAAA,KAIA,OAAAmiB,GAGArjB,KAAAqjE,sBAAA,SAAA7f,GAIA,OAHAA,EAAAjvC,QAAA,kDAAAsH,EAAA7S,GACA,OAAAA,EAAA,MAAA6S,KAKA7b,KAAAujE,qBAAA,SAAA/f,EAAAgf,GACA,OAAAhf,EAAA37C,QAAA,QACA,IAAA6qB,EAAA,EACA+wC,GAAA,EACAC,EAAA,GACAlgB,EAAAjvC,QAAA,gDAAA/B,EAAAs4B,EAAA64B,EAAAC,EAAAC,EAAAj8D,GAqBA,OApBA67D,EACAA,EAAA,KAAAI,EACWA,EACXJ,GAAA,EACWG,GACXlxC,GAAAgxC,EAAAhxC,QACAgxC,EAAAzyB,IAAArpC,EAAA,EACA87D,EAAAhxC,OAAA,GAGAA,KACWixC,IACXjxC,IAEA,GAAAixC,EAAAtiE,SACAqiE,EAAAhxC,QACAgxC,EAAAh/C,MAAA9c,IAIA4K,IAEA,MAAAkxD,EAAAzyB,KAAA,QAAAr7B,KAAA4tC,EAAA4W,OAAAsJ,EAAAzyB,QAAAuS,IAAAtqC,UAAA,EAAAwqD,EAAAh/C,OAAA8+B,EAAA4W,OAAAsJ,EAAAzyB,MAKA,MAFA,KAAAuS,EAAAhnC,OAAA,KAAAgnC,EAAA,IAAAA,GACA,KAAAA,EAAAhnC,OAAAgnC,EAAAniD,OAAA,KAAAmiD,GAAA,KACA,IAAAlvC,OAAAkvC,GAAAgf,GAAA,IAAAjuD,QAAA,UAGAvU,KAAA8jE,cAAA,SAAArmD,EAAAsmD,GACA,GAAAA,GAAA,iBAAAA,EAAA,CACA,IAAArxC,EAAAqxC,EAAA19C,MAAA,GAGA,UAFA09C,EAAArxC,EAAA,MAGAA,EAAAnL,QACAw8C,EAAArxC,EAAAnL,cAEOmL,EAAA,GAEP,IAAAsxC,EAAAD,GAAA,QACAx3D,EAAAvM,KAAAiiE,OAAA+B,GAEAz3D,IACAy3D,EAAA,QACAz3D,EAAAvM,KAAAiiE,OAAA+B,IAGA,IAAA1B,EAAAtiE,KAAAmiE,cAAA6B,GACAjV,EAAA/uD,KAAAkiE,QAAA8B,GACAjV,EAAA72B,UAAA,EAUA,IATA,IAAA/gB,EACAkM,EAAA,GACA6U,EAAA,EACA+rC,EAAA,EACAnB,EAAA,CACAp5D,KAAA,KACAhI,MAAA,IAGAyV,EAAA43C,EAAAhoD,KAAA0W,IAAA,CACA,IAAA/T,EAAA44D,EAAAC,aACAG,EAAA,KACAhhE,EAAAyV,EAAA,GACAvP,EAAAmnD,EAAA72B,UAEA,GAAAtwB,EAAAlG,EAAAL,OAAA62B,EAAA,CACA,IAAAgsC,EAAAzmD,EAAAvE,UAAAgf,EAAAtwB,EAAAlG,EAAAL,QAEAyhE,EAAAp5D,QACAo5D,EAAAphE,OAAAwiE,GAEApB,EAAAp5D,MAAA2Z,EAAAzV,KAAAk1D,GACAA,EAAA,CACAp5D,OACAhI,MAAAwiE,IAKA,QAAAhjE,EAAA,EAAuBA,EAAAiW,EAAA9V,OAAA,EAAsBH,IAC7C,QAAA2T,IAAAsC,EAAAjW,EAAA,IAEAwI,GADAg5D,EAAAn2D,EAAA+1D,EAAAphE,KACA+hE,QAAAP,EAAAO,QAAAvhE,EAAAsiE,EAAAtxC,EAAAjV,GAAkFilD,EAAAI,MAElFJ,EAAAyB,OAEAH,EADA,iBAAAtB,EAAAyB,KACAzB,EAAAyB,KAEAzB,EAAAyB,KAAAH,EAAAtxC,IAGAnmB,EAAAvM,KAAAiiE,OAAA+B,MAGAhkE,KAAAstD,YAAA,sBAAA0W,GACAA,EAAA,QACAz3D,EAAAvM,KAAAiiE,OAAA+B,IAGA1B,EAAAtiE,KAAAmiE,cAAA6B,GACA9rC,EAAAtwB,GACAmnD,EAAA/uD,KAAAkiE,QAAA8B,IACA9rC,UAAAtwB,GAGA86D,EAAA0B,iBAAAlsC,EAAAtwB,GACA,MAGA,GAAAlG,EACA,qBAAAgI,EACAg5D,IAAA,IAAAA,EAAA2B,OAAAvB,EAAAp5D,UAGAo5D,EAAAp5D,MAAA2Z,EAAAzV,KAAAk1D,GACAA,EAAA,CACAp5D,OACAhI,UALAohE,EAAAphE,cAQW,GAAAgI,EAAA,CACXo5D,EAAAp5D,MAAA2Z,EAAAzV,KAAAk1D,GACAA,EAAA,CACAp5D,KAAA,KACAhI,MAAA,IAGA,IAAAR,EAAA,EAA2BA,EAAAwI,EAAArI,OAAiBH,IAC5CmiB,EAAAzV,KAAAlE,EAAAxI,IAKA,GAAAg3B,GAAAza,EAAApc,OAAA,MAGA,GAFA62B,EAAAtwB,EAEAq8D,IAAAnC,EAAA,CAQA,IAPAmC,EAAA,EAAAxmD,EAAApc,QACArB,KAAAstD,YAAA,uCACAyW,aACAtmD,SAIAya,EAAAza,EAAApc,QACAyhE,EAAAp5D,MAAA2Z,EAAAzV,KAAAk1D,GACAA,EAAA,CACAphE,MAAA+b,EAAAvE,UAAAgf,KAAA,KACAxuB,KAAA,YAIAs6D,EAAA,QACAtxC,EAAA,GACA,OAUA,OANAowC,EAAAp5D,MAAA2Z,EAAAzV,KAAAk1D,GAEApwC,EAAArxB,OAAA,GACAqxB,EAAA,KAAAsxC,GAAAtxC,EAAAnZ,QAAA,OAAAyqD,GAGA,CACA3gD,SACA9W,MAAAmmB,EAAArxB,OAAAqxB,EAAAsxC,IAIAhkE,KAAAstD,YAAA6C,EAAA7C,cACGhsD,KAAAygE,EAAAnhE,WACHa,EAAAsgE,cAEA//D,IAAAsM,OAAA,uFAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA+mC,EAAAjzC,EAAA,eAEAmiE,EAAA,WACAtkE,KAAAukE,OAAA,CACA7/C,MAAA,EACAo+C,MAAA,aACAzqC,MAAA,MACO,CACPkqC,aAAA,YAKA,WACAviE,KAAAwkE,SAAA,SAAAxC,EAAA98C,GACA,GAAAA,EAQA,QAAA3P,KAAAysD,EAAA,CAGA,IAFA,IAAAz1D,EAAAy1D,EAAAzsD,GAEArU,EAAA,EAAuBA,EAAAqL,EAAAlL,OAAkBH,IAAA,CACzC,IAAAwhE,EAAAn2D,EAAArL,IAEAwhE,EAAAyB,MAAAzB,EAAAO,WACA,iBAAAP,EAAAyB,MACA,IAAAzB,EAAAyB,KAAAt8D,QAAAqd,KAAAw9C,EAAAyB,KAAAj/C,EAAAw9C,EAAAyB,MAGAzB,EAAA+B,WAAA,IAAA/B,EAAA+B,UAAA58D,QAAAqd,KAAAw9C,EAAA+B,UAAAv/C,EAAAw9C,EAAA+B,YAIAzkE,KAAAukE,OAAAr/C,EAAA3P,GAAAhJ,OAtBA,QAAAgJ,KAAAysD,EACAhiE,KAAAukE,OAAAhvD,GAAAysD,EAAAzsD,IAyBAvV,KAAA0kE,SAAA,WACA,OAAA1kE,KAAAukE,QAGAvkE,KAAA2kE,WAAA,SAAAC,EAAA1/C,EAAA2/C,EAAA5C,EAAA6C,GACA,IAAAH,EAAA,mBAAAC,GAAA,IAAAA,GAAAF,WAAAE,EAEA,GAAA3C,EACA,QAAA/gE,EAAA,EAAuBA,EAAA+gE,EAAA5gE,OAAmBH,IAC1C+gE,EAAA/gE,GAAAgkB,EAAA+8C,EAAA/gE,QAKA,QAAAqU,KAFA0sD,EAAA,GAEA0C,EACA1C,EAAAr0D,KAAAsX,EAAA3P,GAMA,GAFAvV,KAAAwkE,SAAAG,EAAAz/C,GAEA2/C,EACA,KAAAL,EAAAjkE,MAAAK,UAAAkkE,EAAA,kBAEA,IAAA5jE,EAAA,EAAuBA,EAAA+gE,EAAA5gE,OAAmBH,IAC1CsjE,EAAAjjE,MAAAvB,KAAAukE,OAAAtC,EAAA/gE,IAAAk0C,EAAAtB,SAAA+wB,IAIA7kE,KAAA+kE,UAAA/kE,KAAA+kE,QAAA,IACA/kE,KAAA+kE,QAAAn3D,KAAAsX,IAGAllB,KAAAglE,UAAA,WACA,OAAAhlE,KAAA+kE,SAGA,IAAAE,EAAA,SAAAjB,EAAAtxC,GAEA,OADA,SAAAsxC,GAAAtxC,EAAArxB,SAAAqxB,EAAAnZ,QAAAvZ,KAAAykE,UAAAT,GACAhkE,KAAAykE,WAGAS,EAAA,SAAAlB,EAAAtxC,GAEA,OADAA,EAAAnL,QACAmL,EAAAnL,SAAA,SAGAvnB,KAAAmlE,eAAA,WACA,IAAA/7D,EAAA,EACA44D,EAAAhiE,KAAAukE,OAuFAnkE,OAAAmE,KAAAy9D,GAAAv/D,QArFA,SAAA2iE,EAAA7vD,GACA,IAAAhJ,EAAAy1D,EAAAzsD,GACAhJ,EAAA84D,WAAA,EAEA,QAAAnkE,EAAA,EAAuBA,EAAAqL,EAAAlL,OAAkBH,IAAA,CACzC,IAAAwhE,EAAAn2D,EAAArL,GACAokE,EAAA,KAEA/kE,MAAAsG,QAAA67D,KACA4C,EAAA5C,EACAA,EAAA,KAGAA,EAAArqC,OAAAqqC,EAAAh+C,QACAg+C,EAAArqC,MAAAqqC,EAAAh+C,MACAg+C,EAAAyB,OAAAzB,EAAAyB,KAAA,IACAzB,EAAAyB,KAAAv2D,KAAA,CACA20D,aAAAG,EAAAI,OACa,CACbA,MAAAJ,EAAAI,MAAA,OACAzqC,MAAAqqC,EAAAzxB,KAAAyxB,EAAAh+C,MACAy/C,KAAA,QAEAzB,EAAAI,MAAAJ,EAAAI,MAAA,SACAJ,EAAA90D,MAAA,GAGA,IAAAu2D,EAAAzB,EAAAyB,MAAAzB,EAAA90D,KAEA,GAAAu2D,GAAA5jE,MAAAsG,QAAAs9D,GAAA,CACA,IAAAoB,EAAA7C,EAAA6C,UAEAA,IAEA,iBADAA,EAAA7C,EAAAI,SACAyC,IAAA,QACAvD,EAAAuD,QAAAn8D,MAGA44D,EAAAuD,GAAApB,EACAzB,EAAAyB,KAAAoB,EACAH,EAAAG,OACW,OAAApB,IACXzB,EAAAyB,KAAAe,GASA,GANAxC,EAAA90D,OACA80D,EAAA+B,UAAA/B,EAAAyB,MAAAzB,EAAA90D,KACA80D,EAAAyB,KAAAc,SACAvC,EAAA90D,MAGA80D,EAAAV,MACA,QAAAP,KAAAiB,EAAAV,MACAA,EAAAP,GACAO,EAAAP,GAAA7zD,MAAAo0D,EAAAP,GAAA7zD,KAAArM,MAAAygE,EAAAP,GAAAiB,EAAAV,MAAAP,IAEAO,EAAAP,GAAAiB,EAAAV,MAAAP,GAKA,IAAA+D,EAAA,iBAAA9C,MAAAvhC,QAQA,GANAqkC,IACAF,EAAA/kE,MAAAsG,QAAA2+D,KAAA/uD,IAAA,SAAAoF,GACA,OAAAmmD,EAAAnmD,KACemmD,EAAAwD,IAGfF,EAAA,CACA,IAAA9tD,EAAA,CAAAtW,EAAA,GAAAkZ,OAAAkrD,GACA5C,EAAA+C,WAAAjuD,IAAAwjB,OAAA,SAAAnf,GACA,OAAAA,EAAAsoD,QAEA53D,EAAAzE,OAAAvG,MAAAgL,EAAAiL,GACAtW,IAGAwhE,EAAAgD,aACAhD,EAAAI,MAAA9iE,KAAA2lE,oBAAAjD,EAAAgD,WAAAhD,EAAAH,cAAA,OAAAG,EAAAC,wBACAD,EAAAH,gBAKAviE,OAGAA,KAAA2lE,oBAAA,SAAAlvD,EAAA8rD,EAAAhqC,EAAAqtC,GACA,IAAAC,EAAAzlE,OAAAS,OAAA,MAiBA,OAhBAT,OAAAmE,KAAAkS,GAAAhU,QAAA,SAAAM,GACA,IAAAwX,EAAA9D,EAAA1T,GACAw1B,IAAAhe,IAAA0jB,eAGA,IAFA,IAAA6nC,EAAAvrD,EAAA7S,MAAAk+D,GAAA,KAEA1kE,EAAA4kE,EAAAzkE,OAAiCH,KACjC2kE,EAAAC,EAAA5kE,IAAA6B,IAIA3C,OAAAspB,eAAAm8C,KACAA,EAAAvlE,UAAA,MAGAN,KAAA+lE,aAAA3lE,OAAAmE,KAAAshE,GACApvD,EAAA,KACA8hB,EAAA,SAAA72B,GACA,OAAAmkE,EAAAnkE,EAAAu8B,gBAAAskC,GACO,SAAA7gE,GACP,OAAAmkE,EAAAnkE,IAAA6gE,IAIAviE,KAAAgmE,YAAA,WACA,OAAAhmE,KAAAimE,aAEG3kE,KAAAgjE,EAAA1jE,WACHa,EAAA6iE,uBAEAtiE,IAAAsM,OAAA,6DAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA63D,EAAA,WACAlmE,KAAAmmE,YAAA,KAGA,WACAnmE,KAAAoxB,IAAA,SAAAtmB,EAAAi+C,EAAA14C,GACA,YAAAwE,GACA,KAAA7U,KAAAmmE,YACAnmE,KAAAmmE,YAAA,GAEA,KAAAnmE,KAAAmmE,YAAAr7D,GACA9K,KAAAmmE,YAAAr7D,GAAA,GAGA9K,KAAAmmE,YAAAr7D,GAAAi+C,GAAA14C,GAGArQ,KAAAomE,cAAA,SAAAC,GACA,QAAA9wD,KAAA8wD,EACA,QAAAtd,KAAAsd,EAAA9wD,GACAvV,KAAAoxB,IAAA7b,EAAAwzC,EAAAsd,EAAA9wD,GAAAwzC,KAKA/oD,KAAAo6B,OAAA,SAAAtvB,GACA9K,KAAAmmE,aAAAnmE,KAAAmmE,YAAAr7D,WACA9K,KAAAmmE,YAAAr7D,IAIA9K,KAAAsmE,QAAA,SAAApjE,EAAA83B,GACA,uBAAA93B,EACA,IAAAmjE,GAAA,IAAAnjE,GAAAqjE,cAAAvrC,QAEAqrC,EAAAnjE,EAAAqjE,cAAAvrC,GAGAh7B,KAAAomE,cAAAC,IAGArmE,KAAAumE,cAAA,SAAAvrC,GACA,GAAAA,EAEO,CAGP,IAFA,IAAA2I,EAAA,GAEAziC,EAAA,EAAuBA,EAAA85B,EAAA35B,OAAmBH,IAC1ClB,KAAAmmE,YAAAnrC,EAAA95B,MACAyiC,EAAA3I,EAAA95B,IAAAlB,KAAAmmE,YAAAnrC,EAAA95B,KAIA,OAAAyiC,EAVA,OAAA3jC,KAAAmmE,eAaG7kE,KAAA4kE,EAAAtlE,WACHa,EAAAykE,cAEAlkE,IAAAsM,OAAA,yEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,WAAAD,MAEAskE,EAAA,SAAAvgE,EAAAwgE,EAAAC,GACA1mE,KAAA2mE,SAAA1gE,EACAjG,KAAA4mE,KAAAH,EACAzmE,KAAA6mE,WAAA5gE,EAAA6gE,UAAAL,GACA,IAAA3D,EAAA78D,EAAA8gE,WAAAN,EAAAC,GACA1mE,KAAAgnE,YAAAlE,IAAAl7D,OAAA,IAGA,WACA5H,KAAAinE,aAAA,WAGA,IAFAjnE,KAAAgnE,aAAA,EAEAhnE,KAAAgnE,YAAA,IAGA,GAFAhnE,KAAA4mE,MAAA,EAEA5mE,KAAA4mE,KAAA,EAEA,OADA5mE,KAAA4mE,KAAA,EACA,KAGA5mE,KAAA6mE,WAAA7mE,KAAA2mE,SAAAG,UAAA9mE,KAAA4mE,MACA5mE,KAAAgnE,YAAAhnE,KAAA6mE,WAAAxlE,OAAA,EAGA,OAAArB,KAAA6mE,WAAA7mE,KAAAgnE,cAGAhnE,KAAAknE,YAAA,WAEA,IAAAC,EAEA,IAHAnnE,KAAAgnE,aAAA,EAGAhnE,KAAAgnE,aAAAhnE,KAAA6mE,WAAAxlE,QAAA,CAIA,GAHArB,KAAA4mE,MAAA,EACAO,MAAAnnE,KAAA2mE,SAAAnkB,aAEAxiD,KAAA4mE,MAAAO,EAEA,OADAnnE,KAAA4mE,KAAAO,EAAA,EACA,KAGAnnE,KAAA6mE,WAAA7mE,KAAA2mE,SAAAG,UAAA9mE,KAAA4mE,MACA5mE,KAAAgnE,YAAA,EAGA,OAAAhnE,KAAA6mE,WAAA7mE,KAAAgnE,cAGAhnE,KAAAonE,gBAAA,WACA,OAAApnE,KAAA6mE,WAAA7mE,KAAAgnE,cAGAhnE,KAAAqnE,mBAAA,WACA,OAAArnE,KAAA4mE,MAGA5mE,KAAAsnE,sBAAA,WACA,IAAAC,EAAAvnE,KAAA6mE,WACAW,EAAAxnE,KAAAgnE,YACAh2B,EAAAu2B,EAAAC,GAAA9iD,MACA,QAAA7P,IAAAm8B,EAAA,OAAAA,EAGA,IAFAA,EAAA,EAEAw2B,EAAA,GAEAx2B,GAAAu2B,EADAC,GAAA,GACA9lE,MAAAL,OAGA,OAAA2vC,GAGAhxC,KAAAynE,wBAAA,WACA,OACA12B,IAAA/wC,KAAA4mE,KACA51B,OAAAhxC,KAAAsnE,0BAIAtnE,KAAA0nE,qBAAA,WACA,IAAA5E,EAAA9iE,KAAA6mE,WAAA7mE,KAAAgnE,aACAh2B,EAAAhxC,KAAAsnE,wBACA,WAAAplE,EAAAlC,KAAA4mE,KAAA51B,EAAAhxC,KAAA4mE,KAAA51B,EAAA8xB,EAAAphE,MAAAL,WAEGC,KAAAklE,EAAA5lE,WACHa,EAAA+kE,kBAEAxkE,IAAAsM,OAAA,2IAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAUAkoB,EAVAhoB,EAAApM,EAAA,iBAEA+jE,EAAA/jE,EAAA,gBAAA+jE,UAEAM,EAAArkE,EAAA,wBAAAqkE,cAEApxB,EAAAjzC,EAAA,kBAEAwlE,EAAA,gEACAC,EAAA,0EAEAC,EAAA,GACAC,EAAA,CACAC,IAAA,IACAC,IAAA,KAGAC,EAAA,SAAA9jE,GACA,IAAAiF,GAAA,EASA,GAPAjF,EAAA+jE,cACA9+D,EAAAjF,EAAA0B,UAAA+B,MACAigE,EAAAj7C,YAAAzoB,EAAA+jE,YAAAt7C,aAAAi7C,EAAA,CACAj7C,WAAAzoB,EAAA+jE,YAAAt7C,cAIAi7C,EAAAz+D,GAAA,OAAAmtB,EAAAsxC,EAAAz+D,GACAmtB,EAAAsxC,EAAAz+D,GAAA,CACA++D,qBAAA,EACAC,iBAAA,EACAC,oBAAA,GACAC,sBAAA,EACAC,kBAAA,EACAC,uBAAA,GACAC,qBAAA,KAIAC,EAAA,SAAA7iE,EAAAojD,EAAA0f,EAAAC,GACA,IAAAC,EAAAhjE,EAAAorC,IAAAF,IAAAlrC,EAAA6e,MAAAqsB,IACA,OACAhoC,KAAA4/D,EAAA1f,EAAA2f,EACA/iE,UAAA,GAAAA,EAAA6e,MAAAssB,OAAA,EAAA63B,EAAAhjE,EAAAorC,IAAAD,QAAA63B,EAAA,QAIAC,EAAA,SAAAA,EAAAh/C,GACA9pB,KAAAoxB,IAAA,8BAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA8C,GACA,IAAAsE,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KAEA,QAAAhoC,EAAoB,CACpBk/D,EAAA9jE,GACA,IAAA0B,EAAA1B,EAAAo2C,oBACA0O,EAAAhjD,EAAAi6B,IAAAqmB,aAAA1gD,GAEA,QAAAojD,GAAA,MAAAA,GAA8C9kD,EAAA4kE,2BAC9C,OAAAL,EAAA7iE,EAAAojD,EAAA,IAAmD,KAC1C,GAAA6f,EAAAE,gBAAA7kE,EAAA8B,GACT,iBAAoB2P,KAAA6H,EAAApQ,EAAA2jC,UAAA7sC,EAAAu5C,mBAAA5zB,KAAAm/C,QACpBH,EAAAI,iBAAA/kE,EAAA8B,EAAA,KACA,CACA8C,KAAA,KACAlD,UAAA,SAGAijE,EAAAK,kBAAAhlE,EAAA8B,EAAA,KACA,CACA8C,KAAA,IACAlD,UAAA,aAIO,QAAAkD,EAAoB,CAI3B,GAHAk/D,EAAA9jE,GAGA,KAFAsZ,EAAAvE,UAAA7L,EAAA2jC,OAAA3jC,EAAA2jC,OAAA,GAQA,UALA/qC,EAAAmjE,oBAAA,IAAuD,CACvDp4B,OAAA3jC,EAAA2jC,OAAA,EACAD,IAAA1jC,EAAA0jC,OAGA+3B,EAAAO,sBAAAh8D,EAAAoQ,EAAA1U,GAEA,OADA+/D,EAAAQ,yBACA,CACAvgE,KAAA,GACAlD,UAAA,WAIO,UAAAkD,GAAA,QAAAA,EAAA,CACPk/D,EAAA9jE,GACA,IAAAykE,EAAA,GASA,GAPAE,EAAAS,uBAAAl8D,EAAAoQ,KACAmrD,EAAAxzB,EAAA7B,aAAA,IAAwChd,EAAA+xC,uBACxCQ,EAAAU,6BAKA,MAFA/rD,EAAAvE,UAAA7L,EAAA2jC,OAAA3jC,EAAA2jC,OAAA,GAE4B,CAC5B,IAAAy4B,EAAAxjE,EAAAyjE,oBAAA,CACA34B,IAAA1jC,EAAA0jC,IACAC,OAAA3jC,EAAA2jC,OAAA,GACW,KACX,IAAAy4B,EAAA,YACA,IAAAE,EAAA3pE,KAAA4pE,WAAA3jE,EAAA2xC,QAAA6xB,EAAA14B,UACS,KAAA63B,EAIT,YADAE,EAAAU,4BAFAG,EAAA3pE,KAAA4pE,WAAAnsD,GAMA,IAAAu8C,EAAA2P,EAAA1jE,EAAA4jE,eACA,OACA9gE,KAAA,KAAAixD,EAAA,KAAA2P,EAAAf,EACA/iE,UAAA,GAAAm0D,EAAA34D,OAAA,EAAA24D,EAAA34D,SAGAynE,EAAAU,+BAGAxpE,KAAAoxB,IAAA,6BAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA2D,GACA,IAAAq/C,EAAAhjD,EAAAi6B,IAAAqmB,aAAA38C,GAEA,IAAAA,EAAAooC,eAAA,KAAAiX,EAAgD,CAKhD,GAJAgf,EAAA9jE,GAIA,KAHA8B,EAAAi6B,IAAA0X,QAAAhuC,EAAA8a,MAAAqsB,KACA73B,UAAAtP,EAAAqnC,IAAAD,OAAApnC,EAAAqnC,IAAAD,OAAA,GAIA,OADApnC,EAAAqnC,IAAAD,SACApnC,EAEA2sB,EAAA+xC,2BAIAtoE,KAAAoxB,IAAA,8BAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA8C,GACA,QAAAA,EAAA,CACAk/D,EAAA9jE,GACA,IAAA0B,EAAA1B,EAAAo2C,oBACA0O,EAAAhjD,EAAAi6B,IAAAqmB,aAAA1gD,GAEA,QAAAojD,GAAA9kD,EAAA4kE,2BACA,OAAAL,EAAA7iE,EAAAojD,EAAA,SACS,GAAA6f,EAAAE,gBAAA7kE,EAAA8B,GAET,OADA6iE,EAAAI,iBAAA/kE,EAAA8B,EAAA,KACA,CACA8C,KAAA,KACAlD,UAAA,YAGO,QAAAkD,EAAA,CACPk/D,EAAA9jE,GACA,IAAAkJ,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KAGA,QAFAtzB,EAAAvE,UAAA7L,EAAA2jC,OAAA3jC,EAAA2jC,OAAA,GAQA,UALA/qC,EAAAmjE,oBAAA,KACAp4B,OAAA3jC,EAAA2jC,OAAA,EACAD,IAAA1jC,EAAA0jC,OAGA+3B,EAAAO,sBAAAh8D,EAAAoQ,EAAA1U,GAEA,OADA+/D,EAAAQ,yBACA,CACAvgE,KAAA,GACAlD,UAAA,UAMA7F,KAAAoxB,IAAA,6BAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA2D,GACA,IAAAq/C,EAAAhjD,EAAAi6B,IAAAqmB,aAAA38C,GAEA,IAAAA,EAAAooC,eAAA,KAAAiX,IACAgf,EAAA9jE,GAIA,KAHA8B,EAAAi6B,IAAA0X,QAAAhuC,EAAA8a,MAAAqsB,KACA73B,UAAAtP,EAAA8a,MAAAssB,OAAA,EAAApnC,EAAA8a,MAAAssB,OAAA,IAIA,OADApnC,EAAAqnC,IAAAD,SACApnC,IAIA5J,KAAAoxB,IAAA,gCAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA8C,GACA,QAAAA,EAAA,CACAk/D,EAAA9jE,GACA,IAAA0B,EAAA1B,EAAAo2C,oBACA0O,EAAAhjD,EAAAi6B,IAAAqmB,aAAA1gD,GAEA,QAAAojD,GAAA9kD,EAAA4kE,2BACA,OAAAL,EAAA7iE,EAAAojD,EAAA,SACS,GAAA6f,EAAAE,gBAAA7kE,EAAA8B,GAET,OADA6iE,EAAAI,iBAAA/kE,EAAA8B,EAAA,KACA,CACA8C,KAAA,KACAlD,UAAA,YAGO,QAAAkD,EAAA,CACPk/D,EAAA9jE,GACA,IAAAkJ,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KAGA,QAFAtzB,EAAAvE,UAAA7L,EAAA2jC,OAAA3jC,EAAA2jC,OAAA,GAQA,UALA/qC,EAAAmjE,oBAAA,KACAp4B,OAAA3jC,EAAA2jC,OAAA,EACAD,IAAA1jC,EAAA0jC,OAGA+3B,EAAAO,sBAAAh8D,EAAAoQ,EAAA1U,GAEA,OADA+/D,EAAAQ,yBACA,CACAvgE,KAAA,GACAlD,UAAA,UAMA7F,KAAAoxB,IAAA,+BAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA2D,GACA,IAAAq/C,EAAAhjD,EAAAi6B,IAAAqmB,aAAA38C,GAEA,IAAAA,EAAAooC,eAAA,KAAAiX,IACAgf,EAAA9jE,GAIA,KAHA8B,EAAAi6B,IAAA0X,QAAAhuC,EAAA8a,MAAAqsB,KACA73B,UAAAtP,EAAA8a,MAAAssB,OAAA,EAAApnC,EAAA8a,MAAAssB,OAAA,IAIA,OADApnC,EAAAqnC,IAAAD,SACApnC,IAIA5J,KAAAoxB,IAAA,sCAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA8C,GACA,IAAA+gE,EAAA7jE,EAAA8jE,MAAAC,SAAAlC,EAEA,MAAA/+D,EAAA1H,QAAAyoE,EAAA/gE,GAAA,CACA,GAAA/I,KAAAiqE,mBAAA,GAAAjqE,KAAAiqE,iBAAApiE,QAAAkB,GAAA,OACAk/D,EAAA9jE,GACA,IAAAiT,EAAArO,EACAlD,EAAA1B,EAAAo2C,oBACA0O,EAAAhjD,EAAAi6B,IAAAqmB,aAAA1gD,GAEA,UAAAojD,GAAA,GAAAA,EAAA5nD,QAAAyoE,EAAA7gB,KAAA9kD,EAAA4kE,2BACA,OAAAL,EAAA7iE,EAAAojD,EAAA7xC,KACS,IAAA6xC,EAAA,CACT,IAAA57C,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KACAm5B,EAAAzsD,EAAAvE,UAAA7L,EAAA2jC,OAAA,EAAA3jC,EAAA2jC,QACAm5B,EAAA1sD,EAAAvE,UAAA7L,EAAA2jC,OAAA3jC,EAAA2jC,OAAA,GACA8xB,EAAA78D,EAAA8gE,WAAA15D,EAAA0jC,IAAA1jC,EAAA2jC,QACAo5B,EAAAnkE,EAAA8gE,WAAA15D,EAAA0jC,IAAA1jC,EAAA2jC,OAAA,GACA,SAAAk5B,GAAApH,GAAA,SAAAltD,KAAAktD,EAAAp5D,MAAA,YACA,IAEA2gE,EAFAC,EAAAxH,GAAA,gBAAAltD,KAAAktD,EAAAp5D,MACA6gE,GAAAH,GAAA,gBAAAx0D,KAAAw0D,EAAA1gE,MAGA,GAAAygE,GAAA/yD,GACAizD,EAAAC,IAAAC,IACA,cAAA30D,KAAAw0D,EAAA1gE,QAAA2gE,GAAA,OACW,CACX,GAAAC,IAAAC,EAAA,YAEA,GAAAD,GAAAC,EAAA,YAEA,IAAAC,EAAAvkE,EAAA8jE,MAAAvJ,QACAgK,EAAAtyC,UAAA,EACA,IAAAuyC,EAAAD,EAAA50D,KAAAs0D,GACAM,EAAAtyC,UAAA,EACA,IAAAwyC,EAAAF,EAAA50D,KAAAs0D,GACA,GAAAO,GAAAC,EAAA,YAEA,GAAAP,IAAA,gBAAsCv0D,KAAAu0D,GAAA,YAEtC,IAAAQ,EAAAltD,EAAApQ,EAAA2jC,OAAA,GACA,GAAAk5B,GAAA9yD,IAAAuzD,GAAAvzD,GAAAozD,EAAA50D,KAAA+0D,IAAA,YACAN,GAAA,EAGA,OACAthE,KAAAshE,EAAAjzD,IAAA,GACAvR,UAAA,WAKA7F,KAAAoxB,IAAA,qCAAA7kB,EAAAw8C,EAAA5kD,EAAA8B,EAAA2D,GACA,IAAAkgE,EAAA7jE,EAAA8jE,MAAAC,SAAAlC,EACA7e,EAAAhjD,EAAAi6B,IAAAqmB,aAAA38C,GAEA,IAAAA,EAAAooC,eAAA83B,EAAArpE,eAAAwoD,KACAgf,EAAA9jE,GACA8B,EAAAi6B,IAAA0X,QAAAhuC,EAAA8a,MAAAqsB,KACA73B,UAAAtP,EAAA8a,MAAAssB,OAAA,EAAApnC,EAAA8a,MAAAssB,OAAA,IAEAiY,GAEA,OADAr/C,EAAAqnC,IAAAD,SACApnC,KAMAk/D,EAAAE,gBAAA,SAAA7kE,EAAA8B,GACA,IAAAoH,EAAAlJ,EAAA62D,oBACA4P,EAAA,IAAApE,EAAAvgE,EAAAoH,EAAA0jC,IAAA1jC,EAAA2jC,QAEA,IAAAhxC,KAAA6qE,gBAAAD,EAAAxD,mBAAA,OAAAO,GAAA,CACA,YAAc/xD,KAAAzR,EAAA8B,QAAA2xC,QAAAvqC,EAAA0jC,KAAA1jC,EAAA2jC,SAAA,SACd,IAAA85B,EAAA,IAAAtE,EAAAvgE,EAAAoH,EAAA0jC,IAAA1jC,EAAA2jC,OAAA,GACA,IAAAhxC,KAAA6qE,gBAAAC,EAAA1D,mBAAA,OAAAO,GAAA,SAIA,OADAiD,EAAA1D,cACA0D,EAAAvD,uBAAAh6D,EAAA0jC,KAAA/wC,KAAA6qE,gBAAAD,EAAAxD,mBAAA,OAAAQ,IAGAkB,EAAA+B,gBAAA,SAAA/H,EAAA1b,GACA,OAAAA,EAAAv/C,QAAAi7D,EAAAp5D,MAAAo5D,IAAA,GAGAgG,EAAAI,iBAAA,SAAA/kE,EAAA8B,EAAA8kE,GACA,IAAA19D,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KACA/wC,KAAAqpE,sBAAAh8D,EAAAoQ,EAAA8Y,EAAA8xC,oBAAA,MAAA9xC,EAAA4xC,qBAAA,GACA5xC,EAAA6xC,gBAAA/6D,EAAA0jC,IACAxa,EAAA8xC,oBAAA0C,EAAAttD,EAAA28C,OAAA/sD,EAAA2jC,QACAza,EAAA4xC,wBAGAW,EAAAK,kBAAA,SAAAhlE,EAAA8B,EAAA8kE,GACA,IAAA19D,EAAAlJ,EAAA62D,oBACAv9C,EAAAxX,EAAAi6B,IAAA0X,QAAAvqC,EAAA0jC,KACA/wC,KAAAupE,uBAAAl8D,EAAAoQ,KAAA8Y,EAAA+xC,sBAAA,GACA/xC,EAAAgyC,iBAAAl7D,EAAA0jC,IACAxa,EAAAiyC,uBAAA/qD,EAAA28C,OAAA,EAAA/sD,EAAA2jC,QAAA+5B,EACAx0C,EAAAkyC,qBAAAhrD,EAAA28C,OAAA/sD,EAAA2jC,QACAza,EAAA+xC,yBAGAQ,EAAAO,sBAAA,SAAAh8D,EAAAoQ,EAAAstD,GACA,OAAAx0C,EAAA4xC,qBAAA,GAAA96D,EAAA0jC,MAAAxa,EAAA6xC,iBAAA2C,IAAAx0C,EAAA8xC,oBAAA,IAAA5qD,EAAA28C,OAAA/sD,EAAA2jC,UAAAza,EAAA8xC,qBAGAS,EAAAS,uBAAA,SAAAl8D,EAAAoQ,GACA,OAAA8Y,EAAA+xC,sBAAA,GAAAj7D,EAAA0jC,MAAAxa,EAAAgyC,kBAAA9qD,EAAA28C,OAAA/sD,EAAA2jC,UAAAza,EAAAkyC,sBAAAhrD,EAAA28C,OAAA,EAAA/sD,EAAA2jC,SAAAza,EAAAiyC,wBAGAM,EAAAQ,uBAAA,WACA/yC,EAAA8xC,oBAAA9xC,EAAA8xC,oBAAAjO,OAAA,GACA7jC,EAAA4xC,wBAGAW,EAAAU,0BAAA,WACAjzC,IACAA,EAAA+xC,sBAAA,EACA/xC,EAAAgyC,kBAAA,IAIAh6D,EAAA80B,SAAAylC,EAAA5C,GACAzkE,EAAAqnE,oBAEA9mE,IAAAsM,OAAA,sDAAAnM,EAAAV,EAAA4M,GACA,aAMA,IAJA,IAAA28D,EAAA,q8DACAC,EAAA,EACA9yC,EAAA,GAEAj3B,EAAA,EAAiBA,EAAA8pE,EAAA3pE,OAAsBH,GAAA,EACvCi3B,EAAAvqB,KAAAq9D,GAAAD,EAAA9pE,IACA8pE,EAAA9pE,EAAA,IAAAi3B,EAAAvqB,KAAA,GAAAq9D,GAAAD,EAAA9pE,EAAA,IAGAO,EAAAupE,UAAAttD,OAAAC,aAAApc,MAAA,KAAA42B,KAEAn2B,IAAAsM,OAAA,+MAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8hD,EAAAhuD,EAAA,aAEA4/D,EAAA5/D,EAAA,gBAAA4/D,UAEAuC,EAAAniE,EAAA,0BAAAmiE,mBAEAwE,EAAA3mE,EAAA,sBAAA2mE,gBAEAoC,EAAA/oE,EAAA,cAEAizC,EAAAjzC,EAAA,eAEAqkE,EAAArkE,EAAA,qBAAAqkE,cAEAtkE,EAAAC,EAAA,YAAAD,MAEAipE,EAAA,WACAnrE,KAAA4kE,eAAAN,IAGA,WACAtkE,KAAAorE,kBAAA,IAAAtC,EACA9oE,KAAAwgE,QAAA,IAAAlsD,OAAA,KAAA42D,EAAAF,UAAA,cACAhrE,KAAAugE,WAAA,IAAAjsD,OAAA,SAAA42D,EAAAF,UAAA,oBAEAhrE,KAAAqrE,aAAA,WAMA,OALArrE,KAAAsrE,aACAtrE,KAAAurE,gBAAAvrE,KAAAurE,iBAAA,IAAAvrE,KAAA4kE,eAAA5kE,KAAAwrE,sBACAxrE,KAAAsrE,WAAA,IAAAvJ,EAAA/hE,KAAAurE,gBAAA7G,aAGA1kE,KAAAsrE,YAGAtrE,KAAAiqE,iBAAA,GACAjqE,KAAAyrE,aAAA,GAEAzrE,KAAA0rE,mBAAA,SAAAn/D,EAAAtG,EAAAqD,EAAAE,GACA,IAAA02B,EAAAj6B,EAAAi6B,IACAyrC,GAAA,EACAC,GAAA,EACAC,EAAAC,IACAngE,EAAA1F,EAAA8K,aACAg7D,GAAA,EAEA,GAAA/rE,KAAAiqE,iBAoCO,CACP,GAAA1pE,MAAAsG,QAAA7G,KAAAiqE,kBACA+B,EAAAhsE,KAAAiqE,iBAAAxzD,IAAA2+B,EAAAlB,cAAAnsC,KAAA,KACAkiE,EAAAjqE,KAAAiqE,iBAAA,QAEA+B,EAAA52B,EAAAlB,aAAAl0C,KAAAiqE,kBACAA,EAAAjqE,KAAAiqE,iBAGA+B,EAAA,IAAA13D,OAAA,aAAA03D,EAAA,OACAD,EAAA9lE,EAAAgL,iBAEAg7D,EAAA,SAAAxuD,EAAAvc,GACA,IAAAsR,EAAAiL,EAAAtG,MAAA60D,GACA,GAAAx5D,EAAA,CACA,IAAAkS,EAAAlS,EAAA,GAAAnR,OACA4vC,EAAAz+B,EAAA,GAAAnR,OACA6qE,EAAAzuD,EAAAiH,EAAAusB,IAAA,KAAAz+B,EAAA,GAAAy+B,EAAA,IAAAA,IACA/Q,EAAAi7B,aAAAj6D,EAAAwjB,EAAAusB,KANA,IASAk7B,EAAAlC,EAAA,IAkBAiC,GAhBAE,EAAA,SAAA3uD,EAAAvc,GACAyqE,IAAA,KAAA/1D,KAAA6H,KACAyuD,EAAAzuD,EAAAouD,KAAA3rC,EAAAmsC,aAAA,CACAt7B,IAAA7vC,EACA8vC,OAAA66B,GACaM,GAAoBjsC,EAAAmsC,aAAA,CACjCt7B,IAAA7vC,EACA8vC,OAAA66B,GACa5B,KAIbqC,EAAA,SAAA7uD,EAAAvc,GACA,OAAA8qE,EAAAp2D,KAAA6H,IAGA,SAAAA,EAAA8uD,EAAAC,GAGA,IAFA,IAAAC,EAAA,EAEAF,KAAA,KAAA9uD,EAAAjB,OAAA+vD,IACAE,IAGA,GAAAA,EAAA9gE,GAAA,WAGA,IAFA8gE,EAAA,EAEA,KAAAhvD,EAAAjB,OAAAgwD,MACAC,IAGA,OAAA9gE,EAAA,EAAA8gE,EAAA9gE,KAAA,EAAkE8gE,EAAA9gE,GAAA,QAzFlE,CACA,IAAA3L,KAAAyrE,aAAA,SACA,IAAAxB,EAAAjqE,KAAAyrE,aAAA/mD,MACAgoD,EAAA1sE,KAAAyrE,aAAAx6B,IACA+6B,EAAA,IAAA13D,OAAA,aAAA8gC,EAAAlB,aAAA+1B,GAAA,KACA0C,EAAA,IAAAr4D,OAAA,MAAA8gC,EAAAlB,aAAAw4B,GAAA,UAEAN,EAAA,SAAA3uD,EAAAvc,GACAorE,EAAA7uD,EAAAvc,IAEAyqE,IAAA,KAAA/1D,KAAA6H,KACAyiB,EAAAmsC,aAAA,CACAt7B,IAAA7vC,EACA8vC,OAAAvzB,EAAApc,QACaqrE,GACbxsC,EAAAmsC,aAAA,CACAt7B,IAAA7vC,EACA8vC,OAAA66B,GACa5B,KAIbgC,EAAA,SAAAxuD,EAAAvc,GACA,IAAAsR,GACAA,EAAAiL,EAAAtG,MAAAw1D,KAAAzsC,EAAAi7B,aAAAj6D,EAAAuc,EAAApc,OAAAmR,EAAA,GAAAnR,OAAAoc,EAAApc,SACAmR,EAAAiL,EAAAtG,MAAA60D,KAAA9rC,EAAAi7B,aAAAj6D,EAAAsR,EAAA,GAAAnR,OAAAmR,EAAA,GAAAnR,SAGAirE,EAAA,SAAA7uD,EAAAszB,GACA,GAAAi7B,EAAAp2D,KAAA6H,GAAA,SAGA,IAFA,IAAA4F,EAAApd,EAAA6gE,UAAA/1B,GAEA7vC,EAAA,EAAyBA,EAAAmiB,EAAAhiB,OAAmBH,IAC5C,eAAAmiB,EAAAniB,GAAAwI,KAAA,UA4DA,SAAAkjE,EAAA/xC,GACA,QAAA35B,EAAAoI,EAA8BpI,GAAAsI,EAAatI,IAC3C25B,EAAAqF,EAAA0X,QAAA12C,MAIA,IAAA2rE,EAAAf,IACAc,EAAA,SAAAnvD,EAAAvc,GACA,IAAA84D,EAAAv8C,EAAA2iD,OAAA,OAEA,IAAApG,GACAA,EAAA6R,MAAA7R,GACA4R,IAAAU,EAAA7uD,EAAAvc,KAAA0qE,GAAA,IACSiB,EAAApvD,EAAApc,SACTwrE,EAAApvD,EAAApc,UAIAwqE,GAAAC,MACAD,EAAAgB,EACAlB,GAAA,EACAC,GAAA,GAGAG,GAAAF,EAAAlgE,GAAA,IAAAkgE,EAAAtwD,KAAA0C,MAAA4tD,EAAAlgE,MACAihE,EAAAhB,EAAAK,EAAAG,IAGApsE,KAAA8sE,mBAAA,SAAAvgE,EAAAtG,EAAA2D,EAAAyD,GACA,IAAA++D,EAAApsE,KAAAyrE,aACA,GAAAW,EAAA,EACAA,EAAA1nD,OAAA0nD,EAAA,KAAAA,IAAA,IACA,IAIA9iE,EAAAyjE,EAHAjK,GADA8H,EAAA,IAAApE,EAAAvgE,EAAAoH,EAAA0jC,IAAA1jC,EAAA2jC,SACAo2B,kBAEA4F,GADA/mE,EAAAJ,UACAI,EAAAJ,UAAAu/C,mBAGA,GAAA0d,GAAA,UAAAltD,KAAAktD,EAAAp5D,MAAA,CAGA,IAFA,IAAAujE,EAAAC,EAEApK,GAAA,UAAAltD,KAAAktD,EAAAp5D,OAAA,CAGA,QAFAxI,EAAA4hE,EAAAphE,MAAAmG,QAAAukE,EAAA1nD,QAEA,CACA,IAAAqsB,EAAA65B,EAAAvD,qBACAr2B,EAAA45B,EAAAtD,wBAAApmE,EACA+rE,EAAA,IAAA/qE,EAAA6uC,EAAAC,EAAAD,EAAAC,EAAAo7B,EAAA1nD,MAAArjB,QACA,MAGAyhE,EAAA8H,EAAA3D,eAGA,IAAA2D,EAGA,IAFA9H,GADA8H,EAAA,IAAApE,EAAAvgE,EAAAoH,EAAA0jC,IAAA1jC,EAAA2jC,SACAo2B,kBAEAtE,GAAA,UAAAltD,KAAAktD,EAAAp5D,OAAA,CACA,IAAAxI,EAEA,QAFAA,EAAA4hE,EAAAphE,MAAAmG,QAAAukE,EAAAn7B,MAEA,CACAF,EAAA65B,EAAAvD,qBACAr2B,EAAA45B,EAAAtD,wBAAApmE,EACAgsE,EAAA,IAAAhrE,EAAA6uC,EAAAC,EAAAD,EAAAC,EAAAo7B,EAAAn7B,IAAA5vC,QACA,MAGAyhE,EAAA8H,EAAA1D,cAGAgG,GAAAjnE,EAAAm0B,OAAA8yC,GAEAD,IACAhnE,EAAAm0B,OAAA6yC,GACA3jE,EAAA2jE,EAAAvoD,MAAAqsB,IACAg8B,GAAAX,EAAA1nD,MAAArjB,aAGA0rE,EAAAX,EAAA1nD,MAAArjB,OACAiI,EAAAM,EAAA8a,MAAAqsB,IACA9qC,EAAAk0B,OAAAvwB,EAAAqnC,IAAAm7B,EAAAn7B,KACAhrC,EAAAk0B,OAAAvwB,EAAA8a,MAAA0nD,EAAA1nD,OAGAsoD,EAAAtoD,MAAAqsB,KAAAznC,IAAA0jE,EAAAtoD,MAAAssB,QAAA+7B,GACAC,EAAA/7B,IAAAF,KAAAznC,IAAA0jE,EAAA/7B,IAAAD,QAAA+7B,GACA9mE,EAAAJ,UAAAggD,kBAAAmnB,KAGAhtE,KAAAmtE,kBAAA,SAAA5gE,EAAAkR,EAAA2vD,GACA,OAAAptE,KAAA4pE,WAAAnsD,IAGAzd,KAAAqtE,aAAA,SAAA9gE,EAAAkR,EAAA6vD,GACA,UAGAttE,KAAAutE,YAAA,SAAAhhE,EAAA2zB,EAAA6Q,KAEA/wC,KAAA4pE,WAAA,SAAAnsD,GACA,OAAAA,EAAAtG,MAAA,YAGAnX,KAAAwtE,aAAA,SAAAvnE,GACA,aAGAjG,KAAAytE,oBAAA,SAAAnL,GAIA,QAAAphE,KAHAlB,KAAA+kE,QAAA,GACA/kE,KAAAyuD,OAAA,GAEA6T,EACA,GAAAA,EAAAphE,GAAA,CACA,IAAAiqE,EAAA7I,EAAAphE,GACAkI,EAAA+hE,EAAAvqE,UAAA8sE,IACAxqE,EAAAitD,EAAA1B,OAAArlD,GACAlG,IAAAitD,EAAA1B,OAAArlD,GAAAlG,EAAA,IAAAioE,GACAhb,EAAA1B,OAAAvtD,KAAAivD,EAAA1B,OAAAvtD,GAAAgC,GACAlD,KAAA+kE,QAAAn3D,KAAA1M,GACAlB,KAAAyuD,OAAAvtD,GAAAgC,EAIA,IAAAyqE,EAAA,gIAEA,IAAAzsE,EAAA,EAAqBA,EAAAysE,EAAAtsE,OAAwBH,KAC7C,SAAAoP,GACA,IAAAs9D,EAAAD,EAAAzsE,GACAirD,EAAA77C,EAAAs9D,GAEAt9D,EAAAq9D,EAAAzsE,IAAA,WACA,OAAAlB,KAAA6tE,WAAAD,EAAAxsE,UAAA+qD,IALA,CAOSnsD,OAITA,KAAA6tE,WAAA,SAAAnrE,EAAA8U,EAAA20C,GACA,IAAA5/C,EAAAiL,EAAA,YAEA,oBAAAjL,EAAA,CACA,GAAAhM,MAAAsG,QAAA0F,EAAA,KACA,IAAAuhE,EAAAvhE,EAAA,GAAAA,EAAA,GAAAlL,OAAA,GAEA,GADA6B,EAAAlD,KAAAyuD,OAAAqf,GACA,OAAA5qE,EAAAR,GAAAnB,MAAA2B,EAAA,CAAAqJ,EAAA,IAAA6N,OAAA,GAAAiM,MAAA/kB,KAAAkW,EAAA,KAGAjL,IAAA,YAGA,QAAArL,EAAA,EAAqBA,EAAAlB,KAAA+kE,QAAA1jE,OAAyBH,IAC9C,GAAAlB,KAAAyuD,OAAAzuD,KAAA+kE,QAAA7jE,IAAA,CACA,IAIAgC,EAJAwE,EAAA6E,EAAA7E,MAAA1H,KAAA+kE,QAAA7jE,IAEA,IAAAwG,EAAA,IAAAA,EAAA,GAGA,OAFA8P,EAAA,GAAA9P,EAAA,IACAxE,EAAAlD,KAAAyuD,OAAAzuD,KAAA+kE,QAAA7jE,KACAwB,GAAAnB,MAAA2B,EAAAsU,GAIA,IAAAmsB,EAAAwoB,EAAA5qD,MAAAvB,KAAAwX,GACA,OAAA20C,EAAAxoB,OAAA9uB,GAGA7U,KAAA+tE,gBAAA,SAAAxhE,EAAAw8C,EAAA5kD,EAAA8B,EAAAqd,GACA,GAAAtjB,KAAAguE,WAAA,CACA,IAAA3H,EAAArmE,KAAAguE,WAAAzH,gBAEA,QAAAhxD,KAAA8wD,EACA,GAAAA,EAAA9wD,GAAAwzC,GAAA,CACA,IAAAplB,EAAA0iC,EAAA9wD,GAAAwzC,GAAAxnD,MAAAvB,KAAAoB,WAEA,GAAAuiC,EACA,OAAAA,KAOA3jC,KAAAgmE,YAAA,SAAAlB,GACA,IAAA9kE,KAAAiuE,mBAAA,CACA,IAAAjM,EAAAhiE,KAAAsrE,WAAAtJ,MACAiM,EAAA,GAEA,QAAAvL,KAAAV,EAGA,IAFA,IAAAkM,EAAAlM,EAAAU,GAEAjB,EAAA,EAAArqC,EAAA82C,EAAA7sE,OAA6CogE,EAAArqC,EAAOqqC,IACpD,qBAAAyM,EAAAzM,GAAAqB,MACA,0BAAAltD,KAAAs4D,EAAAzM,GAAAqB,QAAAmL,EAAArgE,KAAAsgE,EAAAzM,GAAAppC,YACa,qBAAA61C,EAAAzM,GAAAqB,MACb,QAAAvoD,EAAA,EAAA4zD,EAAAD,EAAAzM,GAAAqB,MAAAzhE,OAAgEkZ,EAAA4zD,EAAa5zD,IAC7E,6BAAA3E,KAAAs4D,EAAAzM,GAAAqB,MAAAvoD,IAAA,CACAmoD,EAAAwL,EAAAzM,GAAAppC,MAAAlhB,MAAA,YAAAoD,GACA0zD,EAAArgE,KAAA80D,EAAAtI,OAAA,EAAAsI,EAAArhE,OAAA,IAOArB,KAAAiuE,qBAGA,OAAAnJ,EACAmJ,EAAA7zD,OAAApa,KAAA+lE,cAAA,IADA/lE,KAAA+lE,cAIA/lE,KAAAouE,mBAAA,WAEA,OADApuE,KAAAurE,iBAAAvrE,KAAAqrE,eACArrE,KAAA+lE,aAAA/lE,KAAAurE,gBAAAxF,cAAA,IAGA/lE,KAAAquE,eAAA,SAAA9hE,EAAAtG,EAAAiC,EAAAgd,GAEA,OADAllB,KAAA+lE,cAAA/lE,KAAAouE,sBACA33D,IAAA,SAAA63D,GACA,OACAxjE,KAAAwjE,EACA5sE,MAAA4sE,EACA5sD,MAAA,EACA8iB,KAAA,cAKAxkC,KAAA0tE,IAAA,kBACGpsE,KAAA6pE,EAAAvqE,WACHa,EAAA0pE,SAEAnpE,IAAAsM,OAAA,0DAAAnM,EAAAV,EAAA4M,GACA,aAwBA5M,EAAA8sE,WAAA,SAAAC,EAAA1yD,EAAA2yD,GACA,IAAA19B,EAAAj1B,EAAA4I,MAAAqsB,IACAF,EAAA/0B,EAAA4I,MAAAssB,OACAvzB,EAAA+wD,EAAAz9B,IAAA,GAEA,OAAAj1B,EAAAitC,QACA,aAGA,OAFAjtC,EAAAtO,MAEAnM,OACAmtE,EAAAz9B,GAAAtzB,EAAAvE,UAAA,EAAA23B,GAAA/0B,EAAAtO,MAAA,GAAAiQ,EAAAvE,UAAA23B,OACS,CACT,IAAAr5B,EAAA,CAAAu5B,EAAA,GAAA32B,OAAA0B,EAAAtO,OACAghE,EAAA1mE,OAAAvG,MAAAitE,EAAAh3D,GACAg3D,EAAAz9B,GAAAtzB,EAAAvE,UAAA,EAAA23B,GAAA29B,EAAAz9B,GACAy9B,EAAAz9B,EAAAj1B,EAAAtO,MAAAnM,OAAA,IAAAoc,EAAAvE,UAAA23B,GAGA,MAEA,aACA,IAAAC,EAAAh1B,EAAAm1B,IAAAD,OACAxnC,EAAAsS,EAAAm1B,IAAAF,IAEAA,IAAAvnC,EACAglE,EAAAz9B,GAAAtzB,EAAAvE,UAAA,EAAA23B,GAAApzB,EAAAvE,UAAA43B,GAEA09B,EAAA1mE,OAAAipC,EAAAvnC,EAAAunC,EAAA,EAAAtzB,EAAAvE,UAAA,EAAA23B,GAAA29B,EAAAhlE,GAAA0P,UAAA43B,QAOA9uC,IAAAsM,OAAA,2FAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAqM,EAAArM,EAAA,uBAAAqM,aAEAkgE,EAAAjtE,EAAAitE,OAAA,SAAAxuC,EAAA6Q,EAAAC,GACAhxC,KAAA2uE,UAAA3uE,KAAAyE,SAAA9B,KAAA3C,MACAA,KAAAqzD,OAAAnzB,GACA,oBAAA8Q,EAAAhxC,KAAA4gD,YAAA7P,QAAAC,QAA4EhxC,KAAA4gD,YAAA7P,EAAAC,KAG5E,WAuBA,SAAA49B,EAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAD,EAAAF,EAAA79B,QAAA89B,EAAA99B,OAAA69B,EAAA79B,OAAA89B,EAAA99B,OACA,OAAA69B,EAAA99B,IAAA+9B,EAAA/9B,KAAA89B,EAAA99B,KAAA+9B,EAAA/9B,KAAAi+B,EAxBAzgE,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA88D,YAAA,WACA,OAAA98D,KAAAivE,wBAAAjvE,KAAA+wC,IAAA/wC,KAAAgxC,SAGAhxC,KAAAyQ,YAAA,WACA,OAAAzQ,KAAAmK,UAGAnK,KAAAkvE,cAAA,EAEAlvE,KAAAyE,SAAA,SAAAqX,GACA,IAAAA,EAAA4I,MAAAqsB,KAAAj1B,EAAAm1B,IAAAF,KAAAj1B,EAAA4I,MAAAqsB,KAAA/wC,KAAA+wC,QACAj1B,EAAA4I,MAAAqsB,IAAA/wC,KAAA+wC,KAAA,CACA,IAAAo+B,EAYA,SAAArzD,EAAAqzD,EAAAC,GACA,IAAAC,EAAA,UAAAvzD,EAAAitC,OACAumB,GAAAD,EAAA,OAAAvzD,EAAAm1B,IAAAF,IAAAj1B,EAAA4I,MAAAqsB,KACAw+B,GAAAF,EAAA,OAAAvzD,EAAAm1B,IAAAD,OAAAl1B,EAAA4I,MAAAssB,QACAw+B,EAAA1zD,EAAA4I,MACA+qD,EAAAJ,EAAAG,EAAA1zD,EAAAm1B,IAEA,GAAA29B,EAAAO,EAAAK,EAAAJ,GACA,OACAr+B,IAAAo+B,EAAAp+B,IACAC,OAAAm+B,EAAAn+B,QAIA,GAAA49B,EAAAa,EAAAN,GAAAC,GACA,OACAr+B,IAAAo+B,EAAAp+B,IAAAu+B,EACAt+B,OAAAm+B,EAAAn+B,QAAAm+B,EAAAp+B,KAAA0+B,EAAA1+B,IAAAw+B,EAAA,IAIA,OACAx+B,IAAAy+B,EAAAz+B,IACAC,OAAAw+B,EAAAx+B,QAnCA0+B,CAAA5zD,EAAA,CACAi1B,IAAA/wC,KAAA+wC,IACAC,OAAAhxC,KAAAgxC,QACOhxC,KAAAkvE,cACPlvE,KAAA4gD,YAAAuuB,EAAAp+B,IAAAo+B,EAAAn+B,QAAA,KAmCAhxC,KAAA4gD,YAAA,SAAA7P,EAAAC,EAAA2+B,GACA,IAAAznE,EAWA,GARAA,EADAynE,EACA,CACA5+B,MACAC,UAGAhxC,KAAAivE,wBAAAl+B,EAAAC,GAGAhxC,KAAA+wC,KAAA7oC,EAAA6oC,KAAA/wC,KAAAgxC,QAAA9oC,EAAA8oC,OAAA,CACA,IAAAwb,EAAA,CACAzb,IAAA/wC,KAAA+wC,IACAC,OAAAhxC,KAAAgxC,QAEAhxC,KAAA+wC,IAAA7oC,EAAA6oC,IACA/wC,KAAAgxC,OAAA9oC,EAAA8oC,OAEAhxC,KAAAgiD,QAAA,UACAwK,MACA9qD,MAAAwG,MAIAlI,KAAAszD,OAAA,WACAtzD,KAAAmK,SAAAyhC,oBAAA,SAAA5rC,KAAA2uE,YAGA3uE,KAAAqzD,OAAA,SAAAnzB,GACAlgC,KAAAmK,SAAA+1B,GAAAlgC,KAAAmK,SACAnK,KAAAmK,SAAA7E,GAAA,SAAAtF,KAAA2uE,YAGA3uE,KAAAivE,wBAAA,SAAAl+B,EAAAC,GACA,IAAA9oC,EAAA,GAcA,OAZA6oC,GAAA/wC,KAAAmK,SAAAq4C,aACAt6C,EAAA6oC,IAAAx1B,KAAA3J,IAAA,EAAA5R,KAAAmK,SAAAq4C,YAAA,GACAt6C,EAAA8oC,OAAAhxC,KAAAmK,SAAAytC,QAAA1vC,EAAA6oC,KAAA1vC,QACO0vC,EAAA,GACP7oC,EAAA6oC,IAAA,EACA7oC,EAAA8oC,OAAA,IAEA9oC,EAAA6oC,MACA7oC,EAAA8oC,OAAAz1B,KAAA5J,IAAA3R,KAAAmK,SAAAytC,QAAA1vC,EAAA6oC,KAAA1vC,OAAAka,KAAA3J,IAAA,EAAAo/B,KAGAA,EAAA,IAAA9oC,EAAA8oC,OAAA,GACA9oC,KAEG5G,KAAAotE,EAAA9tE,aAEHoB,IAAAsM,OAAA,wIAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAosE,EAAApsE,EAAA,iBAAAosE,WAEA//D,EAAArM,EAAA,uBAAAqM,aAEAtM,EAAAC,EAAA,WAAAD,MAEAwsE,EAAAvsE,EAAA,YAAAusE,OAEAkB,EAAA,SAAAC,GACA7vE,KAAA8vE,OAAA,KAEA,IAAAD,EAAAxuE,OACArB,KAAA8vE,OAAA,KACKvvE,MAAAsG,QAAAgpE,GACL7vE,KAAA+vE,kBAAA,CACAh/B,IAAA,EACAC,OAAA,GACO6+B,GAEP7vE,KAAAm6B,OAAA,CACA4W,IAAA,EACAC,OAAA,GACO6+B,KAIP,WACAthE,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAAgF,SAAA,SAAA+D,GACA,IAAAitD,EAAAh2D,KAAAwiD,YAAA,EACAxiD,KAAAo6B,OAAA,IAAAl4B,EAAA,IAAA8zD,EAAAh2D,KAAA43C,QAAAoe,GAAA30D,SACArB,KAAAm6B,OAAA,CACA4W,IAAA,EACAC,OAAA,GACOjoC,IAGP/I,KAAAgI,SAAA,WACA,OAAAhI,KAAAgwE,cAAAjoE,KAAA/H,KAAAiwE,wBAGAjwE,KAAAs8D,aAAA,SAAAvrB,EAAAC,GACA,WAAA09B,EAAA1uE,KAAA+wC,EAAAC,IAGA,UAAAtpC,MAAA,KAAArG,OACArB,KAAAkwE,OAAA,SAAAnnE,GACA,OAAAA,EAAAwL,QAAA,iBAAA7M,MAAA,OAGA1H,KAAAkwE,OAAA,SAAAnnE,GACA,OAAAA,EAAArB,MAAA,eAIA1H,KAAAmwE,eAAA,SAAApnE,GACA,IAAAoO,EAAApO,EAAAoO,MAAA,qBACAnX,KAAAowE,aAAAj5D,IAAA,QAEAnX,KAAAgiD,QAAA,sBAGAhiD,KAAAiwE,oBAAA,WACA,OAAAjwE,KAAAqwE,cACA,cACA,aAEA,WACA,WAEA,QACA,OAAArwE,KAAAowE,cAAA,OAIApwE,KAAAowE,aAAA,GACApwE,KAAAqwE,aAAA,OAEArwE,KAAAswE,eAAA,SAAAC,GACAvwE,KAAAqwE,eAAAE,IACAvwE,KAAAqwE,aAAAE,EAEAvwE,KAAAgiD,QAAA,uBAGAhiD,KAAAwwE,eAAA,WACA,OAAAxwE,KAAAqwE,cAGArwE,KAAAywE,UAAA,SAAA1nE,GACA,cAAAA,GAAA,MAAAA,GAAA,MAAAA,GAGA/I,KAAA43C,QAAA,SAAA7G,GACA,OAAA/wC,KAAA8vE,OAAA/+B,IAAA,IAGA/wC,KAAA0wE,SAAA,SAAAr+B,EAAAC,GACA,OAAAtyC,KAAA8vE,OAAAzpD,MAAAgsB,EAAAC,EAAA,IAGAtyC,KAAAgwE,YAAA,WACA,OAAAhwE,KAAA0wE,SAAA,EAAA1wE,KAAAwiD,cAGAxiD,KAAAwiD,UAAA,WACA,OAAAxiD,KAAA8vE,OAAAzuE,QAGArB,KAAAumD,aAAA,SAAA38C,GACA,OAAA5J,KAAA2wE,iBAAA/mE,GAAA7B,KAAA/H,KAAAiwE,wBAGAjwE,KAAA2wE,iBAAA,SAAA/mE,GACA,IAAA4D,EAEA,GAAA5D,EAAA8a,MAAAqsB,MAAAnnC,EAAAqnC,IAAAF,IACAvjC,EAAA,CAAAxN,KAAA43C,QAAAhuC,EAAA8a,MAAAqsB,KAAA73B,UAAAtP,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,aACO,EACPxjC,EAAAxN,KAAA0wE,SAAA9mE,EAAA8a,MAAAqsB,IAAAnnC,EAAAqnC,IAAAF,MACA,IAAAvjC,EAAA,QAAA0L,UAAAtP,EAAA8a,MAAAssB,QACA,IAAA5Z,EAAA5pB,EAAAnM,OAAA,EACAuI,EAAAqnC,IAAAF,IAAAnnC,EAAA8a,MAAAqsB,KAAA3Z,IAAA5pB,EAAA4pB,GAAA5pB,EAAA4pB,GAAAle,UAAA,EAAAtP,EAAAqnC,IAAAD,SAGA,OAAAxjC,GAGAxN,KAAA4wE,YAAA,SAAA7/B,EAAAvjC,GAEA,OADA9G,QAAAC,KAAA,sFACA3G,KAAA6wE,gBAAA9/B,EAAAvjC,IAGAxN,KAAA8wE,YAAA,SAAAz+B,EAAAC,GAEA,OADA5rC,QAAAC,KAAA,sFACA3G,KAAA+wE,gBAAA1+B,EAAAC,IAGAtyC,KAAAgxE,cAAA,SAAAxmE,GAEA,OADA9D,QAAAC,KAAA,mGACA3G,KAAA+vE,kBAAAvlE,EAAA,UAGAxK,KAAAm6B,OAAA,SAAA3vB,EAAAzB,GAEA,OADA/I,KAAAwiD,aAAA,GAAAxiD,KAAAmwE,eAAApnE,GACA/I,KAAA+vE,kBAAAvlE,EAAAxK,KAAAkwE,OAAAnnE,KAGA/I,KAAAqsE,aAAA,SAAA7hE,EAAAzB,GACA,IAAA2b,EAAA1kB,KAAAixE,WAAAzmE,EAAAumC,IAAAvmC,EAAAwmC,QACAC,EAAAjxC,KAAAkI,IAAAsC,EAAAumC,IAAAvmC,EAAAwmC,OAAAjoC,EAAA1H,QAOA,OANArB,KAAAuuE,WAAA,CACA7pD,QACAusB,MACA8X,OAAA,SACAv7C,MAAA,CAAAzE,KACO,GACP/I,KAAAkxE,SAAAjgC,IAGAjxC,KAAAixE,WAAA,SAAAlgC,EAAAC,GACA,IAAA3vC,EAAArB,KAAAwiD,iBAEA3tC,IAAAk8B,EACAA,EAAA1vC,EACO0vC,EAAA,EACPA,EAAA,EACOA,GAAA1vC,IACP0vC,EAAA1vC,EAAA,EACA2vC,OAAAn8B,GAGA,IAAA4I,EAAAzd,KAAA43C,QAAA7G,GAGA,YAFAl8B,GAAAm8B,MAAAvzB,EAAApc,QAEA,CACA0vC,MACAC,OAHAA,EAAAz1B,KAAA5J,IAAA4J,KAAA3J,IAAAo/B,EAAA,GAAAvzB,EAAApc,UAOArB,KAAAkxE,SAAA,SAAAhpE,GACA,OACA6oC,IAAA7oC,EAAA6oC,IACAC,OAAA9oC,EAAA8oC,SAIAhxC,KAAAkI,IAAA,SAAA6oC,EAAAC,GACA,OACAD,MACAC,WAIAhxC,KAAAmxE,cAAA,SAAA3mE,GACA,IAAAnJ,EAAArB,KAAAwiD,YAUA,OARAh4C,EAAAumC,KAAA1vC,GACAmJ,EAAAumC,IAAAx1B,KAAA3J,IAAA,EAAAvQ,EAAA,GACAmJ,EAAAwmC,OAAAhxC,KAAA43C,QAAAv2C,EAAA,GAAAA,SAEAmJ,EAAAumC,IAAAx1B,KAAA3J,IAAA,EAAApH,EAAAumC,KACAvmC,EAAAwmC,OAAAz1B,KAAA5J,IAAA4J,KAAA3J,IAAApH,EAAAwmC,OAAA,GAAAhxC,KAAA43C,QAAAptC,EAAAumC,KAAA1vC,SAGAmJ,GAGAxK,KAAA6wE,gBAAA,SAAA9/B,EAAAvjC,GAEA,IAAAwjC,EAAA,GADAD,EAAAx1B,KAAA5J,IAAA4J,KAAA3J,IAAAm/B,EAAA,GAAA/wC,KAAAwiD,cAGAxiD,KAAAwiD,aACAh1C,IAAA4M,OAAA,MACA42B,EAAA,IAEAxjC,EAAA,KAAA4M,OAAA5M,GACAujC,IACAC,EAAAhxC,KAAA8vE,OAAA/+B,GAAA1vC,QAGArB,KAAA+vE,kBAAA,CACAh/B,MACAC,UACOxjC,IAGPxN,KAAA+vE,kBAAA,SAAAvlE,EAAAgD,GACA,IAAAkX,EAAA1kB,KAAAixE,WAAAzmE,EAAAumC,IAAAvmC,EAAAwmC,QACAC,EAAA,CACAF,IAAArsB,EAAAqsB,IAAAvjC,EAAAnM,OAAA,EACA2vC,QAAA,GAAAxjC,EAAAnM,OAAAqjB,EAAAssB,OAAA,GAAAxjC,IAAAnM,OAAA,GAAAA,QAQA,OANArB,KAAAuuE,WAAA,CACA7pD,QACAusB,MACA8X,OAAA,SACAv7C,UAEAxN,KAAAkxE,SAAAjgC,IAGAjxC,KAAAo6B,OAAA,SAAAxwB,GACA,IAAA8a,EAAA1kB,KAAAixE,WAAArnE,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,QACAC,EAAAjxC,KAAAixE,WAAArnE,EAAAqnC,IAAAF,IAAAnnC,EAAAqnC,IAAAD,QAUA,OATAhxC,KAAAuuE,WAAA,CACA7pD,QACAusB,MACA8X,OAAA,SACAv7C,MAAAxN,KAAA2wE,iBAAA,CACAjsD,QACAusB,UAGAjxC,KAAAkxE,SAAAxsD,IAGA1kB,KAAAm7D,aAAA,SAAApqB,EAAAF,EAAAC,GACA,IAAApsB,EAAA1kB,KAAAixE,WAAAlgC,EAAAF,GACAI,EAAAjxC,KAAAixE,WAAAlgC,EAAAD,GAUA,OATA9wC,KAAAuuE,WAAA,CACA7pD,QACAusB,MACA8X,OAAA,SACAv7C,MAAAxN,KAAA2wE,iBAAA,CACAjsD,QACAusB,UAEO,GACPjxC,KAAAkxE,SAAAxsD,IAGA1kB,KAAA+wE,gBAAA,SAAA1+B,EAAAC,GACAD,EAAA92B,KAAA5J,IAAA4J,KAAA3J,IAAA,EAAAygC,GAAAryC,KAAAwiD,YAAA,GAEA,IAAA4uB,GADA9+B,EAAA/2B,KAAA5J,IAAA4J,KAAA3J,IAAA,EAAA0gC,GAAAtyC,KAAAwiD,YAAA,KACAxiD,KAAAwiD,YAAA,GAAAnQ,EAAA,EACAg/B,EAAA/+B,EAAAtyC,KAAAwiD,YAAA,EACAl5C,EAAA8nE,EAAA/+B,EAAA,EAAAA,EACA9oC,EAAA6nE,EAAApxE,KAAA43C,QAAAtuC,GAAAjI,OAAA,EACAmI,EAAA6nE,EAAA/+B,EAAA,EAAAA,EACA7oC,EAAA4nE,EAAA,EAAArxE,KAAA43C,QAAApuC,GAAAnI,OACAuI,EAAA,IAAA1H,EAAAoH,EAAAC,EAAAC,EAAAC,GACA6nE,EAAAtxE,KAAA8vE,OAAAzpD,MAAAgsB,EAAAC,EAAA,GAOA,OANAtyC,KAAAuuE,WAAA,CACA7pD,MAAA9a,EAAA8a,MACAusB,IAAArnC,EAAAqnC,IACA8X,OAAA,SACAv7C,MAAAxN,KAAA2wE,iBAAA/mE,KAEA0nE,GAGAtxE,KAAAuxE,cAAA,SAAAxgC,GACAA,EAAA/wC,KAAAwiD,YAAA,GAAAzR,GAAA,GACA/wC,KAAAuuE,WAAA,CACA7pD,MAAA1kB,KAAAkI,IAAA6oC,EAAA/wC,KAAA43C,QAAA7G,GAAA1vC,QACA4vC,IAAAjxC,KAAAkI,IAAA6oC,EAAA,KACAgY,OAAA,SACAv7C,MAAA,WAKAxN,KAAAuU,QAAA,SAAA3K,EAAAb,GAEA,OADAa,aAAA1H,IAAA0H,EAAA1H,EAAAqwC,WAAA3oC,EAAA8a,MAAA9a,EAAAqnC,MACA,IAAAloC,EAAA1H,QAAAuI,EAAA6oC,UAAA7oC,EAAA8a,MACA3b,GAAA/I,KAAAumD,aAAA38C,KAAAqnC,KACAjxC,KAAAo6B,OAAAxwB,GAGAb,EACA/I,KAAAm6B,OAAAvwB,EAAA8a,MAAA3b,GAEAa,EAAA8a,QAMA1kB,KAAAwxE,YAAA,SAAAC,GACA,QAAAvwE,EAAA,EAAqBA,EAAAuwE,EAAApwE,OAAmBH,IACxClB,KAAAuuE,WAAAkD,EAAAvwE,KAIAlB,KAAA0xE,aAAA,SAAAD,GACA,QAAAvwE,EAAAuwE,EAAApwE,OAAA,EAAqCH,GAAA,EAAQA,IAC7ClB,KAAA2xE,YAAAF,EAAAvwE,KAIAlB,KAAAuuE,WAAA,SAAAzyD,EAAA2yD,GACA,IAAAmD,EAAA,UAAA91D,EAAAitC,QAEA6oB,EAAA91D,EAAAtO,MAAAnM,QAAA,IAAAya,EAAAtO,MAAA,IAAAtL,EAAA+wC,cAAAn3B,EAAA4I,MAAA5I,EAAAm1B,QAIA2gC,GAAA91D,EAAAtO,MAAAnM,OAAA,IACArB,KAAA6xE,yBAAA/1D,EAAA,MAEAyyD,EAAAvuE,KAAA8vE,OAAAh0D,EAAA2yD,GAEAzuE,KAAAgiD,QAAA,SAAAlmC,MAIA9b,KAAA6xE,yBAAA,SAAA/1D,EAAAg2D,GAMA,IALA,IAAAtkE,EAAAsO,EAAAtO,MACA4pB,EAAA5pB,EAAAnM,OAAAywE,EAAA,EACA/gC,EAAAj1B,EAAA4I,MAAAqsB,IACAC,EAAAl1B,EAAA4I,MAAAssB,OAEA1Y,EAAA,EAAAy5C,EAAA,EAAgCz5C,EAAAlB,EAAUkB,EAAAy5C,EAAA,CAC1CA,GAAAD,EAAA,EACA,IAAAxkE,EAAAE,EAAA6Y,MAAAiS,EAAAy5C,GACAzkE,EAAAM,KAAA,IACA5N,KAAAuuE,WAAA,CACA7pD,MAAA1kB,KAAAkI,IAAA6oC,EAAAzY,EAAA0Y,GACAC,IAAAjxC,KAAAkI,IAAA6oC,EAAAghC,EAAA/gC,EAAA,GACA+X,OAAAjtC,EAAAitC,OACAv7C,MAAAF,IACS,GAGTwO,EAAAtO,QAAA6Y,MAAAiS,GACAxc,EAAA4I,MAAAqsB,MAAAzY,EACAxc,EAAA4I,MAAAssB,SACAhxC,KAAAuuE,WAAAzyD,GAAA,IAGA9b,KAAA2xE,YAAA,SAAA71D,GACA9b,KAAAuuE,WAAA,CACA7pD,MAAA1kB,KAAAkxE,SAAAp1D,EAAA4I,OACAusB,IAAAjxC,KAAAkxE,SAAAp1D,EAAAm1B,KACA8X,OAAA,UAAAjtC,EAAAitC,OAAA,kBACAv7C,MAAAsO,EAAAtO,MAAA6Y,WAIArmB,KAAAgyE,gBAAA,SAAApqE,EAAA0B,GAIA,IAHA,IAAAkE,EAAAxN,KAAA8vE,QAAA9vE,KAAAgwE,cACAiC,EAAAjyE,KAAAiwE,sBAAA5uE,OAEAH,EAAAoI,GAAA,EAAA8tB,EAAA5pB,EAAAnM,OAAmDH,EAAAk2B,EAAOl2B,IAE1D,IADA0G,GAAA4F,EAAAtM,GAAAG,OAAA4wE,GACA,SACAlhC,IAAA7vC,EACA8vC,OAAAppC,EAAA4F,EAAAtM,GAAAG,OAAA4wE,GAIA,OACAlhC,IAAA3Z,EAAA,EACA4Z,OAAAppC,EAAA4F,EAAA4pB,EAAA,GAAA/1B,OAAA4wE,IAIAjyE,KAAAkyE,gBAAA,SAAAhqE,EAAAoB,GAMA,IALA,IAAAkE,EAAAxN,KAAA8vE,QAAA9vE,KAAAgwE,cACAiC,EAAAjyE,KAAAiwE,sBAAA5uE,OACAuG,EAAA,EACAmpC,EAAAx1B,KAAA5J,IAAAzJ,EAAA6oC,IAAAvjC,EAAAnM,QAEAH,EAAAoI,GAAA,EAAiCpI,EAAA6vC,IAAS7vC,EAC1C0G,GAAA4F,EAAAtM,GAAAG,OAAA4wE,EAGA,OAAArqE,EAAAM,EAAA8oC,UAEG1vC,KAAAsuE,EAAAhvE,WACHa,EAAAmuE,aAEA5tE,IAAAsM,OAAA,yGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAqM,EAAArM,EAAA,uBAAAqM,aAEA2jE,EAAA,SAAAC,EAAAjuE,GACAnE,KAAAqyE,SAAA,EACAryE,KAAAwN,MAAA,GACAxN,KAAAiiE,OAAA,GACAjiE,KAAAsyE,YAAA,EACAtyE,KAAAoyE,YACA,IAAA5+D,EAAAxT,KAEAA,KAAAuyE,QAAA,WACA,GAAA/+D,EAAA6+D,QAAA,CAUA,IANA,IAAAG,EAAA,IAAA75D,KACA25D,EAAA9+D,EAAA8+D,YACAxkE,GAAA,EACAoyB,EAAA1sB,EAAA0sB,IACAryB,EAAAykE,EAEA9+D,EAAAhG,MAAA8kE,IACAA,IAGA,IAAAtc,EAAA91B,EAAAsiB,YACAiwB,EAAA,EAGA,IAFAj/D,EAAA6+D,SAAA,EAEAC,EAAAtc,GAAA,CACAxiD,EAAAk/D,aAAAJ,GACAxkE,EAAAwkE,EAEA,GACAA,UACS9+D,EAAAhG,MAAA8kE,IAIT,KAFAG,EAEA,WAAA95D,KAAA65D,EAAA,IACAh/D,EAAA6+D,QAAA57C,WAAAjjB,EAAA++D,QAAA,IACA,OAIA/+D,EAAA8+D,eACA,GAAAxkE,MAAAwkE,GACAzkE,GAAAC,GAAA0F,EAAAm/D,gBAAA9kE,EAAAC,OAIA,WACAS,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA4yE,aAAA,SAAAR,GACApyE,KAAAoyE,YACApyE,KAAAwN,MAAA,GACAxN,KAAAiiE,OAAA,GACAjiE,KAAA0kB,MAAA,IAGA1kB,KAAA6yE,YAAA,SAAA3yC,GACAlgC,KAAAkgC,MACAlgC,KAAAwN,MAAA,GACAxN,KAAAiiE,OAAA,GACAjiE,KAAAogD,QAGApgD,KAAA2yE,gBAAA,SAAAtgC,EAAAC,GACA,IAAA57B,EAAA,CACAo8D,MAAAzgC,EACAe,KAAAd,GAGAtyC,KAAAgiD,QAAA,UACAtrC,UAIA1W,KAAA0kB,MAAA,SAAApb,GACAtJ,KAAAsyE,YAAA/2D,KAAA5J,IAAArI,GAAA,EAAAtJ,KAAAsyE,YAAAtyE,KAAAkgC,IAAAsiB,aACAxiD,KAAAwN,MAAA1F,OAAA9H,KAAAsyE,YAAAtyE,KAAAwN,MAAAnM,QACArB,KAAAiiE,OAAAn6D,OAAA9H,KAAAsyE,YAAAtyE,KAAAiiE,OAAA5gE,QACArB,KAAAogD,OACApgD,KAAAqyE,QAAA57C,WAAAz2B,KAAAuyE,QAAA,MAGAvyE,KAAA+yE,cAAA,WACA/yE,KAAAqyE,UAAAryE,KAAAqyE,QAAA57C,WAAAz2B,KAAAuyE,QAAA,OAGAvyE,KAAAgzE,gBAAA,SAAAl3D,GACA,IAAAxS,EAAAwS,EAAA4I,MAAAqsB,IACAilB,EAAAl6C,EAAAm1B,IAAAF,IAAAznC,EAEA,OAAA0sD,EACAh2D,KAAAwN,MAAAlE,GAAA,UACO,aAAAwS,EAAAitC,OACP/oD,KAAAwN,MAAA1F,OAAAwB,EAAA0sD,EAAA,QACAh2D,KAAAiiE,OAAAn6D,OAAAwB,EAAA0sD,EAAA,YACO,CACP,IAAAx+C,EAAAjX,MAAAy1D,EAAA,GACAx+C,EAAA+B,QAAAjQ,EAAA,GACAtJ,KAAAwN,MAAA1F,OAAAvG,MAAAvB,KAAAwN,MAAAgK,GACAxX,KAAAiiE,OAAAn6D,OAAAvG,MAAAvB,KAAAiiE,OAAAzqD,GAGAxX,KAAAsyE,YAAA/2D,KAAA5J,IAAArI,EAAAtJ,KAAAsyE,YAAAtyE,KAAAkgC,IAAAsiB,aACAxiD,KAAAogD,QAGApgD,KAAAogD,KAAA,WACApgD,KAAAqyE,SAAA77C,aAAAx2B,KAAAqyE,SACAryE,KAAAqyE,SAAA,GAGAryE,KAAA8mE,UAAA,SAAA/1B,GACA,OAAA/wC,KAAAwN,MAAAujC,IAAA/wC,KAAA0yE,aAAA3hC,IAGA/wC,KAAAizE,SAAA,SAAAliC,GAEA,OADA/wC,KAAAsyE,aAAAvhC,GAAA/wC,KAAA0yE,aAAA3hC,GACA/wC,KAAAiiE,OAAAlxB,IAAA,SAGA/wC,KAAA0yE,aAAA,SAAA3hC,GACA,IAAAtzB,EAAAzd,KAAAkgC,IAAA0X,QAAA7G,GACAxkC,EAAAvM,KAAAiiE,OAAAlxB,EAAA,GACAr6B,EAAA1W,KAAAoyE,UAAAtO,cAAArmD,EAAAlR,EAAAwkC,GAUA,OARA/wC,KAAAiiE,OAAAlxB,GAAA,KAAAr6B,EAAAnK,MAAA,IACAvM,KAAAiiE,OAAAlxB,GAAAr6B,EAAAnK,MACAvM,KAAAwN,MAAAujC,EAAA,QACA/wC,KAAAsyE,YAAAvhC,EAAA,IAAA/wC,KAAAsyE,YAAAvhC,EAAA,IACO/wC,KAAAsyE,aAAAvhC,IACP/wC,KAAAsyE,YAAAvhC,EAAA,GAGA/wC,KAAAwN,MAAAujC,GAAAr6B,EAAA2M,UAEG/hB,KAAA6wE,EAAAvxE,WACHa,EAAA0wE,wBAEAnwE,IAAAsM,OAAA,wGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA+mC,EAAAjzC,EAAA,cAIAD,GAFAC,EAAA,aAEAA,EAAA,WAAAD,OAEAgxE,EAAA,SAAA7+B,EAAAhrC,EAAAK,GACA1J,KAAAmzE,UAAA9+B,GACAr0C,KAAAqJ,QACArJ,KAAA0J,QAAA,SAGA,WACA1J,KAAAozE,WAAA,IAEApzE,KAAAmzE,UAAA,SAAA9+B,GACAr0C,KAAAq0C,OAAA,IAAAA,EAAA,KACAr0C,KAAAq0C,SACAr0C,KAAAyX,MAAA,KAGAzX,KAAAqzE,OAAA,SAAAhxD,EAAAixD,EAAArtE,EAAAkqD,GACA,GAAAnwD,KAAAq0C,OAIA,IAHA,IAAA3vB,EAAAyrC,EAAA9d,SACApB,EAAAkf,EAAA7d,QAEApxC,EAAAwjB,EAAyBxjB,GAAA+vC,EAAU/vC,IAAA,CACnC,IAAA6rB,EAAA/sB,KAAAyX,MAAAvW,GAEA,MAAA6rB,KACAA,EAAAqoB,EAAAhB,gBAAAnuC,EAAA2xC,QAAA12C,GAAAlB,KAAAq0C,SACAhzC,OAAArB,KAAAozE,aAAArmD,IAAA1G,MAAA,EAAArmB,KAAAozE,aACArmD,IAAAtW,IAAA,SAAAU,GACA,WAAAjV,EAAAhB,EAAAiW,EAAAme,OAAAp0B,EAAAiW,EAAAme,OAAAne,EAAA9V,UAEArB,KAAAyX,MAAAvW,GAAA6rB,EAAA1rB,OAAA0rB,EAAA,IAGA,QAAA5R,EAAA4R,EAAA1rB,OAAmC8Z,KACnCm4D,EAAAC,qBAAAlxD,EAAA0K,EAAA5R,GAAAy3B,cAAA3sC,GAAAjG,KAAAqJ,MAAA8mD,OAIG7uD,KAAA4xE,EAAAtyE,WACHa,EAAAyxE,oBAEAlxE,IAAAsM,OAAA,iFAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,YAAAD,MAEA,SAAAsxE,EAAAC,EAAAC,GACA1zE,KAAAyzE,WAEAlzE,MAAAsG,QAAA6sE,GACA1zE,KAAA0zE,QAEAA,EAAA1zE,KAAA0zE,MAAA,CAAAA,GAGA,IAAAtgC,EAAAsgC,IAAAryE,OAAA,GACArB,KAAA4J,MAAA,IAAA1H,EAAAwxE,EAAA,GAAAhvD,MAAAqsB,IAAA2iC,EAAA,GAAAhvD,MAAAssB,OAAAoC,EAAAnC,IAAAF,IAAAqC,EAAAnC,IAAAD,QACAhxC,KAAA0kB,MAAA1kB,KAAA4J,MAAA8a,MACA1kB,KAAAixC,IAAAjxC,KAAA4J,MAAAqnC,IACAjxC,KAAA0zE,MAAAjxE,QAAA,SAAAyvD,GACAA,EAAAyhB,YAAA3zE,OACKA,OAGL,WACAA,KAAA4zE,SAAA,SAAArsD,GACAvnB,KAAA0kB,MAAAqsB,KAAAxpB,EACAvnB,KAAAixC,IAAAF,KAAAxpB,EACAvnB,KAAA0zE,MAAAjxE,QAAA,SAAAyvD,GACAA,EAAAxtC,MAAAqsB,KAAAxpB,EACA2qC,EAAAjhB,IAAAF,KAAAxpB,KAIAvnB,KAAA0yD,QAAA,SAAAR,GACA,GAAAA,EAAA2hB,QAAA,CACA,GAAA3hB,EAAAxtC,MAAAqsB,IAAA/wC,KAAAsJ,UAAA4oD,EAAA1oD,OAAAxJ,KAAAwJ,OACA,UAAAuE,MAAA,6DAGA/N,KAAA0zE,MAAA9lE,KAAAskD,GACAlyD,KAAA0zE,MAAAI,KAAA,SAAAv5D,EAAApa,GACA,OAAAoa,EAAA3Q,MAAAsoC,WAAA/xC,EAAAukB,MAAAqsB,IAAA5wC,EAAAukB,MAAAssB,UAGAhxC,KAAA4J,MAAAsoC,WAAAggB,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,QAAA,GACAhxC,KAAAixC,IAAAF,IAAAmhB,EAAAjhB,IAAAF,IACA/wC,KAAAixC,IAAAD,OAAAkhB,EAAAjhB,IAAAD,QACShxC,KAAA4J,MAAAqoC,aAAAigB,EAAAjhB,IAAAF,IAAAmhB,EAAAjhB,IAAAD,QAAA,IACThxC,KAAA0kB,MAAAqsB,IAAAmhB,EAAAxtC,MAAAqsB,IACA/wC,KAAA0kB,MAAAssB,OAAAkhB,EAAAxtC,MAAAssB,aAEO,GAAAkhB,EAAAxtC,MAAAqsB,KAAA/wC,KAAAixC,IAAAF,IACP/wC,KAAA0zE,MAAA9lE,KAAAskD,GACAlyD,KAAAixC,IAAAF,IAAAmhB,EAAAjhB,IAAAF,IACA/wC,KAAAixC,IAAAD,OAAAkhB,EAAAjhB,IAAAD,WACO,IAAAkhB,EAAAjhB,IAAAF,KAAA/wC,KAAA0kB,MAAAqsB,IAKP,UAAAhjC,MAAA,kEAJA/N,KAAA0zE,MAAAn6D,QAAA24C,GACAlyD,KAAA0kB,MAAAqsB,IAAAmhB,EAAAxtC,MAAAqsB,IACA/wC,KAAA0kB,MAAAssB,OAAAkhB,EAAAxtC,MAAAssB,OAKAkhB,EAAAoN,SAAAt/D,MAGAA,KAAA+zE,YAAA,SAAAhjC,GACA,OAAAA,GAAA/wC,KAAA0kB,MAAAqsB,QAAA/wC,KAAAixC,IAAAF,KAGA/wC,KAAAg0E,KAAA,SAAA3jE,EAAA7G,EAAAsnC,GACA,IAEAohB,EACA7gB,EAHA4iC,EAAA,EACAP,EAAA1zE,KAAA0zE,MAIAQ,GAAA,EAEA,MAAA1qE,IACAA,EAAAxJ,KAAAixC,IAAAF,IACAD,EAAA9wC,KAAAixC,IAAAD,QAGA,QAAA9vC,EAAA,EAAqBA,EAAAwyE,EAAAryE,OAAkBH,IAAA,CAIvC,QAFAmwC,GADA6gB,EAAAwhB,EAAAxyE,IACA0I,MAAAqoC,aAAAzoC,EAAAsnC,IAIA,YADAzgC,EAAA,KAAA7G,EAAAsnC,EAAAmjC,EAAAC,GAOA,IAHA7jE,EAAA,KAAA6hD,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,OAAAijC,EAAAC,IACA7jE,EAAA6hD,EAAAhuD,YAAAguD,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,OAAAijC,IAEA,IAAA5iC,EACA,OAGA6iC,GAAAhiB,EAAA2hB,QACAI,EAAA/hB,EAAAjhB,IAAAD,OAGA3gC,EAAA,KAAA7G,EAAAsnC,EAAAmjC,EAAAC,IAGAl0E,KAAAm0E,cAAA,SAAApjC,EAAAC,GAGA,IAFA,IAAAkhB,EAAA7gB,EAEAnwC,EAAA,EAAqBA,EAAAlB,KAAA0zE,MAAAryE,OAAuBH,IAAA,CAI5C,QAFAmwC,GADA6gB,EAAAlyD,KAAA0zE,MAAAxyE,IACA0I,MAAAsoC,WAAAnB,EAAAC,IAGA,OACAkhB,OACAkiB,KAAA,SAES,OAAA/iC,EACT,OACA6gB,OACAkiB,KAAA,UAKA,aAGAp0E,KAAAq0E,eAAA,SAAAtjC,EAAAC,EAAAglB,GACA,IACA9D,EACAwhB,EAFA/vC,EAAA3jC,KAAAm0E,cAAApjC,EAAAC,GAIA,GAAArN,EAGA,GAFAuuB,EAAAvuB,EAAAuuB,KAEA,UAAAvuB,EAAAywC,MAAAliB,EAAAxtC,MAAAssB,WAAAkhB,EAAAxtC,MAAAqsB,OACA1kB,OAAA3lB,SAAA2lB,OAAA3lB,QAAA4tE,IAAAvjC,EAAAC,EAAAkhB,QACS,GAAAA,EAAAxtC,MAAAqsB,OAAA,CAET,IAAA7vC,GADAwyE,EAAA1zE,KAAA0zE,OACA7rE,QAAAqqD,GAMA,IAJA,IAAAhxD,IACAlB,KAAA0kB,MAAAssB,QAAAglB,GAGiB90D,EAAAwyE,EAAAryE,OAAkBH,IAAA,CAInC,IAHAgxD,EAAAwhB,EAAAxyE,IACAwjB,MAAAssB,QAAAglB,GAEA9D,EAAA2hB,QACA,OAGA3hB,EAAAjhB,IAAAD,QAAAglB,EAGAh2D,KAAAixC,IAAAD,QAAAglB,IAKAh2D,KAAA0H,MAAA,SAAAqpC,EAAAC,GACA,IAAA9oC,EAAAlI,KAAAm0E,cAAApjC,EAAAC,GACA,IAAA9oC,GAAA,UAAAA,EAAAksE,KAAA,YACA,IAAAliB,EAAAhqD,EAAAgqD,KACAwhB,EAAA1zE,KAAA0zE,MACAD,EAAAzzE,KAAAyzE,SACAvyE,EAAAwyE,EAAA7rE,QAAAqqD,GACAqiB,EAAAb,EAAAxyE,EAAA,GACAlB,KAAAixC,IAAAF,IAAAwjC,EAAAtjC,IAAAF,IACA/wC,KAAAixC,IAAAD,OAAAujC,EAAAtjC,IAAAD,OAEA,IAAAwjC,EAAA,IAAAhB,EAAAC,EADAC,IAAA5rE,OAAA5G,EAAAwyE,EAAAryE,OAAAH,IAGA,OADAuyE,EAAA3rE,OAAA2rE,EAAA5rE,QAAA7H,MAAA,IAAAw0E,GACAA,GAGAx0E,KAAAqkE,MAAA,SAAAoQ,GAGA,IAFA,IAAAf,EAAAe,EAAAf,MAEAxyE,EAAA,EAAqBA,EAAAwyE,EAAAryE,OAAkBH,IACvClB,KAAA0yD,QAAAghB,EAAAxyE,IAGA,IAAAuyE,EAAAzzE,KAAAyzE,SACAA,EAAA3rE,OAAA2rE,EAAA5rE,QAAA4sE,GAAA,IAGAz0E,KAAAmU,SAAA,WACA,IAAAwvB,EAAA,CAAA3jC,KAAA4J,MAAAuK,WAAA,OAKA,OAJAnU,KAAA0zE,MAAAjxE,QAAA,SAAAyvD,GACAvuB,EAAA/1B,KAAA,KAAAskD,EAAA/9C,cAEAwvB,EAAA/1B,KAAA,KACA+1B,EAAA57B,KAAA,OAGA/H,KAAA00E,cAAA,SAAAzkE,GAGA,IAFA,IAAA0kE,EAAA,EAEAzzE,EAAA,EAAqBA,EAAAlB,KAAA0zE,MAAAryE,OAAuBH,IAAA,CAC5C,IAAAgxD,EAAAlyD,KAAA0zE,MAAAxyE,GAGA,IAFA+O,GAAAiiD,EAAAxtC,MAAAssB,OAAA2jC,GAEA,EACA,OACA5jC,IAAAmhB,EAAAxtC,MAAAqsB,IACAC,OAAAkhB,EAAAxtC,MAAAssB,OAAA/gC,GAMA,IAFAA,GAAAiiD,EAAAhuD,YAAA7C,QAEA,EACA,OAAA6wD,EAAAxtC,MAGAiwD,EAAAziB,EAAAjhB,IAAAD,OAGA,OACAD,IAAA/wC,KAAAixC,IAAAF,IACAC,OAAAhxC,KAAAixC,IAAAD,OAAA/gC,MAGG3O,KAAAkyE,EAAA5yE,WACHa,EAAA+xE,aAEAxxE,IAAAsM,OAAA,qEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAEA4kC,EAFA9wC,EAAA,WAAAD,MAEA+wC,cAEA2hC,EAAA,WACA50E,KAAA+sB,OAAA,GACA/sB,KAAA60E,MAAA,IAGA,WACA70E,KAAAizC,gBAEAjzC,KAAA80E,WAAA,SAAA5sE,EAAA6sE,EAAAC,GAGA,IAFA,IAAAlP,EAAA9lE,KAAA+sB,OAEA7rB,EAAA8zE,GAAA,EAAmC9zE,EAAA4kE,EAAAzkE,OAAiBH,IAAA,CACpD,IAAA0I,EAAAk8D,EAAA5kE,GACAq9C,EAAAtL,EAAA/qC,EAAA0B,EAAAqnC,KACA,KAAAsN,EAAA,IACA,IAAAD,EAAArL,EAAA/qC,EAAA0B,EAAA8a,OACA,WAAA65B,EAAAw2B,GAAA,IAAAz2B,GAAAp9C,EAAA,EAAAA,EACAo9C,EAAA,OAAAA,IAAAy2B,EAAA7zE,GACAA,EAAA,GAGA,OAAAA,EAAA,GAGAlB,KAAAoxB,IAAA,SAAAxnB,GACA,IAAAmrE,GAAAnrE,EAAA6oC,UACAuiC,EAAAh1E,KAAA80E,WAAAlrE,EAAA8a,MAAAqwD,GACAC,EAAA,IAAAA,KAAA,GACA,IAAAv8B,EAAAz4C,KAAA80E,WAAAlrE,EAAAqnC,IAAA8jC,EAAAC,GAEA,OADAv8B,EAAA,EAAAA,KAAA,EAAiDA,IACjDz4C,KAAA+sB,OAAAjlB,OAAAktE,EAAAv8B,EAAAu8B,EAAAprE,IAGA5J,KAAAi1E,QAAA,SAAAnP,GAGA,IAFA,IAAA5rC,EAAA,GAEAh5B,EAAA4kE,EAAAzkE,OAA+BH,KAC/Bg5B,EAAAtsB,KAAArM,MAAA24B,EAAAl6B,KAAAoxB,IAAA00C,EAAA5kE,KAGA,OAAAg5B,GAGAl6B,KAAAk1E,eAAA,SAAAhtE,GACA,IAAAhH,EAAAlB,KAAA80E,WAAA5sE,GACA,GAAAhH,GAAA,SAAAlB,KAAA+sB,OAAAjlB,OAAA5G,EAAA,IAGAlB,KAAAqkE,MAAA,WASA,IARA,IAMAz6D,EANAswB,EAAA,GACA4rC,EAAA9lE,KAAA+sB,OAIAo3C,GAHA2B,IAAAgO,KAAA,SAAAv5D,EAAApa,GACA,OAAA8yC,EAAA14B,EAAAmK,MAAAvkB,EAAAukB,UAEA,GAGAxjB,EAAA,EAAqBA,EAAA4kE,EAAAzkE,OAAiBH,IAAA,CACtC0I,EAAAu6D,EACAA,EAAA2B,EAAA5kE,GACA,IAAAmwC,EAAA4B,EAAArpC,EAAAqnC,IAAAkzB,EAAAz/C,OACA2sB,EAAA,IACA,GAAAA,GAAAznC,EAAA6oC,WAAA0xB,EAAA1xB,aAEAQ,EAAArpC,EAAAqnC,IAAAkzB,EAAAlzB,KAAA,IACArnC,EAAAqnC,IAAAF,IAAAozB,EAAAlzB,IAAAF,IACAnnC,EAAAqnC,IAAAD,OAAAmzB,EAAAlzB,IAAAD,QAGA80B,EAAAh+D,OAAA5G,EAAA,GACAg5B,EAAAtsB,KAAAu2D,GACAA,EAAAv6D,EACA1I,KAIA,OADAlB,KAAA+sB,OAAA+4C,EACA5rC,GAGAl6B,KAAAkxC,SAAA,SAAAH,EAAAC,GACA,OAAAhxC,KAAA80E,WAAA,CACA/jC,MACAC,YACO,GAGPhxC,KAAAm1E,cAAA,SAAAjtE,GACA,OAAAlI,KAAA80E,WAAA5sE,IAAA,GAGAlI,KAAAo1E,aAAA,SAAAltE,GACA,IAAAhH,EAAAlB,KAAA80E,WAAA5sE,GACA,GAAAhH,GAAA,SAAAlB,KAAA+sB,OAAA7rB,IAGAlB,KAAAoyC,SAAA,SAAA9oC,EAAAE,GACA,IAAAs8D,EAAA9lE,KAAA+sB,OACA,GAAA+4C,EAAA,GAAAphD,MAAAqsB,IAAAvnC,GAAAs8D,IAAAzkE,OAAA,GAAAqjB,MAAAqsB,IAAAznC,EAAA,SACA,IAAA0rE,EAAAh1E,KAAA80E,WAAA,CACA/jC,IAAAznC,EACA0nC,OAAA,IAEAgkC,EAAA,IAAAA,KAAA,GACA,IAAAv8B,EAAAz4C,KAAA80E,WAAA,CACA/jC,IAAAvnC,EACAwnC,OAAA,GACOgkC,GACPv8B,EAAA,IAAAA,KAAA,GAGA,IAFA,IAAA48B,EAAA,GAEAn0E,EAAA8zE,EAA8B9zE,EAAAu3C,EAAcv3C,IAC5Cm0E,EAAAznE,KAAAk4D,EAAA5kE,IAGA,OAAAm0E,GAGAr1E,KAAAs1E,UAAA,WACA,OAAAt1E,KAAA+sB,OAAAjlB,OAAA,EAAA9H,KAAA+sB,OAAA1rB,SAGArB,KAAAqzD,OAAA,SAAAptD,GACAjG,KAAAiG,SAAAjG,KAAAszD,SACAtzD,KAAAiG,UACAjG,KAAAyE,SAAAzE,KAAA2uE,UAAAhsE,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,SAAAtF,KAAAyE,WAGAzE,KAAAszD,OAAA,WACAtzD,KAAAiG,UACAjG,KAAAiG,QAAA0lC,eAAA,SAAA3rC,KAAAyE,UACAzE,KAAAiG,QAAA,OAGAjG,KAAA2uE,UAAA,SAAA7yD,GAOA,IANA,IAAA4I,EAAA5I,EAAA4I,MACAusB,EAAAn1B,EAAAm1B,IACA3nC,EAAAob,EAAAqsB,IACAvnC,EAAAynC,EAAAF,IACAhkB,EAAA/sB,KAAA+sB,OAEA7rB,EAAA,EAAAC,EAAA4rB,EAAA1rB,OAAwCH,EAAAC,EAAOD,IAAA,CAE/C,IADAugE,EAAA10C,EAAA7rB,IACA+vC,IAAAF,KAAAznC,EAAA,MAGA,aAAAwS,EAAAitC,OAIA,IAHA,IAAAwsB,EAAA/rE,EAAAF,EACAyjE,GAAAroD,EAAAssB,OAAAC,EAAAD,OAEc9vC,EAAAC,EAAOD,IAAA,CAErB,IADAugE,EAAA10C,EAAA7rB,IACAwjB,MAAAqsB,IAAAznC,EAAA,MASA,GAPAm4D,EAAA/8C,MAAAqsB,KAAAznC,GAAAm4D,EAAA/8C,MAAAssB,QAAAtsB,EAAAssB,SACAywB,EAAA/8C,MAAAssB,QAAAtsB,EAAAssB,QAAAhxC,KAAA60E,OAAA,IACApT,EAAA/8C,MAAAssB,QAAA+7B,EACAtL,EAAA/8C,MAAAqsB,KAAAwkC,IAIA9T,EAAAxwB,IAAAF,KAAAznC,GAAAm4D,EAAAxwB,IAAAD,QAAAtsB,EAAAssB,OAAA,CACA,GAAAywB,EAAAxwB,IAAAD,QAAAtsB,EAAAssB,QAAAhxC,KAAA60E,MAAA,EACA,SAGApT,EAAAxwB,IAAAD,QAAAtsB,EAAAssB,QAAA+7B,EAAA,GAAA7rE,EAAAC,EAAA,GACAsgE,EAAAxwB,IAAAD,OAAAywB,EAAA/8C,MAAAssB,QAAAywB,EAAAxwB,IAAAD,QAAAjkB,EAAA7rB,EAAA,GAAAwjB,MAAAssB,SAAAywB,EAAAxwB,IAAAD,QAAA+7B,GAGAtL,EAAAxwB,IAAAD,QAAA+7B,EACAtL,EAAAxwB,IAAAF,KAAAwkC,QAOA,IAHAA,EAAAjsE,EAAAE,EACAujE,EAAAroD,EAAAssB,OAAAC,EAAAD,OAEc9vC,EAAAC,EAAOD,IAAA,CAErB,IADAugE,EAAA10C,EAAA7rB,IACAwjB,MAAAqsB,IAAAvnC,EAAA,MAEAi4D,EAAAxwB,IAAAF,IAAAvnC,IAAAF,EAAAm4D,EAAAxwB,IAAAF,KAAAznC,GAAAm4D,EAAAxwB,IAAAF,KAAArsB,EAAAssB,OAAAywB,EAAAxwB,IAAAD,SACAywB,EAAAxwB,IAAAF,IAAAznC,EACAm4D,EAAAxwB,IAAAD,OAAAtsB,EAAAssB,QACWywB,EAAAxwB,IAAAF,KAAAvnC,EACXi4D,EAAAxwB,IAAAD,QAAAC,EAAAD,QACAukC,GAAA9T,EAAAxwB,IAAAD,OAAAtsB,EAAAssB,UACAywB,EAAAxwB,IAAAD,OAAAtsB,EAAAssB,OACAywB,EAAAxwB,IAAAF,IAAArsB,EAAAqsB,MAGA0wB,EAAAxwB,IAAAD,QAAA+7B,EACAtL,EAAAxwB,IAAAF,KAAAwkC,GAEW9T,EAAAxwB,IAAAF,IAAAvnC,IACXi4D,EAAAxwB,IAAAF,KAAAwkC,GAGA9T,EAAA/8C,MAAAqsB,IAAAvnC,IAAAF,EAAAm4D,EAAA/8C,MAAAqsB,KAAAznC,GAAAm4D,EAAA/8C,MAAAqsB,KAAArsB,EAAAssB,OAAAywB,EAAA/8C,MAAAssB,SACAywB,EAAA/8C,MAAAqsB,IAAAznC,EACAm4D,EAAA/8C,MAAAssB,OAAAtsB,EAAAssB,QACWywB,EAAA/8C,MAAAqsB,KAAAvnC,EACXi4D,EAAA/8C,MAAAssB,QAAAC,EAAAD,QACAukC,GAAA9T,EAAA/8C,MAAAssB,OAAAtsB,EAAAssB,UACAywB,EAAA/8C,MAAAssB,OAAAtsB,EAAAssB,OACAywB,EAAA/8C,MAAAqsB,IAAArsB,EAAAqsB,MAGA0wB,EAAA/8C,MAAAssB,QAAA+7B,EACAtL,EAAA/8C,MAAAqsB,KAAAwkC,GAEW9T,EAAA/8C,MAAAqsB,IAAAvnC,IACXi4D,EAAA/8C,MAAAqsB,KAAAwkC,GAKA,MAAAA,GAAAr0E,EAAAC,EACA,KAAcD,EAAAC,EAAOD,IAAA,CACrB,IAAAugE,KAAA10C,EAAA7rB,IACAwjB,MAAAqsB,KAAAwkC,EACA9T,EAAAxwB,IAAAF,KAAAwkC,MAIGj0E,KAAAszE,EAAAh0E,WACHa,EAAAmzE,cAEA5yE,IAAAsM,OAAA,+FAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAumE,EAAAzyE,EAAA,iBAAAyyE,UAEArmE,EAAApM,EAAA,cAEAqzE,EAAA/zE,EAAA+zE,KAAA,SAAA5rE,EAAA1F,GACAlE,KAAAs/D,SAAA,KACAt/D,KAAAkE,cACAlE,KAAA4J,QACA5J,KAAA0kB,MAAA9a,EAAA8a,MACA1kB,KAAAixC,IAAArnC,EAAAqnC,IACAjxC,KAAA6zE,QAAAjqE,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,IACA/wC,KAAAy1E,SAAAz1E,KAAA+sB,OAAA,IAqEA,SAAA2oD,EAAAvG,EAAAjyB,GACAiyB,EAAAp+B,KAAAmM,EAAAnM,IACA,GAAAo+B,EAAAp+B,MAAAo+B,EAAAn+B,QAAAkM,EAAAlM,QAQA,SAAA2kC,EAAAxG,EAAAjyB,GACA,GAAAiyB,EAAAp+B,MAAAo+B,EAAAn+B,QAAAkM,EAAAlM,QACAm+B,EAAAp+B,KAAAmM,EAAAnM,IA9EAxiC,EAAA80B,SAAAmyC,EAAAZ,GACA,WACA50E,KAAAmU,SAAA,WACA,UAAAnU,KAAAkE,YAAA,KAAAlE,KAAA4J,MAAAuK,YAGAnU,KAAA2zE,YAAA,SAAArU,GACAt/D,KAAAs/D,WACAt/D,KAAAy1E,SAAAhzE,QAAA,SAAAyvD,GACAA,EAAAyhB,YAAArU,MAIAt/D,KAAA0yC,MAAA,WACA,IAAA9oC,EAAA5J,KAAA4J,MAAA8oC,QACAwf,EAAA,IAAAsjB,EAAA5rE,EAAA5J,KAAAkE,aAKA,OAJAlE,KAAAy1E,SAAAhzE,QAAA,SAAAmzE,GACA1jB,EAAAujB,SAAA7nE,KAAAgoE,EAAAljC,WAEAwf,EAAA2jB,iBAAA71E,KAAA61E,iBACA3jB,GAGAlyD,KAAA81E,WAAA,SAAA5jB,GACA,IAAAlyD,KAAA4J,MAAA9H,QAAAowD,GAAA,CA+CA,IAAAtoD,EAAAszC,EAAAtzC,EA9CAsoD,EA8CAhV,EA9CAl9C,KAAA0kB,MA+CAgxD,EAAA9rE,EAAA8a,MAAAw4B,GACAw4B,EAAA9rE,EAAAqnC,IAAAiM,GA5CA,IAHA,IAAAnM,EAAAmhB,EAAAxtC,MAAAqsB,IACAC,EAAAkhB,EAAAxtC,MAAAssB,OAEA9vC,EAAA,EAAAmwC,GAAA,EAA+BnwC,EAAAlB,KAAAy1E,SAAAp0E,QAE/B,IADAgwC,EAAArxC,KAAAy1E,SAAAv0E,GAAA0I,MAAAunC,QAAAJ,EAAAC,IADyD9vC,KAKzD,IAAA60E,EAAA/1E,KAAAy1E,SAAAv0E,GACA80E,EAAA,EAEA,MAAA3kC,EAAA,CACA,GAAA0kC,EAAAnsE,MAAA2nC,cAAA2gB,GAAA,OAAA6jB,EAAAD,WAAA5jB,GAAqF8jB,EAAA,EAGrFjlC,EAAAmhB,EAAAtoD,MAAAqnC,IAAAF,IACAC,EAAAkhB,EAAAtoD,MAAAqnC,IAAAD,OADA,IAGA71B,EAAAja,EAAA,IAAAmwC,GAAA,EAA+Bl2B,EAAAnb,KAAAy1E,SAAAp0E,QAE/B,IADAgwC,EAAArxC,KAAAy1E,SAAAt6D,GAAAvR,MAAAunC,QAAAJ,EAAAC,IADyD71B,KAKzD,GAAAk2B,GAAAl2B,IAIA,IAHA,IAAA86D,EAAAj2E,KAAAy1E,SAAA3tE,OAAA5G,EAAAia,EAAAja,EAAAgxD,GACA9e,EAAA,GAAA/B,EAAA4kC,EAAA50E,OAAA,EAAA40E,EAAA50E,OAEA60E,EAAAF,EAAiCE,EAAA9iC,EAAU8iC,IAC3ChkB,EAAA4jB,WAAAG,EAAAC,IAIA,OADAhkB,EAAAyhB,YAAA3zE,KAAAs/D,UACApN,IAGAlyD,KAAAm2E,aAAA,SAAAvsE,GACA,OAmBA,SAAAA,EAAAszC,GACAy4B,EAAA/rE,EAAA8a,MAAAw4B,GACAy4B,EAAA/rE,EAAAqnC,IAAAiM,GArBAi5B,CAAAvsE,EAAA5J,KAAA0kB,SAEGpjB,KAAAk0E,EAAA50E,aAsBHoB,IAAAsM,OAAA,yJAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,YAAAD,MAEAsxE,EAAArxE,EAAA,eAAAqxE,SAEAgC,EAAArzE,EAAA,UAAAqzE,KAEAhP,EAAArkE,EAAA,qBAAAqkE,cAqsBA/kE,EAAA20E,QAnsBA,WACAp2E,KAAAmyD,UAAA,SAAAphB,EAAAC,EAAAqlC,GACA,IAAA/W,EAAAt/D,KAAAu/D,YAAAxuB,GACA,IAAAuuB,EAAA,YAGA,IAFA,IAAAoU,EAAApU,EAAAoU,MAEAxyE,EAAA,EAAqBA,EAAAwyE,EAAAryE,OAAkBH,IAAA,CACvC,IAAA0I,EAAA8pE,EAAAxyE,GAAA0I,MAEA,GAAAA,EAAAsnC,SAAAH,EAAAC,GAAA,CACA,MAAAqlC,GAAAzsE,EAAA6nC,MAAAV,EAAAC,KAAApnC,EAAA6oC,UACA,SACW,OAAA4jC,GAAAzsE,EAAA8nC,QAAAX,EAAAC,KAAApnC,EAAA6oC,UACX,SAGA,OAAAihC,EAAAxyE,MAKAlB,KAAAs2E,gBAAA,SAAA1sE,GACA,IAAA8a,EAAA9a,EAAA8a,MACAusB,EAAArnC,EAAAqnC,IACAslC,EAAAv2E,KAAA6R,UACA2kE,EAAA,GACA9xD,EAAAssB,QAAA,EACAC,EAAAD,QAAA,EAEA,QAAA9vC,EAAA,EAAqBA,EAAAq1E,EAAAl1E,OAAsBH,IAAA,CAC3C,IAAAmwC,EAAAklC,EAAAr1E,GAAA0I,MAAAwnC,aAAAxnC,GAEA,MAAAynC,EAAA,CAES,OAAAA,EACT,MAKA,IAFA,IAAAqiC,EAAA6C,EAAAr1E,GAAAwyE,MAEAv4D,EAAA,EAAuBA,EAAAu4D,EAAAryE,OAAkB8Z,IAAA,CACzC,IAAA+2C,EAAAwhB,EAAAv4D,GAGA,QAFAk2B,EAAA6gB,EAAAtoD,MAAAwnC,aAAAxnC,IAGA,MACW,MAAAynC,EAAA,CAEA,OAAAA,EACX,MAGAmlC,EAAA5oE,KAAAskD,MAMA,OAFAxtC,EAAAssB,QAAA,EACAC,EAAAD,QAAA,EACAwlC,GAGAx2E,KAAAy2E,oBAAA,SAAA1pD,GACA,GAAAxsB,MAAAsG,QAAAkmB,GAAA,CACA,IAAA2mD,EAAA,GACA3mD,EAAAtqB,QAAA,SAAAmH,GACA8pE,IAAAt5D,OAAApa,KAAAs2E,gBAAA1sE,KACS5J,WAET0zE,EAAA1zE,KAAAs2E,gBAAAvpD,GAGA,OAAA2mD,GAGA1zE,KAAA02E,YAAA,WAIA,IAHA,IAAAhD,EAAA,GACA6C,EAAAv2E,KAAA6R,UAEA3Q,EAAA,EAAqBA,EAAAq1E,EAAAl1E,OAAsBH,IAC3C,QAAAia,EAAA,EAAuBA,EAAAo7D,EAAAr1E,GAAAwyE,MAAAryE,OAA+B8Z,IACtDu4D,EAAA9lE,KAAA2oE,EAAAr1E,GAAAwyE,MAAAv4D,IAIA,OAAAu4D,GAGA1zE,KAAA0gE,gBAAA,SAAA3vB,EAAAC,EAAAvpC,EAAA63D,GAEA,KADAA,KAAAt/D,KAAAu/D,YAAAxuB,IACA,YAQA,IAPA,IAKA5Y,EAAA+5B,EALAykB,EAAA,CACA1lC,IAAA,CACAD,OAAA,IAKA9vC,EAAA,EAAqBA,EAAAo+D,EAAAoU,MAAAryE,OAA2BH,IAAA,CAEhD,IAAAmwC,GADA6gB,EAAAoN,EAAAoU,MAAAxyE,IACA0I,MAAAsoC,WAAAnB,EAAAC,GAEA,OAAAK,EAAA,CACAlZ,EAAAn4B,KAAA43C,QAAAsa,EAAAxtC,MAAAqsB,KAAA73B,UAAAy9D,EAAA1lC,IAAAD,OAAAkhB,EAAAxtC,MAAAssB,QACA,MACS,OAAAK,EACT,YAGAslC,EAAAzkB,EAIA,OADA/5B,MAAAn4B,KAAA43C,QAAAsa,EAAAxtC,MAAAqsB,KAAA73B,UAAAy9D,EAAA1lC,IAAAD,UACA,GAAAvpC,EAAA0wB,EAAAjf,UAAA,EAAA83B,EAAA2lC,EAAA1lC,IAAAD,QAA4E,GAAAvpC,EAAA0wB,EAAAjf,UAAA83B,EAAA2lC,EAAA1lC,IAAAD,QAAuE7Y,GAGnJn4B,KAAAu/D,YAAA,SAAAtG,EAAA2d,GACA,IAAAnD,EAAAzzE,KAAA6R,UACA3Q,EAAA,EAIA,IAHA01E,IAAA11E,EAAAuyE,EAAA5rE,QAAA+uE,KACA,GAAA11E,MAAA,GAEaA,EAAAuyE,EAAApyE,OAAqBH,IAAA,CAClC,IAAAo+D,EAAAmU,EAAAvyE,GAEA,GAAAo+D,EAAA56C,MAAAqsB,KAAAkoB,GAAAqG,EAAAruB,IAAAF,KAAAkoB,EACA,OAAAqG,EACS,GAAAA,EAAAruB,IAAAF,IAAAkoB,EACT,YAIA,aAGAj5D,KAAA62E,gBAAA,SAAA5d,EAAA2d,GACA,IAAAnD,EAAAzzE,KAAA6R,UACA3Q,EAAA,EAIA,IAHA01E,IAAA11E,EAAAuyE,EAAA5rE,QAAA+uE,KACA,GAAA11E,MAAA,GAEaA,EAAAuyE,EAAApyE,OAAqBH,IAAA,CAClC,IAAAo+D,EAAAmU,EAAAvyE,GAEA,GAAAo+D,EAAAruB,IAAAF,KAAAkoB,EACA,OAAAqG,EAIA,aAGAt/D,KAAA82E,kBAAA,SAAAhE,EAAA1/B,GAIA,IAHA,IAAAqgC,EAAAzzE,KAAA6R,UACAs1D,EAAA/zB,EAAA0/B,EAAA,EAEA5xE,EAAA,EAAqBA,EAAAuyE,EAAApyE,OAAqBH,IAAA,CAC1C,IAAAo+D,EAAAmU,EAAAvyE,GACA+vC,EAAAquB,EAAAruB,IAAAF,IACArsB,EAAA46C,EAAA56C,MAAAqsB,IAEA,GAAAE,GAAAmC,EAAA,CACA1uB,EAAA0uB,IACA1uB,GAAAouD,EAAA3L,GAAA/zB,EAAA1uB,EAAyDyiD,EAAA,GAGzD,MACSl2B,GAAA6hC,IAET3L,GADAziD,GAAAouD,EACA7hC,EAAAvsB,EAAoCusB,EAAA6hC,EAAA,GAIpC,OAAA3L,GAGAnnE,KAAA+2E,aAAA,SAAAzX,GAKA,OAJAt/D,KAAA6R,UAAAjE,KAAA0xD,GACAt/D,KAAA6R,UAAAiiE,KAAA,SAAAv5D,EAAApa,GACA,OAAAoa,EAAAmK,MAAAqsB,IAAA5wC,EAAAukB,MAAAqsB,MAEAuuB,GAGAt/D,KAAA0yD,QAAA,SAAAxuD,EAAA0F,GACA,IAEAsoD,EAFAuhB,EAAAzzE,KAAA6R,UACAmlE,GAAA,EAEA9yE,aAAAsxE,EAAAtjB,EAAAhuD,GACAguD,EAAA,IAAAsjB,EAAA5rE,EAAA1F,IACA2xE,iBAAAjsE,EAAAisE,iBAEA71E,KAAAi3E,qBAAA/kB,EAAAtoD,OACA,IAAAN,EAAA4oD,EAAAxtC,MAAAqsB,IACAF,EAAAqhB,EAAAxtC,MAAAssB,OACAxnC,EAAA0oD,EAAAjhB,IAAAF,IACAD,EAAAohB,EAAAjhB,IAAAD,OACAkmC,EAAAl3E,KAAAmyD,UAAA7oD,EAAAunC,EAAA,GACAsmC,EAAAn3E,KAAAmyD,UAAA3oD,EAAAsnC,GAAA,GACA,GAAAomC,GAAAC,GAAAD,EAAA,OAAAA,EAAApB,WAAA5jB,GACAglB,MAAAttE,MAAA8nC,QAAApoC,EAAAunC,IAAA7wC,KAAAoyD,WAAA8kB,GACAC,MAAAvtE,MAAA6nC,MAAAjoC,EAAAsnC,IAAA9wC,KAAAoyD,WAAA+kB,GACA,IAAAzD,EAAA1zE,KAAAs2E,gBAAApkB,EAAAtoD,OAEA8pE,EAAAryE,OAAA,IACArB,KAAAo3E,YAAA1D,GACAA,EAAAjxE,QAAA,SAAAmzE,GACA1jB,EAAA4jB,WAAAF,MAIA,QAAA10E,EAAA,EAAqBA,EAAAuyE,EAAApyE,OAAqBH,IAAA,CAC1C,IAAAo+D,EAAAmU,EAAAvyE,GAEA,GAAAsI,GAAA81D,EAAA56C,MAAAqsB,IAAA,CACAuuB,EAAA5M,QAAAR,GACA8kB,GAAA,EACA,MACS,GAAA1tE,GAAAg2D,EAAAruB,IAAAF,IAAA,CAIT,GAHAuuB,EAAA5M,QAAAR,GACA8kB,GAAA,GAEA9kB,EAAA2hB,QAAA,CACA,IAAAY,EAAAhB,EAAAvyE,EAAA,GAEA,GAAAuzE,KAAA/vD,MAAAqsB,KAAAvnC,EAAA,CACA81D,EAAA+E,MAAAoQ,GACA,OAIA,MACS,GAAAjrE,GAAA81D,EAAA56C,MAAAqsB,IACT,MAaA,OATAimC,IAAA1X,EAAAt/D,KAAA+2E,aAAA,IAAAvD,EAAAxzE,KAAA6R,UAAAqgD,KACAlyD,KAAA85D,aAAA95D,KAAAq3E,gBAAA/X,EAAA56C,MAAAqsB,IAAAuuB,EAAA56C,MAAAqsB,KAA0F/wC,KAAAs3E,sBAAAhY,EAAA56C,MAAAqsB,IAAAuuB,EAAA56C,MAAAqsB,KAC1F/wC,KAAAu3E,WAAA,EAEAv3E,KAAAgiD,QAAA,cACAtrC,KAAAw7C,EACAnJ,OAAA,QAGAmJ,GAGAlyD,KAAAw3E,SAAA,SAAA9D,GACAA,EAAAjxE,QAAA,SAAAyvD,GACAlyD,KAAA0yD,QAAAR,IACOlyD,OAGPA,KAAAoyD,WAAA,SAAAF,GACA,IAAAoN,EAAApN,EAAAoN,SACAh2D,EAAAg2D,EAAA56C,MAAAqsB,IACAvnC,EAAA81D,EAAAruB,IAAAF,IACAwlC,EAAAv2E,KAAA6R,UACA6hE,EAAApU,EAAAoU,MAEA,MAAAA,EAAAryE,OACAk1E,EAAAzuE,OAAAyuE,EAAA1uE,QAAAy3D,GAAA,QACO,GAAAA,EAAA11D,MAAA6nC,MAAAygB,EAAAjhB,IAAAF,IAAAmhB,EAAAjhB,IAAAD,QACP0iC,EAAA38D,MACAuoD,EAAAruB,IAAAF,IAAA2iC,IAAAryE,OAAA,GAAA4vC,IAAAF,IACAuuB,EAAAruB,IAAAD,OAAA0iC,IAAAryE,OAAA,GAAA4vC,IAAAD,YACO,GAAAsuB,EAAA11D,MAAA8nC,QAAAwgB,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,QACP0iC,EAAAnsD,QACA+3C,EAAA56C,MAAAqsB,IAAA2iC,EAAA,GAAAhvD,MAAAqsB,IACAuuB,EAAA56C,MAAAssB,OAAA0iC,EAAA,GAAAhvD,MAAAssB,YACO,GAAAkhB,EAAA2hB,QACPH,EAAA5rE,OAAA4rE,EAAA7rE,QAAAqqD,GAAA,OACO,CACP,IAAAsiB,EAAAlV,EAAA53D,MAAAwqD,EAAAxtC,MAAAqsB,IAAAmhB,EAAAxtC,MAAAssB,SACA0iC,EAAAc,EAAAd,OACAnsD,QACAitD,EAAA9vD,MAAAqsB,IAAA2iC,EAAA,GAAAhvD,MAAAqsB,IACAyjC,EAAA9vD,MAAAssB,OAAA0iC,EAAA,GAAAhvD,MAAAssB,OAGAhxC,KAAAy3E,YACAz3E,KAAA85D,aAAA95D,KAAAq3E,gBAAA/tE,EAAAE,GAAsExJ,KAAAs3E,sBAAAhuE,EAAAE,IAGtExJ,KAAAu3E,WAAA,EAEAv3E,KAAAgiD,QAAA,cACAtrC,KAAAw7C,EACAnJ,OAAA,YAIA/oD,KAAAo3E,YAAA,SAAA1D,GAGA,IAFA,IAAAgE,EAAA,GAEAx2E,EAAA,EAAqBA,EAAAwyE,EAAAryE,OAAkBH,IACvCw2E,EAAA9pE,KAAA8lE,EAAAxyE,IAGAw2E,EAAAj1E,QAAA,SAAAyvD,GACAlyD,KAAAoyD,WAAAF,IACOlyD,MACPA,KAAAu3E,WAAA,GAGAv3E,KAAAqyD,WAAA,SAAAH,GACAlyD,KAAAoyD,WAAAF,GACAA,EAAAujB,SAAAhzE,QAAA,SAAAmzE,GACA1jB,EAAAikB,aAAAP,GACA51E,KAAA0yD,QAAAkjB,IACO51E,MAEPkyD,EAAA2jB,iBAAA,GACA71E,KAAA23E,QAAAzlB,EAAAxtC,MAAAqsB,IAAA,EAAAmhB,EAAAjhB,IAAAF,IAAAmhB,EAAA2jB,iBAAA,GAGA3jB,EAAAujB,SAAA,IAGAz1E,KAAA43E,YAAA,SAAAlE,GACAA,EAAAjxE,QAAA,SAAAyvD,GACAlyD,KAAAqyD,WAAAH,IACOlyD,OAGPA,KAAA63E,OAAA,SAAA7oC,EAAA8oC,GACA,IAAAluE,EAAA8pE,EASA,GAPA,MAAA1kC,GACAplC,EAAA,IAAA1H,EAAA,IAAAlC,KAAAwiD,YAAA,GACAs1B,GAAA,GACOluE,EAAA,iBAAAolC,EAAA,IAAA9sC,EAAA8sC,EAAA,EAAAA,EAAAhvC,KAAA43C,QAAA5I,GAAA3tC,QAA+G,QAAA2tC,EAAA9sC,EAAAqwC,WAAAvD,KAAyEA,EAE/L0kC,EAAA1zE,KAAAy2E,oBAAA7sE,GAEAkuE,EACA93E,KAAAo3E,YAAA1D,QAIA,IAFA,IAAA+B,EAAA/B,EAEA+B,EAAAp0E,QACArB,KAAA43E,YAAAnC,GACAA,EAAAz1E,KAAAy2E,oBAAA7sE,GAIA,GAAA8pE,EAAAryE,OAAA,OAAAqyE,GAGA1zE,KAAA+3E,YAAA,SAAA9e,EAAA+e,GACA,QAAAh4E,KAAAu/D,YAAAtG,EAAA+e,IAGAh4E,KAAAi4E,cAAA,SAAAhf,EAAA+e,GACA,IAAA1Y,EAAAt/D,KAAAu/D,YAAAtG,EAAA+e,GACA,OAAA1Y,IAAAruB,IAAAF,IAAAkoB,GAGAj5D,KAAAk4E,gBAAA,SAAAjf,EAAA+e,GACA,IAAA1Y,EAAAt/D,KAAAu/D,YAAAtG,EAAA+e,GACA,OAAA1Y,IAAA56C,MAAAqsB,IAAAkoB,GAGAj5D,KAAAm4E,mBAAA,SAAA7Y,EAAA91D,EAAAsnC,EAAAxnC,EAAAunC,GACA,MAAAvnC,MAAAg2D,EAAA56C,MAAAqsB,KACA,MAAAF,MAAA,GACA,MAAArnC,MAAA81D,EAAAruB,IAAAF,KACA,MAAAD,MAAA9wC,KAAA43C,QAAApuC,GAAAnI,QACA,IAAA6+B,EAAAlgC,KAAAkgC,IACAk4C,EAAA,GAeA,OAdA9Y,EAAA0U,KAAA,SAAA9vE,EAAA6sC,EAAAC,EAAAqnC,GACA,KAAAtnC,EAAAznC,GAAA,CAEA,GAAAynC,GAAAznC,EAAA,CACA,GAAA0nC,EAAAH,EAAA,OACAwnC,EAAA98D,KAAA3J,IAAAi/B,EAAAwnC,GAIAD,GADA,MAAAl0E,EACAA,EAEAg8B,EAAA0X,QAAA7G,GAAA73B,UAAAm/D,EAAArnC,KAEOxnC,EAAAsnC,GACPsnC,GAGAp4E,KAAAggE,eAAA,SAAAjvB,EAAAD,EAAAxnC,EAAAunC,GACA,IAGApzB,EAHA6hD,EAAAt/D,KAAAu/D,YAAAxuB,GAEA,OAAAuuB,EAKAt/D,KAAAm4E,mBAAA7Y,EAAAvuB,EAAAD,EAAAxnC,EAAAunC,IAHApzB,EAAAzd,KAAAkgC,IAAA0X,QAAA7G,IACA73B,UAAA23B,GAAA,EAAAC,GAAArzB,EAAApc,SAMArB,KAAA8R,eAAA,WACA,IAAAwmE,EAAA,GAOA,OANAA,EAAAt4E,KAAA6R,UAAA4E,IAAA,SAAA6oD,GACA,IAAAoU,EAAApU,EAAAoU,MAAAj9D,IAAA,SAAAy7C,GACA,OAAAA,EAAAxf,UAEA,WAAA8gC,EAAA8E,EAAA5E,MAKA1zE,KAAAu4E,WAAA,SAAAC,GACA,IAEAtmB,EACAumB,EAFA7uE,EADA5J,KAAA6F,UACA6xC,WAIA,GAAA9tC,EAAA6oC,UAAA,CACA,IAAAplC,EAAAzD,EAAA8a,MAGA,GAFAwtC,EAAAlyD,KAAAmyD,UAAA9kD,EAAA0jC,IAAA1jC,EAAA2jC,QAIA,YADAhxC,KAAAqyD,WAAAH,IAESumB,EAAAz4E,KAAA0pE,oBAAAr8D,IACT,GAAAzD,EAAA0nC,aAAAmnC,GACA7uE,EAAAqnC,IAAAwnC,GAEA7uE,EAAA8a,MAAA+zD,EACA7uE,EAAA8a,MAAAssB,SACApnC,EAAAqnC,IAAAD,WAESynC,EAAAz4E,KAAA0pE,oBAAA,CACT34B,IAAA1jC,EAAA0jC,IACAC,OAAA3jC,EAAA2jC,OAAA,MAEA,GAAApnC,EAAA0nC,aAAAmnC,GAAA7uE,EAAAqnC,IAAAwnC,EAA0E7uE,EAAA8a,MAAA+zD,EAC1E7uE,EAAA8a,MAAAssB,UAEApnC,EAAA5J,KAAA04E,oBAAArrE,EAAA0jC,IAAA1jC,EAAA2jC,SAAApnC,MAEO,CACP,IAAA8pE,EAAA1zE,KAAAs2E,gBAAA1sE,GAEA,GAAA4uE,GAAA9E,EAAAryE,OAEA,YADArB,KAAA43E,YAAAlE,GAES,GAAAA,EAAAryE,SACT6wD,EAAAwhB,EAAA,IAMA,GAFAxhB,MAAAlyD,KAAAmyD,UAAAvoD,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,SAEAkhB,KAAAtoD,MAAAuK,YAAAvK,EAAAuK,WACAnU,KAAAqyD,WAAAH,OADA,CAKA,IAAAhuD,EAAA,MAEA,IAAA0F,EAAAooC,cAAA,CAEA,IADA9tC,EAAAlE,KAAAumD,aAAA38C,IACAvI,OAAA,SACA6C,IAAAuD,OAAAyR,UAAA,UAGAlZ,KAAA0yD,QAAAxuD,EAAA0F,KAGA5J,KAAA04E,oBAAA,SAAA3nC,EAAAC,EAAA4iB,GACA,IAAAgX,EAAA,IAAApE,EAAAxmE,KAAA+wC,EAAAC,GACA8xB,EAAA8H,EAAAxD,kBACA19D,EAAAo5D,EAAAp5D,KAEA,GAAAo5D,GAAA,kBAAAltD,KAAAlM,GAAA,CAEA,YADAA,IAAAyN,MAAA,wBACAzN,GAAA,cACA,IAAAqlD,EAAA,IAAAz6C,OAAA5K,GACAE,EAAA,IAAA1H,EAEA,MAAA0xD,EAAA,CACA,GACAkP,EAAA8H,EAAA3D,qBACWnE,GAAA/T,EAAAn5C,KAAAktD,EAAAp5D,OAEXkhE,EAAA1D,cAOA,GAJAt9D,EAAA8a,MAAAqsB,IAAA65B,EAAAvD,qBACAz9D,EAAA8a,MAAAssB,OAAA45B,EAAAtD,wBAAA,EACAsD,EAAA,IAAApE,EAAAxmE,KAAA+wC,EAAAC,IAEA,GAAA4iB,EAAA,CACA,IAAAthB,GAAA,EAEA,GAGA,GAFAwwB,EAAA8H,EAAA1D,eAEA,GAAA50B,EAAA,CACA,IAAA/lC,EAAAvM,KAAAizE,SAAArI,EAAAhE,MACA7X,EAAAn5C,KAAArJ,KAAA+lC,EAAAs4B,EAAAhE,WACa,GAAAgE,EAAAhE,KAAAt0B,EACb,YAEWwwB,GAAA/T,EAAAn5C,KAAAktD,EAAAp5D,OAEXo5D,EAAA8H,EAAA3D,oBACSnE,EAAA8H,EAAAxD,kBAIT,OAFAx9D,EAAAqnC,IAAAF,IAAA65B,EAAAvD,qBACAz9D,EAAAqnC,IAAAD,OAAA45B,EAAAtD,wBAAAxE,EAAAphE,MAAAL,OAAA,EACAuI,IAIA5J,KAAA23E,QAAA,SAAAruE,EAAAE,EAAAmvE,QACA9jE,GAAA8jE,MAAA,KAEA,IAAArmB,EAAAtyD,KAAAsyD,YACA,GAAAA,EAAA,CAEA9oD,KAAAxJ,KAAAwiD,YAGA,QAAAzR,EAFAznC,KAAA,EAE8BynC,EAAAvnC,EAAcunC,IAE5C,GADA,MAAAuhB,EAAAvhB,KAAAuhB,EAAAvhB,GAAA/wC,KAAA44E,cAAA7nC,IACA,SAAAuhB,EAAAvhB,GAAA,CACA,IAAAnnC,EAAA5J,KAAA64E,mBAAA9nC,GAEA,GAAAnnC,KAAAooC,eAAApoC,EAAAqnC,IAAAF,KAAAvnC,GAAAI,EAAA8a,MAAAqsB,KAAAznC,EAAA,CACAynC,EAAAnnC,EAAAqnC,IAAAF,IAEA,IACA,IAAAmhB,EAAAlyD,KAAA0yD,QAAA,MAAA9oD,GACAsoD,MAAA2jB,iBAAA8C,GACW,MAAAtiE,SAKXrW,KAAA84E,YAAA,CACAC,OAAA,EACAC,UAAA,EACAC,aAAA,GAEAj5E,KAAAk5E,WAAA,YAEAl5E,KAAAm5E,aAAA,SAAA7uE,GACA,IAAAtK,KAAA84E,YAAAxuE,GAAA,UAAAyD,MAAA,uBAAAzD,EAAA,IAAAlK,OAAAmE,KAAAvE,KAAA84E,aAAA/wE,KAAA,WACA,GAAA/H,KAAAk5E,YAAA5uE,EAAA,CACAtK,KAAAk5E,WAAA5uE,EACA,UAAAA,GAAAtK,KAAA63E,SACA,IAAA30E,EAAAlD,KAAAo5E,UACAp5E,KAAAq5E,YAAA,MACAr5E,KAAAq5E,YAAAn2E,KAGAlD,KAAAq5E,YAAA,SAAAC,GACAt5E,KAAAo5E,WAAAE,IACAt5E,KAAAo5E,UAAAE,EACAt5E,KAAA+5C,IAAA,SAAA/5C,KAAAu5E,oBACAv5E,KAAA+5C,IAAA,kBAAA/5C,KAAAw5E,6BAEAx5E,KAAAgiD,QAAA,oBAEAs3B,GAAA,UAAAt5E,KAAAk5E,YAKAl5E,KAAAsyD,YAAA,GACAtyD,KAAA44E,cAAAU,EAAAV,cAAAj2E,KAAA22E,EAAAt5E,UAAAk5E,YACAl5E,KAAA64E,mBAAAS,EAAAT,mBAAAl2E,KAAA22E,EAAAt5E,UAAAk5E,YACAl5E,KAAAu5E,mBAAAv5E,KAAAy5E,kBAAA92E,KAAA3C,MACAA,KAAAw5E,4BAAAx5E,KAAA05E,2BAAA/2E,KAAA3C,MACAA,KAAAsF,GAAA,SAAAtF,KAAAu5E,oBACAv5E,KAAAsF,GAAA,kBAAAtF,KAAAw5E,8BAVAx5E,KAAAsyD,YAAA,OAaAtyD,KAAAwyD,uBAAA,SAAAzhB,EAAA4oC,GACA,IAAAC,EAAA55E,KAAAsyD,YACA,IAAAsnB,GAAAD,GAAAC,EAAA7oC,GAAA,SAIA,IAHA,IACA0hB,EADAvxD,EAAA6vC,EAAA,EAGA7vC,GAAA,IACA,IAAAo1D,EAAAsjB,EAAA14E,GAGA,GAFA,MAAAo1D,MAAAsjB,EAAA14E,GAAAlB,KAAA44E,cAAA13E,IAEA,SAAAo1D,EAAA,CACA,IAAA1sD,EAAA5J,KAAA64E,mBAAA33E,GAEA,GADAuxD,MAAA7oD,GACAA,KAAAqnC,IAAAF,OAAA,MAGA7vC,IAGA,OACA0I,OAAA,IAAA1I,GAAA0I,EACA6oD,eAIAzyD,KAAAuyD,kBAAA,SAAAxhB,EAAA16B,GAEA,IAAAyT,EAAA,CACAD,UAFAxT,IAAA0kC,UAEA5O,SACAlhB,IAAA5U,EAAA41B,SAAA51B,EAAAs4B,QACAkrC,SAAAxjE,EAAA61B,QAIA,IAFAlsC,KAAA85E,kBAAA/oC,EAAAjnB,GAEA,CACA,IAAAna,EAAA0G,EAAA4R,QAAA5R,EAAA+rC,WACAzyC,GAAA,kBAAAiG,KAAAjG,EAAA5M,aAAA4M,EAAA5M,WAAA,kBAIA/C,KAAA85E,kBAAA,SAAA/oC,EAAAjnB,GACA,GAAA9pB,KAAA44E,cAAA,CACA,IAAAlvE,EAAA1J,KAAA44E,cAAA7nC,GACAtzB,EAAAzd,KAAA43C,QAAA7G,GACA6iB,EAAA,QAAAlqD,GAAA,IACAwoD,EAAAlyD,KAAAmyD,UAAAphB,GAAA,IAAA6iB,EAAA,EAAAn2C,EAAApc,OAAAuyD,GAEA,GAAA1B,EAEA,OADApoC,EAAAD,UAAAC,EAAAmB,IAAAjrB,KAAAoyD,WAAAF,GAAmElyD,KAAAqyD,WAAAH,GACnEA,EAGA,IAAAtoD,EAAA5J,KAAA64E,mBAAA9nC,GAAA,GAEA,GAAAnnC,MAAAooC,gBACAkgB,EAAAlyD,KAAAmyD,UAAAvoD,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,OAAA,KAEApnC,EAAA9H,QAAAowD,EAAAtoD,OAEA,OADA5J,KAAAoyD,WAAAF,GACAA,EAIA,GAAApoC,EAAA+vD,SAAA,CACA,IAAAnjE,EAAA1W,KAAAwyD,uBAAAzhB,GAEA,GAAAr6B,EAAA9M,MACA,IAAAN,EAAAoN,EAAA9M,MAAA8a,MAAAqsB,IAAA,EACAvnC,EAAAkN,EAAA9M,MAAAqnC,IAAAF,IAGA/wC,KAAA23E,QAAAruE,EAAAE,EAAAsgB,EAAAmB,IAAA,YACOnB,EAAAD,UACPrgB,EAAAI,IAAAqnC,IAAAF,IAAA/wC,KAAAwiD,YACAxiD,KAAA23E,QAAA5mC,EAAA,EAAAvnC,EAAAsgB,EAAAmB,IAAA,QACOrhB,IACPkgB,EAAAmB,MAAArhB,EAAAisE,iBAAA,KACA71E,KAAA0yD,QAAA,MAAA9oD,IAGA,OAAAA,IAGA5J,KAAA+5E,iBAAA,SAAAC,GACA,IAAAjpC,EAAA/wC,KAAA6F,UAAAg3D,YAAA9rB,IACAA,EAAA/wC,KAAAk4E,gBAAAnnC,GACA,IAAAnnC,EAAA5J,KAAA85E,kBAAA/oC,EAAA,IACA,IAAAnnC,EAAA,CACA,IAAA8M,EAAA1W,KAAAwyD,uBAAAzhB,GAAA,GAGA,GAFAnnC,EAAA8M,EAAA9M,OAAA8M,EAAA+7C,WAEA,CACA1hB,EAAAnnC,EAAA8a,MAAAqsB,IACA,IAAAmhB,EAAAlyD,KAAAmyD,UAAAphB,EAAA/wC,KAAA43C,QAAA7G,GAAA1vC,OAAA,GAEA6wD,EACAlyD,KAAAoyD,WAAAF,GAEAlyD,KAAA0yD,QAAA,MAAA9oD,MAKA5J,KAAAy5E,kBAAA,SAAA39D,GACA,IAAAu2B,EAAAv2B,EAAA4I,MAAAqsB,IACAilB,EAAAl6C,EAAAm1B,IAAAF,IAAAsB,EAEA,OAAA2jB,EACAh2D,KAAAsyD,YAAAjgB,GAAA,UACO,aAAAv2B,EAAAitC,OACP/oD,KAAAsyD,YAAAxqD,OAAAuqC,EAAA2jB,EAAA,YACO,CACP,IAAAx+C,EAAAjX,MAAAy1D,EAAA,GACAx+C,EAAA+B,QAAA84B,EAAA,GACAryC,KAAAsyD,YAAAxqD,OAAAvG,MAAAvB,KAAAsyD,YAAA96C,KAIAxX,KAAA05E,2BAAA,SAAArjE,GACA,IAAA4qD,EAAA5qD,EAAAK,KAEAuqD,EAAA6R,OAAA7R,EAAA7tB,MACApzC,KAAAsyD,YAAAjxD,OAAA4/D,EAAA6R,OAAA9yE,KAAAsyD,YAAAxqD,OAAAm5D,EAAA6R,MAAA9yE,KAAAsyD,YAAAjxD,YAOAW,IAAAsM,OAAA,0GAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAm4D,EAAArkE,EAAA,qBAAAqkE,cAEAtkE,EAAAC,EAAA,YAAAD,MAqKAT,EAAAw4E,aAnKA,WACAj6E,KAAA0pE,oBAAA,SAAAl/D,EAAA0vE,GACA,MAAA1vE,EAAAwmC,OAAA,YACA,IAAAmpC,EAAAD,GAAAl6E,KAAA43C,QAAAptC,EAAAumC,KAAAv0B,OAAAhS,EAAAwmC,OAAA,GACA,OAAAmpC,EAAA,YACA,IAAAhjE,EAAAgjE,EAAAhjE,MAAA,yBACA,OAAAA,EACAA,EAAA,GAAAnX,KAAAo6E,oBAAAjjE,EAAA,GAAA3M,GAAwExK,KAAAopE,oBAAAjyD,EAAA,GAAA3M,GADxE,MAIAxK,KAAAq/C,gBAAA,SAAAn3C,GACA,IAEA0B,EAFA6T,EAAAzd,KAAA43C,QAAA1vC,EAAA6oC,KACAw7B,GAAA,EAEA2N,EAAAz8D,EAAAjB,OAAAtU,EAAA8oC,OAAA,GACA75B,EAAA+iE,KAAA/iE,MAAA,yBAYA,GAVAA,IACA+iE,EAAAz8D,EAAAjB,OAAAtU,EAAA8oC,QACA9oC,EAAA,CACA6oC,IAAA7oC,EAAA6oC,IACAC,OAAA9oC,EAAA8oC,OAAA,GAEA75B,EAAA+iE,KAAA/iE,MAAA,yBACAo1D,GAAA,IAGAp1D,EAAA,YAEA,GAAAA,EAAA,IAEA,KADAshE,EAAAz4E,KAAAo6E,oBAAAjjE,EAAA,GAAAjP,IACA,YACA0B,EAAA1H,EAAAqwC,WAAArqC,EAAAuwE,GAEAlM,IACA3iE,EAAAqnC,IAAAD,SACApnC,EAAA8a,MAAAssB,UAGApnC,EAAAyD,OAAAzD,EAAAqnC,QACO,CACP,IAAAwnC,EACA,KADAA,EAAAz4E,KAAAopE,oBAAAjyD,EAAA,GAAAjP,IACA,YACA0B,EAAA1H,EAAAqwC,WAAAkmC,EAAAvwE,GAEAqkE,IACA3iE,EAAA8a,MAAAssB,SACApnC,EAAAqnC,IAAAD,UAGApnC,EAAAyD,OAAAzD,EAAA8a,MAGA,OAAA9a,GAGA5J,KAAAq6E,UAAA,CACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAQ,IACRC,IAAQ,IACRC,IAAA,IACAC,IAAA,KAGA76E,KAAAopE,oBAAA,SAAA2B,EAAAvgE,EAAAswE,GACA,IAAAC,EAAA/6E,KAAAq6E,UAAAtP,GACA4N,EAAA,EACA/N,EAAA,IAAApE,EAAAxmE,KAAAwK,EAAAumC,IAAAvmC,EAAAwmC,QACA8xB,EAAA8H,EAAAxD,kBAEA,GADAtE,MAAA8H,EAAA1D,eACApE,EAAA,CAEAgY,IACAA,EAAA,IAAAxmE,OAAA,QAAAwuD,EAAAp5D,KAAA6K,QAAA,WAAAA,QAAA,mBAAAA,QAAA,4CAMA,IAHA,IAAAymE,EAAAxwE,EAAAwmC,OAAA45B,EAAAtD,wBAAA,EACA5lE,EAAAohE,EAAAphE,QAEA,CACA,KAAAs5E,GAAA,IACA,IAAAd,EAAAx4E,EAAA8a,OAAAw+D,GAEA,GAAAd,GAAAa,GAGA,OAFApC,GAAA,GAGA,OACA5nC,IAAA65B,EAAAvD,qBACAr2B,OAAAgqC,EAAApQ,EAAAtD,8BAGW4S,GAAAnP,IACX4N,GAAA,GAGAqC,GAAA,EAGA,GACAlY,EAAA8H,EAAA3D,qBACSnE,IAAAgY,EAAAllE,KAAAktD,EAAAp5D,OAET,SAAAo5D,EAAA,MAEAkY,GADAt5E,EAAAohE,EAAAphE,OACAL,OAAA,EAGA,cAGArB,KAAAo6E,oBAAA,SAAArP,EAAAvgE,EAAAswE,GACA,IAAAG,EAAAj7E,KAAAq6E,UAAAtP,GACA4N,EAAA,EACA/N,EAAA,IAAApE,EAAAxmE,KAAAwK,EAAAumC,IAAAvmC,EAAAwmC,QACA8xB,EAAA8H,EAAAxD,kBAEA,GADAtE,MAAA8H,EAAA1D,eACApE,EAAA,CAEAgY,IACAA,EAAA,IAAAxmE,OAAA,QAAAwuD,EAAAp5D,KAAA6K,QAAA,WAAAA,QAAA,mBAAAA,QAAA,oDAKA,IAFA,IAAAymE,EAAAxwE,EAAAwmC,OAAA45B,EAAAtD,0BAEA,CAIA,IAHA,IAAA5lE,EAAAohE,EAAAphE,MACAw5E,EAAAx5E,EAAAL,OAEA25E,EAAAE,GAAA,CACA,IAAAhB,EAAAx4E,EAAA8a,OAAAw+D,GAEA,GAAAd,GAAAe,GAGA,OAFAtC,GAAA,GAGA,OACA5nC,IAAA65B,EAAAvD,qBACAr2B,OAAAgqC,EAAApQ,EAAAtD,8BAGW4S,GAAAnP,IACX4N,GAAA,GAGAqC,GAAA,EAGA,GACAlY,EAAA8H,EAAA1D,oBACSpE,IAAAgY,EAAAllE,KAAAktD,EAAAp5D,OAET,SAAAo5D,EAAA,MACAkY,EAAA,EAGA,iBAMAh5E,IAAAsM,OAAA,wTAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAizC,EAAAjzC,EAAA,cAEA61D,EAAA71D,EAAA,iBAAA61D,YAEA7H,EAAAhuD,EAAA,YAEAqM,EAAArM,EAAA,uBAAAqM,aAEA4tD,EAAAj6D,EAAA,eAAAi6D,UAEA+e,EAAAh5E,EAAA,eAAAgpE,KAEAjpE,EAAAC,EAAA,WAAAD,MAEA0tE,EAAAztE,EAAA,cAAAytE,SAEAuC,EAAAhwE,EAAA,0BAAAgwE,oBAEAe,EAAA/wE,EAAA,sBAAA+wE,gBAEAtkE,EAAA,SAAAA,EAAA7F,EAAA7F,GACAlD,KAAAo7E,aAAA,GACAp7E,KAAAq7E,aAAA,GACAr7E,KAAAs7E,cAAA,GACAt7E,KAAAu7E,aAAA,GACAv7E,KAAAw7E,UAAA,EACAx7E,KAAAy7E,aAAA,EACAz7E,KAAA6R,UAAA,GACA7R,KAAAoJ,GAAA,aAAAwF,EAAA8sE,KAEA17E,KAAA6R,UAAAsC,SAAA,WACA,OAAAnU,KAAA+H,KAAA,OAGA/H,KAAAsF,GAAA,aAAAtF,KAAA27E,aAAAh5E,KAAA3C,OACAA,KAAA2uE,UAAA3uE,KAAAyE,SAAA9B,KAAA3C,MACA,iBAAA+I,KAAA6uC,UAAA7uC,EAAA,IAAA6mE,EAAA7mE,IACA/I,KAAA6yE,YAAA9pE,GACA/I,KAAA6F,UAAA,IAAAu2D,EAAAp8D,MACAA,KAAAk7D,aAAA,IAAAlD,EAAAh4D,MACAmwD,EAAAvC,aAAA5tD,MACAA,KAAA6E,QAAA3B,GAEAitD,EAAAnO,QAAA,UAAAhiD,OAGA4O,EAAA8sE,KAAA,EACA,WACAntE,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA6yE,YAAA,SAAA3yC,GACAlgC,KAAAkgC,KAAAlgC,KAAAkgC,IAAAyL,eAAA,SAAA3rC,KAAA2uE,WACA3uE,KAAAkgC,MACAA,EAAA56B,GAAA,SAAAtF,KAAA2uE,WACA3uE,KAAA47E,aAAA57E,KAAA47E,YAAA/I,YAAA7yE,KAAAyQ,eACAzQ,KAAA67E,eAGA77E,KAAAyQ,YAAA,WACA,OAAAzQ,KAAAkgC,KAGAlgC,KAAA87E,eAAA,SAAA7iB,GACA,IAAAA,EAGA,OAFAj5D,KAAAy5D,aAAA,QACAz5D,KAAAu5D,gBAAA,IAIA,IAAAniC,EAAAp3B,KAAAy5D,aAAAp4D,OACAH,EAAAlB,KAAAw5D,kBAAAx5D,KAAAy5D,aAAAR,GAAA,EAEA7hC,EAAAl2B,IACAlB,KAAAy5D,aAAA3xD,OAAA5G,EAAAk2B,GACAp3B,KAAAu5D,gBAAAzxD,OAAA5G,EAAAk2B,KAIAp3B,KAAAw5D,kBAAA,SAAAuiB,EAAAh8C,GAIA,IAHA,IAAAi8C,EAAA,EACAlmB,EAAAimB,EAAA16E,OAAA,EAEA26E,GAAAlmB,GAAA,CACA,IAAAmmB,EAAAD,EAAAlmB,GAAA,EACAQ,EAAAylB,EAAAE,GACA,GAAAl8C,EAAAu2B,EAAA0lB,EAAAC,EAAA,MAAmC,MAAAl8C,EAAAu2B,GAA+B,OAAA2lB,EAA/BnmB,EAAAmmB,EAAA,GAGnC,OAAAD,EAAA,GAGAh8E,KAAA67E,YAAA,WACA77E,KAAAu3E,WAAA,EACAv3E,KAAA+5D,UAAA,GACA/5D,KAAAk8E,gBAAA,GACAl8E,KAAA87E,eAAA,GACA97E,KAAA47E,aAAA57E,KAAA47E,YAAAl3D,MAAA,IAGA1kB,KAAA27E,aAAA,SAAAtlE,GACA,IAAA67C,EAAA77C,EAAAK,KACA1W,KAAA87E,eAAA5pB,EAAAxtC,MAAAqsB,MAGA/wC,KAAAyE,SAAA,SAAAqX,GACA9b,KAAAu3E,WAAA,EACAv3E,KAAAk7D,aAAAz2D,SAAAqX,GACA9b,KAAA87E,eAAAhgE,EAAA4I,MAAAqsB,KACA,IAAAorC,EAAAn8E,KAAAo8E,4BAAAtgE,IAEA9b,KAAAq8E,WAAAr8E,KAAAs8E,eACAH,KAAA96E,SACArB,KAAAs8E,aAAAlrD,IAAA,CACA23B,OAAA,cACA2qB,MAAAyI,GACWn8E,KAAAu8E,iBACXv8E,KAAAu8E,iBAAA,GAGAv8E,KAAAs8E,aAAAlrD,IAAAtV,EAAA9b,KAAAu8E,iBACAv8E,KAAAu8E,iBAAA,EACAv8E,KAAAw8E,mBAAA7nC,YAGA30C,KAAA47E,aAAA57E,KAAA47E,YAAA5I,gBAAAl3D,GAEA9b,KAAAgiD,QAAA,SAAAlmC,IAGA9b,KAAAgF,SAAA,SAAA+D,GACA/I,KAAAkgC,IAAAl7B,SAAA+D,GACA/I,KAAA6F,UAAA+3D,OAAA,KACA59D,KAAA87E,eAAA,GACA97E,KAAA6Q,eAAA7Q,KAAAs8E,cACAt8E,KAAA4Q,iBAAA6rE,SAGAz8E,KAAAgI,SAAAhI,KAAAmU,SAAA,WACA,OAAAnU,KAAAkgC,IAAAl4B,YAGAhI,KAAA8I,aAAA,WACA,OAAA9I,KAAA6F,WAGA7F,KAAAizE,SAAA,SAAAliC,GACA,OAAA/wC,KAAA47E,YAAA3I,SAAAliC,IAGA/wC,KAAA8mE,UAAA,SAAA/1B,GACA,OAAA/wC,KAAA47E,YAAA9U,UAAA/1B,IAGA/wC,KAAA+mE,WAAA,SAAAh2B,EAAAC,GACA,IACA8xB,EADAz/C,EAAArjB,KAAA47E,YAAA9U,UAAA/1B,GAEAulB,EAAA,EAEA,SAAAtlB,EAAA,CACA,IAAA9vC,EAAAmiB,EAAAhiB,OAAA,EACAi1D,EAAAt2D,KAAA43C,QAAA7G,GAAA1vC,YAEA,IAAAH,EAAA,EAAuBA,EAAAmiB,EAAAhiB,WACvBi1D,GAAAjzC,EAAAniB,GAAAQ,MAAAL,SACA2vC,GAF0C9vC,KAO1C,OADA4hE,EAAAz/C,EAAAniB,KAEA4hE,EAAAl7D,MAAA1G,EACA4hE,EAAAp+C,MAAA4xC,EAAAwM,EAAAphE,MAAAL,OACAyhE,GAHA,MAMA9iE,KAAA6Q,eAAA,SAAAF,GAIA,GAHA3Q,KAAAs8E,aAAA3rE,EACA3Q,KAAAw8E,oBAAAx8E,KAAAw8E,mBAAA9nC,SAEA/jC,EAAA,CACA,IAAA6C,EAAAxT,KACA2Q,EAAA+rE,WAAA18E,MAEAA,KAAA28E,uBAAA,WACAnpE,EAAAgpE,mBAAA9nC,SACAlhC,EAAA+oE,iBAAA,GAGAv8E,KAAAw8E,mBAAApnC,EAAAP,YAAA70C,KAAA28E,6BAEA38E,KAAA28E,uBAAA,cAIA38E,KAAA48E,cAAA,WACA58E,KAAA28E,wBAAA38E,KAAA28E,0BAGA38E,KAAA68E,oBAAA,CACAC,KAAA,aACAC,KAAA,aACA7zB,QAAA,aACA8zB,QAAA,aACAP,MAAA,aACArrD,IAAA,aACA6rD,aAAA,aACAC,cAAA,aACAR,WAAA,cAGA18E,KAAA4Q,eAAA,WACA,OAAA5Q,KAAAs8E,cAAAt8E,KAAA68E,qBAGA78E,KAAA6pE,aAAA,WACA,OAAA7pE,KAAAiR,iBACAmkC,EAAA7B,aAAA,IAAAvzC,KAAA+Q,cAEA,MAIA/Q,KAAAgR,eAAA,SAAA+uB,GACA//B,KAAAyG,UAAA,cAAAs5B,IAGA//B,KAAAiR,eAAA,WACA,OAAAjR,KAAAm9E,eAAAn9E,KAAA+pE,MAAAqT,iBAGAp9E,KAAA8Q,WAAA,SAAAnF,GACA3L,KAAAyG,UAAA,UAAAkF,IAGA3L,KAAA+Q,WAAA,WACA,OAAA/Q,KAAAq9E,UAGAr9E,KAAA2/D,UAAA,SAAAn1D,GACA,OAAAxK,KAAAm9E,cAAA3yE,EAAAwmC,OAAAhxC,KAAAq9E,WAAA,GAGAr9E,KAAAs9E,0BAAA,SAAAC,GACAv9E,KAAAyG,UAAA,yBAAA82E,IAGAv9E,KAAA4/D,0BAAA,WACA,OAAA5/D,KAAAw9E,yBAGAx9E,KAAAy9E,YAAA,EAEAz9E,KAAAkR,aAAA,SAAAwsE,GACA19E,KAAAyG,UAAA,YAAAi3E,IAGA19E,KAAAmR,aAAA,WACA,OAAAnR,KAAAy9E,YAGAz9E,KAAA29E,gBAAA,WACA39E,KAAAkR,cAAAlR,KAAAy9E,aAGAz9E,KAAA49E,oBAAA,SAAA7sC,EAAAhuC,GACA/C,KAAAq7E,aAAAtqC,KAAA/wC,KAAAq7E,aAAAtqC,GAAA,IACA/wC,KAAAq7E,aAAAtqC,IAAA,IAAAhuC,EAEA/C,KAAAgiD,QAAA,wBAGAhiD,KAAA69E,uBAAA,SAAA9sC,EAAAhuC,GACA/C,KAAAq7E,aAAAtqC,IAAA/wC,KAAAq7E,aAAAtqC,IAAA,IAAAx8B,QAAA,IAAAxR,EAAA,IAEA/C,KAAAgiD,QAAA,wBAGAhiD,KAAAqR,eAAA,WACA,OAAArR,KAAAo7E,cAGAp7E,KAAAoR,eAAA,SAAA6vD,GACAjhE,KAAAo7E,aAAA,GAEA,QAAAl6E,EAAA,EAAqBA,EAAA+/D,EAAA5/D,OAAiBH,IACtClB,KAAAo7E,aAAAna,EAAA//D,IAAA,iBAGAlB,KAAAgiD,QAAA,wBAGAhiD,KAAA89E,iBAAA,WACA99E,KAAAo7E,aAAA,GAEAp7E,KAAAgiD,QAAA,wBAGAhiD,KAAA+9E,cAAA,SAAAhtC,EAAAhuC,QACA8R,IAAA9R,MAAA,kBACAA,EAAA/C,KAAAo7E,aAAArqC,GAAAhuC,SAAwD/C,KAAAo7E,aAAArqC,GAExD/wC,KAAAgiD,QAAA,wBAGAhiD,KAAAg+E,gBAAA,SAAAjtC,UACA/wC,KAAAo7E,aAAArqC,GAEA/wC,KAAAgiD,QAAA,wBAGAhiD,KAAA6J,UAAA,SAAAD,EAAAP,EAAAK,EAAAC,GACA,IAAAP,EAAApJ,KAAAw7E,YACAyC,EAAA,CACAr0E,QACAF,QAAA,OACAhF,SAAA,mBAAAgF,IAAA,KACAL,QACAM,YACAP,MAaA,OAVAO,GACA3J,KAAAs7E,cAAAlyE,GAAA60E,EAEAj+E,KAAAgiD,QAAA,uBAEAhiD,KAAAu7E,aAAAnyE,GAAA60E,EAEAj+E,KAAAgiD,QAAA,qBAGA54C,GAGApJ,KAAAk+E,iBAAA,SAAAD,EAAAt0E,GACA,GAAAs0E,EAAA5K,OAAA,CACA,IAAAjqE,EAAApJ,KAAAw7E,YAcA,OAbAyC,EAAA70E,KACA60E,EAAAt0E,YAEAA,GACA3J,KAAAs7E,cAAAlyE,GAAA60E,EAEAj+E,KAAAgiD,QAAA,uBAEAhiD,KAAAu7E,aAAAnyE,GAAA60E,EAEAj+E,KAAAgiD,QAAA,qBAGAi8B,IAGAj+E,KAAAmJ,aAAA,SAAAg1E,GACA,IAAAF,EAAAj+E,KAAAs7E,cAAA6C,IAAAn+E,KAAAu7E,aAAA4C,GACAF,WACAA,EAAAt0E,QAAA3J,KAAAs7E,cAAAt7E,KAAAu7E,cACA4C,GAEAn+E,KAAAgiD,QAAAi8B,EAAAt0E,QAAA,0CAGA3J,KAAAkJ,WAAA,SAAAS,GACA,OAAAA,EAAA3J,KAAAs7E,cAAAt7E,KAAAu7E,cAGAv7E,KAAAo+E,UAAA,SAAArvB,GACA,IAAA/uD,KAAAq+E,iBAAA,CACA,IAAAD,EAAA,IAAAlL,EAAA,iCACAlzE,KAAAq+E,iBAAAr+E,KAAAk+E,iBAAAE,GAGAp+E,KAAAq+E,iBAAAlL,UAAApkB,IAGA/uD,KAAAs+E,eAAA,SAAAh1E,EAAAE,EAAAH,EAAAM,GACA,iBAAAH,IACAH,EAAAG,EACAA,EAAAF,GAGAD,MAAA,YACA,IAAAO,EAAA,IAAA1H,EAAAoH,EAAA,EAAAE,EAAAsiE,KAEA,OADAliE,EAAAR,GAAApJ,KAAA6J,UAAAD,EAAAP,EAAA,WAAAM,GACAC,GAGA5J,KAAAmG,eAAA,SAAAnC,GACAhE,KAAAuiD,aAAAv+C,EAEAhE,KAAAgiD,QAAA,wBAGAhiD,KAAAgG,eAAA,WACA,OAAAhG,KAAAuiD,cAAA,IAGAviD,KAAAu+E,iBAAA,WACAv+E,KAAAmG,eAAA,KAGAnG,KAAAmwE,eAAA,SAAApnE,GACA,IAAAoO,EAAApO,EAAAoO,MAAA,gBAGAnX,KAAAowE,aADAj5D,EACAA,EAAA,GAEA,MAIAnX,KAAAs/C,aAAA,SAAAvO,EAAAC,GACA,IAAAvzB,EAAAzd,KAAA43C,QAAA7G,GACAytC,GAAA,EAGA,GAFAxtC,EAAA,IAAAwtC,IAAA/gE,EAAAjB,OAAAw0B,EAAA,GAAA75B,MAAAnX,KAAAwgE,UACAge,QAAA/gE,EAAAjB,OAAAw0B,GAAA75B,MAAAnX,KAAAwgE,UACAge,EAAA,IAAAzvB,EAAA/uD,KAAAwgE,aAAyC,WAAA5qD,KAAA6H,EAAA4I,MAAA2qB,EAAA,EAAAA,EAAA,IAAA+d,EAAA,UAAyEA,EAAA/uD,KAAAugE,WAClH,IAAA77C,EAAAssB,EAEA,GAAAtsB,EAAA,GACA,GACAA,UACSA,GAAA,GAAAjH,EAAAjB,OAAAkI,GAAAvN,MAAA43C,IAETrqC,IAKA,IAFA,IAAAusB,EAAAD,EAEAC,EAAAxzB,EAAApc,QAAAoc,EAAAjB,OAAAy0B,GAAA95B,MAAA43C,IACA9d,IAGA,WAAA/uC,EAAA6uC,EAAArsB,EAAAqsB,EAAAE,IAGAjxC,KAAAk/D,cAAA,SAAAnuB,EAAAC,GAIA,IAHA,IAAAytC,EAAAz+E,KAAAs/C,aAAAvO,EAAAC,GACAvzB,EAAAzd,KAAA43C,QAAA6mC,EAAAxtC,IAAAF,KAEAtzB,EAAAjB,OAAAiiE,EAAAxtC,IAAAD,QAAA75B,MAAA,UACAsnE,EAAAxtC,IAAAD,QAAA,EAGA,OAAAytC,GAGAz+E,KAAAswE,eAAA,SAAAC,GACAvwE,KAAAkgC,IAAAowC,eAAAC,IAGAvwE,KAAAwwE,eAAA,WACA,OAAAxwE,KAAAkgC,IAAAswC,kBAGAxwE,KAAAuR,aAAA,SAAAmtE,GACA1+E,KAAAyG,UAAA,YAAAi4E,IAGA1+E,KAAAwR,aAAA,WACA,OAAAxR,KAAA2+E,YAGA3+E,KAAA4+E,kBAAA,SAAAvoE,GACA,IAAA4qD,EAAA5qD,EAAAK,KACA1W,KAAA47E,YAAAl3D,MAAAu8C,EAAA6R,OAEA9yE,KAAAgiD,QAAA,kBAAA3rC,IAGArW,KAAAyuD,OAAA0B,EAAA1B,OACAzuD,KAAA+pE,MAAA,KACA/pE,KAAA6+E,QAAA,KAEA7+E,KAAA6E,QAAA,SAAA3B,EAAAgtC,GACA,GAAAhtC,GAAA,kBAAAA,EAAA,CACA,GAAAA,EAAAmoE,aAAA,OAAArrE,KAAA8+E,cAAA57E,GACA,IAAA4mB,EAAA5mB,EACAwS,EAAAoU,EAAApU,UAEAA,EAAAxS,GAAA,gBAKA,GAFAlD,KAAAyuD,OAAA,mBAAAzuD,KAAAyuD,OAAA,qBAAA0sB,GAEAn7E,KAAAyuD,OAAA/4C,KAAAoU,EAGA,OAFA9pB,KAAA8+E,cAAA9+E,KAAAyuD,OAAA/4C,SACAw6B,QAIAlwC,KAAA6+E,QAAAnpE,EACAy6C,EAAAhB,WAAA,QAAAz5C,GAAA,SAAAlD,GACA,GAAAxS,KAAA6+E,UAAAnpE,EAAA,OAAAw6B,OAEAlwC,KAAAyuD,OAAA/4C,KAAAoU,EACA9pB,KAAA8+E,cAAA9+E,KAAAyuD,OAAA/4C,IACSlD,KAAA24D,OACT34D,EAAA,IAAAA,EAAA24D,KAAArhD,GAEAA,IACA9pB,KAAAyuD,OAAA/4C,GAAAlD,EACAA,EAAAk7D,IAAAh4D,GAGA1V,KAAA8+E,cAAAtsE,IAGA09B,QACOvtC,KAAA3C,OACPA,KAAA+pE,OAAA/pE,KAAA8+E,cAAA9+E,KAAAyuD,OAAA,sBAGAzuD,KAAA8+E,cAAA,SAAA57E,EAAA67E,GAEA,GADAA,IAAA/+E,KAAA6+E,QAAA37E,EAAAwqE,KACA1tE,KAAA+pE,QAAA7mE,EAAA,CACAlD,KAAA+pE,MAAA7mE,EACAlD,KAAAg/E,cACAh/E,KAAA2+E,YAAA3+E,KAAAi/E,eACA,IAAA7M,EAAAlvE,EAAAmoE,eAEA,QAAAx2D,IAAAu9D,EAAA5mD,iBAAA,CACA,IAAAozD,EAAA5+E,KAAA4+E,kBAAAj8E,KAAA3C,MACAoyE,EAAA5mD,iBAAA,SAAAozD,GAGA,GAAA5+E,KAAA47E,YASA57E,KAAA47E,YAAAhJ,aAAAR,OATA,CACApyE,KAAA47E,YAAA,IAAAzJ,EAAAC,GAEA,IAAAr9B,EAAA/0C,KAEAA,KAAA47E,YAAApwD,iBAAA,kBAAAnV,GACA0+B,EAAAiN,QAAA,kBAAA3rC,KAMArW,KAAA47E,YAAA/I,YAAA7yE,KAAAyQ,eACAzQ,KAAAwgE,QAAAt9D,EAAAs9D,QACAxgE,KAAAugE,WAAAr9D,EAAAq9D,WAEAwe,IACA77E,EAAAg8E,iBAAAh8E,EAAAg8E,gBAAAl/E,MACAA,KAAAsG,SAAA64E,WAAAhqE,IAAA7T,KAAAtB,UAAAo/E,aACAp/E,KAAAq5E,YAAAn2E,EAAAm8E,cACAr/E,KAAA47E,YAAAl3D,MAAA,GAEA1kB,KAAA6P,MAAA,iBAIA7P,KAAAg/E,YAAA,WACAh/E,KAAAuyE,UACAvyE,KAAAuyE,QAAA+M,YACAt/E,KAAAuyE,QAAA,OAIAvyE,KAAAi/E,aAAA,WACA,IACAj/E,KAAAuyE,QAAAvyE,KAAA+pE,MAAAyD,aAAAxtE,MACO,MAAAqW,GACP85C,EAAAxpD,KAAA,wBAAA0P,GACArW,KAAAuyE,QAAA,OAIAvyE,KAAA0Q,QAAA,WACA,OAAA1Q,KAAA+pE,OAGA/pE,KAAAu/E,WAAA,EAEAv/E,KAAAw/E,aAAA,SAAAn5B,GACArmD,KAAAu/E,aAAAl5B,GAAA3iC,MAAA2iC,KACArmD,KAAAu/E,WAAAl5B,EAEArmD,KAAAgiD,QAAA,kBAAAqE,KAGArmD,KAAAgrD,aAAA,WACA,OAAAhrD,KAAAu/E,YAGAv/E,KAAAy/E,YAAA,EAEAz/E,KAAA0/E,cAAA,SAAAC,GACA3/E,KAAAy/E,cAAAE,GAAAj8D,MAAAi8D,KACA3/E,KAAAy/E,YAAAE,EAEA3/E,KAAAgiD,QAAA,mBAAA29B,KAGA3/E,KAAA4/E,cAAA,WACA,OAAA5/E,KAAAy/E,aAGAz/E,KAAA6/E,eAAA,WAEA,OADA7/E,KAAA8/E,gBACA9/E,KAAAqhE,YAAA9lD,KAAA3J,IAAA5R,KAAA+/E,wBAAA//E,KAAAggF,aACAhgF,KAAAggF,aAGAhgF,KAAA+/E,sBAAA,WACA,SAAA//E,KAAAigF,iBAAA,OAAAjgF,KAAAigF,iBACA,IAAAz3E,EAAA,EAIA,OAHAxI,KAAAqhE,YAAA5+D,QAAA,SAAA4nD,GACAA,KAAA21B,YAAAx3E,MAAA6hD,EAAA21B,eAEAhgF,KAAAkgF,gBAAA13E,GAGAxI,KAAA8/E,cAAA,SAAAK,GACA,GAAAngF,KAAAu3E,WAAA4I,EAAA,CAEA,GADAngF,KAAAu3E,WAAA,EACAv3E,KAAA85D,aAAA,OAAA95D,KAAAggF,YAAAhgF,KAAAogF,WASA,IARA,IAAA5yE,EAAAxN,KAAAkgC,IAAA8vC,cACAv4D,EAAAzX,KAAAk8E,gBACAmE,EAAA,EACAC,EAAA,EACAhhB,EAAAt/D,KAAA6R,UAAAyuE,GACAC,EAAAjhB,IAAA56C,MAAAqsB,IAAA+6B,IACA9V,EAAAxoD,EAAAnM,OAEAH,EAAA,EAAuBA,EAAA80D,EAAS90D,IAAA,CAChC,GAAAA,EAAAq/E,EAAA,CAEA,IADAr/E,EAAAo+D,EAAAruB,IAAAF,IAAA,IACAilB,EAAA,MAEAuqB,GADAjhB,EAAAt/D,KAAA6R,UAAAyuE,MACAhhB,EAAA56C,MAAAqsB,IAAA+6B,IAGA,MAAAr0D,EAAAvW,KAAAuW,EAAAvW,GAAAlB,KAAAwgF,sBAAAhzE,EAAAtM,IAAA,IACAuW,EAAAvW,GAAAm/E,MAAA5oE,EAAAvW,IAGAlB,KAAAggF,YAAAK,IAIArgF,KAAA43C,QAAA,SAAA7G,GACA,OAAA/wC,KAAAkgC,IAAA0X,QAAA7G,IAGA/wC,KAAA0wE,SAAA,SAAAr+B,EAAAC,GACA,OAAAtyC,KAAAkgC,IAAAwwC,SAAAr+B,EAAAC,IAGAtyC,KAAAwiD,UAAA,WACA,OAAAxiD,KAAAkgC,IAAAsiB,aAGAxiD,KAAAumD,aAAA,SAAA38C,GACA,OAAA5J,KAAAkgC,IAAAqmB,aAAA38C,GAAA5J,KAAA6F,UAAA6xC,aAGA13C,KAAAm6B,OAAA,SAAA3vB,EAAAzB,GACA,OAAA/I,KAAAkgC,IAAA/F,OAAA3vB,EAAAzB,IAGA/I,KAAAo6B,OAAA,SAAAxwB,GACA,OAAA5J,KAAAkgC,IAAA9F,OAAAxwB,IAGA5J,KAAA+wE,gBAAA,SAAA1+B,EAAAC,GACA,OAAAtyC,KAAAkgC,IAAA6wC,gBAAA1+B,EAAAC,IAGAtyC,KAAAygF,YAAA,SAAAhP,EAAAiP,GACA,GAAAjP,EAAApwE,OAAA,CACArB,KAAAq8E,WAAA,EAEA,QAAAn7E,EAAAuwE,EAAApwE,OAAA,GAAqC,GAAAH,EAASA,IAAA,CAC9C,IAAA4a,EAAA21D,EAAAvwE,GAEA,UAAA4a,EAAAitC,QAAA,UAAAjtC,EAAAitC,OACA/oD,KAAAkgC,IAAAyxC,YAAA71D,GACSA,EAAA43D,OACT1zE,KAAAw3E,SAAA17D,EAAA43D,QAIAgN,GAAA1gF,KAAAy7E,cACAhK,EAAAkP,gBAAA3gF,KAAA6F,UAAAuC,SAAAqpE,EAAAkP,iBAAoF3gF,KAAA6F,UAAA0kD,SAAAvqD,KAAA4gF,kBAAAnP,GAAA,KAGpFzxE,KAAAq8E,WAAA,IAGAr8E,KAAA6gF,YAAA,SAAApP,EAAAiP,GACA,GAAAjP,EAAApwE,OAAA,CACArB,KAAAq8E,WAAA,EAEA,QAAAn7E,EAAA,EAAqBA,EAAAuwE,EAAApwE,OAAmBH,IAAA,CACxC,IAAA4a,EAAA21D,EAAAvwE,GAEA,UAAA4a,EAAAitC,QAAA,UAAAjtC,EAAAitC,QACA/oD,KAAAkgC,IAAAquC,WAAAzyD,IAIA4kE,GAAA1gF,KAAAy7E,cACAhK,EAAAqP,eAAA9gF,KAAA6F,UAAAuC,SAAAqpE,EAAAqP,gBAAkF9gF,KAAA6F,UAAA0kD,SAAAvqD,KAAA4gF,kBAAAnP,GAAA,KAGlFzxE,KAAAq8E,WAAA,IAGAr8E,KAAA+gF,cAAA,SAAAC,GACAhhF,KAAAy7E,YAAAuF,GAGAhhF,KAAA4gF,kBAAA,SAAAnP,EAAAwP,GACA,SAAArP,EAAA91D,GACA,OAAAmlE,EAAA,WAAAnlE,EAAAitC,OAAA,WAAAjtC,EAAAitC,OAMA,IAHA,IAAAn/C,EAAAulE,EAGAjuE,EAAA,EAAqBA,EAAAuwE,EAAApwE,OAAmBH,IAAA,CACxC,IAAA4a,EAAA21D,EAAAvwE,GACA4a,EAAA4I,QAEA9a,EAYAgoE,EAAA91D,IACAqzD,EAAArzD,EAAA4I,OAEA,GAAA9a,EAAAunC,QAAAg+B,EAAAp+B,IAAAo+B,EAAAn+B,SACApnC,EAAA+nC,SAAAw9B,GAGAA,EAAArzD,EAAAm1B,IAEA,GAAArnC,EAAAunC,QAAAg+B,EAAAp+B,IAAAo+B,EAAAn+B,SACApnC,EAAAgoC,OAAAu9B,IAGA,IAEAA,EAAArzD,EAAA4I,OAEA,GAAA9a,EAAAunC,QAAAg+B,EAAAp+B,IAAAo+B,EAAAn+B,UACApnC,EAAA1H,EAAAqwC,WAAAz2B,EAAA4I,MAAA5I,EAAA4I,SAGA,GAhCAktD,EAAA91D,IACAlS,EAAA1H,EAAAqwC,WAAAz2B,EAAA4I,MAAA5I,EAAAm1B,MACA,IAEArnC,EAAA1H,EAAAqwC,WAAAz2B,EAAA4I,MAAA5I,EAAA4I,QACA,IA+BA,OAAA9a,GAGA5J,KAAAuU,QAAA,SAAA3K,EAAAb,GACA,OAAA/I,KAAAkgC,IAAA3rB,QAAA3K,EAAAb,IAGA/I,KAAAknD,SAAA,SAAAg6B,EAAAC,EAAAvtC,GACA,IAAA7qC,EAAA/I,KAAAumD,aAAA26B,GACAxN,EAAA1zE,KAAAs2E,gBAAA4K,GACAE,EAAAl/E,EAAAqwC,WAAA4uC,KAEA,IAAAvtC,EAAA,CACA5zC,KAAAo6B,OAAA8mD,GACA,IAAArY,EAAAqY,EAAAx8D,MAAAqsB,IAAAmwC,EAAAjwC,IAAAF,KACAswC,EAAAxY,GAAAqY,EAAAjwC,IAAAD,OAAAkwC,EAAAx8D,MAAAssB,OAAAkwC,EAAAjwC,IAAAD,UAGAowC,EAAA18D,MAAAqsB,KAAAmwC,EAAAjwC,IAAAF,KAAAqwC,EAAA18D,MAAAssB,OAAAkwC,EAAAjwC,IAAAD,SAAAowC,EAAA18D,MAAAssB,QAAAqwC,GACAD,EAAAnwC,IAAAF,KAAAmwC,EAAAjwC,IAAAF,KAAAqwC,EAAAnwC,IAAAD,OAAAkwC,EAAAjwC,IAAAD,SAAAowC,EAAAnwC,IAAAD,QAAAqwC,IAGAxY,GAAAuY,EAAA18D,MAAAqsB,KAAAmwC,EAAAjwC,IAAAF,MACAqwC,EAAA18D,MAAAqsB,KAAA83B,EACAuY,EAAAnwC,IAAAF,KAAA83B,GAMA,GAFAuY,EAAAnwC,IAAAjxC,KAAAm6B,OAAAinD,EAAA18D,MAAA3b,GAEA2qE,EAAAryE,OAAA,CACA,IAAAigF,EAAAJ,EAAAx8D,MACA68D,EAAAH,EAAA18D,MAEA28D,GADAxY,EAAA0Y,EAAAxwC,IAAAuwC,EAAAvwC,IACAwwC,EAAAvwC,OAAAswC,EAAAtwC,QACAhxC,KAAAw3E,SAAA9D,EAAAj9D,IAAA,SAAAoF,GAMA,OALAA,IAAA62B,SACAhuB,MAAAqsB,KAAAuwC,EAAAvwC,MAAAl1B,EAAA6I,MAAAssB,QAAAqwC,GACAxlE,EAAAo1B,IAAAF,KAAAuwC,EAAAvwC,MAAAl1B,EAAAo1B,IAAAD,QAAAqwC,GACAxlE,EAAA6I,MAAAqsB,KAAA83B,EACAhtD,EAAAo1B,IAAAF,KAAA83B,EACAhtD,KAIA,OAAAulE,GAGAphF,KAAAwhF,WAAA,SAAAl4E,EAAAE,EAAAi4E,GACAA,IAAAltE,QAAA,MAAAvU,KAAA6pE,gBAEA,QAAA94B,EAAAznC,EAA8BynC,GAAAvnC,EAAeunC,IAC7C/wC,KAAAkgC,IAAAmsC,aAAA,CACAt7B,MACAC,OAAA,GACSywC,IAITzhF,KAAA0hF,YAAA,SAAA93E,GAKA,IAJA,IAAA+3E,EAAA/3E,EAAA+oC,eACAivC,EAAA,IAAA1/E,EAAA,SACAqO,EAAAvQ,KAAA+Q,aAEA7P,EAAAygF,EAAAj9D,MAAAqsB,IAAsC7vC,GAAAygF,EAAA1wC,IAAAF,MAAuB7vC,EAAA,CAC7D,IAAAuc,EAAAzd,KAAA43C,QAAA12C,GACA0gF,EAAAl9D,MAAAqsB,IAAA7vC,EACA0gF,EAAA3wC,IAAAF,IAAA7vC,EAEA,QAAAia,EAAA,EAAuBA,EAAA5K,GACvB,KAAAkN,EAAAjB,OAAArB,KADiCA,GAIjCA,EAAA5K,GAAA,MAAAkN,EAAAjB,OAAArB,IACAymE,EAAAl9D,MAAAssB,OAAA71B,EACAymE,EAAA3wC,IAAAD,OAAA71B,EAAA,IAEAymE,EAAAl9D,MAAAssB,OAAA,EACA4wC,EAAA3wC,IAAAD,OAAA71B,GAGAnb,KAAAo6B,OAAAwnD,KAIA5hF,KAAA6hF,WAAA,SAAAxvC,EAAAC,EAAAshB,GAIA,GAHAvhB,EAAAryC,KAAAk4E,gBAAA7lC,GACAC,EAAAtyC,KAAAi4E,cAAA3lC,GAEAshB,EAAA,GAEA,IADA7iB,EAAA/wC,KAAAk4E,gBAAA7lC,EAAAuhB,IACA,WACA,IAAApnD,EAAAukC,EAAAsB,OACO,GAAAuhB,EAAA,GACP,IAAA7iB,EACA,IADAA,EAAA/wC,KAAAi4E,cAAA3lC,EAAAshB,IACA5zD,KAAAkgC,IAAAsiB,YAAA,WACAh2C,EAAAukC,EAAAuB,MACO,CACPD,EAAAryC,KAAA8hF,mBAAAzvC,GAEA7lC,GADA8lC,EAAAtyC,KAAA8hF,mBAAAxvC,IACAD,EAAA,EAGA,IAAAzoC,EAAA,IAAA1H,EAAAmwC,EAAA,EAAAC,EAAA75B,OAAAC,WACAg7D,EAAA1zE,KAAAs2E,gBAAA1sE,GAAA6M,IAAA,SAAAoF,GAIA,OAHAA,IAAA62B,SACAhuB,MAAAqsB,KAAAvkC,EACAqP,EAAAo1B,IAAAF,KAAAvkC,EACAqP,IAEArO,EAAA,GAAAomD,EAAA5zD,KAAAkgC,IAAAwwC,SAAAr+B,EAAAC,GAAAtyC,KAAAkgC,IAAA6wC,gBAAA1+B,EAAAC,GAGA,OAFAtyC,KAAAkgC,IAAA2wC,gBAAAx+B,EAAA7lC,EAAAgB,GACAkmE,EAAAryE,QAAArB,KAAAw3E,SAAA9D,GACAlnE,GAGAxM,KAAA+hF,YAAA,SAAA1vC,EAAAC,GACA,OAAAtyC,KAAA6hF,WAAAxvC,EAAAC,GAAA,IAGAtyC,KAAAgiF,cAAA,SAAA3vC,EAAAC,GACA,OAAAtyC,KAAA6hF,WAAAxvC,EAAAC,EAAA,IAGAtyC,KAAAiiF,eAAA,SAAA5vC,EAAAC,GACA,OAAAtyC,KAAA6hF,WAAAxvC,EAAAC,EAAA,IAGAtyC,KAAA8hF,mBAAA,SAAA/wC,GACA,OAAAx1B,KAAA3J,IAAA,EAAA2J,KAAA5J,IAAAo/B,EAAA/wC,KAAAkgC,IAAAsiB,YAAA,KAGAxiD,KAAAkiF,iBAAA,SAAAnxC,EAAAC,GACA,OAAAA,EAAA,IACAz1B,KAAA5J,IAAA3R,KAAAkgC,IAAA0X,QAAA7G,GAAA1vC,OAAA2vC,IAGAhxC,KAAAivE,wBAAA,SAAAl+B,EAAAC,GAGA,GAFAA,EAAAz1B,KAAA3J,IAAA,EAAAo/B,GAEAD,EAAA,EACAA,EAAA,EACAC,EAAA,MACO,CACP,IAAAglB,EAAAh2D,KAAAkgC,IAAAsiB,YAEAzR,GAAAilB,GACAjlB,EAAAilB,EAAA,EACAhlB,EAAAhxC,KAAAkgC,IAAA0X,QAAAoe,EAAA,GAAA30D,QAEA2vC,EAAAz1B,KAAA5J,IAAA3R,KAAAkgC,IAAA0X,QAAA7G,GAAA1vC,OAAA2vC,GAIA,OACAD,MACAC,WAIAhxC,KAAAi3E,qBAAA,SAAArtE,GACAA,EAAA8a,MAAAqsB,IAAA,GACAnnC,EAAA8a,MAAAqsB,IAAA,EACAnnC,EAAA8a,MAAAssB,OAAA,GAEApnC,EAAA8a,MAAAssB,OAAAhxC,KAAAkiF,iBAAAt4E,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,QAGA,IAAAglB,EAAAh2D,KAAAkgC,IAAAsiB,YAAA,EASA,OAPA54C,EAAAqnC,IAAAF,IAAAilB,GACApsD,EAAAqnC,IAAAF,IAAAilB,EACApsD,EAAAqnC,IAAAD,OAAAhxC,KAAAkgC,IAAA0X,QAAAoe,GAAA30D,QAEAuI,EAAAqnC,IAAAD,OAAAhxC,KAAAkiF,iBAAAt4E,EAAAqnC,IAAAF,IAAAnnC,EAAAqnC,IAAAD,QAGApnC,GAGA5J,KAAAogF,WAAA,GACApgF,KAAA85D,cAAA,EACA95D,KAAA0R,gBAAA,CACAC,IAAA,KACAC,IAAA,MAGA5R,KAAAoF,eAAA,SAAA+8E,GACA,GAAAA,GAAAniF,KAAA85D,aAAA,CAKA,GAJA95D,KAAA85D,aAAAqoB,EACAniF,KAAAu3E,WAAA,EACAv3E,KAAA87E,eAAA,GAEAqG,EAAA,CACA,IAAAnsB,EAAAh2D,KAAAwiD,YACAxiD,KAAA+5D,UAAAx5D,MAAAy1D,GACAh2D,KAAAq3E,gBAAA,EAAArhB,EAAA,GAGAh2D,KAAAgiD,QAAA,oBAIAhiD,KAAAsR,eAAA,WACA,OAAAtR,KAAA85D,cAGA95D,KAAAyR,kBAAA,SAAAE,EAAAC,GACA5R,KAAA0R,gBAAAC,SAAA3R,KAAA0R,gBAAAE,UACA5R,KAAA0R,gBAAA,CACAC,MACAC,OAEA5R,KAAAu3E,WAAA,EACAv3E,KAAAk7D,aAAAb,cACAr6D,KAAA85D,cAAA95D,KAAAgiD,QAAA,oBAIAhiD,KAAAoiF,gBAAA,SAAAC,EAAAC,GACA,IAAAC,EAAAviF,KAAA0R,gBACA6wE,EAAA3wE,IAAA,IAAA2wE,EAAA,CACA5wE,IAAA2wE,EACA1wE,IAAA0wE,IAEA,IAAAE,EAAAxiF,KAAAyiF,oBAAAJ,EAAAE,EAAA5wE,IAAA4wE,EAAA3wE,KAEA,OAAA4wE,GAAAxiF,KAAAogF,YAAAoC,EAAA,IACAxiF,KAAAogF,WAAAoC,EACAxiF,KAAAu3E,WAAA,EAEAv3E,KAAA85D,eACA95D,KAAAq3E,gBAAA,EAAAr3E,KAAAwiD,YAAA,GACAxiD,KAAA87E,eAAA,GAEA97E,KAAAgiD,QAAA,qBAGA,IAMAhiD,KAAAyiF,oBAAA,SAAAD,EAAA7wE,EAAAC,GAGA,OAFAD,IAAA6wE,EAAAjnE,KAAA3J,IAAAD,EAAA6wE,IACA5wE,IAAA4wE,EAAAjnE,KAAA5J,IAAAC,EAAA4wE,IACAA,GAGAxiF,KAAA0iF,aAAA,WACA,OAAA1iF,KAAAogF,YAGApgF,KAAA2iF,aAAA,SAAAC,GACA5iF,KAAAyR,kBAAAmxE,MAGA5iF,KAAA6iF,kBAAA,WACA,OACAlxE,IAAA3R,KAAA0R,gBAAAC,IACAC,IAAA5R,KAAA0R,gBAAAE,MAIA5R,KAAAo8E,4BAAA,SAAAtgE,GACA,IAAAqmE,EAAAniF,KAAA85D,aACA/Q,EAAAjtC,EAAAitC,OACArkC,EAAA5I,EAAA4I,MACAusB,EAAAn1B,EAAAm1B,IACAoB,EAAA3tB,EAAAqsB,IACAuB,EAAArB,EAAAF,IACAilB,EAAA1jB,EAAAD,EACA8pC,EAAA,KAGA,GAFAn8E,KAAAy3E,WAAA,EAEA,GAAAzhB,EACA,cAAAjN,EAAA,CACA/oD,KAAAmiF,EAAA,+BAAAr6E,OAAAuqC,EAAA2jB,GACA,IAAAugB,EAAAv2E,KAAA6R,UACAsqE,EAAAn8E,KAAAs2E,gBAAAx6D,GACA9b,KAAAo3E,YAAA+E,GACA,IACAlsE,EAAA,EAEA,GAHAqvD,EAAAt/D,KAAAu/D,YAAAtuB,EAAAF,KAGA,CACAuuB,EAAA+U,eAAApjC,EAAAF,IAAAE,EAAAD,OAAAtsB,EAAAssB,OAAAC,EAAAD,QACAsuB,EAAAsU,UAAA5d,GACA,IAAA8sB,EAAA9iF,KAAAu/D,YAAAltB,GAEAywC,OAAAxjB,IACAwjB,EAAAze,MAAA/E,GACAA,EAAAwjB,GAGA7yE,EAAAsmE,EAAA1uE,QAAAy3D,GAAA,EAGA,KAAmBrvD,EAAAsmE,EAAAl1E,OAAwB4O,IAAA,EAC3CqvD,EAAAiX,EAAAtmE,IAEAyU,MAAAqsB,KAAAE,EAAAF,KACAuuB,EAAAsU,UAAA5d,GAIA1jB,EAAAD,MACS,CACT,IAAA76B,EAAAjX,MAAAy1D,GACAx+C,EAAA+B,QAAA84B,EAAA,GACA,IAAA9S,EAAA4iD,EAAAniF,KAAA+5D,UAAA/5D,KAAAk8E,gBACA38C,EAAAz3B,OAAAvG,MAAAg+B,EAAA/nB,GACA++D,EAAAv2E,KAAA6R,UAEA5B,EAAA,EAEA,GAHAqvD,EAAAt/D,KAAAu/D,YAAAltB,GAGA,CACA,IAAAhB,EAAAiuB,EAAA11D,MAAAuoC,cAAAztB,EAAAqsB,IAAArsB,EAAAssB,QAEA,GAAAK,GACAiuB,IAAA53D,MAAAgd,EAAAqsB,IAAArsB,EAAAssB,WAGAsuB,EAAAsU,SAAA5d,GACAsJ,EAAA+U,eAAA/hC,EAAA,EAAArB,EAAAD,OAAAtsB,EAAAssB,UAEa,GAAAK,IACbiuB,EAAA+U,eAAAhiC,EAAA,EAAApB,EAAAD,OAAAtsB,EAAAssB,QACAsuB,EAAAsU,SAAA5d,IAGA/lD,EAAAsmE,EAAA1uE,QAAAy3D,GAAA,EAGA,KAAmBrvD,EAAAsmE,EAAAl1E,OAAwB4O,IAAA,CAC3C,IAAAqvD,KAAAiX,EAAAtmE,IAEAyU,MAAAqsB,KAAAsB,GACAitB,EAAAsU,SAAA5d,SAKAA,EAAAz6C,KAAA0I,IAAAnI,EAAA4I,MAAAssB,OAAAl1B,EAAAm1B,IAAAD,QAEA,WAAA+X,IACAozB,EAAAn8E,KAAAs2E,gBAAAx6D,GACA9b,KAAAo3E,YAAA+E,GACAnmB,OAGAsJ,EAAAt/D,KAAAu/D,YAAAltB,KAGAitB,EAAA+U,eAAAhiC,EAAA3tB,EAAAssB,OAAAglB,GAUA,OANAmsB,GAAAniF,KAAA+5D,UAAA14D,QAAArB,KAAAkgC,IAAAsiB,aACA97C,QAAA0lB,MAAA,6DAGApsB,KAAAy3E,WAAA,EACA0K,EAAAniF,KAAAq3E,gBAAAhlC,EAAAC,GAA+DtyC,KAAAs3E,sBAAAjlC,EAAAC,GAC/D6pC,GAGAn8E,KAAAs3E,sBAAA,SAAAjlC,EAAAC,EAAAnyC,GACAH,KAAAk8E,gBAAA7pC,GAAA,KACAryC,KAAAk8E,gBAAA5pC,GAAA,MAGAtyC,KAAAq3E,gBAAA,SAAAhlC,EAAAC,GACA,IAIAjvB,EACAi8C,EALA9xD,EAAAxN,KAAAkgC,IAAA8vC,cACArkE,EAAA3L,KAAA+Q,aACAgyE,EAAA/iF,KAAA+5D,UACAyoB,EAAAxiF,KAAAogF,WAGArvC,EAAAsB,EAGA,IAFAC,EAAA/2B,KAAA5J,IAAA2gC,EAAA9kC,EAAAnM,OAAA,GAEA0vC,GAAAuB,IACAgtB,EAAAt/D,KAAAu/D,YAAAxuB,EAAAuuB,KAOAj8C,EAAA,GACAi8C,EAAA0U,KAAA,SAAA9vE,EAAA6sC,EAAAC,EAAAqnC,GACA,IAAA2K,EAEA,SAAA9+E,EAAA,EACA8+E,EAAAhjF,KAAAijF,kBAAA/+E,EAAAmf,EAAAhiB,SACA,GAAA6hF,EAEA,QAAAhiF,EAAA,EAA6BA,EAAA8hF,EAAA3hF,OAAuBH,IACpD8hF,EAAA9hF,GAAAiiF,OAGAH,EAAAhjF,KAAAijF,kBAAAz1E,EAAAujC,GAAA73B,UAAAm/D,EAAArnC,GAAA3tB,EAAAhiB,QAGAgiB,IAAAjJ,OAAA4oE,IACWrgF,KAAA3C,MAAAs/D,EAAAruB,IAAAF,IAAAvjC,EAAA8xD,EAAAruB,IAAAF,KAAA1vC,OAAA,GACX0hF,EAAAzjB,EAAA56C,MAAAqsB,KAAA/wC,KAAAojF,mBAAA//D,EAAAm/D,EAAA72E,GACAolC,EAAAuuB,EAAAruB,IAAAF,IAAA,IAtBA1tB,EAAArjB,KAAAijF,kBAAAz1E,EAAAujC,IACAgyC,EAAAhyC,GAAA/wC,KAAAojF,mBAAA//D,EAAAm/D,EAAA72E,GACAolC,MAyBA,IAEAmyC,EAAA,EACAC,EAAA,EAEAE,EAAA,GACAC,EAAA,GACAC,EAAA,GA6eA,SAAAtpB,EAAA3D,GACA,QAAAA,EAAA,QACAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OA7eAt2D,KAAAojF,mBAAA,SAAA//D,EAAAm/D,EAAA72E,GACA,MAAA0X,EAAAhiB,OACA,SAGA,IAAA+M,EAAA,GACAo1E,EAAAngE,EAAAhiB,OACAoiF,EAAA,EACAC,EAAA,EACAC,EAAA3jF,KAAA4jF,YACAC,EAAA7jF,KAAA8jF,kBACAC,EAAAvB,GAAAjnE,KAAA3J,IAAA,EAAAjG,EAAA,SAAAk4E,EAAA,EAAAtoE,KAAA0C,MAAAukE,EAAA,GAiBA,SAAAwB,EAAA7iB,GAGA,IAFA,IAAAnL,EAAAmL,EAAAsiB,EAEAviF,EAAAuiF,EAA+BviF,EAAAigE,EAAejgE,IAAA,CAC9C,IAAA2+B,EAAAxc,EAAAniB,GACA,KAAA2+B,GAAA,IAAAA,IAAAm2B,GAAA,GAGA5nD,EAAA/M,SACA24D,EAxBA,WACA,IAAAiqB,EAAA,EACA,OAAAF,EAAA,OAAAE,EAEA,GAAAJ,EACA,QAAA3iF,EAAA,EAAyBA,EAAAmiB,EAAAhiB,OAAmBH,IAAA,CAC5C,IAAA4hE,EAAAz/C,EAAAniB,GACA,GAAA4hE,GAAAugB,EAAAY,GAAA,MAAiD,IAAAnhB,GAAAwgB,EAA8C,IAAAxgB,GAAAygB,EAAA,SAAsC,MAApFU,GAAAt4E,GAKjD,OADAg4E,IAAA,IAAAE,IAAAI,GAAAt4E,GACA4P,KAAA5J,IAAAsyE,EAAAF,GAYAG,GACA91E,EAAA4rD,UAGA0pB,GAAA1tB,EACA5nD,EAAAR,KAAA81E,GACAD,EAAAtiB,EAKA,IAFA,IAAAnH,EAAA,EAEAwpB,EAAAC,EAAAjB,EAAAxoB,GAAA,CACA,IAAAtyD,EAAA+7E,EAAAjB,EAAAxoB,EAEA,GAAA32C,EAAA3b,EAAA,IAAA27E,GAAAhgE,EAAA3b,IAAA27E,EACAW,EAAAt8E,QAIA,GAAA2b,EAAA3b,IAAAw7E,GAAA7/D,EAAA3b,IAAAy7E,EAAA,CA8BA,IAFA,IAAAgB,EAAA5oE,KAAA3J,IAAAlK,GAAA86E,MAAA,IAAAiB,EAAA,GAEA/7E,EAAAy8E,GAAA9gE,EAAA3b,GAAAw7E,GACAx7E,IAGA,GAAAi8E,EAAA,CACA,KAAAj8E,EAAAy8E,GAAA9gE,EAAA3b,GAAAw7E,GACAx7E,IAGA,KAAAA,EAAAy8E,GApGA,GAoGA9gE,EAAA3b,IACAA,SAGA,KAAAA,EAAAy8E,GAAA9gE,EAAA3b,GAAA27E,GACA37E,IAIAA,EAAAy8E,EACAH,IAAAt8E,IAjHA,GAsHA2b,EADA3b,EAAA+7E,EAAAjB,IACA96E,IACAs8E,EAAAt8E,EAAAsyD,QAvDA,CACA,KAAqBtyD,GAAA+7E,EAAA,GACrBpgE,EAAA3b,IAAAw7E,EAD6Cx7E,KAM7C,GAAAA,EAAA+7E,EAAA,CACAO,EAAAt8E,GACA,SAKA,IAFAA,EAAA+7E,EAAAjB,EAEqB96E,EAAA2b,EAAAhiB,QACrBgiB,EAAA3b,IAAAy7E,EAD4Cz7E,KAM5C,GAAAA,GAAA2b,EAAAhiB,OACA,MAGA2iF,EAAAt8E,IAkCA,OAAA0G,GAGApO,KAAAijF,kBAAA,SAAA9qD,EAAA7C,GACA,IACA3pB,EADA4zB,EAAA,GAEAjK,KAAA,EAEA,QAAAp0B,EAAA,EAAqBA,EAAAi3B,EAAA92B,OAAgBH,IAAA,CACrC,IAAAo1D,EAAAn+B,EAAAva,WAAA1c,GAEA,MAAAo1D,EAAA,CACA3qD,EAAA3L,KAAAk6D,iBAAA36B,EAAAl+B,OAAAi0B,GACAiK,EAAA3xB,KAAA01E,GAEA,QAAAniF,EAAA,EAAyBA,EAAAwK,EAAaxK,IACtCo+B,EAAA3xB,KAAA21E,QAES,IAAAjtB,EACT/2B,EAAA3xB,KAAAy1E,GACS/sB,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,GACT/2B,EAAA3xB,KA5IA,GA6IS0oD,GAAA,MAAA2D,EAAA3D,GACT/2B,EAAA3xB,KAlJA,EACA,GAmJA2xB,EAAA3xB,KApJA,GAwJA,OAAA2xB,GAGAv/B,KAAAwgF,sBAAA,SAAAroD,EAAAisD,EAAAC,GACA,MAAAD,EAAA,YAGA,IAAA9tB,EAAAtlB,EAEA,IAJA,MAAAozC,MAAAtY,KACAuY,KAAA,EAGArzC,EAAA,EAAsBA,EAAA7Y,EAAA92B,SAGtB,IAFAi1D,EAAAn+B,EAAAva,WAAAozB,IAGAqzC,GAAArkF,KAAAk6D,iBAAAmqB,GACS/tB,GAAA,MAAA2D,EAAA3D,GACT+tB,GAAA,EAEAA,GAAA,IAGAA,EAAAD,IAX2CpzC,KAgB3C,OAAAqzC,EAAArzC,IAGAhxC,KAAAqhE,YAAA,KAEArhE,KAAAskF,aAAA,SAAAvzC,GACA,GAAA/wC,KAAAqhE,YAAA,IAAAjX,EAAApqD,KAAAqhE,YAAAtwB,IAAA/wC,KAAAqhE,YAAAtwB,GAAAo2B,UAAA,OAAiG/c,EAAA,EAEjG,OAAApqD,KAAA85D,cAAA95D,KAAA+5D,UAAAhpB,GAGA/wC,KAAA+5D,UAAAhpB,GAAA1vC,OAAA,EAAA+oD,EAFA,EAAAA,GAMApqD,KAAAukF,gBAAA,SAAAxzC,GACA,OAAA/wC,KAAA85D,cAAA95D,KAAA+5D,UAAAhpB,GAGA/wC,KAAA+5D,UAAAhpB,GAAA1vC,OAAA,EAFA,GAMArB,KAAAwkF,iBAAA,SAAA/hC,GACA,GAAAziD,KAAA85D,aAAA,CACA,IAAA5xD,EAAAlI,KAAA8/D,yBAAArd,EAAAhqC,OAAAC,WACAtK,EAAApO,KAAA+5D,UAAA7xD,EAAA6oC,KACA,OAAA3iC,EAAA/M,QAAA+M,EAAA,GAAAlG,EAAA8oC,OAAA5iC,EAAA4rD,OAAA,EAEA,UAIAh6D,KAAAykF,uBAAA,SAAAhiC,GACA,IAAAv6C,EAAAlI,KAAA8/D,yBAAArd,EAAAhqC,OAAAC,WACA,OAAA1Y,KAAA0kF,uBAAAx8E,EAAA6oC,IAAA7oC,EAAA8oC,SAGAhxC,KAAA2kF,yBAAA,SAAA1rB,EAAA2rB,GACA,IAAAniC,EAAAziD,KAAA4iD,oBAAAqW,EAAA2rB,GACA,OAAA5kF,KAAAykF,uBAAAhiC,IAGAziD,KAAAkgE,iCAAA,SAAAjH,EAAA2rB,GACA,IAAAniC,EAAAziD,KAAA4iD,oBAAAqW,EAAA2rB,GACA,OAAA5kF,KAAA8/D,yBAAArd,EAAAhqC,OAAAC,UAAA,KAGA1Y,KAAA6kF,gBAAA,SAAA9zC,GACA,OAAA/wC,KAAA85D,aAGA95D,KAAA+5D,UAAAhpB,QAFA,GAMA/wC,KAAAk6D,iBAAA,SAAAmqB,GACA,OAAArkF,KAAAq9E,UAAAgH,EAAArkF,KAAAq9E,SAAA,IAGAr9E,KAAA8kF,oBAAA,SAAAriC,EAAA4hC,GACA,OAAArkF,KAAA8/D,yBAAArd,EAAA4hC,GAAAtzC,KAGA/wC,KAAA+kF,uBAAA,SAAAtiC,EAAA4hC,GACA,OAAArkF,KAAA8/D,yBAAArd,EAAA4hC,GAAArzC,QAGAhxC,KAAA8/D,yBAAA,SAAArd,EAAA4hC,EAAAnjB,GACA,GAAAze,EAAA,SACA1R,IAAA,EACAC,OAAA,GAEA,IAAAvzB,EAGAuzB,EAFAioB,EAAA,EACA2rB,EAAA,EAEA7zC,EAAA,EACAi0C,EAAA,EACA1rB,EAAAt5D,KAAAu5D,gBACAr4D,EAAAlB,KAAAw5D,kBAAAF,EAAA7W,GACArrB,EAAAkiC,EAAAj4D,OAEA,GAAA+1B,GAAAl2B,GAAA,EACA,CAAA6vC,EAAAuoB,EAAAp4D,GACA+3D,EAAAj5D,KAAAy5D,aAAAv4D,GADA,IAEA+jF,EAAAxiC,EAAA6W,EAAAliC,EAAA,QAEA6tD,GAAA7tD,EAOA,IAJA,IAAA8tD,EAAAllF,KAAAwiD,YAAA,EACA8c,EAAAt/D,KAAA62E,gBAAA5d,GACAsnB,EAAAjhB,IAAA56C,MAAAqsB,IAAA+6B,IAEA/6B,GAAA0R,KAGA1R,GAFAi0C,EAAAhlF,KAAAskF,aAAArrB,IAEAxW,GAAAwW,GAAAisB,IAGAn0C,GAAAi0C,IACA/rB,EAEAsnB,IACAtnB,EAAAqG,EAAAruB,IAAAF,IAAA,EAEAwvC,GADAjhB,EAAAt/D,KAAA62E,gBAAA5d,EAAAqG,IACAA,EAAA56C,MAAAqsB,IAAA+6B,KAIAmZ,IACAjlF,KAAAy5D,aAAA7rD,KAAAqrD,GACAj5D,KAAAu5D,gBAAA3rD,KAAAmjC,IAIA,GAAAuuB,KAAA56C,MAAAqsB,KAAAkoB,EACAx7C,EAAAzd,KAAAm4E,mBAAA7Y,GACArG,EAAAqG,EAAA56C,MAAAqsB,QACO,IAAAA,EAAAi0C,GAAAviC,GAAAwW,EAAAisB,EACP,OACAn0C,IAAAm0C,EACAl0C,OAAAhxC,KAAA43C,QAAAstC,GAAA7jF,QAGAoc,EAAAzd,KAAA43C,QAAAqhB,GACAqG,EAAA,KAGA,IAAA9G,EAAA,EACAU,EAAA39C,KAAA0C,MAAAwkC,EAAA1R,GAEA,GAAA/wC,KAAA85D,aAAA,CACA,IAAA1rD,EAAApO,KAAA+5D,UAAAd,GAEA7qD,IACA4iC,EAAA5iC,EAAA8qD,GAEAA,EAAA,GAAA9qD,EAAA/M,SACAm3D,EAAApqD,EAAA4rD,OACA4qB,EAAAx2E,EAAA8qD,EAAA,IAAA9qD,IAAA/M,OAAA,GACAoc,IAAAvE,UAAA0rE,KAQA,YAHA/vE,IAAAqsD,GAAAlhE,KAAAk7D,aAAAlC,UAAAjoB,EAAAmoB,EAAAD,EAAAC,KAAAmrB,EAAArkF,KAAAk7D,aAAAe,YAAAiF,IACA0jB,GAAA5kF,KAAAwgF,sBAAA/iE,EAAA4mE,EAAA7rB,GAAA,GACAx4D,KAAA85D,cAAA8qB,GAAA5zC,IAAA4zC,EAAA5zC,EAAA,GACAsuB,IAAAoV,cAAAkQ,GACA,CACA7zC,IAAAkoB,EACAjoB,OAAA4zC,IAIA5kF,KAAA8yC,yBAAA,SAAAmmB,EAAA2rB,GACA,wBAAAA,EAAA,IAAA18E,EAAAlI,KAAAivE,wBAAAhW,EAAAloB,IAAAkoB,EAAAjoB,aAA8G9oC,EAAAlI,KAAAivE,wBAAAhW,EAAA2rB,GAC9G3rB,EAAA/wD,EAAA6oC,IACA6zC,EAAA18E,EAAA8oC,OACA,IAEAkhB,EAFAzP,EAAA,EACA0iC,EAAA,MAEAjzB,EAAAlyD,KAAAmyD,UAAA8G,EAAA2rB,EAAA,MAGA3rB,EAAA/G,EAAAxtC,MAAAqsB,IACA6zC,EAAA1yB,EAAAxtC,MAAAssB,QAGA,IAAAouB,EACAruB,EAAA,EACAuoB,EAAAt5D,KAAAy5D,aACAv4D,EAAAlB,KAAAw5D,kBAAAF,EAAAL,GACA7hC,EAAAkiC,EAAAj4D,OAEA,GAAA+1B,GAAAl2B,GAAA,EACA,CAAA6vC,EAAAuoB,EAAAp4D,GACAuhD,EAAAziD,KAAAu5D,gBAAAr4D,GADA,IAEA+jF,EAAAhsB,EAAAK,EAAAliC,EAAA,QAEA6tD,GAAA7tD,EAMA,IAHA,IAAAkoC,EAAAt/D,KAAA62E,gBAAA9lC,GACAwvC,EAAAjhB,IAAA56C,MAAAqsB,IAAA+6B,IAEA/6B,EAAAkoB,GAAA,CACA,GAAAloB,GAAAwvC,EAAA,CAEA,IADAnhB,EAAAE,EAAAruB,IAAAF,IAAA,GACAkoB,EAAA,MAEAsnB,GADAjhB,EAAAt/D,KAAA62E,gBAAAzX,EAAAE,IACAA,EAAA56C,MAAAqsB,IAAA+6B,SAEA1M,EAAAruB,EAAA,EAGA0R,GAAAziD,KAAAskF,aAAAvzC,GACAA,EAAAquB,EAEA6lB,IACAjlF,KAAAy5D,aAAA7rD,KAAAmjC,GACA/wC,KAAAu5D,gBAAA3rD,KAAA60C,IAIA,IAAA21B,EAAA,GAEA9Y,GAAAvuB,GAAAwvC,GACAnI,EAAAp4E,KAAAm4E,mBAAA7Y,EAAArG,EAAA2rB,GACAO,EAAA7lB,EAAA56C,MAAAqsB,MAEAqnC,EAAAp4E,KAAA43C,QAAAqhB,GAAA//C,UAAA,EAAA0rE,GACAO,EAAAlsB,GAGA,IAAAT,EAAA,EAEA,GAAAx4D,KAAA85D,aAAA,CACA,IAAAsrB,EAAAplF,KAAA+5D,UAAAorB,GAEA,GAAAC,EAAA,CAGA,IAFA,IAAAC,EAAA,EAEAjN,EAAA/2E,QAAA+jF,EAAAC,IACA5iC,IACA4iC,IAGAjN,IAAAl/D,UAAAksE,EAAAC,EAAA,MAAAjN,EAAA/2E,QACAm3D,EAAA6sB,EAAA,EAAAD,EAAAprB,OAAA,GAIA,OACAjpB,IAAA0R,EACAzR,OAAAwnB,EAAAx4D,KAAAwgF,sBAAApI,GAAA,KAIAp4E,KAAA0kF,uBAAA,SAAA3zC,EAAA6zC,GACA,OAAA5kF,KAAA8yC,yBAAA/B,EAAA6zC,GAAA5zC,QAGAhxC,KAAA4iD,oBAAA,SAAAqW,EAAA2rB,GACA,OAAA5kF,KAAA8yC,yBAAAmmB,EAAA2rB,GAAA7zC,KAGA/wC,KAAAslF,gBAAA,WACA,IAAAC,EAAA,EACArzB,EAAA,KAEA,GAAAlyD,KAAA85D,aAeA,IANA,IAAAxnB,EAAAtyC,KAAA+5D,UAAA14D,OACA0vC,EAAA,EAGAwvC,GAFAr/E,EAAA,GACAgxD,EAAAlyD,KAAA6R,UAAA3Q,MACAgxD,EAAAxtC,MAAAqsB,IAAA+6B,KAEA/6B,EAAAuB,GAAA,CACA,IAAAlkC,EAAApO,KAAA+5D,UAAAhpB,GACAw0C,GAAAn3E,IAAA/M,OAAA,MACA0vC,EAEAwvC,IACAxvC,EAAAmhB,EAAAjhB,IAAAF,IAAA,EAEAwvC,GADAruB,EAAAlyD,KAAA6R,UAAA3Q,MACAgxD,EAAAxtC,MAAAqsB,IAAA+6B,SAvBA,CACAyZ,EAAAvlF,KAAAwiD,YAGA,IAFA,IAAAixB,EAAAzzE,KAAA6R,UAEA3Q,EAAA,EAAuBA,EAAAuyE,EAAApyE,OAAqBH,IAE5CqkF,IADArzB,EAAAuhB,EAAAvyE,IACA+vC,IAAAF,IAAAmhB,EAAAxtC,MAAAqsB,IAuBA,OADA/wC,KAAAqhE,cAAAkkB,GAAAvlF,KAAAwlF,0BACAD,GAGAvlF,KAAAylF,gBAAA,SAAAC,GACA1lF,KAAA2lF,iBAEA3lF,KAAAwgF,sBAAA,SAAAroD,EAAAisD,EAAAC,GACA,OAAAD,EAAA,YAGA,IAAA9tB,EAAAtlB,EAEA,IAJAozC,MAAAtY,KACAuY,KAAA,EAGArzC,EAAA,EAAwBA,EAAA7Y,EAAA92B,WAIxBgjF,GADA,QAFA/tB,EAAAn+B,EAAA3b,OAAAw0B,IAGAhxC,KAAAk6D,iBAAAmqB,GAEAqB,EAAAE,kBAAAtvB,IAGA8tB,GAT6CpzC,KAc7C,OAAAqzC,EAAArzC,MAIAhxC,KAAA4I,QAAA,WACA5I,KAAA47E,cACA57E,KAAA47E,YAAA/I,YAAA,MACA7yE,KAAA47E,YAAA,MAGA57E,KAAAg/E,eAGAh/E,KAAAi6D,eAMG34D,KAAAsN,EAAAhO,WAEHuB,EAAA,0BAAAi0E,QAAA90E,KAAAsN,EAAAhO,WAEAuB,EAAA,gCAAA83E,aAAA34E,KAAAsN,EAAAhO,WAEAuvD,EAAAzC,cAAA9+C,EAAAhO,UAAA,WACAilF,KAAA,CACA1wE,IAAA,SAAAzT,GAEA,GADAA,GAAA,OAAAA,EAAoD,QAAAA,KAAA,EAAuC,eAAAA,KAAA,EAA4C,iBAAAA,MAAA+hB,SAAA/hB,EAAA,SAAvIA,GAAA,EACA1B,KAAA8lF,OAAApkF,EAGA,GAFA1B,KAAA8lF,MAAApkF,EAEAA,EAES,CACT,IAAA25D,EAAA,iBAAA35D,IAAA,KACA1B,KAAAyR,kBAAA4pD,KACAr7D,KAAAoF,gBAAA,QAJApF,KAAAoF,gBAAA,IAOA0R,IAAA,WACA,OAAA9W,KAAAsR,kBACA,GAAAtR,KAAA8lF,MAAA,cACA9lF,KAAA6iF,oBAAAlxE,IACA3R,KAAA8lF,MADA,OAIA,OAEAz4B,YAAA,GAEA8xB,WAAA,CACAhqE,IAAA,SAAA4qB,IACAA,EAAA,QAAAA,EAAA,QAAA//B,KAAA+pE,MAAArgE,KAAA,QAAAq2B,IAEA//B,KAAA4jF,cACA5jF,KAAA4jF,YAAA7jD,EAEA//B,KAAA85D,eACA95D,KAAA85D,cAAA,EACA95D,KAAAoF,gBAAA,MAIAuoD,aAAA,QAEAk2B,iBAAA,CACA1uE,IAAA,WACAnV,KAAA85D,eACA95D,KAAA85D,cAAA,EACA95D,KAAAoF,gBAAA,KAGAuoD,cAAA,GAEAo4B,gBAAA,CACA5wE,IAAA,WACAnV,KAAAgiD,QAAA,qBAEA2L,aAAA,GAEA+wB,UAAA,CACAvpE,IAAA,SAAAupE,GACA1+E,KAAA2+E,WAAAD,EACA1+E,KAAAg/E,cACAN,GAAA1+E,KAAAi/E,gBAEAtxB,cAAA,GAEAq4B,YAAA,CACAr4B,cAAA,GAEAhiD,QAAA,CACAwJ,IAAA,SAAAxJ,IACAA,EAAA8X,SAAA9X,IAEA,GAAA3L,KAAAq9E,WAAA1xE,IACA3L,KAAAu3E,WAAA,EACAv3E,KAAAk8E,gBAAA,GACAl8E,KAAAq9E,SAAA1xE,EAEA3L,KAAAgiD,QAAA,mBAGA2L,aAAA,EACAN,YAAA,GAEAkwB,uBAAA,CACA5vB,cAAA,GAEAs4B,UAAA,CACA9wE,IAAA,SAAA4qB,GACA//B,KAAAm5E,aAAAp5C,IAEAstB,YAAA,GAEAqwB,UAAA,CACAvoE,IAAA,SAAA4qB,GACA//B,KAAAgiD,QAAA,oBAEA2L,cAAA,GAEA4iB,YAAA,CACAp7D,IAAA,SAAA4qB,GACA//B,KAAAkgC,IAAAowC,eAAAvwC,IAEAjpB,IAAA,WACA,OAAA9W,KAAAkgC,IAAAswC,kBAEAnjB,YAAA,GAEAnqD,KAAA,CACAiS,IAAA,SAAA4qB,GACA//B,KAAA6E,QAAAk7B,IAEAjpB,IAAA,WACA,OAAA9W,KAAA6+E,SAEAxxB,YAAA,KAGA5rD,EAAAmN,gBAEA5M,IAAAsM,OAAA,8FAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA+mC,EAAAjzC,EAAA,cAEAoM,EAAApM,EAAA,aAEAD,EAAAC,EAAA,WAAAD,MAEAgkF,EAAA,WACAlmF,KAAAsG,SAAA,KAGA,WACAtG,KAAAmV,IAAA,SAAA2U,GAEA,OADAvb,EAAAk1B,MAAAzjC,KAAAsG,SAAAwjB,GACA9pB,MAGAA,KAAA+sD,WAAA,WACA,OAAA3X,EAAAzB,WAAA3zC,KAAAsG,WAGAtG,KAAAqI,WAAA,SAAAyhB,GACA9pB,KAAAsG,SAAAwjB,GAGA9pB,KAAAmmF,KAAA,SAAAlgF,GACA,IAAA6jB,EAAA9pB,KAAAsG,SACAskE,EAAA5qE,KAAAomF,eAAAngF,EAAA6jB,GACA,IAAA8gD,EAAA,SACA,IAAAnY,EAAA,KAWA,OAVAmY,EAAAnoE,QAAA,SAAA4jF,EAAAC,EAAAC,EAAAC,GAGA,OAFA/zB,EAAA,IAAAvwD,EAAAmkF,EAAAC,EAAAC,EAAAC,KAEAF,GAAAE,GAAA18D,EAAApF,OAAAoF,EAAApF,aAAA,GAAAoF,EAAA28D,aAAAh0B,EAAA3wD,QAAAgoB,EAAApF,UACA+tC,EAAA,MACA,KAKAA,GAGAzyD,KAAA0mF,QAAA,SAAAzgF,GACA,IAAA6jB,EAAA9pB,KAAAsG,SACA,IAAAwjB,EAAA68D,OAAA,SACA3mF,KAAA4mF,gBAAA98D,GACA,IAAAlgB,EAAAkgB,EAAAlgB,MACA4D,EAAA5D,EAAA3D,EAAAyqE,SAAA9mE,EAAA8a,MAAAqsB,IAAAnnC,EAAAqnC,IAAAF,KAAA9qC,EAAAi6B,IAAA8vC,cACAjjD,EAAA,GACAgiC,EAAAjlC,EAAAilC,GAEA,GAAAjlC,EAAA+8D,aAAA,CACA,IAEAC,EAFA9wB,EAAAjH,EAAA1tD,OACA6jF,EAAA13E,EAAAnM,OAAA20D,EAGA9zB,EAAA,QAAA6O,EAAAge,EAAAz5B,QAAA,EAA6Cyb,GAAAm0C,EAAen0C,IAAA,CAC5D,QAAA51B,EAAA,EAAyBA,EAAA66C,EAAS76C,IAClC,OAAA3N,EAAAujC,EAAA51B,GAAAilD,OAAArR,EAAA5zC,IAAA,SAAA+mB,EAGA,IAAAr0B,EAAAL,EAAAujC,GACAtzB,EAAAjQ,EAAAujC,EAAAilB,EAAA,GACAgf,EAAAnnE,EAAAxM,OAAAwM,EAAAsJ,MAAA43C,EAAA,OAAA1tD,OACAo3C,EAAAh7B,EAAAtG,MAAA43C,EAAAiH,EAAA,OAAA30D,OAEAylF,KAAA71C,IAAAF,SAAA+1C,EAAA71C,IAAAD,OAAAgkC,IAIAjoD,EAAAnf,KAAAk5E,EAAA,IAAA5kF,EAAA6uC,EAAAikC,EAAAjkC,EAAAilB,EAAA,EAAAvd,IACAud,EAAA,IAAAjlB,IAAAilB,EAAA,UAGA,QAAA90D,EAAA,EAAuBA,EAAAsM,EAAAnM,OAAkBH,IACzC,KAAAozC,EAAAc,EAAAhB,gBAAA5mC,EAAAtM,GAAA6tD,GAEA,IAAA5zC,EAAA,EAAyBA,EAAAm5B,EAAAjzC,OAAoB8Z,IAAA,CAC7C,IAAAhE,EAAAm9B,EAAAn5B,GACA4R,EAAAnf,KAAA,IAAA1L,EAAAhB,EAAAiW,EAAAme,OAAAp0B,EAAAiW,EAAAme,OAAAne,EAAA9V,UAKA,GAAAuI,EAAA,CACA,IAAAinC,EAAAjnC,EAAA8a,MAAAssB,OACAF,EAAAlnC,EAAA8a,MAAAssB,OAIA,IAHA9vC,EAAA,EACAia,EAAA4R,EAAA1rB,OAAA,EAEAH,EAAAia,GAAA4R,EAAA7rB,GAAAwjB,MAAAssB,OAAAH,GAAA9jB,EAAA7rB,GAAAwjB,MAAAqsB,KAAAnnC,EAAA8a,MAAAqsB,KACA7vC,IAGA,KAAAA,EAAAia,GAAA4R,EAAA5R,GAAA81B,IAAAD,OAAAF,GAAA/jB,EAAA5R,GAAA81B,IAAAF,KAAAnnC,EAAAqnC,IAAAF,KACA51B,IAKA,IAFA4R,IAAA1G,MAAAnlB,EAAAia,EAAA,GAEAja,EAAA,EAAAia,EAAA4R,EAAA1rB,OAAsCH,EAAAia,EAAOja,IAC7C6rB,EAAA7rB,GAAAwjB,MAAAqsB,KAAAnnC,EAAA8a,MAAAqsB,IACAhkB,EAAA7rB,GAAA+vC,IAAAF,KAAAnnC,EAAA8a,MAAAqsB,IAIA,OAAAhkB,GAGA/sB,KAAAuU,QAAA,SAAA+4D,EAAAyZ,GACA,IAAAj9D,EAAA9pB,KAAAsG,SACAyoD,EAAA/uD,KAAA4mF,gBAAA98D,GACA,GAAAA,EAAA+8D,aAAA,OAAAE,EACA,GAAAh4B,EAAA,CACA,IAAA53C,EAAA43C,EAAAhoD,KAAAumE,GACA,IAAAn2D,KAAA,GAAA9V,QAAAisE,EAAAjsE,OAAA,YAGA,GAFA0lF,EAAAzZ,EAAA/4D,QAAAw6C,EAAAg4B,GAEAj9D,EAAAk9D,aAAA,CACAD,IAAAr/E,MAAA,IAEA,QAAAxG,EAAAqa,KAAA5J,IAAA27D,EAAAjsE,OAAAisE,EAAAjsE,QAA0DH,KAAK,CAC/D,IAAA2+B,EAAAytC,EAAApsE,GACA2+B,KAAA5B,eAAA4B,EAAAknD,EAAA7lF,GAAA6lF,EAAA7lF,GAAAgsB,cAA0F65D,EAAA7lF,GAAA6lF,EAAA7lF,GAAA+8B,cAG1F8oD,IAAAh/E,KAAA,IAGA,OAAAg/E,IAGA/mF,KAAA4mF,gBAAA,SAAA98D,EAAAm9D,GACA,GAAAn9D,EAAA68D,kBAAAryE,OAAA,OAAAwV,EAAAilC,GAAAjlC,EAAA68D,OACA,IAAAA,EAAA78D,EAAA68D,OACA,IAAA78D,EAAA68D,OAAA,OAAA78D,EAAAilC,IAAA,EACAjlC,EAAAuqB,SAAAsyC,EAAAvxC,EAAAlB,aAAAyyC,IACA78D,EAAAo9D,YAAAP,EAiJA,SAAAA,EAAA78D,GACA,SAAAq9D,EAAA7wB,GACA,WAAA1gD,KAAA0gD,IAAAxsC,EAAAuqB,OAAA,MACA,GAGA,OAAA8yC,EAAAR,EAAA,IAAAA,EAAAQ,EAAAR,IAAAtlF,OAAA,IAvJA+lF,CAAAT,EAAA78D,IACA,IAAAiyB,EAAAjyB,EAAAu9D,cAAA,WAEA,GADAv9D,EAAA+8D,cAAAI,GAAA,SAAArxE,KAAA+wE,GACA78D,EAAA+8D,aAAA,OAAA/8D,EAAAilC,GAAA/uD,KAAAsnF,yBAAAX,EAAA5qC,GAEA,IACA,IAAAgT,EAAA,IAAAz6C,OAAAqyE,EAAA5qC,GACO,MAAA1lC,GACP04C,GAAA,EAGA,OAAAjlC,EAAAilC,MAGA/uD,KAAAsnF,yBAAA,SAAAX,EAAA5qC,GAIA,IAHA,IAAA6S,EAAA+3B,EAAApyE,QAAA,sBAAA7M,MAAA,MACAqnD,EAAA,GAEA7tD,EAAA,EAAqBA,EAAA0tD,EAAAvtD,OAAkBH,IACvC,IACA6tD,EAAAnhD,KAAA,IAAA0G,OAAAs6C,EAAA1tD,GAAA66C,IACS,MAAA1lC,GACT,SAIA,OAAA04C,GAGA/uD,KAAAomF,eAAA,SAAAngF,EAAA6jB,GACA,IAAAilC,EAAA/uD,KAAA4mF,gBAAA98D,GACA,IAAAilC,EAAA,SACA,IAAAw4B,EAAA,GAAAz9D,EAAAy9D,UACAd,EAAA,GAAA38D,EAAA28D,YACA78E,EAAAkgB,EAAAlgB,MACA8a,EAAAoF,EAAApF,MACAA,MAAA9a,IAAA29E,EAAA,eAAAthF,EAAAJ,UAAA6xC,YACAhzB,cAAA+hE,GAAAc,EAAA,gBACA,IAAAl1C,EAAAzoC,IAAA8a,MAAAqsB,IAAA,EACAuB,EAAA1oC,IAAAqnC,IAAAF,IAAA9qC,EAAAu8C,YAAA,EAEA,GAAA+kC,EACA,IAAA9kF,EAAA,SAAA4N,GACA,IAAA0gC,EAAArsB,EAAAqsB,IACA,IAAAy2C,EAAAz2C,EAAArsB,EAAAssB,OAAA3gC,GAAA,CAEA,IAAA0gC,IAAqBA,GAAAsB,EAAiBtB,IACtC,GAAAy2C,EAAAz2C,EAAAt4B,OAAAC,UAAArI,GAAA,OAGA,MAAAyZ,EAAA+7D,KAEA,IAAA90C,EAAAuB,EAAAD,EAAA3tB,EAAAqsB,IAAmDA,GAAAsB,EAAiBtB,IACpE,GAAAy2C,EAAAz2C,EAAAt4B,OAAAC,UAAArI,GAAA,cAIA5N,EAAA,SAAA4N,GACA,IAAA0gC,EAAArsB,EAAAqsB,IACA,IAAAy2C,EAAAz2C,EAAArsB,EAAAssB,OAAA3gC,GAAA,CAEA,IAAA0gC,GAAA,EAA6BA,GAAAuB,EAAgBvB,IAC7C,GAAAy2C,EAAAz2C,EAAA,EAAA1gC,GAAA,OAGA,MAAAyZ,EAAA+7D,KAEA,IAAA90C,EAAAsB,EAAAC,EAAA5tB,EAAAqsB,IAAmDA,GAAAuB,EAAgBvB,IACnE,GAAAy2C,EAAAz2C,EAAA,EAAA1gC,GAAA,SAKA,GAAAyZ,EAAA+8D,aACA,IAAA7wB,EAAAjH,EAAA1tD,OAEAmmF,EAAA,SAAAz2C,EAAAzb,EAAAjlB,GACA,IAAA/G,EAAAi+E,EAAAx2C,EAAAilB,EAAA,EAAAjlB,EACA,KAAAznC,EAAA,IACA,IAAAmU,EAAAxX,EAAA2xC,QAAAtuC,GACA0rE,EAAAv3D,EAAA2iD,OAAArR,EAAA,IACA,MAAAw4B,GAAAvS,EAAA1/C,IAAA,IAAA0/C,GAAA,CAEA,QAAA9zE,EAAA,EAAyBA,EAAA80D,EAAS90D,IAElC,QADAuc,EAAAxX,EAAA2xC,QAAAtuC,EAAApI,IACAk/D,OAAArR,EAAA7tD,IAAA,OAGA,IAAAu3C,EAAAh7B,EAAAtG,MAAA43C,EAAAiH,EAAA,OAAA30D,OACA,KAAAkmF,GAAA9uC,EAAAnjB,GACA,QAAAjlB,EAAA/G,EAAA0rE,EAAA1rE,EAAA0sD,EAAA,EAAAvd,SAAA,UAEO,GAAA8uC,EACPC,EAAA,SAAAz2C,EAAA0H,EAAApoC,GACA,IAEAmC,EAFAiL,EAAAxX,EAAA2xC,QAAA7G,GACAuD,EAAA,GAEAlB,EAAA,EAGA,IAFA2b,EAAA72B,UAAA,EAEA1lB,EAAAu8C,EAAAhoD,KAAA0W,IAAA,CACA,IAAApc,EAAAmR,EAAA,GAAAnR,OAGA,GAFA+xC,EAAA5gC,EAAA5K,OAEAvG,EAAA,CACA,GAAA+xC,GAAA31B,EAAApc,OAAA,MACA0tD,EAAA72B,UAAAkb,GAAA,EAGA,GAAA5gC,EAAA5K,MAAAvG,EAAAo3C,EAAA,MACAnE,EAAA1mC,KAAA4E,EAAA5K,MAAAvG,GAGA,QAAAH,EAAAozC,EAAAjzC,OAAA,EAA0CH,GAAA,EAAQA,GAAA,GAClD,IAAA8vC,EAAAsD,EAAApzC,EAAA,GAEA,GAAAmP,EAAA0gC,EAAAC,EAAAD,EAAAC,GADA3vC,EAAAizC,EAAApzC,KACA,gBAIAsmF,EAAA,SAAAz2C,EAAAikC,EAAA3kE,GACA,IACA+iC,EACA5gC,EAFAiL,EAAAxX,EAAA2xC,QAAA7G,GAKA,IAFAge,EAAA72B,UAAA88C,EAEAxiE,EAAAu8C,EAAAhoD,KAAA0W,IAAA,CACA,IAAApc,EAAAmR,EAAA,GAAAnR,OAEA,GAAAgP,EAAA0gC,EADAqC,EAAA5gC,EAAA5K,MACAmpC,EAAAqC,EAAA/xC,GAAA,SAEA,IAAAA,IACA0tD,EAAA72B,UAAAkb,GAAA,EACAA,GAAA31B,EAAApc,QAAA,WAMA,OACAoB,cAGGnB,KAAA4kF,EAAAtlF,WAWHa,EAAAykF,WAEAlkF,IAAAsM,OAAA,uGAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAskD,EAAAxwD,EAAA,eAEAk9B,EAAAl9B,EAAA,oBAEAiiC,EAAAuuB,EAAAvuB,SAEA,SAAAqjD,EAAAt3B,EAAAnyB,GACAh+B,KAAAg+B,aAAAqB,EAAAzB,MAAA,aACA59B,KAAA+D,SAAA,GACA/D,KAAA0nF,kBAAA,GACA1nF,KAAA2nF,YAAAx3B,GACAnwD,KAAA4nF,gBAAA,EAGA,SAAAC,EAAA13B,EAAAnyB,GACAypD,EAAAnmF,KAAAtB,KAAAmwD,EAAAnyB,GACAh+B,KAAA4nF,gBAAA,EAGAC,EAAAjnF,UAAA6mF,EAAA7mF,UACA,WAgEA,SAAAk8D,EAAAh2D,GACA,uBAAAA,KAAAE,SAAAF,EAAAE,QAAAwD,WAAA1D,EAAAghF,WAAA,OAhEA9nF,KAAAiH,WAAA,SAAAH,GACA9G,KAAA+D,SAAA+C,EAAAgE,OAAA9K,KAAA+nF,cAAAjhF,GACA9G,KAAA+D,SAAA+C,EAAAgE,MAAAhE,EACAA,EAAAE,SAAAhH,KAAAgoF,cAAAlhF,IAGA9G,KAAA+nF,cAAA,SAAAjhF,EAAAmhF,GACA,IAAAn9E,EAAAhE,IAAA,kBAAAA,MAAAgE,MACAhE,EAAA9G,KAAA+D,SAAA+G,GACAm9E,UAAAjoF,KAAA+D,SAAA+G,GACA,IAAAo9E,EAAAloF,KAAA0nF,kBAEA,QAAAS,KAAAD,EAAA,CACA,IAAAE,EAAAF,EAAAC,GAEA,GAAAC,GAAAthF,SACAohF,EAAAC,QACS,GAAA5nF,MAAAsG,QAAAuhF,GAAA,CACT,IAAAlnF,EAAAknF,EAAAvgF,QAAAf,IAEA,GAAA5F,IACAknF,EAAAtgF,OAAA5G,EAAA,GACA,GAAAknF,EAAA/mF,SAAA6mF,EAAAC,GAAAC,EAAA,QAMApoF,KAAAgH,QAAA,SAAAuO,EAAAzO,EAAA0D,GAMA,GALA,iBAAA+K,YACAV,GAAArK,MAAA+K,EAAA/K,UACA+K,IAAAvV,KAAAg+B,WAGAzoB,EACA,yBAAAzO,EAAA9G,KAAAiH,WAAA,CACAF,KAAAD,EACAE,QAAAuO,EACAzK,KAAAhE,EAAAgE,MAAAyK,SAEAA,EAAA7N,MAAA,KAAAjF,QAAA,SAAA4lF,GACA,IAAAC,EAAA,GAEA,OAAAD,EAAAxgF,QAAA,MACA,IAAA+mD,EAAAy5B,EAAA3gF,MAAA,OACA2gF,EAAAz5B,EAAA73C,MACA63C,EAAAnsD,QAAA,SAAA4lF,GACA,IAAAl5D,EAAAnvB,KAAAuoF,UAAAF,GACAj/E,EAAAg7B,EAAAjV,EAAA0f,QAAA1f,EAAA5Z,IACA+yE,MAAA,QAAAl/E,EAEApJ,KAAAwoF,qBAAAF,EAAA,cACWtoF,MACXsoF,GAAA,IAGA,IAAAn5D,EAAAnvB,KAAAuoF,UAAAF,GACAj/E,EAAAg7B,EAAAjV,EAAA0f,QAAA1f,EAAA5Z,IAEAvV,KAAAwoF,qBAAAF,EAAAl/E,EAAAtC,EAAA0D,IACOxK,OAOPA,KAAAwoF,qBAAA,SAAAL,EAAArhF,EAAA0D,GACA,IACAtJ,EADAgnF,EAAAloF,KAAA0nF,kBAGA,GAAA5gF,EAEO,IAAAohF,EAAAC,IAAAnoF,KAAA4nF,eACPM,EAAAC,GAAArhF,MACO,CACPvG,MAAAsG,QAAAqhF,EAAAC,KAES,IAAAjnF,EAAAgnF,EAAAC,GAAAtgF,QAAAf,KACTohF,EAAAC,GAAArgF,OAAA5G,EAAA,GAFAgnF,EAAAC,GAAA,CAAAD,EAAAC,IAKA,iBAAA39E,IACAA,EAAAsyD,EAAAh2D,IAGA,IAAA/C,EAAAmkF,EAAAC,GAEA,IAAAjnF,EAAA,EAAmBA,EAAA6C,EAAA1C,OAAqBH,IAAA,CAGxC,GADA47D,EADA/4D,EAAA7C,IAEAsJ,EAAA,MAGAzG,EAAA+D,OAAA5G,EAAA,EAAA4F,eAtBAohF,EAAAC,IA0BAnoF,KAAA2nF,YAAA,SAAA5jF,GACAA,GAAA3D,OAAAmE,KAAAR,GAAAtB,QAAA,SAAAqI,GACA,IAAAhE,EAAA/C,EAAA+G,GACA,GAAAhE,EAAA,CACA,qBAAAA,EAAA,OAAA9G,KAAAgH,QAAAF,EAAAgE,GACA,oBAAAhE,MAAA,CACAC,KAAAD,IAEA,kBAAAA,IACAA,EAAAgE,OAAAhE,EAAAgE,QACA9K,KAAAiH,WAAAH,MACO9G,OAGPA,KAAAyoF,eAAA,SAAA1kF,GACA3D,OAAAmE,KAAAR,GAAAtB,QAAA,SAAAqI,GACA9K,KAAA+nF,cAAAhkF,EAAA+G,KACO9K,OAGPA,KAAA0oF,SAAA,SAAAC,GACAvoF,OAAAmE,KAAAokF,GAAAlmF,QAAA,SAAA8S,GACAvV,KAAAgH,QAAAuO,EAAAozE,EAAApzE,KACOvV,OAGPA,KAAAgoF,cAAA,SAAAlhF,GACA9G,KAAAgH,QAAAF,EAAAE,QAAAF,IAGA9G,KAAAuoF,UAAA,SAAAhkF,GACA,IAAAqqD,EAAArqD,EAAA05B,cAAAv2B,MAAA,mBAAAszB,OAAA,SAAAnf,GACA,OAAAA,IAEAtG,EAAAq5C,EAAA73C,MACAo0B,EAAAwnB,EAAAp9C,GACA,GAAAo9C,EAAAjuB,cAAAyG,GAAA51B,EAAAo9C,EAAAjuB,cAAAyG,GAAAlN,kBAA6F,KAAA2wB,EAAAvtD,OAAA,OAC7FkU,MACAs5B,QAAA,GACQ,MAAA+f,EAAAvtD,QAAA,SAAAutD,EAAA,UACRr5C,MAAA2X,cACA2hB,QAAA,GAIA,IAFA,IAAAA,EAAA,EAEA3tC,EAAA0tD,EAAAvtD,OAAgCH,KAAK,CACrC,IAAA66C,EAAA4W,EAAAvuB,SAAAwqB,EAAA1tD,IAEA,SAAA66C,EAEA,MADA,oBAAAr1C,iBAAA0lB,MAAA,oBAAAwiC,EAAA1tD,GAAA,OAAAqD,IACA,EAGAsqC,GAAAkN,EAGA,OACAxmC,MACAs5B,WAIA7uC,KAAAm8C,eAAA,SAAAtN,EAAAzD,GACA,IAAA71B,EAAA6uB,EAAAyK,GAAAzD,EACA,OAAAprC,KAAA0nF,kBAAAnyE,IAGAvV,KAAAozD,eAAA,SAAA18C,EAAAm4B,EAAAzD,EAAAD,GACA,KAAAA,EAAA,IACA,IAAA51B,EAAA6uB,EAAAyK,GAAAzD,EACAtkC,EAAA9G,KAAA0nF,kBAAAnyE,GAOA,OALAmB,EAAAkyE,YACAlyE,EAAAkyE,WAAA,IAAArzE,EACAzO,EAAA9G,KAAA0nF,kBAAAhxE,EAAAkyE,YAAA9hF,IAGAA,GACA,aAAAA,GAAA,aAAAA,IAAAzF,OAAA,IAQAqV,EAAAkyE,YACA/5C,GAAA,GAAAA,GAAA,GAAAzD,EAAA/pC,SACA,GAAAwtC,GAAA1D,EAAA,KAAAz0B,EAAAkyE,UAAA,IADAlyE,EAAAkyE,UAAAlyE,EAAAkyE,UAAAviE,MAAA,GAAA9Q,EAAAlU,OAAA,IAIA,CACAyF,aAbA4P,EAAAkyE,UAAAlyE,EAAAkyE,WAAArzE,EACA,CACAzO,QAAA,WAeA9G,KAAAwzD,cAAA,SAAArvD,EAAAuS,GACA,OAAAA,EAAAkyE,WAAA,KAEGtnF,KAAAmmF,EAAA7mF,WACHa,EAAAgmF,cACAhmF,EAAAomF,qBAEA7lF,IAAAsM,OAAA,yIAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,cAEA0lF,EAAA1lF,EAAA,4BAAA0lF,iBAEAr5E,EAAArM,EAAA,wBAAAqM,aAEAq6E,EAAA,SAAA7qD,EAAAj6B,GACA8jF,EAAAvmF,KAAAtB,KAAA+D,EAAAi6B,GACAh+B,KAAA8oF,OAAA9oF,KAAA+D,SACA/D,KAAAw8C,kBAAA,gBAAAnmC,GACA,OAAAA,EAAAvP,QAAAC,KAAAsP,EAAAlS,OAAAkS,EAAAmB,MAAA,OAIAjJ,EAAA80B,SAAAwlD,EAAAhB,GACA,WACAt5E,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA+G,KAAA,SAAAD,EAAA3C,EAAAqT,GACA,GAAAjX,MAAAsG,QAAAC,GAAA,CACA,QAAA5F,EAAA4F,EAAAzF,OAAoCH,KACpC,GAAAlB,KAAA+G,KAAAD,EAAA5F,GAAAiD,EAAAqT,GAAA,SAGA,SAIA,GADA,kBAAA1Q,MAAA9G,KAAA+D,SAAA+C,KACAA,EAAA,SACA,GAAA3C,KAAAu1C,YAAA5yC,EAAA2E,SAAA,SACA,MAAAzL,KAAA+oF,oBAAAjiF,EAAAkiF,cAAAliF,EAAAkiF,YAAA7kF,GAAA,SACA,IAAAkS,EAAA,CACAlS,SACA2C,UACA0Q,QAMA,OAJAnB,EAAAqmB,YAAA18B,KAAA6P,MAAA,OAAAwG,GAEArW,KAAAgiD,QAAA,YAAA3rC,IAEA,IAAAA,EAAAqmB,aAGA18B,KAAAipF,gBAAA,SAAA9kF,GACA,IAAAnE,KAAAkpF,UAGA,OAFA/kF,KAAA0L,MAAA,gBAEA7P,KAAAmpF,WACAnpF,KAAAopF,MAAAryE,MACA/W,KAAA4rC,oBAAA,OAAA5rC,KAAAqpF,oBACArpF,KAAAopF,MAAA/nF,SAAArB,KAAAopF,MAAAppF,KAAAspF,UACAtpF,KAAAmpF,WAAA,IAGAnpF,KAAAqpF,qBACArpF,KAAAqpF,mBAAA,SAAAhzE,GACArW,KAAAopF,MAAAx7E,KAAA,CAAAyI,EAAAvP,QAAAuP,EAAAmB,QACS7U,KAAA3C,OAGTA,KAAAspF,SAAAtpF,KAAAopF,MACAppF,KAAAopF,MAAA,GACAppF,KAAAsF,GAAA,OAAAtF,KAAAqpF,oBACArpF,KAAAmpF,WAAA,IAGAnpF,KAAAupF,OAAA,SAAAplF,GACA,IAAAnE,KAAAkpF,WAAAlpF,KAAAopF,MAAA,CACA,GAAAppF,KAAAmpF,UAAA,OAAAnpF,KAAAipF,gBAAA9kF,GAEA,IACAnE,KAAAkpF,WAAA,EACAlpF,KAAAopF,MAAA3mF,QAAA,SAAAoZ,GACA,iBAAAA,EAAA7b,KAAA+G,KAAA8U,EAAA1X,GAAyDnE,KAAA+G,KAAA8U,EAAA,GAAA1X,EAAA0X,EAAA,KAChD7b,MACF,QACPA,KAAAkpF,WAAA,KAIAlpF,KAAAwpF,UAAA,SAAAh3E,GACA,OAAAA,EAAAiE,IAAA,SAAAoF,GAGA,MAFA,iBAAAA,EAAA,KAAAA,EAAA,GAAAA,EAAA,GAAA/Q,MACA+Q,EAAA,KAAAA,IAAA,IACAA,MAGGva,KAAAunF,EAAAjoF,WACHa,EAAAonF,mBAEA7mF,IAAAsM,OAAA,gHAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA+mC,EAAAjzC,EAAA,eAEAguD,EAAAhuD,EAAA,aAEAD,EAAAC,EAAA,YAAAD,MAEA,SAAA8E,EAAA6oC,EAAA45C,GACA,OACA55C,MACA45C,OAIAhoF,EAAAsC,SAAA,EACA+G,KAAA,mBACA9D,UAAA,sBACAD,KAAA,SAAA5C,GACAgsD,EAAAhB,WAAA,iCAAA9gD,GACAA,EAAAkhD,KAAAprD,GACAA,EAAAulF,sBAGAj+E,UAAA,GACG,CACHX,KAAA,gBACA9D,UAAA,cACAD,KAAA,SAAA5C,GACAgsD,EAAAhB,WAAA,8BAAA9gD,GACAA,EAAAs7E,gBAAAxlF,EAAA,MAGAylF,eAAA,UACAn+E,UAAA,GACG,CACHX,KAAA,oBACA9D,UAAA,0BACAD,KAAA,SAAA5C,GACAgsD,EAAAhB,WAAA,8BAAA9gD,GACAA,EAAAs7E,gBAAAxlF,GAAA,MAGAylF,eAAA,UACAn+E,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,aACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAAs1C,aAEAhuC,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,mBACA7iF,UAAA,eACAD,KAAA,SAAA5C,GACAA,EAAA2lF,mBAEAr+E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,gBACA7iF,UAAA,sBACAD,KAAA,SAAA5C,EAAAsZ,GACA,kBAAAA,GAAAiG,MAAAjG,IAAAtZ,EAAA4lF,SAAAtsE,GACAtZ,EAAAsoB,OAAA,CACAu9D,MAAA,cAGAv+E,UAAA,GACG,CACHX,KAAA,OACA9D,UAAA,4CACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAAsyE,YAAA,IAEA0R,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,SACA9D,UAAA,oEACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAAsyE,YAAA,IAEA0R,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,mBACA9D,UAAA,WACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAA8zE,oBAEAkQ,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,yBACA9D,UAAA,mBACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAA8zE,kBAAA,IAEAkQ,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,UACA++E,YAAA,WACA7iF,UAAA,8BACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAA0xE,WAEAiS,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,aACA7iF,UAAA,4BACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAA0xE,UACAxzE,EAAA8B,QAAA4xE,OAAA1zE,EAAA0B,UAAAqkF,iBAEAN,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,aACA7iF,UAAA,wCACAD,KAAA,SAAA5C,GACAA,EAAA8B,QAAA4xE,UAEA+R,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,YACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAAgmF,YAEAF,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,eACA++E,YAAA,gBACA7iF,UAAA,kCACAD,KAAA,SAAA5C,GACAA,EAAAimF,gBAEAH,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,mBACA++E,YAAA,sBACA7iF,UAAA,kBACAD,KAAA,SAAA5C,GACAA,EAAA0B,UAAA4sC,UAAAtuC,EAAA0B,UAAAqkD,aAAoE/lD,EAAAgmF,YAEpE1+E,UAAA,GACG,CACHX,KAAA,uBACA++E,YAAA,0BACA7iF,UAAA,8BACAD,KAAA,SAAA5C,GACAA,EAAA0B,UAAA4sC,UAAAtuC,EAAA0B,UAAAqkD,aAAoE/lD,EAAAimF,gBAEpE3+E,UAAA,GACG,CACHX,KAAA,OACA++E,YAAA,OACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAgsD,EAAAhB,WAAA,6BAAA94C,GACAA,EAAA6vE,OAAA/hF,MAGAsH,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,YACA7iF,QAAA,SACAD,KAAA,SAAA5C,GACAA,EAAAw5E,mBAEAlyE,UAAA,GACG,CACHX,KAAA,gBACA++E,YAAA,kBACA7iF,UAAA,yDACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAA61D,mBAEAsrB,kBAAA,UACAx+E,UAAA,EACAm+E,eAAA,UACAS,gBAAA,YACG,CACHv/E,KAAA,YACA++E,YAAA,cACA7iF,UAAA,uCACAD,KAAA,SAAA5C,GACAA,EAAAmmF,qBAEAL,kBAAA,UACAx+E,UAAA,EACAm+E,eAAA,UACAS,gBAAA,YACG,CACHv/E,KAAA,WACA++E,YAAA,YACA7iF,UAAA,oCACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAA+0D,YAEAosB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,aACA7iF,UAAA,kBACAD,KAAA,SAAA5C,EAAAqT,GACArT,EAAAomF,WAAA/yE,EAAAgzE,QAEAP,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,cACA++E,YAAA,gBACA7iF,UAAA,yDACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAA21D,iBAEAwrB,kBAAA,UACAx+E,UAAA,EACAm+E,eAAA,UACAS,gBAAA,YACG,CACHv/E,KAAA,UACA++E,YAAA,YACA7iF,UAAA,uCACAD,KAAA,SAAA5C,GACAA,EAAAe,mBAEA+kF,kBAAA,UACAx+E,UAAA,EACAm+E,eAAA,UACAS,gBAAA,YACG,CACHv/E,KAAA,aACA++E,YAAA,cACA7iF,UAAA,wCACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAi1D,cAEAksB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,aACA++E,YAAA,eACA7iF,UAAA,sBACAD,KAAA,SAAA5C,EAAAqT,GACArT,EAAAsmF,aAAAjzE,EAAAgzE,QAEAP,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,iBACA++E,YAAA,mBACA7iF,UAAA,uCACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAi2D,kBAEAkrB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,eACA++E,YAAA,kBACA7iF,UAAA,2BACAD,KAAA,SAAA5C,GACAA,EAAAumF,oBAEAT,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,oBACA++E,YAAA,uBACA7iF,UAAA,oDACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAu1D,mBAEA4rB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,gBACA++E,YAAA,mBACA7iF,UAAA,4CACAD,KAAA,SAAA5C,GACAA,EAAAwmF,qBAEAV,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,aACA++E,YAAA,cACA7iF,UAAA,wCACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAq1D,cAEA8rB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,aACA7iF,UAAA,sBACAD,KAAA,SAAA5C,EAAAqT,GACArT,EAAAymF,aAAApzE,EAAAgzE,QAEAP,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,oBACA7iF,UAAA,yCACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAA+1D,mBAEAorB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,gBACA++E,YAAA,mBACA7iF,UAAA,6BACAD,KAAA,SAAA5C,GACAA,EAAA0mF,qBAEAZ,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,qBACA7iF,UAAA,gEACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAy1D,iBAEA0rB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,cACA++E,YAAA,iBACA7iF,UAAA,4CACAD,KAAA,SAAA5C,GACAA,EAAA2mF,mBAEAb,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,cACA++E,YAAA,eACA7iF,UAAA,6BACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAm1D,eAEAgsB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,cACA7iF,UAAA,wBACAD,KAAA,SAAA5C,EAAAqT,GACArT,EAAA4mF,cAAAvzE,EAAAgzE,QAEAP,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,iBACA++E,YAAA,mBACA7iF,QAAA,iBACAD,KAAA,SAAA5C,GACAA,EAAA6mF,kBAEAv/E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,YACA7iF,UAAA,wBACAD,KAAA,SAAA5C,GACAA,EAAA8mF,kBAEAx/E,UAAA,GACG,CACHX,KAAA,eACA++E,YAAA,kBACA7iF,UAAA,8BACAD,KAAA,SAAA5C,GACAA,EAAA+mF,gBAEAz/E,UAAA,GACG,CACHX,KAAA,eACA++E,YAAA,iBACA7iF,QAAA,eACAD,KAAA,SAAA5C,GACAA,EAAAgnF,gBAEA1/E,UAAA,GACG,CACHX,KAAA,SACA++E,YAAA,UACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAAinF,gBAEA3/E,UAAA,GACG,CACHX,KAAA,aACA++E,YAAA,gBACA7iF,QAAA,SACAD,KAAA,SAAA5C,GACAA,EAAAknF,cAEA5/E,UAAA,GACG,CACHX,KAAA,WACA++E,YAAA,YACA7iF,UAAA,gBACAD,KAAA,SAAAsP,GACAA,EAAA3R,SAAAy7C,SAAA,KAAA9pC,EAAA3R,SAAAggD,YAAAD,aAEAh5C,UAAA,GACG,CACHX,KAAA,aACA++E,YAAA,cACA7iF,UAAA,kBACAD,KAAA,SAAAsP,GACAA,EAAA3R,SAAAy7C,SAAA,IAAA9pC,EAAA3R,SAAAggD,YAAAD,aAEAh5C,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,oBACA7iF,QAAA,aACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAu1D,mBAEA4rB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,gBACA++E,YAAA,kBACA7iF,QAAA,YACAD,KAAA,SAAA5C,GACAA,EAAA2E,eAAAy1D,iBAEA0rB,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,mBACA7iF,UAAA,iCACAD,KAAA,SAAA5C,GACAA,EAAAJ,SAAAklF,gBAAA9kF,IAEAsH,UAAA,GACG,CACHX,KAAA,cACA++E,YAAA,eACA7iF,UAAA,kCACAD,KAAA,SAAA5C,GACAA,EAAAJ,SAAAwlF,OAAAplF,IAEAsH,UAAA,GACG,CACHX,KAAA,iBACA++E,YAAA,mBACA7iF,UAAA,+BACAD,KAAA,SAAA5C,GACAA,EAAAmnF,kBAEArB,kBAAA,UACAL,eAAA,UACAn+E,UAAA,GACG,CACHX,KAAA,mBACA++E,YAAA,qBACA7iF,UAAA,iDACAD,KAAA,SAAA5C,GACAA,EAAAmnF,gBAAA,IAEArB,kBAAA,UACAL,eAAA,UACAn+E,UAAA,GACG,CACHX,KAAA,mBACA++E,YAAA,qBACA7iF,UAAA,+BACAD,KAAA,SAAA5C,GACAA,EAAAmnF,gBAAA,OAEArB,kBAAA,UACAL,eAAA,UACAn+E,UAAA,GACG,CACHX,KAAA,oBACA++E,YAAA,uBACA7iF,UAAA,WACAD,KAAA,aACA4sD,WAAA,EACAloD,UAAA,GACG,CACHX,KAAA,OACA++E,YAAA,OACA9iF,KAAA,SAAA5C,KACAsH,UAAA,GACG,CACHX,KAAA,MACA++E,YAAA,MACA9iF,KAAA,SAAA5C,GACA,IACAyF,EADAzF,EAAAonF,yBAAApnF,EAAA0B,UAAA4sC,UACAtuC,EAAA0B,UAAA05C,eAAAp7C,EAAA0B,UAAA6xC,WAEAvzC,EAAA0L,MAAA,MAAAjG,GAEAA,EAAA6oC,WAAAtuC,EAAA8B,QAAAm0B,OAAAxwB,GACAzF,EAAAmhD,kBAEAskC,eAAA,SACAK,kBAAA,WACG,CACHn/E,KAAA,QACA++E,YAAA,QACA9iF,KAAA,SAAA5C,EAAAqT,GACArT,EAAAqnF,aAAAh0E,IAEAoyE,eAAA,UACG,CACH9+E,KAAA,aACA++E,YAAA,cACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAA2sE,eAEA8Y,eAAA,SACAK,kBAAA,eACG,CACHn/E,KAAA,qBACA++E,YAAA,sBACA7iF,UAAA,kCACAD,KAAA,SAAA5C,GACAA,EAAAsnF,sBAEA7B,eAAA,SACAK,kBAAA,WACG,CACHn/E,KAAA,YACA++E,YAAA,aACA7iF,UAAA,8BACAD,KAAA,SAAA5C,GACAA,EAAAunF,aAEA9B,eAAA,YACAK,kBAAA,eACG,CACHn/E,KAAA,gBACA++E,YAAA,iBACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAAunE,sBAEAue,kBAAA,cACAL,eAAA,iBACG,CACH9+E,KAAA,qBACA++E,YAAA,uBACA7iF,UAAA,kCACAD,KAAA,SAAA5C,GACAA,EAAA2oE,sBAEAmd,kBAAA,UACAL,eAAA,iBACG,CACH9+E,KAAA,iBACA++E,YAAA,mBACA7iF,UAAA,gCACAD,KAAA,SAAA5C,GACAA,EAAAwnF,aAAA,IAEA/B,eAAA,SACAK,kBAAA,WACG,CACHn/E,KAAA,mBACA++E,YAAA,qBACA7iF,UAAA,oCACAD,KAAA,SAAA5C,GACAA,EAAAwnF,cAAA,IAEA/B,eAAA,SACAK,kBAAA,WACG,CACHn/E,KAAA,UACA++E,YAAA,UACA7iF,UAAA,6BACAD,KAAA,SAAA5C,GACAgsD,EAAAhB,WAAA,6BAAA94C,GACAA,EAAA6vE,OAAA/hF,GAAA,OAGG,CACH2G,KAAA,OACA++E,YAAA,OACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAA24E,SAEG,CACHhyE,KAAA,OACA++E,YAAA,OACA7iF,UAAA,mDACAD,KAAA,SAAA5C,GACAA,EAAA44E,SAEG,CACHjyE,KAAA,cACA++E,YAAA,gBACA7iF,UAAA,oCACAD,KAAA,SAAA5C,GACAA,EAAAynF,eAEAhC,eAAA,UACG,CACH9+E,KAAA,cACA++E,YAAA,gBACA7iF,UAAA,sBACAD,KAAA,SAAA5C,GACAA,EAAA49E,eAEA6H,eAAA,UACG,CACH9+E,KAAA,gBACA++E,YAAA,kBACA7iF,UAAA,wCACAD,KAAA,SAAA5C,GACAA,EAAA0nF,iBAEAjC,eAAA,UACG,CACH9+E,KAAA,gBACA++E,YAAA,kBACA7iF,UAAA,0BACAD,KAAA,SAAA5C,GACAA,EAAA69E,iBAEA4H,eAAA,UACG,CACH9+E,KAAA,MACA++E,YAAA,SACA7iF,UAAA,uCACAD,KAAA,SAAA5C,GACAA,EAAAi2B,OAAA,UAEA6vD,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,YACA++E,YAAA,YACA7iF,UAAA,+EACAD,KAAA,SAAA5C,GACAA,EAAAi2B,OAAA,SAEA6vD,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,gBACA++E,YAAA,gBACA7iF,UAAA,qBACAD,KAAA,SAAA5C,GACA,IAAAA,EAAA0B,UAAA4sC,UAGA,SAFAtuC,EAAAi2B,OAAA,SAKA6vD,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,oBACA++E,YAAA,uBACA7iF,UAAA,qCACAD,KAAA,SAAA5C,GACAA,EAAA2nF,qBAEA7B,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,kBACA++E,YAAA,qBACA7iF,UAAA,sCACAD,KAAA,SAAA5C,GACAA,EAAA4nF,mBAEA9B,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,wBACA++E,YAAA,4BACA7iF,UAAA,6BACAD,KAAA,SAAA5C,GACA,IAAAyF,EAAAzF,EAAA0B,UAAA6xC,WACA9tC,EAAA8a,MAAAssB,OAAA,EACA7sC,EAAA8B,QAAAm0B,OAAAxwB,IAEAqgF,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,sBACA++E,YAAA,0BACA7iF,UAAA,0BACAD,KAAA,SAAA5C,GACA,IAAAyF,EAAAzF,EAAA0B,UAAA6xC,WACA9tC,EAAAqnC,IAAAD,OAAAv4B,OAAAC,UACAvU,EAAA8B,QAAAm0B,OAAAxwB,IAEAqgF,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,iBACA++E,YAAA,mBACA7iF,UAAA,qDACAD,KAAA,SAAA5C,GACAA,EAAA6nF,kBAEA/B,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,kBACA++E,YAAA,oBACA7iF,UAAA,4BACAD,KAAA,SAAA5C,GACAA,EAAA8nF,mBAEAhC,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,UACA++E,YAAA,UACA7iF,UAAA,yBACAD,KAAA,SAAA5C,GACAA,EAAA+nF,gBAEAjC,kBAAA,UACAL,eAAA,iBACG,CACH9+E,KAAA,SACA++E,YAAA,SACA7iF,UAAA,aACAD,KAAA,SAAA5C,GACAA,EAAA61D,UAEAiwB,kBAAA,UACAL,eAAA,iBACG,CACH9+E,KAAA,eACA++E,YAAA,gBACA7iF,UAAA,mBACAD,KAAA,SAAA5C,GACAA,EAAA+nF,gBAEAjC,kBAAA,cACAL,eAAA,iBACG,CACH9+E,KAAA,cACA++E,YAAA,eACA7iF,UAAA,mBACAD,KAAA,SAAA5C,GACAA,EAAAgoF,eAEAlC,kBAAA,cACAL,eAAA,iBACG,CACH9+E,KAAA,eACA++E,YAAA,gBACA9iF,KAAA,SAAA5C,EAAAg0B,GACAh0B,EAAAg2B,OAAAhC,IAEA8xD,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,aACA++E,YAAA,cACA9iF,KAAA,SAAA5C,EAAAqT,GACArT,EAAAg2B,OAAAib,EAAA7B,aAAA/7B,EAAAzO,MAAA,GAAAyO,EAAAgzE,OAAA,KAEAP,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,YACA++E,YAAA,aACA7iF,UAAA,eACAD,KAAA,SAAA5C,GACAA,EAAAioF,aAEAnC,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,mBACA++E,YAAA,oBACA7iF,UAAA,wBACAD,KAAA,SAAA5C,GACAA,EAAAkoF,oBAEApC,kBAAA,SAAA9lF,GACAA,EAAAmoF,oBAAA,IAEA1C,eAAA,UACG,CACH9+E,KAAA,cACA++E,YAAA,eACA7iF,UAAA,mBACAD,KAAA,SAAA5C,GACAA,EAAA+oB,eAEA+8D,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,cACA++E,YAAA,eACA7iF,UAAA,+BACAD,KAAA,SAAA5C,GACAA,EAAA85B,eAEAgsD,kBAAA,UACAL,eAAA,UACG,CACH9+E,KAAA,eACA++E,YAAA,iBACA7iF,UAAA,kCACAD,KAAA,SAAA5C,GACA,IAAAyF,EAAAzF,EAAA0B,UAAA6xC,WACA9tC,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,OAAA,EACApnC,EAAAqnC,IAAAF,MACA5sC,EAAA0B,UAAA0kD,SAAA3gD,GAAA,IAEAqgF,kBAAA,UACAL,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,YACA++E,YAAA,aACA7iF,UAAA,WACAD,KAAA,SAAA5C,GASA,IARA,IAAA84D,EAAA94D,EAAA0B,UAAAo3D,cACAtlB,EAAAslB,EAAA94D,EAAA0B,UAAAm3D,mBAAA74D,EAAA0B,UAAAo1D,qBACA1jB,EAAA0lB,EAAA94D,EAAA0B,UAAAo1D,qBAAA92D,EAAA0B,UAAAm3D,mBACAuvB,EAAApoF,EAAA8B,QAAAi6B,IAAA0X,QAAAD,EAAA5G,KAAA1vC,OAEAmrF,EADAroF,EAAA8B,QAAAi6B,IAAAqmB,aAAApiD,EAAA0B,UAAA6xC,YACAnjC,QAAA,aAAAlT,OACAorF,EAAAtoF,EAAA8B,QAAAi6B,IAAA0X,QAAAD,EAAA5G,KAEA7vC,EAAAy2C,EAAA5G,IAAA,EAA0C7vC,GAAAq2C,EAAAxG,IAAA,EAA2B7vC,IAAA,CACrE,IAAAwrF,EAAAt3C,EAAA3B,eAAA2B,EAAA1B,gBAAAvvC,EAAA8B,QAAAi6B,IAAA0X,QAAA12C,KAEA,IAAAwrF,EAAArrF,SACAqrF,EAAA,IAAAA,GAGAD,GAAAC,EAGAn1C,EAAAxG,IAAA,EAAA5sC,EAAA8B,QAAAi6B,IAAAsiB,YAAA,IACAiqC,GAAAtoF,EAAA8B,QAAAi6B,IAAA+vC,uBAGA9rE,EAAAmhD,iBACAnhD,EAAA8B,QAAAi6B,IAAA3rB,QAAA,IAAArS,EAAAy1C,EAAA5G,IAAA,EAAAwG,EAAAxG,IAAA,KAAA07C,GAEAD,EAAA,GACAroF,EAAA0B,UAAA83D,aAAAhmB,EAAA5G,IAAA4G,EAAA3G,QACA7sC,EAAA0B,UAAAs8C,SAAAxK,EAAA5G,IAAA4G,EAAA3G,OAAAw7C,KAEAD,EAAApoF,EAAA8B,QAAAi6B,IAAA0X,QAAAD,EAAA5G,KAAA1vC,OAAAkrF,IAAA,EAAAA,EACApoF,EAAA0B,UAAA83D,aAAAhmB,EAAA5G,IAAAw7C,KAGAtC,kBAAA,UACAx+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,mBACA7iF,UAAA,WACAD,KAAA,SAAA5C,GACA,IAAAqF,EAAArF,EAAA8B,QAAAi6B,IAAAsiB,YAAA,EACA/4C,EAAAtF,EAAA8B,QAAAi6B,IAAA0X,QAAApuC,GAAAnI,OACA0rB,EAAA5oB,EAAA0B,UAAA+7D,UAAA70C,OACA4/D,EAAA,GAEA5/D,EAAA1rB,OAAA,IACA0rB,EAAA,CAAA5oB,EAAA0B,UAAA6xC,aAGA,QAAAx2C,EAAA,EAAqBA,EAAA6rB,EAAA1rB,OAAmBH,IACxCA,GAAA6rB,EAAA1rB,OAAA,IACA0rB,EAAA7rB,GAAA+vC,IAAAF,MAAAvnC,GAAAujB,EAAA7rB,GAAA+vC,IAAAD,SAAAvnC,GACAkjF,EAAA/+E,KAAA,IAAA1L,EAAA6qB,EAAA7rB,GAAA+vC,IAAAF,IAAAhkB,EAAA7rB,GAAA+vC,IAAAD,OAAAxnC,EAAAC,KAIA,IAAAvI,EACA,IAAA6rB,EAAA7rB,GAAAwjB,MAAAqsB,KAAA,IAAAhkB,EAAA7rB,GAAAwjB,MAAAssB,QACA27C,EAAA/+E,KAAA,IAAA1L,EAAA,IAAA6qB,EAAA7rB,GAAAwjB,MAAAqsB,IAAAhkB,EAAA7rB,GAAAwjB,MAAAssB,SAGA27C,EAAA/+E,KAAA,IAAA1L,EAAA6qB,EAAA7rB,EAAA,GAAA+vC,IAAAF,IAAAhkB,EAAA7rB,EAAA,GAAA+vC,IAAAD,OAAAjkB,EAAA7rB,GAAAwjB,MAAAqsB,IAAAhkB,EAAA7rB,GAAAwjB,MAAAssB,SAIA7sC,EAAAyoF,sBACAzoF,EAAAmhD,iBAEA,IAAApkD,EAAA,EAAqBA,EAAAyrF,EAAAtrF,OAAsBH,IAC3CiD,EAAA0B,UAAAomB,SAAA0gE,EAAAzrF,IAAA,IAGAuK,UAAA,EACAm+E,eAAA,QACG,CACH9+E,KAAA,qBACA++E,YAAA,uBACA7iF,UAAA,WACAD,KAAA,SAAA5C,GACAA,EAAAsoB,OAAA,CACAu9D,MAAA,cAGAv+E,UAAA,GACG,CACHX,KAAA,aACA++E,YAAA,0BACA7iF,UAAA,WACAD,KAAA,SAAA5C,GACAA,EAAAsoB,OAAA,CACAu9D,MAAA,WAGAv+E,UAAA,MAGAzJ,IAAAsM,OAAA,waAAAnM,EAAAV,EAAA4M,GACA,aAEAlM,EAAA,wBAEA,IAAAoM,EAAApM,EAAA,aAEAgzC,EAAAhzC,EAAA,aAEAizC,EAAAjzC,EAAA,cAEAk9B,EAAAl9B,EAAA,mBAEAyzC,EAAAzzC,EAAA,wBAAAyzC,UAEAwa,EAAAjuD,EAAA,yBAAAiuD,aAEA6B,EAAA9vD,EAAA,wBAAA8vD,YAEAW,EAAAzwD,EAAA,yBAAAywD,WAEAhkD,EAAAzM,EAAA,kBAAAyM,YAEAs3E,EAAA/jF,EAAA,YAAA+jF,OAEAhkF,EAAAC,EAAA,WAAAD,MAEAsM,EAAArM,EAAA,uBAAAqM,aAEAq6E,EAAA1mF,EAAA,8BAAA0mF,eAEAgE,EAAA1qF,EAAA,+BAAA4B,SAEAosD,EAAAhuD,EAAA,YAEAqkE,EAAArkE,EAAA,oBAAAqkE,cAEAnxB,EAAAlzC,EAAA,eAEAsM,EAAA,SAAAA,EAAA/J,EAAAuB,EAAA6jB,GACA,IAAAhb,EAAApK,EAAAooF,sBACA9sF,KAAA8O,YACA9O,KAAA0E,WACA1E,KAAAoJ,GAAA,YAAAqF,EAAAitE,KACA17E,KAAA+D,SAAA,IAAA8kF,EAAAxpD,EAAAzB,MAAA,YAAAivD,GAEA,iBAAA1iF,WACAnK,KAAAy7C,UAAA,IAAA7F,EAAAlxC,EAAAqoF,uBAAA/sF,MACAA,KAAA0E,SAAAsoF,SAAAhtF,KAAAy7C,UAAAf,aACA16C,KAAA67C,cAAA,IAAAuU,EAAApwD,MACA,IAAAiyD,EAAAjyD,OAGAA,KAAAitF,WAAA,IAAAr6B,EAAA5yD,MACAA,KAAAktF,SAAA,IAAAhH,GAAA/wE,IAAA,CACA0wE,MAAA,IAEA7lF,KAAAmtF,gBAAAntF,KAAAmtF,gBAAAxqF,KAAA3C,MACAA,KAAA+D,SAAAuB,GAAA,OAAAtF,KAAAmtF,iBACAntF,KAAAotF,0BACAptF,KAAAqtF,iBAAAj4C,EAAAP,YAAA,WACA70C,KAAAgiD,QAAA,YAEAhiD,KAAAiG,SAAAjG,KAAAiG,QAAA21E,aAAA57E,KAAAiG,QAAA21E,YAAA7I,iBACKpwE,KAAA3C,OACLA,KAAAsF,GAAA,kBAAAqmD,EAAA5W,GACAA,EAAAs4C,iBAAA14C,SAAA,MAEA30C,KAAA+R,WAAA9L,GAAA6jB,KAAA7jB,SAAA,IAAA2I,EAAA,KACAuhD,EAAAvC,aAAA5tD,MACA8pB,GAAA9pB,KAAAqI,WAAAyhB,GAEAqmC,EAAAnO,QAAA,SAAAhiD,OAGAyO,EAAAitE,KAAA,EACA,WACAntE,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAAotF,wBAAA,WACAptF,KAAA+D,SAAAuB,GAAA,OAAAtF,KAAA0xD,eAAA/uD,KAAA3C,OAAA,GACAA,KAAA+D,SAAAuB,GAAA,YAAAtF,KAAAwxD,aAAA7uD,KAAA3C,OAAA,GACAA,KAAAstF,cAAAl4C,EAAAP,YAAA70C,KAAAwxD,aAAA7uD,KAAA3C,MAAA,IACAA,KAAAsF,GAAA,oBACAtF,KAAAo3C,QACAp3C,KAAA0xD,iBACA1xD,KAAAo3C,MAAAupC,gBAAA3gF,KAAAutF,UAGAvtF,KAAAo3C,MAAAo2C,YAAA,GACO7qF,KAAA3C,OAAA,GACPA,KAAAsF,GAAA,6BACAtF,KAAAo3C,QACAp3C,KAAA0xD,iBACA1xD,KAAAo3C,MAAAupC,gBAAA3gF,KAAAutF,UAGAvtF,KAAAo3C,MAAAqa,kBAAA,GACO9uD,KAAA3C,OAAA,IAGPA,KAAAo3C,MAAA,KACAp3C,KAAAytF,OAAA,GAEAztF,KAAA0xD,eAAA,SAAAg8B,GACA,GAAA1tF,KAAAo3C,MAAA,CACA,IAAAs2C,GAAA1tF,KAAAo3C,MAAAtwC,QAAA,OACA9G,KAAAytF,OAAAztF,KAAAo3C,MAGAs2C,IACA1tF,KAAA2tF,gBAAA,KACAD,EAAA,IAGA1tF,KAAAstF,cAAA34C,WACA30C,KAAAo3C,MAAAp3C,KAAAiG,QAAAmxC,MAAA,CACAtwC,QAAA4mF,EAAA5mF,SAAA,GACA0Q,KAAAk2E,EAAAl2E,KACA6uC,UAAArmD,KAAA0E,SAAA2hD,WAEArmD,KAAAo3C,MAAAupC,gBAAA3gF,KAAA6F,UAAAsC,UAGAnI,KAAAwxD,aAAA,SAAAn7C,GACA,GAAArW,KAAAo3C,MAAA,CACA,GAAA/gC,IAAA,IAAAA,EAAAqmB,YAAA,OAAA18B,KAAAo3C,MAAA,KACA,MAAA/gC,GAAArW,KAAAo3C,MAAAtwC,SAAA,SAAA9G,KAAAo3C,MAAAtwC,QAAAgE,KAAA,OAIA,GAFA9K,KAAAgiD,QAAA,uBAEAhiD,KAAAo3C,MAAA,OACA,IAAAtwC,EAAA9G,KAAAo3C,MAAAtwC,QACA8iF,EAAA9iF,KAAA8iF,eAEA,GAAAA,EAAA,CACA,OAAAA,GACA,qBACAA,EAAA,UAEA,aACA5pF,KAAA0E,SAAA05C,qBAAA,SACA,MAEA,cACA,aACAp+C,KAAA0E,SAAA05C,uBACA,MAEA,oBACA,IAAAx0C,EAAA5J,KAAA6F,UAAA6xC,WACAyY,EAAAnwD,KAAA0E,SAAAggD,aAEA96C,EAAA8a,MAAAqsB,KAAAof,EAAA7d,SAAA1oC,EAAAqnC,IAAAF,KAAAof,EAAA9d,WACAryC,KAAA0E,SAAAkpF,wBAAA5tF,KAAA6F,UAAAq3C,OAAAl9C,KAAA6F,UAAAw2D,MASA,WAAAutB,GAAA5pF,KAAA0E,SAAAmpF,iBAAA7tF,KAAAo3C,MAAAiP,WAGA,IAAAynC,EAAA9tF,KAAA6F,UAAAsC,SACAnI,KAAAo3C,MAAA0pC,eAAAgN,EACA9tF,KAAAutF,SAAAvtF,KAAA6F,UAAAsC,SACAnI,KAAAiG,QAAA2K,iBAAAqsE,aAAA6Q,GACA9tF,KAAAytF,OAAAztF,KAAAo3C,MACAp3C,KAAAo3C,MAAA,OAIAp3C,KAAA+tF,mBAAA,mCAEA/tF,KAAAmtF,gBAAA,SAAA92E,GACA,GAAArW,KAAAguF,iBAAA,CACA,IAAAC,EAAAjuF,KAAAytF,OACAS,EAAAluF,KAAA+tF,mBACAI,EAAAF,EAAAnnF,SAAAuP,EAAAvP,QAAAgE,MAAAmjF,EAAAnnF,QAAAgE,KAEA,mBAAAuL,EAAAvP,QAAAgE,KAAA,CACA,IAAA/B,EAAAsN,EAAAmB,UACA3C,IAAA7U,KAAAouF,mBAAApuF,KAAAouF,kBAAA,GACAD,KAAAnuF,KAAAouF,oBACA,KAAAx4E,KAAA7M,IAAA,KAAA6M,KAAAq4E,EAAAz2E,OAEAxX,KAAAouF,kBAAA,OAEAD,MAAA,IAAAD,EAAArmF,QAAAwO,EAAAvP,QAAAgE,MAGA,UAAA9K,KAAAguF,kBAAAr1E,KAAAqkB,MAAAh9B,KAAAquF,kBAAA,MACAF,GAAA,GAGAA,EAAAnuF,KAAAiG,QAAAs2E,iBAAA,GAA2D,IAAA2R,EAAArmF,QAAAwO,EAAAvP,QAAAgE,QAAA9K,KAAAquF,kBAAA11E,KAAAqkB,SAG3Dh9B,KAAAkH,mBAAA,SAAArD,EAAAqsC,GACA,GAAArsC,GAAA,kBAAAA,GAAA,OAAAA,EAAA,CACA7D,KAAAsuF,cAAAzqF,EAEA,IAAAkxC,EAAA/0C,KAEAmwD,EAAAhB,WAAA,cAAAtrD,GAAA,SAAAwK,GACA0mC,EAAAu5C,eAAAzqF,GAAAkxC,EAAAk4C,WAAA/lF,mBAAAmH,KAAA+hC,SACAF,cAGAlwC,KAAAsuF,cAAA,KACAtuF,KAAAitF,WAAA/lF,mBAAArD,GACAqsC,QAIAlwC,KAAAuzD,mBAAA,WACA,OAAAvzD,KAAAitF,WAAA15B,sBAGAvzD,KAAA+R,WAAA,SAAA9L,GACA,GAAAjG,KAAAiG,WAAA,CACAjG,KAAAo3C,OAAAp3C,KAAAwxD,eACAxxD,KAAAo3C,MAAA,GACA,IAAAm3C,EAAAvuF,KAAAiG,QAEA,GAAAsoF,EAAA,CACAvuF,KAAAiG,QAAA8zC,IAAA,SAAA/5C,KAAAwuF,mBACAxuF,KAAAiG,QAAA8zC,IAAA,aAAA/5C,KAAA8+E,eACA9+E,KAAAiG,QAAA8zC,IAAA,kBAAA/5C,KAAAyuF,oBACAzuF,KAAAiG,QAAA8zC,IAAA,gBAAA/5C,KAAA0uF,kBACA1uF,KAAAiG,QAAA8zC,IAAA,kBAAA/5C,KAAA2uF,oBACA3uF,KAAAiG,QAAA8zC,IAAA,iBAAA/5C,KAAA4uF,mBACA5uF,KAAAiG,QAAA8zC,IAAA,aAAA/5C,KAAA6uF,eACA7uF,KAAAiG,QAAA8zC,IAAA,oBAAA/5C,KAAA8uF,sBACA9uF,KAAAiG,QAAA8zC,IAAA,mBAAA/5C,KAAA+uF,qBACA/uF,KAAAiG,QAAA8zC,IAAA,mBAAA/5C,KAAAgvF,qBACAhvF,KAAAiG,QAAA8zC,IAAA,mBAAA/5C,KAAAivF,qBACAjvF,KAAAiG,QAAA8zC,IAAA,kBAAA/5C,KAAAkvF,iBACAlvF,KAAAiG,QAAA8zC,IAAA,kBAAA/5C,KAAAmvF,oBACAnvF,KAAAiG,QAAA8zC,IAAA,mBAAA/5C,KAAAovF,qBACA,IAAAvpF,EAAA7F,KAAAiG,QAAA6C,eACAjD,EAAAk0C,IAAA,eAAA/5C,KAAAkvF,iBACArpF,EAAAk0C,IAAA,kBAAA/5C,KAAAqvF,oBAGArvF,KAAAiG,UAEAA,GACAjG,KAAAwuF,kBAAAxuF,KAAAsvF,iBAAA3sF,KAAA3C,MACAiG,EAAAX,GAAA,SAAAtF,KAAAwuF,mBACAxuF,KAAA0E,SAAAqN,WAAA9L,GACAjG,KAAA8+E,cAAA9+E,KAAAuvF,aAAA5sF,KAAA3C,MACAiG,EAAAX,GAAA,aAAAtF,KAAA8+E,eACA9+E,KAAAyuF,mBAAAzuF,KAAAwvF,kBAAA7sF,KAAA3C,MACAiG,EAAAX,GAAA,kBAAAtF,KAAAyuF,oBACAzuF,KAAA0uF,iBAAA1uF,KAAA0E,SAAA+qF,gBAAA9sF,KAAA3C,KAAA0E,UACAuB,EAAAX,GAAA,gBAAAtF,KAAA0uF,kBACA1uF,KAAA2uF,mBAAA3uF,KAAA0vF,kBAAA/sF,KAAA3C,MACAiG,EAAAX,GAAA,kBAAAtF,KAAA2uF,oBACA3uF,KAAA4uF,kBAAA5uF,KAAA2vF,iBAAAhtF,KAAA3C,MACAiG,EAAAX,GAAA,iBAAAtF,KAAA4uF,mBACA5uF,KAAA6uF,cAAA7uF,KAAA27E,aAAAh5E,KAAA3C,MACAiG,EAAAX,GAAA,aAAAtF,KAAA6uF,eACA7uF,KAAA8uF,qBAAA9uF,KAAA4vF,oBAAAjtF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,oBAAAtF,KAAA8uF,sBACA9uF,KAAA+uF,oBAAA/uF,KAAA6vF,mBAAAltF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,mBAAAtF,KAAA+uF,qBACA/uF,KAAAgvF,oBAAAhvF,KAAA8vF,mBAAAntF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,mBAAAtF,KAAAgvF,qBACAhvF,KAAAivF,oBAAAjvF,KAAA+vF,mBAAAptF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,mBAAAtF,KAAAivF,qBACAjvF,KAAAkvF,gBAAAlvF,KAAA+F,eAAApD,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,kBAAAtF,KAAAkvF,iBACAlvF,KAAAmvF,mBAAAnvF,KAAAgwF,kBAAArtF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,kBAAAtF,KAAAmvF,oBACAnvF,KAAAovF,oBAAApvF,KAAAiwF,mBAAAttF,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,mBAAAtF,KAAAovF,qBACApvF,KAAA6F,UAAAI,EAAA6C,eACA9I,KAAA6F,UAAAP,GAAA,eAAAtF,KAAAkvF,iBACAlvF,KAAAqvF,mBAAArvF,KAAA8F,kBAAAnD,KAAA3C,MACAA,KAAA6F,UAAAP,GAAA,kBAAAtF,KAAAqvF,oBACArvF,KAAAuvF,eACAvvF,KAAA+F,iBACA/F,KAAAgwF,oBACAhwF,KAAAiwF,qBACAjwF,KAAA8F,oBACA9F,KAAA4vF,sBACA5vF,KAAA6vF,qBACA7vF,KAAA8vF,qBACA9vF,KAAA+vF,qBACA/vF,KAAAiG,QAAAqL,kBAAAtR,KAAA0E,SAAA09E,kBACApiF,KAAA0E,SAAAwrF,eAEAlwF,KAAA6F,UAAA,KACA7F,KAAA0E,SAAAqN,WAAA9L,IAGAjG,KAAAgiD,QAAA,iBACA/7C,UACAsoF,eAGAvuF,KAAAo3C,MAAA,KACAm3C,KAAAvsC,QAAA,gBACAmuC,UAAAnwF,OAEAiG,KAAA+7C,QAAA,gBACA79C,OAAAnE,OAEAiG,KAAA21E,aAAA31E,EAAA21E,YAAA7I,kBAGA/yE,KAAA4E,WAAA,WACA,OAAA5E,KAAAiG,SAGAjG,KAAAgF,SAAA,SAAA+6B,EAAA0qB,GAGA,OAFAzqD,KAAAiG,QAAAi6B,IAAAl7B,SAAA+6B,GACA0qB,EAAuC,GAAAA,EAAAzqD,KAAAkF,mBAAgD,GAAAulD,GAAAzqD,KAAAsqF,oBAAvFtqF,KAAAy5C,YACA1Z,GAGA//B,KAAAgI,SAAA,WACA,OAAAhI,KAAAiG,QAAA+B,YAGAhI,KAAA8I,aAAA,WACA,OAAA9I,KAAA6F,WAGA7F,KAAAmH,OAAA,SAAAg5E,GACAngF,KAAA0E,SAAA0rF,SAAAjQ,IAGAngF,KAAA8E,SAAA,SAAA1B,EAAA8sC,GACAlwC,KAAA0E,SAAAI,SAAA1B,EAAA8sC,IAGAlwC,KAAAqwF,SAAA,WACA,OAAArwF,KAAA0E,SAAA2rF,YAGArwF,KAAAyiC,SAAA,SAAAn4B,GACAtK,KAAA0E,SAAA+9B,SAAAn4B,IAGAtK,KAAA4+C,WAAA,SAAAt0C,GACAtK,KAAA0E,SAAAk6C,WAAAt0C,IAGAtK,KAAAswF,YAAA,WACA,OAAAtwF,KAAAktD,UAAA,aAAA/X,EAAA5S,cAAAviC,KAAA8O,WAAAzL,UAGArD,KAAA+E,YAAA,SAAAwL,GACAvQ,KAAAyG,UAAA,WAAA8J,IAGAvQ,KAAAuwF,mBAAA,WAMA,GALAvwF,KAAAiG,QAAAuqF,oBACAxwF,KAAAiG,QAAAkD,aAAAnJ,KAAAiG,QAAAuqF,mBACAxwF,KAAAiG,QAAAuqF,kBAAA,OAGAxwF,KAAAywF,kBAAA,CAIA,IAAAj9E,EAAAxT,KACAA,KAAAywF,mBAAA,EACAh6D,WAAA,WACAjjB,EAAAi9E,mBAAA,EACA,IAAAxqF,EAAAuN,EAAAvN,QACA,GAAAA,KAAA21E,YAAA,CACA,IAAA1zE,EAAAjC,EAAAyjE,oBAAAl2D,EAAAwnD,qBAEA,GAAA9yD,EACA,IAAA0B,EAAA,IAAA1H,EAAAgG,EAAA6oC,IAAA7oC,EAAA8oC,OAAA9oC,EAAA6oC,IAAA7oC,EAAA8oC,OAAA,QACS,GAAA/qC,EAAA8jE,MAAA2mB,YACT9mF,EAAA3D,EAAA8jE,MAAA2mB,YAAAl9E,EAAAvN,SAGA2D,IAAA3D,EAAAuqF,kBAAAvqF,EAAA4D,UAAAD,EAAA,yBACO,MAGP5J,KAAA2wF,eAAA,WACA,IAAA3wF,KAAA4wF,qBAAA,CACA,IAAAp9E,EAAAxT,KACAA,KAAA4wF,sBAAA,EACAn6D,WAAA,WACAjjB,EAAAo9E,sBAAA,EACA,IAAA3qF,EAAAuN,EAAAvN,QACA,GAAAA,KAAA21E,YAAA,CACA,IAAA1zE,EAAAsL,EAAAwnD,oBACA4P,EAAA,IAAApE,EAAAhzD,EAAAvN,QAAAiC,EAAA6oC,IAAA7oC,EAAA8oC,QACA8xB,EAAA8H,EAAAxD,kBAEA,IAAAtE,IAAA,0BAAAltD,KAAAktD,EAAAp5D,MAGA,OAFAzD,EAAAkD,aAAAlD,EAAA4qF,oBACA5qF,EAAA4qF,cAAA,MAIA,OAAA/tB,EAAAp5D,KAAA7B,QAAA,cACAi7D,EAAA8H,EAAA1D,eADA,CAKA,IAAAhxD,EAAA4sD,EAAAphE,MACAi3E,EAAA,EACAmY,EAAAlmB,EAAA3D,eAEA,QAAA6pB,EAAApvF,MACA,GACAovF,EAAAhuB,GACAA,EAAA8H,EAAA1D,gBAEApE,EAAAphE,QAAAwU,IAAA,IAAA4sD,EAAAp5D,KAAA7B,QAAA,cACA,MAAAipF,EAAApvF,MACAi3E,IACe,OAAAmY,EAAApvF,OACfi3E,WAGW7V,GAAA6V,GAAA,OACF,CACT,GACA7V,EAAAguB,EACAA,EAAAlmB,EAAA3D,eAEAnE,KAAAphE,QAAAwU,IAAA,IAAA4sD,EAAAp5D,KAAA7B,QAAA,cACA,MAAAipF,EAAApvF,MACAi3E,IACe,OAAAmY,EAAApvF,OACfi3E,WAGWmY,GAAAnY,GAAA,GAEX/N,EAAA1D,cAGA,IAAApE,EAGA,OAFA78D,EAAAkD,aAAAlD,EAAA4qF,oBACA5qF,EAAA4qF,cAAA,MAIA,IAAA9/C,EAAA65B,EAAAvD,qBACAr2B,EAAA45B,EAAAtD,wBACA19D,EAAA,IAAA1H,EAAA6uC,EAAAC,EAAAD,EAAAC,EAAA8xB,EAAAphE,MAAAL,QACA0vF,EAAA9qF,EAAAs1E,aAAAt1E,EAAA4qF,eAEA5qF,EAAA4qF,oBAAAh8E,GAAAk8E,GAAA,IAAAnnF,EAAAwnC,aAAA2/C,EAAAnnF,SACA3D,EAAAkD,aAAAlD,EAAA4qF,eACA5qF,EAAA4qF,cAAA,MAGA5qF,EAAA4qF,gBAAA5qF,EAAA4qF,cAAA5qF,EAAA4D,UAAAD,EAAA,0BACO,MAGP5J,KAAAmD,MAAA,WACA,IAAA4xC,EAAA/0C,KAEAy2B,WAAA,WACAse,EAAA2B,aAAA3B,EAAA0G,UAAAt4C,UAEAnD,KAAAy7C,UAAAt4C,SAGAnD,KAAA02C,UAAA,WACA,OAAA12C,KAAAy7C,UAAA/E,aAGA12C,KAAAmQ,KAAA,WACAnQ,KAAAy7C,UAAAtrC,QAGAnQ,KAAAuF,QAAA,SAAA8Q,GACArW,KAAAgxF,aACAhxF,KAAAgxF,YAAA,EACAhxF,KAAA0E,SAAAusF,aACAjxF,KAAA0E,SAAAwsF,iBAEAlxF,KAAA6P,MAAA,QAAAwG,KAGArW,KAAAwF,OAAA,SAAA6Q,GACArW,KAAAgxF,aACAhxF,KAAAgxF,YAAA,EACAhxF,KAAA0E,SAAAysF,aACAnxF,KAAA0E,SAAA0sF,gBAEApxF,KAAA6P,MAAA,OAAAwG,KAGArW,KAAAqxF,cAAA,WACArxF,KAAA0E,SAAA4sF,gBAGAtxF,KAAAsvF,iBAAA,SAAAxzE,GACA,IAAA+pE,EAAA7lF,KAAAiG,QAAA6zD,aACAxnB,EAAAx2B,EAAA4I,MAAAqsB,KAAAj1B,EAAAm1B,IAAAF,IAAAj1B,EAAAm1B,IAAAF,IAAA+6B,IACA9rE,KAAA0E,SAAA6sF,YAAAz1E,EAAA4I,MAAAqsB,IAAAuB,EAAAuzC,GAEA7lF,KAAAgiD,QAAA,SAAAlmC,GAEA9b,KAAAqxF,gBACArxF,KAAAwxF,8BAGAxxF,KAAAwvF,kBAAA,SAAAn5E,GACA,IAAA4qD,EAAA5qD,EAAAK,KACA1W,KAAA0E,SAAA6sF,YAAAtwB,EAAA6R,MAAA7R,EAAA7tB,OAGApzC,KAAAgwF,kBAAA,WACAhwF,KAAA0E,SAAA+sF,UAAAzxF,KAAAiG,QAAA+kD,iBAGAhrD,KAAAiwF,mBAAA,WACAjwF,KAAA0E,SAAAgtF,UAAA1xF,KAAAiG,QAAA25E,kBAGA5/E,KAAA+F,eAAA,WACA/F,KAAAqxF,gBACArxF,KAAAuwF,qBACAvwF,KAAA2wF,iBACA3wF,KAAAwxF,6BAEAxxF,KAAAgiD,QAAA,oBAGAhiD,KAAAwxF,2BAAA,WACA,IACApT,EADAn4E,EAAAjG,KAAA4E,aASA,GANA5E,KAAA2xF,uBACA,QAAA3xF,KAAA4xF,iBAAA5xF,KAAA6F,UAAAmsC,gBAAAosC,EAAAp+E,KAAAg7D,qBACAh7D,KAAA0E,SAAAtB,OAAApD,KAAA0E,SAAAtB,MAAAyuF,0BAAA7xF,KAAA6F,UAAA4sC,YAAA2rC,GAAA,IACAp+E,KAAA0E,SAAAotF,WAAA,IAAA9xF,KAAAiG,QAAAu8C,aAAAxiD,KAAA0E,SAAAqtF,UAAA,IAAA3T,GAAA,IAGAn4E,EAAA+rF,uBAAA5T,EACAn4E,EAAAkD,aAAAlD,EAAA+rF,qBAAA5oF,IACAnD,EAAA+rF,qBAAA,UACO,IAAA/rF,EAAA+rF,sBAAA5T,EAAA,CACP,IAAAx0E,EAAA,IAAA1H,EAAAk8E,EAAArtC,IAAAqtC,EAAAptC,OAAAotC,EAAArtC,IAAA+6B,KACAliE,EAAAR,GAAAnD,EAAA4D,UAAAD,EAAA,gCACA3D,EAAA+rF,qBAAApoF,OACOw0E,IACPn4E,EAAA+rF,qBAAAttE,MAAAqsB,IAAAqtC,EAAArtC,IACA9qC,EAAA+rF,qBAAA/gD,IAAAF,IAAAqtC,EAAArtC,IACA9qC,EAAA+rF,qBAAAttE,MAAAssB,OAAAotC,EAAAptC,OAEA/qC,EAAA+7C,QAAA,sBAIAhiD,KAAA8F,kBAAA,SAAAuQ,GACA,IAAApQ,EAAAjG,KAAAiG,QAQA,GANAA,EAAAgsF,kBACAhsF,EAAAkD,aAAAlD,EAAAgsF,kBAGAhsF,EAAAgsF,iBAAA,KAEAjyF,KAAA6F,UAAA4sC,UAKAzyC,KAAAwxF,iCALA,CACA,IAAA5nF,EAAA5J,KAAA6F,UAAA6xC,WACAptC,EAAAtK,KAAAqlD,oBACAp/C,EAAAgsF,iBAAAhsF,EAAA4D,UAAAD,EAAA,gBAAAU,GAKA,IAAAykD,EAAA/uD,KAAAkyF,wBAAAlyF,KAAAmyF,+BACAnyF,KAAAiG,QAAAm4E,UAAArvB,GAEA/uD,KAAAgiD,QAAA,oBAGAhiD,KAAAmyF,6BAAA,WACA,IAAAlsF,EAAAjG,KAAAiG,QACAJ,EAAA7F,KAAAu6C,oBACA,IAAA10C,EAAA4sC,YAAA5sC,EAAAmsC,cAAA,CACA,IAAAnB,EAAAhrC,EAAA6e,MAAAssB,OACAF,EAAAjrC,EAAAorC,IAAAD,OACAvzB,EAAAxX,EAAA2xC,QAAA/xC,EAAA6e,MAAAqsB,KACA41C,EAAAlpE,EAAAvE,UAAA23B,EAAAC,GACA,KAAA61C,EAAAtlF,OAAA,eAAAuU,KAAA+wE,GAAA,CACA,IAAA53B,EAAA/uD,KAAAktF,QAAAtG,gBAAA,CACAM,WAAA,EACAG,eAAA,EACAV,WAEAyL,EAAA30E,EAAAvE,UAAA23B,EAAA,EAAAC,EAAA,GACA,GAAAie,EAAAn5C,KAAAw8E,GACA,OAAArjC,KAGA/uD,KAAA4vF,oBAAA,WACA5vF,KAAA0E,SAAA2tF,sBAGAryF,KAAA6vF,mBAAA,WACA7vF,KAAA0E,SAAA4tF,qBAGAtyF,KAAA8vF,mBAAA,WACA9vF,KAAA0E,SAAA6tF,qBAGAvyF,KAAA+vF,mBAAA,WACA/vF,KAAA0E,SAAAyB,eAAAnG,KAAAiG,QAAAD,mBAGAhG,KAAAuvF,aAAA,SAAAl5E,GACArW,KAAA0E,SAAA8tF,aAEAxyF,KAAA6P,MAAA,aAAAwG,IAGArW,KAAA0vF,kBAAA,WACA1vF,KAAA0E,SAAAwrF,cAGAlwF,KAAA2vF,iBAAA,WACA3vF,KAAA0E,SAAA0rF,UAAA,IAGApwF,KAAA27E,aAAA,WACA37E,KAAAwxF,6BACAxxF,KAAA0E,SAAAwrF,cAGAlwF,KAAAyyF,gBAAA,WACA,OAAAzyF,KAAAiG,QAAAsgD,aAAAvmD,KAAAu6C,sBAGAv6C,KAAAo5C,YAAA,WACA,IAAArwC,EAAA/I,KAAAyyF,kBACAC,EAAA1yF,KAAAiG,QAAAi6B,IAAA+vC,sBACA0iB,GAAA,EAEA,IAAA5pF,GAAA/I,KAAAurF,wBAAA,CACAoH,GAAA,EAGA,IAFA,IAAA5lE,EAAA/sB,KAAA6F,UAAAqkF,eAEAhpF,EAAA,EAAuBA,EAAA6rB,EAAA1rB,OAAmBH,IAAA,CAC1C,IAAA0I,EAAAmjB,EAAA7rB,GACAA,GAAA6rB,EAAA7rB,EAAA,GAAAwjB,MAAAqsB,KAAAnnC,EAAA8a,MAAAqsB,MACAhoC,GAAA/I,KAAAiG,QAAA2xC,QAAAhuC,EAAA8a,MAAAqsB,KAAA2hD,IAIA,IAAAr8E,EAAA,CACAtN,QAMA,OAHA/I,KAAAgiD,QAAA,OAAA3rC,GAEAg/B,EAAAJ,SAAA09C,EAAAt8E,EAAAtN,KAAA,GACAsN,EAAAtN,MAGA/I,KAAAyF,OAAA,WACAzF,KAAA+D,SAAAgD,KAAA,OAAA/G,OAGAA,KAAAq5C,MAAA,WACAr5C,KAAA+D,SAAAgD,KAAA,MAAA/G,OAGAA,KAAA0F,QAAA,SAAAqD,EAAAF,GACA,IAAAwN,EAAA,CACAtN,OACAF,SAEA7I,KAAA+D,SAAAgD,KAAA,QAAA/G,KAAAqW,IAGArW,KAAAwrF,aAAA,SAAAn1E,GACA,iBAAAA,MAAA,CACAtN,KAAAsN,IAGArW,KAAAgiD,QAAA,QAAA3rC,GAEA,IAAAtN,EAAAsN,EAAAtN,KACAksC,EAAAlsC,GAAAssC,EAAAJ,SACAhvC,EAAAjG,KAAAiG,QAEA,IAAAjG,KAAA09C,mBAAA19C,KAAA4yF,uBACA39C,EAAAhvC,EAAAk0B,OAAA,CACA4W,IAAA/wC,KAAA6F,UAAAw2D,KAAAtrB,IACAC,OAAA,GACSjoC,GAAQ/I,KAAAm6B,OAAApxB,QACV,GAAAksC,EACPj1C,KAAA6F,UAAA+7D,UAAA70C,OAAAtqB,QAAA,SAAAmH,GACA3D,EAAAk0B,OAAA,CACA4W,IAAAnnC,EAAA8a,MAAAqsB,IACAC,OAAA,GACWjoC,SAEJ,CACP,IAAAyE,EAAAzE,EAAArB,MAAA,cACAqlB,EAAA/sB,KAAA6F,UAAA+7D,UAAA70C,OACA8lE,EAAA,GAAArlF,EAAAnM,UAAAmM,EAAA,KAAAA,EAAA,IACA,GAAAA,EAAAnM,QAAA0rB,EAAA1rB,QAAAwxF,EAAA,OAAA7yF,KAAA+D,SAAAgD,KAAA,eAAA/G,KAAA+I,GAEA,QAAA7H,EAAA6rB,EAAA1rB,OAAmCH,KAAK,CACxC,IAAA0I,EAAAmjB,EAAA7rB,GACA0I,EAAA6oC,WAAAxsC,EAAAm0B,OAAAxwB,GACA3D,EAAAk0B,OAAAvwB,EAAA8a,MAAAlX,EAAAtM,OAKAlB,KAAAksB,YAAA,SAAAplB,EAAA0Q,GACA,OAAAxX,KAAA+D,SAAAgD,KAAAD,EAAA9G,KAAAwX,IAGAxX,KAAAm6B,OAAA,SAAApxB,EAAAitC,GACA,IAAA/vC,EAAAjG,KAAAiG,QACA/C,EAAA+C,EAAAyK,UACArD,EAAArN,KAAAg7D,oBAEA,GAAAh7D,KAAA8yF,yBAAA98C,EAAA,CACA,IAAAtmB,EAAAxsB,EAAA6qE,gBAAA9nE,EAAAgtE,SAAA5lE,EAAA0jC,KAAA,YAAA/wC,KAAAiG,EAAA8C,GAEA2mB,IACA3mB,IAAA2mB,EAAA3mB,OACA/I,KAAA4yF,yBACA5yF,KAAAiG,QAAAs2E,iBAAA,EACAv8E,KAAAouF,kBAAA,IAIArlF,EAAA2mB,EAAA3mB,MAMA,GAFA,MAAAA,MAAA/I,KAAAiG,QAAA4jE,gBAEA7pE,KAAA6F,UAAA4sC,WAIO,GAAAzyC,KAAAiG,QAAAkL,iBAAA,GAAApI,EAAAlB,QAAA,QACP+B,EAAA,IAAA1H,EAAAqwC,WAAAllC,MACA4jC,IAAAD,QAAAjoC,EAAA1H,OACArB,KAAAiG,QAAAm0B,OAAAxwB,QAPA,CACA,IAAAA,EAAA5J,KAAAu6C,oBACAltC,EAAArN,KAAAiG,QAAAm0B,OAAAxwB,GACA5J,KAAAslD,iBAOA,SAAAv8C,GAAA,QAAAA,EAAA,CACA,IAAA0U,EAAAxX,EAAA2xC,QAAAvqC,EAAA0jC,KAEA,GAAA1jC,EAAA2jC,OAAAvzB,EAAA2iD,OAAA,SACA,IAAAlgE,EAAAud,EAAA28C,OAAA/sD,EAAA2jC,QAAAovB,OAAA,QACAn6D,EAAAi6B,IAAAi7B,aAAA9tD,EAAA0jC,IAAA1jC,EAAA2jC,OAAA3jC,EAAA2jC,OAAA9wC,IAIAF,KAAAslD,iBACA,IAAA5gC,EAAArX,EAAA2jC,OACA+hD,EAAA9sF,EAAAgtE,SAAA5lE,EAAA0jC,KAEAiiD,GADAv1E,EAAAxX,EAAA2xC,QAAAvqC,EAAA0jC,KACA7tC,EAAAmqE,aAAA0lB,EAAAt1E,EAAA1U,IAaA,GAZA9C,EAAAk0B,OAAA9sB,EAAAtE,GAEA2mB,KAAA7pB,YACA,GAAA6pB,EAAA7pB,UAAAxE,OAEArB,KAAA6F,UAAA2xC,kBAAA,IAAAt1C,EAAAmL,EAAA0jC,IAAArsB,EAAAgL,EAAA7pB,UAAA,GAAAwH,EAAA0jC,IAAArsB,EAAAgL,EAAA7pB,UAAA,KAGA7F,KAAA6F,UAAA2xC,kBAAA,IAAAt1C,EAAAmL,EAAA0jC,IAAArhB,EAAA7pB,UAAA,GAAA6pB,EAAA7pB,UAAA,GAAAwH,EAAA0jC,IAAArhB,EAAA7pB,UAAA,GAAA6pB,EAAA7pB,UAAA,MAIAI,EAAAwK,cAAAggE,UAAA1nE,GAAA,CACA,IAAAkqF,EAAA/vF,EAAAiqE,kBAAA4lB,EAAAt1E,EAAA4I,MAAA,EAAAhZ,EAAA2jC,QAAA/qC,EAAA4jE,gBACA5jE,EAAAk0B,OAAA,CACA4W,IAAA1jC,EAAA0jC,IAAA,EACAC,OAAA,GACSiiD,GAGTD,GAAA9vF,EAAAqqE,YAAAwlB,EAAA9sF,EAAAoH,EAAA0jC,MAGA/wC,KAAA04C,YAAA,SAAA3vC,EAAAmqF,GACA,IAAAA,EAAA,OAAAlzF,KAAAitF,WAAAv0C,YAAA3vC,GACA/I,KAAA0xD,eAAA,CACA5qD,QAAA,CACAgE,KAAA,kBAGA,IAAAqoF,EAAAnzF,KAAAmzF,iBAAAxwF,KAAA3C,KAAA+I,EAAAmqF,GACAlzF,KAAA6F,UAAA+mB,WAAA5sB,KAAAozF,iBAAAD,GAA6EA,IAC7EnzF,KAAAwxD,gBAGAxxD,KAAAmzF,iBAAA,SAAApqF,EAAAmqF,GAEA,IAUAzxB,GAXAyxB,EAAA96C,YAAA86C,EAAA76C,gBACAopB,EAAAzhE,KAAA6F,UAAA6xC,YACAhzB,MAAAssB,QAAAkiD,EAAA96C,WACAqpB,EAAAxwB,IAAAD,QAAAkiD,EAAA76C,YACAr4C,KAAA6F,UAAA0kD,SAAAkX,GACA14D,GAAA04D,EAAAhvB,WAAAzyC,KAAAo6B,YAGArxB,GAAA/I,KAAA6F,UAAA4sC,WAAAzyC,KAAAm6B,OAAApxB,GAAA,GAEAmqF,EAAA36C,cAAA26C,EAAA16C,eACAipB,EAAAzhE,KAAA6F,UAAA6xC,YACAhzB,MAAAssB,QAAAkiD,EAAA36C,aACAkpB,EAAAxwB,IAAAD,QAAAkiD,EAAA16C,WACAx4C,KAAA6F,UAAA0kD,SAAAkX,KAIAzhE,KAAAu5C,aAAA,SAAAljC,EAAAw4B,EAAA1D,GACA,OAAAnrC,KAAAitF,WAAA1zC,aAAAljC,EAAAw4B,EAAA1D,IAGAnrC,KAAAkR,aAAA,SAAAwsE,GACA19E,KAAAiG,QAAAiL,aAAAwsE,IAGA19E,KAAAmR,aAAA,WACA,OAAAnR,KAAAiG,QAAAkL,gBAGAnR,KAAA29E,gBAAA,WACA39E,KAAAiG,QAAA03E,mBAGA39E,KAAAqzF,eAAA,SAAAnzC,GACAlgD,KAAAyG,UAAA,cAAAy5C,IAGAlgD,KAAAszF,eAAA,WACA,OAAAtzF,KAAAktD,UAAA,gBAGAltD,KAAAuzF,aAAA,SAAA1hC,GACA7xD,KAAAyG,UAAA,YAAAorD,IAGA7xD,KAAAwnD,aAAA,WACA,OAAAxnD,KAAAktD,UAAA,cAGAltD,KAAAwzF,kBAAA,SAAAzzD,GACA//B,KAAAyG,UAAA,iBAAAs5B,IAGA//B,KAAAqlD,kBAAA,WACA,OAAArlD,KAAAktD,UAAA,mBAGAltD,KAAAyzF,uBAAA,SAAAC,GACA1zF,KAAAyG,UAAA,sBAAAitF,IAGA1zF,KAAA2zF,uBAAA,WACA,OAAA3zF,KAAAktD,UAAA,wBAGAltD,KAAA4zF,uBAAA,SAAAF,GACA1zF,KAAAyG,UAAA,sBAAAitF,IAGA1zF,KAAA6zF,uBAAA,WACA,OAAA7zF,KAAAktD,UAAA,wBAGAltD,KAAA8zF,yBAAA,SAAAJ,GACA1zF,KAAAyG,UAAA,wBAAAitF,IAGA1zF,KAAA+zF,yBAAA,WACA,OAAA/zF,KAAAkyF,wBAGAlyF,KAAAg0F,kBAAA,SAAAC,GACAj0F,KAAA0E,SAAAsvF,kBAAAC,IAGAj0F,KAAAk0F,kBAAA,WACA,OAAAl0F,KAAA0E,SAAAwvF,qBAGAl0F,KAAA06D,kBAAA,SAAArC,GACAr4D,KAAA0E,SAAAg2D,kBAAArC,IAGAr4D,KAAAm0F,kBAAA,WACA,OAAAn0F,KAAA0E,SAAAyvF,qBAGAn0F,KAAAo0F,uBAAA,SAAAnyD,GACAjiC,KAAA0E,SAAA0vF,uBAAAnyD,IAGAjiC,KAAAq0F,uBAAA,WACA,OAAAr0F,KAAA0E,SAAA2vF,0BAGAr0F,KAAAqF,mBAAA,SAAA3B,GACA1D,KAAA0E,SAAAW,mBAAA3B,IAGA1D,KAAAs0F,mBAAA,WACA,OAAAt0F,KAAA0E,SAAA4vF,sBAGAt0F,KAAAu0F,qBAAA,SAAA7wF,GACA1D,KAAA0E,SAAA6vF,qBAAA7wF,IAGA1D,KAAAw0F,qBAAA,WACA,OAAAx0F,KAAA0E,SAAA8vF,wBAGAx0F,KAAA46C,YAAA,SAAAnvC,GACAzL,KAAAyG,UAAA,WAAAgF,IAGAzL,KAAAomD,YAAA,WACA,OAAApmD,KAAAktD,UAAA,aAGAltD,KAAAy0F,qBAAA,SAAAC,GACA10F,KAAAyG,UAAA,oBAAAiuF,IAGA10F,KAAA8yF,qBAAA,WACA,OAAA9yF,KAAAktD,UAAA,sBAGAltD,KAAA20F,yBAAA,SAAAD,GACA10F,KAAAyG,UAAA,wBAAAiuF,IAGA10F,KAAA+oE,yBAAA,WACA,OAAA/oE,KAAAktD,UAAA,0BAGAltD,KAAA40F,mBAAA,SAAA9zC,GACA9gD,KAAAyG,UAAA,kBAAAq6C,IAGA9gD,KAAA60F,mBAAA,WACA,OAAA70F,KAAAktD,UAAA,oBAGAltD,KAAA80F,mBAAA,SAAAC,GACA/0F,KAAAyG,UAAA,kBAAAsuF,IAGA/0F,KAAAg1F,mBAAA,WACA,OAAAh1F,KAAAktD,UAAA,oBAGAltD,KAAAo6B,OAAA,SAAAw5B,GACA5zD,KAAA6F,UAAA4sC,YACA,QAAAmhB,EAAA5zD,KAAA6F,UAAAs4D,aAAuDn+D,KAAA6F,UAAAo4D,eAGvD,IAAAr0D,EAAA5J,KAAAu6C,oBAEA,GAAAv6C,KAAA8yF,uBAAA,CACA,IAAA7sF,EAAAjG,KAAAiG,QACAsG,EAAAtG,EAAAgtE,SAAArpE,EAAA8a,MAAAqsB,KACAkkD,EAAAhvF,EAAAyK,UAAAq9D,gBAAAxhE,EAAA,WAAAvM,KAAAiG,EAAA2D,GAEA,OAAAA,EAAAqnC,IAAAD,OAAA,CACA,IAAAjoC,EAAA9C,EAAAsgD,aAAA38C,GAEA,SAAAb,IAAA1H,OAAA,IACA,IAAAoc,EAAAxX,EAAA2xC,QAAAhuC,EAAAqnC,IAAAF,KAEA,QAAAn7B,KAAA6H,KACA7T,EAAAqnC,IAAAD,OAAAvzB,EAAApc,SAKA4zF,IAAArrF,EAAAqrF,GAGAj1F,KAAAiG,QAAAm0B,OAAAxwB,GACA5J,KAAAslD,kBAGAtlD,KAAAisF,gBAAA,WACAjsF,KAAA6F,UAAA4sC,WAAAzyC,KAAA6F,UAAAg5D,kBACA7+D,KAAAiG,QAAAm0B,OAAAp6B,KAAAu6C,qBACAv6C,KAAAslD,kBAGAtlD,KAAAgsF,eAAA,WACAhsF,KAAA6F,UAAA4sC,WAAAzyC,KAAA6F,UAAAk5D,iBACA/+D,KAAAiG,QAAAm0B,OAAAp6B,KAAAu6C,qBACAv6C,KAAAslD,kBAGAtlD,KAAA8rF,kBAAA,WACA9rF,KAAA6F,UAAA4sC,WAAAzyC,KAAA6F,UAAAw4D,kBACAr+D,KAAA6F,UAAA4sC,WAAAzyC,KAAA6F,UAAAs4D,aACAn+D,KAAAiG,QAAAm0B,OAAAp6B,KAAAu6C,qBACAv6C,KAAAslD,kBAGAtlD,KAAA+rF,gBAAA,WACA/rF,KAAA6F,UAAA4sC,WAAAzyC,KAAA6F,UAAA04D,gBACA,IAAA30D,EAAA5J,KAAAu6C,oBAEA3wC,EAAA8a,MAAAssB,QAAApnC,EAAAqnC,IAAAD,QAAApnC,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,MACAnnC,EAAAqnC,IAAAD,OAAA,EACApnC,EAAAqnC,IAAAF,OAGA/wC,KAAAiG,QAAAm0B,OAAAxwB,GACA5J,KAAAslD,kBAGAtlD,KAAAosF,UAAA,WACApsF,KAAA6F,UAAA4sC,YACAzyC,KAAAiG,QAAAm0B,OAAAp6B,KAAAu6C,qBACAv6C,KAAAslD,kBAGA,IAAAj4C,EAAArN,KAAAg7D,oBACAh7D,KAAAm6B,OAAA,MACAn6B,KAAAukD,qBAAAl3C,IAGArN,KAAAqsF,iBAAA,WACA,GAAArsF,KAAA6F,UAAA4sC,UAAA,CAIA,IAAAplC,EAAArN,KAAAg7D,oBACAhqB,EAAA3jC,EAAA2jC,OACA,OAAAA,EAAA,CACA,IACAkkD,EAAAtrF,EADA6T,EAAAzd,KAAAiG,QAAA2xC,QAAAvqC,EAAA0jC,KAGAC,EAAAvzB,EAAApc,QACA6zF,EAAAz3E,EAAAjB,OAAAw0B,GAAAvzB,EAAAjB,OAAAw0B,EAAA,GACApnC,EAAA,IAAA1H,EAAAmL,EAAA0jC,IAAAC,EAAA,EAAA3jC,EAAA0jC,IAAAC,EAAA,KAEAkkD,EAAAz3E,EAAAjB,OAAAw0B,EAAA,GAAAvzB,EAAAjB,OAAAw0B,EAAA,GACApnC,EAAA,IAAA1H,EAAAmL,EAAA0jC,IAAAC,EAAA,EAAA3jC,EAAA0jC,IAAAC,IAGAhxC,KAAAiG,QAAAsO,QAAA3K,EAAAsrF,GACAl1F,KAAAiG,QAAAJ,UAAA03C,eAAA3zC,EAAAqnC,QAGAjxC,KAAAi+B,YAAA,WACA,IAAAk3D,EAAAn1F,KAAAu6C,oBAEAv6C,KAAA6F,UAAA4sC,WACAzyC,KAAA6F,UAAAqkD,aAGA,IAAAtgD,EAAA5J,KAAAu6C,oBACAxxC,EAAA/I,KAAAiG,QAAAsgD,aAAA38C,GACA5J,KAAAiG,QAAAsO,QAAA3K,EAAAb,EAAAk1B,eACAj+B,KAAA6F,UAAA2xC,kBAAA29C,IAGAn1F,KAAAktB,YAAA,WACA,IAAAioE,EAAAn1F,KAAAu6C,oBAEAv6C,KAAA6F,UAAA4sC,WACAzyC,KAAA6F,UAAAqkD,aAGA,IAAAtgD,EAAA5J,KAAAu6C,oBACAxxC,EAAA/I,KAAAiG,QAAAsgD,aAAA38C,GACA5J,KAAAiG,QAAAsO,QAAA3K,EAAAb,EAAAmkB,eACAltB,KAAA6F,UAAA2xC,kBAAA29C,IAGAn1F,KAAAg6D,OAAA,WACA,IAAA/zD,EAAAjG,KAAAiG,QACA2D,EAAA5J,KAAAu6C,oBAEA,KAAA3wC,EAAA8a,MAAAqsB,IAAAnnC,EAAAqnC,IAAAF,KAAA,CAIO,GAAAnnC,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,OAAA,CACP,IAAAjoC,EAAA9C,EAAAsgD,aAAA38C,GAEA,YAAAgM,KAAA7M,GAAA,CACAk4D,EAAAjhE,KAAAo1F,mBAEA,YADAnvF,EAAAu7E,WAAAvgB,EAAA6R,MAAA7R,EAAA7tB,KAAA,OAKA,IAAA31B,EAAAxX,EAAA2xC,QAAAhuC,EAAA8a,MAAAqsB,KACAvmC,EAAAZ,EAAA8a,MACAnU,EAAAtK,EAAA8K,aACAigC,EAAA/qC,EAAAy+E,uBAAAl6E,EAAAumC,IAAAvmC,EAAAwmC,QAEA,GAAAhxC,KAAAiG,QAAAgL,iBACA,IAAAuiC,EAAAjjC,EAAAygC,EAAAzgC,EACAkxE,EAAArsC,EAAA7B,aAAA,IAAAC,OACO,CAGP,IAFAA,EAAAxC,EAAAzgC,EAEA,KAAAkN,EAAA7T,EAAA8a,MAAAssB,OAAA,IAAAwC,GACA5pC,EAAA8a,MAAAssB,SACAwC,IAGAxzC,KAAA6F,UAAA2xC,kBAAA5tC,GACA63E,EAAA,KAGA,OAAAzhF,KAAAm6B,OAAAsnD,GAjCA,IAAAxgB,EAAAjhE,KAAAo1F,mBACAnvF,EAAAu7E,WAAAvgB,EAAA6R,MAAA7R,EAAA7tB,KAAA,OAmCApzC,KAAAmsF,YAAA,WACA,IAAAlrB,EAAAjhE,KAAAo1F,mBACAp1F,KAAAiG,QAAAu7E,WAAAvgB,EAAA6R,MAAA7R,EAAA7tB,KAAA,OAGApzC,KAAAksF,aAAA,WACA,IAAArmF,EAAA7F,KAAAiG,QAAA6C,eACA9I,KAAAiG,QAAAy7E,YAAA77E,EAAA6xC,aAGA13C,KAAA0rF,UAAA,WAKA,IAJA,IAAAzqB,EAAAjhE,KAAAo1F,mBACAnvF,EAAAjG,KAAAiG,QACAuH,EAAA,GAEAtM,EAAA+/D,EAAA6R,MAA8B5xE,GAAA+/D,EAAA7tB,KAAgBlyC,IAC9CsM,EAAAI,KAAA3H,EAAA2xC,QAAA12C,IAGAsM,EAAAsmE,KAAA,SAAAv5D,EAAApa,GACA,OAAAoa,EAAA0jB,cAAA99B,EAAA89B,eAAA,EACA1jB,EAAA0jB,cAAA99B,EAAA89B,cAAA,EACA,IAEA,IAAA2jD,EAAA,IAAA1/E,EAAA,SAEA,IAAAhB,EAAA+/D,EAAA6R,MAA8B5xE,GAAA+/D,EAAA7tB,KAAgBlyC,IAAA,CAC9C,IAAAuc,EAAAxX,EAAA2xC,QAAA12C,GACA0gF,EAAAl9D,MAAAqsB,IAAA7vC,EACA0gF,EAAA3wC,IAAAF,IAAA7vC,EACA0gF,EAAA3wC,IAAAD,OAAAvzB,EAAApc,OACA4E,EAAAsO,QAAAqtE,EAAAp0E,EAAAtM,EAAA+/D,EAAA6R,UAIA9yE,KAAA0rE,mBAAA,WACA,IAAAn/D,EAAAvM,KAAAiG,QAAAgtE,SAAAjzE,KAAAg7D,oBAAAjqB,KACAkwB,EAAAjhE,KAAAo1F,mBACAp1F,KAAAiG,QAAAyK,UAAAg7D,mBAAAn/D,EAAAvM,KAAAiG,QAAAg7D,EAAA6R,MAAA7R,EAAA7tB,OAGApzC,KAAA8sE,mBAAA,WACA,IAAAz/D,EAAArN,KAAAg7D,oBACAzuD,EAAAvM,KAAAiG,QAAAgtE,SAAA5lE,EAAA0jC,KACAnnC,EAAA5J,KAAAu6C,oBACAv6C,KAAAiG,QAAAyK,UAAAo8D,mBAAAvgE,EAAAvM,KAAAiG,QAAA2D,EAAAyD,IAGArN,KAAAq1F,YAAA,SAAAtkD,EAAAC,GACA,IAAAskD,EAAA,4BACAA,EAAAp9D,UAAA,EAGA,IAFA,IAAAj3B,EAAAjB,KAAAiG,QAAA2xC,QAAA7G,GAEAukD,EAAAp9D,UAAA8Y,GAAA,CACA,IAAAx+B,EAAA8iF,EAAAvuF,KAAA9F,GAEA,GAAAuR,EAAA5K,OAAAopC,GAAAx+B,EAAA5K,MAAA4K,EAAA,GAAAnR,QAAA2vC,EAMA,MALA,CACAtvC,MAAA8Q,EAAA,GACAkS,MAAAlS,EAAA5K,MACAqpC,IAAAz+B,EAAA5K,MAAA4K,EAAA,GAAAnR,QAMA,aAGArB,KAAA2rF,aAAA,SAAA4J,GACA,IAAAxkD,EAAA/wC,KAAA6F,UAAAg3D,YAAA9rB,IACAC,EAAAhxC,KAAA6F,UAAAg3D,YAAA7rB,OACAwkD,EAAA,IAAAtzF,EAAA6uC,EAAAC,EAAA,EAAAD,EAAAC,GACAslB,EAAAt2D,KAAAiG,QAAAsgD,aAAAivC,GAEA,IAAA9xE,MAAA4a,WAAAg4B,KAAAm/B,SAAAn/B,GAAA,CACA,IAAAo/B,EAAA11F,KAAAq1F,YAAAtkD,EAAAC,GAEA,GAAA0kD,EAAA,CACA,IAAAC,EAAAD,EAAAh0F,MAAAmG,QAAA,QAAA6tF,EAAAhxE,MAAAgxE,EAAAh0F,MAAAmG,QAAA,OAAA6tF,EAAAzkD,IACA2kD,EAAAF,EAAAhxE,MAAAgxE,EAAAh0F,MAAAL,OAAAs0F,EACA30F,EAAAs9B,WAAAo3D,EAAAh0F,OACAV,GAAAua,KAAA0vB,IAAA,GAAA2qD,GAEAD,IAAAD,EAAAzkD,KAAAD,EAAA2kD,EACAJ,GAAAh6E,KAAA0vB,IAAA,GAAAyqD,EAAAzkD,IAAAD,EAAA,GAEAukD,GAAAh6E,KAAA0vB,IAAA,GAAAyqD,EAAAzkD,IAAAD,GAGAhwC,GAAAu0F,EAEA,IAAAM,GADA70F,GAAAua,KAAA0vB,IAAA,GAAA2qD,IACAE,QAAAF,GACAG,EAAA,IAAA7zF,EAAA6uC,EAAA2kD,EAAAhxE,MAAAqsB,EAAA2kD,EAAAzkD,KACAjxC,KAAAiG,QAAAsO,QAAAwhF,EAAAF,GACA71F,KAAA29D,aAAA5sB,EAAAx1B,KAAA3J,IAAA8jF,EAAAhxE,MAAA,EAAAssB,EAAA6kD,EAAAx0F,OAAAq0F,EAAAh0F,MAAAL,eAGArB,KAAAg2F,cAIAh2F,KAAAi2F,iBAAA,8XAEAj2F,KAAAg2F,WAAA,WACA,IAAAjlD,EAAA/wC,KAAA6F,UAAAg3D,YAAA9rB,IACAC,EAAAhxC,KAAA6F,UAAAg3D,YAAA7rB,OACAhxC,KAAA6F,UAAAqkD,aACA,IAAA8Z,EAAAhkE,KAAAyyF,kBACAyD,EAAAl2F,KAAA6F,UAAAy5C,eAAA56B,MAAAssB,OACAmlD,EAAAnyB,EAAAzvD,QAAA,sCAAA7M,MAAA,MACAoU,EAAAk1B,EAAAklD,EAAA,EACAp6E,EAAA,IAAAA,EAAA,GACA,IAAAs6E,EAAA,EACAC,EAAA,EACAv9D,EAAA94B,KAEAgkE,EAAA7sD,MAAA,kBACAg/E,EAAA1zF,QAAA,SAAAmI,EAAA1J,GACAm1F,EAAAD,EAAAxrF,EAAAvJ,OAEAya,GAAAs6E,GAAAt6E,GAAAu6E,IACAryB,EAAAp5D,EACAkuB,EAAAjzB,UAAAy/C,iBACAxsB,EAAA6kC,aAAA5sB,EAAAqlD,EAAAF,GACAp9D,EAAAjzB,UAAAs8C,SAAApR,EAAAslD,EAAAH,IAGAE,EAAAC,IAOA,IAHA,IACAC,EADAC,EAAAv2F,KAAAi2F,iBAGA/0F,EAAA,EAAqBA,EAAAq1F,EAAAl1F,OAAsBH,IAG3C,IAFA,IAAA0J,EAAA2rF,EAAAr1F,GAEAia,EAAA,EAAuBA,GAAA,EAAQA,IAAA,CAC/B,IAAAq7E,IAAAr7E,EACAs7E,EAAAzyB,EAAA7sD,MAAA,IAAA7C,OAAA,WAAA8gC,EAAAlB,aAAAtpC,EAAAuQ,IAAA,eAEA,GAAAs7E,EACAzyB,EAAA7sD,MAAA,IAAA7C,OAAA,eAAA8gC,EAAAlB,aAAAuiD,EAAA,uBAGAH,EAAAtyB,EAAAzvD,QAAA,IAAAD,OAAA8gC,EAAAlB,aAAAtpC,EAAAuQ,IAAA,cAAA/E,GACA,IAAAsgF,EAAA9rF,EAAA4rF,GAQA,OANApgF,EAAA8W,eAAA9W,EACAsgF,IAAAxpE,cACiB9W,EAAAoG,OAAA,GAAA0Q,eAAA9W,EAAAoG,OAAA,KACjBk6E,IAAAt8B,OAAA,KAAAxvD,EAAA4rF,GAAAh6E,OAAA,GAAA0Q,cAAAwpE,EAAAt8B,OAAA,IAGAs8B,IAEA12F,KAAAm6B,OAAAm8D,GACAA,EAAA,MAOAt2F,KAAA8wE,YAAA,WACA,IAAA7P,EAAAjhE,KAAAo1F,mBACAp1F,KAAAiG,QAAA8qE,gBAAA9P,EAAA6R,MAAA7R,EAAA7tB,MACApzC,KAAAslD,kBAGAtlD,KAAAyrF,mBAAA,WACA,IAAAqC,EAAA9tF,KAAA6F,UACAq6B,EAAAlgC,KAAAiG,QACA2D,EAAAkkF,EAAAp2C,WACApE,EAAAw6C,EAAA7wB,cAEA,GAAArzD,EAAA6oC,UAAA,CACA,IAAA1B,EAAAnnC,EAAA8a,MAAAqsB,IACA7Q,EAAA+hD,eAAAlxC,SACO,CACP,IAAAo+B,EAAA77B,EAAA1pC,EAAA8a,MAAA9a,EAAAqnC,IACA0lD,EAAAz2D,EAAA/F,OAAAg1C,EAAAjvC,EAAAqmB,aAAA38C,IAAA,GACAA,EAAA8a,MAAAyqD,EACAvlE,EAAAqnC,IAAA0lD,EACA7I,EAAAt2C,kBAAA5tC,EAAA0pC,KAIAtzC,KAAAgiF,cAAA,WACAhiF,KAAA6hF,WAAA,OAGA7hF,KAAA+hF,YAAA,WACA/hF,KAAA6hF,YAAA,OAGA7hF,KAAAknD,SAAA,SAAAt9C,EAAAu3E,EAAAvtC,GACA,OAAA5zC,KAAAiG,QAAAihD,SAAAt9C,EAAAu3E,EAAAvtC,IAGA5zC,KAAA4rF,YAAA,WACA5rF,KAAA6hF,YAAA,OAGA7hF,KAAA6rF,cAAA,WACA7rF,KAAA6hF,WAAA,OAGA7hF,KAAA6hF,WAAA,SAAAjuB,EAAAhgB,GACA,IAAAqtB,EAAA21B,EACA/wF,EAAA7F,KAAA6F,UAEA,IAAAA,EAAA63C,mBAAA19C,KAAA4yF,uBAAA,CACA,IAAAhpF,EAAA/D,EAAAu/C,kBACA6b,EAAAjhE,KAAAo1F,iBAAAxrF,GACAgtF,EAAA52F,KAAAiG,QAAA47E,WAAA5gB,EAAA6R,MAAA7R,EAAA7tB,KAAAQ,EAAA,EAAAggB,GACAhgB,IAAA,GAAAggB,IAAAgjC,EAAA,GACAhtF,EAAAopC,OAAA4jD,EAAA,GACA/wF,EAAAggD,kBAAAj8C,OACO,CACP,IAAAmjB,EAAAlnB,EAAA+7D,UAAA70C,OACAlnB,EAAA+7D,UAAAtO,OAAAtzD,KAAAiG,SACAjG,KAAA4yF,wBAAA,EAKA,IAJA,IAAApmF,EAAA,EACAqqF,EAAA,EACAz/D,EAAArK,EAAA1rB,OAEAH,EAAA,EAAuBA,EAAAk2B,EAAOl2B,IAAA,CAC9B,IAAA41F,EAAA51F,EACA6rB,EAAA7rB,GAAA8xC,OAAAxmC,EAAA,GAKA,IAHA,IAAAsmE,GADA7R,EAAAjhE,KAAAo1F,iBAAAroE,EAAA7rB,KACA4xE,MACA1/B,EAAA6tB,EAAA7tB,OAEAlyC,EAAAk2B,GAAA,CACAy/D,GAAA9pE,EAAA7rB,GAAA8xC,OAAA6jD,EAAA,GACA,IAAAE,EAAA/2F,KAAAo1F,iBAAAroE,EAAA7rB,IACA,GAAA0yC,GAAAmjD,EAAAjkB,OAAA1/B,EAAA,MAAqD,IAAAQ,GAAAmjD,EAAAjkB,MAAA1/B,EAAA,QACrDA,EAAA2jD,EAAA3jD,KAOA,IAJAlyC,IACAsL,EAAAxM,KAAAiG,QAAA47E,WAAA/O,EAAA1/B,EAAAQ,EAAA,EAAAggB,GACAhgB,IAAA,GAAAggB,IAAAkjC,EAAA51F,EAAA,GAEA41F,GAAA51F,GACA6rB,EAAA+pE,GAAA9jD,OAAAxmC,EAAA,GACAsqF,IAGAljD,IAAApnC,EAAA,GACAqqF,GAAArqF,EAGA3G,EAAAggD,kBAAAhgD,EAAAknB,OAAA,IACAlnB,EAAA+7D,UAAAvO,OAAArzD,KAAAiG,SACAjG,KAAA4yF,wBAAA,IAIA5yF,KAAAo1F,iBAAA,SAAAxrF,GAEA,OADAA,MAAA5J,KAAAu6C,qBAAA5H,eACA,CACAmgC,MAAA9yE,KAAAiG,QAAAiyE,gBAAAtuE,EAAA8a,MAAAqsB,KACAqC,KAAApzC,KAAAiG,QAAAgyE,cAAAruE,EAAAqnC,IAAAF,OAIA/wC,KAAAs6C,mBAAA,SAAA08C,GACAh3F,KAAA0E,SAAAuyF,gBAAAD,IAGAh3F,KAAA24C,oBAAA,SAAA5vC,GACA/I,KAAA0E,SAAAwyF,mBAAAnuF,IAGA/I,KAAAq3C,iBAAA,WACAr3C,KAAA0E,SAAAyyF,mBAGAn3F,KAAAo3F,mBAAA,WACA,OAAAp3F,KAAA0E,SAAA0yF,sBAGAp3F,KAAAq3F,kBAAA,WACA,OAAAr3F,KAAA0E,SAAA2yF,qBAGAr3F,KAAAs3F,aAAA,SAAAvmD,GACA,OAAAA,GAAA/wC,KAAAo3F,sBAAArmD,GAAA/wC,KAAAq3F,qBAGAr3F,KAAAu3F,kBAAA,SAAAxmD,GACA,OAAAA,GAAA/wC,KAAA0E,SAAA8yF,2BAAAzmD,GAAA/wC,KAAA0E,SAAA+yF,0BAGAz3F,KAAA03F,oBAAA,WACA,OAAA13F,KAAA0E,SAAAizF,qBAAA33F,KAAA0E,SAAAkzF,kBAAA,GAGA53F,KAAA63F,YAAA,SAAAjkC,EAAAta,GACA,IAAA50C,EAAA1E,KAAA0E,SACAyrD,EAAAnwD,KAAA0E,SAAAggD,YACAuc,EAAArN,EAAAr4C,KAAA0C,MAAAkyC,EAAA5nD,OAAA4nD,EAAA1L,aAEA,IAAAnL,EACAt5C,KAAA6F,UAAA43D,eAAA,WACAz9D,KAAAy/D,aAAAwB,EAAA,MAEO,IAAA3nB,IACPt5C,KAAA6F,UAAA45D,aAAAwB,EAAA,GACAjhE,KAAA6F,UAAAy/C,kBAGA,IAAAe,EAAA3hD,EAAA2hD,UACA3hD,EAAAy7C,SAAA,EAAA8gB,EAAA9Q,EAAA1L,YACA,MAAAnL,GAAA50C,EAAA05C,qBAAA,SACA15C,EAAAmpF,iBAAAxnC,IAGArmD,KAAAgrF,eAAA,WACAhrF,KAAA63F,YAAA,OAGA73F,KAAAmrF,aAAA,WACAnrF,KAAA63F,aAAA,OAGA73F,KAAAkrF,aAAA,WACAlrF,KAAA63F,YAAA,OAGA73F,KAAAqrF,WAAA,WACArrF,KAAA63F,aAAA,OAGA73F,KAAAirF,eAAA,WACAjrF,KAAA63F,YAAA,IAGA73F,KAAAorF,aAAA,WACAprF,KAAA63F,aAAA,IAGA73F,KAAA83F,YAAA,SAAA/mD,GACA/wC,KAAA0E,SAAAozF,YAAA/mD,IAGA/wC,KAAA+3F,aAAA,SAAAt6E,EAAAu6E,EAAAC,EAAA5nF,GACArQ,KAAA0E,SAAAqzF,aAAAt6E,EAAAu6E,EAAAC,EAAA5nF,IAGArQ,KAAA8pF,gBAAA,WACA,IAAAlgF,EAAA5J,KAAAu6C,oBACAryC,EAAA,CACA6oC,IAAAx1B,KAAA0C,MAAArU,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,IAAAnnC,EAAA8a,MAAAqsB,KAAA,GACAC,OAAAz1B,KAAA0C,MAAArU,EAAA8a,MAAAssB,QAAApnC,EAAAqnC,IAAAD,OAAApnC,EAAA8a,MAAAssB,QAAA,IAEAhxC,KAAA0E,SAAAwzF,YAAAhwF,EAAA,KAGAlI,KAAAg7D,kBAAA,WACA,OAAAh7D,KAAA6F,UAAAg3D,aAGA78D,KAAAm4F,wBAAA,WACA,OAAAn4F,KAAAiG,QAAA6sC,yBAAA9yC,KAAAg7D,sBAGAh7D,KAAAu6C,kBAAA,WACA,OAAAv6C,KAAA6F,UAAA6xC,YAGA13C,KAAAy5C,UAAA,WACAz5C,KAAA6F,UAAA4zC,aAGAz5C,KAAAslD,eAAA,WACAtlD,KAAA6F,UAAAy/C,kBAGAtlD,KAAA29D,aAAA,SAAA5sB,EAAAC,GACAhxC,KAAA6F,UAAA83D,aAAA5sB,EAAAC,IAGAhxC,KAAAukD,qBAAA,SAAAr8C,GACAlI,KAAA6F,UAAA0+C,qBAAAr8C,IAGAlI,KAAAsrF,eAAA,SAAAhyC,EAAA8+C,GACA,IAAA/qF,EAAArN,KAAAg7D,oBACA4P,EAAA,IAAApE,EAAAxmE,KAAAiG,QAAAoH,EAAA0jC,IAAA1jC,EAAA2jC,QACA8/C,EAAAlmB,EAAAxD,kBACAtE,EAAAguB,GAAAlmB,EAAA1D,cACA,GAAApE,EAAA,CACA,IAAAu1B,EAIAC,EAHA/5E,GAAA,EACAo6D,EAAA,GACAz3E,EAAAmM,EAAA2jC,OAAA8xB,EAAAp+C,MAEA6zE,EAAA,CACAje,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAU,IACVC,IAAU,KAGV,GACA,GAAA7X,EAAAphE,MAAAyV,MAAA,gBACA,KAAgBjW,EAAA4hE,EAAAphE,MAAAL,SAAAkd,EAAkCrd,IAClD,GAAAq3F,EAAAz1B,EAAAphE,MAAAR,IAUA,OANAo3F,EAAAC,EAAAz1B,EAAAphE,MAAAR,IAAA,IAAA4hE,EAAAp5D,KAAA6K,QAAA,mBAEAmP,MAAAi1D,EAAA2f,MACA3f,EAAA2f,GAAA,GAGAx1B,EAAAphE,MAAAR,IACA,QACA,QACA,QACAy3E,EAAA2f,KACA,MAEA,QACA,QACA,QACA3f,EAAA2f,MAEA,IAAA3f,EAAA2f,KACAD,EAAA,UACA95E,GAAA,SAMS,IAAAukD,EAAAp5D,KAAA7B,QAAA,cACT6b,MAAAi1D,EAAA7V,EAAAphE,UACAi3E,EAAA7V,EAAAphE,OAAA,GAGA,MAAAovF,EAAApvF,MACAi3E,EAAA7V,EAAAphE,SACW,OAAAovF,EAAApvF,OACXi3E,EAAA7V,EAAAphE,UAGA,IAAAi3E,EAAA7V,EAAAphE,SACA22F,EAAA,MACA95E,GAAA,IAIAA,IACAuyE,EAAAhuB,EACAA,EAAA8H,EAAA1D,cACAhmE,EAAA,SAEO4hE,IAAAvkD,GAEP,GAAA85E,EAAA,CACA,IAAAzuF,EAAA1B,EAEA,eAAAmwF,GACAzuF,EAAA5J,KAAAiG,QAAAo5C,gBAAAhyC,MAIAnF,GADA0B,EAAA,IAAA1H,EAAA0oE,EAAAvD,qBAAAuD,EAAAtD,wBAAApmE,EAAA,EAAA0pE,EAAAvD,qBAAAuD,EAAAtD,wBAAApmE,EAAA,IACAwjB,OACA0zE,GAAAlwF,EAAA6oC,MAAA1jC,EAAA0jC,KAAAx1B,KAAA0I,IAAA/b,EAAA8oC,OAAA3jC,EAAA2jC,QAAA,KAAApnC,EAAA5J,KAAAiG,QAAAo5C,gBAAAn3C,UAEO,WAAAmwF,EAAA,CACP,IAAAv1B,IAAA,IAAAA,EAAAp5D,KAAA7B,QAAA,YAAkF,OAAlF,IAAAqO,EAAA4sD,EAAAphE,MAGA,QAFAkI,EAAA,IAAA1H,EAAA0oE,EAAAvD,qBAAAuD,EAAAtD,wBAAA,EAAAsD,EAAAvD,qBAAAuD,EAAAtD,wBAAA,IAEAn2B,QAAA9jC,EAAA0jC,IAAA1jC,EAAA2jC,QAAA,CACAzyB,GAAA,EAEA,GACAukD,EAAAguB,GACAA,EAAAlmB,EAAA3D,mBAGA,IAAA6pB,EAAApnF,KAAA7B,QAAA,cACA+B,EAAAgoC,OAAAg5B,EAAAvD,qBAAAuD,EAAAtD,wBAAA,GAGAxE,EAAAphE,QAAAwU,IAAA,IAAA4sD,EAAAp5D,KAAA7B,QAAA,cACA,MAAAipF,EAAApvF,MACAi3E,EAAAziE,KACiB,OAAA46E,EAAApvF,OACjBi3E,EAAAziE,KAGA,IAAAyiE,EAAAziE,KAAAqI,GAAA,WAGWuyE,IAAAvyE,GAGXukD,KAAAp5D,KAAA7B,QAAA,cACAK,EAAA0B,EAAA8a,OACAqsB,KAAA1jC,EAAA0jC,KAAAx1B,KAAA0I,IAAA/b,EAAA8oC,OAAA3jC,EAAA2jC,QAAA,IAAA9oC,EAAA0B,EAAAqnC,MAIA/oC,EAAA0B,KAAAyD,QAAAnF,KAGAoxC,EACA1vC,GAAAwuF,EACAp4F,KAAA6F,UAAA0kD,SAAA3gD,GACWA,KAAA9H,QAAA9B,KAAAu6C,qBACXv6C,KAAAslD,iBAEAtlD,KAAA6F,UAAAs8C,SAAAj6C,EAAA6oC,IAAA7oC,EAAA8oC,QAGAhxC,KAAA6F,UAAA+3D,OAAA11D,EAAA6oC,IAAA7oC,EAAA8oC,YAKAhxC,KAAA+pF,SAAA,SAAAyO,EAAAxnD,EAAAinD,GACAj4F,KAAA6F,UAAAy/C,iBACAtlD,KAAAiG,QAAA4xE,OAAA,CACA9mC,IAAAynD,EAAA,EACAxnD,UAAA,IAEAhxC,KAAA4sF,qBAAA5sF,KAAA4sF,sBACA5sF,KAAA29D,aAAA66B,EAAA,EAAAxnD,GAAA,GACAhxC,KAAAu3F,kBAAAiB,EAAA,IAAAx4F,KAAA+3F,aAAAS,EAAA,KAAAP,IAGAj4F,KAAAy4F,WAAA,SAAA1nD,EAAAC,GACAhxC,KAAA6F,UAAA+3D,OAAA7sB,EAAAC,IAGAhxC,KAAAuqF,WAAA,SAAAC,GACA,GAAAxqF,KAAA6F,UAAAmsC,gBAAAhyC,KAAA6F,UAAAo3D,cAAA,CACA,IAAAtlB,EAAA33C,KAAA6F,UAAAq3C,OAAA4f,cACA,OAAA98D,KAAAukD,qBAAA5M,GAGA33C,KAAA6F,UAAAy/C,iBACAtlD,KAAA6F,UAAA45D,cAAA+qB,IAAA,MAGAxqF,KAAAyqF,aAAA,SAAAD,GACA,GAAAxqF,KAAA6F,UAAAmsC,eAAAhyC,KAAA6F,UAAAo3D,cAAA,CACA,IAAA1lB,EAAAv3C,KAAA6F,UAAAq3C,OAAA4f,cACA,OAAA98D,KAAAukD,qBAAAhN,GAGAv3C,KAAA6F,UAAAy/C,iBACAtlD,KAAA6F,UAAA45D,aAAA+qB,GAAA,MAGAxqF,KAAA4qF,aAAA,SAAAJ,GACA,GAAAxqF,KAAA6F,UAAA4sC,UAMA,IAFA+3C,KAAA,EAEAA,KACAxqF,KAAA6F,UAAAu4D,qBAPA,CACA,IAAAzmB,EAAA33C,KAAAu6C,oBAAA71B,MACA1kB,KAAAukD,qBAAA5M,GASA33C,KAAAslD,kBAGAtlD,KAAA+qF,cAAA,SAAAP,GACA,GAAAxqF,KAAA6F,UAAA4sC,UAMA,IAFA+3C,KAAA,EAEAA,KACAxqF,KAAA6F,UAAAq4D,sBAPA,CACA,IAAA3mB,EAAAv3C,KAAAu6C,oBAAAtJ,IACAjxC,KAAAukD,qBAAAhN,GASAv3C,KAAAslD,kBAGAtlD,KAAA2qF,kBAAA,WACA3qF,KAAA6F,UAAAy4D,sBACAt+D,KAAAslD,kBAGAtlD,KAAA8qF,gBAAA,WACA9qF,KAAA6F,UAAA24D,oBACAx+D,KAAAslD,kBAGAtlD,KAAAkF,gBAAA,WACAlF,KAAA6F,UAAA64D,oBACA1+D,KAAAslD,kBAGAtlD,KAAAsqF,kBAAA,WACAtqF,KAAA6F,UAAA+4D,sBACA5+D,KAAAslD,kBAGAtlD,KAAA6qF,kBAAA,WACA7qF,KAAA6F,UAAAi5D,sBACA9+D,KAAAslD,kBAGAtlD,KAAA0qF,iBAAA,WACA1qF,KAAA6F,UAAAm5D,qBACAh/D,KAAAslD,kBAGAtlD,KAAAuU,QAAA,SAAAwyE,EAAAj9D,GACAA,GAAA9pB,KAAAktF,QAAA/3E,IAAA2U,GACA,IAAAlgB,EAAA5J,KAAAktF,QAAA/G,KAAAnmF,KAAAiG,SACAyyF,EAAA,EACA,OAAA9uF,GAEA5J,KAAA24F,YAAA/uF,EAAAm9E,KACA2R,EAAA,GAGA14F,KAAA6F,UAAA2xC,kBAAA5tC,GACA5J,KAAA0E,SAAAkpF,wBAAAhkF,EAAA8a,MAAA9a,EAAAqnC,KACAynD,GARAA,GAWA14F,KAAA44F,WAAA,SAAA7R,EAAAj9D,GACAA,GACA9pB,KAAAktF,QAAA/3E,IAAA2U,GAGA,IAAAiD,EAAA/sB,KAAAktF,QAAAxG,QAAA1mF,KAAAiG,SACAyyF,EAAA,EACA,IAAA3rE,EAAA1rB,OAAA,OAAAq3F,EACA,IAAA7yF,EAAA7F,KAAAu6C,oBACAv6C,KAAA6F,UAAA+3D,OAAA,KAEA,QAAA18D,EAAA6rB,EAAA1rB,OAAA,EAAqCH,GAAA,IAAQA,EAC7ClB,KAAA24F,YAAA5rE,EAAA7rB,GAAA6lF,IACA2R,IAKA,OADA14F,KAAA6F,UAAA2xC,kBAAA3xC,GACA6yF,GAGA14F,KAAA24F,YAAA,SAAA/uF,EAAAm9E,GACA,IAAAzZ,EAAAttE,KAAAiG,QAAAsgD,aAAA38C,GAGA,eAFAm9E,EAAA/mF,KAAAktF,QAAA34E,QAAA+4D,EAAAyZ,KAGAn9E,EAAAqnC,IAAAjxC,KAAAiG,QAAAsO,QAAA3K,EAAAm9E,GACAn9E,GAEA,MAIA5J,KAAA64F,qBAAA,WACA,OAAA74F,KAAAktF,QAAAngC,cAGA/sD,KAAAmmF,KAAA,SAAAQ,EAAA78D,EAAAmuE,GACAnuE,MAAA,IACA,iBAAA68D,gBAAAryE,OAAAwV,EAAA68D,SAAyF,iBAAAA,GAAAp4E,EAAAk1B,MAAA3Z,EAAA68D,GACzF,IAAA/8E,EAAA5J,KAAA6F,UAAA6xC,WAEA,MAAA5tB,EAAA68D,UACAA,EAAA3mF,KAAAiG,QAAAsgD,aAAA38C,IAAA5J,KAAAktF,QAAA5mF,SAAAqgF,UAGA/8E,EAAA5J,KAAAiG,QAAAq5C,aAAA11C,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,QACA21C,EAAA3mF,KAAAiG,QAAAsgD,aAAA38C,IAGA5J,KAAAktF,QAAA/3E,IAAA,CACAwxE,YAIA3mF,KAAAktF,QAAA/3E,IAAA2U,GACAA,EAAApF,OAAA1kB,KAAAktF,QAAA/3E,IAAA,CACAuP,MAAA9a,IAEA,IAAAkvF,EAAA94F,KAAAktF,QAAA/G,KAAAnmF,KAAAiG,SACA,OAAA6jB,EAAAgtB,cAAAgiD,EAEAA,GACA94F,KAAA+4F,YAAAD,EAAAb,GACAa,IAGAhvE,EAAAy9D,UAAA39E,EAAA8a,MAAA9a,EAAAqnC,IAAqDrnC,EAAAqnC,IAAArnC,EAAA8a,WACrD1kB,KAAA6F,UAAA0kD,SAAA3gD,KAGA5J,KAAAmqF,SAAA,SAAArgE,EAAAmuE,GACAj4F,KAAAmmF,KAAA,CACAM,aAAA,EACAc,WAAA,GACOz9D,EAAAmuE,IAGPj4F,KAAAoqF,aAAA,SAAAtgE,EAAAmuE,GACAj4F,KAAAmmF,KAAAr8D,EAAA,CACA28D,aAAA,EACAc,WAAA,GACO0Q,IAGPj4F,KAAA+4F,YAAA,SAAAnvF,EAAAquF,GACAj4F,KAAAiG,QAAA4xE,OAAAjuE,GACA5J,KAAA6F,UAAA2xC,kBAAA5tC,GACA,IAAAy8C,EAAArmD,KAAA0E,SAAA2hD,UACArmD,KAAA0E,SAAAkpF,wBAAAhkF,EAAA8a,MAAA9a,EAAAqnC,IAAA,KACA,IAAAgnD,GAAAj4F,KAAA0E,SAAAmpF,iBAAAxnC,IAGArmD,KAAA88E,KAAA,WACA98E,KAAAiG,QAAA2K,iBAAAksE,KAAA98E,KAAAiG,SACAjG,KAAA0E,SAAA05C,qBAAA,UAGAp+C,KAAA+8E,KAAA,WACA/8E,KAAAiG,QAAA2K,iBAAAmsE,KAAA/8E,KAAAiG,SACAjG,KAAA0E,SAAA05C,qBAAA,UAGAp+C,KAAA4I,QAAA,WACA5I,KAAA0E,SAAAkE,UAEA5I,KAAAgiD,QAAA,UAAAhiD,MAEAA,KAAAiG,SACAjG,KAAAiG,QAAA2C,WAIA5I,KAAAg5F,4BAAA,SAAAhY,GACA,GAAAA,EAAA,CACA,IAAA7lC,EACA3nC,EAAAxT,KACAi5F,GAAA,EACAj5F,KAAAk5F,gBAAAl5F,KAAAk5F,cAAA/uF,SAAAC,cAAA,QACA,IAAA+uF,EAAAn5F,KAAAk5F,cACAC,EAAA7uF,MAAAsF,QAAA,oBACA5P,KAAA8O,UAAA2yB,aAAA03D,EAAAn5F,KAAA8O,UAAA4yB,YACA,IAAA03D,EAAAp5F,KAAAsF,GAAA,6BACA2zF,GAAA,IAEAI,EAAAr5F,KAAA0E,SAAAY,GAAA,0BACA2zF,IAAA99C,EAAA3nC,EAAA9O,SAAAoK,UAAAkoC,2BAEAsiD,EAAAt5F,KAAA0E,SAAAY,GAAA,yBACA,GAAA2zF,GAAA99C,IAAA3nC,EAAAkjC,aAAAljC,EAAA+lF,WAAA/lF,EAAA+lF,UAAA7iD,aAAA,CACA,IAAAhyC,EAAA8O,EAAA9O,SACAwD,EAAAxD,EAAA6gD,aAAAi0C,UACArpC,EAAAzrD,EAAAggD,YACApyC,EAAApK,EAAAoK,IAAA69C,EAAA76B,OAUA,OAPA2jE,EADA/wF,EAAAoK,KAAA,GAAAA,EAAA6oC,EAAA7oC,IAAA,KAEWpK,EAAAoK,IAAA69C,EAAA5nD,QAAAL,EAAAoK,IAAA6oC,EAAA7oC,IAAA69C,EAAA1L,WAAAp4B,OAAAk1B,cAGX,QAIA43C,EAAA7uF,MAAAgI,MAAA,KACA6mF,EAAA7uF,MAAA6C,KAAAjF,EAAAiF,KAAA,KACAgsF,EAAA7uF,MAAA/B,OAAA4nD,EAAA1L,WAAA,KACA00C,EAAAvP,eAAAqP,IAGAA,EAAA99C,EAAA,QAIAn7C,KAAAg5F,4BAAA,SAAAhY,GACAA,WACAhhF,KAAAg5F,4BACAh5F,KAAA+5C,IAAA,kBAAAq/C,GACAp5F,KAAA0E,SAAAq1C,IAAA,cAAAu/C,GACAt5F,KAAA0E,SAAAq1C,IAAA,eAAAs/C,OAIAr5F,KAAA8lD,kBAAA,WACA,IAAAx7C,EAAAtK,KAAAy5F,cAAA,MACAC,EAAA15F,KAAA0E,SAAA6gD,aACAm0C,IACAA,EAAAC,kBAAA,SAAA/jF,KAAAtL,IACAovF,EAAAE,YAAA55F,KAAA05C,WAAA,QAAApvC,EACA6qC,EAAAjU,YAAAw4D,EAAAl5D,QAAA,0BAAA5qB,KAAAtL,MAGAtK,KAAAysB,OAAA,SAAA7B,EAAAd,EAAAzZ,GACA,IAAAlM,EAAAnE,KACAmwD,EAAAhB,WAAA,wBAAA9gD,GACAA,EAAAoe,OAAAtoB,EAAAymB,EAAAd,EAAAzZ,OAGG/O,KAAAmN,EAAA7N,WACHuvD,EAAAzC,cAAAj/C,EAAA7N,UAAA,UACAi5F,eAAA,CACA1kF,IAAA,SAAA7K,GACAtK,KAAA8F,oBAEA9F,KAAAgiD,QAAA,wBACAtrC,KAAApM,KAGAqjD,aAAA,QAEAjiD,oBAAA,CACAyJ,IAAA,WACAnV,KAAAwxF,8BAEA7jC,cAAA,GAEAmsC,sBAAA,CACA3kF,IAAA,SAAAu+E,GACA1zF,KAAAqvF,sBAEA1hC,cAAA,GAEAliD,SAAA,CACA0J,IAAA,SAAA1J,GACAzL,KAAAy7C,UAAAb,YAAAnvC,GACAzL,KAAA8lD,qBAEA6H,cAAA,GAEAosC,uBAAA,CACA5kF,IAAA,SAAAzT,GACA1B,KAAAy7C,UAAAZ,0BAAAn5C,IAEAisD,cAAA,GAEA/F,YAAA,CACAzyC,IAAA,SAAA4qB,GACA//B,KAAA8lD,qBAEA30B,OAAA,+BACAw8B,aAAA,OAEA4uB,gBAAA,CACAprD,OAAA,iBACAw8B,cAAA,GAEAqsC,kBAAA,CACArsC,cAAA,GAEAssC,sBAAA,CACAtsC,cAAA,GAEAusC,yBAAA,CACA/kF,IAAA,SAAA4qB,GACA//B,KAAAg5F,4BAAAj5D,KAGAl8B,gBAAA,CACAsR,IAAA,SAAA4qB,GACA//B,KAAAkH,mBAAA64B,IAEAjpB,IAAA,WACA,OAAA9W,KAAAsuF,eAEAjhC,YAAA,GAEA3rD,MAAA,CACAyT,IAAA,SAAA4qB,GACA//B,KAAAiG,QAAAjB,SAAA+6B,IAEAjpB,IAAA,WACA,OAAA9W,KAAAgI,YAEAqlD,YAAA,EACAJ,QAAA,GAEAhnD,QAAA,CACAkP,IAAA,SAAA4qB,GACA//B,KAAA+R,WAAAguB,IAEAjpB,IAAA,WACA,OAAA9W,KAAAiG,SAEAonD,YAAA,EACAJ,QAAA,GAEAktC,gBAAA,CACAhlF,IAAA,SAAA2rC,GACA9gD,KAAA0E,SAAAm9C,aAAAu4C,mBAAAt5C,GACA9gD,KAAA0E,SAAA21F,MAAA1lD,SAAA30C,KAAA0E,SAAA41F,eACAx5C,GAAA9gD,KAAAu6F,qBAAAC,EAAAnnC,OAAArzD,MAAmFw6F,EAAAlnC,OAAAtzD,OAEnF2tD,cAAA,GAEA8sC,oBAAA,CACAtlF,IAAA,SAAAzT,GACA1B,KAAA06F,kBAAAh5F,EAAA84F,EAAAnnC,OAAArzD,MAAgFw6F,EAAAlnC,OAAAtzD,QAGhFkE,YAAA,CACAiR,IAAA,SAAAyV,GACA5qB,KAAA26F,qBACA36F,KAAA26F,mBAAA,WACA,IAAAj5F,EAAA1B,KAAA0E,SAAAk2F,cAAA56F,KAAAgI,WAEA,GAAAtG,GAAA1B,KAAA0E,SAAAsF,gBACAhK,KAAA0E,SAAAq1C,IAAA,cAAA/5C,KAAA26F,oBACAxlD,EAAApU,eAAA/gC,KAAA8O,UAAA,sBACA9O,KAAA0E,SAAAsF,gBAAAowB,SACAp6B,KAAA0E,SAAAsF,gBAAA,UACa,IAAAtI,IAAA1B,KAAA0E,SAAAsF,gBAAA,CACbhK,KAAA0E,SAAAY,GAAA,cAAAtF,KAAA26F,oBACAxlD,EAAArU,YAAA9gC,KAAA8O,UAAA,sBACA,IAAAa,EAAAwlC,EAAA/qC,cAAA,OACAuF,EAAA5M,UAAA,kBACA4M,EAAAtF,YAAArK,KAAA66F,cAAA,GACA76F,KAAA0E,SAAAsF,gBAAA2F,EACA3P,KAAA0E,SAAAo2F,QAAApwF,YAAA1K,KAAA0E,SAAAsF,mBAEWrH,KAAA3C,MAEXA,KAAAsF,GAAA,QAAAtF,KAAA26F,qBAGA36F,KAAA26F,uBAGAI,wBAAA,WACAC,wBAAA,WACAC,oBAAA,WACAC,eAAA,WACA7iC,eAAA,WACA30D,gBAAA,WACAy3F,kBAAA,WACAC,YAAA,WACAC,gBAAA,WACAC,gBAAA,WACAC,oBAAA,WACA/3F,WAAA,WACAH,SAAA,WACAm4F,WAAA,WACAhwF,SAAA,WACAD,SAAA,WACAkwF,cAAA,WACAC,iBAAA,WACAt4F,MAAA,WACAu4F,iBAAA,WACAC,eAAA,WACAhiD,kBAAA,WACAgY,YAAA,gBACAC,UAAA,gBACAC,YAAA,gBACAC,aAAA,gBACAC,oBAAA,gBACA+zB,gBAAA,UACArI,UAAA,UACAnN,YAAA,UACAmO,UAAA,UACAsH,YAAA,UACAzI,uBAAA,UACA5xE,QAAA,UACAk6E,KAAA,UACAhC,iBAAA,UACAoC,UAAA,UACA/iF,KAAA,YAEA,IAAAs3F,EAAA,CACAqB,QAAA,SAAA51F,EAAA8qC,GACA,OAAAx1B,KAAA0I,IAAAhe,EAAAJ,UAAAw2D,KAAAtrB,UAAA,GAAAA,EAAA,kBAEAmQ,SAAA,SAAAj7C,EAAA61F,EAAA3rC,GACA,OAAA50C,KAAA3J,IAAAkqF,EAAA3nF,WAAA9S,QAAA8uD,EAAA7d,QAAA,GAAAn+B,WAAA9S,OAAA,GAAA8uD,EAAAjV,gBAEAm4B,OAAA,SAAAh9D,EAAAlS,GACAA,EAAAO,SAAA21F,MAAA1lD,SAAAxwC,EAAAO,SAAA41F,gBAEAjnC,OAAA,SAAAlvD,GACAA,EAAAO,SAAAm9C,aAAAk6C,UAAA/7F,KACAmE,EAAAmB,GAAA,kBAAAtF,KAAAqzE,QACArzE,KAAAqzE,OAAA,KAAAlvE,IAEAmvD,OAAA,SAAAnvD,GACAA,EAAAO,SAAAm9C,aAAAk6C,WAAA/7F,OAAAmE,EAAAO,SAAAm9C,aAAAk6C,UAAA,MACA53F,EAAA41C,IAAA,kBAAA/5C,KAAAqzE,QACArzE,KAAAqzE,OAAA,KAAAlvE,KAGA1C,EAAAgN,WAEAzM,IAAAsM,OAAA,sEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA2tF,EAAA,WACAh8F,KAAAi8F,QAAA,EACAj8F,KAAAq8E,WAAA,EACAr8E,KAAAy8E,UAGA,WACAz8E,KAAA08E,WAAA,SAAAz2E,GACAjG,KAAA2mE,SAAA1gE,GAGAjG,KAAAoxB,IAAA,SAAAtV,EAAAogF,EAAAj2F,GACAjG,KAAAq8E,WACAvgE,GAAA9b,KAAAm8F,cAEA,IAAAD,GAAAl8F,KAAAo8F,aACAp8F,KAAAo8F,WAAA,GACAp8F,KAAAq8F,WAAAzuF,KAAA5N,KAAAo8F,YACAtgF,EAAA1S,GAAApJ,KAAAs8F,OAAAt8F,KAAAi8F,SAGA,UAAAngF,EAAAitC,QAAA,UAAAjtC,EAAAitC,SAAA/oD,KAAAm8F,WAAArgF,GACA9b,KAAAo8F,WAAAxuF,KAAAkO,KAGA9b,KAAAi9E,aAAA,SAAAp3E,EAAA02F,GACAv8F,KAAA27D,WAAA/tD,KAAA,CACAlM,MAAAmE,EACA02F,OAAAv8F,KAAAs8F,QAIAt8F,KAAAk9E,cAAA,WAEA,OADAl9E,KAAAo8F,WAAA,KACAp8F,KAAAs8F,MAGAt8F,KAAAw8F,YAAA,SAAAlkE,EAAAy5C,GACA,MAAAA,MAAA/xE,KAAAs8F,KAAA,GAGA,IAFA,IAAA5pE,EAAA1yB,KAAAq8F,WAEAn7F,EAAAwxB,EAAArxB,OAAgCH,KAAK,CACrC,IAAA4a,EAAA4W,EAAAxxB,GAAA,GACA,GAAA4a,EAAA1S,IAAAkvB,EAAA,MACAxc,EAAA1S,GAAA2oE,IAAAj2D,EAAA2gF,QAAA,GAGAz8F,KAAAo8F,WAAA,MAGAp8F,KAAA8I,aAAA,SAAAyzF,EAAA/vB,GAGA,IAFA,IAAA95C,EAAA1yB,KAAA27D,WAEAz6D,EAAAwxB,EAAArxB,OAAgCH,KAAK,CACrC,IAAA2E,EAAA6sB,EAAAxxB,GAEA,GAAA2E,EAAA02F,MAEA,OADA/vB,IAAA3mE,EAAA6sB,EAAAxxB,EAAA,IACA2E,IAKA7F,KAAA08F,YAAA,WACA,OAAA18F,KAAAs8F,MAGAt8F,KAAA28F,UAAA,SAAArkE,EAAAy5C,GACA,MAAAA,MAAA/xE,KAAAs8F,KAAA,GAKA,IAJA,IAAA5pE,EAAA1yB,KAAAq8F,WACAprD,EAAA,KACAvsB,EAAA,EAEAxjB,EAAAwxB,EAAArxB,OAAgCH,KAAK,CACrC,IAAA4a,EAAA4W,EAAAxxB,GAAA,GAGA,GAFA4a,EAAA1S,GAAA2oE,IAAA9gC,MAAA/vC,EAAA,GAEA4a,EAAA1S,IAAAkvB,EAAA,CACA5T,EAAAxjB,EAAA,EACA,OAIA,OAAAwxB,EAAArM,MAAA3B,EAAAusB,IAGAjxC,KAAA48F,iBAAA,SAAAtkE,EAAAy5C,GACA,MAAAA,MAAA/xE,KAAAs8F,KAAA,IAGAt8F,KAAA68F,gBAAA,SAAAvkE,EAAAy5C,GACA,MAAAA,MAAA/xE,KAAAs8F,KAAA,IAGAt8F,KAAA88E,KAAA,SAAA72E,EAAAy6E,GACA1gF,KAAAo8F,WAAA,KACA,IAAA1pE,EAAA1yB,KAAAq8F,WACA,GA+FA,SAAA3pE,EAAAxqB,GACA,QAAAhH,EAAAgH,EAAqBhH,KAAK,CAC1B,IAAA47F,EAAApqE,EAAAxxB,GAEA,GAAA47F,MAAA,GAAAL,OAAA,CACA,KAAAv7F,EAAAgH,EAAA,IACA,IAAA60F,EAAAC,EAAAtqE,EAAAxxB,GAAAwxB,EAAAxxB,EAAA,IACAwxB,EAAAxxB,GAAA67F,EAAA,GACArqE,EAAAxxB,EAAA,GAAA67F,EAAA,GACA77F,IAGA,WA3GA+7F,CAAAvqE,IAAArxB,QAAA,CACA4E,MAAAjG,KAAA2mE,UACA3mE,KAAAk9F,oBAAAl9F,KAAAs8F,MAAAt8F,KAAAm9F,WAAA97F,SAAArB,KAAAm9F,WAAA,IACAn9F,KAAAq8E,WAAA,EACA,IAAAygB,EAAApqE,EAAA3b,MACAqmF,EAAA,KASA,OAPAN,KAAAz7F,SACA+7F,EAAAn3F,EAAAw6E,YAAAqc,EAAApc,GACA1gF,KAAAm9F,WAAAvvF,KAAAkvF,GACA98F,KAAAq9F,YAGAr9F,KAAAq8E,WAAA,EACA+gB,IAGAp9F,KAAA+8E,KAAA,SAAA92E,EAAAy6E,GAKA,GAJA1gF,KAAAo8F,WAAA,KACAn2F,MAAAjG,KAAA2mE,UACA3mE,KAAAq8E,WAAA,EAEAr8E,KAAAk9F,mBAAAl9F,KAAAs8F,KAAA,CACA,IAAA9vF,EAAAxM,KAAA28F,UAAA38F,KAAAk9F,kBAAAl9F,KAAAs8F,KAAA,IAqXA,SAAAgB,EAAAC,GACA,QAAAr8F,EAAA,EAAmBA,EAAAq8F,EAAAl8F,OAAsBH,IAGzC,IAFA,IAAAuwE,EAAA8rB,EAAAr8F,GAEAia,EAAA,EAAqBA,EAAAs2D,EAAApwE,OAAmB8Z,IACxCqiF,EAAAF,EAAA7rB,EAAAt2D,IAzXAsiF,CAAAz9F,KAAAm9F,WAAA3wF,GACAxM,KAAAk9F,kBAAAl9F,KAAAs8F,KACAt8F,KAAAm9F,WAAA16F,QAAA,SAAAoZ,GACAA,EAAA,GAAAzS,KAAApJ,KAAAi8F,SACSj8F,MAGT,IAAA88F,EAAA98F,KAAAm9F,WAAApmF,MACA2mF,EAAA,KASA,OAPAZ,IACAY,EAAAz3F,EAAA46E,YAAAic,EAAApc,GACA1gF,KAAAq8F,WAAAzuF,KAAAkvF,GACA98F,KAAAq9F,YAGAr9F,KAAAq8E,WAAA,EACAqhB,GAGA19F,KAAAq9F,SAAA,WACA,IAAA3qE,EAAA1yB,KAAAq8F,WACAsB,EAAAjrE,IAAArxB,OAAA,GACA+H,EAAAu0F,KAAA,GAAAv0F,IAAA,EACApJ,KAAAk9F,kBAAA9zF,EACApJ,KAAAs8F,KAAAlzF,GAGApJ,KAAAy8E,MAAA,WACAz8E,KAAAo8F,WAAA,KACAp8F,KAAAm8F,WAAA,KACAn8F,KAAAq8F,WAAA,GACAr8F,KAAAm9F,WAAA,GACAn9F,KAAAs8F,KAAA,EACAt8F,KAAA8qB,KAAA,EACA9qB,KAAAk9F,kBAAAl9F,KAAAs8F,KACAt8F,KAAA27D,WAAA,IAGA37D,KAAA49F,QAAA,WACA,OAAA59F,KAAAq8F,WAAAh7F,OAAA,GAGArB,KAAA69F,QAAA,WACA,OAAA79F,KAAAm9F,WAAA97F,OAAA,GAGArB,KAAA89F,SAAA,SAAAvB,QACA1nF,GAAA0nF,MAAAv8F,KAAAs8F,MACAt8F,KAAA8qB,KAAAyxE,GAGAv8F,KAAA+9F,aAAA,WACA,OAAA/9F,KAAAs8F,OAAAt8F,KAAA8qB,MAGA9qB,KAAAmI,OAAA,aAEAnI,KAAAoI,SAAA,aAEApI,KAAAkpD,QAAAlpD,KAAA49F,QACA59F,KAAAg9E,QAAAh9E,KAAA69F,QACA79F,KAAAg+F,QAAAh+F,KAAA+9F,aACA/9F,KAAAi+F,UAAAj+F,KAAA89F,SAEA99F,KAAAk+F,aAAA,SAAApiF,GACA,OAAAA,EAAAqiF,EAAAriF,GACAqiF,EAAAn+F,KAAAq8F,YAAA,UAAA8B,EAAAn+F,KAAAm9F,eAEG77F,KAAA06F,EAAAp7F,WAmBH,IAAAsB,EAAAC,EAAA,WAAAD,MAEAmvC,EAAAnvC,EAAA+wC,cACA/wC,EAAA+wC,cA6CA,SAAAi+B,EAAAhpE,GACA,OACA6oC,IAAA7oC,EAAA6oC,IACAC,OAAA9oC,EAAA8oC,QAaA,SAAAmtD,EAAAj+F,GAGA,GAFAA,KAAAF,KAEAO,MAAAsG,QAAA3G,GACA,OAAAA,EAAAuW,IAAA0nF,GAAAp2F,KAAA,MAGA,IAAA2B,EAAA,GAqBA,OAnBAxJ,EAAA6oD,QACAr/C,EAAA,UAAAxJ,EAAA6oD,OAAA,QACAr/C,GAAA,IAAAxJ,EAAAsN,MAAA,KACKtN,EAAAwB,QAELgI,EADAnJ,MAAAsG,QAAA3G,EAAAwB,OACAxB,EAAAwB,MAAA+U,IAAA2nF,GAAAr2F,KAAA,MAEAq2F,EAAAl+F,EAAAwB,QAIAxB,EAAAwkB,QACAhb,GAAA00F,EAAAl+F,KAGAA,EAAAkJ,IAAAlJ,EAAAq8F,OACA7yF,GAAA,OAAAxJ,EAAAkJ,IAAAlJ,EAAAq8F,KAAA,KAGA7yF,EAGA,SAAA00F,EAAA38B,GACA,OAAAA,EAAA/8C,MAAAqsB,IAAA,IAAA0wB,EAAA/8C,MAAAssB,OAAA,KAAAywB,EAAAxwB,IAAAF,IAAA,IAAA0wB,EAAAxwB,IAAAD,OAGA,SAAAkkD,EAAAmJ,EAAAC,GACA,IAAAC,EAAA,UAAAF,EAAAt1C,OACAy1C,EAAA,UAAAF,EAAAv1C,OAEA,GAAAw1C,GAAAC,EACA,GAAAntD,EAAAitD,EAAA55E,MAAA25E,EAAAptD,MAAA,EACA1pB,EAAA+2E,EAAAD,GAAA,OACO,MAAAhtD,EAAAitD,EAAA55E,MAAA25E,EAAA35E,QAAA,GAGP,YAFA6C,EAAA82E,EAAAC,EAAA,QAIK,GAAAC,IAAAC,EACL,GAAAntD,EAAAitD,EAAA55E,MAAA25E,EAAAptD,MAAA,EACA1pB,EAAA+2E,EAAAD,GAAA,OACO,MAAAhtD,EAAAitD,EAAArtD,IAAAotD,EAAA35E,QAAA,GAGP,YAFA6C,EAAA82E,EAAAC,GAAA,QAIK,IAAAC,GAAAC,EACL,GAAAntD,EAAAitD,EAAA55E,MAAA25E,EAAA35E,QAAA,EACA6C,EAAA+2E,EAAAD,EAAA,OACO,MAAAhtD,EAAAitD,EAAA55E,MAAA25E,EAAA35E,QAAA,GAGP,YAFA6C,EAAA82E,EAAAC,EAAA,QAIK,IAAAC,IAAAC,EACL,GAAAntD,EAAAitD,EAAA55E,MAAA25E,EAAA35E,QAAA,EACA6C,EAAA+2E,EAAAD,EAAA,OACO,MAAAhtD,EAAAitD,EAAArtD,IAAAotD,EAAA35E,QAAA,GAGP,YAFA6C,EAAA82E,EAAAC,GAAA,GAMA,OAAAA,EAAAD,GAGA,SAAArB,EAAAyB,EAAAC,GACA,QAAAx9F,EAAAu9F,EAAAp9F,OAA4BH,KAC5B,QAAAia,EAAA,EAAqBA,EAAAujF,EAAAr9F,OAAgB8Z,IACrC,IAAA+5E,EAAAuJ,EAAAv9F,GAAAw9F,EAAAvjF,IAAA,CACA,KAAAja,EAAAu9F,EAAAp9F,QAAA,CACA,KAAA8Z,KACA+5E,EAAAwJ,EAAAvjF,GAAAsjF,EAAAv9F,IAGAia,EAAAujF,EAAAr9F,OACAH,IAGA,OAAAu9F,EAAAC,GAMA,OADAD,EAAA9d,gBAAA+d,EAAA/d,gBAAA8d,EAAA3d,eAAA4d,EAAA5d,eAAA,KACA,CAAA4d,EAAAD,GAGA,SAAAE,EAAAN,EAAAO,GACA,IAAAL,EAAA,UAAAF,EAAAt1C,OACAy1C,EAAA,UAAAI,EAAA71C,OAEA,GAAAw1C,GAAAC,EACAntD,EAAAgtD,EAAA35E,MAAAk6E,EAAAl6E,OAAA,EACA6C,EAAAq3E,EAAAP,EAAA,GAEA92E,EAAA82E,EAAAO,EAAA,QAEK,GAAAL,IAAAC,EACLntD,EAAAgtD,EAAA35E,MAAAk6E,EAAA3tD,MAAA,EACA1pB,EAAA82E,EAAAO,GAAA,GACOvtD,EAAAgtD,EAAA35E,MAAAk6E,EAAAl6E,QAAA,EACP6C,EAAAq3E,EAAAP,EAAA,IAEA92E,EAAA82E,EAAAn8F,EAAAqwC,WAAAqsD,EAAAl6E,MAAA25E,EAAA35E,QAAA,GACA6C,EAAAq3E,EAAAP,EAAA,SAEK,IAAAE,GAAAC,EACLntD,EAAAutD,EAAAl6E,MAAA25E,EAAAptD,MAAA,EACA1pB,EAAAq3E,EAAAP,GAAA,GACOhtD,EAAAutD,EAAAl6E,MAAA25E,EAAA35E,QAAA,EACP6C,EAAA82E,EAAAO,EAAA,IAEAr3E,EAAAq3E,EAAA18F,EAAAqwC,WAAA8rD,EAAA35E,MAAAk6E,EAAAl6E,QAAA,GACA6C,EAAA82E,EAAAO,EAAA,SAEK,IAAAL,IAAAC,EACL,GAAAntD,EAAAutD,EAAAl6E,MAAA25E,EAAAptD,MAAA,EACA1pB,EAAAq3E,EAAAP,GAAA,OACO,CAGP,IAAA9xB,EAAAC,EAHO,KAAAn7B,EAAAutD,EAAA3tD,IAAAotD,EAAA35E,QAAA,GAuBP,OAlBA2sB,EAAAgtD,EAAA35E,MAAAk6E,EAAAl6E,OAAA,IACA6nD,EAAA8xB,EACAA,EAAAQ,EAAAR,EAAAO,EAAAl6E,QAGA2sB,EAAAgtD,EAAAptD,IAAA2tD,EAAA3tD,KAAA,IACAu7B,EAAAqyB,EAAAR,EAAAO,EAAA3tD,MAGA6tD,EAAAF,EAAA3tD,IAAAotD,EAAA35E,MAAA25E,EAAAptD,KAAA,GAEAu7B,IAAAD,IACA8xB,EAAA7wF,MAAAg/D,EAAAh/D,MACA6wF,EAAA35E,MAAA8nD,EAAA9nD,MACA25E,EAAAptD,IAAAu7B,EAAAv7B,IACAu7B,EAAA6xB,GAGA,CAAAO,EAAAryB,EAAAC,GAAAxxC,OAAA01B,SAtBAnpC,EAAA82E,EAAAO,GAAA,GA0BA,OAAAA,EAAAP,GAGA,SAAA92E,EAAA82E,EAAAC,EAAA1qC,GACAkrC,EAAAT,EAAA35E,MAAA45E,EAAA55E,MAAA45E,EAAArtD,IAAA2iB,GACAkrC,EAAAT,EAAAptD,IAAAqtD,EAAA55E,MAAA45E,EAAArtD,IAAA2iB,GAGA,SAAAkrC,EAAA52F,EAAAwc,EAAAusB,EAAA2iB,GACA1rD,EAAA6oC,MAAA,GAAA6iB,EAAAlvC,EAAAusB,GAAAF,MACA7oC,EAAA8oC,QAAA4iB,GAAA3iB,EAAAD,OAAAtsB,EAAAssB,SAGA9oC,EAAA6oC,KAAA6iB,GAAA3iB,EAAAF,IAAArsB,EAAAqsB,KAGA,SAAA8tD,EAAAvoC,EAAApuD,GACA,IAAAsF,EAAA8oD,EAAA9oD,MACAyjC,EAAAqlB,EAAArlB,IACAqlB,EAAArlB,IAAAigC,EAAAhpE,GACA,IAAA62F,EAAAzoC,EAAArlB,IAAAF,IAAAulB,EAAA5xC,MAAAqsB,IACAiuD,EAAAxxF,EAAA1F,OAAAi3F,EAAAvxF,EAAAnM,QACAg6D,EAAA0jC,EAAA72F,EAAA8oC,OAAA9oC,EAAA8oC,OAAAslB,EAAA5xC,MAAAssB,OASA,OARAxjC,EAAAI,KAAAoxF,EAAA,GAAA9lF,UAAA,EAAAmiD,IACA2jC,EAAA,GAAAA,EAAA,GAAA5kC,OAAAiB,GACA,CACA32C,MAAAwsD,EAAAhpE,GACA+oC,MACAzjC,MAAAwxF,EACAj2C,OAAAuN,EAAAvN,QAKA,SAAAy0C,EAAAF,EAAAp9F,GACAA,EAxMA,SAAAA,GACA,OACAwkB,MAAAwsD,EAAAhxE,EAAAwkB,OACAusB,IAAAigC,EAAAhxE,EAAA+wC,KACA8X,OAAA7oD,EAAA6oD,OACAv7C,MAAAtN,EAAAsN,MAAA6Y,SAmMA44E,CAAA/+F,GAEA,QAAAib,EAAAmiF,EAAAj8F,OAAkC8Z,KAAK,CAGvC,IAFA,IAAA2hF,EAAAQ,EAAAniF,GAEAja,EAAA,EAAqBA,EAAA47F,EAAAz7F,OAAqBH,IAAA,CAC1C,IACAg+F,EAAAP,EADA7B,EAAA57F,GACAhB,GACAA,EAAAg/F,EAAA,GAEA,GAAAA,EAAA79F,SACA69F,EAAA,IACApC,EAAAh1F,OAAA5G,EAAA,IAAAg+F,EAAA,GAAAA,EAAA,IACAh+F,KACWg+F,EAAA,KACXpC,EAAAh1F,OAAA5G,EAAA,GACAA,MAKA47F,EAAAz7F,QACAi8F,EAAAx1F,OAAAqT,EAAA,GAIA,OAAAmiF,EAaA77F,EAAAu6F,gBAEAh6F,IAAAsM,OAAA,wEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cAEAg9F,EAAA,SAAA3+D,EAAA4+D,GACAp/F,KAAAwgC,UACAxgC,KAAAo/F,gBAAA,IACAp/F,KAAAwgC,QAAAl2B,MAAA/B,OAAA,EAAAvI,KAAAo/F,aAAA,KACAp/F,KAAAq/F,MAAA,GACAr/F,KAAAs/F,UAAA,GACAt/F,KAAAu/F,mBAAA,IAGA,WACAv/F,KAAAw/F,cAAA,SAAArvC,GACAhb,EAAAlS,UAAAjjC,KAAAwgC,QAAA,GAAA2vB,EAAAsvC,eAAAtvC,EAAA1L,WAAAzkD,KAAAo/F,aAAAjvC,EAAA76B,OAAAt1B,KAAAu/F,qBAGAv/F,KAAA0/F,YAAA,SAAAC,EAAAC,GACA,OAAArkF,KAAA0C,MAAA0hF,EAAAF,eAAAE,EAAAl7C,WAAAzkD,KAAAo/F,gBAAA7jF,KAAA0C,MAAA2hF,EAAAH,eAAAG,EAAAn7C,WAAAzkD,KAAAo/F,eAGAp/F,KAAA6/F,eAAA,SAAA9uD,EAAAof,EAAAlqD,GACA,IAAA65F,EAAA3vC,EAAAsvC,eAAAtvC,EAAA1L,WACAs7C,EAAAxkF,KAAA0C,MAAA6hF,EAAA9/F,KAAAo/F,cAEA,OADAn5F,EAAA28C,oBAAA7R,EAAA,GAAAof,EAAA1L,WACAs7C,EAAA//F,KAAAo/F,cAGAp/F,KAAAggG,kBAAA,SAAAjvD,EAAAof,EAAAlqD,GACA,OAAAkqD,EAAA1L,WAAAx+C,EAAAq+E,aAAAvzC,IAGA/wC,KAAAwiD,UAAA,WACA,OAAAxiD,KAAAq/F,MAAAh+F,QAGArB,KAAA8W,IAAA,SAAAlP,GACA,OAAA5H,KAAAq/F,MAAAz3F,IAGA5H,KAAAunB,MAAA,WACAvnB,KAAAigG,WAAAjgG,KAAAq/F,MAAA93E,UAGAvnB,KAAA+W,IAAA,WACA/W,KAAAigG,WAAAjgG,KAAAq/F,MAAAtoF,QAGA/W,KAAA4N,KAAA,SAAAsyF,GACA,GAAA3/F,MAAAsG,QAAAq5F,GAAA,CACAlgG,KAAAq/F,MAAAzxF,KAAArM,MAAAvB,KAAAq/F,MAAAa,GAGA,IAFA,IAAAC,EAAAhrD,EAAAxU,eAAA3gC,KAAAwgC,SAEAt/B,EAAA,EAAuBA,EAAAg/F,EAAA7+F,OAAiBH,IACxCi/F,EAAAz1F,YAAAw1F,EAAAh/F,GAAAs/B,SAGAxgC,KAAAwgC,QAAA91B,YAAAy1F,QAEAngG,KAAAq/F,MAAAzxF,KAAAsyF,GACAlgG,KAAAwgC,QAAA91B,YAAAw1F,EAAA1/D,UAIAxgC,KAAAuZ,QAAA,SAAA2mF,GACA,GAAA3/F,MAAAsG,QAAAq5F,GAAA,CACAlgG,KAAAq/F,MAAA9lF,QAAAhY,MAAAvB,KAAAq/F,MAAAa,GAGA,IAFA,IAAAC,EAAAhrD,EAAAxU,eAAA3gC,KAAAwgC,SAEAt/B,EAAA,EAAuBA,EAAAg/F,EAAA7+F,OAAiBH,IACxCi/F,EAAAz1F,YAAAw1F,EAAAh/F,GAAAs/B,SAGAxgC,KAAAwgC,QAAAkB,WAAA1hC,KAAAwgC,QAAAiB,aAAA0+D,EAAAngG,KAAAwgC,QAAAkB,YAAkG1hC,KAAAwgC,QAAA91B,YAAAy1F,QAElGngG,KAAAq/F,MAAA9lF,QAAA2mF,GACAlgG,KAAAwgC,QAAA4/D,sBAAA,aAAAF,EAAA1/D,UAIAxgC,KAAAozC,KAAA,WACA,OAAApzC,KAAAq/F,MAAAh+F,OAAArB,KAAAq/F,MAAAr/F,KAAAq/F,MAAAh+F,OAAA,GAAsE,MAGtErB,KAAAigG,WAAA,SAAAC,GACAA,IACAA,EAAA1/D,QAAApG,SACAp6B,KAAAs/F,UAAA1xF,KAAAsyF,KAGAlgG,KAAAqgG,WAAA,SAAAtvD,EAAAof,EAAAlqD,EAAAq6F,GACA,IAAAJ,EAAAlgG,KAAAs/F,UAAAvoF,MAEA,IAAAmpF,EAAA,CACA,IAAA1/D,EAAA2U,EAAA/qC,cAAA,OACAk2F,KAAA9/D,GACAxgC,KAAAwgC,QAAA91B,YAAA81B,GACA0/D,EAAA,CACA1/D,UACAz3B,KAAA,GACAgoC,OAKA,OADAmvD,EAAAnvD,MACAmvD,KAEG5+F,KAAA69F,EAAAv+F,WACHa,EAAA09F,UAEAn9F,IAAAsM,OAAA,gJAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cAEAoM,EAAApM,EAAA,cAEAizC,EAAAjzC,EAAA,eAEAqM,EAAArM,EAAA,wBAAAqM,aAEA2wF,EAAAh9F,EAAA,WAAAg9F,MAEAoB,EAAA,SAAAC,GACAxgG,KAAAwgC,QAAA2U,EAAA/qC,cAAA,OACApK,KAAAwgC,QAAAz9B,UAAA,6BACAy9F,EAAA91F,YAAA1K,KAAAwgC,SACAxgC,KAAA40F,mBAAA50F,KAAAygG,kBACAzgG,KAAA0gG,YAAA,EACA1gG,KAAAuiD,aAAA,GACAviD,KAAA2gG,mBAAA3gG,KAAA2gG,mBAAAh+F,KAAA3C,MACAA,KAAA8vE,OAAA,IAAAqvB,EAAAn/F,KAAAwgC,SACAxgC,KAAA8vE,OAAAyvB,mBAAA,GAuUA,SAAAqB,EAAApgE,GACA,IAAAqgE,EAAA12F,SAAAw1B,eAAA,IACAa,EAAA91B,YAAAm2F,GACA,IAAAC,EAAA3rD,EAAA/qC,cAAA,QAEA,OADAo2B,EAAA91B,YAAAo2F,GACAtgE,GAzUA,WACAjyB,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA+R,WAAA,SAAA9L,GACAjG,KAAAiG,SAAAjG,KAAAiG,QAAA2lC,oBAAA,SAAA5rC,KAAA2gG,oBACA3gG,KAAAiG,UACAA,KAAAX,GAAA,SAAAtF,KAAA2gG,qBAGA3gG,KAAA49E,oBAAA,SAAA7sC,EAAAhuC,GACAspB,OAAA3lB,iBAAAC,MAAAD,QAAAC,KAAA,8CACA3G,KAAAiG,QAAA23E,oBAAA7sC,EAAAhuC,IAGA/C,KAAA69E,uBAAA,SAAA9sC,EAAAhuC,GACAspB,OAAA3lB,iBAAAC,MAAAD,QAAAC,KAAA,iDACA3G,KAAAiG,QAAA43E,uBAAA9sC,EAAAhuC,IAGA/C,KAAAmG,eAAA,SAAAnC,GACAhE,KAAAuiD,aAAA,GAEA,QAAArhD,EAAA,EAAqBA,EAAA8C,EAAA3C,OAAwBH,IAAA,CAC7C,IAAAohD,EAAAt+C,EAAA9C,GACA6vC,EAAAuR,EAAAvR,IACAgwD,EAAA/gG,KAAAuiD,aAAAxR,GACAgwD,MAAA/gG,KAAAuiD,aAAAxR,GAAA,CACAhoC,KAAA,KAEA,IAAAi4F,EAAA1+C,EAAAv5C,KACAi4F,IAAA5rD,EAAAjB,WAAA6sD,GAAA1+C,EAAAjgC,MAAA,IACA,IAAA0+E,EAAAh4F,KAAAlB,QAAAm5F,IAAAD,EAAAh4F,KAAA6E,KAAAozF,GACA,IAAAt3F,EAAA44C,EAAA54C,KACA,SAAAA,EAAAq3F,EAAAh+F,UAAA,aAA8D,WAAA2G,GAAA,cAAAq3F,EAAAh+F,UAAAg+F,EAAAh+F,UAAA,eAAoG,QAAA2G,GAAAq3F,EAAAh+F,YAAAg+F,EAAAh+F,UAAA,eAIlK/C,KAAA2gG,mBAAA,SAAA7kF,GACA,GAAA9b,KAAAuiD,aAAAlhD,OAAA,CACA,IAAAgxC,EAAAv2B,EAAA4I,MAAAqsB,IACAilB,EAAAl6C,EAAAm1B,IAAAF,IAAAsB,EAEA,OAAA2jB,QAAuB,aAAAl6C,EAAAitC,OACvB/oD,KAAAuiD,aAAAz6C,OAAAuqC,EAAA2jB,EAAA,YACO,CACP,IAAAx+C,EAAA,IAAAjX,MAAAy1D,EAAA,GACAx+C,EAAA+B,QAAA84B,EAAA,GACAryC,KAAAuiD,aAAAz6C,OAAAvG,MAAAvB,KAAAuiD,aAAA/qC,MAIAxX,KAAAqzE,OAAA,SAAAljB,GACAnwD,KAAAmwD,SACA,IAAAlqD,EAAAjG,KAAAiG,QACAosC,EAAA8d,EAAA9d,SACAC,EAAA/2B,KAAA5J,IAAAw+C,EAAA7d,QAAA6d,EAAA8wC,aACAh7F,EAAAu8C,YAAA,GACAxiD,KAAAkhG,WAAA5uD,EACAtyC,KAAAmwD,SACAnwD,KAAA8vE,OAAA0vB,cAAArvC,GACAnwD,KAAAmhG,mBAOA,IANA,IAAAjvC,EAAAjsD,EAAA4wE,gBAAAxkC,GACAkuC,EAAAruB,IAAAxtC,MAAAqsB,IAAA+6B,IACAo0B,EAAA,KACAt4F,GAAA,EACAmpC,EAAAsB,IAEA,CAOA,GANAtB,EAAAwvC,IACAxvC,EAAAmhB,EAAAjhB,IAAAF,IAAA,EAEAwvC,GADAruB,EAAAjsD,EAAA4wE,gBAAA9lC,EAAAmhB,IACAA,EAAAxtC,MAAAqsB,IAAA+6B,KAGA/6B,EAAAuB,EAAA,CACA,KAAAtyC,KAAA8vE,OAAAttB,YAAA56C,EAAA,GACA5H,KAAA8vE,OAAA/4D,MAGA,OAGAmpF,EAAAlgG,KAAA8vE,OAAAh5D,MAAAlP,IAGAs4F,EAAAnvD,OAEAmvD,EAAAlgG,KAAA8vE,OAAAuwB,WAAAtvD,EAAAof,EAAAnwD,KAAAiG,QAAA26F,GACA5gG,KAAA8vE,OAAAliE,KAAAsyF,IAGAlgG,KAAAohG,YAAAlB,EAAA/vC,EAAA+B,EAAAnhB,GACAA,IAGA/wC,KAAAgiD,QAAA,eAEAhiD,KAAAqhG,mBAAAlxC,IAGAnwD,KAAAqhG,mBAAA,SAAAlxC,GACA,IAAAlqD,EAAAjG,KAAAiG,QACAq7F,EAAAr7F,EAAAq7F,gBAAAthG,KAAA+7F,UACAhW,EAAA9/E,EAAAs7F,iBACAC,EAAAxhG,KAAA8vE,OAAA18B,OAAApzC,KAAA8vE,OAAA18B,OAAArqC,KAAA,IACA/I,KAAAyhG,aAAAx7F,EAAA6zD,gBAAA0nC,EAAAv7F,EAAAu8C,YAAAujC,EAAA,GACA,IAAA2a,EAAAY,IAAApgD,SAAAj7C,EAAAu7F,EAAArxC,GAAAqxC,EAAArtF,WAAA9S,OAAA8uD,EAAAjV,eACA3wC,EAAAvK,KAAA0hG,UAAA1hG,KAAA2hG,mBACAjB,GAAAn2F,EAAA4C,KAAA5C,EAAA6C,SAEApN,KAAA0gG,aAAAh9E,MAAAg9E,KACA1gG,KAAA0gG,cACA1gG,KAAAwgC,QAAAlD,WAAAhzB,MAAA9B,MAAAxI,KAAAwgC,QAAAl2B,MAAA9B,MAAA+S,KAAAC,KAAAxb,KAAA0gG,aAAA,KAEA1gG,KAAAgiD,QAAA,oBAAA0+C,KAIA1gG,KAAAmhG,iBAAA,WACA,GAAAnhG,KAAA4hG,qBAAA,CACA,IAAAp3F,EAAAxK,KAAAiG,QAAAJ,UAAAg3D,YACA78D,KAAA6hG,aAAAr3F,EAAAumC,MACA/wC,KAAA6hG,WAAAr3F,EAAAumC,OAGA/wC,KAAA8hG,oBAAA,WACA,GAAA9hG,KAAA4hG,qBAAA,CACA,IAAA7wD,EAAA/wC,KAAAiG,QAAAJ,UAAAwH,OAAA0jC,IAEA,GADA/wC,KAAA6hG,WAAA9wD,GACA/wC,KAAA+hG,aAAA/hG,KAAA+hG,YAAAhxD,OAAA,CACA/wC,KAAA+hG,cAAA/hG,KAAA+hG,YAAAvhE,QAAAz9B,UAAA/C,KAAA+hG,YAAAvhE,QAAAz9B,UAAAwR,QAAA,+BACA,IAAA8qF,EAAAr/F,KAAA8vE,OAAAuvB,MACAr/F,KAAA+hG,YAAA,KAEA,QAAA7gG,EAAA,EAAqBA,EAAAm+F,EAAAh+F,OAAkBH,IAAA,CACvC,IAAAg/F,EAAAb,EAAAn+F,GAEA,GAAAg/F,EAAAnvD,KAAA/wC,KAAA6hG,WAAA,CACA,GAAA3B,EAAAnvD,IAAA/wC,KAAA6hG,WAAA,CACA,IAAA3vC,EAAAlyD,KAAAiG,QAAAs5D,YAAAv/D,KAAA6hG,YACA,KAAA3gG,EAAA,GAAAgxD,KAAAxtC,MAAAqsB,KAAAsuD,EAAAn+F,EAAA,GAAA6vC,KAAyF,MAAzFmvD,EAAAb,EAAAn+F,EAAA,GAGAg/F,EAAA1/D,QAAAz9B,UAAA,0BAAAm9F,EAAA1/D,QAAAz9B,UACA/C,KAAA+hG,YAAA7B,EACA,WAKAlgG,KAAAgiG,YAAA,SAAA7xC,GACA,IAAAwvC,EAAA3/F,KAAAmwD,OAGA,GAFAnwD,KAAAmwD,SACAnwD,KAAAmhG,mBACAnhG,KAAA8vE,OAAA4vB,YAAAC,EAAAxvC,GAAA,OAAAnwD,KAAAqzE,OAAAljB,GACAnwD,KAAA8vE,OAAA0vB,cAAArvC,GACA,IAAA7d,EAAA/2B,KAAA5J,IAAAw+C,EAAA7d,QAAA6d,EAAA8wC,aACAjhG,KAAAiG,QAAAu8C,YAAA,GACA0+C,EAAAlhG,KAAAkhG,WAEA,GADAlhG,KAAAkhG,WAAA5uD,GACAqtD,GAAAuB,EAAA/wC,EAAA9d,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,GAAA7d,EAAAqtD,EAAAttD,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,GAAAwvC,EAAAttD,SAAA8d,EAAA9d,SAAA,QAAAtB,EAAA/wC,KAAAiG,QAAA6wE,kBAAA6oB,EAAAttD,SAAA8d,EAAA9d,SAAA,GAAuItB,EAAA,EAASA,IAChJ/wC,KAAA8vE,OAAAvoD,QAEA,GAAA25E,EAAA5uD,EAAA,IAAAvB,EAAA/wC,KAAAiG,QAAA6wE,kBAAAxkC,EAAA,EAAA4uD,GAAuGnwD,EAAA,EAASA,IAChH/wC,KAAA8vE,OAAA/4D,MAGAo5C,EAAA9d,SAAAstD,EAAAttD,UACAryC,KAAA8vE,OAAAv2D,QAAAvZ,KAAAiiG,aAAA9xC,IAAA9d,SAAAstD,EAAAttD,SAAA,IAGAC,EAAA4uD,GACAlhG,KAAA8vE,OAAAliE,KAAA5N,KAAAiiG,aAAA9xC,EAAA+wC,EAAA,EAAA5uD,IAGAtyC,KAAA8hG,sBAEA9hG,KAAAgiD,QAAA,eAEAhiD,KAAAqhG,mBAAAlxC,IAGAnwD,KAAAiiG,aAAA,SAAA9xC,EAAA9d,EAAAC,GAMA,IALA,IAAA6tD,EAAA,GACApvD,EAAAsB,EACAitB,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,GACAwvC,EAAAjhB,IAAA56C,MAAAqsB,IAAA+6B,IAGA/6B,EAAAwvC,IACAxvC,EAAAuuB,EAAAruB,IAAAF,IAAA,EAEAwvC,GADAjhB,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,EAAAuuB,IACAA,EAAA56C,MAAAqsB,IAAA+6B,OAGA/6B,EAAAuB,IAPA,CAQA,IAAA4tD,EAAAlgG,KAAA8vE,OAAAuwB,WAAAtvD,EAAAof,EAAAnwD,KAAAiG,QAAA26F,GACA5gG,KAAAohG,YAAAlB,EAAA/vC,EAAAmP,EAAAvuB,GACAovD,EAAAvyF,KAAAsyF,GACAnvD,IAGA,OAAAovD,GAGAngG,KAAAohG,YAAA,SAAAlB,EAAA/vC,EAAA+B,EAAAnhB,GACA,IAAAvQ,EAAA0/D,EAAA1/D,QACAv6B,EAAAjG,KAAAiG,QACA46F,EAAArgE,EAAA0hE,WAAA,GACApB,EAAAtgE,EAAA0hE,WAAA,GACAnc,EAAA9/E,EAAAs7F,iBACAY,EAAAl8F,EAAAm1E,aACAgnB,EAAAn8F,EAAAo1E,aACAimB,EAAAr7F,EAAAq7F,gBAAAthG,KAAA+7F,UACAzpC,EAAAtyD,KAAAygG,kBAAAx6F,EAAAqsD,YACAiuB,EAAAruB,IAAAxtC,MAAAqsB,IAAAt4B,OAAAC,UACA3V,EAAA,mBAkBA,GAhBA/C,KAAA4hG,uBACA7wD,GAAA/wC,KAAA6hG,YAAA3vC,GAAAnhB,EAAA/wC,KAAA6hG,YAAA9wD,GAAAwvC,GAAAvgF,KAAA6hG,YAAA3vC,EAAAjhB,IAAAF,OACAhuC,GAAA,0BAEA/C,KAAA+hG,aAAA7B,IACAlgG,KAAA+hG,cAAA/hG,KAAA+hG,YAAAvhE,QAAAz9B,UAAA/C,KAAA+hG,YAAAvhE,QAAAz9B,UAAAwR,QAAA,+BACAvU,KAAA+hG,YAAA7B,IAKAiC,EAAApxD,KAAAhuC,GAAAo/F,EAAApxD,IACAqxD,EAAArxD,KAAAhuC,GAAAq/F,EAAArxD,IACA/wC,KAAAuiD,aAAAxR,KAAAhuC,GAAA/C,KAAAuiD,aAAAxR,GAAAhuC,WACAy9B,EAAAz9B,eAAAy9B,EAAAz9B,aAEAuvD,EAAA,CACA,IAAAgE,EAAAhE,EAAAvhB,GACA,MAAAulB,MAAAhE,EAAAvhB,GAAA9qC,EAAA2yE,cAAA7nC,IAGA,GAAAulB,EAAA,CACAvzD,EAAA,uBAAAuzD,EACA,SAAAA,GAAAvlB,GAAAwvC,GAAAxvC,EAAAmhB,EAAAjhB,IAAAF,IAAAhuC,GAAA,cAA+FA,GAAA,YAC/F+9F,EAAA/9F,eAAA+9F,EAAA/9F,aACA,IAAAs/F,EAAAlyC,EAAA1L,WAAA,KACAtP,EAAA1S,SAAAq+D,EAAAx2F,MAAA,SAAA+3F,GACAltD,EAAA1S,SAAAq+D,EAAAx2F,MAAA,+BAEAw2F,GACA3rD,EAAA1S,SAAAq+D,EAAAx2F,MAAA,kBAIA,IAAAvB,GAAAu4F,IAAAzF,QAAA51F,EAAA8qC,KAAAg1C,GAAA5xE,WASA,OAPApL,IAAA83F,EAAAnqF,OACAmqF,EAAAnqF,KAAA3N,GAGAosC,EAAA1S,SAAAy9D,EAAA1/D,QAAAl2B,MAAA,SAAAtK,KAAA8vE,OAAAkwB,kBAAAjvD,EAAAof,EAAAlqD,GAAA,MACAkvC,EAAA1S,SAAAy9D,EAAA1/D,QAAAl2B,MAAA,MAAAtK,KAAA8vE,OAAA+vB,eAAA9uD,EAAAof,EAAAlqD,GAAA,MACAi6F,EAAAn3F,OACAm3F,GAGAlgG,KAAAyhG,aAAA,EACAzhG,KAAA4hG,sBAAA,EACA5hG,KAAA+7F,UAAA,GAEA/7F,KAAA4zF,uBAAA,SAAAqH,GACAj7F,KAAA4hG,qBAAA3G,GAGAj7F,KAAA06F,kBAAA,EACA16F,KAAA+7F,UAAA,GAEA/7F,KAAAo6F,mBAAA,SAAAt5C,GACA9gD,KAAA+7F,WAAAj7C,GAAA,CACAI,SAAA,WACA,UAEA26C,QAAA,WACA,YAKA77F,KAAAsiG,mBAAA,WACA,OAAAtiG,KAAA06F,kBAGA16F,KAAAygG,kBAAA,EAEAzgG,KAAA40F,mBAAA,SAAA9zC,GACAA,EAAA3L,EAAArU,YAAA9gC,KAAAwgC,QAAA,uBAAqE2U,EAAApU,eAAA/gC,KAAAwgC,QAAA,uBACrExgC,KAAAygG,iBAAA3/C,EACA9gD,KAAA0hG,SAAA,MAGA1hG,KAAA60F,mBAAA,WACA,OAAA70F,KAAAygG,kBAGAzgG,KAAA2hG,gBAAA,WACA,IAAA3hG,KAAAwgC,QAAAkB,WAAA,OACAv0B,KAAA,EACAC,MAAA,GAEA,IAAA9C,EAAA6qC,EAAA5S,cAAAviC,KAAAwgC,QAAAkB,YAIA,OAHA1hC,KAAA0hG,SAAA,GACA1hG,KAAA0hG,SAAAv0F,MAAAsW,SAAAnZ,EAAA+wC,kBAAA,IAAA53B,SAAAnZ,EAAAi4F,cAAA,KACAviG,KAAA0hG,SAAAt0F,OAAAqW,SAAAnZ,EAAAk4F,mBAAA,IAAA/+E,SAAAnZ,EAAAm4F,eAAA,GACAziG,KAAA0hG,UAGA1hG,KAAAkiD,UAAA,SAAAitB,GACA,IAAA5kE,EAAAvK,KAAA0hG,UAAA1hG,KAAA2hG,kBACAxmD,EAAAn7C,KAAAwgC,QAAAwW,wBACA,OAAAm4B,EAAAtzD,EAAAtR,EAAA4C,KAAAguC,EAAAhuC,KAAA,UACAnN,KAAAygG,kBAAAtxB,EAAAtzD,EAAAs/B,EAAA/tC,MAAA7C,EAAA6C,MAAA,wBAEG9L,KAAAi/F,EAAA3/F,WAUHa,EAAA8+F,WAEAv+F,IAAAsM,OAAA,qFAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,YAAAD,MAEAizC,EAAAhzC,EAAA,cAEAugG,EAAA,SAAAlC,GACAxgG,KAAAwgC,QAAA2U,EAAA/qC,cAAA,OACApK,KAAAwgC,QAAAz9B,UAAA,6BACAy9F,EAAA91F,YAAA1K,KAAAwgC,WAGA,WACAxgC,KAAA0hG,SAAA,EAEA1hG,KAAA2iG,WAAA,SAAAp4F,GACAvK,KAAA0hG,SAAAn3F,GAGAvK,KAAA+R,WAAA,SAAA9L,GACAjG,KAAAiG,WAGAjG,KAAA4iG,WAAA,SAAA3+F,GACAjE,KAAAiE,WAGAjE,KAAA6iG,IAAA,SAAA9/F,EAAA+/F,GACA,IAAAjnF,GAAA,GAAA7b,KAAAkB,GAAAlB,KAAAwgC,QAAA0hE,WAAAliG,KAAAkB,GAEA2a,EAKA7b,KAAAkB,KAJA2a,EAAA1R,SAAAC,cAAA,OACApK,KAAAwgC,QAAA91B,YAAAmR,GACA7b,KAAAkB,GAAA,GAKA2a,EAAAvR,MAAAsF,QAAAkzF,EACAjnF,EAAA9Y,aAGA/C,KAAAqzE,OAAA,SAAAljB,GACA,GAAAA,EAAA,CAGA,IAAA9tC,EAEA,QAAA9M,KAJAvV,KAAAmwD,SACAnwD,KAAAkB,EAAA,EAGAlB,KAAAiE,QAAA,CACA,IAAAg6E,EAAAj+E,KAAAiE,QAAAsR,GAEA,GAAA0oE,EAAAr0E,MAAA,CAKA,IAAAA,EAAAq0E,EAAAr0E,MAAAwoC,SAAA+d,EAAA9d,SAAA8d,EAAA7d,SACA,IAAA1oC,EAAA6oC,UAGA,GAFA7oC,IAAAgpC,cAAA5yC,KAAAiG,SAEAg4E,EAAAv5E,SAAA,CACA,IAAA4N,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACAhjD,EAAAnN,KAAA0hG,SAAA93F,EAAA8a,MAAAssB,OAAAmf,EAAAjV,eACA+iC,EAAAv5E,SAAA2d,EAAAzY,EAAAuD,EAAAmF,EAAA69C,OACS,YAAA8tB,EAAAv0E,KACT1J,KAAAgjG,mBAAA3gF,EAAAzY,EAAAq0E,EAAA50E,MAAA8mD,GACS,cAAA8tB,EAAAv0E,KACT1J,KAAAijG,qBAAA5gF,EAAAzY,EAAAq0E,EAAA50E,MAAA8mD,GACSvmD,EAAAooC,cACT,QAAAisC,EAAAv0E,KAAA1J,KAAAkjG,eAAA7gF,EAAAzY,EAAAq0E,EAAA50E,MAAA8mD,GAA4FnwD,KAAAmjG,oBAAA9gF,EAAAzY,EAAAq0E,EAAA50E,MAAA8mD,GAE5FnwD,KAAAuzE,qBAAAlxD,EAAAzY,EAAAq0E,EAAA50E,MAAA,sBAAA8mD,QAnBA8tB,EAAA5K,OAAAhxD,EAAAriB,UAAAiG,QAAAkqD,GAuBA,OAAAnwD,KAAAkB,EACA,KAAAlB,KAAAkB,EAAAlB,KAAAwgC,QAAA4iE,mBACApjG,KAAAwgC,QAAAt2B,YAAAlK,KAAAwgC,QAAA6iE,aAKArjG,KAAA+iG,QAAA,SAAAhyD,EAAA2T,GACA,OAAA3T,EAAA2T,EAAA+6C,gBAAA/6C,EAAAD,YAOAzkD,KAAAkjG,eAAA,SAAAI,EAAA15F,EAAAP,EAAAq7C,EAAA6+C,GAUA,IATA,IAAAt9F,EAAAjG,KAAAiG,QACAye,EAAA9a,EAAA8a,MAAAqsB,IACAE,EAAArnC,EAAAqnC,IAAAF,IACAA,EAAArsB,EACAupE,EAAA,EACAuV,EAAA,EACAr/B,EAAAl+D,EAAAw+E,uBAAA1zC,GACA0yD,EAAA,IAAAvhG,EAAA6uC,EAAAnnC,EAAA8a,MAAAssB,OAAAD,EAAAyyD,GAEYzyD,GAAAE,EAAYF,IACxB0yD,EAAA/+E,MAAAqsB,IAAA0yD,EAAAxyD,IAAAF,MACA0yD,EAAA/+E,MAAAssB,OAAAD,GAAArsB,EAAA9a,EAAA8a,MAAAssB,OAAA/qC,EAAAu+E,iBAAAzzC,GACA0yD,EAAAxyD,IAAAD,OAAAmzB,EACA8pB,EAAAuV,EACAA,EAAAr/B,EACAA,EAAApzB,EAAA,EAAAE,EAAAhrC,EAAAw+E,uBAAA1zC,EAAA,GAAAA,GAAAE,EAAA,EAAArnC,EAAAqnC,IAAAD,OACAhxC,KAAAuzE,qBAAA+vB,EAAAG,EAAAp6F,GAAA0nC,GAAArsB,EAAA,6BAAAqsB,GAAArsB,GAAAqsB,GAAArsB,EAAA,GAAA9a,EAAA8a,MAAAssB,OApBA,MAoBAi9C,EAAAuV,EApBA,MAoBAA,EAAAr/B,EApBA,MAoBApzB,GAAAE,EApBA,MAoBAyT,EAAA3T,GAAAE,EAAA,IAAAsyD,IAIAvjG,KAAAmjG,oBAAA,SAAAG,EAAA15F,EAAAP,EAAA8mD,EAAAozC,GACA,IAAAh5F,EAAAvK,KAAA0hG,SACAn5F,EAAA4nD,EAAA1L,WACAnyC,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACAhjD,EAAA5C,EAAAX,EAAA8a,MAAAssB,OAAAmf,EAAAjV,gBACAqoD,KAAA,GAEAvjG,KAAAiG,QAAAi1D,aAAAlC,UAAApvD,EAAA8a,MAAAqsB,QACA2yD,EAAA95F,EAAA8oC,SACAzB,IAAAF,IAAA2yD,EAAAh/E,MAAAqsB,IACA2yD,EAAAzyD,IAAAD,OAAAhxC,KAAAiG,QAAA2xC,QAAA8rD,EAAAh/E,MAAAqsB,KAAA1vC,OACArB,KAAA2jG,yBAAAL,EAAAI,EAAAr6F,EAAA,qBAAA8mD,EAAA,KAAAozC,IAEAvjG,KAAA6iG,IAAAx5F,EAAA,+BAAAd,EAAA,kBAAqF+J,EAAA,WAAuBnF,EAAA,OAAoBo2F,GAAA,KAGhI,GAAAvjG,KAAAiG,QAAAi1D,aAAAlC,UAAApvD,EAAAqnC,IAAAF,KAAA,CACA,IAAA2yD,KAAA95F,EAAA8oC,SACAhuB,MAAAqsB,IAAA2yD,EAAAzyD,IAAAF,IACA2yD,EAAAh/E,MAAAssB,OAAA,EACAhxC,KAAA2jG,yBAAAL,EAAAI,EAAAr6F,EAAA,YAAA8mD,EAAA,KAAAozC,OACO,CACPjxF,EAAAtS,KAAA+iG,QAAAn5F,EAAAqnC,IAAAF,IAAAof,GACA,IAAA3nD,EAAAoB,EAAAqnC,IAAAD,OAAAmf,EAAAjV,eACAl7C,KAAA6iG,IAAAx5F,EAAA,sBAAAd,EAAA,YAA+DC,EAAA,UAA2B8J,EAAA,WAAuB/H,EAAA,OAA4Bg5F,GAAA,KAI7I,MADAh7F,GAAAqB,EAAAqnC,IAAAF,IAAAnnC,EAAA8a,MAAAqsB,IAAA,GAAAof,EAAA1L,aACA,IACAnyC,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAA,EAAAof,GACA,IAAAyzC,GAAAh6F,EAAA8a,MAAAssB,OAAA,MAAApnC,EAAAqnC,IAAAD,OAAA,KACAhxC,KAAA6iG,IAAAx5F,GAAAu6F,EAAA,UAAAA,EAAA,cAAAr7F,EAAA,kBAA2G+J,EAAA,WAAuB/H,EAAA,OAA4Bg5F,GAAA,OAG9JvjG,KAAAuzE,qBAAA,SAAA+vB,EAAA15F,EAAAP,EAAA8mD,EAAAjpC,EAAAq8E,GACA,GAAAvjG,KAAAiG,QAAAi1D,aAAAlC,UAAApvD,EAAA8a,MAAAqsB,KAAA,OAAA/wC,KAAA2jG,yBAAAL,EAAA15F,EAAAP,EAAA8mD,EAAAjpC,EAAAq8E,GACA,IAAAh7F,EAAA4nD,EAAA1L,WACAj8C,GAAAoB,EAAAqnC,IAAAD,QAAA9pB,GAAA,GAAAtd,EAAA8a,MAAAssB,QAAAmf,EAAAjV,eACA5oC,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACAhjD,EAAAnN,KAAA0hG,SAAA93F,EAAA8a,MAAAssB,OAAAmf,EAAAjV,eACAl7C,KAAA6iG,IAAAx5F,EAAA,UAAAd,EAAA,YAA+CC,EAAA,UAA2B8J,EAAA,WAAuBnF,EAAA,OAAyBo2F,GAAA,MAG1HvjG,KAAA2jG,yBAAA,SAAAL,EAAA15F,EAAAP,EAAA8mD,EAAAjpC,EAAAq8E,GACA,IAAAh7F,EAAA4nD,EAAA1L,WACAnyC,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACA5lD,EAAAvK,KAAA0hG,SACA1hG,KAAAiG,QAAAi1D,aAAAO,cAAA7xD,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,QACAvuC,QAAA,SAAAoD,GACA7F,KAAA6iG,IAAAx5F,EAAA,UAAAd,EAAA,YAAiD1C,EAAA2C,OAAA0e,GAAA,aAA0D5U,EAAA,YAAuB/H,EAAA1E,EAAAsH,MAAA,OAA+Co2F,GAAA,MAC1KvjG,OAGPA,KAAAgjG,mBAAA,SAAAM,EAAA15F,EAAAP,EAAA8mD,EAAAozC,GACA,IAAAjxF,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACA5nD,EAAA4nD,EAAA1L,WACA76C,EAAA8a,MAAAqsB,KAAAnnC,EAAAqnC,IAAAF,MAAAxoC,GAAAvI,KAAA+iG,QAAAn5F,EAAAqnC,IAAAF,IAAAof,GAAA79C,GACAtS,KAAA6iG,IAAAx5F,EAAA,UAAAd,EAAA,UAA+C+J,EAAA,sBAA2CixF,GAAA,MAG1FvjG,KAAAijG,qBAAA,SAAAK,EAAA15F,EAAAP,EAAA8mD,EAAAozC,GACA,IAAAjxF,EAAAtS,KAAA+iG,QAAAn5F,EAAA8a,MAAAqsB,IAAAof,GACA5nD,EAAA4nD,EAAA1L,WACAzkD,KAAA6iG,IAAAx5F,EAAA,UAAAd,EAAA,UAA+C+J,EAAA,sBAA2CixF,GAAA,QAEvFjiG,KAAAohG,EAAA9hG,WACHa,EAAAihG,WAEA1gG,IAAAsM,OAAA,8IAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,cAEAgzC,EAAAhzC,EAAA,cAEAizC,EAAAjzC,EAAA,eAEAg9F,EAAAh9F,EAAA,WAAAg9F,MAEA3wF,EAAArM,EAAA,wBAAAqM,aAEAq1F,EAAA,SAAArD,GACAxgG,KAAAm1C,MACAn1C,KAAAwgC,QAAAxgC,KAAAm1C,IAAA/qC,cAAA,OACApK,KAAAwgC,QAAAz9B,UAAA,2BACAy9F,EAAA91F,YAAA1K,KAAAwgC,SACAxgC,KAAA8jG,eAAA9jG,KAAA8jG,eAAAnhG,KAAA3C,MACAA,KAAA8vE,OAAA,IAAAqvB,EAAAn/F,KAAAwgC,WAGA,WACAjyB,EAAAkB,UAAAzP,KAAAwO,GACAxO,KAAA+jG,SAAA,OACA/jG,KAAAgkG,YAAA,OACAhkG,KAAAikG,cAAA,OACAjkG,KAAAkkG,SAAAlkG,KAAAgkG,YACAhkG,KAAAmkG,SAAA,SAEAnkG,KAAAokG,WAAA,OACApkG,KAAA0hG,SAAA,EACA1hG,KAAA64C,gBAAA,IAEA74C,KAAA8jG,eAAA,WACA,IAAA5jE,EAAAlgC,KAAAiG,QAAAi6B,IAEAgkE,EADA,MAAAhkE,EAAA+vC,uBAAA,WAAA/vC,EAAAswC,iBACAxwE,KAAAgkG,YAAAhkG,KAAAikG,cAEA,GAAAjkG,KAAAkkG,YAEA,OADAlkG,KAAAkkG,YACA,GAIAlkG,KAAA2iG,WAAA,SAAAp4F,GACAvK,KAAA0hG,SAAAn3F,EACAvK,KAAAwgC,QAAAl2B,MAAA+5F,OAAA,KAAA95F,EAAA,MAGAvK,KAAAskG,cAAA,WACA,OAAAtkG,KAAAukG,aAAAhqC,eAAAhyD,QAAA,GAGAvI,KAAA4lF,kBAAA,WACA,OAAA5lF,KAAAukG,aAAAhqC,eAAA/xD,OAAA,GAGAxI,KAAAylF,gBAAA,SAAA+e,GACAxkG,KAAAukG,aAAAC,EACAxkG,KAAAukG,aAAAj/F,GAAA,+BAAA+Q,GACArW,KAAAgiD,QAAA,sBAAA3rC,IACO1T,KAAA3C,OACPA,KAAAykG,oBAGAzkG,KAAA0kG,oBAAA,WACA1kG,KAAAukG,aAAAG,uBAGA1kG,KAAAykG,iBAAA,WACA,OAAAzkG,KAAA2kG,sBAAA3kG,KAAAukG,aAAAE,oBAGAzkG,KAAA+R,WAAA,SAAA9L,GACAjG,KAAAiG,UACAA,GAAAjG,KAAA4kG,qBAGA5kG,KAAAq4D,gBAAA,EAEAr4D,KAAA06D,kBAAA,SAAArC,GACA,OAAAr4D,KAAAq4D,oBACAr4D,KAAAq4D,iBACAr4D,KAAA4kG,qBACA,IAGA5kG,KAAAu7F,qBAAA,EAEAv7F,KAAAo0F,uBAAA,SAAAnyD,GACA,OAAAjiC,KAAAu7F,qBAAAt5D,IACAjiC,KAAAu7F,oBAAAt5D,EACAjiC,KAAA4kG,qBACA,IAGA5kG,KAAA6kG,YAAA,GAEA7kG,KAAAyvF,gBAAAzvF,KAAA4kG,kBAAA,WACA,IAAAj5F,EAAA3L,KAAAiG,QAAA8K,aACA/Q,KAAA2L,UAGA,IAFA,IAAAm5F,EAAA9kG,KAAA6kG,YAAA,IAEA3jG,EAAA,EAAqBA,EAAAyK,EAAA,EAAiBzK,IAAA,CACtC,GAAAlB,KAAAq4D,gBACA0sC,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACArH,UAAA,kCACAgiG,EAAA16F,YAAA+qC,EAAA7B,aAAAvzC,KAAAmkG,SAAAjjG,GACA4jG,EAAAl3F,KAAAm3F,QAEAD,EAAAl3F,KAAA5N,KAAAm1C,IAAAxV,eAAAyV,EAAA7B,aAAA,IAAAryC,GAAAlB,KAAAwgC,UAIA,GAAAxgC,KAAAu7F,oBAAA,CACAv7F,KAAAglG,eAAA,mBACA,IAmBAD,EAnBAhiG,EAAA,mBACAkiG,EAAA,GACAC,EAAA,GAEA,GAAAllG,KAAAq4D,eAAA,CACAt1D,GAAA,iBACAkiG,EAAA,uBACAC,EAAA,qBACA,IAAAC,EAAA/vD,EAAA7B,aAAAvzC,KAAAokG,WAAApkG,KAAA2L,SACAy5F,EAAAhwD,EAAA7B,aAAAvzC,KAAAmkG,SAAAnkG,KAAA2L,cAGAy5F,EADAD,EAAA/vD,EAAA7B,aAAA,IAAAvzC,KAAA2L,UAIAo5F,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACArH,YAAAkiG,EACAF,EAAA16F,YAAA86F,EACAnlG,KAAA6kG,YAAA,KAAAE,GACAA,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACArH,YAAAmiG,EACAH,EAAA16F,YAAA+6F,EACAplG,KAAA6kG,YAAA,MAAAE,IAIA/kG,KAAAuxF,YAAA,SAAAphC,EAAA9d,EAAAC,GACA,GAAAtyC,KAAAmwD,OAAA7d,SAAA6d,EAAA7d,SAAAtyC,KAAAmwD,OAAA9d,UAAA8d,EAAA9d,SACA,OAAAryC,KAAAqzE,OAAAljB,GAGAnwD,KAAAmwD,SAMA,IALA,IAAA2iB,EAAAv3D,KAAA3J,IAAAygC,EAAA8d,EAAA9d,UACAe,EAAA73B,KAAA5J,IAAA2gC,EAAA6d,EAAA7d,SACA+yD,EAAArlG,KAAAwgC,QAAA0hE,WACAoD,EAAA,EAEAv0D,EAAAof,EAAA9d,SAAqCtB,EAAA+hC,EAAa/hC,IAAA,CAGlD,GAFAuuB,EAAAt/D,KAAAiG,QAAAs5D,YAAAxuB,GAEA,CACA,GAAAuuB,EAAAyU,YAAAjB,GAAA,CACAA,EAAAxT,EAAA56C,MAAAqsB,IACA,MAEAA,EAAAuuB,EAAAruB,IAAAF,IAIAu0D,IAQA,IALA,IAEAhmC,EAFAimC,GAAA,EAGAhlB,GAFAxvC,EAAA+hC,GACAxT,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,IACAuuB,EAAA56C,MAAAqsB,IAAA+6B,KAGA/6B,EAAAwvC,IACAxvC,EAAAuuB,EAAAruB,IAAAF,IAAA,EAEAwvC,GADAjhB,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,EAAAuuB,IACAA,EAAA56C,MAAAqsB,IAAA+6B,OAGA/6B,EAAAqC,IAPA,CAQA,IAAAoyD,EAAAH,EAAAC,KAEA,GAAAE,EAAA,CACAxlG,KAAAm1C,IAAA5U,eAAAilE,GACAxlG,KAAAylG,YAAAD,EAAAz0D,KAAAwvC,GAAAjhB,GACAimC,IAAAC,EAAAl7F,MAAAgI,IAAAtS,KAAA8vE,OAAA+vB,eAAA9uD,EAAAof,EAAAnwD,KAAAiG,SAAA,MACA,IAAAsC,EAAA4nD,EAAA1L,WAAAzkD,KAAAiG,QAAAq+E,aAAAvzC,GAAA,KAEAy0D,EAAAl7F,MAAA/B,YACAg9F,GAAA,EACAC,EAAAl7F,MAAA/B,UAIAwoC,IAGA,GAAAw0D,EACA,KAAAD,EAAAtlG,KAAA8vE,OAAAuvB,MAAAh+F,QAAA,CACA,IAAA6+F,EAAAlgG,KAAA8vE,OAAAuvB,MAAAiG,KACApF,EAAA1/D,QAAAl2B,MAAAgI,IAAAtS,KAAA8vE,OAAA+vB,eAAAK,EAAAnvD,IAAAof,EAAAnwD,KAAAiG,SAAA,OAKAjG,KAAAgiG,YAAA,SAAA7xC,GACA,IAAAwvC,EAAA3/F,KAAAmwD,OAEA,GADAnwD,KAAAmwD,SACAnwD,KAAA8vE,OAAA4vB,YAAAC,EAAAxvC,GAAA,OAAAnwD,KAAAqzE,OAAAljB,GACAnwD,KAAA8vE,OAAA0vB,cAAArvC,GACA,IAAA7d,EAAA6d,EAAA7d,QACA4uD,EAAAvB,IAAArtD,SAAA,EACA,IAAAqtD,GAAAuB,EAAA/wC,EAAA9d,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,GAAA7d,EAAAqtD,EAAAttD,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,IAAAwvC,KAAArtD,QAAA6d,EAAA9d,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,GAAAA,EAAA7d,QAAAqtD,EAAAttD,SAAA,OAAAryC,KAAAqzE,OAAAljB,GACA,GAAAwvC,EAAAttD,SAAA8d,EAAA9d,SAAA,QAAAtB,EAAA/wC,KAAAiG,QAAA6wE,kBAAA6oB,EAAAttD,SAAA8d,EAAA9d,SAAA,GAAuItB,EAAA,EAASA,IAChJ/wC,KAAA8vE,OAAAvoD,QAEA,GAAAo4E,EAAArtD,QAAA6d,EAAA7d,QAAA,IAAAvB,EAAA/wC,KAAAiG,QAAA6wE,kBAAA3mB,EAAA7d,QAAA,EAAAqtD,EAAArtD,SAAmIvB,EAAA,EAASA,IAC5I/wC,KAAA8vE,OAAA/4D,MAGAo5C,EAAA9d,SAAAstD,EAAAttD,UACAryC,KAAA8vE,OAAAv2D,QAAAvZ,KAAA0lG,qBAAAv1C,IAAA9d,SAAAstD,EAAAttD,SAAA,IAGA8d,EAAA7d,QAAAqtD,EAAArtD,SACAtyC,KAAA8vE,OAAAliE,KAAA5N,KAAA0lG,qBAAAv1C,EAAAwvC,EAAArtD,QAAA,EAAA6d,EAAA7d,WAIAtyC,KAAA0lG,qBAAA,SAAAv1C,EAAA9d,EAAAC,GAMA,IALA,IAAA6tD,EAAA,GACApvD,EAAAsB,EACAitB,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,GACAwvC,EAAAjhB,IAAA56C,MAAAqsB,IAAA+6B,IAGA/6B,EAAAwvC,IACAxvC,EAAAuuB,EAAAruB,IAAAF,IAAA,EAEAwvC,GADAjhB,EAAAt/D,KAAAiG,QAAA4wE,gBAAA9lC,EAAAuuB,IACAA,EAAA56C,MAAAqsB,IAAA+6B,OAGA/6B,EAAAuB,IAPA,CAQA,IAAA70B,EAAAzd,KAAA8vE,OAAAuwB,WAAAtvD,EAAAof,EAAAnwD,KAAAiG,SACA0/F,EAAAloF,EAAA+iB,QACAxgC,KAAAm1C,IAAA5U,eAAAolE,GACAxwD,EAAA1S,SAAAkjE,EAAAr7F,MAAA,SAAAtK,KAAA8vE,OAAAkwB,kBAAAjvD,EAAAof,EAAAnwD,KAAAiG,SAAA,MACAkvC,EAAA1S,SAAAkjE,EAAAr7F,MAAA,MAAAtK,KAAA8vE,OAAA+vB,eAAA9uD,EAAAof,EAAAnwD,KAAAiG,SAAA,MACAjG,KAAAylG,YAAAE,EAAA50D,KAAAwvC,GAAAjhB,GAEAt/D,KAAA4lG,iBACAD,EAAA5iG,UAAA,iBAEA4iG,EAAA5iG,UAAA,WAGAo9F,EAAAvyF,KAAA6P,GACAszB,IAGA,OAAAovD,GAGAngG,KAAAqzE,OAAA,SAAAljB,GACAnwD,KAAA8vE,OAAA0vB,cAAArvC,GACAnwD,KAAAmwD,SAKA,IAJA,IAAA9d,EAAA8d,EAAA9d,SACAC,EAAA6d,EAAA7d,QACA9kC,EAAAxN,KAAA8vE,OAEAtiE,EAAAg1C,aACAh1C,EAAAuJ,MAGAvJ,EAAAI,KAAA5N,KAAA0lG,qBAAAv1C,EAAA9d,EAAAC,KAGAtyC,KAAA6lG,WAAA,CACA98F,MAAA,EACA+8F,QAAA,EACAC,QAAA,GAGA/lG,KAAAgmG,aAAA,SAAAxmE,EAAA6kD,EAAAvhB,EAAAphE,GAOA,IANA,IAGA8Q,EAFAu8C,EAAA,0jBACAk3C,EAAAjmG,KAAAm1C,IAAAxU,eAAA3gC,KAAAwgC,SAEAt/B,EAAA,EAEAsR,EAAAu8C,EAAAhoD,KAAArF,IAAA,CACA,IAAA0rE,EAAA56D,EAAA,GACA0zF,EAAA1zF,EAAA,GACA2zF,EAAA3zF,EAAA,GACA4zF,EAAA5zF,EAAA,GACA6zF,EAAA7zF,EAAA,GACA,GAZAxS,KAYAq4D,iBAAA6tC,EAAA,CACA,IAAA35B,EAAArrE,GAAAsR,EAAA5K,MAAAlG,EAAA2kB,MAAAnlB,EAAAsR,EAAA5K,OAAA,GAOA,GANA1G,EAAAsR,EAAA5K,MAAA4K,EAAA,GAAAnR,OAEAkrE,GACA05B,EAAAv7F,YAAA1K,KAAAm1C,IAAAxV,eAAA4sC,EAAAvsE,KAAAwgC,UAGA4sC,EAAA,CACA,IAAAzhE,EArBA3L,KAqBAiG,QAAAi0D,iBAAAmqB,EAAA7xE,EAAA5K,OACAq+F,EAAAv7F,YAtBA1K,KAsBA6kG,YAAAl5F,GAAA26F,WAAA,IACAjiB,GAAA14E,EAAA,OACS,GAAAu6F,EAAA,CACT,GAzBAlmG,KAyBAq4D,gBACA0sC,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACArH,UAAA,oCACAgiG,EAAA16F,YAAA+qC,EAAA7B,aA5BAvzC,KA4BAokG,WAAA8B,EAAA7kG,QACA4kG,EAAAv7F,YAAAq6F,QAEAkB,EAAAv7F,YAAA1K,KAAAumG,IAAA5mE,eAAAumE,EAAAlmG,KAAAwgC,eAES,GAAA2lE,EAAA,EACTpB,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACArH,UAAA,gDACAgiG,EAAA16F,YAAA+qC,EAAA7B,aApCAvzC,KAoCAokG,WAAA+B,EAAA9kG,QACA4kG,EAAAv7F,YAAAq6F,QACS,GAAAqB,EAAA,CACT/hB,GAAA,GACA0gB,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACAE,MAAA9B,MAAA,EAzCAxI,KAyCAmwD,OAAAjV,eAAA,KACA6pD,EAAAhiG,UA1CA/C,KA0CAq4D,eAAA,sDACA0sC,EAAA16F,YA3CArK,KA2CAq4D,eA3CAr4D,KA2CAokG,WAAAgC,EACAH,EAAAv7F,YAAAq6F,QACS,GAAAsB,EAAA,CACThiB,GAAA,GACA0gB,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,SACAE,MAAA9B,MAAA,EAhDAxI,KAgDAmwD,OAAAjV,eAAA,KACA6pD,EAAAhiG,UAAA,UACAgiG,EAAA16F,YAAAg8F,EACAJ,EAAAv7F,YAAAq6F,KAMA,GAFAkB,EAAAv7F,YAAA1K,KAAAm1C,IAAAxV,eAAAz+B,EAAAQ,EAAA2kB,MAAAnlB,GAAAQ,EAAA1B,KAAAwgC,UAEAxgC,KAAA6lG,WAAA/iC,EAAAp5D,MAQA81B,EAAA90B,YAAAu7F,OARA,CACA,IAAAjlE,EAAA,OAAA8hC,EAAAp5D,KAAA6K,QAAA,eACAwwF,EAAA/kG,KAAAm1C,IAAA/qC,cAAA,QACA,QAAA04D,EAAAp5D,OAAAq7F,EAAAz6F,MAAA9B,MAAAs6D,EAAAphE,MAAAL,OAAArB,KAAAmwD,OAAAjV,eAAA,MACA6pD,EAAAhiG,UAAAi+B,EACA+jE,EAAAr6F,YAAAu7F,GACAzmE,EAAA90B,YAAAq6F,GAKA,OAAA1gB,EAAA3iF,EAAAL,QAGArB,KAAAwmG,kBAAA,SAAAhnE,EAAA99B,EAAAkQ,GACA,IAAA60F,EAAA/kG,EAAA0+D,OAAApgE,KAAAglG,gBACA,GAAAyB,GAAA,GAAAA,GAAA70F,EAAA,OAAAlQ,EAEA,QAAAA,EAAA,IAIA,IAFA,IAAA8xC,GADAizD,KAAAzmG,KAAA2L,SACA3L,KAAA2L,QAEAzK,EAAA,EAAuBA,EAAAsyC,EAAWtyC,IAClCs+B,EAAA90B,YAAA1K,KAAA6kG,YAAA,KAAAyB,WAAA,IAGA,OAAA5kG,EAAA04D,OAAAqsC,GACO,SAAA/kG,EAAA,IACP,IAAAR,EAAA,EAAuBA,EAAAulG,EAAUvlG,IACjCs+B,EAAA90B,YAAA1K,KAAA6kG,YAAA,MAAAyB,WAAA,IAGA,OAAA5kG,EAAA04D,OAAAqsC,GAGA,OAAA/kG,GAGA1B,KAAA0mG,mBAAA,SAAAlnE,GACA,IAAAmmE,EAAA3lG,KAAAm1C,IAAA/qC,cAAA,OAGA,OAFAu7F,EAAA5iG,UAAA,WACA4iG,EAAAr7F,MAAA/B,OAAAvI,KAAAmwD,OAAA1L,WAAA,KACAkhD,GAGA3lG,KAAA2mG,mBAAA,SAAAnnE,EAAAnc,EAAAjV,GACA,IAAAiP,EAAA,EACA3V,EAAA,EACAk/F,EAAAx4F,EAAA,GACAi2E,EAAA,EACAshB,EAAA3lG,KAAA0mG,qBACAlnE,EAAA90B,YAAAi7F,GAEA,QAAAzkG,EAAA,EAAqBA,EAAAmiB,EAAAhiB,OAAmBH,IAAA,CACxC,IAAA4hE,EAAAz/C,EAAAniB,GACAQ,EAAAohE,EAAAphE,MAEA,MAAAR,GAAAlB,KAAAu7F,oBAAA,CAGA,GAFAl+E,EAAA3b,EAAAL,SACAK,EAAA1B,KAAAwmG,kBAAAb,EAAAjkG,EAAAklG,IACA,SACAvpF,GAAA3b,EAAAL,OAGA,GAAAgc,EAAA3b,EAAAL,OAAAulG,EACAviB,EAAArkF,KAAAgmG,aAAAL,EAAAthB,EAAAvhB,EAAAphE,GACA2b,GAAA3b,EAAAL,WACS,CACT,KAAAgc,EAAA3b,EAAAL,QAAAulG,GACAviB,EAAArkF,KAAAgmG,aAAAL,EAAAthB,EAAAvhB,EAAAphE,EAAAwX,UAAA,EAAA0tF,EAAAvpF,IACA3b,IAAAwX,UAAA0tF,EAAAvpF,GACAA,EAAAupF,EACAjB,EAAA3lG,KAAA0mG,qBACAlnE,EAAA90B,YAAAi7F,GACAA,EAAAj7F,YAAA1K,KAAAm1C,IAAAxV,eAAAyV,EAAA7B,aAAA,OAAAnlC,EAAA4rD,QAAAh6D,KAAAwgC,UAEA6jD,EAAA,EACAuiB,EAAAx4F,IAFA1G,IAEA+Q,OAAAC,UAGA,GAAAhX,EAAAL,SACAgc,GAAA3b,EAAAL,OACAgjF,EAAArkF,KAAAgmG,aAAAL,EAAAthB,EAAAvhB,EAAAphE,KAKA0M,IAAA/M,OAAA,GAAArB,KAAA64C,iBAAA74C,KAAA6mG,uBAAAlB,EAAAthB,EAAA,aAGArkF,KAAA8mG,kBAAA,SAAAtnE,EAAAnc,GACA,IAAAghE,EAAA,EACAvhB,EAAAz/C,EAAA,GACA3hB,EAAAohE,EAAAphE,MACA1B,KAAAu7F,sBAAA75F,EAAA1B,KAAAwmG,kBAAAhnE,EAAA99B,IACAA,IAAA2iF,EAAArkF,KAAAgmG,aAAAxmE,EAAA6kD,EAAAvhB,EAAAphE,IAEA,QAAAR,EAAA,EAAqBA,EAAAmiB,EAAAhiB,OAAmBH,IAAA,CAGxC,GAAAmjF,GADA3iF,GADAohE,EAAAz/C,EAAAniB,IACAQ,OACAL,OAAArB,KAAA64C,gBAAA,OAAA74C,KAAA6mG,uBAAArnE,EAAA6kD,EAAAvhB,EAAAphE,GACA2iF,EAAArkF,KAAAgmG,aAAAxmE,EAAA6kD,EAAAvhB,EAAAphE,KAIA1B,KAAA6mG,uBAAA,SAAArnE,EAAA6kD,EAAAvhB,EAAAphE,EAAAq/C,GACA+hB,GAAA9iE,KAAAgmG,aAAAxmE,EAAA6kD,EAAAvhB,EAAAphE,EAAA2kB,MAAA,EAAArmB,KAAA64C,gBAAAwrC,IACA,IAAA0iB,EAAA/mG,KAAAm1C,IAAA/qC,cAAA,QACA28F,EAAAhkG,UAAA,gDACAgkG,EAAA18F,YAAA02C,EAAA,kCACAvhB,EAAA90B,YAAAq8F,IAGA/mG,KAAAylG,YAAA,SAAAjmE,EAAAuR,EAAAuuB,GAEA,GADAA,GAAA,GAAAA,MAAAt/D,KAAAiG,QAAAs5D,YAAAxuB,IACAuuB,EAAA,IAAAj8C,EAAArjB,KAAAgnG,mBAAAj2D,EAAAuuB,QAAwEj8C,EAAArjB,KAAAiG,QAAA6gE,UAAA/1B,GACxE,IAAAk2D,EAAAznE,EAEA,GAAAnc,EAAAhiB,OAAA,CACA,IAAA+M,EAAApO,KAAAiG,QAAA4+E,gBAAA9zC,GAEA,GAAA3iC,KAAA/M,OAAA,CACArB,KAAA2mG,mBAAAnnE,EAAAnc,EAAAjV,GACA64F,EAAAznE,EAAA6jE,cACS,CACT4D,EAAAznE,EAEAx/B,KAAA4lG,mBACAqB,EAAAjnG,KAAA0mG,qBACAlnE,EAAA90B,YAAAu8F,IAGAjnG,KAAA8mG,kBAAAG,EAAA5jF,SAEOrjB,KAAA4lG,mBACPqB,EAAAjnG,KAAA0mG,qBACAlnE,EAAA90B,YAAAu8F,IAGA,GAAAjnG,KAAAq4D,gBAAA4uC,EAAA,CACA3nC,IAAAvuB,EAAAuuB,EAAAruB,IAAAF,KACA,IAAAm2D,EAAAlnG,KAAAm1C,IAAA/qC,cAAA,QACA88F,EAAAnkG,UAAA,kCACAmkG,EAAA78F,YAAA0mC,GAAA/wC,KAAAiG,QAAAu8C,YAAA,EAAAxiD,KAAA+jG,SAAA/jG,KAAAkkG,SACA+C,EAAAv8F,YAAAw8F,KAIAlnG,KAAAgnG,mBAAA,SAAAj2D,EAAAuuB,GACA,IAAAr5D,EAAAjG,KAAAiG,QACAkhG,EAAA,GAsCA,IAAA9jF,EAAApd,EAAA6gE,UAAA/1B,GAYA,OAXAuuB,EAAA0U,KAAA,SAAA9vE,EAAA6sC,EAAAC,EAAAqnC,EAAAnE,GACA,MAAAhwE,EACAijG,EAAAv5F,KAAA,CACAlE,KAAA,OACAhI,MAAAwC,KAGAgwE,IAAA7wD,EAAApd,EAAA6gE,UAAA/1B,IACA1tB,EAAAhiB,QA7CA,SAAAgiB,EAAAiV,EAAAy5C,GAIA,IAHA,IAAA9hE,EAAA,EACAorD,EAAA,EAEAA,EAAAh4C,EAAApT,GAAAvO,MAAAL,OAAAi3B,GAGA,GAFA+iC,GAAAh4C,EAAApT,GAAAvO,MAAAL,SACA4O,GACAoT,EAAAhiB,OAAA,OAcA,IAXAg6D,GAAA/iC,KACA52B,EAAA2hB,EAAApT,GAAAvO,MAAAwX,UAAAof,EAAA+iC,IACAh6D,OAAA0wE,EAAAz5C,IAAA52B,IAAAwX,UAAA,EAAA64D,EAAAz5C,IACA6uE,EAAAv5F,KAAA,CACAlE,KAAA2Z,EAAApT,GAAAvG,KACAhI,UAEA25D,EAAA/iC,EAAA52B,EAAAL,OACA4O,GAAA,GAGAorD,EAAA0W,GAAA9hE,EAAAoT,EAAAhiB,QAAA,CACA,IAAAK,KAAA2hB,EAAApT,GAAAvO,OAEAL,OAAAg6D,EAAA0W,EACAo1B,EAAAv5F,KAAA,CACAlE,KAAA2Z,EAAApT,GAAAvG,KACAhI,QAAAwX,UAAA,EAAA64D,EAAA1W,KAEW8rC,EAAAv5F,KAAAyV,EAAApT,IAEXorD,GAAA35D,EAAAL,OACA4O,GAAA,GAaAm3F,CAAA/jF,EAAAg1D,EAAArnC,KAEOsuB,EAAAruB,IAAAF,IAAA/wC,KAAAiG,QAAA2xC,QAAA0nB,EAAAruB,IAAAF,KAAA1vC,QACP8lG,GAGAnnG,KAAA4lG,eAAA,WACA,OAAA5lG,KAAAiG,QAAAqL,kBAGAtR,KAAA4I,QAAA,eACGtH,KAAAuiG,EAAAjjG,WACHa,EAAAoiG,SAEA7hG,IAAAsM,OAAA,yEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAA8mC,EAAAhzC,EAAA,cAEAklG,EAAA,SAAA7G,GACAxgG,KAAAwgC,QAAA2U,EAAA/qC,cAAA,OACApK,KAAAwgC,QAAAz9B,UAAA,6BACAy9F,EAAA91F,YAAA1K,KAAAwgC,SACAxgC,KAAAsnG,WAAA,EACAtnG,KAAA45F,YAAA,EACA55F,KAAAunG,cAAA,IACAvnG,KAAAwnG,gBAAA,EACAxnG,KAAAynG,QAAA,GACAznG,KAAAqN,OAAArN,KAAA0nG,YACAvyD,EAAArU,YAAA9gC,KAAAwgC,QAAA,sBACAxgC,KAAA2nG,eAAA3nG,KAAA4nG,eAAAjlG,KAAA3C,QAGA,WACAA,KAAA4nG,eAAA,SAAA7nE,GAGA,IAFA,IAAA0nE,EAAAznG,KAAAynG,QAEAvmG,EAAAumG,EAAApmG,OAAkCH,KAClCi0C,EAAA1S,SAAAglE,EAAAvmG,GAAAoJ,MAAA,UAAAy1B,EAAA,SAIA//B,KAAA6nG,mBAAA,WAGA,IAFA,IAAAJ,EAAAznG,KAAAynG,QAEAvmG,EAAAumG,EAAApmG,OAAkCH,KAClCumG,EAAAvmG,GAAAoJ,MAAAw9F,kBAAA9nG,KAAAunG,cAAA,KAGA9wE,WAAA,WACA0e,EAAArU,YAAA9gC,KAAAwgC,QAAA,yBACO79B,KAAA3C,QAGPA,KAAA+nG,kBAAA,WACA5yD,EAAApU,eAAA/gC,KAAAwgC,QAAA,yBAGAxgC,KAAA0hG,SAAA,EAEA1hG,KAAA2iG,WAAA,SAAAp4F,GACAvK,KAAA0hG,SAAAn3F,GAGAvK,KAAA+R,WAAA,SAAA9L,GACAjG,KAAAiG,WAGAjG,KAAAwlD,YAAA,SAAAwiD,GACAA,GAAAhoG,KAAA45F,aACA55F,KAAA45F,WAAAoO,EACAhoG,KAAAioG,iBAIAjoG,KAAAkoG,iBAAA,SAAAX,GACAA,GAAAvnG,KAAAunG,gBACAvnG,KAAAunG,gBACAvnG,KAAAioG,iBAIAjoG,KAAA25F,kBAAA,SAAA6N,GACAA,GAAAxnG,KAAAwnG,iBACAxnG,KAAAwnG,iBACAryD,EAAAjU,YAAAlhC,KAAAwgC,QAAA,sBAAAgnE,GACAxnG,KAAA2nG,gBAAA,GACA3nG,KAAAioG,iBAIAjoG,KAAA0nG,UAAA,WACA,IAAA/3F,EAAAwlC,EAAA/qC,cAAA,OAIA,OAHAuF,EAAA5M,UAAA,aACA/C,KAAAwgC,QAAA91B,YAAAiF,GACA3P,KAAAynG,QAAA75F,KAAA+B,GACAA,GAGA3P,KAAAmoG,aAAA,WACA,GAAAnoG,KAAAynG,QAAApmG,OAAA,GACA,IAAAsO,EAAA3P,KAAAynG,QAAA1wF,MAEA,OADApH,EAAA2tB,WAAApzB,YAAAyF,GACAA,IAIA3P,KAAAmxF,WAAA,WACAnxF,KAAAsnG,WAAA,EACAnyD,EAAArU,YAAA9gC,KAAAwgC,QAAA,sBACAxgC,KAAAioG,gBAGAjoG,KAAAixF,WAAA,WACAjxF,KAAAsnG,WAAA,EACAnyD,EAAApU,eAAA/gC,KAAAwgC,QAAA,sBACAxgC,KAAAioG,gBAGAjoG,KAAAioG,aAAA,WACA,IAAA50B,EAAArzE,KAAA2nG,eAWA,GAVAliD,cAAAzlD,KAAAooG,YACA5xE,aAAAx2B,KAAAqoG,WACAroG,KAAA+nG,oBAEA/nG,KAAAwnG,gBACAryD,EAAApU,eAAA/gC,KAAAwgC,QAAA,uBAGA6yC,GAAA,GAEArzE,KAAA45F,YAAA55F,KAAAunG,eAAAvnG,KAAAsnG,UAWA,GANAtnG,KAAAwnG,gBACA/wE,WAAA,WACA0e,EAAArU,YAAA9gC,KAAAwgC,QAAA,wBACS79B,KAAA3C,OAGTm1C,EAAAxS,kBACA3iC,KAAA6nG,yBACO,CACP,IAAAS,EAAA,WACAtoG,KAAAqoG,UAAA5xE,WAAA,WACA48C,GAAA,IACW,GAAArzE,KAAAunG,gBACF5kG,KAAA3C,MAETA,KAAAooG,WAAA1iD,YAAA,WACA2tB,GAAA,GACAi1B,KACStoG,KAAAunG,eACTe,SAvBAtoG,KAAA+nG,qBA2BA/nG,KAAA0qD,iBAAA,SAAAlgD,EAAA+9F,GACA,IAAAvoG,KAAAmwD,SAAAnwD,KAAAiG,QAAA,OACAkH,KAAA,EACAmF,IAAA,GAEA9H,MAAAxK,KAAAiG,QAAAJ,UAAAg3D,aACA,IAAA30D,EAAAlI,KAAAiG,QAAA6sC,yBAAAtoC,GAGA,OACA2C,KAHAnN,KAAA0hG,UAAA1hG,KAAAiG,QAAAi1D,aAAAlC,UAAA9wD,EAAA6oC,IAAAvmC,EAAAumC,KAAA/wC,KAAAiG,QAAAi1D,aAAAE,WAAAlzD,EAAA8oC,QAAA9oC,EAAA8oC,OAAAhxC,KAAAmwD,OAAAjV,gBAIA5oC,KAHApK,EAAA6oC,KAAAw3D,EAAAvoG,KAAAmwD,OAAAsvC,eAAA,IAAAz/F,KAAAmwD,OAAA1L,aAOAzkD,KAAAwoG,eAAA,SAAAC,EAAAt4C,GACA,OAAAs4C,EAAAn2F,KAAA,GAAAm2F,EAAAn2F,IAAA69C,EAAAu4C,WAGA1oG,KAAAqzE,OAAA,SAAAljB,GACAnwD,KAAAmwD,SACA,IAAAwL,EAAA37D,KAAAiG,QAAA0iG,kBACAznG,EAAA,EACA0nG,EAAA,OAEA/zF,IAAA8mD,GAAA,IAAAA,EAAAt6D,SACAs6D,EAAA,EACAtuD,OAAA,QAIAnM,EAAA,UAAAC,EAAAw6D,EAAAt6D,OAA4CH,EAAAC,EAAOD,IAAA,CACnD,IAAAunG,EAAAzoG,KAAA0qD,iBAAAiR,EAAAz6D,GAAAmM,QAAA,GAEA,MAAAo7F,EAAAn2F,IAAA69C,EAAA5nD,OAAA4nD,EAAA76B,QAAAmzE,EAAAn2F,IAAA,IAAApR,EAAA,IAIA,IAAAs/B,EAAAxgC,KAAAynG,QAAAmB,MAAA5oG,KAAA0nG,YACAp9F,EAAAk2B,EAAAl2B,MAEAtK,KAAA6oG,WAUA7oG,KAAA6oG,WAAAroE,EAAAioE,EAAAt4C,EAAAwL,EAAAz6D,GAAAlB,KAAAiG,SATAjG,KAAAwoG,eAAAC,EAAAt4C,IAGAhb,EAAA1S,SAAAn4B,EAAA,mBACA6qC,EAAAlS,UAAAzC,EAAAioE,EAAAt7F,KAAAs7F,EAAAn2F,KACA6iC,EAAA1S,SAAAn4B,EAAA,QAAAiR,KAAA6nB,MAAA+sB,EAAAjV,gBAAA,MACA/F,EAAA1S,SAAAn4B,EAAA,SAAA6lD,EAAA1L,WAAA,OALAtP,EAAA1S,SAAAn4B,EAAA,mBAYA,KAAAtK,KAAAynG,QAAApmG,OAAAunG,GACA5oG,KAAAmoG,eAGA,IAAAzqB,EAAA19E,KAAAiG,QAAAkL,eACAnR,KAAA8oG,cAAAprB,GACA19E,KAAAw5F,UAAAiP,EACAzoG,KAAAioG,gBAGAjoG,KAAA6oG,WAAA,KAEA7oG,KAAA8oG,cAAA,SAAAprB,GACAA,GAAA19E,KAAA09E,YACA19E,KAAA09E,YACAA,EAAAvoC,EAAArU,YAAA9gC,KAAAwgC,QAAA,yBAA8E2U,EAAApU,eAAA/gC,KAAAwgC,QAAA,2BAI9ExgC,KAAA4I,QAAA,WACA68C,cAAAzlD,KAAAooG,YACA5xE,aAAAx2B,KAAAqoG,cAEG/mG,KAAA+lG,EAAAzmG,WACHa,EAAA4lG,WAEArlG,IAAAsM,OAAA,4HAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAgzC,EAAAhzC,EAAA,aAEA0G,EAAA1G,EAAA,eAEAqM,EAAArM,EAAA,uBAAAqM,aAIAu6F,EAAA,SAAAvpE,GACAx/B,KAAAwgC,QAAA2U,EAAA/qC,cAAA,OACApK,KAAAwgC,QAAAz9B,UAAA,8BAAA/C,KAAAgpG,YACAhpG,KAAA+hC,MAAAoT,EAAA/qC,cAAA,OACApK,KAAA+hC,MAAAh/B,UAAA,sBACA/C,KAAA+hC,MAAA13B,YAAA,OACArK,KAAAwgC,QAAA91B,YAAA1K,KAAA+hC,OACAvC,EAAA90B,YAAA1K,KAAAwgC,SACAxgC,KAAAipG,YAAA,GACAjpG,KAAAkpG,WAAA,EACArgG,EAAA0iC,YAAAvrC,KAAAwgC,QAAA,SAAAxgC,KAAAkG,SAAAvD,KAAA3C,OACA6I,EAAA0iC,YAAAvrC,KAAAwgC,QAAA,YAAA33B,EAAA8iB,kBAGA,WACApd,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAAipG,WAAA,SAAA3B,GACAtnG,KAAAwgC,QAAAl2B,MAAA23B,QAAAqlE,EAAA,UACAtnG,KAAAsnG,YACAtnG,KAAAmpG,MAAA,KAEG7nG,KAAAynG,EAAAnoG,WAEH,IAAAwoG,EAAA,SAAA5pE,EAAA96B,GACAqkG,EAAAznG,KAAAtB,KAAAw/B,GACAx/B,KAAAqmD,UAAA,EACArmD,KAAAqpG,aAAA,EACA3kG,EAAA4kG,gBAAAtpG,KAAAwI,MAAA2sC,EAAArT,eAAAtC,EAAAkB,eACA1gC,KAAA+hC,MAAAz3B,MAAA9B,MAAAxI,KAAAwgC,QAAAl2B,MAAA9B,OAAAxI,KAAAwI,OAAA,WACAxI,KAAAupG,UAAA,GAGAh7F,EAAA80B,SAAA+lE,EAAAL,GACA,WACA/oG,KAAAgpG,YAAA,KAEAhpG,KAAAkG,SAAA,WACA,IAAAlG,KAAAkpG,UAAA,CAGA,GAFAlpG,KAAAqmD,UAAArmD,KAAAwgC,QAAA6lB,UAEA,GAAArmD,KAAAmpG,MAAA,CACA,IAAA/+C,EAAApqD,KAAAwgC,QAAApuB,aAAApS,KAAAqpG,aACArpG,KAAAqmD,UAAArmD,KAAAqmD,WAAA,EAAA+D,IAAApqD,KAAAmpG,MAAA/+C,GAGApqD,KAAA6P,MAAA,UACA6G,KAAA1W,KAAAqmD,YAIArmD,KAAAkpG,WAAA,GAGAlpG,KAAAkhD,SAAA,WACA,OAAA3lC,KAAA3J,IAAA5R,KAAAsnG,UAAAtnG,KAAAwI,MAAA,EAAAxI,KAAAupG,WAAA,IAGAvpG,KAAAwpG,UAAA,SAAAjhG,GACAvI,KAAAwgC,QAAAl2B,MAAA/B,SAAA,MAGAvI,KAAAypG,eAAAzpG,KAAA0pG,gBAAA,SAAAnhG,GACAvI,KAAAqpG,aAAA9gG,EAEAA,EAnEA,OAoEAvI,KAAAmpG,MApEA,MAoEA5gG,EACAA,EArEA,OAsEO,GAAAvI,KAAAmpG,QACPnpG,KAAAmpG,MAAA,GAGAnpG,KAAA+hC,MAAAz3B,MAAA/B,SAAA,MAGAvI,KAAAw/E,aAAA,SAAAn5B,GACArmD,KAAAqmD,eACArmD,KAAAkpG,WAAA,EACAlpG,KAAAqmD,YACArmD,KAAAwgC,QAAA6lB,YAAArmD,KAAAmpG,SAGG7nG,KAAA8nG,EAAAxoG,WAEH,IAAA+oG,EAAA,SAAAnqE,EAAA96B,GACAqkG,EAAAznG,KAAAtB,KAAAw/B,GACAx/B,KAAA2/E,WAAA,EACA3/E,KAAAuI,OAAA7D,EAAA4kG,gBACAtpG,KAAA+hC,MAAAz3B,MAAA/B,OAAAvI,KAAAwgC,QAAAl2B,MAAA/B,QAAAvI,KAAAuI,QAAA,YAGAgG,EAAA80B,SAAAsmE,EAAAZ,GACA,WACA/oG,KAAAgpG,YAAA,KAEAhpG,KAAAkG,SAAA,WACAlG,KAAAkpG,YACAlpG,KAAA2/E,WAAA3/E,KAAAwgC,QAAAm/C,WAEA3/E,KAAA6P,MAAA,UACA6G,KAAA1W,KAAA2/E,cAIA3/E,KAAAkpG,WAAA,GAGAlpG,KAAAghD,UAAA,WACA,OAAAhhD,KAAAsnG,UAAAtnG,KAAAuI,OAAA,GAGAvI,KAAA4pG,SAAA,SAAAphG,GACAxI,KAAAwgC,QAAAl2B,MAAA9B,QAAA,MAGAxI,KAAA6pG,cAAA,SAAArhG,GACAxI,KAAA+hC,MAAAz3B,MAAA9B,QAAA,MAGAxI,KAAA8pG,eAAA,SAAAthG,GACAxI,KAAA+hC,MAAAz3B,MAAA9B,QAAA,MAGAxI,KAAA0/E,cAAA,SAAAC,GACA3/E,KAAA2/E,gBACA3/E,KAAAkpG,WAAA,EACAlpG,KAAA2/E,WAAA3/E,KAAAwgC,QAAAm/C,gBAGGr+E,KAAAqoG,EAAA/oG,WACHa,EAAAsnG,UAAAK,EAEA3nG,EAAAsoG,WAAAX,EAEA3nG,EAAAuoG,WAAAL,EAEAloG,EAAA2nG,aACA3nG,EAAAkoG,eAEA3nG,IAAAsM,OAAA,yEAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAxF,EAAA1G,EAAA,eAEA8nG,EAAA,SAAAC,EAAAr6D,GACA7vC,KAAAkqG,WACAlqG,KAAAmqG,SAAA,EACAnqG,KAAAmf,QAAA,EACAnf,KAAAoqG,gBAAA,EACApqG,KAAAqsB,OAAAwjB,GAAAxjB,OAEA,IAAA0oB,EAAA/0C,KAEAA,KAAAqqG,OAAA,SAAA/+D,GACAyJ,EAAAo1D,SAAA,EACA,IAAAhrF,EAAA41B,EAAA51B,QASA,GAPAA,IACAtW,EAAAynC,UAAA,KACAyE,EAAA51B,QAAA,EAEA41B,EAAAm1D,SAAA/qF,IAGA41B,EAAA51B,QAAA,CACA,GAAA41B,EAAAq1D,kBAAA,SAEAr1D,EAAAJ,gBAEAI,EAAAq1D,gBAAA,KAKA,WACApqG,KAAA20C,SAAA,SAAA21D,GACAtqG,KAAAmf,QAAAnf,KAAAmf,QAAAmrF,EAEAtqG,KAAAmf,UAAAnf,KAAAmqG,UACAthG,EAAA0nC,UAAAvwC,KAAAqqG,QACArqG,KAAAmqG,SAAA,IAIAnqG,KAAAiV,MAAA,SAAAq1F,GACA,IAAAnrF,EAAAnf,KAAAmf,QAEA,OADAnf,KAAAmf,QAAA,EACAA,KAEG7d,KAAA2oG,EAAArpG,WACHa,EAAAwoG,eAEAjoG,IAAAsM,OAAA,wKAAAnM,EAAAV,EAAA4M,GACA,IAAAE,EAAApM,EAAA,cAEAgzC,EAAAhzC,EAAA,cAEAizC,EAAAjzC,EAAA,eAEA0G,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEAqM,EAAArM,EAAA,wBAAAqM,aAGA+7F,EAAA,mBAAAC,eACAp2C,EAAA,IAEAq2C,EAAAhpG,EAAAgpG,YAAA,SAAAjK,GACAxgG,KAAA2P,GAAAwlC,EAAA/qC,cAAA,OACApK,KAAA0qG,sBAAA1qG,KAAA2P,GAAArF,OAAA,GACAtK,KAAAm6D,MAAAhlB,EAAA/qC,cAAA,OACApK,KAAA0qG,sBAAA1qG,KAAAm6D,MAAA7vD,OACAtK,KAAA2qG,aAAAx1D,EAAA/qC,cAAA,OACApK,KAAA0qG,sBAAA1qG,KAAA2qG,aAAArgG,OACAtK,KAAA2P,GAAAjF,YAAA1K,KAAAm6D,OACAn6D,KAAA2P,GAAAjF,YAAA1K,KAAA2qG,cACAnK,EAAA91F,YAAA1K,KAAA2P,IACA3P,KAAA2qG,aAAAlqE,UAAA2U,EAAA7B,aAAA,IAdA,KAeAvzC,KAAAu6D,eAAA,CACA/xD,MAAA,EACAD,OAAA,GAEAgiG,EAAAvqG,KAAA4qG,eAA0C5qG,KAAA0kG,wBAG1C,WACAn2F,EAAAkB,UAAAzP,KAAAwO,GACAxO,KAAAu6D,eAAA,CACA/xD,MAAA,EACAD,OAAA,GAGAvI,KAAA0qG,sBAAA,SAAApgG,EAAAugG,GACAvgG,EAAA9B,MAAA8B,EAAA/B,OAAA,OACA+B,EAAA6C,KAAA7C,EAAAgI,IAAA,MACAhI,EAAAwgG,WAAA,SACAxgG,EAAAE,SAAA,WACAF,EAAA6gB,WAAA,MAEAkU,EAAAhB,KAAA,EACA/zB,EAAA,yBAEAA,EAAAygG,KAAA,UAGAzgG,EAAA63B,SAAA0oE,EAAA,oBAGA7qG,KAAA0kG,oBAAA,SAAAn0F,GAGA,QAFAsE,IAAAtE,MAAAvQ,KAAAgrG,iBAEAz6F,IAAAvQ,KAAAu6D,eAAA/xD,QAAA+H,EAAA/H,OAAAxI,KAAAu6D,eAAAhyD,SAAAgI,EAAAhI,QAAA,CACAvI,KAAA2qG,aAAArgG,MAAA2gG,WAAA,OACA,IAAAC,EAAAlrG,KAAAgrG,gBACAhrG,KAAA2qG,aAAArgG,MAAA2gG,WAAA,GACAjrG,KAAAu6D,eAAAhqD,EACAvQ,KAAAmrG,UAAA/qG,OAAAS,OAAA,MACAb,KAAAorG,eAAAF,KAAA1iG,QAAA+H,EAAA/H,OAAA0iG,EAAA3iG,SAAAgI,EAAAhI,OAEAvI,KAAA6P,MAAA,uBACA6G,KAAAnG,MAKAvQ,KAAA4qG,aAAA,WACA,IAAAp3F,EAAAxT,KACAA,KAAAqrG,UAAA,IAAAh/E,OAAAm+E,eAAA,SAAAn0F,GACA,IAAA8kC,EAAA9kC,EAAA,GAAAi1F,YACA93F,EAAAkxF,oBAAA,CACAn8F,OAAA4yC,EAAA5yC,OACAC,MAAA2yC,EAAA3yC,MApEA,QAuEAxI,KAAAqrG,UAAAE,QAAAvrG,KAAA2qG,eAGA3qG,KAAAykG,iBAAA,WACA,GAAAzkG,KAAA2kG,uBAAA3kG,KAAAqrG,UAAA,OAAArrG,KAAA2kG,sBACA,IAAAnxF,EAAAxT,KACA,OAAAA,KAAA2kG,sBAAA97F,EAAAonC,OAAA,SAAAC,IACA18B,EAAAkxF,sBACA77F,EAAAonC,OAAAC,EAAA,MACO,MAGPlwC,KAAAwrG,WAAA,SAAAzrE,GACAA,EACA//B,KAAAykG,mBACOzkG,KAAA2kG,wBACPl/C,cAAAzlD,KAAA2kG,uBACA3kG,KAAA2kG,sBAAA,IAIA3kG,KAAAgrG,cAAA,SAAAjhG,GACA,IAAAwG,EAAA,CACAhI,QAAAwB,GAAA/J,KAAA2qG,cAAAv4F,aACA5J,OAAAuB,GAAA/J,KAAA2qG,cAAAx4F,YA/FA,KAiGA,WAAA5B,EAAA/H,OAAA,IAAA+H,EAAAhI,OAAA,KACAgI,GAGAvQ,KAAAy6D,kBAAA,SAAA56B,GAGA,OAFA7/B,KAAAm6D,MAAA15B,UAAA2U,EAAA7B,aAAA1T,EAtGA,KAuGA7/B,KAAAm6D,MAAAnjB,wBACAxuC,MAxGA,KA2GAxI,KAAA4lF,kBAAA,SAAA/lD,GACA,IAAAwqB,EAAArqD,KAAAmrG,UAAAtrE,GAMA,YAJAhrB,IAAAw1C,IACAA,EAAArqD,KAAAmrG,UAAAtrE,GAAA7/B,KAAAy6D,kBAAA56B,GAAA7/B,KAAAu6D,eAAA/xD,OAGA6hD,GAGArqD,KAAA4I,QAAA,WACA68C,cAAAzlD,KAAA2kG,uBACA3kG,KAAAqrG,WAAArrG,KAAAqrG,UAAAI,aACAzrG,KAAA2P,IAAA3P,KAAA2P,GAAA2tB,YAAAt9B,KAAA2P,GAAA2tB,WAAApzB,YAAAlK,KAAA2P,KAGA3P,KAAA0rG,SAAA,SAAAC,EAAAnrE,GACA,OAAAA,GACAnU,OAAAmW,iBAAAhC,GAAAorE,MAAA,GAAAD,EAAAnrE,EAAA0W,eADA,GAIAl3C,KAAA6rG,2BAAA,WACA,IAAA7qG,EAAA,SAAA8qG,EAAA10E,GACA,cACA9sB,MAAA,0BAAqCwhG,EAAA,WAAiB10E,EAAA,SAItDp3B,KAAA4/B,IAAAuV,EAAA7V,SAAA,CAAAt+B,EAAA,KAAAA,EAAAozD,EAAA,GAAApzD,EAAA,EAAAozD,GAAApzD,EAAAozD,MAAAp0D,KAAA2P,KAGA3P,KAAA+rG,qBAAA,SAAAC,EAAAC,GACAD,IAEAA,EAAAE,EAAA,EADAlsG,KAAA0rG,SAAA1rG,KAAA2P,IACAq8F,IAGA,SAAAG,EAAAC,EAAAC,EAAA5qC,GACA,IAAA6qC,EAAAF,EAAA,GAAAC,EAAA,GAAAD,EAAA,GAAAC,EAAA,GACA,SAAAA,EAAA,GAAA5qC,EAAA,GAAA4qC,EAAA,GAAA5qC,EAAA,IAAA6qC,IAAAF,EAAA,GAAA3qC,EAAA,GAAA2qC,EAAA,GAAA3qC,EAAA,IAAA6qC,GAGA,SAAAC,EAAAhyF,EAAApa,GACA,OAAAoa,EAAA,GAAApa,EAAA,GAAAoa,EAAA,GAAApa,EAAA,IAGA,SAAAixB,EAAA7W,EAAApa,GACA,OAAAoa,EAAA,GAAApa,EAAA,GAAAoa,EAAA,GAAApa,EAAA,IAGA,SAAA+rG,EAAA3xF,EAAApa,GACA,OAAAoa,EAAApa,EAAA,GAAAoa,EAAApa,EAAA,IAKA,SAAAK,EAAAmP,GACA,IAAA8xD,EAAA9xD,EAAAqnC,wBACA,OAAAyqB,EAAAt0D,KAAAs0D,EAAAnvD,KAJAtS,KAAA4/B,KAAA5/B,KAAA6rG,6BAOA,IAAAtxF,EAAA/Z,EAAAR,KAAA4/B,IAAA,IACAz/B,EAAAK,EAAAR,KAAA4/B,IAAA,IACA02B,EAAA91D,EAAAR,KAAA4/B,IAAA,IACA1/B,EAAAM,EAAAR,KAAA4/B,IAAA,IACAwqB,EAAA+hD,EAAAI,EAAArsG,EAAAC,GAAAosG,EAAArsG,EAAAo2D,GAAAi2C,EAAAn7E,EAAAjxB,EAAAm2D,GAAAllC,EAAAlxB,EAAAqa,KACAy1C,EAAAk8C,EAAA,EAAA9hD,EAAA,GAAAmiD,EAAApsG,EAAAoa,IACAiyF,EAAAN,EAAA,EAAA9hD,EAAA,GAAAmiD,EAAAj2C,EAAA/7C,IAEA,GAAA0xF,EAAA,CACA,IAAApwF,EAAAowF,EACA/1B,EAAA9rB,EAAA,GAAAvuC,EAAA,GAAAu4C,EAAAhK,EAAA,GAAAvuC,EAAA,GAAAu4C,EAAA,EACAq4C,EAAAr7E,EAAA86E,EAAArwF,EAAA,GAAAm0C,GAAAk8C,EAAArwF,EAAA,GAAA2wF,IACA,OAAAp7E,EAAA86E,EAAA,EAAAh2B,EAAA9hB,EAAAq4C,GAAAlyF,GAGA,IAAAmyF,EAAAH,EAAAP,EAAAzxF,GACAoyF,EAAAR,EAAAI,EAAAv8C,EAAAk8C,EAAA9hD,EAAA,GAAAsiD,IAAAH,EAAAC,EAAAN,EAAA9hD,EAAA,GAAAsiD,OACA,OAAAR,EAAA93C,EAAAu4C,MAEGrrG,KAAAmpG,EAAA7pG,aAEHoB,IAAAsM,OAAA,wSAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,aAEAgzC,EAAAhzC,EAAA,aAEAguD,EAAAhuD,EAAA,YAEAyqG,EAAAzqG,EAAA,kBAAAo+F,OAEAsM,EAAA1qG,EAAA,kBAAAugG,OAEAoK,EAAA3qG,EAAA,gBAAA0hG,KAEAkJ,EAAA5qG,EAAA,kBAAAklG,OAEAsC,EAAAxnG,EAAA,eAAAwnG,WAEAP,EAAAjnG,EAAA,eAAAinG,WAEAa,EAAA9nG,EAAA,gBAAA8nG,WAEAQ,EAAAtoG,EAAA,wBAAAsoG,YAEAj8F,EAAArM,EAAA,uBAAAqM,aAEAw+F,EAAA,0qbAkeA3tE,EAAAl9B,EAAA,mBAEA8qG,EAAA5tE,EAAAhB,KACA8W,EAAA5T,gBAAAyrE,EAAA,kBAEA,IAAAr+F,EAAA,SAAAG,EAAA1L,GACA,IAAA2xC,EAAA/0C,KAEAA,KAAA8O,aAAAqmC,EAAA/qC,cAAA,OACA+qC,EAAArU,YAAA9gC,KAAA8O,UAAA,cACAqmC,EAAAtS,QAAAsS,EAAArU,YAAA9gC,KAAA8O,UAAA,aACA9O,KAAA8E,SAAA1B,GACApD,KAAA8iD,QAAA3N,EAAA/qC,cAAA,OACApK,KAAA8iD,QAAA//C,UAAA,aACA/C,KAAA8O,UAAApE,YAAA1K,KAAA8iD,SACA9iD,KAAA8iD,QAAA9iB,aAAA,kBACAhgC,KAAAiK,SAAAkrC,EAAA/qC,cAAA,OACApK,KAAAiK,SAAAlH,UAAA,eACA/C,KAAA8O,UAAApE,YAAA1K,KAAAiK,UACAjK,KAAA86F,QAAA3lD,EAAA/qC,cAAA,OACApK,KAAA86F,QAAA/3F,UAAA,cACA/C,KAAAiK,SAAAS,YAAA1K,KAAA86F,SACA96F,KAAA6hD,aAAA,IAAA+qD,EAAA5sG,KAAA8iD,SACA9iD,KAAA6hD,aAAAv8C,GAAA,oBAAAtF,KAAAktG,eAAAvqG,KAAA3C,OACAA,KAAAmtG,YAAA,IAAAN,EAAA7sG,KAAA86F,SACA,IAAAsS,EAAAptG,KAAAqtG,WAAA,IAAAP,EAAA9sG,KAAA86F,SACA96F,KAAAstG,OAAAF,EAAA5sE,QACAxgC,KAAAutG,aAAA,IAAAV,EAAA7sG,KAAA86F,SACA96F,KAAAulD,aAAA,IAAAwnD,EAAA/sG,KAAA86F,SACA96F,KAAAwtG,cAAA,EACAxtG,KAAAytG,UAAA,EACAztG,KAAA0tG,UAAA1tG,KAAAwwD,WAAA,IAAA44C,EAAAppG,KAAA8O,UAAA9O,MACAA,KAAAywD,WAAA,IAAAk5C,EAAA3pG,KAAA8O,UAAA9O,MACAA,KAAAwwD,WAAAhlC,iBAAA,kBAAAnV,GACA0+B,EAAA44D,kBAAA54D,EAAA9uC,QAAAu5E,aAAAnpE,EAAAK,KAAAq+B,EAAAnxC,aAAA0O,OAEAtS,KAAAywD,WAAAjlC,iBAAA,kBAAAnV,GACA0+B,EAAA44D,kBAAA54D,EAAA9uC,QAAAy5E,cAAArpE,EAAAK,KAAAq+B,EAAAnxC,aAAAuJ,QAEAnN,KAAAqmD,UAAA,EACArmD,KAAA2/E,WAAA,EACA3/E,KAAAyqD,UAAA,CACA1Z,IAAA,EACAC,OAAA,GAEAhxC,KAAAukG,aAAA,IAAAkG,EAAAzqG,KAAA8O,WACA9O,KAAAqtG,WAAA5nB,gBAAAzlF,KAAAukG,cACAvkG,KAAAqtG,WAAA7hF,iBAAA,+BAAAnV,GACA0+B,EAAA64D,sBAEA74D,EAAAq7C,UAAA,EAAAr7C,EAAA2rD,YAAA3rD,EAAA84D,MAAArlG,MAAAusC,EAAA84D,MAAAtlG,QAEAwsC,EAAAiN,QAAA,sBAAA3rC,KAEArW,KAAA6tG,MAAA,CACArlG,MAAA,EACAD,OAAA,EACAulG,eAAA,EACAC,cAAA,EACAC,QAAA,GAEAhuG,KAAA0kD,YAAA,CACAl8C,MAAA,EACA+B,QAAA,EACA8nC,SAAA,EACAotD,eAAA,EACAntD,QAAA,EACAmS,WAAA,EACAvJ,eAAA,EACA+yD,UAAA,EACAvF,UAAA,EACApzE,OAAA,EACA/sB,OAAA,EACA04F,aAAA,GAEAjhG,KAAA4D,aAAA,CACAuJ,KAAA,EACAC,MAAA,EACAkF,IAAA,EACAipC,OAAA,EACA2yD,EAAA,EACA9jD,EAAA,GAEApqD,KAAAqkG,OAAA,CACAl3F,KAAA,EACAC,MAAA,EACAkF,IAAA,EACAipC,OAAA,EACA2yD,EAAA,EACA9jD,EAAA,GAEApqD,KAAAo6C,uBAAA/a,EAAAH,MACAl/B,KAAAq6F,MAAA,IAAA4P,EAAAjqG,KAAAmuG,eAAAxrG,KAAA3C,WAAA8O,UAAA4xB,cAAA0tE,aACApuG,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aACAruG,KAAA4tG,sBACA5tG,KAAA2iG,WAAA,GACAxyC,EAAAvC,aAAA5tD,MAEAmwD,EAAAnO,QAAA,WAAAhiD,QAGA,WACAA,KAAAsuG,cAAA,EACAtuG,KAAAuuG,cAAA,EACAvuG,KAAAs6F,cAAA,EACAt6F,KAAAwuG,cAAA,EACAxuG,KAAAyuG,aAAA,GACAzuG,KAAA0uG,YAAA,GACA1uG,KAAA2uG,YAAA,GACA3uG,KAAA4uG,mBAAA,IACA5uG,KAAA6uG,oBAAA,IACA7uG,KAAAquG,YAAA,IACAruG,KAAA8uG,gBAAA,KACAvgG,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA4tG,oBAAA,WACA5tG,KAAAqtG,WAAAjC,gBAAAprG,KAAA+uG,kBACA/uG,KAAA+uG,gBAAA/uG,KAAAqtG,WAAAjC,eACAprG,KAAAyiC,SAAA,cAAAziC,KAAA+uG,kBAGA/uG,KAAA0kD,YAAAxJ,eAAAl7C,KAAAk7C,eAAAl7C,KAAAqtG,WAAAznB,oBACA5lF,KAAA0kD,YAAAD,WAAAzkD,KAAAykD,WAAAzkD,KAAAqtG,WAAA/I,gBACAtkG,KAAAgvG,qBACA75D,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,cAAAtK,KAAAykD,WAAA,OAGAzkD,KAAA+R,WAAA,SAAA9L,GACAjG,KAAAiG,SAAAjG,KAAAiG,QAAAi6B,IAAA6Z,IAAA,oBAAA/5C,KAAAivG,qBACAjvG,KAAAiG,UACAA,GAAAjG,KAAA4D,aAAA0O,KAAArM,EAAA+kD,gBAAA,GAAA/kD,EAAAu5E,cAAAx/E,KAAA4D,aAAA0O,KACAtS,KAAAulD,aAAAxzC,WAAA9L,GACAjG,KAAAmtG,YAAAp7F,WAAA9L,GACAjG,KAAAutG,aAAAx7F,WAAA9L,GACAjG,KAAA6hD,aAAA9vC,WAAA9L,GACAjG,KAAAqtG,WAAAt7F,WAAA9L,GACAA,IACAjG,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aACAruG,KAAAiG,QAAAw/E,gBAAAzlF,KAAAukG,cACAvkG,KAAAywD,WAAAkvB,WAAA3/E,KAAAwwD,WAAAnK,UAAA,KACArmD,KAAAivG,oBAAAjvG,KAAAivG,oBAAAtsG,KAAA3C,MACAA,KAAAivG,sBACAjvG,KAAAiG,QAAAi6B,IAAA56B,GAAA,oBAAAtF,KAAAivG,uBAGAjvG,KAAAuxF,YAAA,SAAAl/C,EAAAC,EAAA6tC,GAaA,QAZAtrE,IAAAy9B,MAAAw5B,KAEA9rE,KAAAkvG,eAMAlvG,KAAAkvG,cAAA78D,aAAAryC,KAAAkvG,cAAA78D,YACAryC,KAAAkvG,cAAA58D,YAAAtyC,KAAAkvG,cAAA58D,YANAtyC,KAAAkvG,cAAA,CACA78D,WACAC,WAOAtyC,KAAAkvG,cAAA58D,QAAAtyC,KAAA0kD,YAAArS,SAAA,CACA,IAAA8tC,EAAyE,OAAzEngF,KAAAkvG,cAAA58D,QAAAtyC,KAAA0kD,YAAApS,QAGAtyC,KAAAkvG,cAAA78D,SAAAryC,KAAA0kD,YAAApS,SACAtyC,KAAAq6F,MAAA1lD,SAAA30C,KAAAyuG,eAGAzuG,KAAAivG,oBAAA,WACAjvG,KAAAq6F,MAAA1lD,SAAA30C,KAAA0uG,aACA1uG,KAAAqtG,WAAAvJ,iBACA9jG,KAAAiG,QAAAi1D,aAAAP,WAAA36D,KAAAqtG,WAAAnJ,WAGAlkG,KAAAyvF,gBAAA,WACAzvF,KAAAq6F,MAAA1lD,SAAA30C,KAAA0uG,YAAA1uG,KAAAuuG,eACAvuG,KAAAqtG,WAAA5d,mBAGAzvF,KAAAwyF,WAAA,WACAxyF,KAAAq6F,MAAA1lD,SAAA30C,KAAA0uG,cAGA1uG,KAAAkwF,WAAA,SAAA/P,GACAA,EAAAngF,KAAAmuG,eAAAnuG,KAAAquG,aAAA,GAA6DruG,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,cAG7DruG,KAAAmvG,eAAA,WACAnvG,KAAAqtG,WAAA3I,uBAGA1kG,KAAAovG,SAAA,EAEApvG,KAAAqvG,iBAAA,WACArvG,KAAAq6F,MAAA8P,QAAAnqG,KAAA6tG,MAAAG,QAAA,EAAuDhuG,KAAAowF,YAGvDpwF,KAAAowF,SAAA,SAAAjQ,EAAAugB,EAAAl4F,EAAAD,GACA,KAAAvI,KAAAsvG,SAAA,IAAoCtvG,KAAAsvG,SAAA,EAAAtvG,KAAAsvG,WAA4CtvG,KAAAsvG,SAAAnvB,EAAA,IAChF,IAAAxwE,EAAA3P,KAAA8O,UACAvG,MAAAoH,EAAAyC,cAAAzC,EAAA05F,cACA7gG,MAAAmH,EAAAwC,aAAAxC,EAAA4/F,aACA,IAAApwF,EAAAnf,KAAAwvG,kBAAArvB,EAAAugB,EAAAl4F,EAAAD,GACA,IAAAvI,KAAA6tG,MAAAC,iBAAAtlG,IAAAD,EAAA,OAAAvI,KAAAsvG,SAAA,EACAnvB,IAAAngF,KAAA6hD,aAAA6/C,SAAA,MACAvhB,EAAAngF,KAAAmuG,eAAAhvF,EAAAnf,KAAAovG,UAAA,GAAoEpvG,KAAAq6F,MAAA1lD,SAAAx1B,EAAAnf,KAAAovG,UACpEpvG,KAAAsvG,WAAAtvG,KAAAsvG,SAAA,GACAtvG,KAAAwwD,WAAAmvB,WAAA3/E,KAAAwwD,WAAAnK,UAAA,OAGArmD,KAAAwvG,kBAAA,SAAArvB,EAAAugB,EAAAl4F,EAAAD,GACAA,GAAAvI,KAAAyvG,cAAA,EACA,IAAAtwF,EAAA,EACA5O,EAAAvQ,KAAA6tG,MACA6B,EAAA,CACAlnG,MAAA+H,EAAA/H,MACAD,OAAAgI,EAAAhI,OACAulG,eAAAv9F,EAAAu9F,eACAC,cAAAx9F,EAAAw9F,eAYA,GATAxlG,IAAA43E,GAAA5vE,EAAAhI,aACAgI,EAAAhI,SACA4W,GAAAnf,KAAA2uG,YACAp+F,EAAAu9F,eAAAv9F,EAAAhI,OACAvI,KAAAwtG,eAAAj9F,EAAAu9F,gBAAA9tG,KAAAywD,WAAAzP,aACAhhD,KAAAwwD,WAAAhwB,QAAAl2B,MAAAixC,OAAAv7C,KAAAywD,WAAAzP,YAAA,KACA7hC,GAAAnf,KAAAwuG,eAGAhmG,IAAA23E,GAAA5vE,EAAA/H,UAAA,CACA2W,GAAAnf,KAAA2uG,YACAp+F,EAAA/H,QACA,MAAAk4F,MAAA1gG,KAAA2vG,YAAA3vG,KAAA8iD,QAAAzgB,YAAA,GACAriC,KAAA0gG,cACAvrD,EAAA1S,SAAAziC,KAAAywD,WAAAjwB,QAAAl2B,MAAA,OAAAo2F,EAAA,MACAvrD,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,OAAAo2F,EAAA1gG,KAAAqkG,OAAAl3F,KAAA,MACAoD,EAAAw9F,cAAAxyF,KAAA3J,IAAA,EAAApJ,EAAAk4F,EAAA1gG,KAAAwwD,WAAAtP,WAAAlhD,KAAAqkG,OAAAj6C,GACAjV,EAAA1S,SAAAziC,KAAA8iD,QAAAx4C,MAAA,OAAAtK,KAAAqkG,OAAAl3F,KAAA,MACA,IAAAC,EAAApN,KAAAwwD,WAAAtP,WAAA,KACA/L,EAAA1S,SAAAziC,KAAAywD,WAAAjwB,QAAAl2B,MAAA,QAAA8C,GACA+nC,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,QAAA8C,GACA+nC,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,SAAAtK,KAAAywD,WAAAzP,cAEAhhD,KAAAiG,SAAAjG,KAAAiG,QAAAqL,kBAAAtR,KAAAoiF,mBAAAjC,KACAhhE,GAAAnf,KAAAquG,aAMA,OAFA99F,EAAAy9F,QAAAxlG,IAAAD,EACA4W,GAAAnf,KAAAgiD,QAAA,SAAA0tD,GACAvwF,GAGAnf,KAAAktG,eAAA,SAAA1kG,GACA,IAAAk4F,EAAA1gG,KAAA2vG,YAAAnnG,EAAA,EACAk4F,GAAA1gG,KAAA0gG,cAAA1gG,KAAAovG,UAAApvG,KAAAwvG,mBAAA,EAAA9O,EAAA1gG,KAAA6tG,MAAArlG,MAAAxI,KAAA6tG,MAAAtlG,SAEAvI,KAAAiG,QAAAqL,kBAAAtR,KAAAoiF,kBACApiF,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aACOruG,KAAA6tG,MAAAG,OACPhuG,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aAEAruG,KAAA4vG,uBAIA5vG,KAAAoiF,gBAAA,WACA,IAAAytB,EAAA7vG,KAAA6tG,MAAAE,cAAA,EAAA/tG,KAAA0hG,SACA9e,EAAArnE,KAAA0C,MAAA4xF,EAAA7vG,KAAAk7C,gBACA,OAAAl7C,KAAAiG,QAAAm8E,gBAAAQ,EAAA5iF,KAAA8vG,kBAAA9vG,KAAA+vG,qBAGA/vG,KAAAg0F,kBAAA,SAAAC,GACAj0F,KAAAyG,UAAA,iBAAAwtF,IAGAj0F,KAAAk0F,kBAAA,WACA,OAAAl0F,KAAAgwG,iBAGAhwG,KAAA06D,kBAAA,SAAArC,GACAr4D,KAAAyG,UAAA,iBAAA4xD,GACAr4D,KAAAiG,QAAAi1D,aAAAR,kBAAArC,IAGAr4D,KAAAm0F,kBAAA,WACA,OAAAn0F,KAAAktD,UAAA,mBAGAltD,KAAAq0F,uBAAA,WACA,OAAAr0F,KAAAktD,UAAA,wBAGAltD,KAAAo0F,uBAAA,SAAAnyD,GACAjiC,KAAAyG,UAAA,sBAAAw7B,IAGAjiC,KAAAqF,mBAAA,SAAA3B,GACA1D,KAAAyG,UAAA,kBAAA/C,IAGA1D,KAAAs0F,mBAAA,WACA,OAAAt0F,KAAAktD,UAAA,oBAGAltD,KAAAu0F,qBAAA,SAAA7wF,GACA1D,KAAAyG,UAAA,oBAAA/C,IAGA1D,KAAAw0F,qBAAA,WACA,OAAAx0F,KAAAktD,UAAA,sBAGAltD,KAAAiwG,cAAA,WACA,OAAAjwG,KAAAktD,UAAA,eAGAltD,KAAAmF,cAAA,SAAA27C,GACA,OAAA9gD,KAAAyG,UAAA,aAAAq6C,IAGA9gD,KAAAg1F,mBAAA,WACA,OAAAh1F,KAAAktD,UAAA,oBAGAltD,KAAA80F,mBAAA,SAAAh0C,GACA9gD,KAAAyG,UAAA,kBAAAq6C,IAGA9gD,KAAA4zF,uBAAA,SAAAF,GACA1zF,KAAAyG,UAAA,sBAAAitF,IAGA1zF,KAAA6zF,uBAAA,WACA,OAAA7zF,KAAAktD,UAAA,wBAGAltD,KAAAgvG,mBAAA,WACA,GAAAhvG,KAAA8vG,kBAAA9vG,KAAAkwG,eAAA,CAEA,IAAAlwG,KAAAkwG,eAAA,CACA,IAAAC,EAAAh7D,EAAA/qC,cAAA,OACA+lG,EAAAptG,UAAA,mCACA/C,KAAAkwG,eAAA/6D,EAAA/qC,cAAA,OACApK,KAAAkwG,eAAAntG,UAAA,mBACAotG,EAAAzlG,YAAA1K,KAAAkwG,gBACAlwG,KAAA86F,QAAAr5D,aAAA0uE,EAAAnwG,KAAA86F,QAAAp5D,YAGA,IAAAp3B,EAAAtK,KAAAkwG,eAAA5lG,MACAA,EAAA6C,KAAAoO,KAAA6nB,MAAApjC,KAAAk7C,eAAAl7C,KAAA+vG,mBAAA/vG,KAAA0hG,UAAA,KACAp3F,EAAAwgG,WAAA9qG,KAAA8vG,iBAAA,mBACA9vG,KAAAiG,UAAA,GAAAjG,KAAAiG,QAAA6/E,OAAA9lF,KAAAoiF,oBAGApiF,KAAA8sF,oBAAA,WACA,OAAA9sF,KAAA8O,WAGA9O,KAAAswD,oBAAA,WACA,OAAAtwD,KAAAiK,UAGAjK,KAAA+sF,qBAAA,WACA,OAAA/sF,KAAA8O,WAGA9O,KAAAq6C,sBAAA,WACA,IAAAr6C,KAAAm6C,gBAAA,CACA,IAAA7vC,EAAAtK,KAAAgtF,SAAA1iF,MACA4oF,EAAAlzF,KAAA46F,aAEA,GAAA56F,KAAAo6C,uBAAA84C,EAAA,CAKA,IAAAuV,EAAAzoG,KAAAulD,aAAAi0C,UACA,GAAAiP,EAAA,CACAvV,KAAAr5C,cAAA4uD,EAAAzoG,KAAAulD,aAAAmF,iBAAAwoC,EAAAr5C,YAAAn1B,OAAA,IACA,IAAAyrC,EAAAnwD,KAAA0kD,YACA0rD,EAAA3H,EAAAn2F,IACA+9F,EAAA5H,EAAAt7F,KACAijG,GAAAjgD,EAAA76B,OACA,IAAA80B,EAAA8oC,KAAAt5C,kBAAA55C,KAAAykD,WAAAwoD,EAAA,IAEA,GAAAmD,EAAA,GAAAA,EAAAjgD,EAAA5nD,OAAA6hD,EACAjV,EAAAlS,UAAAjjC,KAAAgtF,SAAA,SADA,CAKA,IAAA3iC,EAAA,EACA/O,EAAAt7C,KAAA6tG,MAAAtlG,OAAA6hD,EAEA,GAAA8oC,EAGA,GAAAA,EAAAt5C,kBAAA,CACA,IAAA7Z,EAAA//B,KAAAgtF,SAAAtrF,MACA2oD,EAAArqD,KAAAk7C,eAAAl7C,KAAAiG,QAAAu6E,sBAAAzgD,GAAA,QAEAqwE,GAAApwG,KAAAykD,WAAA,OANA2rD,GAAApwG,KAAAykD,YAUA4rD,GAAArwG,KAAA2/E,YACA3/E,KAAA6tG,MAAAE,cAAA1jD,IAAAgmD,EAAArwG,KAAA6tG,MAAAE,cAAA1jD,GACAgmD,GAAArwG,KAAA0gG,YAAA1gG,KAAAqkG,OAAAl3F,KACAgoC,EAAA1S,SAAAn4B,EAAA,SAAA8/C,EAAA,MACAjV,EAAA1S,SAAAn4B,EAAA,QAAA+/C,EAAA,MACAlV,EAAAlS,UAAAjjC,KAAAgtF,SAAAzxE,KAAA5J,IAAA0+F,EAAArwG,KAAA6tG,MAAAE,cAAA1jD,GAAA9uC,KAAA5J,IAAAy+F,EAAA90D,WArCAnG,EAAAlS,UAAAjjC,KAAAgtF,UAAA,SAwCAhtF,KAAAo3F,mBAAA,WACA,OAAAp3F,KAAA0kD,YAAArS,UAGAryC,KAAAw3F,wBAAA,WACA,OAAAx3F,KAAA0kD,YAAArS,UAAA,IAAAryC,KAAA0kD,YAAApvB,OAAA,MAGAt1B,KAAAy3F,uBAAA,WACA,IAAAtnC,EAAAnwD,KAAA0kD,YACApS,EAAA6d,EAAA7d,QAEA,OADAtyC,KAAAiG,QAAA28C,oBAAAtQ,EAAA,GAAA6d,EAAA1L,WACAzkD,KAAAiG,QAAA+kD,eAAAmF,EAAA5nD,OAAA4nD,EAAA1L,WAAAnS,EAAA,EACAA,GAGAtyC,KAAAq3F,kBAAA,WACA,OAAAr3F,KAAA0kD,YAAApS,SAGAtyC,KAAA0hG,SAAA,KAEA1hG,KAAA2iG,WAAA,SAAAp4F,GACAvK,KAAA0hG,SAAAn3F,EACAvK,KAAAqtG,WAAA1K,WAAAp4F,GACAvK,KAAAulD,aAAAo9C,WAAAp4F,GACAvK,KAAAutG,aAAA5K,WAAAp4F,GACAvK,KAAAmtG,YAAAxK,WAAAp4F,GACAvK,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aACAruG,KAAAgvG,sBAGAhvG,KAAA2E,gBAAA,SAAA2N,EAAAipC,EAAApuC,EAAAC,GACA,IAAAkjG,EAAAtwG,KAAA4D,aACA0sG,EAAAh+F,IAAA,EAAAA,EACAg+F,EAAA/0D,OAAA,EAAAA,EACA+0D,EAAAljG,MAAA,EAAAA,EACAkjG,EAAAnjG,KAAA,EAAAA,EACAmjG,EAAApC,EAAAoC,EAAAh+F,IAAAg+F,EAAA/0D,OACA+0D,EAAAlmD,EAAAkmD,EAAAnjG,KAAAmjG,EAAAljG,MACAkjG,EAAAh+F,KAAAtS,KAAAqmD,WAAA,GAAArmD,KAAAiG,SAAAjG,KAAAiG,QAAAu5E,cAAA8wB,EAAAh+F,KACAtS,KAAAkwF,cAGAlwF,KAAAuwG,UAAA,SAAAj+F,EAAAipC,EAAApuC,EAAAC,GACA,IAAAkjG,EAAAtwG,KAAAqkG,OACAiM,EAAAh+F,IAAA,EAAAA,EACAg+F,EAAA/0D,OAAA,EAAAA,EACA+0D,EAAAljG,MAAA,EAAAA,EACAkjG,EAAAnjG,KAAA,EAAAA,EACAmjG,EAAApC,EAAAoC,EAAAh+F,IAAAg+F,EAAA/0D,OACA+0D,EAAAlmD,EAAAkmD,EAAAnjG,KAAAmjG,EAAAljG,MACApN,KAAAwvG,mBAAA,EAAAxvG,KAAA0gG,YAAA1gG,KAAA6tG,MAAArlG,MAAAxI,KAAA6tG,MAAAtlG,QACAvI,KAAAkwF,cAGAlwF,KAAAwwG,2BAAA,WACA,OAAAxwG,KAAAywG,0BAGAzwG,KAAA0wG,2BAAA,SAAAC,GACA3wG,KAAAyG,UAAA,0BAAAkqG,IAGA3wG,KAAA4wG,2BAAA,WACA,OAAA5wG,KAAA6wG,0BAGA7wG,KAAA8wG,2BAAA,SAAAH,GACA3wG,KAAAyG,UAAA,0BAAAkqG,IAGA3wG,KAAA+wG,kBAAA,WACA,IAAA1H,EAAArpG,KAAA0kD,YAAAgkD,UACAoF,EAAA9tG,KAAA6tG,MAAAC,gBAEA9tG,KAAA8xF,WAAA9xF,KAAAgxG,iBACA3H,IAAAyE,EAAA9tG,KAAAykD,YAAAzkD,KAAAgxG,eAEAhxG,KAAAqmD,UAAAgjD,EAAAyE,IACAzE,EAAArpG,KAAAqmD,UAAAynD,EACA9tG,KAAAwwD,WAAAnK,UAAA,OAIArmD,KAAAwwD,WAAAk5C,gBAAAL,EAAArpG,KAAA4D,aAAAsqG,GACAluG,KAAAwwD,WAAAgvB,aAAAx/E,KAAAqmD,UAAArmD,KAAA4D,aAAA0O,MAGAtS,KAAAixG,kBAAA,WACAjxG,KAAAywD,WAAAq5C,eAAA9pG,KAAA0kD,YAAAl8C,MAAA,EAAAxI,KAAA0hG,SAAA1hG,KAAA4D,aAAAwmD,GACApqD,KAAAywD,WAAAivB,cAAA1/E,KAAA2/E,WAAA3/E,KAAA4D,aAAAuJ,OAGAnN,KAAAkxG,SAAA,EAEAlxG,KAAAq8B,OAAA,WACAr8B,KAAAkxG,SAAA,GAGAlxG,KAAAmxG,SAAA,WACAnxG,KAAAkxG,SAAA,GAGAlxG,KAAAmuG,eAAA,SAAAhvF,EAAAghE,GAMA,GALAngF,KAAAovG,WACAjwF,GAAAnf,KAAAovG,SACApvG,KAAAovG,SAAA,GAGApvG,KAAAiG,SAAAjG,KAAA8O,UAAAuzB,cAAAriC,KAAAkxG,UAAA/xF,GAAAghE,GAAA,CAKA,GAAAngF,KAAA6tG,MAAAG,OAEA,OADAhuG,KAAAovG,UAAAjwF,EACAnf,KAAAowF,UAAA,GAGApwF,KAAAykD,YACAzkD,KAAAqtG,WAAA3I,sBAGA1kG,KAAAgiD,QAAA,gBAEAhiD,KAAAiG,SAAAjG,KAAAiG,QAAAi1D,cAAAl7D,KAAAiG,QAAAi1D,aAAAZ,sBAAAt6D,KAAAukG,cACA,IAAAp0C,EAAAnwD,KAAA0kD,YAEA,GAAAvlC,EAAAnf,KAAAquG,aAAAlvF,EAAAnf,KAAA2uG,aAAAxvF,EAAAnf,KAAA0uG,aAAAvvF,EAAAnf,KAAAyuG,cAAAtvF,EAAAnf,KAAAwuG,eAAArvF,EAAAnf,KAAA8uG,gBAAA,CAGA,GAFA3vF,GAAAnf,KAAA4vG,sBAAA5vG,KAAAq6F,MAAAplF,QAEAk7C,EAAA9d,UAAAryC,KAAA0kD,YAAArS,UAAA8d,EAAAsvC,gBAAAz/F,KAAA0kD,YAAA+6C,eAAA,CACA,IAAA2R,EAAApxG,KAAAqmD,WAAA8J,EAAA9d,SAAAryC,KAAA0kD,YAAArS,UAAAryC,KAAAykD,WAEA2sD,EAAA,IACApxG,KAAAqmD,UAAA+qD,EACAjyF,GAAAnf,KAAAwuG,cACArvF,GAAAnf,KAAA4vG,sBAAA5vG,KAAAq6F,MAAAplF,SAIAk7C,EAAAnwD,KAAA0kD,YACA1kD,KAAA+wG,oBACA5xF,EAAAnf,KAAA8uG,iBAAA9uG,KAAAixG,oBACA97D,EAAAlS,UAAAjjC,KAAA86F,SAAA96F,KAAA2/E,YAAAxvB,EAAA76B,QACA,IAAA9sB,EAAA2nD,EAAA3nD,MAAA,EAAAxI,KAAA0hG,SAAA,KACAn5F,EAAA4nD,EAAA89C,UAAA,KACA94D,EAAA1S,SAAAziC,KAAA86F,QAAAxwF,MAAA,QAAA9B,GACA2sC,EAAA1S,SAAAziC,KAAA86F,QAAAxwF,MAAA,SAAA/B,GAQA,GALA4W,EAAAnf,KAAA8uG,kBACA35D,EAAAlS,UAAAjjC,KAAA86F,SAAA96F,KAAA2/E,YAAAxvB,EAAA76B,QACAt1B,KAAAiK,SAAAlH,UAAA/C,KAAA2/E,YAAA,iDAGAxgE,EAAAnf,KAAAquG,YAWA,OAVAruG,KAAAkvG,cAAA,KACAlvG,KAAAqtG,WAAAh6B,OAAAljB,GACAnwD,KAAA2vG,aAAA3vG,KAAA6hD,aAAAwxB,OAAAljB,GACAnwD,KAAAmtG,YAAA95B,OAAAljB,GACAnwD,KAAAutG,aAAAl6B,OAAAljB,GACAnwD,KAAAulD,aAAA8tB,OAAAljB,GACAnwD,KAAAq6C,6BAEAr6C,KAAAgiD,QAAA,eAKA,GAAA7iC,EAAAnf,KAAAwuG,cAeA,OAdAxuG,KAAAkvG,cAAA,KACA/vF,EAAAnf,KAAA0uG,aAAAvvF,EAAAnf,KAAAyuG,aAAAzuG,KAAAqtG,WAAAh6B,OAAAljB,GAAsGnwD,KAAAqtG,WAAArL,YAAA7xC,GAEtGnwD,KAAA2vG,cACAxwF,EAAAnf,KAAAs6F,eAAAn7E,EAAAnf,KAAAyuG,aAAAzuG,KAAA6hD,aAAAwxB,OAAAljB,GAA4GnwD,KAAA6hD,aAAAmgD,YAAA7xC,IAG5GnwD,KAAAmtG,YAAA95B,OAAAljB,GACAnwD,KAAAutG,aAAAl6B,OAAAljB,GACAnwD,KAAAulD,aAAA8tB,OAAAljB,GACAnwD,KAAAq6C,6BAEAr6C,KAAAgiD,QAAA,eAKA7iC,EAAAnf,KAAA0uG,aACA1uG,KAAAkvG,cAAA,KACAlvG,KAAAqtG,WAAAh6B,OAAAljB,GACAnwD,KAAA2vG,aAAA3vG,KAAA6hD,aAAAwxB,OAAAljB,IACOhxC,EAAAnf,KAAAyuG,cACPzuG,KAAAqxG,gBAAAlyF,EAAAnf,KAAAs6F,eAAAt6F,KAAA2vG,cAAA3vG,KAAA6hD,aAAAwxB,OAAAljB,GACOhxC,EAAAnf,KAAA0uG,aAAAvvF,EAAAnf,KAAAs6F,cACPt6F,KAAA2vG,aAAA3vG,KAAA6hD,aAAAwxB,OAAAljB,GACOhxC,EAAAnf,KAAAsuG,eACPtuG,KAAA4hG,sBAAA5hG,KAAA6hD,aAAAigD,oBAAA3xC,GAGAhxC,EAAAnf,KAAAsuG,gBACAtuG,KAAAulD,aAAA8tB,OAAAljB,GACAnwD,KAAAq6C,yBAGAl7B,GAAAnf,KAAAuuG,cAAAvuG,KAAA6uG,sBACA7uG,KAAAutG,aAAAl6B,OAAAljB,GAGAhxC,GAAAnf,KAAAuuG,cAAAvuG,KAAA4uG,qBACA5uG,KAAAmtG,YAAA95B,OAAAljB,GAGAnwD,KAAAgiD,QAAA,oBAvGAhiD,KAAAovG,UAAAjwF,GA0GAnf,KAAAsxG,UAAA,WACA,IAAA/oG,EAAAvI,KAAAiG,QAAAq/E,kBAAAtlF,KAAAykD,WACAikD,EAAA1oG,KAAA8xF,UAAA9xF,KAAAykD,WACA8sD,EAAAh2F,KAAA5J,IAAA+2F,EAAAntF,KAAA3J,KAAA5R,KAAA+xF,WAAA,GAAA/xF,KAAAykD,WAAAl8C,IAAAvI,KAAA4D,aAAAsqG,GAAAluG,KAAAyvG,cAAA,GACAzvG,KAAAwtG,eAAA+D,GAAAvxG,KAAAywD,WAAAzP,aACAhhD,KAAAwxG,iBAAAD,EAAAvxG,KAAAwxG,kBAAAD,EAAAvxG,KAAAwxG,iBACA,IACAxsD,IADAusD,GAAA,EAAAvxG,KAAAykD,aACAl8C,EAAAmgG,EAEA,GAAA6I,GAAAvxG,KAAAuxG,eAAAvxG,KAAA6tG,MAAAtlG,QAAAvI,KAAAuxG,eAAAvsD,GAAAhlD,KAAAytG,SAAA,CACAzoD,GAAAhlD,KAAAytG,WACAztG,KAAAytG,SAAAzoD,EACAhlD,KAAAwwD,WAAAy4C,WAAAjkD,IAGA,IAAAqF,EAAArqD,KAAA8O,UAAAqD,YACAnS,KAAA8O,UAAAxE,MAAA/B,OAAAgpG,EAAA,KACAvxG,KAAAwvG,mBAAA,EAAAxvG,KAAAyxG,aAAApnD,EAAAknD,GACAvxG,KAAAuxG,gBAEAvxG,KAAAgiD,QAAA,cAIAhiD,KAAA4vG,oBAAA,WACA,IAAA3pG,EAAAjG,KAAAiG,QACAsK,EAAAvQ,KAAA6tG,MACA6D,EAAAnhG,EAAAhI,QAAA,EAAAvI,KAAAykD,WAEAikD,EADA1oG,KAAAiG,QAAAq/E,kBACAtlF,KAAAykD,WACAktD,EAAA3xG,KAAA4xG,kBACAC,GAAAH,IAAA1xG,KAAAywG,0BAAAlgG,EAAAw9F,cAAA4D,EAAA,EAAA3xG,KAAA0hG,SAAA,GACAoQ,EAAA9xG,KAAAwtG,eAAAqE,EAEAC,IACA9xG,KAAAwtG,aAAAqE,EACA7xG,KAAAywD,WAAAw4C,WAAA4I,IAGA,IAAAE,EAAA/xG,KAAAytG,SAEAztG,KAAA8xF,WAAA9xF,KAAAykD,WAAA,GAAAzkD,KAAAsxG,YACA,IAAArD,EAAA19F,EAAAu9F,eAAA9tG,KAAAykD,WACAg3C,GAAAz7F,KAAA8xF,WAAA9xF,KAAAgxG,gBAAAzgG,EAAAu9F,eAAA9tG,KAAAykD,YAAAzkD,KAAAgxG,eAAA,EACAtI,GAAAjN,EACA,IAAA6U,EAAAtwG,KAAA4D,aACA5D,KAAAiG,QAAAu5E,aAAAjkE,KAAA3J,KAAA0+F,EAAAh+F,IAAAiJ,KAAA5J,IAAA3R,KAAAqmD,UAAAqiD,EAAAn4F,EAAAu9F,eAAAwC,EAAA/0D,UACAv7C,KAAAiG,QAAAy5E,cAAAnkE,KAAA3J,KAAA0+F,EAAAnjG,KAAAoO,KAAA5J,IAAA3R,KAAA2/E,WAAAgyB,EAAA,EAAA3xG,KAAA0hG,SAAAnxF,EAAAw9F,cAAAuC,EAAAljG,SACA,IAAA43C,GAAA0sD,IAAA1xG,KAAA6wG,0BAAAtgG,EAAAu9F,eAAApF,EAAAjN,EAAA,GAAAz7F,KAAAqmD,UAAAiqD,EAAAh+F,KACA0/F,EAAAD,IAAA/sD,EAEAgtD,IACAhyG,KAAAytG,SAAAzoD,EACAhlD,KAAAwwD,WAAAy4C,WAAAjkD,IAGA,IAIAy6C,EAAAwS,EAJA38E,EAAAt1B,KAAAqmD,UAAArmD,KAAAykD,WACAytD,EAAA32F,KAAAC,KAAAyyF,EAAAjuG,KAAAykD,YAAA,EACApS,EAAA92B,KAAA3J,IAAA,EAAA2J,KAAA6nB,OAAApjC,KAAAqmD,UAAA/wB,GAAAt1B,KAAAykD,aACAnS,EAAAD,EAAA6/D,EAEAztD,EAAAzkD,KAAAykD,WACApS,EAAApsC,EAAA6+E,oBAAAzyC,EAAA,GACA,IAAAitB,EAAAr5D,EAAAs5D,YAAAltB,GAEAitB,IACAjtB,EAAAitB,EAAA56C,MAAAqsB,KAGA0uD,EAAAx5F,EAAA28C,oBAAAvQ,EAAA,GACA4/D,EAAAhsG,EAAAq+E,aAAAjyC,GAAAoS,EACAnS,EAAA/2B,KAAA5J,IAAA1L,EAAA6+E,oBAAAxyC,EAAA,GAAArsC,EAAAu8C,YAAA,GACAyrD,EAAA19F,EAAAu9F,eAAA7nG,EAAAq+E,aAAAhyC,GAAAmS,EAAAwtD,EACA38E,EAAAt1B,KAAAqmD,UAAAo5C,EAAAh7C,EACA,IAAAtlC,EAAA,EA0BA,OAzBAnf,KAAA0kD,YAAAl8C,OAAAmpG,GAAAG,KAAA3yF,EAAAnf,KAAA8uG,kBAEAgD,GAAAE,KACA7yF,GAAAnf,KAAAwvG,mBAAA,EAAAxvG,KAAA0gG,YAAAnwF,EAAA/H,MAAA+H,EAAAhI,QAEAvI,KAAAgiD,QAAA,8BAEAgwD,IAAAL,EAAA3xG,KAAA4xG,oBAGA5xG,KAAA0kD,YAAA,CACAl8C,MAAAmpG,EACApnG,QAAAvK,KAAA0hG,SACArvD,WACAotD,iBACAntD,UACAmS,aACAvJ,eAAAl7C,KAAAk7C,eACA+yD,YACAvF,YACApzE,SACA2rE,aAAAx8C,EAAAlpC,KAAA3J,IAAA,EAAA2J,KAAAC,MAAA8Z,EAAA/kB,EAAAhI,OAAAgI,EAAAu9F,gBAAArpD,IAAA,EACAl8C,OAAAvI,KAAA6tG,MAAAC,gBAEA9tG,KAAAiG,QAAAi1D,cAAAl7D,KAAAiG,QAAAi1D,aAAAL,gBAAA82C,EAAA3xG,KAAA0hG,UACAviF,GAGAnf,KAAAqxG,aAAA,WACA,GAAArxG,KAAAkvG,cAAA,CACA,IAAA78D,EAAAryC,KAAAkvG,cAAA78D,SACAC,EAAAtyC,KAAAkvG,cAAA58D,QACAtyC,KAAAkvG,cAAA,KACA,IAAAxqD,EAAA1kD,KAAA0kD,YAEA,KAAArS,EAAAqS,EAAApS,QAAA,MAIAA,EAAAoS,EAAArS,UAIA,OAAAC,IAAAw5B,KACA9rE,KAAA2vG,aAAA3vG,KAAA6hD,aAAAwxB,OAAA3uB,QACA1kD,KAAAqtG,WAAAh6B,OAAA3uB,KAIA1kD,KAAAqtG,WAAA9b,YAAA7sC,EAAArS,EAAAC,IACA,KAGAtyC,KAAA4xG,gBAAA,WACA,IAAAO,EAAAnyG,KAAAiG,QAAA45E,iBAGA,OAFA7/E,KAAAq4D,iBAAAr4D,KAAAiG,QAAA6zD,eAAAq4C,GAAA,GACAnyG,KAAAqtG,YAAA8E,EAAAnyG,KAAAqtG,WAAAx0D,kBAAAs5D,EAAAnyG,KAAAqtG,WAAAx0D,gBAAA,IACAt9B,KAAA3J,IAAA5R,KAAA6tG,MAAAE,cAAA,EAAA/tG,KAAA0hG,SAAAnmF,KAAA6nB,MAAA+uE,EAAAnyG,KAAAk7C,kBAGAl7C,KAAAqyF,mBAAA,WACAryF,KAAAutG,aAAA3K,WAAA5iG,KAAAiG,QAAAiD,YAAA,IACAlJ,KAAAq6F,MAAA1lD,SAAA30C,KAAA6uG,sBAGA7uG,KAAAsyF,kBAAA,WACAtyF,KAAAmtG,YAAAvK,WAAA5iG,KAAAiG,QAAAiD,cACAlJ,KAAAq6F,MAAA1lD,SAAA30C,KAAA4uG,qBAGA5uG,KAAA49E,oBAAA,SAAA7sC,EAAAhuC,GACA/C,KAAA6hD,aAAA+7B,oBAAA7sC,EAAAhuC,IAGA/C,KAAA69E,uBAAA,SAAA9sC,EAAAhuC,GACA/C,KAAA6hD,aAAAg8B,uBAAA9sC,EAAAhuC,IAGA/C,KAAAuyF,kBAAA,SAAAtxB,GACAjhE,KAAAq6F,MAAA1lD,SAAA30C,KAAAs6F,gBAGAt6F,KAAAmG,eAAA,SAAAnC,GACAhE,KAAA6hD,aAAA17C,eAAAnC,GACAhE,KAAAq6F,MAAA1lD,SAAA30C,KAAAs6F,gBAGAt6F,KAAAsxF,aAAA,WACAtxF,KAAAq6F,MAAA1lD,SAAA30C,KAAAsuG,gBAGAtuG,KAAAmxF,WAAA,WACAnxF,KAAAulD,aAAA4rC,cAGAnxF,KAAAixF,WAAA,WACAjxF,KAAAulD,aAAA0rC,cAGAjxF,KAAA4tF,wBAAA,SAAA1wC,EAAAmf,EAAA/mC,GACAt1B,KAAAo+C,qBAAAlB,EAAA5nB,GACAt1B,KAAAo+C,qBAAAie,EAAA/mC,IAGAt1B,KAAAo+C,qBAAA,SAAA/wC,EAAAioB,EAAA88E,GACA,OAAApyG,KAAA6tG,MAAAC,eAAA,CACA,IAAA5lG,EAAAlI,KAAAulD,aAAAmF,iBAAAr9C,GACAF,EAAAjF,EAAAiF,KACAmF,EAAApK,EAAAoK,IACA+/F,EAAAD,KAAA9/F,KAAA,EACAggG,EAAAF,KAAA72D,QAAA,EACA8K,EAAArmD,KAAA2tG,iBAAA3tG,KAAAiG,QAAA+kD,eAAAhrD,KAAAqmD,UAEAA,EAAAgsD,EAAA//F,GACAgjB,GAAA+wB,EAAAgsD,EAAA//F,EAAAtS,KAAAykD,aAAAnyC,GAAAgjB,EAAAt1B,KAAA6tG,MAAAC,gBACA,IAAAx7F,OAAAtS,KAAA4D,aAAA0O,KACAtS,KAAAiG,QAAAu5E,aAAAltE,IACO+zC,EAAArmD,KAAA6tG,MAAAC,eAAAwE,EAAAhgG,EAAAtS,KAAAykD,aACPnvB,GAAA+wB,EAAArmD,KAAA6tG,MAAAC,eAAAwE,EAAAhgG,EAAAtS,KAAAykD,aAAAnyC,GAAAgjB,EAAAt1B,KAAA6tG,MAAAC,gBACA9tG,KAAAiG,QAAAu5E,aAAAltE,EAAAtS,KAAAykD,WAAA6tD,EAAAtyG,KAAA6tG,MAAAC,iBAGA,IAAAnuB,EAAA3/E,KAAA2/E,WAEAA,EAAAxyE,GACAA,EAAAnN,KAAA0hG,SAAA,EAAA1hG,KAAA0kD,YAAAxJ,iBAAA/tC,GAAAnN,KAAA4D,aAAAuJ,MACAnN,KAAAiG,QAAAy5E,cAAAvyE,IACOwyE,EAAA3/E,KAAA6tG,MAAAE,cAAA5gG,EAAAnN,KAAAk7C,eACPl7C,KAAAiG,QAAAy5E,cAAAnkE,KAAA6nB,MAAAj2B,EAAAnN,KAAAk7C,eAAAl7C,KAAA6tG,MAAAE,gBACOpuB,GAAA3/E,KAAA0hG,UAAAv0F,EAAAwyE,EAAA3/E,KAAAk7C,gBACPl7C,KAAAiG,QAAAy5E,cAAA,KAIA1/E,KAAAgrD,aAAA,WACA,OAAAhrD,KAAAiG,QAAA+kD,gBAGAhrD,KAAA4/E,cAAA,WACA,OAAA5/E,KAAAiG,QAAA25E,iBAGA5/E,KAAA43F,gBAAA,WACA,OAAA53F,KAAAqmD,UAAArmD,KAAAykD,YAGAzkD,KAAA23F,mBAAA,WACA,OAAAp8E,KAAA3J,IAAA,EAAA2J,KAAA0C,OAAAje,KAAAqmD,UAAArmD,KAAA6tG,MAAAC,gBAAA9tG,KAAAykD,YAAA,IAGAzkD,KAAA83F,YAAA,SAAA/mD,GACA/wC,KAAAiG,QAAAu5E,aAAAzuC,EAAA/wC,KAAAykD,aAGAzkD,KAAAk4F,YAAA,SAAA7qF,EAAAklG,GACA,iBAAAllG,MAAA,CACA0jC,IAAA1jC,EACA2jC,OAAA,IAEA,IAAA9oC,EAAAlI,KAAAulD,aAAAmF,iBAAAr9C,GACA+8C,EAAApqD,KAAA6tG,MAAAC,eAAA9tG,KAAAykD,WACAnvB,EAAAptB,EAAAoK,IAAA83C,GAAAmoD,GAAA,GAEA,OADAvyG,KAAAiG,QAAAu5E,aAAAlqD,GACAA,GAGAt1B,KAAAwyG,MAAA,EAEAxyG,KAAAyyG,WAAA,SAAAC,EAAAC,GACA,IAIA3xG,EAAA4xG,EAJA1xG,EAAA,EACAk2B,EAAAp3B,KAAAwyG,MACAK,EAAA,GAMA,IAAA3xG,EAAA,EAAiBA,EAAAk2B,IAAOl2B,EACxB2xG,EAAAjlG,MALA5M,EAKAE,EAAAlB,KAAAwyG,MALAI,EAKAF,GAAAC,EAAAD,IAJAn3F,KAAA0vB,IAAAjqC,EAAA,QAAA4xG,IAOA,OAAAC,GAGA7yG,KAAA+3F,aAAA,SAAAt6E,EAAAu6E,EAAAC,EAAA5nF,GACA,IAIAilB,EAJAt1B,KAAAulD,aAAAmF,iBAAA,CACA3Z,IAAAtzB,EACAuzB,OAAA,IAEA1+B,IACA0lF,IAAA1iE,GAAAt1B,KAAA6tG,MAAAC,eAAA,GACA,IAAAgF,EAAA9yG,KAAAqmD,UACArmD,KAAAiG,QAAAu5E,aAAAlqD,IACA,IAAA2iE,GAAAj4F,KAAA6tF,iBAAAilB,EAAAziG,IAGArQ,KAAA6tF,iBAAA,SAAA6kB,EAAAriG,GACA,IAAAsiG,EAAA3yG,KAAAqmD,UACA,GAAArmD,KAAAgwG,gBAAA,CAEA,IAAAj7D,EAAA/0C,KAEA,GAAA0yG,GAAAC,EAAA,CAEA,GAAA3yG,KAAA2tG,iBAAA,CACA,IAAAoF,EAAA/yG,KAAA2tG,iBAAAkF,MAEA,GAAAE,EAAA1xG,SACAqxG,EAAAK,EAAA,KACAJ,EAAA,OAIA,IAAAE,EAAA99D,EAAA09D,WAAAC,EAAAC,GAEA3yG,KAAA2tG,iBAAA,CACAr1E,KAAAo6E,EACA3gC,GAAA4gC,EACAE,SAEAptD,cAAAzlD,KAAAgzG,QAEAj+D,EAAA9uC,QAAAu5E,aAAAqzB,EAAAtrF,SAEAwtB,EAAA9uC,QAAAs5E,WAAAozB,EACA3yG,KAAAgzG,OAAAttD,YAAA,WACAmtD,EAAAxxG,QACA0zC,EAAA9uC,QAAAu5E,aAAAqzB,EAAAtrF,SAEAwtB,EAAA9uC,QAAAs5E,WAAAozB,GACS,MAAAA,GACT59D,EAAA9uC,QAAAs5E,YAAA,EAEAxqC,EAAA9uC,QAAAu5E,aAAAmzB,GAEAA,EAAA,OAEA59D,EAAAi+D,OAAAvtD,cAAA1Q,EAAAi+D,QACAj+D,EAAA44D,iBAAA,KACAt9F,SAEO,OAGPrQ,KAAAyxF,UAAA,SAAAprC,GACArmD,KAAAqmD,gBACArmD,KAAAq6F,MAAA1lD,SAAA30C,KAAAwuG,eACAxuG,KAAAqmD,cAIArmD,KAAA0xF,UAAA,SAAA/R,GACA3/E,KAAA2/E,iBAAA3/E,KAAA2/E,cACA3/E,KAAAq6F,MAAA1lD,SAAA30C,KAAA8uG,kBAGA9uG,KAAAizG,SAAA,SAAAp3F,EAAA7S,GACAhJ,KAAAiG,QAAAu5E,aAAAx2E,GACAhJ,KAAAiG,QAAAy5E,cAAA12E,IAGAhJ,KAAAmgD,SAAA,SAAA/S,EAAAC,GACAA,GAAArtC,KAAAiG,QAAAu5E,aAAAx/E,KAAAiG,QAAA+kD,eAAA3d,GACAD,GAAAptC,KAAAiG,QAAAy5E,cAAA1/E,KAAAiG,QAAA25E,gBAAAxyC,IAGAptC,KAAAigD,eAAA,SAAA7S,EAAAC,GACA,OAAAA,EAAA,GAAArtC,KAAAiG,QAAA+kD,gBAAA,EAAAhrD,KAAA4D,aAAA0O,MACA+6B,EAAA,GAAArtC,KAAAiG,QAAA+kD,eAAAhrD,KAAA6tG,MAAAC,eAAA9tG,KAAA0kD,YAAAgkD,WAAA,EAAA1oG,KAAA4D,aAAA23C,SACAnO,EAAA,GAAAptC,KAAAiG,QAAA25E,iBAAA,EAAA5/E,KAAA4D,aAAAuJ,OACAigC,EAAA,GAAAptC,KAAAiG,QAAA25E,gBAAA5/E,KAAA6tG,MAAAE,cAAA/tG,KAAA0kD,YAAAl8C,OAAA,EAAAxI,KAAA4D,aAAAwJ,YAAA,MAGApN,KAAA0iD,yBAAA,SAAA7mC,EAAA7S,GACA,IAAAkqG,EAEA,GAAAlzG,KAAAmzG,kBAAA,CACAD,EAAA,CACA5gG,IAAA,EACAnF,KAAA,GAEA,IAAA3M,EAAAR,KAAAukG,aAAAwH,qBAAA,CAAAlwF,EAAA7S,IACA6S,EAAArb,EAAA,GAAAR,KAAA0gG,YAAA1gG,KAAAqkG,OAAAl3F,KACAnE,EAAAxI,EAAA,QAEA0yG,EAAAlzG,KAAAiK,SAAA+sC,wBAGA,IAAAkqB,EAAArlD,EAAA7b,KAAA2/E,WAAAuzB,EAAA/lG,KAAAnN,KAAA0hG,SACApsE,EAAA4rC,EAAAlhE,KAAAk7C,eACAnK,EAAAx1B,KAAA0C,OAAAjV,EAAAhJ,KAAAqmD,UAAA6sD,EAAA5gG,KAAAtS,KAAAykD,YACA4W,EAAAr7D,KAAAozG,aAAA73F,KAAA0C,MAAAqX,GAAA/Z,KAAA6nB,MAAA9N,GACA,OACAyb,MACAC,OAAAqqB,EACAgb,KAAA/gD,EAAA+lC,EAAA,OACA6F,YAIAlhE,KAAA89C,wBAAA,SAAAjiC,EAAA7S,GACA,IAAAkqG,EAEA,GAAAlzG,KAAAmzG,kBAAA,CACAD,EAAA,CACA5gG,IAAA,EACAnF,KAAA,GAEA,IAAA3M,EAAAR,KAAAukG,aAAAwH,qBAAA,CAAAlwF,EAAA7S,IACA6S,EAAArb,EAAA,GAAAR,KAAA0gG,YAAA1gG,KAAAqkG,OAAAl3F,KACAnE,EAAAxI,EAAA,QAEA0yG,EAAAlzG,KAAAiK,SAAA+sC,wBAGA,IAAAkqB,EAAArlD,EAAA7b,KAAA2/E,WAAAuzB,EAAA/lG,KAAAnN,KAAA0hG,SACApsE,EAAA4rC,EAAAlhE,KAAAk7C,eACAmgB,EAAAr7D,KAAAozG,aAAA73F,KAAA0C,MAAAqX,GAAA/Z,KAAA6nB,MAAA9N,GACAyb,EAAAx1B,KAAA0C,OAAAjV,EAAAhJ,KAAAqmD,UAAA6sD,EAAA5gG,KAAAtS,KAAAykD,YACA,OAAAzkD,KAAAiG,QAAA65D,yBAAA/uB,EAAAx1B,KAAA3J,IAAAypD,EAAA,GAAA6F,IAGAlhE,KAAA8pD,wBAAA,SAAA/Y,EAAAC,GACA,IAAAkiE,EAAAlzG,KAAAiK,SAAA+sC,wBACA9uC,EAAAlI,KAAAiG,QAAA6sC,yBAAA/B,EAAAC,GACAn1B,EAAA7b,KAAA0hG,UAAA1hG,KAAAiG,QAAAi1D,aAAAlC,UAAA9wD,EAAA6oC,OAAA/wC,KAAAiG,QAAAi1D,aAAAE,WAAAlzD,EAAA8oC,QAAAz1B,KAAA6nB,MAAAl7B,EAAA8oC,OAAAhxC,KAAAk7C,iBACAlyC,EAAAd,EAAA6oC,IAAA/wC,KAAAykD,WACA,OACA4uD,MAAAH,EAAA/lG,KAAA0O,EAAA7b,KAAA2/E,WACA51B,MAAAmpD,EAAA5gG,IAAAtJ,EAAAhJ,KAAAqmD,YAIArmD,KAAAkxF,eAAA,WACA/7C,EAAArU,YAAA9gC,KAAA8O,UAAA,cAGA9O,KAAAoxF,cAAA,WACAj8C,EAAApU,eAAA/gC,KAAA8O,UAAA,cAGA9O,KAAAi3F,gBAAA,SAAA/D,GACAlzF,KAAA46F,aAAA1H,EAEAA,EAAAtjF,UACAsjF,EAAAtjF,QAAA5P,KAAAgtF,SAAA1iF,MAAAsF,SAGAsjF,EAAAt5C,kBAAA55C,KAAAszG,mBAEAtzG,KAAAszG,oBACAn+D,EAAArU,YAAA9gC,KAAAgtF,SAAA,mBACAhtF,KAAAgtF,SAAA1iF,MAAAsF,QAAA,GACA5P,KAAAq6C,wBACAr6C,KAAAulD,aAAA/kB,QAAAl2B,MAAA23B,QAAA,QAEAixD,EAAA/U,SAAAn+E,KAAAiG,QAAA4D,UAAAqpF,EAAAr5C,YAAA,kCAIA75C,KAAAk3F,mBAAA,SAAAnuF,GACA,IAAAsE,EAAArN,KAAAiG,QAAAJ,UAAAwH,OACArN,KAAAuzG,SAAAxqG,EAAA,0BAAAsE,EAAA0jC,IAAA1jC,EAAA2jC,QACAhxC,KAAAq6C,yBAGAr6C,KAAAm3F,gBAAA,WACAn3F,KAAA46F,eACA56F,KAAA46F,aAAAzc,UAAAn+E,KAAAiG,QAAAkD,aAAAnJ,KAAA46F,aAAAzc,UACAhpC,EAAApU,eAAA/gC,KAAAgtF,SAAA,mBACAhtF,KAAAgtF,SAAA1iF,MAAAsF,QAAA5P,KAAA46F,aAAAhrF,QACA5P,KAAA46F,aAAA,KACA56F,KAAAulD,aAAA/kB,QAAAl2B,MAAA23B,QAAA,KAGAjiC,KAAAuzG,SAAA,SAAAxqG,EAAAW,EAAAqnC,EAAAC,GACA,IAAA/qC,EAAAjG,KAAAiG,QACAA,EAAA21E,YAAApuE,MAAAujC,GAAA,KACA,IAAAyiE,EAAA,CACA9pG,OACAhI,MAAAqH,GAEAsa,EAAApd,EAAA6gE,UAAA/1B,GAEA,SAAAC,EACA3tB,EAAAzV,KAAA4lG,QAIA,IAFA,IAAAp8E,EAAA,EAEAl2B,EAAA,EAAuBA,EAAAmiB,EAAAhiB,OAAmBH,IAAA,CAC1C,IAAA4hE,EAAAz/C,EAAAniB,GAGA,GAAA8vC,IAFA5Z,GAAA0rC,EAAAphE,MAAAL,QAEA,CACA,IAAAmL,EAAAs2D,EAAAphE,MAAAL,QAAA+1B,EAAA4Z,GACAu7B,EAAAzJ,EAAAphE,MAAA2kB,MAAA,EAAA7Z,GACAggE,EAAA1J,EAAAphE,MAAA2kB,MAAA7Z,GACA6W,EAAAvb,OAAA5G,EAAA,GACAwI,KAAAo5D,EAAAp5D,KACAhI,MAAA6qE,GACainC,EAAA,CACb9pG,KAAAo5D,EAAAp5D,KACAhI,MAAA8qE,IAEA,OAKAxsE,KAAAuxF,YAAAxgD,MAGA/wC,KAAA8E,SAAA,SAAA1B,EAAA8sC,GACA,IAAA6E,EAAA/0C,KAQA,GANAA,KAAAyzG,SAAArwG,EAEA2xC,EAAA+W,eAAA,eACA1oD,UAGAA,GAAA,iBAAAA,EAIAisD,EAAAjsD,OAJA,CACA,IAAAm0B,EAAAn0B,GAAApD,KAAAsG,SAAAlD,MAAAuqD,aACAwC,EAAAhB,WAAA,SAAA53B,GAAA83B,GAKA,SAAAA,EAAAhhD,GACA,GAAA0mC,EAAA0+D,UAAArwG,EAAA,OAAA8sC,OACA,IAAA7hC,MAAAqlG,SAAA,UAAA3lG,MAAA,wBAAA3K,EAAA,6BACAiL,EAAAq/D,MAAA34B,EAAA0+D,SAAAplG,EAAAq/D,KACAv4B,EAAA5T,gBAAAlzB,EAAAuB,QAAAvB,EAAAqlG,SAAA3+D,EAAAjmC,WACAimC,EAAA3xC,OAAA+xC,EAAApU,eAAAgU,EAAAjmC,UAAAimC,EAAA3xC,MAAAswG,UACA,IAAAnpG,EAAA,YAAA8D,IAAA9D,QAAA,YAAAwqC,EAAA3xC,OAAA,IAA4F,EAAA2xC,EAAA2sD,SAC5F3sD,EAAA2sD,UAAAn3F,GAAAwqC,EAAA2sD,UAAA3sD,EAAA4tD,WAAAp4F,GACAwqC,EAAA7lC,OAAAb,EAAAqlG,SACA3+D,EAAA3xC,MAAAiL,EACA8mC,EAAArU,YAAAiU,EAAAjmC,UAAAT,EAAAqlG,UACAv+D,EAAAjU,YAAA6T,EAAAjmC,UAAA,WAAAT,EAAAslG,QAEA5+D,EAAA84D,QACA94D,EAAA84D,MAAArlG,MAAA,EAEAusC,EAAAs6D,oBAGAt6D,EAAA+W,eAAA,eACA1oD,MAAAiL,IAGA6hC,SAIAlwC,KAAAqwF,SAAA,WACA,OAAArwF,KAAAyzG,UAGAzzG,KAAAyiC,SAAA,SAAAn4B,EAAA62B,GACAgU,EAAAjU,YAAAlhC,KAAA8O,UAAAxE,GAAA,IAAA62B,IAGAnhC,KAAA4+C,WAAA,SAAAt0C,GACA6qC,EAAApU,eAAA/gC,KAAA8O,UAAAxE,IAGAtK,KAAA0mD,eAAA,SAAAp8C,GACA6qC,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,SAAAA,IAGAtK,KAAA4zG,eAAA,SAAAhsD,GACAzS,EAAA1S,SAAAziC,KAAAiK,SAAAK,MAAA,SAAAs9C,IAGA5nD,KAAA6zG,mBAAA,WACA1+D,EAAA5T,gBAAAyrE,EAAA,iBAAAhtG,KAAA8O,YAGA9O,KAAA4I,QAAA,WACA5I,KAAAq8B,SACAr8B,KAAAukG,aAAA37F,UACA5I,KAAAulD,aAAA38C,aAEGtH,KAAAqN,EAAA/N,WACHuvD,EAAAzC,cAAA/+C,EAAA/N,UAAA,YACAs6F,eAAA,CACAvtC,cAAA,GAEA0K,eAAA,CACAljD,IAAA,SAAAzT,GACA1B,KAAAqtG,WAAA3yC,kBAAAh5D,IAAA1B,KAAAq6F,MAAA1lD,SAAA30C,KAAA0uG,cAEA/gD,cAAA,GAEAjqD,gBAAA,CACAyR,IAAA,WACAnV,KAAAgvG,sBAEArhD,cAAA,GAEAwtC,kBAAA,CACAhmF,IAAA,WACAnV,KAAAgvG,sBAEArhD,aAAA,IAEAytC,YAAA,CACAjmF,IAAA,SAAA4qB,GACA,iBAAAA,IAAA//B,KAAA+vG,mBAAAhwE,GACA//B,KAAA8vG,mBAAA/vE,EACA//B,KAAAgvG,sBAEAl4F,IAAA,WACA,OAAA9W,KAAA8vG,kBAAA9vG,KAAA+vG,qBAGAvsG,WAAA,CACA2R,IAAA,SAAA2rC,GACA9gD,KAAA8iD,QAAAx4C,MAAA23B,QAAA6e,EAAA,eACA9gD,KAAAq6F,MAAA1lD,SAAA30C,KAAAquG,aACAruG,KAAAktG,kBAEAv/C,cAAA,GAEA0tC,gBAAA,CACAlmF,IAAA,SAAA2rC,GACA3L,EAAAjU,YAAAlhC,KAAA8iD,QAAA,wBAAAhC,IAEA6M,cAAA,GAEA2tC,gBAAA,CACAnmF,IAAA,SAAA2rC,GACA9gD,KAAA6hD,aAAA+yC,mBAAA9zC,GACA9gD,KAAAq6F,MAAA1lD,SAAA30C,KAAAs6F,gBAEA3sC,cAAA,GAEA4tC,oBAAA,CACApmF,IAAA,SAAA2rC,GACA9gD,KAAAqtG,WAAAjZ,uBAAAtzC,IAAA9gD,KAAAq6F,MAAA1lD,SAAA30C,KAAA0uG,cAEA/gD,cAAA,GAEAstC,oBAAA,CACA9lF,IAAA,SAAAu+E,GACA1zF,KAAA6hD,aAAA+xC,uBAAAF,GACA1zF,KAAAq6F,MAAA1lD,SAAA30C,KAAAs6F,gBAEA3sC,cAAA,GAEAotC,wBAAA,CACA5lF,IAAA,SAAA4qB,GACA//B,KAAAywG,0BAAAzwG,KAAAwtG,cAAAxtG,KAAAq6F,MAAA1lD,SAAA30C,KAAAwuG,gBAEA7gD,cAAA,GAEAqtC,wBAAA,CACA7lF,IAAA,SAAA4qB,GACA//B,KAAA6wG,0BAAA7wG,KAAAytG,UAAAztG,KAAAq6F,MAAA1lD,SAAA30C,KAAAwuG,gBAEA7gD,cAAA,GAEAtqD,SAAA,CACA8R,IAAA,SAAA5E,GACA,iBAAAA,OAAA,MACAvQ,KAAA8O,UAAAxE,MAAAjH,SAAAkN,EACAvQ,KAAAmvG,kBAEAxhD,aAAA,IAEA6tC,WAAA,CACArmF,IAAA,SAAArK,GACA9K,KAAA8O,UAAAxE,MAAAkxF,WAAA1wF,EACA9K,KAAAmvG,mBAGA3jG,SAAA,CACA2J,IAAA,SAAA4qB,GACA//B,KAAAkwF,eAGA3kF,SAAA,CACA4J,IAAA,SAAA4qB,GACA//B,KAAA+xF,UAAA,kBAAA/xF,KAAA+xF,UAAA,GACA/xF,KAAAkwF,eAGA0L,eAAA,CACAzmF,IAAA,SAAA4qB,GACA//B,KAAAkwF,cAEAviC,aAAA,GAEA8tC,cAAA,CACAtmF,IAAA,SAAA4qB,GACAA,MAAA,EACA//B,KAAAgxG,gBAAAjxE,IACA//B,KAAAgxG,eAAAjxE,EACA//B,KAAAq6F,MAAA1lD,SAAA30C,KAAAwuG,iBAEA7gD,aAAA,EACAN,YAAA,GAEAquC,iBAAA,CACAvmF,IAAA,SAAA4qB,GACA//B,KAAA6hD,aAAA4/C,cAAA1hE,EACA//B,KAAAq6F,MAAA1lD,SAAA30C,KAAAs6F,iBAGAl3F,MAAA,CACA+R,IAAA,SAAA4qB,GACA//B,KAAA8E,SAAAi7B,IAEAjpB,IAAA,WACA,OAAA9W,KAAAyzG,UAAAzzG,KAAAoD,OAEAuqD,aAAA,mBACAN,YAAA,GAEAsuC,iBAAA,GACA/hD,kBAAA,CACA+T,cAAAtuB,EAAAD,WAAAC,EAAAhB,QAGA58B,EAAAkN,oBAEA3M,IAAAsM,OAAA,oIAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,cAEA8rD,EAAA9rD,EAAA,cAEAqM,EAAArM,EAAA,wBAAAqM,aAEA2hD,EAAAhuD,EAAA,aAkBA,SAAAqrE,EAAAsmC,GACA,uBAAAC,OAAA,OACArkE,YAAA,aACA4vC,UAAA,cAGA,GAAAnvB,EAAAr5C,IAAA,uBACA,IAAAk9F,EAvBA,SAAAF,GACA,IAAAjkD,EAAA,kBAAA5B,EAAApC,WAAAioD,GAAA,MAEA,IACA,WAAAG,KAAA,CAAApkD,GAAA,CACAnmD,KAAA,2BAEK,MAAA2M,GAEL,IACA69F,EAAA,IADA7nF,OAAA8nF,aAAA9nF,OAAA+nF,mBAAA/nF,OAAAgoF,gBAGA,OADAH,EAAApvC,OAAAjV,GACAqkD,EAAAI,QAAA,2BAWAC,CAAAT,GAEAU,GADAnoF,OAAAooF,KAAApoF,OAAAqoF,WACAC,gBAAAX,GACA,WAAAD,OAAAS,GAGA,WAAAT,OAAAD,GAGA,IAAAc,EAAA,SAAAC,GACAA,EAAAnlE,cAAAmlE,EAAA70G,KAAA80G,2BAAAvzG,MAAAvB,KAAAoB,YACApB,KAAAuyE,QAAAsiC,EACA70G,KAAA+0G,gBAAA/0G,KAAA+0G,gBAAApyG,KAAA3C,MACAA,KAAAg1G,eAAAh1G,KAAAg1G,eAAAryG,KAAA3C,MACAA,KAAAi1G,UAAAj1G,KAAAi1G,UAAAtyG,KAAA3C,MACAA,KAAAk1G,WAAA,EACAl1G,KAAAm1G,UAAA,GACAn1G,KAAAuyE,QAAA6iC,UAAAp1G,KAAAi1G,YAGA,WACA1mG,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAA80G,2BAAA,SAAAO,EAAAruF,EAAAsuF,EAAAxB,EAAAyB,GAGA,GAFApzG,EAAAqzG,YAAArzG,EAAAszG,QAAAtzG,EAAAszG,MAAAtzG,EAAAqzG,WAEArlD,EAAAr5C,IAAA,cAAA3U,EAAAszG,MACA3B,KAAA3jD,EAAAzB,UAAA1nC,EAAA,cACO,CACP,IAAA0uF,EAAA11G,KAAA21G,eACA7B,KAAA4B,EAAAvzG,EAAAszG,MAAA,kCACA,IAAAG,EAAA,GACAP,EAAA5yG,QAAA,SAAAo1B,GACA+9E,EAAA/9E,GAAA69E,EAAAvzG,EAAAszG,MAAA59E,EAAA,UAAAtjB,QAAA,yBAgBA,OAZAvU,KAAAuyE,QAAA/E,EAAAsmC,GAEAyB,GACAv1G,KAAAwrD,KAAA,gBAAA+pD,GAGAv1G,KAAAuyE,QAAA7iC,YAAA,CACA6f,MAAA,EACAqmD,OACAvnG,OAAA2Y,EACAsuF,cAEAt1G,KAAAuyE,SAGAvyE,KAAAi1G,UAAA,SAAA5+F,GACA,IAAAk3C,EAAAl3C,EAAAK,KAEA,OAAA62C,EAAA7jD,MACA,YACA1J,KAAAgiD,QAAAuL,EAAAziD,KAAA,CACA4L,KAAA62C,EAAA72C,OAGA,MAEA,WACA,IAAArG,EAAArQ,KAAAm1G,UAAA5nD,EAAAnkD,IAEAiH,IACAA,EAAAk9C,EAAA72C,aACA1W,KAAAm1G,UAAA5nD,EAAAnkD,KAGA,MAEA,YACApJ,KAAAstD,YAAAC,EAAA72C,MACA,MAEA,UACA2V,OAAA3lB,iBAAA4tE,KAAA5tE,QAAA4tE,IAAA/yE,MAAAmF,QAAA6mD,EAAA72C,QAKA1W,KAAAstD,YAAA,SAAAnhC,GACAE,OAAA3lB,iBAAA0lB,OAAA1lB,QAAA0lB,MAAAD,IAGAnsB,KAAA21G,eAAA,SAAAjgG,GACA,OAAAu4C,EAAApC,WAAAn2C,IAGA1V,KAAAs/E,UAAA,WACAt/E,KAAAgiD,QAAA,gBAEAhiD,KAAA61G,WAAA,KACA71G,KAAAuyE,QAAA+M,YACAt/E,KAAAuyE,QAAA,KACAvyE,KAAA81G,MAAA91G,KAAA81G,KAAA/7D,IAAA,SAAA/5C,KAAAg1G,gBACAh1G,KAAA81G,KAAA,MAGA91G,KAAAwrD,KAAA,SAAA/mB,EAAAjtB,GACAxX,KAAAuyE,QAAA7iC,YAAA,CACA5oC,QAAA29B,EACAjtB,UAIAxX,KAAAsB,KAAA,SAAAmjC,EAAAjtB,EAAAnH,GACA,GAAAA,EAAA,CACA,IAAAjH,EAAApJ,KAAAk1G,aACAl1G,KAAAm1G,UAAA/rG,GAAAiH,EACAmH,EAAA5J,KAAAxE,GAGApJ,KAAAwrD,KAAA/mB,EAAAjtB,IAGAxX,KAAA+1G,KAAA,SAAAltG,EAAA6N,GACA,IACAA,eAAAyV,MAAAzV,OAAAyV,IAAA,CACAvB,QAAAlU,OAAAyV,IAAAvB,QACA8H,MAAAhc,OAAAyV,IAAAuG,MACAu4C,KAAAv0D,OAAAyV,IAAA8+C,OAEAjrE,KAAAuyE,QAAA7iC,YAAA,CACA7mC,QACA6N,KAAA,CACAA,eAGO,MAAA8M,GACP9c,QAAA0lB,MAAA5I,EAAAkP,SAIA1yB,KAAAg2G,iBAAA,SAAA91E,GACAlgC,KAAA81G,MAAA91G,KAAAs/E,YACAt/E,KAAA81G,KAAA51E,EACAlgC,KAAAsB,KAAA,YAAA4+B,EAAAl4B,aACAk4B,EAAA56B,GAAA,SAAAtF,KAAAg1G,iBAGAh1G,KAAAg1G,eAAA,SAAAl5F,GACA9b,KAAA61G,aACA71G,KAAA61G,WAAA,GACAp/E,WAAAz2B,KAAA+0G,gBAAA,IAGA,UAAAj5F,EAAAitC,OAAA/oD,KAAA61G,WAAAjoG,KAAAkO,EAAA4I,MAAA5I,EAAAtO,OAAmFxN,KAAA61G,WAAAjoG,KAAAkO,EAAA4I,MAAA5I,EAAAm1B,MAGnFjxC,KAAA+0G,gBAAA,WACA,IAAAkB,EAAAj2G,KAAA61G,WACAI,IACAj2G,KAAA61G,WAAA,KAEAI,EAAA50G,OAAA,IAAA40G,EAAA50G,OAAArB,KAAA81G,KAAAtzD,aAAA,EACAxiD,KAAAsB,KAAA,YAAAtB,KAAA81G,KAAA9tG,aACOhI,KAAA+1G,KAAA,UACPr/F,KAAAu/F,QAGG30G,KAAAszG,EAAAh0G,WA0DHa,EAAAy0G,eAxDA,SAAAb,EAAAruF,EAAAsuF,GACA,IAAAa,EAAA,KACAC,GAAA,EACAC,EAAAj2G,OAAAS,OAAA2N,GACA8nG,EAAA,GACAC,EAAA,IAAA3B,EAAA,CACA0B,gBACAh3B,UAAA,aACA5vC,YAAA,SAAAr5B,GACAigG,EAAA1oG,KAAAyI,GACA8/F,IACAC,EAAA3/E,WAAA+/E,GAA8CA,QAI9CD,EAAAE,YAAA,SAAA12E,GACAq2E,EAAAr2E,GAGA,IAAAy2E,EAAA,WACA,IAAAjpD,EAAA+oD,EAAA/uF,QACAgmC,EAAAzmD,QAAAqvG,EAAA5oD,EAAAzmD,SAAAvF,MAAA40G,EAAA5oD,EAAA/1C,MAA+D+1C,EAAA1kD,OAAAwtG,EAAAr0D,QAAAuL,EAAA1kD,MAAA0kD,EAAA72C,OAgC/D,OA7BA2/F,EAAA3mE,YAAA,SAAA6d,GACAgpD,EAAAtB,UAAA,CACAv+F,KAAA62C,KAIA8oD,EAAAhmG,SAAA,SAAAqG,EAAAw+F,GACAl1G,KAAA0vC,YAAA,CACAhmC,KAAA,OACAN,GAAA8rG,EACAx+F,UAIA2/F,EAAAN,KAAA,SAAAjrG,EAAA4L,GACA1W,KAAA0vC,YAAA,CACAhmC,KAAA,QACAoB,OACA4L,UAIAy5C,EAAAhB,WAAA,UAAAnoC,GAAA,SAAA0vF,GAGA,IAFAP,EAAA,IAAAO,EAAApB,GAAAe,GAEAC,EAAAj1G,QACAm1G,MAGAD,GAIA90G,EAAAmzG,eACAnzG,EAAA+rE,iBAEAxrE,IAAAsM,OAAA,4GAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,WAAAD,MAEAsM,EAAArM,EAAA,uBAAAqM,aAEAD,EAAApM,EAAA,aAEAw0G,EAAA,SAAA1wG,EAAA5E,EAAA6G,EAAA0uG,EAAAC,EAAAC,GACA,IAAA/hE,EAAA/0C,KAEAA,KAAAqB,SACArB,KAAAiG,UACAjG,KAAAkgC,IAAAj6B,EAAAwK,cACAzQ,KAAA62G,YACA72G,KAAA82G,cACA92G,KAAA+2G,UAAA/2G,KAAAg3G,SAAAr0G,KAAA3C,MACAA,KAAAkgC,IAAA56B,GAAA,SAAAtF,KAAA+2G,WACA/2G,KAAAi3G,QAAAL,EAEA52G,KAAAkvF,gBAAA,WACAz4D,WAAA,WACAse,EAAAhvC,oBAIA/F,KAAA2iD,KAAAz6C,EACA,IAAAgvG,EAAAjxG,EAAA2K,iBAAAyrF,YAAAp2F,EAAA2K,iBAAAumG,YAAA,CACA91G,QAAA,GAEArB,KAAAo3G,gBAAAF,EAAA71G,OACArB,KAAAq3G,QACApxG,EAAAJ,UAAAP,GAAA,eAAAtF,KAAAkvF,mBAGA,WACA3gF,EAAAkB,UAAAzP,KAAAwO,GAEAxO,KAAAq3G,MAAA,WACA,IAAAtiE,EAAA/0C,KAEAkgC,EAAAlgC,KAAAkgC,IACAj6B,EAAAjG,KAAAiG,QACAjG,KAAA2gF,gBAAA16E,EAAAJ,UAAAsC,SACAlC,EAAAJ,UAAA63C,mBAAAz3C,EAAAJ,UAAAg8D,gBACA7hE,KAAAkI,IAAAg4B,EAAAo8B,aAAAt8D,KAAA2iD,KAAA5R,IAAA/wC,KAAA2iD,KAAA3R,QACA,IAAA9oC,EAAAlI,KAAAkI,IACAA,EAAAgnE,cAAA,EACAhnE,EAAAorD,SACAprD,EAAAi2E,SAAAl4E,EAAA4D,UAAA,IAAA3H,EAAAgG,EAAA6oC,IAAA7oC,EAAA8oC,OAAA9oC,EAAA6oC,IAAA7oC,EAAA8oC,OAAAhxC,KAAAqB,QAAArB,KAAA62G,UAAA,SACA72G,KAAA42G,OAAA,GACA52G,KAAAi3G,QAAAx0G,QAAA,SAAA+S,GACA,IAAA0nC,EAAAhd,EAAAo8B,aAAA9mD,EAAAu7B,IAAAv7B,EAAAw7B,QACAkM,EAAAgyB,cAAA,EACAhyB,EAAAoW,SAEAve,EAAA6hE,OAAAhpG,KAAAsvC,KAEAj3C,EAAA86E,eAAA,IAGA/gF,KAAAs3G,iBAAA,WACA,IAAAt3G,KAAAu3G,aAAA,CACA,IAAAtxG,EAAAjG,KAAAiG,QAEA8uC,EAAA/0C,KAEAA,KAAAu3G,cAAA,EACAv3G,KAAA42G,OAAAn0G,QAAA,SAAAy6C,GACAA,EAAAihC,SAAAl4E,EAAA4D,UAAA,IAAA3H,EAAAg7C,EAAAnM,IAAAmM,EAAAlM,OAAAkM,EAAAnM,IAAAmM,EAAAlM,OAAA+D,EAAA1zC,QAAA0zC,EAAA+hE,YAAA,aAIA92G,KAAAw3G,iBAAA,WACA,GAAAx3G,KAAAu3G,aAAA,CACAv3G,KAAAu3G,cAAA,EAEA,QAAAr2G,EAAA,EAAqBA,EAAAlB,KAAA42G,OAAAv1G,OAAwBH,IAC7ClB,KAAAiG,QAAAkD,aAAAnJ,KAAA42G,OAAA11G,GAAAi9E,YAIAn+E,KAAAg3G,SAAA,SAAAl7F,GACA,GAAA9b,KAAAy3E,UAAA,OAAAz3E,KAAAy3G,cAAA37F,GACA,IAAAlS,EAAAkS,EACA,GAAAlS,EAAA8a,MAAAqsB,MAAAnnC,EAAAqnC,IAAAF,KACAnnC,EAAA8a,MAAAqsB,MAAA/wC,KAAAkI,IAAA6oC,IAAA,CACA/wC,KAAAy3E,WAAA,EACA,IAAAigC,EAAA,WAAA57F,EAAAitC,OAAAn/C,EAAAqnC,IAAAD,OAAApnC,EAAA8a,MAAAssB,OAAApnC,EAAA8a,MAAAssB,OAAApnC,EAAAqnC,IAAAD,OACA2mE,EAAA/tG,EAAA8a,MAAAssB,QAAAhxC,KAAAkI,IAAA8oC,QAAApnC,EAAA8a,MAAAssB,QAAAhxC,KAAAkI,IAAA8oC,OAAAhxC,KAAAqB,OAAA,EACAu2G,EAAAhuG,EAAA8a,MAAAssB,OAAAhxC,KAAAkI,IAAA8oC,OAIA,GAHAhxC,KAAAy3G,cAAA37F,GACA67F,IAAA33G,KAAAqB,QAAAq2G,GAEAC,IAAA33G,KAAAiG,QAAAo2E,UACA,cAAAvgE,EAAAitC,OACA,QAAA7nD,EAAAlB,KAAA42G,OAAAv1G,OAAA,EAA8CH,GAAA,EAAQA,IAAA,CACtD,IACA22G,EAAA,CACA9mE,KAFA+mE,EAAA93G,KAAA42G,OAAA11G,IAEA6vC,IACAC,OAAA8mE,EAAA9mE,OAAA4mE,GAEA53G,KAAAkgC,IAAA6vC,kBAAA8nC,EAAA/7F,EAAAtO,YAES,cAAAsO,EAAAitC,OACT,IAAA7nD,EAAAlB,KAAA42G,OAAAv1G,OAAA,EAA8CH,GAAA,EAAQA,IAAA,CACtD,IAAA42G,EACAD,EAAA,CACA9mE,KAFA+mE,EAAA93G,KAAA42G,OAAA11G,IAEA6vC,IACAC,OAAA8mE,EAAA9mE,OAAA4mE,GAEA53G,KAAAkgC,IAAA9F,OAAA,IAAAl4B,EAAA21G,EAAA9mE,IAAA8mE,EAAA7mE,OAAA6mE,EAAA9mE,IAAA8mE,EAAA7mE,OAAA0mE,IAKA13G,KAAAy3E,WAAA,EACAz3E,KAAA+3G,kBAGA/3G,KAAAy3G,cAAA,SAAA37F,GACA9b,KAAAkI,IAAAzD,SAAAqX,GAEA,QAAA5a,EAAAlB,KAAA42G,OAAAv1G,OAAsCH,KACtClB,KAAA42G,OAAA11G,GAAAuD,SAAAqX,GAGA9b,KAAA+3G,iBAGA/3G,KAAA+3G,cAAA,WACA,IAAA/3G,KAAAy3E,UAAA,CAEA,IAAA1iC,EAAA/0C,KAEAiG,EAAAjG,KAAAiG,QAEA+xG,EAAA,SAAA9vG,EAAAnF,GACAkD,EAAAkD,aAAAjB,EAAAi2E,UACAj2E,EAAAi2E,SAAAl4E,EAAA4D,UAAA,IAAA3H,EAAAgG,EAAA6oC,IAAA7oC,EAAA8oC,OAAA9oC,EAAA6oC,IAAA7oC,EAAA8oC,OAAA+D,EAAA1zC,QAAA0B,EAAA,UAGAi1G,EAAAh4G,KAAAkI,IAAAlI,KAAA62G,WAEA,QAAA31G,EAAAlB,KAAA42G,OAAAv1G,OAAsCH,KACtC82G,EAAAh4G,KAAA42G,OAAA11G,GAAAlB,KAAA82G,eAIA92G,KAAA+F,eAAA,SAAA8C,GACA,IAAA7I,KAAAy3E,WAAAz3E,KAAAiG,QAAA,CACA,IAAAiC,EAAAlI,KAAAiG,QAAAJ,UAAAg3D,YAEA30D,EAAA6oC,MAAA/wC,KAAAkI,IAAA6oC,KAAA7oC,EAAA8oC,QAAAhxC,KAAAkI,IAAA8oC,QAAA9oC,EAAA8oC,QAAAhxC,KAAAkI,IAAA8oC,OAAAhxC,KAAAqB,QACArB,KAAAs3G,mBAEAt3G,KAAA6P,MAAA,cAAAhH,KAEA7I,KAAAw3G,mBAEAx3G,KAAA6P,MAAA,cAAAhH,MAIA7I,KAAAszD,OAAA,WACAtzD,KAAAiG,QAAAkD,aAAAnJ,KAAAkI,KAAAlI,KAAAkI,IAAAi2E,UACAn+E,KAAAw3G,mBACAx3G,KAAAkgC,IAAA0L,oBAAA,SAAA5rC,KAAA+2G,WACA/2G,KAAAiG,QAAAJ,UAAA+lC,oBAAA,eAAA5rC,KAAAkvF,iBACAlvF,KAAAiG,QAAA86E,eAAA,GACA/gF,KAAAiG,QAAA,MAGAjG,KAAA00C,OAAA,WACA,QAAA10C,KAAAo3G,gBAAA,CAIA,IAHA,IAAAzmG,EAAA3Q,KAAAiG,QAAA2K,iBACAqnG,GAAAtnG,EAAA0rF,YAAA1rF,EAAAwmG,YAAA91G,OAAArB,KAAAo3G,gBAEAl2G,EAAA,EAAqBA,EAAA+2G,EAAmB/2G,IACxCyP,EAAAmsE,KAAA98E,KAAAiG,SAAA,GAGAjG,KAAA2gF,iBAAA3gF,KAAAiG,QAAAJ,UAAAuC,SAAApI,KAAA2gF,qBAEGr/E,KAAAq1G,EAAA/1G,WACHa,EAAAk1G,gBAEA30G,IAAAsM,OAAA,6GAAAnM,EAAAV,EAAA4M,GACA,IAAAxF,EAAA1G,EAAA,gBAEAk9B,EAAAl9B,EAAA,oBAEA,SAAA+1G,EAAAhlE,EAAAC,GACA,OAAAD,EAAAnC,KAAAoC,EAAApC,KAAAmC,EAAAlC,QAAAmC,EAAAnC,OAqJAvvC,EAAAg7C,YAlJA,SAAApmC,GACA,IAAA8mC,EAAA9mC,EAAA0kC,SACAzW,EAAA6Y,EAAAjR,OACA3kB,EAAA41B,EAAAhR,SACA9H,EAAA8Y,EAAAlR,QACAksE,EAAA9hG,EAAAmpC,cACApT,EAAA/1B,EAAA21B,YAGA,GAFA3H,GAAAhF,EAAAzB,QAAAwO,EAAA+Q,EAAA/Q,QAEA/1B,EAAAlS,OAAAu5C,mBAAA,GAAAtR,EACA/1B,EAAAlS,OAAAs3C,UAAAX,cAAAzkC,EAAA0kC,eAIA,GAAA1W,GAAAC,GAAA6zE,GAKA,OAAA/rE,EAAA,CACA,IAiBAgsE,EAjBAj0G,EAAAkS,EAAAlS,OACA0B,EAAA1B,EAAA0B,UACAwyG,EAAAl0G,EAAAu5C,kBACAx1C,EAAAmO,EAAAgnC,sBACAhwC,EAAAxH,EAAAg3D,YACAzf,EAAA/mC,EAAA+mC,eAAAv3C,EAAA4sC,WAAAylE,EAAAhwG,EAAAmF,GACAirG,EAAAjiG,EAAAwF,EACA08F,EAAAliG,EAAArN,EAOA/C,EAAA9B,EAAA8B,QACAuyG,EAAAr0G,EAAAO,SAAAg+C,yBAAA41D,EAAAC,GACAE,EAAAD,EAGA,GAAAr0G,EAAA03C,cAAA68D,iBACAr0E,GAAAC,GAAA6zE,GAAA7zE,EAAA8zE,EAAA7wF,EAAA,cAA+E+c,GAAAngC,EAAAw0G,sBAAAP,EAAA,cAE/E,GAAAD,IAAA7zE,GAEA,GADA8zE,EAAA,OACAC,GAAA9wF,EAAA,YACO+c,GAAAngC,EAAAw0G,sBACPP,EAAA,SAQA,GAJAA,GAAA/4E,EAAAzB,OAAAuf,EAAAlR,SACA9nC,EAAA03C,cAAA8V,oBAGA,OAAAymD,EAAA,CACA,IAAAC,GAAAj7D,EAAA,OAEA,IAAAi7D,EAAA,CACA,IAAAzuG,EAAA/D,EAAAu/C,kBACAjhD,EAAAy0G,mBAAAhvG,GAGA,IAAAivG,EAAAhzG,EAAA+7D,UAAAwT,aAAAltE,GACA/D,EAAAyuF,wBAAA,EAEArrE,IACAsxF,EAAA,KACAjvG,EAAA/D,EAAAknB,OAAA,IAAAnjB,EACAzF,EAAA20G,sBAAAlvG,IAGAzF,EAAAioD,KAAA,qBACA,IAAA2sD,EAAAlzG,EAAAu/C,kBACAyzD,GAAAE,EAAAtmE,WAAAylE,EAAAW,EAAAxrG,OAAA0rG,EAAA1rG,QAAAxH,EAAAqvE,eAAA6jC,EAAA1rG,SACAka,EACA1hB,EAAAqvE,eAAAtrE,EAAAyD,QACWzD,IACXzF,EAAA20G,sBAAAlvG,GACA/D,EAAAomB,SAAAriB,IAGA/D,EAAAomB,SAAA8sF,IAEA50G,EAAAyuF,wBAAA,SAEK,YAAAwlB,EAAA,CAGL,IAAAprC,EAFA32D,EAAA+pC,OACAj8C,EAAAyuF,wBAAA,EAEA,IAAAomB,EAAA,GAEAC,EAAA,WACA,IAAAC,EAAA/0G,EAAAO,SAAAg+C,yBAAA41D,EAAAC,GACAlrG,EAAApH,EAAA65D,yBAAAo5C,EAAAnoE,IAAAmoE,EAAAloE,OAAAkoE,EAAAh4C,SACAg3C,EAAAO,EAAAS,IAAAhB,EAAA7qG,EAAAxH,EAAAw2D,QACAo8C,EAAAS,EACA/0G,EAAA0B,UAAA03C,eAAAlwC,GACAlJ,EAAAO,SAAA05C,uBACAj6C,EAAAg1G,uBAAAH,GACAA,EAAAnzG,EAAAuzG,sBAAAX,EAAAD,GACAr0G,EAAA03C,cAAAU,iBAAA,GAAAy8D,EAAA33G,QAAA23G,EAAA,GAAAvmE,YAAAumE,EAAA,GAAA70G,EAAA03C,cAAAU,gBAAA7J,SACAsmE,EAAAv2G,QAAA0B,EAAAy0G,mBAAAz0G,GACAA,EAAAk1G,2BAGAhB,IAAAF,EACAtyG,EAAAg8D,iBACOw2C,GAAAF,IACPnrC,EAAAnnE,EAAAu/C,kBACAjhD,EAAAy0G,mBAAA5rC,IAGAzlD,EAAAixF,EAAAvyG,EAAA6sC,yBAAAjtC,EAAAw2D,MAAiFx2D,EAAA03C,eAAAr1C,GACjFuwG,EAAA,CACA1nE,KAAA,EACAC,QAAA,GAGA,IAmBAsoE,EAAAL,EACApwG,EAAA2jC,QAAAroC,EAAA2K,UA7GA,SAAAuH,GACAiiG,EAAAjiG,EAAAi4B,QACAiqE,EAAAliG,EAAAk4B,SAuFA,SAAAl4B,GACA4iG,IACAxzD,cAAA/B,GACAv/C,EAAAg1G,uBAAAH,GACAA,EAAA33G,SAAA23G,EAAA,CAAAnzG,EAAAu/C,oBAEA4nB,IACA7oE,EAAA20G,sBAAA9rC,GACAnnE,EAAAg8D,cAAAmL,IAGA,QAAA9rE,EAAA,EAAuBA,EAAA83G,EAAA33G,OAAoBH,IAC3C2E,EAAAomB,SAAA+sF,EAAA93G,IAGAiD,EAAAyuF,wBAAA,EACAzuF,EAAA03C,cAAAU,gBAAA,OAKA,IAAAmH,EAAAgC,YAAA,WACA4zD,KACO,IACP,OAAAjjG,EAAAsV,wBA/HA,IAAAygB,GAAA/1B,EAAAlS,OAAAu5C,mBAAArnC,EAAAlS,OAAAyoF,yBAqIA5qF,IAAAsM,OAAA,yGAAAnM,EAAAV,EAAA4M,GACA5M,EAAAorF,gBAAA,EACA/hF,KAAA,iBACA++E,YAAA,mBACA9iF,KAAA,SAAA5C,GACAA,EAAAo1G,iBAAA,IAEAvyG,QAAA,CACA6oC,IAAA,cACA45C,IAAA,eAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,iBACA++E,YAAA,mBACA9iF,KAAA,SAAA5C,GACAA,EAAAo1G,gBAAA,IAEAvyG,QAAA,CACA6oC,IAAA,gBACA45C,IAAA,iBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,4BACA++E,YAAA,kCACA9iF,KAAA,SAAA5C,GACAA,EAAAo1G,iBAAA,OAEAvyG,QAAA,CACA6oC,IAAA,oBACA45C,IAAA,qBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,4BACA++E,YAAA,kCACA9iF,KAAA,SAAA5C,GACAA,EAAAo1G,gBAAA,OAEAvyG,QAAA,CACA6oC,IAAA,sBACA45C,IAAA,uBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,mBACA++E,YAAA,qBACA9iF,KAAA,SAAA5C,GACAA,EAAAq1G,YAAA,IAEAxyG,QAAA,CACA6oC,IAAA,gBACA45C,IAAA,iBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,oBACA9iF,KAAA,SAAA5C,GACAA,EAAAq1G,WAAA,IAEAxyG,QAAA,CACA6oC,IAAA,iBACA45C,IAAA,kBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,mBACA++E,YAAA,qBACA9iF,KAAA,SAAA5C,GACAA,EAAAq1G,YAAA,OAEAxyG,QAAA,CACA6oC,IAAA,sBACA45C,IAAA,uBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,kBACA++E,YAAA,oBACA9iF,KAAA,SAAA5C,GACAA,EAAAq1G,WAAA,OAEAxyG,QAAA,CACA6oC,IAAA,uBACA45C,IAAA,wBAEAG,eAAA,SACAn+E,UAAA,GACG,CACHX,KAAA,iBACA++E,YAAA,mBACA9iF,KAAA,SAAA5C,GACAA,EAAA+jE,YAAAuxC,kBAEAzyG,QAAA,CACA6oC,IAAA,aACA45C,IAAA,cAEAh+E,UAAA,GACG,CACHX,KAAA,eACA++E,YAAA,gBACA9iF,KAAA,SAAA5C,GACAA,EAAAu1G,gBAEA1yG,QAAA,CACA6oC,IAAA,aACA45C,IAAA,cAEAG,eAAA,UACG,CACH9+E,KAAA,UACA++E,YAAA,WACA9iF,KAAA,SAAA5C,GACAA,EAAAuiF,WAEA1/E,QAAA,CACA6oC,IAAA,aACA45C,IAAA,cAEAG,eAAA,SACAn+E,UAAA,IAEAhK,EAAAk4G,oBAAA,EACA7uG,KAAA,kBACA++E,YAAA,mBACA7iF,QAAA,MACAD,KAAA,SAAA5C,GACAA,EAAAyoF,uBAEAhD,eAAA,SACAn+E,UAAA,EACAu9E,YAAA,SAAA7kF,GACA,OAAAA,KAAAu5C,qBAIA,IAAA+pC,EAAAtlF,EAAA,4BAAAslF,YAEAhmF,EAAAoC,gBAAA,IAAA4jF,EAAAhmF,EAAAk4G,uBAEA33G,IAAAsM,OAAA,uQAAAnM,EAAAV,EAAA4M,GACA,IAAAumE,EAAAzyE,EAAA,gBAAAyyE,UAEA1yE,EAAAC,EAAA,WAAAD,MAEAk6D,EAAAj6D,EAAA,eAAAi6D,UAEA3f,EAAAt6C,EAAA,gCAAAs6C,YAEA5zC,EAAA1G,EAAA,eAEAizC,EAAAjzC,EAAA,cAEA4B,EAAA5B,EAAA,oCAEAV,EAAAsC,WAAA8oF,gBAAAzyE,OAAArW,EAAA41G,qBAEA,IAEAv5C,EAAA,IAAA8lB,EAFA/jF,EAAA,YAAA+jF,QAWA,IAAAt3E,EAAAzM,EAAA,kBAAAyM,aAEA,WACA5O,KAAA45G,oBAAA,WACA,OAAA55G,KAAA2oG,qBAEGrnG,KAAAsN,EAAAhO,WACH,WACAZ,KAAA+sB,OAAA,KACA/sB,KAAA4hE,UAAA,KAEA5hE,KAAAisB,SAAA,SAAAriB,EAAAiwG,GACA,GAAAjwG,EAAA,CAEA,IAAA5J,KAAA09C,mBAAA,IAAA19C,KAAA4sB,WAAA,CACA,IAAAisF,EAAA74G,KAAAolD,kBAIA,GAHAplD,KAAA4hE,UAAAxwC,IAAAynF,GACA74G,KAAA4hE,UAAAxwC,IAAAxnB,GAEA,GAAA5J,KAAA4hE,UAAA70C,OAAA1rB,OAEA,OADArB,KAAA4hE,UAAA0T,YACAukC,GAAA75G,KAAA6lD,kBAAAj8C,GAGA5J,KAAA4hE,UAAA0T,YACAt1E,KAAA4hE,UAAAxwC,IAAAynF,GACA74G,KAAA85G,YAAAjB,GAGAjvG,EAAAyD,SAAAzD,EAAAyD,OAAAzD,EAAAqnC,KACA,IAAA/W,EAAAl6B,KAAA4hE,UAAAxwC,IAAAxnB,GAYA,OAXA5J,KAAA85G,YAAAlwG,GACAswB,EAAA74B,QAAArB,KAAA+5G,eAAA7/E,GAEAl6B,KAAA4sB,WAAA,IAAA5sB,KAAA09C,oBACA19C,KAAAgiD,QAAA,eAEAhiD,KAAA09C,mBAAA,EACA19C,KAAAiG,QAAAw1E,aAAA,EACAz7E,KAAA4hE,UAAAvO,OAAArzD,KAAAiG,UAGA4zG,GAAA75G,KAAA6lD,kBAAAj8C,KAGA5J,KAAA6hE,cAAA,SAAAj4D,GACAA,KAAA5J,KAAA+sB,OAAA,GACA,IAAAmN,EAAAl6B,KAAA4hE,UAAA0T,YACAp7C,EAAA74B,QAAArB,KAAA+5G,eAAA7/E,GACAtwB,GAAA5J,KAAA6lD,kBAAAj8C,IAGA5J,KAAAk1E,eAAA,SAAAhtE,GACA,IAAAgyB,EAAAl6B,KAAA4hE,UAAAsT,eAAAhtE,GAEA,GAAAgyB,EAEA,OADAl6B,KAAA+5G,eAAA7/E,GACAA,EAAA,IAIAl6B,KAAAg6G,uBAAA,WACA,IAAA9/E,EAAAl6B,KAAA4hE,UAAAyC,QACAnqC,EAAA74B,QAAArB,KAAA+5G,eAAA7/E,IAGAl6B,KAAA85G,YAAA,SAAAlwG,GACA5J,KAAA4sB,WAAA5sB,KAAA4hE,UAAA70C,OAAA1rB,OACArB,KAAA+sB,OAAAxT,QAAA3P,GAEA5J,KAAAgiD,QAAA,YACAp4C,WAIA5J,KAAA+5G,eAAA,SAAA7/E,GAGA,GAFAl6B,KAAA4sB,WAAA5sB,KAAA4hE,UAAA70C,OAAA1rB,OAEA,GAAArB,KAAA4sB,YAAA5sB,KAAA09C,kBAAA,CACA,IAAAu8D,EAAAj6G,KAAA4hE,UAAA70C,OAAAhW,MACAmjB,EAAAtsB,KAAAqsG,GACAj6G,KAAA4sB,WAAA,EAGA,QAAA1rB,EAAAg5B,EAAA74B,OAAkCH,KAAK,CACvC,IAAA0G,EAAA5H,KAAA+sB,OAAAllB,QAAAqyB,EAAAh5B,IACAlB,KAAA+sB,OAAAjlB,OAAAF,EAAA,GAGA5H,KAAAgiD,QAAA,eACAj1B,OAAAmN,IAGA,IAAAl6B,KAAA4sB,YAAA5sB,KAAA09C,oBACA19C,KAAA09C,mBAAA,EAEA19C,KAAAgiD,QAAA,gBAEAhiD,KAAAiG,QAAAw1E,aAAA,EACAz7E,KAAA4hE,UAAAtO,OAAAtzD,KAAAiG,WAGAg0G,KAAAj6G,KAAA+sB,OAAA,MACAktF,EAAAn4G,QAAA9B,KAAA03C,aAAA13C,KAAA6lD,kBAAAo0D,IAGAj6G,KAAAk6G,eAAA,WACAl6G,KAAA4hE,YACA5hE,KAAA4hE,UAAA,IAAAgT,EACA50E,KAAA+sB,OAAA,GACA/sB,KAAA4sB,WAAA,IAGA5sB,KAAAkqF,aAAA,WACA,OAAAlqF,KAAA4sB,WAAA5sB,KAAA4hE,UAAA70C,OAAA3S,SAAA,CAAApa,KAAA03C,aAGA13C,KAAAy5G,eAAA,WACA,GAAAz5G,KAAA4sB,WAAA,GACA,IAAAG,EAAA/sB,KAAA4hE,UAAA70C,OACAktF,EAAAltF,IAAA1rB,OAAA,GACAuI,EAAA1H,EAAAqwC,WAAAxlB,EAAA,GAAArI,MAAAu1F,EAAAhpE,KACAjxC,KAAA6hE,gBACA7hE,KAAAw3C,kBAAA5tC,EAAAqwG,EAAA5sG,QAAA4sG,EAAAv1F,WACO,CACP9a,EAAA5J,KAAA03C,WAAA,IACAulB,EAAAj9D,KAAAi9D,cACA3zD,EAAAM,EAAA8a,MAAAqsB,IACAvnC,EAAAI,EAAAqnC,IAAAF,IAEA,GAAAznC,GAAAE,EAAA,CACA,GAAAyzD,EAAA,IAAAv4C,EAAA9a,EAAAqnC,IACAA,EAAArnC,EAAA8a,WAAgCA,EAAA9a,EAAA8a,MAChCusB,EAAArnC,EAAAqnC,IAGA,OAFAjxC,KAAAisB,SAAA/pB,EAAAqwC,WAAAtB,WACAjxC,KAAAisB,SAAA/pB,EAAAqwC,WAAA7tB,MAIA,IAAAs0F,EAAA,GACAv3C,EAAAzhE,KAAAu/C,aAAAj2C,GAAA,GACAm4D,EAAA/8C,MAAAssB,OAAApnC,EAAA8a,MAAAssB,OACAgoE,EAAAprG,KAAA6zD,GAEA,QAAAvgE,EAAAoI,EAAA,EAAkCpI,EAAAsI,EAAYtI,IAC9C83G,EAAAprG,KAAA5N,KAAAu/C,aAAAr+C,GAAA,KAGAugE,EAAAzhE,KAAAu/C,aAAA/1C,GAAA,IACAynC,IAAAD,OAAApnC,EAAAqnC,IAAAD,OACAgoE,EAAAprG,KAAA6zD,GACAu3C,EAAAv2G,QAAAzC,KAAAisB,SAAAjsB,QAIAA,KAAAm6G,qBAAA,WACA,GAAAn6G,KAAA4sB,WAAA,GACA,IAAAG,EAAA/sB,KAAA4hE,UAAA70C,OACAktF,EAAAltF,IAAA1rB,OAAA,GACAuI,EAAA1H,EAAAqwC,WAAAxlB,EAAA,GAAArI,MAAAu1F,EAAAhpE,KACAjxC,KAAA6hE,gBACA7hE,KAAAw3C,kBAAA5tC,EAAAqwG,EAAA5sG,QAAA4sG,EAAAv1F,WACO,CACP,IAAArX,EAAArN,KAAAiG,QAAA6sC,yBAAA9yC,KAAAqN,QACA6vC,EAAAl9C,KAAAiG,QAAA6sC,yBAAA9yC,KAAAk9C,QACAl9C,KAAAo5G,sBAAA/rG,EAAA6vC,GACAz6C,QAAAzC,KAAAisB,SAAAjsB,QAIAA,KAAAo5G,sBAAA,SAAAX,EAAAD,EAAA4B,GACA,IAAApB,EAAA,GACAqB,EAAA5B,EAAAznE,OAAAwnE,EAAAxnE,OAEA,GAAAqpE,EACA,IAAAxpE,EAAA4nE,EAAAznE,OACAF,EAAA0nE,EAAAxnE,OACAspE,EAAA7B,EAAAv3C,QACAq5C,EAAA/B,EAAAt3C,aAEArwB,EAAA2nE,EAAAxnE,OACAF,EAAA2nE,EAAAznE,OACAspE,EAAA9B,EAAAt3C,QACAq5C,EAAA9B,EAAAv3C,QAGA,IAaAs5C,EAkcAtnE,EAAAC,EA/cAsnE,EAAAhC,EAAA1nE,IAAAynE,EAAAznE,IAEA,GAAA0pE,EACA,IAAAnxG,EAAAmvG,EAAA1nE,IACAvnC,EAAAgvG,EAAAznE,SAEAznC,EAAAkvG,EAAAznE,IACAvnC,EAAAivG,EAAA1nE,IAGAF,EAAA,IAAAA,EAAA,GACAvnC,EAAA,IAAAA,EAAA,GACAA,GAAAE,IAAA4wG,GAAA,GAGA,QAAArpE,EAAAznC,EAA8BynC,GAAAvnC,EAAeunC,IAAA,CAC7C,IAAAnnC,EAAA1H,EAAAqwC,WAAAvyC,KAAAiG,QAAA65D,yBAAA/uB,EAAAF,EAAAypE,GAAAt6G,KAAAiG,QAAA65D,yBAAA/uB,EAAAD,EAAAypE,IAEA,GAAA3wG,EAAA6oC,UAAA,CACA,GAAA+nE,IA4bAtnE,EA5bAtpC,EAAAqnC,IA4bAkC,EA5bAqnE,EA6bAtnE,EAAAnC,KAAAoC,EAAApC,KAAAmC,EAAAlC,QAAAmC,EAAAnC,QA7bA,MACAwpE,EAAA5wG,EAAAqnC,IAGArnC,EAAAyD,OAAAgtG,EAAAzwG,EAAA8a,MAAA9a,EAAAqnC,IACA+nE,EAAAprG,KAAAhE,GAKA,GAFA6wG,GAAAzB,EAAA1lE,WAEA8mE,EAAA,CAGA,IAFA,IAAAnpE,EAAA+nE,EAAA33G,OAAA,EAEA23G,EAAA/nE,GAAAwB,WAAAxB,EAAA,GACAA,IAGA,GAAAA,EAAA,EAGA,IAFA,IAAAvsB,EAAA,EAEAs0F,EAAAt0F,GAAA+tB,WACA/tB,IAIA,QAAAxjB,EAAA+vC,EAAyB/vC,GAAAwjB,EAAYxjB,IACrC83G,EAAA93G,GAAAuxC,WAAAumE,EAAAlxG,OAAA5G,EAAA,GAIA,OAAA83G,IAEG13G,KAAA86D,EAAAx7D,WAEH,IAAA6N,EAAAtM,EAAA,YAAAsM,OAicA,SAAAisG,EAAAv2G,GACAA,EAAAw2G,8BACAx2G,EAAA21G,YAAA31G,EAAA21G,YAAAn3G,KAAAwB,GACAA,EAAA41G,eAAA51G,EAAA41G,eAAAp3G,KAAAwB,GACAA,EAAAy2G,eAAAz2G,EAAAy2G,eAAAj4G,KAAAwB,GACAA,EAAA02G,gBAAA12G,EAAA02G,gBAAAl4G,KAAAwB,GACAA,EAAAw2G,4BAAAl5G,EAAAq5G,gBAAAn4G,KAAAwB,GACAA,EAAA42G,wBAAA52G,EAAA42G,wBAAAp4G,KAAAwB,GACAA,EAAAw2G,4BAAAx2G,GACAA,EAAAmB,GAAA,gBAAAnB,EAAAw2G,6BACAx2G,EAAAmB,GAAA,YAAAm3C,GACAt4C,EAAAJ,SAAA4jF,YAAA5jF,EAAA8oF,iBAIA,SAAA1oF,GACA,IAAAA,EAAAs3C,UAAA,OACA,IAAA9rC,EAAAxL,EAAAs3C,UAAAf,aACAsgE,GAAA,EAgBA,SAAAv+B,EAAApmE,GACA2kG,IACA72G,EAAAO,SAAAkvG,eAAA,IACAoH,GAAA,GAlBAnyG,EAAA0iC,YAAA57B,EAAA,mBAAA0G,GACA,IAAA4kG,EAAA,IAAA5kG,EAAA80B,WAAA90B,EAAA41B,SAAA51B,EAAA81B,UAAA91B,EAAAs4B,SAEAxqC,EAAAw0G,qBAAAsC,EACAD,IACA72G,EAAAO,SAAAkvG,eAAA,aACAoH,GAAA,GAEOA,GACPv+B,MAGA5zE,EAAA0iC,YAAA57B,EAAA,QAAA8sE,GACA5zE,EAAA0iC,YAAA57B,EAAA,OAAA8sE,GApBAy+B,CAAA/2G,KA3cA,WACAnE,KAAAq5G,uBAAA,WACAr5G,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,qBAGAtyF,KAAA44G,mBAAA,SAAA16D,GACAA,EAAA7wC,SAAA6wC,EAAA7wC,OAAA6wC,EAAAjN,KACA,IAAA3mC,EAAAtK,KAAAqlD,oBAIA,OAHAnH,EAAA+/B,OAAAj+E,KAAAiG,QAAA4D,UAAAq0C,EAAA,gBAAA5zC,GACAtK,KAAAiG,QAAA0iG,kBAAA/6F,KAAAswC,GACAl+C,KAAAiG,QAAAk1G,qBAAAn7G,KAAAiG,QAAA0iG,kBAAAtnG,OACA68C,GAGAl+C,KAAA84G,sBAAA,SAAAlvG,GACA,GAAAA,EAAAq0E,OAAA,CACAj+E,KAAAiG,QAAAkD,aAAAS,EAAAq0E,QACA,IAAAr2E,EAAA5H,KAAAiG,QAAA0iG,kBAAA9gG,QAAA+B,IACA,GAAAhC,GAAA5H,KAAAiG,QAAA0iG,kBAAA7gG,OAAAF,EAAA,GACA5H,KAAAiG,QAAAk1G,qBAAAn7G,KAAAiG,QAAA0iG,kBAAAtnG,SAGArB,KAAAm5G,uBAAA,SAAApsF,GAGA,IAFA,IAAAquF,EAAAp7G,KAAAiG,QAAA0iG,kBAEAznG,EAAA6rB,EAAA1rB,OAAiCH,KAAK,CACtC,IAAA0I,EAAAmjB,EAAA7rB,GACA,GAAA0I,EAAAq0E,OAAA,CACAj+E,KAAAiG,QAAAkD,aAAAS,EAAAq0E,QACA,IAAAr2E,EAAAwzG,EAAAvzG,QAAA+B,IACA,GAAAhC,GAAAwzG,EAAAtzG,OAAAF,EAAA,IAGA5H,KAAAiG,QAAAk1G,qBAAAC,EAAA/5G,QAGArB,KAAA85G,YAAA,SAAAzjG,GACArW,KAAA44G,mBAAAviG,EAAAzM,OACA5J,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,qBAGAtyF,KAAA+5G,eAAA,SAAA1jG,GACArW,KAAAm5G,uBAAA9iG,EAAA0W,QACA/sB,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,qBAGAtyF,KAAA46G,eAAA,SAAAvkG,GACArW,KAAA09C,oBACA19C,KAAA09C,mBAAA,EACA19C,KAAAyiC,SAAA,mBACAziC,KAAAitF,WAAA95B,mBAAApvD,EAAAF,iBACA7D,KAAA+D,SAAAy4C,kBAAA,OAAAx8C,KAAAq7G,oBACAr7G,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,sBAGAtyF,KAAA66G,gBAAA,SAAAxkG,GACArW,KAAAiG,QAAAiiE,YAAAozC,gBACAt7G,KAAA09C,mBAAA,EACA19C,KAAA4+C,WAAA,mBACA5+C,KAAAitF,WAAAh6B,sBAAAlvD,EAAAF,iBACA7D,KAAA+D,SAAA2oD,qBAAA,OAAA1sD,KAAAq7G,oBACAr7G,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,oBAEAtyF,KAAA6P,MAAA,qBAGA7P,KAAAq7G,mBAAA,SAAAhlG,GACA,IAAAvP,EAAAuP,EAAAvP,QACA3C,EAAAkS,EAAAlS,OACA,GAAAA,EAAA+jE,YAAA,CAEA,GAAAphE,EAAAmjF,kBAIO,WAAAnjF,EAAAmjF,kBACP7zE,EAAAjS,EAAAivF,iBAAAtsF,EAAAuP,EAAAmB,MACO,eAAA1Q,EAAAmjF,kBACP7zE,EAAAjS,EAAAivF,iBAAAtsF,EAAAuP,EAAAmB,MAAA,GACO,UAAA1Q,EAAAmjF,mBACP9lF,EAAAyoF,sBACAx2E,EAAAtP,EAAAC,KAAA5C,EAAAkS,EAAAmB,MAAA,KAEApB,EAAAtP,EAAAmjF,kBAAA9lF,EAAAkS,EAAAmB,MAAA,QAZA,CACA,IAAApB,EAAAtP,EAAAC,KAAA5C,EAAAkS,EAAAmB,MAAA,IACArT,EAAA+jE,YAAAj8C,SAAA9nB,EAAA+jE,YAAA9iB,mBACAjhD,EAAA+jE,YAAA8xC,yBAYA,OAAA5jG,IAGApW,KAAAozF,iBAAA,SAAA3uD,EAAAjtB,EAAAsS,GACA,IAAA9pB,KAAA4yF,uBAAA,CACA,IAMAx8E,EANAmlG,EAAAzxF,KAAAyxF,UACAC,EAAA,GAAA1xF,QAAA0xF,SACAv1G,EAAAjG,KAAAiG,QACAJ,EAAA7F,KAAA6F,UACA+7D,EAAA/7D,EAAA+7D,UACA70C,GAAAwuF,EAAA11G,EAAA+7D,GAAA70C,OAEA,IAAAA,EAAA1rB,OAAA,OAAAojC,EAAA19B,KAAA09B,EAAA19B,KAAA/G,KAAAwX,GAAA,IAAqEitB,EAAAzkC,KAAAwX,GAAA,IACrE,IAAA8+E,EAAAzwF,EAAAmmD,eACAnmD,EAAAmmD,eAAA,GACA,IAAA+sD,EAAA,IAAA38C,EAAAn2D,GACAjG,KAAA4yF,wBAAA,EAEA,QAAA1xF,EAAA6rB,EAAA1rB,OAAiCH,KAAK,CACtC,GAAAs6G,EACA,KAAAt6G,EAAA,GAAA6rB,EAAA7rB,GAAAwjB,MAAAqsB,KAAAhkB,EAAA7rB,EAAA,GAAA+vC,IAAAF,KACA7vC,IAIA63G,EAAAlzD,kBAAA94B,EAAA7rB,IACA63G,EAAAnxG,MAAA1G,EACAlB,KAAA6F,UAAAI,EAAAJ,UAAAkzG,EACA,IAAA0C,EAAAh3E,EAAA19B,KAAA09B,EAAA19B,KAAA/G,KAAAwX,GAAA,IAA4DitB,EAAAzkC,KAAAwX,GAAA,IAC5DpB,QAAAvB,IAAA4mG,IAAArlG,EAAAqlG,GACA1C,EAAA3zD,gBAAAr4B,EAAA7rB,IAGA63G,EAAAzlD,SACAtzD,KAAA6F,UAAAI,EAAAJ,YACA7F,KAAA4yF,wBAAA,EACA/sF,EAAAmmD,eAAAsqC,EACAzwF,EAAAm0G,yBACAn0G,EAAAknB,OAAA,IAAAlnB,EAAAggD,kBAAAhgD,EAAAknB,OAAA,IACA,IAAA2uF,EAAA17G,KAAA0E,SAAAipG,iBAIA,OAHA3tG,KAAA+F,iBACA/F,KAAA8F,oBACA41G,KAAApjF,MAAAojF,EAAA3pC,IAAA/xE,KAAA0E,SAAAmpF,iBAAA6tB,EAAApjF,MACAliB,IAGApW,KAAA4sF,oBAAA,WACA5sF,KAAA09C,oBAAA19C,KAAA4yF,wBACA5yF,KAAAkoE,YAAArG,iBAGA7hE,KAAAyyF,gBAAA,WACA,IAAA1pF,EAAA,GAEA,GAAA/I,KAAA09C,oBAAA19C,KAAA4yF,uBAAA,CAIA,IAHA,IAAA7lE,EAAA/sB,KAAAkoE,YAAAtG,UAAA70C,OACA4uF,EAAA,GAEAz6G,EAAA,EAAuBA,EAAA6rB,EAAA1rB,OAAmBH,IAC1Cy6G,EAAA/tG,KAAA5N,KAAAiG,QAAAsgD,aAAAx5B,EAAA7rB,KAGA,IAAAwxF,EAAA1yF,KAAAiG,QAAAwK,cAAAw/D,uBACAlnE,EAAA4yG,EAAA5zG,KAAA2qF,IACArxF,SAAAs6G,EAAAt6G,OAAA,GAAAqxF,EAAArxF,SAAA0H,EAAA,SACO/I,KAAA6F,UAAA4sC,YACP1pC,EAAA/I,KAAAiG,QAAAsgD,aAAAvmD,KAAAu6C,sBAGA,OAAAxxC,GAGA/I,KAAA+6G,wBAAA,SAAA1kG,EAAA6mC,GACA,GAAAl9C,KAAA09C,oBAAA19C,KAAA4yF,uBAAA,CACA,IAAAhpF,EAAA5J,KAAAkoE,YAAAn7C,OAAA,GACA,GAAA/sB,KAAAkoE,YAAAz1B,WAAAyK,GAAAl9C,KAAAkoE,YAAAhrB,OAAA,OACA,IAAAh1C,EAAAg1C,GAAAl9C,KAAAkoE,YAAAhrB,OAAAtzC,EAAAyD,QAAAzD,EAAA8a,MAAA9a,EAAAqnC,IAAArnC,EAAA8a,MAAA9a,EAAAyD,OACAnF,EAAA6oC,KAAAmM,EAAAnM,KAAA/wC,KAAAiG,QAAAgpE,wBAAA/mE,EAAA6oC,IAAA7oC,EAAA8oC,gBAAAkM,EAAAlM,OAAAhxC,KAAAkoE,YAAArG,cAAA7hE,KAAAkoE,YAAA9iB,mBAA2LplD,KAAAkoE,YAAA8xC,2BAI3Lh6G,KAAA0mF,QAAA,SAAAC,EAAA78D,EAAA8xF,GAIA,IAHA9xF,KAAA,IACA68D,UAAA78D,EAAA68D,YAEA9xE,GAAAiV,EAAA68D,OAAA,CACA,IAAA/8E,EAAA5J,KAAA6F,UAAA4sC,UAAAzyC,KAAA6F,UAAAy5C,eAAAt/C,KAAA6F,UAAA6xC,WACA5tB,EAAA68D,OAAA3mF,KAAAiG,QAAAsgD,aAAA38C,GAGA5J,KAAAktF,QAAA/3E,IAAA2U,GACA,IAAAiD,EAAA/sB,KAAAktF,QAAAxG,QAAA1mF,KAAAiG,SACA,IAAA8mB,EAAA1rB,OAAA,SACA,IAAAwE,EAAA7F,KAAAkoE,YACA0zC,GAAA/1G,EAAAg8D,cAAA90C,EAAA,IAEA,QAAA7rB,EAAA6rB,EAAA1rB,OAAiCH,KACjC2E,EAAAomB,SAAAc,EAAA7rB,IAAA,GAIA,OADA0I,GAAA/D,EAAA+7D,UAAAwT,aAAAxrE,EAAA8a,QAAA7e,EAAAomB,SAAAriB,GAAA,GACAmjB,EAAA1rB,QAGArB,KAAAu5G,gBAAA,SAAA3lD,EAAAioD,GACA,IAAAjyG,EAAA5J,KAAA6F,UAAAu/C,kBACA6X,EAAArzD,EAAAyD,QAAAzD,EAAAqnC,IACA6qE,EAAA97G,KAAAiG,QAAA6sC,yBAAAlpC,EAAAyD,QACArN,KAAA6F,UAAA82D,iBAAAm/C,EAAA9qE,OAAAhxC,KAAA6F,UAAA82D,gBACA,IAaAm8B,EAbAz8B,EAAAr8D,KAAAiG,QAAA65D,yBAAAg8C,EAAA/qE,IAAA6iB,EAAAkoD,EAAA9qE,QAEA,GAAApnC,EAAA6oC,UAIAyK,EAAAmf,OAHA,IAAAm8C,EAAAx4G,KAAAiG,QAAA6sC,yBAAAmqB,EAAArzD,EAAAqnC,IAAArnC,EAAA8a,OACAw4B,EAAAl9C,KAAAiG,QAAA65D,yBAAA04C,EAAAznE,IAAA6iB,EAAA4kD,EAAAxnE,QAKAisB,GACA67B,EAAA52F,EAAAqwC,WAAA8pB,EAAAnf,IACA7vC,OAAAyrF,EAAAp0E,OAEAo0E,EAAA52F,EAAAqwC,WAAA2K,EAAAmf,IACAhvD,OAAAyrF,EAAA7nD,IAKA,GAFA6nD,EAAAt3B,cAAAs6C,EAAA9qE,OAEAhxC,KAAA6F,UAAA63C,mBAGA,GAAAm+D,EAAA,IAAAE,EAAAnyG,EAAAyD,YAFArN,KAAA6F,UAAAomB,SAAAriB,GAKA5J,KAAA6F,UAAAomB,SAAA6sE,GACAijB,GAAA/7G,KAAA6F,UAAAqvE,eAAA6mC,IAGA/7G,KAAAssF,oBAAA,SAAA14B,GAKA,IAJA,IAAA3tD,EAAAjG,KAAAiG,QACA6nF,EAAA7nF,EAAAiiE,YACAj9C,EAAA6iE,EAAA/gE,OAEA7rB,EAAA+pB,EAAA5pB,OAA8BH,KAAK,CAGnC,IAFA0I,EAAAqhB,EAAA/pB,IAEAuxC,UAAA,CACA,IAAAsjB,EAAA9vD,EAAAq5C,aAAA11C,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,QACApnC,EAAA8a,MAAAqsB,IAAAglB,EAAArxC,MAAAqsB,IACAnnC,EAAA8a,MAAAssB,OAAA+kB,EAAArxC,MAAAssB,OACApnC,EAAAqnC,IAAAF,IAAAglB,EAAA9kB,IAAAF,IACAnnC,EAAAqnC,IAAAD,OAAA+kB,EAAA9kB,IAAAD,QAIA88C,EAAAksB,yBACA,IAAAgC,EAAA,GAEA,IAAA96G,EAAA+pB,EAAA5pB,OAA8BH,KAAK,CACnC,IAAA0I,EAAAqhB,EAAA/pB,GACA86G,EAAAziG,QAAAtT,EAAAsgD,aAAA38C,IAGAgqD,EAAA,EAAAooD,EAAAziG,QAAAyiG,EAAAjlG,OAA8CilG,EAAApuG,KAAAouG,EAAAz0F,SAE9C,IAAArmB,EAAA+pB,EAAA5pB,OAA8BH,KAAK,CAEnC60D,GADAnsD,EAAAqhB,EAAA/pB,IACAwxC,QACAzsC,EAAAsO,QAAA3K,EAAAoyG,EAAA96G,IACA0I,EAAA8a,MAAAqsB,IAAAglB,EAAArxC,MAAAqsB,IACAnnC,EAAA8a,MAAAssB,OAAA+kB,EAAArxC,MAAAssB,OAGA88C,EAAAjoC,kBAAAioC,EAAA/gE,OAAA,KAGA/sB,KAAAw5G,WAAA,SAAA5lD,EAAAioD,EAAAI,GACA,IAAAh2G,EAAAjG,KAAAiG,QAEA2D,EADA3D,EAAAiiE,YACA9iB,kBAEA,IAAAx7C,EAAA6oC,aACA7oC,EAAA3D,EAAAq5C,aAAA11C,EAAA8a,MAAAqsB,IAAAnnC,EAAA8a,MAAAssB,SACA3jC,QAAA,GAAAumD,EAAAhqD,EAAA8a,MAAA9a,EAAAqnC,IACAjxC,KAAAkoE,YAAAj8C,SAAAriB,IACAqyG,GAJA,CAOA,IAAAt1B,EAAA1gF,EAAAsgD,aAAA38C,GACAkvF,EAhhBA,SAAA7yF,EAAA0gF,EAAA/yB,GAIA,OAHAwM,EAAA95D,SAAAu/E,MAAA,EACAzlB,EAAA95D,SAAAqgF,SACAvmB,EAAA95D,SAAAihF,WAAA,GAAA3zB,EACAwM,EAAA+lB,KAAAlgF,GA4gBAkgF,CAAAlgF,EAAA0gF,EAAA/yB,GAEAklC,IACAA,EAAAzrF,QAAA,GAAAumD,EAAAklC,EAAAp0E,MAAAo0E,EAAA7nD,IACAjxC,KAAAiG,QAAA4xE,OAAAihB,GACA94F,KAAAkoE,YAAAj8C,SAAA6sE,GACA94F,KAAA0E,SAAA05C,qBAAA,UAGAy9D,GAAA77G,KAAAkoE,YAAAgN,eAAAtrE,EAAAyD,UAGArN,KAAA05G,aAAA,WACA,IAAAzzG,EAAAjG,KAAAiG,QACA6nF,EAAA7nF,EAAAiiE,YACAn7C,EAAA+gE,EAAA/gE,OACAgkB,GAAA,EACAmrE,EAAAnvF,EAAAiO,OAAA,SAAAymC,GACA,GAAAA,EAAAp0D,OAAA0jC,OAAA,SACAA,EAAA0wB,EAAAp0D,OAAA0jC,MAGA,GAAAhkB,EAAA1rB,QAAA66G,EAAA76G,QAAA0rB,EAAA1rB,OAAA,EAmCO,CACP66G,EAAAz5G,QAAA,SAAAg/D,GACAqsB,EAAA5Y,eAAAzT,EAAAp0D,UAEA,IAAA8uG,EAAA,EACAC,EAAAtwC,IACAuwC,EAAAtvF,EAAAtW,IAAA,SAAAgrD,GACA,IAAAjhE,EAAAihE,EAAAp0D,OAEAivG,EADAr2G,EAAA2xC,QAAAp3C,EAAAuwC,KACAqpB,OAAA55D,EAAAwwC,QAAAovB,OAAA,OAIA,OAHA,GAAAk8C,MAAA,GACA97G,EAAAwwC,OAAAmrE,MAAA37G,EAAAwwC,QACAsrE,EAAAF,MAAAE,GACAA,IAEAvvF,EAAAtqB,QAAA,SAAAg/D,EAAAvgE,GACA,IAAAV,EAAAihE,EAAAp0D,OACA+pB,EAAA+kF,EAAA37G,EAAAwwC,OACA9wC,EAAAm8G,EAAAn7G,GAAAk7G,EACAhlF,EAAAl3B,EAAA+F,EAAAk0B,OAAA35B,EAAA40C,EAAA7B,aAAA,IAAAnc,EAAAl3B,IAAsE+F,EAAAm0B,OAAA,IAAAl4B,EAAA1B,EAAAuwC,IAAAvwC,EAAAwwC,OAAAxwC,EAAAuwC,IAAAvwC,EAAAwwC,OAAA5Z,EAAAl3B,IACtEuhE,EAAA/8C,MAAAssB,OAAAywB,EAAAxwB,IAAAD,OAAAmrE,EACA16C,EAAA/8C,MAAAqsB,IAAA0wB,EAAAxwB,IAAAF,IAAAvwC,EAAAuwC,IACA0wB,EAAAp0D,OAAAo0D,EAAAxwB,MAEA68C,EAAAjoC,kBAAA94B,EAAA,IACA/sB,KAAA0E,SAAA4sF,eACAtxF,KAAA0E,SAAA4tF,wBA7DA,CACA,IAAA1oF,EAAA5J,KAAA6F,UAAA6xC,WACA6kE,EAAA3yG,EAAA8a,MAAAqsB,IACAyrE,EAAA5yG,EAAAqnC,IAAAF,IACA0rE,EAAAF,GAAAC,EAEA,GAAAC,EAAA,CACA,IACAh/F,EADA7L,EAAA5R,KAAAiG,QAAAu8C,YAGA,GACA/kC,EAAAzd,KAAAiG,QAAA2xC,QAAA4kE,SACW,OAAA5mG,KAAA6H,MAAA++F,EAAA5qG,GAEX,GACA6L,EAAAzd,KAAAiG,QAAA2xC,QAAA2kE,SACW,OAAA3mG,KAAA6H,MAAA8+F,EAAA,GAEXA,EAAA,IAAAA,EAAA,GACAC,GAAA5qG,IAAA4qG,EAAA5qG,EAAA,GAGA,IAAApE,EAAAxN,KAAAiG,QAAA8qE,gBAAAwrC,EAAAC,GACAhvG,EAAAxN,KAAA08G,aAAAlvG,EAAAivG,GACAz8G,KAAAiG,QAAAk0B,OAAA,CACA4W,IAAAwrE,EACAvrE,OAAA,GACSxjC,EAAAzF,KAAA,YAET00G,IACA7yG,EAAA8a,MAAAssB,OAAA,EACApnC,EAAAqnC,IAAAD,OAAAxjC,IAAAnM,OAAA,GAAAA,QAGArB,KAAA6F,UAAA0kD,SAAA3gD,KA+BA5J,KAAA08G,aAAA,SAAAlvG,EAAAmvG,GACA,IAEAC,EAAAC,EAAAC,EAFAC,GAAA,EACAC,GAAA,EAEA,OAAAxvG,EAAAiJ,IAAA,SAAAgH,GACA,IAAAjL,EAAAiL,EAAAtG,MAAA,2BACA,OAAA3E,EAEA,MAAAoqG,GACAA,EAAApqG,EAAA,GAAAnR,OACAw7G,EAAArqG,EAAA,GAAAnR,OACAy7G,EAAAtqG,EAAA,GAAAnR,OACAmR,IAGAoqG,EAAAC,EAAAC,GAAAtqG,EAAA,GAAAnR,OAAAmR,EAAA,GAAAnR,OAAAmR,EAAA,GAAAnR,SAAA27G,GAAA,GACAJ,GAAApqG,EAAA,GAAAnR,SAAA07G,GAAA,GACAH,EAAApqG,EAAA,GAAAnR,SAAAu7G,EAAApqG,EAAA,GAAAnR,QACAw7G,EAAArqG,EAAA,GAAAnR,SAAAw7G,EAAArqG,EAAA,GAAAnR,QACAy7G,EAAAtqG,EAAA,GAAAnR,SAAAy7G,EAAAtqG,EAAA,GAAAnR,QACAmR,GAdA,CAAAiL,KAeOhH,IAAAkmG,EAAAM,EAAAF,EAAAC,EAUP,SAAAxqG,GACA,OAAAA,EAAA,GAAAi6D,EAAAmwC,EAAAC,EAAArqG,EAAA,GAAAnR,QAAAmR,EAAA,GAAAi6D,EAAAqwC,GAAAtqG,EAAA,GAAA+B,QAAA,oBAAA/B,EAAA,IAXOyqG,EAcP,SAAAzqG,GACA,OAAAA,EAAA,GAAAi6D,EAAAmwC,GAAApqG,EAAA,GAAAi6D,EAAAqwC,GAAAtqG,EAAA,GAAA+B,QAAA,oBAAA/B,EAAA,KAbA,SAAAi6D,EAAAtrE,GACA,OAAAi0C,EAAA7B,aAAA,IAAApyC,GAGA,SAAA87G,EAAAzqG,GACA,OAAAA,EAAA,GAAAi6D,EAAAmwC,GAAApqG,EAAA,GAAAi6D,EAAAowC,EAAArqG,EAAA,GAAAnR,OAAAy7G,GAAAtqG,EAAA,GAAA+B,QAAA,oBAAA/B,EAAA,OAWGlR,KAAAmN,EAAA7N,WAMHa,EAAAq5G,gBAAA,SAAAzkG,GACA,IAAApQ,EAAAoQ,EAAApQ,QAEAA,MAAAiiE,cACAjiE,EAAA0iG,kBAAA,GACA1iG,EAAAJ,UAAAq0G,iBACAj0G,EAAAiiE,YAAAjiE,EAAAJ,WAGA7F,KAAAkoE,YAAAjiE,KAAAiiE,YACA,IAAAqmB,EAAAl4E,EAAAk4E,WAEAA,IACAA,EAAArmB,YAAAnuB,IAAA,WAAA/5C,KAAA85G,aACAvrB,EAAArmB,YAAAnuB,IAAA,cAAA/5C,KAAA+5G,gBACAxrB,EAAArmB,YAAAnuB,IAAA,cAAA/5C,KAAA46G,gBACArsB,EAAArmB,YAAAnuB,IAAA,eAAA/5C,KAAA66G,iBACAtsB,EAAArmB,YAAA7L,KAAAtiB,IAAA,SAAA/5C,KAAA+6G,yBACAxsB,EAAArmB,YAAAhrB,OAAAnD,IAAA,SAAA/5C,KAAA+6G,0BAGA90G,IACAA,EAAAiiE,YAAA5iE,GAAA,WAAAtF,KAAA85G,aACA7zG,EAAAiiE,YAAA5iE,GAAA,cAAAtF,KAAA+5G,gBACA9zG,EAAAiiE,YAAA5iE,GAAA,cAAAtF,KAAA46G,gBACA30G,EAAAiiE,YAAA5iE,GAAA,eAAAtF,KAAA66G,iBACA50G,EAAAiiE,YAAA7L,KAAA/2D,GAAA,SAAAtF,KAAA+6G,yBACA90G,EAAAiiE,YAAAhrB,OAAA53C,GAAA,SAAAtF,KAAA+6G,0BAGA90G,GAAAjG,KAAA09C,mBAAAz3C,EAAAJ,UAAA63C,oBACAz3C,EAAAJ,UAAA63C,kBAAA19C,KAAA46G,iBAAqE56G,KAAA66G,oBA8CrEp5G,EAAAi5G,cAEAv4G,EAAA,YAAAurD,cAAAj/C,EAAA7N,UAAA,UACAs8G,kBAAA,CACA/nG,IAAA,SAAA4qB,GACA26E,EAAA16G,MAEA+/B,GACA//B,KAAAsF,GAAA,gBAAAtF,KAAA26G,6BACA36G,KAAAsF,GAAA,YAAAm3C,KAEAz8C,KAAA+5C,IAAA,gBAAA/5C,KAAA26G,6BACA36G,KAAA+5C,IAAA,YAAA0C,KAGA/6C,OAAA,GAEAy7G,kBAAA,CACAhoG,IAAA,SAAA4qB,GACA//B,KAAA24G,oBAAA54E,GAEAr+B,OAAA,OAIAM,IAAAsM,OAAA,iFAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAnM,EAAAC,EAAA,eAAAD,MAEAk7G,EAAA37G,EAAA27G,SAAA,cAEA,WACAp9G,KAAAq9G,mBAAA,KACAr9G,KAAAs9G,kBAAA,KAEAt9G,KAAA44E,cAAA,SAAA3yE,EAAAggF,EAAAl1C,GACA,IAAAtzB,EAAAxX,EAAA2xC,QAAA7G,GACA,OAAA/wC,KAAAq9G,mBAAAznG,KAAA6H,GAAA,QACA,gBAAAwoE,GAAAjmF,KAAAs9G,mBAAAt9G,KAAAs9G,kBAAA1nG,KAAA6H,GAAA,MACA,IAGAzd,KAAA64E,mBAAA,SAAA5yE,EAAAggF,EAAAl1C,GACA,aAGA/wC,KAAAu9G,iBAAA,SAAAt3G,EAAA8qC,EAAAC,GACA,IAAA+d,EAAA,KACAtxC,EAAAxX,EAAA2xC,QAAA7G,GACAysE,EAAA//F,EAAA2iD,OAAArR,GACA,OAAAyuD,EAAA,CAMA,IALA,IAAA3sE,EAAAG,GAAAvzB,EAAApc,OACA6jF,EAAAj/E,EAAAu8C,YACAl5C,EAAAynC,EACAvnC,EAAAunC,IAEAA,EAAAm0C,GAAA,CACA,IAAAxpB,EAAAz1D,EAAA2xC,QAAA7G,GAAAqvB,OAAArR,GACA,OAAA2M,EAAA,CAEA,GAAAA,GAAA8hD,EAAA,CACA,IAAA16C,EAAA78D,EAAA8gE,WAAAh2B,EAAA,GACA,IAAA+xB,GAAA,WAAAA,EAAAp5D,KAAA,MAGAF,EAAAunC,GAGA,GAAAvnC,EAAAF,EAAA,CACA,IAAAwnC,EAAA7qC,EAAA2xC,QAAApuC,GAAAnI,OACA,WAAAa,EAAAoH,EAAAunC,EAAArnC,EAAAsnC,MAIA9wC,KAAAy9G,oBAAA,SAAAx3G,EAAA8kE,EAAAh6B,EAAAC,EAAA8pC,GACA,IAAAp2D,EAAA,CACAqsB,MACAC,SAAA,GAEAC,EAAAhrC,EAAAm0E,oBAAArP,EAAArmD,EAAAo2D,GACA,GAAA7pC,EAAA,CACA,IAAA2oC,EAAA3zE,EAAAqsD,YAAArhB,EAAAF,KAQA,OAPA,MAAA6oC,MAAA3zE,EAAA2yE,cAAA3nC,EAAAF,MAEA,SAAA6oC,GAAA3oC,EAAAF,IAAArsB,EAAAqsB,MACAE,EAAAF,MACAE,EAAAD,OAAA/qC,EAAA2xC,QAAA3G,EAAAF,KAAA1vC,QAGAa,EAAAqwC,WAAA7tB,EAAAusB,KAGAjxC,KAAA09G,oBAAA,SAAAz3G,EAAA8kE,EAAAh6B,EAAAC,EAAA8pC,GACA,IAAA7pC,EAAA,CACAF,MACAC,UAEAtsB,EAAAze,EAAAmjE,oBAAA2B,EAAA95B,GACA,GAAAvsB,EAGA,OAFAA,EAAAssB,SACAC,EAAAD,SACA9uC,EAAAqwC,WAAA7tB,EAAAusB,MAEG3vC,KAAA87G,EAAAx8G,aAEHoB,IAAAsM,OAAA,2EAAAnM,EAAAV,EAAA4M,GACA,aAEA5M,EAAAkyG,QAAA,EACAlyG,EAAAiyG,SAAA,SACAjyG,EAAAmO,QAAA,s0EAwHAnO,EAAAisE,IAAA,qBAEAvrE,EAAA,cAEAo/B,gBAAA9/B,EAAAmO,QAAAnO,EAAAiyG,YAEA1xG,IAAAsM,OAAA,mGAAAnM,EAAAV,EAAA4M,GACA,aAEAlM,EAAA,iBAEAgzC,EAAAhzC,EAAA,aAEAA,EAAA,WAAAD,MAEA,SAAAy7G,EAAA13G,GACAjG,KAAAiG,UACAjG,KAAAiG,QAAA23G,cAAA59G,KACAA,KAAAiG,QAAAq+E,aAAAtkF,KAAAskF,aACAtkF,KAAAiG,QAAAu/E,uBAAAxlF,KAAAwlF,uBACAxlF,KAAA69G,eAAA79G,KAAA69G,eAAAl7G,KAAA3C,MACAA,KAAA89G,cAAA99G,KAAA89G,cAAAn7G,KAAA3C,MACAA,KAAA+9G,eAAA/9G,KAAA+9G,eAAAp7G,KAAA3C,MACAA,KAAAiG,QAAA+3G,gBAAA,GACAh+G,KAAAi+G,gBAAAj+G,KAAAi+G,gBAAAt7G,KAAA3C,MACAA,KAAAiG,QAAAX,GAAA,SAAAtF,KAAA69G,gBACA79G,KAAAiG,QAAAX,GAAA,aAAAtF,KAAAk+G,cACAl+G,KAAAiG,QAAAX,GAAA,eAAAtF,KAAAi+G,kBAGA,WACAj+G,KAAAskF,aAAA,SAAAvzC,GACA,IAAAqZ,EAGA,OAFAA,EAAApqD,KAAAqhE,aAAArhE,KAAAqhE,YAAAtwB,IAAA/wC,KAAAqhE,YAAAtwB,GAAAo2B,UAA6F,EAE7FnnE,KAAA85D,cAAA95D,KAAA+5D,UAAAhpB,GAGA/wC,KAAA+5D,UAAAhpB,GAAA1vC,OAAA,EAAA+oD,EAFA,EAAAA,GAMApqD,KAAAwlF,uBAAA,WACA,IAAAD,EAAA,EAIA,OAHAvlF,KAAAqhE,YAAA5+D,QAAA,SAAA4nD,GACAA,KAAA8c,WAAA9c,EAAA4C,SAAAs4B,GAAAl7B,EAAA8c,YAEAoe,GAGAvlF,KAAAi+G,gBAAA,SAAA5nG,GACArW,KAAAqzD,OAAAh9C,EAAAlS,SAGAnE,KAAAqzD,OAAA,SAAAlvD,GACAA,KAAAy5G,eAAAz5G,EAAAy5G,eAAA59G,MAAAmE,EAAAy5G,cAAAtqD,SACAtzD,KAAAmE,YACAnE,KAAAszD,SACAtzD,KAAAmE,SAEAA,IACAA,EAAAy5G,cAAA59G,KACAmE,EAAAO,SAAAY,GAAA,eAAAtF,KAAA+9G,gBACA55G,EAAAO,SAAAY,GAAA,cAAAtF,KAAA89G,kBAIA99G,KAAAszD,OAAA,SAAAj9C,GACA,IAAAlS,EAAAnE,KAAAmE,OACA,GAAAA,EAAA,CACAnE,KAAAmE,OAAA,KACAA,EAAAy5G,cAAA,KACAz5G,EAAAO,SAAAq1C,IAAA,eAAA/5C,KAAA+9G,gBACA55G,EAAAO,SAAAq1C,IAAA,cAAA/5C,KAAA89G,eACA,IAAAz8C,EAAArhE,KAAAiG,QAAAo7D,YACAA,KAAA5+D,QAAA,SAAA4nD,GACAA,KAAA16C,IAAA06C,EAAA16C,GAAA2tB,aACA+sB,EAAA8zD,aAAA,EACA9zD,EAAA16C,GAAA2tB,WAAApzB,YAAAmgD,EAAA16C,SAKA3P,KAAAk+G,aAAA,SAAA7nG,EAAApQ,GACA,IAAAo7D,EAAAp7D,EAAAo7D,YACA,GAAAA,GAAAhrD,EAAA0yC,OAAA,CAMA,IALA,IAAAmJ,EAAA77C,EAAAK,KACAgO,EAAAwtC,EAAAxtC,MAAAqsB,IACAE,EAAAihB,EAAAjhB,IAAAF,IACAgQ,EAAA,OAAA1qC,EAAA0yC,OAEA7nD,EAAAwjB,EAAA,EAA6BxjB,EAAA+vC,EAAS/vC,IACtCmgE,EAAAngE,KAAAmgE,EAAAngE,GAAA+rD,OAAAlM,GAGAsgB,EAAApwB,KACA8P,EACAsgB,EAAA38C,GAAyE28C,EAAApwB,GAAAgc,OAAAlM,EAAzEsgB,EAAA38C,GAAA28C,EAAApwB,IAEAowB,EAAA38C,IAAA28C,EAAApwB,KAAAowB,EAAA38C,QAAA7P,GACAwsD,EAAApwB,GAAAgc,OAAAlM,MAKA/gD,KAAA69G,eAAA,SAAA/hG,GACA,IAAAulD,EAAArhE,KAAAiG,QAAAo7D,YACA,GAAAA,EAAA,CACA,IAAA/3D,EAAAwS,EAAA4I,MAAAqsB,IACAilB,EAAAl6C,EAAAm1B,IAAAF,IAAAznC,EAEA,OAAA0sD,QAAuB,aAAAl6C,EAAAitC,OAAA,CACvBsY,EAAAv5D,OAAAwB,EAAA,EAAA0sD,GACAvzD,QAAA,SAAA4nD,GACAA,GAAArqD,KAAAo+G,iBAAA/zD,IACSrqD,MACTA,KAAAq+G,kBACO,CACP,IAAA7mG,EAAA,IAAAjX,MAAAy1D,GACAx+C,EAAA+B,QAAAjQ,EAAA,GACA+3D,EAAAv5D,OAAAvG,MAAA8/D,EAAA7pD,GACAxX,KAAAq+G,iBAIAr+G,KAAAq+G,YAAA,WACA,IAAAh9C,EAAArhE,KAAAiG,QAAAo7D,YACA,GAAAA,EAAA,CACA,IAAAi9C,GAAA,EACAj9C,EAAA5+D,QAAA,SAAA4nD,EAAAnpD,GACA,GAAAmpD,EAIA,IAHAi0D,GAAA,EACAj0D,EAAAtZ,IAAA7vC,EAEAmpD,EAAAk0D,YACAl0D,EAAAk0D,WAAAxtE,IAAA7vC,EACAmpD,IAAAk0D,aAIAD,IAAAt+G,KAAAiG,QAAAo7D,YAAA,QAGArhE,KAAAw+G,cAAA,SAAAn0D,GACArqD,KAAAiG,QAAAo7D,cAAArhE,KAAAiG,QAAAo7D,YAAA,IAAA9gE,MAAAP,KAAAiG,QAAAu8C,cACA,IAAAgK,EAAAxsD,KAAAiG,QAAAo7D,YAAAhX,EAAAtZ,KAEAyb,IACAnC,EAAAk0D,WAAA/xD,EAEAA,EAAA78C,IAAA68C,EAAA78C,GAAA2tB,aACAkvB,EAAA78C,GAAA2tB,WAAApzB,YAAAsiD,EAAA78C,IACA68C,EAAA2xD,aAAA,IAIAn+G,KAAAiG,QAAAo7D,YAAAhX,EAAAtZ,KAAAsZ,EACAA,EAAApkD,QAAAjG,KAAAiG,QACA,IAAAvB,EAAA1E,KAAAmE,OAAAO,SAEA2lD,EAAAhoC,OAAAgoC,EAAA16C,KACA06C,EAAA16C,GAAAwlC,EAAA/qC,cAAA,OACAigD,EAAA16C,GAAA8wB,UAAA4pB,EAAAhoC,MAGAgoC,EAAA16C,KACAwlC,EAAArU,YAAAupB,EAAA16C,GAAA,2BACA06C,EAAA16C,GAAArF,MAAAE,SAAA,WACA6/C,EAAA16C,GAAArF,MAAAG,OAAA,EACA/F,EAAAoK,UAAApE,YAAA2/C,EAAA16C,IACA06C,EAAA8zD,aAAA,GAGA9zD,EAAAo0D,cACAp0D,EAAA16C,GAAArF,MAAAG,OAAA,GAGA,MAAA4/C,EAAAq0D,cACAr0D,EAAAq0D,YAAAr0D,EAAA16C,GAAAsxC,cAGA,MAAAoJ,EAAA8c,WACA9c,EAAA8c,SAAA9c,EAAAq0D,YAAAh6G,EAAAggD,YAAAD,YAGA,IAAAyN,EAAAlyD,KAAAiG,QAAAksD,UAAA9H,EAAAtZ,IAAA,GAGA,GAFAsZ,EAAAs0D,MAAAzsD,EAEAA,EAAA,CACA,IAAAmP,EAAArhE,KAAAiG,QAAAo7D,YACAhX,EAAAtZ,KAAAmhB,EAAAjhB,IAAAF,KAAAswB,EAAAnP,EAAAxtC,MAAAqsB,KAAmGsZ,EAAA4C,QAAA,EAAnGoU,EAAAnP,EAAAxtC,MAAAqsB,KAAAsZ,EAcA,OAXArqD,KAAAiG,QAAA4J,MAAA,cACA6G,KAAA,CACAgO,MAAA,CACAqsB,IAAAsZ,EAAAtZ,QAKA/wC,KAAAq+G,cACAr+G,KAAA89G,cAAA,KAAAp5G,GACA1E,KAAA4+G,gBAAAv0D,GACAA,GAGArqD,KAAAo+G,iBAAA,SAAA/zD,GAIA,GAHAA,EAAA8zD,aAAA,EACA9zD,EAAApkD,QAAA,KACAokD,EAAA16C,IAAA06C,EAAA16C,GAAA2tB,YAAA+sB,EAAA16C,GAAA2tB,WAAApzB,YAAAmgD,EAAA16C,IACA06C,EAAAlmD,QAAAkmD,EAAAlmD,OAAAyE,QAAA,IACAyhD,EAAAlmD,OAAAyE,UACO,MAAAyN,IAEP,GAAArW,KAAAiG,QAAAo7D,YAAA,CACA,IAAAw9C,EAAA7+G,KAAAiG,QAAAo7D,YAAAhX,EAAAtZ,KAEA,GAAA8tE,GAAAx0D,EACArqD,KAAAiG,QAAAo7D,YAAAhX,EAAAtZ,KAAAsZ,EAAAk0D,WACAl0D,EAAAk0D,YAAAv+G,KAAA4+G,gBAAAv0D,EAAAk0D,iBAEA,KAAAM,GAAA,CACA,GAAAA,EAAAN,YAAAl0D,EAAA,CACAw0D,EAAAN,WAAAl0D,EAAAk0D,WACA,MAGAM,IAAAN,YAKAv+G,KAAAiG,QAAA4J,MAAA,cACA6G,KAAA,CACAgO,MAAA,CACAqsB,IAAAsZ,EAAAtZ,QAKA/wC,KAAAq+G,eAGAr+G,KAAA8+G,gBAAA,SAAA/tE,GAKA,IAJA,IAAAswB,EAAArhE,KAAAiG,QAAAo7D,YACAhX,EAAAgX,KAAAtwB,GACA+0B,EAAA,GAEAzb,GACAyb,EAAAl4D,KAAAy8C,GACAA,IAAAk0D,WAGA,OAAAz4C,GAGA9lE,KAAA4+G,gBAAA,SAAAv0D,GACArqD,KAAAiG,QAAA+3G,gBAAApwG,KAAAy8C,GAEArqD,KAAAmE,QAAAnE,KAAAmE,OAAAO,SAAAwrF,cAGAlwF,KAAA+9G,eAAA,SAAA1nG,EAAA3R,GACA,IAAAq6G,EAAA/+G,KAAAiG,QAAA+3G,gBACA7tD,EAAAzrD,EAAAggD,YACA,GAAAq6D,KAAA19G,OAAA,CAGA,IAFA,IAAAsQ,EAAAm6D,IAEA5qE,EAAA,EAAqBA,EAAA69G,EAAA19G,OAA2BH,IAAA,CAChD,IAAAmpD,EAAA00D,EAAA79G,GACA,GAAAmpD,KAAA16C,IACA06C,EAAApkD,SAAAjG,KAAAiG,QAAA,CAEA,IAAAokD,EAAA8zD,YAAA,CACA,GAAAn+G,KAAAiG,QAAAo7D,YAAAhX,EAAAtZ,MAAAsZ,EAAA,SACAA,EAAA8zD,aAAA,EACAz5G,EAAAoK,UAAApE,YAAA2/C,EAAA16C,IAGA06C,EAAAD,EAAAC,EAAA16C,GAAAsxC,aAEAoJ,EAAA20D,aACA30D,MAAA16C,GAAA0yB,YACAgoB,EAAA21B,YAAAzkE,KAAAC,KAAA6uC,IAAA8F,EAAAjV,iBAGA,IAAAisB,EAAA9c,EAAAD,EAAA+F,EAAA1L,WAEA4F,EAAA40D,YACA93C,GAAAnnE,KAAAiG,QAAAs+E,gBAAAl6B,EAAAtZ,MACA,IAAAo2B,EAAA,GAGA9c,EAAA8c,cACA9c,EAAA8c,WACA9c,EAAAtZ,IAAAp/B,MAAA04C,EAAAtZ,OAIAp/B,GAAAm6D,MACA9rE,KAAAiG,QAAA4J,MAAA,cACA6G,KAAA,CACAgO,MAAA,CACAqsB,IAAAp/B,MAKA3R,KAAAiG,QAAAi6E,gBAAA,MAGAlgF,KAAAiG,QAAA+3G,gBAAA,KAGAh+G,KAAA89G,cAAA,SAAAznG,EAAA3R,GACA,IAAAyrD,EAAAzrD,EAAAggD,YACA2c,EAAArhE,KAAAiG,QAAAo7D,YACA,GAAAA,EAAA,CAIA,IAHA,IAAAyR,EAAAv3D,KAAA5J,IAAA3R,KAAAqyC,SAAA8d,EAAA9d,UACAe,EAAA73B,KAAA3J,IAAA5R,KAAAsyC,QAAA6d,EAAA7d,QAAA+uB,EAAAhgE,QAEAyxE,EAAA,IAAAzR,EAAAyR,IACAA,IAGA9yE,KAAAqyC,SAAA8d,EAAA9d,SACAryC,KAAAsyC,QAAA6d,EAAA7d,QACA5tC,EAAA6gD,aAAA4K,SAEA,QAAAjvD,EAAA4xE,EAAyB5xE,GAAAkyC,EAAWlyC,IAAA,CACpC,IAAAmpD,EAAAgX,EAAAngE,GACA,GAAAmpD,KAAA16C,GAEA,GAAA06C,EAAA4C,OACA5C,EAAA16C,GAAArF,MAAAgI,KAAA,KAAA+3C,EAAAq0D,aAAA,YADA,CAKAr0D,EAAA8zD,cACA9zD,EAAA8zD,aAAA,EACAz5G,EAAAoK,UAAApE,YAAA2/C,EAAA16C,KAGA,IAAA2C,EAAA5N,EAAA6gD,aAAAmF,iBAAA,CACA3Z,IAAA7vC,EACA8vC,OAAA,IACS,GAAA1+B,IACT+3C,EAAA40D,YAAA3sG,GAAA69C,EAAA1L,WAAAzkD,KAAAiG,QAAAs+E,gBAAAl6B,EAAAtZ,MACAsZ,EAAA16C,GAAArF,MAAAgI,MAAA69C,EAAA76B,OAAA,KACA,IAAAnoB,EAAAk9C,EAAAo0D,YAAA,EAAA/5G,EAAAg8F,YACAr2C,EAAA20D,aAAA7xG,GAAAzI,EAAAi7E,YACAt1B,EAAA16C,GAAArF,MAAA6C,OAAA,KAEAk9C,EAAA60D,WAAA70D,EAAA21B,cACA31B,EAAA16C,GAAArF,MAAA03B,SAAAmuB,EAAA3nD,MAAA,EAAA2nD,EAAA5lD,QAAA,MAGA8/C,EAAA20D,WACA30D,EAAA16C,GAAArF,MAAA8C,MAAA1I,EAAAgpG,UAAAxsD,WAAA,KAEAmJ,EAAA16C,GAAArF,MAAA8C,MAAA,SAIG9L,KAAAq8G,EAAA/8G,WACHa,EAAAk8G,gBAEA37G,IAAAsM,OAAA,4GAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAsvG,EAAAx7G,EAAA,mBAAAw7G,YAEAxoE,EAAAhzC,EAAA,cAEAD,EAAAC,EAAA,YAAAD,MA8CAT,EAAAkoF,gBAAA,SAAAxlF,EAAAyvD,GACA,IAAA3tD,EAAA9B,EAAA8B,QAEAA,EAAA23G,gBACA33G,EAAA23G,cAAA,IAAAD,EAAA13G,GACAA,EAAA23G,cAAAvqD,OAAAlvD,IAGA,IAAA+D,EAAA/D,EAAA62D,oBACAjqB,EAAA7oC,EAAA6oC,IACAouE,EAAAl5G,EAAA23G,cAAAkB,gBAAA/tE,GAAA/V,OAAA,SAAAqvB,GACA,qBAAAA,EAAA3gD,OACK,GAELy1G,EACAA,EAAAv2G,UAEAmoC,GAAA6iB,EAGA,IACAwrD,EADAp7G,EAnDA,SAAAiC,EAAA8qC,EAAA6iB,GACA,IAAA5vD,EAAAiC,EAAAD,iBAAA8tE,KAAA5xE,EAAA+wC,eACA,GAAAjvC,EAAA3C,OAAA,CACA,IAAAH,EAhBA,SAAA2K,EAAA86E,EAAA04B,GAIA,IAHA,IAAAvsC,EAAA,EACA1/B,EAAAvnC,EAAAxK,OAAA,EAEAyxE,GAAA1/B,GAAA,CACA,IAAA6oC,EAAAnJ,EAAA1/B,GAAA,EACAkjB,EAAA+oD,EAAA14B,EAAA96E,EAAAowE,IACA,GAAA3lB,EAAA,EAAAwc,EAAAmJ,EAAA,MAAiC,MAAA3lB,EAAA,GAA+B,OAAA2lB,EAA/B7oC,EAAA6oC,EAAA,GAGjC,QAAAnJ,EAAA,GAMAwsC,CAAAt7G,EAAA,CACA+sC,MACAC,QAAA,GACK9uC,EAAA+wC,eACL/xC,EAAA,IAAAA,KAAA,GACAA,GAAA8C,EAAA3C,OAAAH,EAAA0yD,EAAA,IAAA5vD,EAAA3C,OAAA,EAA0E,IAAAH,GAAA0yD,EAAA,IAAA1yD,EAAA8C,EAAA3C,OAAA,GAC1E,IAAAihD,EAAAt+C,EAAA9C,GACA,GAAAohD,GAAAsR,EAAA,CAEA,GAAAtR,EAAAvR,QAAA,CACA,GACAuR,EAAAt+C,EAAA9C,GAAA0yD,SACOtR,KAAAvR,SAEP,IAAAuR,EAAA,OAAAt+C,EAAAqiB,QAGA,IAAAk5F,EAAA,GACAxuE,EAAAuR,EAAAvR,IAEA,GACAwuE,EAAA3rD,EAAA,oBAAAtR,GACAA,EAAAt+C,EAAA9C,GAAA0yD,SACKtR,KAAAvR,QAEL,OAAAwuE,EAAAl+G,QAAAk+G,IAuBAC,CAAAv5G,EAAA8qC,EAAA6iB,GAGA,GAAA5vD,EAAA,CACA,IAAAs+C,EAAAt+C,EAAA,GACAkE,EAAA8oC,QAAAsR,EAAAp6C,KAAA,iBAAAo6C,EAAAtR,OAAAsR,EAAAp6C,IAAAo+E,GAAAhkC,EAAAtR,SAAA,EACA9oC,EAAA6oC,IAAAuR,EAAAvR,IACAquE,EAAAj7G,EAAAO,SAAAm9C,aAAAU,aAAAr6C,EAAA6oC,SACK,IAAAouE,EACL,OAEAC,EAAA,CACAr2G,KAAA,gBACAhG,UAAA,UAIAoB,EAAA8B,QAAA4xE,OAAA3vE,EAAA6oC,KACA5sC,EAAA0B,UAAA03C,eAAAr1C,GACA,IAAAmiD,EAAA,CACAtZ,IAAA7oC,EAAA6oC,IACAiuE,YAAA,EACAP,aAAA,EACA9uG,GAAAwlC,EAAA/qC,cAAA,OACAV,KAAA,eAEAiG,EAAA06C,EAAA16C,GAAAjF,YAAAyqC,EAAA/qC,cAAA,QACAq1G,EAAAp1D,EAAA16C,GAAAjF,YAAAyqC,EAAA/qC,cAAA,QACAq1G,EAAA18G,UAAA,sBAAAq8G,EAAAr8G,UACA,IAAAoK,EAAAhJ,EAAAO,SAAA6gD,aAAAmF,iBAAAxiD,GAAAiF,KACAsyG,EAAAn1G,MAAA6C,OAAAhJ,EAAAO,SAAAg8F,YAAA,OACAr2C,EAAA16C,GAAA5M,UAAA,uBACA4M,EAAA5M,UAAA,gBAAAq8G,EAAAr8G,UACA4M,EAAA8wB,UAAA2+E,EAAAr2G,KAAAhB,KAAA,QACA4H,EAAAjF,YAAAyqC,EAAA/qC,cAAA,QAEA,IAAA4oD,EAAA,SAAArH,EAAA9c,EAAAzD,GACA,OAAAyD,IAAA,QAAAzD,GAAA,WAAAA,GAEA,OADAif,EAAAzhD,UACA,CACA9B,QAAA,SAKAujD,EAAAzhD,QAAA,WACAzE,EAAA03C,cAAAC,iBACA33C,EAAA8oF,WAAAh6B,sBAAAD,GACA/sD,EAAA23G,cAAAQ,iBAAA/zD,GACAlmD,EAAA41C,IAAA,kBAAAsQ,EAAAzhD,SACAzE,EAAA41C,IAAA,gBAAAsQ,EAAAzhD,SACAzE,EAAA41C,IAAA,UAAAsQ,EAAAzhD,SACAzE,EAAA41C,IAAA,SAAAsQ,EAAAzhD,WAGAzE,EAAA8oF,WAAA95B,mBAAAH,GACA7uD,EAAAmB,GAAA,kBAAA+kD,EAAAzhD,SACAzE,EAAAmB,GAAA,gBAAA+kD,EAAAzhD,SACAzE,EAAAmB,GAAA,UAAA+kD,EAAAzhD,SACAzE,EAAAmB,GAAA,SAAA+kD,EAAAzhD,SACAzE,EAAA8B,QAAA23G,cAAAY,cAAAn0D,GACAA,EAAA16C,GAAA+vG,YAAAv7G,EAAAhB,MAAAR,KAAAwB,GACAA,EAAAO,SAAA05C,qBAAA,SACA7C,OAAA8O,EAAA16C,GAAAsxC,gBAIA9L,EAAA5T,gBAAA,u3BAiCA,MAEAv/B,IAAAsM,OAAA,gXAAAnM,EAAAV,EAAA4M,GACA,aAEAlM,EAAA,wBAEA,IAAAgzC,EAAAhzC,EAAA,aAEA0G,EAAA1G,EAAA,eAEAD,EAAAC,EAAA,WAAAD,MAEAuM,EAAAtM,EAAA,YAAAsM,OAEAG,EAAAzM,EAAA,kBAAAyM,YAEAotF,EAAA75F,EAAA,iBAAA65F,YAEAttF,EAAAvM,EAAA,sBAAAwM,gBAEAxM,EAAA,0BAEAA,EAAA,2BAEAA,EAAA,iBAEAA,EAAA,kBAEAA,EAAA,4BAEAA,EAAA,oBAEAA,EAAA,sBAEAV,EAAA0uD,OAAAhuD,EAAA,YACAV,EAAAU,UACkCV,EAAA6M,OAAmB1M,EAAA,KAErDH,EAAA2C,KAAA,SAAAuL,EAAAma,GACA,oBAAAna,EAAA,CACA,IAAAgwG,EAAAhwG,EAEA,KADAA,EAAAxF,SAAAy1G,eAAAD,IACA,UAAA5xG,MAAA,4BAAA4xG,GAGA,GAAAhwG,KAAAkwG,KAAAlwG,EAAAkwG,IAAA17G,kBAAAsK,EAAA,OAAAkB,EAAAkwG,IAAA17G,OACA,IAAAzC,EAAA,GAEA,GAAAiO,GAAA,kBAAAiG,KAAAjG,EAAAsd,SAAA,CACA,IAAA6yF,EAAAnwG,EACAjO,EAAAo+G,EAAAp+G,MACAiO,EAAAwlC,EAAA/qC,cAAA,OACA01G,EAAAxiF,WAAA6rB,aAAAx5C,EAAAmwG,QACKnwG,IACLjO,EAAAiO,EAAAtF,YACAsF,EAAA8wB,UAAA,IAGA,IAAAP,EAAAz+B,EAAAs+G,kBAAAr+G,GACAyC,EAAA,IAAAsK,EAAA,IAAAC,EAAAiB,GAAAuwB,EAAApW,GACA+1F,EAAA,CACA11G,SAAA+1B,EACA/7B,SACAisF,SAAAjsF,EAAAgD,OAAAxE,KAAAwB,EAAA,OASA,OAPA27G,IAAAD,EAAA7yB,SAAA8yB,GACAj3G,EAAA0iC,YAAAlf,OAAA,SAAAwzF,EAAAzvB,UACAjsF,EAAAmB,GAAA,qBACAuD,EAAA8iC,eAAAtf,OAAA,SAAAwzF,EAAAzvB,UACAyvB,EAAA17G,OAAA2K,UAAA+wG,IAAA,OAEA17G,EAAA2K,UAAA+wG,IAAA17G,EAAA07G,MACA17G,GAGA1C,EAAAs+G,kBAAA,SAAAh3G,EAAA7F,GACA,IAAAg9B,EAAA,IAAAtxB,EAAA7F,EAAA7F,GAEA,OADAg9B,EAAArvB,eAAA,IAAAmrF,GACA97D,GAGAz+B,EAAAS,QACAT,EAAAgN,SACAhN,EAAAmN,cACAnN,EAAAu6F,cACAv6F,EAAAkN,gBAAAD,EACAjN,EAAAwuD,QAAAxuD,EAAA0uD,OAAAF,UAIAjuD,IAAAG,QAAA,qBAAAoY,GAQA,QAAAhF,KAPAgF,IACAA,EAAA41C,OAAAZ,MAAA,GACAh1C,EAAAjM,OAAAtM,IAAAsM,QAGA+d,OAAArqB,MAAAqqB,OAAArqB,IAAAuY,GAEAA,EACAA,EAAA9Z,eAAA8U,KAAA8W,OAAArqB,IAAAuT,GAAAgF,EAAAhF,IAGA8W,OAAArqB,IAAA,QAAAqqB,OAAArqB,IAE+DqM,IAC/DA,EAAA5M,QAAA4qB,OAAArqB,iDCrirBAqM,EAAA5M,QAAA,WACA,UAAAsM,MAAA,qECCA,IAAAhO,EAAAC,WAAAD,WAAA,WACA,IAAAE,EAAA,SAAAC,EAAAC,GAWA,OAVAF,EAAAG,OAAAC,gBAAA,CACAC,UAAA,cACKC,OAAA,SAAAL,EAAAC,GACLD,EAAAI,UAAAH,IACK,SAAAD,EAAAC,GACL,QAAAK,KAAAL,EACAA,EAAAM,eAAAD,KAAAN,EAAAM,GAAAL,EAAAK,MAIAN,EAAAC,IAGA,gBAAAD,EAAAC,GAGA,SAAAO,IACAV,KAAAW,YAAAT,EAHAD,EAAAC,EAAAC,GAMAD,EAAAU,UAAA,OAAAT,EAAAC,OAAAS,OAAAV,IAAAO,EAAAE,UAAAT,EAAAS,UAAA,IAAAF,IAtBA,GA0BAI,EAAAd,WAAAc,UAAA,WAaA,OAZAA,EAAAV,OAAAW,QAAA,SAAAC,GACA,QAAAC,EAAAC,EAAA,EAAAC,EAAAC,UAAAC,OAA4CH,EAAAC,EAAOD,IAGnD,QAAAV,KAFAS,EAAAG,UAAAF,GAGAd,OAAAQ,UAAAH,eAAAa,KAAAL,EAAAT,KAAAQ,EAAAR,GAAAS,EAAAT,IAIA,OAAAQ,IAGAO,MAAAvB,KAAAoB,YAGAhB,OAAAoB,eAAAC,EAAA,cACAC,OAAA,IAGA,IAAAK,EAAsBH,EAAQ,KAE9BI,EAAAD,EAAAE,iBAEA+9G,EAAmBp+G,EAAQ,KAE3Bq+G,EAAkBr+G,EAAQ,MAE1BD,EAAgBC,EAAQ,GAExBC,EAAYD,EAAQ,GAEpBE,EAAcF,EAAQ,KAEtBkV,EAAUlV,EAAQ,MAElBs+G,EAEA,SAAA79G,GAGA,SAAA69G,EAAA59G,GACA,IAAAC,EAAAF,EAAAf,KAAAtB,KAAAsC,IAAAtC,KAMA,OAJA+B,EAAAS,aAAAC,QAAA,SAAAC,GACAH,EAAAG,GAAAH,EAAAG,GAAAC,KAAAJ,KAEAA,EAAAK,SAAAb,EAAAa,SACAL,EA2bA,OApcAxC,EAAAmgH,EAAA79G,GAYA69G,EAAAt/G,UAAAiC,kBAAA,WACA,IAAAN,EAAAvC,KAEA8C,EAAA9C,KAAAsC,MACAS,EAAAD,EAAAC,UACAC,EAAAF,EAAAE,aACAE,EAAAJ,EAAAI,KACAC,EAAAL,EAAAK,MACAC,EAAAN,EAAAM,MACAC,EAAAP,EAAAO,SACA3B,EAAAoB,EAAApB,MACA4B,EAAAR,EAAAQ,aACAC,EAAAT,EAAAS,YACAC,EAAAV,EAAAU,WACAC,EAAAX,EAAAW,YACAC,EAAAZ,EAAAY,gBACAC,EAAAb,EAAAc,aACAA,OAAA,IAAAD,EAAA,UAAAA,EACAE,EAAAf,EAAAe,gBACAC,EAAAhB,EAAAgB,OACAC,EAAAjB,EAAAiB,SACAC,EAAAlB,EAAAkB,YACAC,EAAAnB,EAAAmB,QACAmK,EAAAtL,EAAAsL,OACApO,KAAAmE,OAAAnC,EAAAoC,KAAApE,KAAAqE,WAEArB,GACAA,EAAAhB,GAGA,IAAAsC,EAAAlE,OAAAmE,KAAAvE,KAAAsC,MAAAgC,aACAoD,EAAA,IAAAu4G,EAAApxG,MAAA7O,KAAAmE,OAAA2K,UAAA,aAAA1L,EAAAgL,GACApO,KAAAmE,OAAA07G,IAAAn4G,QACA1H,KAAAmgH,YAAAz4G,EAAAsI,UAAA,GACAhQ,KAAA0H,QAEA1H,KAAAmE,OAAAkB,oBAAA,GACArF,KAAAmE,OAAAO,SAAAS,eAAA,GAEA,IAAAkB,EAAArG,KAAAmgH,YAAA75G,SAEAtG,KAAAsC,MAAAkC,uBACAxE,KAAAyE,SAAAzE,KAAA4C,SAAA5C,KAAAyE,SAAAzE,KAAAsC,MAAAkC,uBAGAkD,EAAAjF,QAAA,SAAA0B,EAAAyD,GACA,QAAA1G,EAAA,EAAqBA,EAAAoD,EAAAjD,OAAwBH,IAC7CiD,EAAAG,EAAApD,IAAAqB,EAAAD,MAAAgC,cAAApD,IAGA,IAAAk/G,EAAAtpG,EAAAxT,EAAAsE,GACAy4G,EAAAvpG,EAAApV,EAAAkG,EAAA,IACAzD,EAAA8B,QAAA4K,eAAA,IAAA7O,EAAAg6F,aACA73F,EAAAW,SAAA,aAAA1B,GACAe,EAAAO,SAAAC,gBAAAf,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IACAO,EAAAS,aAAAC,QAAA,YAAA3B,GACAiB,EAAAY,YAAA1B,GACAc,EAAAO,SAAAS,cAAA3B,GACAW,EAAAS,aAAAQ,eAAA3B,GACAU,EAAAkB,mBAAA3B,GACAS,EAAAmB,GAAA,QAAA/C,EAAAgD,SACApB,EAAAmB,GAAA,OAAA/C,EAAAiD,QACArB,EAAAmB,GAAA,QAAA/C,EAAAoD,SACAxB,EAAAmB,GAAA,OAAA/C,EAAAkD,QACAtB,EAAAmB,GAAA,QAAA/C,EAAAmD,SACAvB,EAAAmB,GAAA,SAAA/C,EAAAkC,UACAN,EAAAS,aAAAiB,UAAAP,GAAA,kBAAA/C,EAAAuD,mBACA3B,EAAAS,aAAAiB,UAAAP,GAAA,eAAA/C,EAAAwD,gBACA5B,EAAA8B,QAAAX,GAAA,kBAAA/C,EAAA2D,UACA/B,EAAAa,cAAA6P,IAAAurG,EAAAC,EAAAD,EAAA78G,GACA,IAAA+8G,EAAAxpG,EAAA9S,EAAA4D,EAAA,IACA24G,EAAAzpG,EAAA7S,EAAA2D,EAAA,IACAzD,EAAAS,aAAAuB,eAAAm6G,GAEAC,KAAAl/G,OAAA,GACAkB,EAAA6D,cAAAm6G,EAAAp8G,GAGA,IAAAjD,EAAA,EAAqBA,EAAAa,EAAAwE,cAAAlF,OAA0CH,IAAA,CAC/D,IAAAsF,EAAAzE,EAAAwE,cAAArF,GAEAmF,EAAA5F,eAAA+F,GACArC,EAAAsC,UAAAD,EAAAjE,EAAAD,MAAAkE,IACSjE,EAAAD,MAAAkE,IACTE,QAAAC,KAAA,2BAAAH,EAAA,+GAIAjE,EAAAqE,cAAArE,EAAAD,MAAA6B,GAEA5D,MAAAsG,QAAA9C,IACAA,EAAAtB,QAAA,SAAAqE,GACA,kBAAAA,EAAAC,KACA5C,EAAAJ,SAAAiD,QAAAF,EAAAE,QAAAF,EAAAC,MAEA5C,EAAAJ,SAAAkD,WAAAH,KAKAjD,GACAM,EAAA+C,mBAAA,gBAAArD,KAIAd,IACA/C,KAAAqE,UAAAtB,WAAA,IAAAA,GAGAI,GACAnD,KAAAmgH,YAAAh9G,QAGA,IAAAq9G,EAAAxgH,KAAAmE,OAAA07G,IAAAn4G,MACA84G,EAAAtuG,eAAA,UAAAlS,KAAAsC,MAAA6L,YAAAqyG,EAAAzxG,MAAAyxG,EAAAxxG,QACAwxG,EAAAr5G,QAAA,GAEArD,GACAA,EAAA08G,IAIAN,EAAAt/G,UAAAwG,mBAAA,SAAAC,GACA,IAAA9E,EAAAvC,KAEAsH,EAAAD,EACAE,EAAAvH,KAAAsC,MACAoF,EAAA1H,KAAAmE,OAAA07G,IAAAn4G,MA6EA,GA3EAH,EAAA6G,SAAA9G,EAAA8G,QACA1G,EAAA6H,UAAAhI,EAAA6G,QAGA7G,EAAA4G,cAAA7G,EAAA6G,aACAzG,EAAAwK,eAAA,UAAA3K,EAAA4G,YAAAzG,EAAAqH,MAAArH,EAAAsH,QAGAtH,EAAAjF,QAAA,SAAA0B,EAAAyD,GACAL,EAAArE,OAAAoE,EAAApE,MACAiB,EAAAS,aAAAC,QAAA,YAAA0C,EAAArE,MAGAqE,EAAA1D,kBAAAyD,EAAAzD,kBACA0D,EAAA1D,gBACAM,EAAA+C,mBAAA,gBAAAK,EAAA1D,iBAEAM,EAAA+C,mBAAA,OAIAK,EAAAlE,WAAAiE,EAAAjE,UACAc,EAAAY,YAAAwC,EAAAlE,UAGAkE,EAAA9D,cAAA6D,EAAA7D,aACAU,EAAAS,aAAAQ,eAAAmC,EAAA9D,aAGA8D,EAAA7D,kBAAA4D,EAAA5D,iBACAS,EAAAkB,mBAAAkC,EAAA7D,iBAGA6D,EAAA/D,aAAA8D,EAAA9D,YACAW,EAAAO,SAAAS,cAAAoC,EAAA/D,YAGA,QAAAtC,EAAA,EAAqBA,EAAAa,EAAAwE,cAAAlF,OAA0CH,IAAA,CAC/D,IAAAsF,EAAAzE,EAAAwE,cAAArF,GAEAqG,EAAAf,KAAAc,EAAAd,IACArC,EAAAsC,UAAAD,EAAAe,EAAAf,IAIA1E,EAAAyF,EAAAc,WAAAf,EAAAe,aACA9F,EAAAqE,cAAAW,EAAApD,GAGA,IAAAs8G,EAAA3pG,EAAAvP,EAAA7F,MAAAkG,EAAA,IAEA,GAAAzD,EAAA6D,aAAAy4G,EAAA,CAEAl+G,EAAA0F,QAAA,EACA,IAAAC,EAAA/D,EAAA8B,QAAAJ,UAAAsC,SACAhE,EAAAa,SAAAy7G,EAAAl5G,EAAAhE,aACAY,EAAA8B,QAAAJ,UAAAuC,SAAAF,GACA3F,EAAA0F,QAAA,EAGA,IAAAq4G,EAAAxpG,EAAAvP,EAAAvD,YAAA4D,EAAA,IACA84G,EAAA5pG,EAAAxP,EAAAtD,YAAA4D,EAAA,IAEA9F,EAAAw+G,EAAAI,IACAv8G,EAAAS,aAAAuB,eAAAm6G,GAGA,IAAAC,EAAAzpG,EAAAvP,EAAAtD,QAAA2D,EAAA,IACA+4G,EAAA7pG,EAAAxP,EAAArD,QAAA2D,EAAA,KAEA9F,EAAAy+G,EAAAI,IAAApgH,MAAAsG,QAAA05G,IACAh+G,EAAA6D,cAAAm6G,EAAAp8G,KAIAoD,EAAAxE,YAAAuE,EAAAvE,UAAA,CACA,IACAyE,EADAxH,KAAAqE,UAAAtB,UACA0E,OAAAC,MAAA,KACAJ,EAAAvE,UAAA0E,OAAAC,MAAA,KACAjF,QAAA,SAAAkF,GACA,IAAAC,EAAAJ,EAAAK,QAAAF,GACAH,EAAAM,OAAAF,EAAA,KAEA5H,KAAAqE,UAAAtB,UAAA,IAAAwE,EAAAxE,UAAA,IAAAyE,EAAAO,KAAA,KAGAR,EAAAnE,QAAAkE,EAAAlE,OACAsE,EAAA5C,SAAA,aAAAyC,EAAAnE,OAGAmE,EAAApE,QAAAmE,EAAAnE,OACAnD,KAAAmgH,YAAAh9G,QAGAoE,EAAAgB,SAAAvI,KAAAsC,MAAAiG,QAAAhB,EAAAiB,QAAAxI,KAAAsC,MAAAkG,OACAxI,KAAAmE,OAAAgD,UAIA+4G,EAAAt/G,UAAA+H,qBAAA,WACA3I,KAAAmE,OAAAyE,UACA5I,KAAAmE,OAAA,MAGA+7G,EAAAt/G,UAAA6D,SAAA,SAAAoE,GACA,GAAA7I,KAAAsC,MAAAmC,WAAAzE,KAAAiI,OAAA,CACA,IAAA24G,EAAA,GACA5gH,KAAAmE,OAAA07G,IAAAn4G,MAAAjF,QAAA,SAAA0B,GACAy8G,EAAAhzG,KAAAzJ,EAAA6D,cAEAhI,KAAAsC,MAAAmC,SAAAm8G,EAAA/3G,KAIAq3G,EAAAt/G,UAAAkF,kBAAA,SAAA+C,GACA,GAAA7I,KAAAsC,MAAAwD,kBAAA,CACA,IAAA+6G,EAAA,GACA7gH,KAAAmE,OAAA07G,IAAAn4G,MAAAjF,QAAA,SAAA0B,GACA08G,EAAAjzG,KAAAzJ,EAAA2E,kBAEA9I,KAAAsC,MAAAwD,kBAAA+6G,EAAAh4G,KAIAq3G,EAAAt/G,UAAAmF,eAAA,SAAA8C,GACA,GAAA7I,KAAAsC,MAAAyD,eAAA,CACA,IAAA+6G,EAAA,GACA9gH,KAAAmE,OAAA07G,IAAAn4G,MAAAjF,QAAA,SAAA0B,GACA28G,EAAAlzG,KAAAzJ,EAAA2E,kBAEA9I,KAAAsC,MAAAyD,eAAA+6G,EAAAj4G,KAIAq3G,EAAAt/G,UAAA2E,QAAA,SAAAsD,GACA7I,KAAAsC,MAAAiD,SACAvF,KAAAsC,MAAAiD,QAAAsD,IAIAq3G,EAAAt/G,UAAA+E,QAAA,SAAAkD,GACA7I,KAAAsC,MAAAqD,SACA3F,KAAAsC,MAAAqD,QAAAkD,IAIAq3G,EAAAt/G,UAAA4E,OAAA,SAAAqD,GACA7I,KAAAsC,MAAAkD,QACAxF,KAAAsC,MAAAkD,OAAAqD,IAIAq3G,EAAAt/G,UAAA6E,OAAA,SAAAsD,GACA/I,KAAAsC,MAAAmD,QACAzF,KAAAsC,MAAAmD,OAAAsD,IAIAm3G,EAAAt/G,UAAA8E,QAAA,SAAAqD,GACA/I,KAAAsC,MAAAoD,SACA1F,KAAAsC,MAAAoD,QAAAqD,IAIAm3G,EAAAt/G,UAAAsF,SAAA,WACAlG,KAAAsC,MAAA4D,UACAlG,KAAAsC,MAAA4D,SAAAlG,KAAAmE,SAIA+7G,EAAAt/G,UAAAgG,cAAA,SAAAtE,EAAA6B,GAGA,IAFA,IAAAkE,EAAAjI,OAAAmE,KAAAjC,EAAA+F,YAEAW,EAAA,EAAmBA,EAAAX,EAAAhH,OAAuB2H,IAC1C7E,EAAAsC,UAAA4B,EAAAW,GAAA1G,EAAA+F,aAAAW,MAIAk3G,EAAAt/G,UAAAwF,cAAA,SAAAnC,EAAAE,GAEA,IAAA8E,EAAA9E,EAAAS,aAAAsE,YAAA,GAEA,QAAAhI,KAAA+H,EACAA,EAAAxI,eAAAS,IACAiD,EAAAS,aAAAuE,aAAAF,EAAA/H,GAAAkI,IAOA,QAAAlI,KAFA+H,EAAA9E,EAAAS,aAAAsE,YAAA,GAGAD,EAAAxI,eAAAS,IACAiD,EAAAS,aAAAuE,aAAAF,EAAA/H,GAAAkI,IAKAnF,EAAAxB,QAAA,SAAAK,GACA,IAAAwG,EAAAxG,EAAAwG,SACAC,EAAAzG,EAAAyG,SACAC,EAAA1G,EAAA0G,OACAC,EAAA3G,EAAA2G,OACA1G,EAAAD,EAAAC,UACA2G,EAAA5G,EAAA4G,KACA/F,EAAAb,EAAA6G,QACAA,OAAA,IAAAhG,KACAiG,EAAA,IAAAo2G,EAAA99G,MAAAoH,EAAAC,EAAAC,EAAAC,GACAtF,EAAAS,aAAAiF,UAAAD,EAAA7G,EAAA2G,EAAAC,MAIAu2G,EAAAt/G,UAAA+J,UAAA,SAAAC,GACA5K,KAAAqE,UAAAuG,GAGAs1G,EAAAt/G,UAAAiK,OAAA,WACA,IAAA/H,EAAA9C,KAAAsC,MACAwI,EAAAhI,EAAAgI,KACAtC,EAAA1F,EAAA0F,MACAD,EAAAzF,EAAAyF,OACA+B,EAAAxH,EAAAwH,MAEAS,EAAAjK,EAAA,CACA0H,QACAD,UACK+B,GAEL,OAAAzI,EAAAuI,cAAA,OACAY,IAAAhL,KAAA2K,UACAvB,GAAA0B,EACAR,MAAAS,KAIAm1G,EAAAj1G,UAAA,CACAlI,UAAApB,EAAAuJ,OACA1G,qBAAA7C,EAAA0J,OACA/H,aAAA3B,EAAAo/G,QAAAp/G,EAAAuJ,QACA/H,MAAAxB,EAAAwJ,KACA9H,SAAA1B,EAAAyJ,UAAA,CAAAzJ,EAAA0J,OAAA1J,EAAAuJ,SACA3C,OAAA5G,EAAAuJ,OACAhI,KAAAvB,EAAAuJ,OACAJ,KAAAnJ,EAAAuJ,OACA1F,OAAA7D,EAAA2J,KACA7G,SAAA9C,EAAA2J,KACA7F,OAAA9D,EAAA2J,KACA/F,QAAA5D,EAAA2J,KACA3F,QAAAhE,EAAA2J,KACAxH,OAAAnC,EAAA2J,KACA5F,QAAA/D,EAAA2J,KACApF,SAAAvE,EAAA2J,KACA6C,YAAAxM,EAAAuJ,OACA1H,WAAA7B,EAAAwJ,KACAiD,OAAAzM,EAAA0J,OACAjI,MAAAzB,EAAAuJ,OACAxJ,MAAAC,EAAAo/G,QAAAp/G,EAAAuJ,QACA1C,MAAA7G,EAAAuJ,OACApF,kBAAAnE,EAAA2J,KACAvF,eAAApE,EAAA2J,KACAtI,aAAArB,EAAA2J,KACAC,SAAA5J,EAAA0J,OACAG,SAAA7J,EAAA0J,OACAI,SAAA9J,EAAAwJ,KACAO,oBAAA/J,EAAAwJ,KACAQ,QAAAhK,EAAA0J,OACA3H,gBAAA/B,EAAAwJ,KACA5H,YAAA5B,EAAA0J,OACA/G,YAAA3C,EAAAiK,OACAvD,WAAA1G,EAAAiK,OACAtB,MAAA3I,EAAAiK,OACAhI,aAAAjC,EAAAkK,MACA7H,YAAArC,EAAAkK,MACA5H,QAAAtC,EAAAkK,MACAhI,gBAAAlC,EAAAuJ,OACAzH,YAAA9B,EAAAwJ,KACAY,0BAAApK,EAAAyJ,UAAA,CAAAzJ,EAAAwJ,KAAAxJ,EAAAkK,QACAG,yBAAArK,EAAAyJ,UAAA,CAAAzJ,EAAAwJ,KAAAxJ,EAAAkK,QACA9H,SAAApC,EAAAkK,OAEAq0G,EAAAj0G,aAAA,CACAnB,KAAA,aACA3H,OAAA,EACAgL,YAAA,SACAC,OAAA,EACAlL,KAAA,GACAE,MAAA,GACAmF,OAAA,QACAC,MAAA,QACA9G,MAAA,GACA2B,SAAA,GACAG,YAAA,EACAiB,SAAA,KACAiB,QAAA,KACA5B,OAAA,KACAoC,SAAA,KACAqF,SAAA,KACAC,SAAA,KACAC,UAAA,EACAC,qBAAA,EACAhI,iBAAA,EACAiI,QAAA,EACApI,YAAA,EACAe,YAAA,GACAgG,MAAA,GACA1G,aAAA,UACAyE,WAAA,GACA5E,aAAA,EACAsI,2BAAA,EACAC,0BAAA,GAEAk0G,EArcA,CAscCr+G,EAAAqK,WAEDzK,EAAA0K,QAAA+zG,wBC1gBA,SAAA7xG,GAAArM,IAAAsM,OAAA,wHAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,cAEAmiE,EAAAniE,EAAA,0BAAAmiE,mBAEA08C,EAAA,WACA,IAGAC,EAAAjhH,KAAA2lE,oBAAA,CACAu7C,qBAAA,WACAC,mBAHA,kiBAIAC,oBAAA,WACAC,oBANA,oDAOAC,QARA,4LASK,cASLC,EAAA,oFAIAC,EAAA,+CAEAC,EAAA,qFAAAD,EAAA,IACAE,EAAA,kFACA1hH,KAAAukE,OAAA,CACA7/C,MAAA,EACAo+C,MAAA,UACAzqC,MAAA,QACO,CACPyqC,MAAA,SAEAzqC,MAAAspF,YACAx9C,KAAA,aACO,CACPrB,MAAA,SAEAzqC,MAAAspF,cACAx9C,KAAA,YACO,CACPrB,MAAA,SAEAzqC,MAAAspF,YACAx9C,KAAA,YACO,CACPrB,MAAA,SAEAzqC,MAAAspF,cACAx9C,KAAA,WACO,CACPrB,MAAA,SACAzqC,MAAAupF,WACAz9C,KAAA,gBACO,CACPrB,MAAA,SACAzqC,MAAAupF,aACAz9C,KAAA,eACO,CACPrB,MAAA,SACAzqC,MAAAupF,WACAz9C,KAAA,eACO,CACPrB,MAAA,SACAzqC,MAAAupF,aACAz9C,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAAwpF,WACA19C,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAAwpF,aACA19C,KAAA,aACO,CACPrB,MAAA,SACAzqC,MAAAwpF,WACA19C,KAAA,aACO,CACPrB,MAAA,SACAzqC,MAAAwpF,aACA19C,KAAA,YACO,CACPrB,MAAA,SACAzqC,MAAAypF,4BACA39C,KAAA,eACO,CACPrB,MAAA,SACAzqC,MAAAypF,8BACA39C,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAAypF,4BACA39C,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAAypF,8BACA39C,KAAA,aACO,CACPrB,MAAA,mBACAzqC,MAAA,4EACO,CACPyqC,MAAA,cACAzqC,MAAA,2EACO,CACPyqC,MAAA,eACAzqC,MAAA,eACO,CACPyqC,MAAA,eACAzqC,MAAA,eACO,CACPyqC,MAAA,OACAzqC,MAAA,QACO,CACP8I,QAAA,cAEA4gF,UAAA,EACAj/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACP5B,aAAA,WAEAy/C,SAAA,EACAl/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA0/C,SAAA,EACAn/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,YACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA2/C,QAAA,EACAp/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,WACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA4/C,aAAA,EACAr/C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA6/C,YAAA,EACAt/C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA8/C,YAAA,EACAv/C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,eACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACP5B,aAAA,WAEA+/C,WAAA,EACAx/C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACP5B,aAAA,WAEAggD,WAAA,EACAz/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAigD,UAAA,EACA1/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAkgD,UAAA,EACA3/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,aACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAmgD,SAAA,EACA5/C,MAAA,2BACAzqC,MAAAqpF,GACO,CACP5+C,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAogD,YAAA,EACA7/C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAqgD,WAAA,EACA9/C,MAAA,SAEAzqC,MAAA,OACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAsgD,WAAA,EACA//C,MAAA,SACAzqC,MAAA,QACA8rC,KAAA,cACO,CACPrB,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAugD,UAAA,EACAhgD,MAAA,SACAzqC,MAAA,MACA8rC,KAAA,SACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,oBACO,CACP20D,aAAA,WAEAwgD,iBAAA,EAEAjgD,MAAA,eACAzqC,MAAA,YACO,CACPyqC,MAAA,eACAzqC,MAAA,YACO,CACPyqC,MAAA,SACAzqC,MAAA,QACO,CACPyqC,MAAA,SACAzqC,MAAA,UACO,CACPyqC,MAAA,SACAzqC,MAAA,UACO,CACPyqC,MAAA,mBACAzqC,MAAA,cACO,CACP8I,QAAA,aACO,CACP2hC,MAAA,eACAzqC,MAAA,IACA8rC,KAAA,OACO,CACPrB,MAAA,eACAzqC,MAAA,IACAzqB,KAAA,qBAEAo1G,UAAA,EACAlgD,MAAA,mBAEAzqC,MAAA,MAAAopF,EAAA,iBACO,CACP3+C,MAAA,mBAEAzqC,MAAAopF,GACO,CACP3+C,MAAA,mBAEAzqC,MAAAkpF,EAAA,WACO,CACPz+C,MAAA,mBAEAzqC,MAAAkpF,EAAA,OACO,CACPz+C,MAAA,mCAEAzqC,MAAA,wBACO,CACPyqC,MAAAm+C,EACA5oF,MAAA,iCAGAr4B,KAAAmlE,kBAGA52D,EAAA80B,SAAA29E,EAAA18C,GACA7iE,EAAAu/G,yBAEAh/G,IAAAsM,OAAA,+GAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,iBAEA8gH,EAAA9gH,EAAA,eAAAi7G,SAEAA,EAAA37G,EAAA27G,SAAA,SAAAn5G,GACAjE,KAAAq9G,mBAAA,IAAA/oG,OAAA,sBAAgDrQ,EAAA,uBAGhDsK,EAAA80B,SAAA+5E,EAAA6F,GACA,WACAjjH,KAAA64E,mBAAA,SAAA5yE,EAAAggF,EAAAl1C,GACA,IACA55B,EADAlR,EAAA2xC,QAAA7G,GACA55B,MAAAnX,KAAAq9G,oBAEA,GAAAlmG,EACA,OAAAA,EAAA,GAAAnX,KAAAy9G,oBAAAx3G,EAAAkR,EAAA,GAAA45B,EAAA55B,EAAAvP,OACAuP,EAAA,GAAAnX,KAAAu9G,iBAAAt3G,EAAA8qC,EAAA55B,EAAAvP,MAAAuP,EAAA,GAAA9V,QACArB,KAAAu9G,iBAAAt3G,EAAA8qC,KAGGzvC,KAAA87G,EAAAx8G,aAEHoB,IAAAsM,OAAA,kKAAAnM,EAAAV,EAAA4M,GACA,aAEA,IAAAE,EAAApM,EAAA,cAEAg5E,EAAAh5E,EAAA,UAAAgpE,KAEA61C,EAAA7+G,EAAA,4BAAA6+G,qBAEAkC,EAAA/gH,EAAA,sBAAAi7G,SAEAl7G,EAAAC,EAAA,YAAAD,MAEAipE,EAAA,WACAnrE,KAAA4kE,eAAAo8C,EACAhhH,KAAAq/E,aAAA,IAAA6jC,EAAA,OACAljH,KAAAguE,WAAAhuE,KAAAorE,mBAGA78D,EAAA80B,SAAA8nC,EAAAgQ,GACA,WACAn7E,KAAAiqE,iBAAA,IAEAjqE,KAAAmtE,kBAAA,SAAA5gE,EAAAkR,EAAA2vD,GACA,IAAApT,EAAAh6D,KAAA4pE,WAAAnsD,GAEA4F,EADArjB,KAAAqrE,eAAAvH,cAAArmD,EAAAlR,GACA8W,OAEA,GAAAA,EAAAhiB,QAAA,WAAAgiB,IAAAhiB,OAAA,GAAAqI,KACA,OAAAswD,EAGA,SAAAztD,IACAkR,EAAAtG,MAAA,sBAGA6iD,GAAAoT,IAIA,OAAApT,GAGA,IAAAmpD,EAAA,CACAC,KAAA,EACAC,OAAA,EACAC,MAAA,EACAC,MAAA,EACAC,SAAA,GAGAxjH,KAAAqtE,aAAA,SAAA9gE,EAAAkR,EAAA6vD,GACA,YAAAA,GAAA,OAAAA,GAAA,OAAAA,EAAA,SACA,IAAAjqD,EAAArjB,KAAAqrE,eAAAvH,cAAArmD,EAAAhW,OAAA8E,GAAA8W,OACA,IAAAA,EAAA,SAEA,GACA,IAAA+vB,EAAA/vB,EAAAtM,YACOq8B,IAAA,WAAAA,EAAA1pC,MAAA,QAAA0pC,EAAA1pC,MAAA0pC,EAAA1xC,MAAAyV,MAAA,WAEP,QAAAi8B,IACA,WAAAA,EAAA1pC,MAAAy5G,EAAA/vE,EAAA1xC,SAGA1B,KAAAutE,YAAA,SAAAhhE,EAAA2zB,EAAA6Q,GACAA,GAAA,EACA,IAAAipB,EAAAh6D,KAAA4pE,WAAA1pC,EAAA0X,QAAA7G,IACAq8B,EAAAltC,EAAA2pC,eACA7P,EAAA3zC,OAAA+mD,EAAA/rE,SAAA+rE,GAAAltC,EAAA9F,OAAA,IAAAl4B,EAAA6uC,EAAAipB,EAAA34D,OAAA+rE,EAAA/rE,OAAA0vC,EAAAipB,EAAA34D,UAGArB,KAAA0tE,IAAA,mBACGpsE,KAAA6pE,EAAAvqE,WACHa,EAAA0pE,SAIAnpE,IAAAG,QAAA,6BAAAqQ,GAC+DnE,IAC/DA,EAAA5M,QAAA+Q,kDCzeA,SAAAnE,GAAArM,IAAAsM,OAAA,0EAAAnM,EAAAV,EAAA4M,GACA5M,EAAAkyG,QAAA,EACAlyG,EAAAiyG,SAAA,cACAjyG,EAAAmO,QAAA,izEAuHAnO,EAAAowF,yBAAA,EAEA1vF,EAAA,cAEAo/B,gBAAA9/B,EAAAmO,QAAAnO,EAAAiyG,YAIA1xG,IAAAG,QAAA,+BAAAqQ,GAC+DnE,IAC/DA,EAAA5M,QAAA+Q","file":"mrstatic/js/2.1b2d64a0.chunk.js","sourcesContent":["\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar PropTypes = require(\"prop-types\");\n\nvar React = require(\"react\");\n\nvar isEqual = require(\"lodash.isequal\");\n\nvar editorOptions_1 = require(\"./editorOptions\");\n\nvar ace = editorOptions_1.getAceInstance();\n\nvar Range = ace.require(\"ace/range\").Range;\n\nvar ReactAce =\n/** @class */\nfunction (_super) {\n __extends(ReactAce, _super);\n\n function ReactAce(props) {\n var _this = _super.call(this, props) || this;\n\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n\n ReactAce.prototype.componentDidMount = function () {\n var _this = this;\n\n var _a = this.props,\n className = _a.className,\n onBeforeLoad = _a.onBeforeLoad,\n onValidate = _a.onValidate,\n mode = _a.mode,\n focus = _a.focus,\n theme = _a.theme,\n fontSize = _a.fontSize,\n value = _a.value,\n defaultValue = _a.defaultValue,\n cursorStart = _a.cursorStart,\n showGutter = _a.showGutter,\n wrapEnabled = _a.wrapEnabled,\n showPrintMargin = _a.showPrintMargin,\n _b = _a.scrollMargin,\n scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b,\n keyboardHandler = _a.keyboardHandler,\n onLoad = _a.onLoad,\n commands = _a.commands,\n annotations = _a.annotations,\n markers = _a.markers,\n placeholder = _a.placeholder;\n this.editor = ace.edit(this.refEditor);\n\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n\n var editorProps = Object.keys(this.props.editorProps);\n\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n this.editor.getSession().setMode(\"ace/mode/\" + mode);\n this.editor.setTheme(\"ace/theme/\" + theme);\n this.editor.setFontSize(fontSize);\n this.editor.getSession().setValue(!defaultValue ? value : defaultValue, cursorStart);\n\n if (this.props.navigateToFileEnd) {\n this.editor.navigateFileEnd();\n }\n\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on(\"focus\", this.onFocus);\n this.editor.on(\"blur\", this.onBlur);\n this.editor.on(\"copy\", this.onCopy);\n this.editor.on(\"paste\", this.onPaste);\n this.editor.on(\"change\", this.onChange);\n this.editor.on(\"input\", this.onInput);\n\n if (placeholder) {\n this.updatePlaceholder();\n }\n\n this.editor.getSession().selection.on(\"changeSelection\", this.onSelectionChange);\n this.editor.getSession().selection.on(\"changeCursor\", this.onCursorChange);\n\n if (onValidate) {\n this.editor.getSession().on(\"changeAnnotation\", function () {\n // tslint:disable-next-line:no-shadowed-variable\n var annotations = _this.editor.getSession().getAnnotations();\n\n _this.props.onValidate(annotations);\n });\n }\n\n this.editor.session.on(\"changeScrollTop\", this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n } // get a list of possible options to avoid 'misspelled option errors'\n\n\n var availableOptions = this.editor.$options;\n editorOptions_1.editorOptions.forEach(function (option) {\n if (availableOptions.hasOwnProperty(option)) {\n _this.editor.setOption(option, _this.props[option]);\n } else if (_this.props[option]) {\n console.warn(\"ReactAce: editor option \" + option + \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\");\n }\n });\n this.handleOptions(this.props);\n\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n _this.editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n _this.editor.commands.addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n\n if (onLoad) {\n onLoad(this.editor);\n }\n\n this.editor.resize();\n\n if (focus) {\n this.editor.focus();\n }\n };\n\n ReactAce.prototype.componentDidUpdate = function (prevProps) {\n var oldProps = prevProps;\n var nextProps = this.props;\n\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n\n if (nextProps[option] !== oldProps[option]) {\n this.editor.setOption(option, nextProps[option]);\n }\n }\n\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className = \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n } // First process editor value, as it may create a new session (see issue #300)\n\n\n if (this.editor && this.editor.getValue() !== nextProps.value) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n\n if (nextProps.placeholder !== oldProps.placeholder) {\n this.updatePlaceholder();\n }\n\n if (nextProps.mode !== oldProps.mode) {\n this.editor.getSession().setMode(\"ace/mode/\" + nextProps.mode);\n }\n\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n } else {\n this.editor.setKeyboardHandler(null);\n }\n }\n\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(nextProps.fontSize);\n }\n\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n\n if (!isEqual(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n\n if (!isEqual(nextProps.markers, oldProps.markers) && Array.isArray(nextProps.markers)) {\n this.handleMarkers(nextProps.markers);\n } // this doesn't look like it works at all....\n\n\n if (!isEqual(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this.editor.resize();\n }\n\n if (this.props.focus && !prevProps.focus) {\n this.editor.focus();\n }\n };\n\n ReactAce.prototype.handleScrollMargins = function (margins) {\n if (margins === void 0) {\n margins = [0, 0, 0, 0];\n }\n\n this.editor.renderer.setScrollMargins(margins[0], margins[1], margins[2], margins[3]);\n };\n\n ReactAce.prototype.componentWillUnmount = function () {\n this.editor.destroy();\n this.editor = null;\n };\n\n ReactAce.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n };\n\n ReactAce.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n };\n\n ReactAce.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n };\n\n ReactAce.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n\n if (this.props.placeholder) {\n this.updatePlaceholder();\n }\n };\n\n ReactAce.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event, this.editor);\n }\n };\n\n ReactAce.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n };\n\n ReactAce.prototype.onCopy = function (text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n\n ReactAce.prototype.onPaste = function (text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n\n ReactAce.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n\n ReactAce.prototype.handleOptions = function (props) {\n var setOptions = Object.keys(props.setOptions);\n\n for (var y = 0; y < setOptions.length; y++) {\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n\n ReactAce.prototype.handleMarkers = function (markers) {\n var _this = this; // remove foreground markers\n\n\n var currentMarkers = this.editor.getSession().getMarkers(true);\n\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n } // remove background markers except active line marker and selected word marker\n\n\n currentMarkers = this.editor.getSession().getMarkers(false);\n\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i) && currentMarkers[i].clazz !== \"ace_active-line\" && currentMarkers[i].clazz !== \"ace_selected-word\") {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n } // add new markers\n\n\n markers.forEach(function (_a) {\n var startRow = _a.startRow,\n startCol = _a.startCol,\n endRow = _a.endRow,\n endCol = _a.endCol,\n className = _a.className,\n type = _a.type,\n _b = _a.inFront,\n inFront = _b === void 0 ? false : _b;\n var range = new Range(startRow, startCol, endRow, endCol);\n\n _this.editor.getSession().addMarker(range, className, type, inFront);\n });\n };\n\n ReactAce.prototype.updatePlaceholder = function () {\n // Adapted from https://stackoverflow.com/questions/26695708/how-can-i-add-placeholder-text-when-the-editor-is-empty\n var editor = this.editor;\n var placeholder = this.props.placeholder;\n var showPlaceholder = !editor.session.getValue().length;\n var node = editor.renderer.placeholderNode;\n\n if (!showPlaceholder && node) {\n editor.renderer.scroller.removeChild(editor.renderer.placeholderNode);\n editor.renderer.placeholderNode = null;\n } else if (showPlaceholder && !node) {\n node = editor.renderer.placeholderNode = document.createElement(\"div\");\n node.textContent = placeholder || \"\";\n node.className = \"ace_comment ace_placeholder\";\n node.style.padding = \"0 9px\";\n node.style.position = \"absolute\";\n node.style.zIndex = \"3\";\n editor.renderer.scroller.appendChild(node);\n } else if (showPlaceholder && node) {\n node.textContent = placeholder;\n }\n };\n\n ReactAce.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n\n ReactAce.prototype.render = function () {\n var _a = this.props,\n name = _a.name,\n width = _a.width,\n height = _a.height,\n style = _a.style;\n\n var divStyle = __assign({\n width: width,\n height: height\n }, style);\n\n return React.createElement(\"div\", {\n ref: this.updateRef,\n id: name,\n style: divStyle\n });\n };\n\n ReactAce.propTypes = {\n mode: PropTypes.string,\n focus: PropTypes.bool,\n theme: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.string,\n width: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showGutter: PropTypes.bool,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onPaste: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onBlur: PropTypes.func,\n onScroll: PropTypes.func,\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onLoad: PropTypes.func,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n onValidate: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n debounceChangePeriod: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableSnippets: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n enableLiveAutocompletion: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n navigateToFileEnd: PropTypes.bool,\n commands: PropTypes.array,\n placeholder: PropTypes.string\n };\n ReactAce.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n value: \"\",\n fontSize: 12,\n enableSnippets: false,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n placeholder: null,\n navigateToFileEnd: true\n };\n return ReactAce;\n}(React.Component);\n\nexports.default = ReactAce;","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar PropTypes = require(\"prop-types\");\n\nvar React = require(\"react\");\n\nvar split_1 = require(\"./split\");\n\nvar DiffMatchPatch = require(\"diff-match-patch\");\n\nvar DiffComponent =\n/** @class */\nfunction (_super) {\n __extends(DiffComponent, _super);\n\n function DiffComponent(props) {\n var _this = _super.call(this, props) || this;\n\n _this.state = {\n value: _this.props.value\n };\n _this.onChange = _this.onChange.bind(_this);\n _this.diff = _this.diff.bind(_this);\n return _this;\n }\n\n DiffComponent.prototype.componentDidUpdate = function () {\n var value = this.props.value;\n\n if (value !== this.state.value) {\n this.setState({\n value: value\n });\n }\n };\n\n DiffComponent.prototype.onChange = function (value) {\n this.setState({\n value: value\n });\n\n if (this.props.onChange) {\n this.props.onChange(value);\n }\n };\n\n DiffComponent.prototype.diff = function () {\n var dmp = new DiffMatchPatch();\n var lhString = this.state.value[0];\n var rhString = this.state.value[1];\n\n if (lhString.length === 0 && rhString.length === 0) {\n return [];\n }\n\n var diff = dmp.diff_main(lhString, rhString);\n dmp.diff_cleanupSemantic(diff);\n var diffedLines = this.generateDiffedLines(diff);\n var codeEditorSettings = this.setCodeMarkers(diffedLines);\n return codeEditorSettings;\n };\n\n DiffComponent.prototype.generateDiffedLines = function (diff) {\n var C = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1\n };\n var diffedLines = {\n left: [],\n right: []\n };\n var cursor = {\n left: 1,\n right: 1\n };\n diff.forEach(function (chunk) {\n var chunkType = chunk[0];\n var text = chunk[1];\n var lines = text.split(\"\\n\").length - 1; // diff-match-patch sometimes returns empty strings at random\n\n if (text.length === 0) {\n return;\n }\n\n var firstChar = text[0];\n var lastChar = text[text.length - 1];\n var linesToHighlight = 0;\n\n switch (chunkType) {\n case C.DIFF_EQUAL:\n cursor.left += lines;\n cursor.right += lines;\n break;\n\n case C.DIFF_DELETE:\n // If the deletion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.left++;\n lines--;\n }\n\n linesToHighlight = lines; // If the deletion does not include a newline, highlight the same line on the right\n\n if (linesToHighlight === 0) {\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right\n });\n } // If the last character is a newline, we don't want to highlight that line\n\n\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left + linesToHighlight\n });\n cursor.left += lines;\n break;\n\n case C.DIFF_INSERT:\n // If the insertion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.right++;\n lines--;\n }\n\n linesToHighlight = lines; // If the insertion does not include a newline, highlight the same line on the left\n\n if (linesToHighlight === 0) {\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left\n });\n } // If the last character is a newline, we don't want to highlight that line\n\n\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right + linesToHighlight\n });\n cursor.right += lines;\n break;\n\n default:\n throw new Error(\"Diff type was not defined.\");\n }\n });\n return diffedLines;\n }; // Receives a collection of line numbers and iterates through them to highlight appropriately\n // Returns an object that tells the render() method how to display the code editors\n\n\n DiffComponent.prototype.setCodeMarkers = function (diffedLines) {\n if (diffedLines === void 0) {\n diffedLines = {\n left: [],\n right: []\n };\n }\n\n var codeEditorSettings = [];\n var newMarkerSet = {\n left: [],\n right: []\n };\n\n for (var i = 0; i < diffedLines.left.length; i++) {\n var markerObj = {\n startRow: diffedLines.left[i].startLine - 1,\n endRow: diffedLines.left[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.left.push(markerObj);\n }\n\n for (var i = 0; i < diffedLines.right.length; i++) {\n var markerObj = {\n startRow: diffedLines.right[i].startLine - 1,\n endRow: diffedLines.right[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.right.push(markerObj);\n }\n\n codeEditorSettings[0] = newMarkerSet.left;\n codeEditorSettings[1] = newMarkerSet.right;\n return codeEditorSettings;\n };\n\n DiffComponent.prototype.render = function () {\n var markers = this.diff();\n return React.createElement(split_1.default, {\n name: this.props.name,\n className: this.props.className,\n focus: this.props.focus,\n orientation: this.props.orientation,\n splits: this.props.splits,\n mode: this.props.mode,\n theme: this.props.theme,\n height: this.props.height,\n width: this.props.width,\n fontSize: this.props.fontSize,\n showGutter: this.props.showGutter,\n onChange: this.onChange,\n onPaste: this.props.onPaste,\n onLoad: this.props.onLoad,\n onScroll: this.props.onScroll,\n minLines: this.props.minLines,\n maxLines: this.props.maxLines,\n readOnly: this.props.readOnly,\n highlightActiveLine: this.props.highlightActiveLine,\n showPrintMargin: this.props.showPrintMargin,\n tabSize: this.props.tabSize,\n cursorStart: this.props.cursorStart,\n editorProps: this.props.editorProps,\n style: this.props.style,\n scrollMargin: this.props.scrollMargin,\n setOptions: this.props.setOptions,\n wrapEnabled: this.props.wrapEnabled,\n enableBasicAutocompletion: this.props.enableBasicAutocompletion,\n enableLiveAutocompletion: this.props.enableLiveAutocompletion,\n value: this.state.value,\n markers: markers\n });\n };\n\n DiffComponent.propTypes = {\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n enableBasicAutocompletion: PropTypes.bool,\n enableLiveAutocompletion: PropTypes.bool,\n focus: PropTypes.bool,\n fontSize: PropTypes.number,\n height: PropTypes.string,\n highlightActiveLine: PropTypes.bool,\n maxLines: PropTypes.number,\n minLines: PropTypes.number,\n mode: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n onChange: PropTypes.func,\n orientation: PropTypes.string,\n readOnly: PropTypes.bool,\n scrollMargin: PropTypes.array,\n setOptions: PropTypes.object,\n showGutter: PropTypes.bool,\n showPrintMargin: PropTypes.bool,\n splits: PropTypes.number,\n style: PropTypes.object,\n tabSize: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.array,\n width: PropTypes.string,\n wrapEnabled: PropTypes.bool\n };\n DiffComponent.defaultProps = {\n cursorStart: 1,\n editorProps: {},\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n focus: false,\n fontSize: 12,\n height: \"500px\",\n highlightActiveLine: true,\n maxLines: null,\n minLines: null,\n mode: \"\",\n name: \"ace-editor\",\n onLoad: null,\n onScroll: null,\n onPaste: null,\n onChange: null,\n orientation: \"beside\",\n readOnly: false,\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n showGutter: true,\n showPrintMargin: true,\n splits: 2,\n style: {},\n tabSize: 4,\n theme: \"github\",\n value: [\"\", \"\"],\n width: \"500px\",\n wrapEnabled: true\n };\n return DiffComponent;\n}(React.Component);\n\nexports.default = DiffComponent;","ace.define(\"ace/split\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/editor\", \"ace/virtual_renderer\", \"ace/edit_session\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var lang = require(\"./lib/lang\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Editor = require(\"./editor\").Editor;\n\n var Renderer = require(\"./virtual_renderer\").VirtualRenderer;\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n var Split = function Split(container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n this.on(\"focus\", function (editor) {\n this.$cEditor = editor;\n }.bind(this));\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$createEditor = function () {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n editor.on(\"focus\", function () {\n this._emit(\"focus\", editor);\n }.bind(this));\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n\n this.setSplits = function (splits) {\n var editor;\n\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n\n if (splits == this.$splits) {\n return;\n } else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits++;\n }\n\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits++;\n }\n } else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits--;\n }\n }\n\n this.resize();\n };\n\n this.getSplits = function () {\n return this.$splits;\n };\n\n this.getEditor = function (idx) {\n return this.$editors[idx];\n };\n\n this.getCurrentEditor = function () {\n return this.$cEditor;\n };\n\n this.focus = function () {\n this.$cEditor.focus();\n };\n\n this.blur = function () {\n this.$cEditor.blur();\n };\n\n this.setTheme = function (theme) {\n this.$editors.forEach(function (editor) {\n editor.setTheme(theme);\n });\n };\n\n this.setKeyboardHandler = function (keybinding) {\n this.$editors.forEach(function (editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n\n this.forEach = function (callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n\n this.$fontSize = \"\";\n\n this.setFontSize = function (size) {\n this.$fontSize = size;\n this.forEach(function (editor) {\n editor.setFontSize(size);\n });\n };\n\n this.$cloneSession = function (session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n var undoManager = session.getUndoManager();\n s.setUndoManager(undoManager);\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n return s;\n };\n\n this.setSession = function (session, idx) {\n var editor;\n\n if (idx == null) {\n editor = this.$cEditor;\n } else {\n editor = this.$editors[idx];\n }\n\n var isUsed = this.$editors.some(function (editor) {\n return editor.session === session;\n });\n\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n\n editor.setSession(session);\n return session;\n };\n\n this.getOrientation = function () {\n return this.$orientation;\n };\n\n this.setOrientation = function (orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n\n this.$orientation = orientation;\n this.resize();\n };\n\n this.resize = function () {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n } else {\n var editorHeight = height / this.$splits;\n\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n }).call(Split.prototype);\n exports.Split = Split;\n});\nace.define(\"ace/ext/split\", [\"require\", \"exports\", \"module\", \"ace/split\"], function (require, exports, module) {\n \"use strict\";\n\n module.exports = require(\"../split\");\n});\n\n(function () {\n ace.require([\"ace/ext/split\"], function (m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/** Used to stand-in for `undefined` hash values. */\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used as references for various `Number` constants. */\n\nvar INFINITY = 1 / 0;\n/** `Object#toString` result references. */\n\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n/** Used to match property names within property paths. */\n\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to match backslashes in property paths. */\n\nvar reEscapeChar = /\\\\(\\\\)?/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\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 */\n\n\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n\n return result;\n}\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to detect overreaching core-js shims. */\n\nvar coreJsData = root['__core-js_shared__'];\n/** Used to detect methods masquerading as native. */\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/** Used to resolve the decompiled source of functions. */\n\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/** Built-in value references. */\n\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n/* Built-in method references that are verified to be native. */\n\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\n\nfunction listCacheClear() {\n this.__data__ = [];\n}\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n return true;\n}\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n\n\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n\n return index && index == length ? object : undefined;\n}\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n\n\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\n\n\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\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 */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n\n\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n\n var type = typeof value;\n\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\n\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n\n\nvar stringToPath = memoize(function (string) {\n string = toString(string);\n var result = [];\n\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n\n string.replace(rePropName, function (match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n});\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n\n\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || resolver && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n} // Assign cache to `_.memoize`.\n\n\nmemoize.Cache = MapCache;\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\n\nvar isArray = Array.isArray;\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\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(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n\n\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nfunction diff_match_patch() {\n // Defaults.\n // Redefine these in your program to override the defaults.\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0; // Cost of an empty edit operation in terms of edit characters.\n\n this.Diff_EditCost = 4; // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n\n this.Match_Threshold = 0.5; // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n\n this.Match_Distance = 1000; // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n\n this.Patch_DeleteThreshold = 0.5; // Chunk size for context length.\n\n this.Patch_Margin = 4; // The number of bits in an int.\n\n this.Match_MaxBits = 32;\n} // DIFF FUNCTIONS\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\n\n\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n/** @typedef {{0: number, 1: string}} */\n\ndiff_match_patch.Diff;\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\n\ndiff_match_patch.prototype.diff_main = function (text1, text2, opt_checklines, opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = new Date().getTime() + this.Diff_Timeout * 1000;\n }\n }\n\n var deadline = opt_deadline; // Check for null inputs.\n\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n } // Check for equality (speedup).\n\n\n if (text1 == text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n\n var checklines = opt_checklines; // Trim off common prefix (speedup).\n\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength); // Trim off common suffix (speedup).\n\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength); // Compute the diff on the middle block.\n\n var diffs = this.diff_compute_(text1, text2, checklines, deadline); // Restore the prefix and suffix.\n\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_compute_ = function (text1, text2, checklines, deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]]; // Swap insertions for deletions if diff is reversed.\n\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n } // Check to see if the problem can be split in two.\n\n\n var hm = this.diff_halfMatch_(text1, text2);\n\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4]; // Send both pairs off for separate processing.\n\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline); // Merge the results.\n\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_lineMode_ = function (text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n var diffs = this.diff_main(text1, text2, false, deadline); // Convert the diff back to original text.\n\n this.diff_charsToLines_(diffs, linearray); // Eliminate freak matches (e.g. blank lines)\n\n this.diff_cleanupSemantic(diffs); // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n\n diffs.push([DIFF_EQUAL, '']);\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var a = this.diff_main(text_delete, text_insert, false, deadline);\n\n for (var j = a.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, a[j]);\n }\n\n pointer = pointer + a.length;\n }\n\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n\n pointer++;\n }\n\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_bisect_ = function (text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length); // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length; // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n\n var front = delta % 2 != 0; // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if (new Date().getTime() > deadline) {\n break;\n } // Walk the front path one step.\n\n\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n\n if (k1 == -d || k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1]) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n\n var y1 = x1 - k1;\n\n while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n\n v1[k1_offset] = x1;\n\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n } // Walk the reverse path one step.\n\n\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n\n if (k2 == -d || k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1]) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n\n var y2 = x2 - k2;\n\n while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) == text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n\n v2[k2_offset] = x2;\n\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset; // Mirror x2 onto top-left coordinate system.\n\n x2 = text1_length - x2;\n\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n } // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n\n\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_bisectSplit_ = function (text1, text2, x, y, deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y); // Compute both diffs serially.\n\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n return diffs.concat(diffsb);\n};\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_linesToChars_ = function (text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n\n lineArray[0] = '';\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n\n function diff_linesToCharsMunge_(text) {\n var chars = ''; // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n\n var lineStart = 0;\n var lineEnd = -1; // Keeping our own length variable is faster than looking it up.\n\n var lineArrayLength = lineArray.length;\n\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n\n var line = text.substring(lineStart, lineEnd + 1);\n lineStart = lineEnd + 1;\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n }\n\n return chars;\n }\n\n var chars1 = diff_linesToCharsMunge_(text1);\n var chars2 = diff_linesToCharsMunge_(text2);\n return {\n chars1: chars1,\n chars2: chars2,\n lineArray: lineArray\n };\n};\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_charsToLines_ = function (diffs, lineArray) {\n for (var x = 0; x < diffs.length; x++) {\n var chars = diffs[x][1];\n var text = [];\n\n for (var y = 0; y < chars.length; y++) {\n text[y] = lineArray[chars.charCodeAt(y)];\n }\n\n diffs[x][1] = text.join('');\n }\n};\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\n\n\ndiff_match_patch.prototype.diff_commonPrefix = function (text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n } // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n\n\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n return pointermid;\n};\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\n\n\ndiff_match_patch.prototype.diff_commonSuffix = function (text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n } // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n\n\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n return pointermid;\n};\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_commonOverlap_ = function (text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length; // Eliminate the null case.\n\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n } // Truncate the longer string.\n\n\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n\n var text_length = Math.min(text1_length, text2_length); // Quick check for the worst case.\n\n if (text1 == text2) {\n return text_length;\n } // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n\n\n var best = 0;\n var length = 1;\n\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n\n if (found == -1) {\n return best;\n }\n\n length += found;\n\n if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\n\n\ndiff_match_patch.prototype.diff_halfMatch_ = function (text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i), shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j));\n\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n } // First check if the second quarter is the seed for a half-match.\n\n\n var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4)); // Check again based on the third quarter.\n\n var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n var hm;\n\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n } // A half-match was found, sort out the return data.\n\n\n var text1_a, text1_b, text2_a, text2_b;\n\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\n\n\ndiff_match_patch.prototype.diff_cleanupSemantic = function (diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n\n /** @type {?string} */\n\n var lastequality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n\n var length_insertions1 = 0;\n var length_deletions1 = 0; // Number of characters that changed after the equality.\n\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n } // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n\n\n if (lastequality && lastequality.length <= Math.max(length_insertions1, length_deletions1) && lastequality.length <= Math.max(length_insertions2, length_deletions2)) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); // Change second copy to insert.\n\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; // Throw away the equality we just deleted.\n\n equalitiesLength--; // Throw away the previous equality (it needs to be reevaluated).\n\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n\n pointer++;\n } // Normalize the diff.\n\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n\n this.diff_cleanupSemanticLossless(diffs); // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n\n pointer = 1;\n\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlap_length1)]);\n diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlap_length2)]);\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n\n pointer++;\n }\n\n pointer++;\n }\n};\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\n\n\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function (diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n } // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n\n\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n\n return 0;\n }\n\n var pointer = 1; // Intentionally ignore the first and last element (don't need checking).\n\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1]; // First, shift the edit as far left as possible.\n\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n } // Second, step character by character right, looking for the best fit.\n\n\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); // The >= encourages trailing rather than leading whitespace on edits.\n\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n\n diffs[pointer][1] = bestEdit;\n\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n\n pointer++;\n }\n}; // Define some regex patterns for matching boundaries.\n\n\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\n\ndiff_match_patch.prototype.diff_cleanupEfficiency = function (diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n\n /** @type {?string} */\n\n var lastequality = null; // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n\n var pre_ins = false; // Is there a deletion operation before the last equality.\n\n var pre_del = false; // Is there an insertion operation after the last equality.\n\n var post_ins = false; // Is there a deletion operation after the last equality.\n\n var post_del = false;\n\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost && (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastequality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastequality = null;\n }\n\n post_ins = post_del = false;\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n\n\n if (lastequality && (pre_ins && pre_del && post_ins && post_del || lastequality.length < this.Diff_EditCost / 2 && pre_ins + pre_del + post_ins + post_del == 3)) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); // Change second copy to insert.\n\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n\n lastequality = null;\n\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n\n changes = true;\n }\n }\n\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\n\n\ndiff_match_patch.prototype.diff_cleanupMerge = function (diffs) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n\n if (commonlength !== 0) {\n if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);\n pointer++;\n }\n\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n } // Factor out any common suffixies.\n\n\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length - commonlength);\n text_delete = text_delete.substring(0, text_delete.length - commonlength);\n }\n } // Delete the offending records and add the merged ones.\n\n\n if (count_delete === 0) {\n diffs.splice(pointer - count_insert, count_delete + count_insert, [DIFF_INSERT, text_insert]);\n } else if (count_insert === 0) {\n diffs.splice(pointer - count_delete, count_delete + count_insert, [DIFF_DELETE, text_delete]);\n } else {\n diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);\n }\n\n pointer = pointer - count_delete - count_insert + (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n } // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n\n\n var changes = false;\n pointer = 1; // Intentionally ignore the first and last element (don't need checking).\n\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n\n pointer++;\n } // If shifts were made, the diff needs reordering and another shift sweep.\n\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\n\n\ndiff_match_patch.prototype.diff_xIndex = function (diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n\n if (diffs[x][0] !== DIFF_DELETE) {\n // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n\n if (chars1 > loc) {\n // Overshot the location.\n break;\n }\n\n last_chars1 = chars1;\n last_chars2 = chars2;\n } // Was the location was deleted?\n\n\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n } // Add the remaining character length.\n\n\n return last_chars2 + (loc - last_chars1);\n};\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\n\n\ndiff_match_patch.prototype.diff_prettyHtml = function (diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = /</g;\n var pattern_gt = />/g;\n var pattern_para = /\\n/g;\n\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n\n var data = diffs[x][1]; // Text of change.\n\n var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<').replace(pattern_gt, '>').replace(pattern_para, '¶<br>');\n\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n break;\n\n case DIFF_DELETE:\n html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n break;\n\n case DIFF_EQUAL:\n html[x] = '<span>' + text + '</span>';\n break;\n }\n }\n\n return html.join('');\n};\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\n\n\ndiff_match_patch.prototype.diff_text1 = function (diffs) {\n var text = [];\n\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n\n return text.join('');\n};\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\n\n\ndiff_match_patch.prototype.diff_text2 = function (diffs) {\n var text = [];\n\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n\n return text.join('');\n};\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\n\n\ndiff_match_patch.prototype.diff_levenshtein = function (diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n\n case DIFF_DELETE:\n deletions += data.length;\n break;\n\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\n\n\ndiff_match_patch.prototype.diff_toDelta = function (diffs) {\n var text = [];\n\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n\n return text.join('\\t').replace(/%20/g, ' ');\n};\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\n\n\ndiff_match_patch.prototype.diff_fromDelta = function (text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n\n var pointer = 0; // Cursor in text1\n\n var tokens = delta.split(/\\t/g);\n\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] = [DIFF_INSERT, decodeURI(param)];\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n\n break;\n\n case '-': // Fall through.\n\n case '=':\n var n = parseInt(param, 10);\n\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n\n var text = text1.substring(pointer, pointer += n);\n\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = [DIFF_EQUAL, text];\n } else {\n diffs[diffsLength++] = [DIFF_DELETE, text];\n }\n\n break;\n\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' + tokens[x]);\n }\n\n }\n }\n\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer + ') does not equal source text length (' + text1.length + ').');\n }\n\n return diffs;\n}; // MATCH FUNCTIONS\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\n\n\ndiff_match_patch.prototype.match_main = function (text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\n\n\ndiff_match_patch.prototype.match_bitap_ = function (text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n } // Initialise the alphabet.\n\n\n var s = this.match_alphabet_(pattern);\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n\n return accuracy + proximity / dmp.Match_Distance;\n } // Highest score beyond which we give up.\n\n\n var score_threshold = this.Match_Threshold; // Is there a nearby exact match? (speedup)\n\n var best_loc = text.indexOf(pattern, loc);\n\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold); // What about in the other direction? (speedup)\n\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n } // Initialise the bit arrays.\n\n\n var matchmask = 1 << pattern.length - 1;\n best_loc = -1;\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n } // Use the result from this iteration as the maximum for the next.\n\n\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n\n if (d === 0) {\n // First pass: exact match.\n rd[j] = (rd[j + 1] << 1 | 1) & charMatch;\n } else {\n // Subsequent passes: fuzzy match.\n rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((last_rd[j + 1] | last_rd[j]) << 1 | 1) | last_rd[j + 1];\n }\n\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1); // This match will almost certainly be better than any existing match.\n // But check anyway.\n\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n } // No hope for a (better) match at greater error levels.\n\n\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n\n last_rd = rd;\n }\n\n return best_loc;\n};\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\n\n\ndiff_match_patch.prototype.match_alphabet_ = function (pattern) {\n var s = {};\n\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n }\n\n return s;\n}; // PATCH FUNCTIONS\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\n\n\ndiff_match_patch.prototype.patch_addContext_ = function (patch, text) {\n if (text.length == 0) {\n return;\n }\n\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0; // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n } // Add one chunk for good luck.\n\n\n padding += this.Patch_Margin; // Add the prefix.\n\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n\n if (prefix) {\n patch.diffs.unshift([DIFF_EQUAL, prefix]);\n } // Add the suffix.\n\n\n var suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding);\n\n if (suffix) {\n patch.diffs.push([DIFF_EQUAL, suffix]);\n } // Roll back the start points.\n\n\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length; // Extend the lengths.\n\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\n\n\ndiff_match_patch.prototype.patch_make = function (a, opt_b, opt_c) {\n var text1, diffs;\n\n if (typeof a == 'string' && typeof opt_b == 'string' && typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 =\n /** @type {string} */\n a;\n diffs = this.diff_main(text1,\n /** @type {string} */\n opt_b, true);\n\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' && typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs =\n /** @type {!Array.<!diff_match_patch.Diff>} */\n a;\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' && typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 =\n /** @type {string} */\n a;\n diffs =\n /** @type {!Array.<!diff_match_patch.Diff>} */\n opt_b;\n } else if (typeof a == 'string' && typeof opt_b == 'string' && opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 =\n /** @type {string} */\n a;\n diffs =\n /** @type {!Array.<!diff_match_patch.Diff>} */\n opt_c;\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n\n var char_count1 = 0; // Number of characters into the text1 string.\n\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n\n var prepatch_text = text1;\n var postpatch_text = text1;\n\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2);\n break;\n\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length);\n break;\n\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin && patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0; // Unlike Unidiff, our patch lists have a rolling context.\n // http://code.google.com/p/google-diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n\n break;\n } // Update the current character count.\n\n\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n } // Pick up the leftover patch if not empty.\n\n\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\n\n\ndiff_match_patch.prototype.patch_deepCopy = function (patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] = patch.diffs[y].slice();\n }\n\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n\n return patchesCopy;\n};\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\n\n\ndiff_match_patch.prototype.patch_apply = function (patches, text) {\n if (patches.length == 0) {\n return [text, []];\n } // Deep copy the patches so that no changes are made to originals.\n\n\n patches = this.patch_deepCopy(patches);\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n this.patch_splitMax(patches); // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n\n var delta = 0;\n var results = [];\n\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits), expected_loc);\n\n if (start_loc != -1) {\n end_loc = this.match_main(text, text1.substring(text1.length - this.Match_MaxBits), expected_loc + text1.length - this.Match_MaxBits);\n\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false; // Subtract the delta for this failed patch from subsequent patches.\n\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) + this.diff_text2(patches[x].diffs) + text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n\n if (text1.length > this.Match_MaxBits && this.diff_levenshtein(diffs) / text1.length > this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n\n if (mod[0] === DIFF_INSERT) {\n // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) {\n // Deletion\n text = text.substring(0, start_loc + index2) + text.substring(start_loc + this.diff_xIndex(diffs, index1 + mod[1].length));\n }\n\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n } // Strip the padding off.\n\n\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\n\n\ndiff_match_patch.prototype.patch_addPadding = function (patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n } // Bump all the patches forward.\n\n\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n } // Add some padding on start of first diff.\n\n\n var patch = patches[0];\n var diffs = patch.diffs;\n\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift([DIFF_EQUAL, nullPadding]);\n patch.start1 -= paddingLength; // Should be 0.\n\n patch.start2 -= paddingLength; // Should be 0.\n\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n } // Add some padding on end of last diff.\n\n\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push([DIFF_EQUAL, nullPadding]);\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\n\n\ndiff_match_patch.prototype.patch_splitMax = function (patches) {\n var patch_size = this.Match_MaxBits;\n\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n\n var bigpatch = patches[x]; // Remove the big old patch.\n\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push([DIFF_EQUAL, precontext]);\n }\n\n while (bigpatch.diffs.length !== 0 && patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 && patch.diffs[0][0] == DIFF_EQUAL && diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push([diff_type, diff_text]);\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0, patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n\n patch.diffs.push([diff_type, diff_text]);\n\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n } // Compute the head context for the next patch.\n\n\n precontext = this.diff_text2(patch.diffs);\n precontext = precontext.substring(precontext.length - this.Patch_Margin); // Append the end context for this patch.\n\n var postcontext = this.diff_text1(bigpatch.diffs).substring(0, this.Patch_Margin);\n\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n\n if (patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push([DIFF_EQUAL, postcontext]);\n }\n }\n\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\n\n\ndiff_match_patch.prototype.patch_toText = function (patches) {\n var text = [];\n\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n\n return text.join('');\n};\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\n\n\ndiff_match_patch.prototype.patch_fromText = function (textline) {\n var patches = [];\n\n if (!textline) {\n return patches;\n }\n\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n\n if (sign == '-') {\n // Deletion.\n patch.diffs.push([DIFF_DELETE, line]);\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push([DIFF_INSERT, line]);\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push([DIFF_EQUAL, line]);\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {// Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n\n textPointer++;\n }\n }\n\n return patches;\n};\n/**\n * Class representing one patch operation.\n * @constructor\n */\n\n\ndiff_match_patch.patch_obj = function () {\n /** @type {!Array.<!diff_match_patch.Diff>} */\n this.diffs = [];\n /** @type {?number} */\n\n this.start1 = null;\n /** @type {?number} */\n\n this.start2 = null;\n /** @type {number} */\n\n this.length1 = 0;\n /** @type {number} */\n\n this.length2 = 0;\n};\n/**\n * Emmulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indicies are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\n\n\ndiff_match_patch.patch_obj.prototype.toString = function () {\n var coords1, coords2;\n\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = this.start1 + 1 + ',' + this.length1;\n }\n\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = this.start2 + 1 + ',' + this.length2;\n }\n\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op; // Escape the body of the patch with %xx notation.\n\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n\n case DIFF_DELETE:\n op = '-';\n break;\n\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n\n return text.join('').replace(/%20/g, ' ');\n}; // The following export code was added by @ForbesLindesay\n\n\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","'use strict';\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = undefined;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _copyToClipboard = require('copy-to-clipboard');\n\nvar _copyToClipboard2 = _interopRequireDefault(_copyToClipboard);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(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 if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar CopyToClipboard = exports.CopyToClipboard = function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n function CopyToClipboard() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = CopyToClipboard.__proto__ || Object.getPrototypeOf(CopyToClipboard)).call.apply(_ref, [this].concat(args))), _this), _this.onClick = function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react2.default.Children.only(children);\n\n var result = (0, _copyToClipboard2.default)(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(CopyToClipboard, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n _text = _props.text,\n _onCopy = _props.onCopy,\n _options = _props.options,\n children = _props.children,\n props = _objectWithoutProperties(_props, ['text', 'onCopy', 'options', 'children']);\n\n var elem = _react2.default.Children.only(children);\n\n return _react2.default.cloneElement(elem, _extends({}, props, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react2.default.PureComponent);\n\nCopyToClipboard.defaultProps = {\n onCopy: undefined,\n options: undefined\n};","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n\n if (!options) {\n options = {};\n }\n\n debug = options.debug || false;\n\n try {\n reselectPrevious = deselectCurrent();\n range = document.createRange();\n selection = document.getSelection();\n mark = document.createElement(\"span\");\n mark.textContent = text; // reset user styles for span element\n\n mark.style.all = \"unset\"; // prevents scrolling to the end of the page\n\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\"; // used to preserve spaces and line breaks\n\n mark.style.whiteSpace = \"pre\"; // do not inherit user-select (it may be `none`)\n\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function (e) {\n e.stopPropagation();\n\n if (options.format) {\n e.preventDefault();\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n });\n document.body.appendChild(mark);\n range.selectNodeContents(mark);\n selection.addRange(range);\n var successful = document.execCommand(\"copy\");\n\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;","module.exports = function () {\n var selection = document.getSelection();\n\n if (!selection.rangeCount) {\n return function () {};\n }\n\n var active = document.activeElement;\n var ranges = [];\n\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) {\n // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' && selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function (range) {\n selection.addRange(range);\n });\n }\n\n active && active.focus();\n };\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar ace_1 = require(\"./ace\");\n\nvar diff_1 = require(\"./diff\");\n\nexports.diff = diff_1.default;\n\nvar split_1 = require(\"./split\");\n\nexports.split = split_1.default;\nexports.default = ace_1.default;","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n/** Used to stand-in for `undefined` hash values. */\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used to compose bitmasks for value comparisons. */\n\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n/** Used as references for various `Number` constants. */\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\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 match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Detect free variable `exports`. */\n\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && freeGlobal.process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n/* Node.js helper references. */\n\n\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n\n\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n\n\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n\n return false;\n}\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n\n\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n\n\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\n\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n\n\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n\n\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n\n\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to detect overreaching core-js shims. */\n\nvar coreJsData = root['__core-js_shared__'];\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect methods masquerading as native. */\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\n\nvar nativeObjectToString = objectProto.toString;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n/* Built-in method references that are verified to be native. */\n\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\n\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n\n while (++index < length) {\n this.add(values[index]);\n }\n}\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n\n\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n\n return this;\n}\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n\n\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n} // Add methods to `SetCache`.\n\n\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\nfunction stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n}\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n} // Add methods to `Stack`.\n\n\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\n\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n\n\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n\n objIsArr = true;\n objIsObj = false;\n }\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n\n if (!isSameTag) {\n return false;\n }\n\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\n\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n\n\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(array);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array); // Ignore non-index properties.\n\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n\n result = false;\n break;\n } // Recursively compare arrays (susceptible to call stack limits).\n\n\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked) {\n return stacked == other;\n }\n\n bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n\n }\n\n return false;\n}\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n\n\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n\n var index = objLength;\n\n while (index--) {\n var key = objProps[index];\n\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n } // Assume cyclic values are equal.\n\n\n var stacked = stack.get(object);\n\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n } // Recursively compare objects (susceptible to call stack limits).\n\n\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n\n skipCtor || (skipCtor = key == 'constructor');\n }\n\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\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 */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\n\nvar getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\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 */\n\n\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\n\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\n\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\n\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\n\nvar isArguments = baseIsArguments(function () {\n return arguments;\n}()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\nvar isArray = Array.isArray;\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\n\nvar isBuffer = nativeIsBuffer || stubFalse;\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\n\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\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(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\n\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\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/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\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 */\n\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n\n\nfunction stubArray() {\n return [];\n}\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n\n\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar editorOptions = [\"minLines\", \"maxLines\", \"readOnly\", \"highlightActiveLine\", \"tabSize\", \"enableBasicAutocompletion\", \"enableLiveAutocompletion\", \"enableSnippets\"];\nexports.editorOptions = editorOptions;\nvar editorEvents = [\"onChange\", \"onFocus\", \"onInput\", \"onBlur\", \"onCopy\", \"onPaste\", \"onSelectionChange\", \"onCursorChange\", \"onScroll\", \"handleOptions\", \"updateRef\"];\nexports.editorEvents = editorEvents;\n\nvar getAceInstance = function getAceInstance() {\n var ace; // Fallback for ace.require when vanilla ACE is hosted over a CDN\n\n if (window.ace) {\n ace = window.ace;\n ace.acequire = window.ace.require || window.ace.acequire;\n } else {\n ace = require(\"ace-builds\");\n }\n\n return ace;\n};\n\nexports.getAceInstance = getAceInstance;\n\nvar debounce = function debounce(fn, delay) {\n var timer = null;\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n};\n\nexports.debounce = debounce;","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n(function () {\n var ACE_NAMESPACE = \"ace\";\n\n var global = function () {\n return this;\n }();\n\n if (!global && typeof window != \"undefined\") global = window; // strict mode\n\n if (!ACE_NAMESPACE && typeof requirejs !== \"undefined\") return;\n\n var define = function define(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original) define.original.apply(this, arguments);else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n\n if (arguments.length == 2) payload = deps;\n\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n };\n\n define.modules = {};\n define.payloads = {};\n /**\n * Get at functionality define()ed using the function above\n */\n\n var _require = function _require(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original) return;\n params.push(dep);\n }\n\n return callback && callback.apply(null, params) || true;\n }\n };\n\n var require = function require(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n\n if (packagedModule == undefined && require.original) return require.original.apply(this, arguments);\n return packagedModule;\n };\n\n var normalizeModule = function normalizeModule(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n } // normalize relative requires\n\n\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n\n return moduleName;\n };\n /**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\n\n\n var lookup = function lookup(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n var module = define.modules[moduleName];\n\n if (!module) {\n module = define.payloads[moduleName];\n\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function req(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n\n module = define.modules[moduleName] = exports || module;\n }\n\n return module;\n };\n\n function exportAce(ns) {\n var root = global;\n\n if (ns) {\n if (!global[ns]) global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n }\n\n exportAce(ACE_NAMESPACE);\n})();\n\nace.define(\"ace/lib/regexp\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined,\n // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg) return;\n\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name,\n r2;\n\n if (typeof str == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name) match[name] = match[i];\n }\n }\n\n if (!compliantLastIndexIncrement && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n }\n\n return match;\n };\n\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags(regex) {\n return (regex.global ? \"g\" : \"\") + (regex.ignoreCase ? \"i\" : \"\") + (regex.multiline ? \"m\" : \"\") + (regex.extended ? \"x\" : \"\") + ( // Proposed for ES4; included in AS3\n regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf(array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item) return i;\n }\n\n return -1;\n }\n});\nace.define(\"ace/lib/es5-shim\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n function Empty() {}\n\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n // .length is 1\n var target = this;\n\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n\n var args = slice.call(arguments, 1); // for normal call\n\n var bound = function bound() {\n if (this instanceof bound) {\n var result = target.apply(this, args.concat(slice.call(arguments)));\n\n if (Object(result) === result) {\n return result;\n }\n\n return this;\n } else {\n return target.apply(that, args.concat(slice.call(arguments)));\n }\n };\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n };\n }\n\n var call = Function.prototype.call;\n var prototypeOfArray = Array.prototype;\n var prototypeOfObject = Object.prototype;\n var slice = prototypeOfArray.slice;\n\n var _toString = call.bind(prototypeOfObject.toString);\n\n var owns = call.bind(prototypeOfObject.hasOwnProperty);\n var defineGetter;\n var defineSetter;\n var lookupGetter;\n var lookupSetter;\n var supportsAccessors;\n\n if (supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\")) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n }\n\n if ([1, 2].splice(0).length != 2) {\n if (function () {\n // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l + 2);\n a[0] = a[1] = 0;\n return a;\n }\n\n var array = [],\n lengthBefore;\n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n lengthBefore = array.length; //46\n\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length;\n\n if (lengthBefore + 1 == array.length) {\n return true; // has right splice implementation without bugs\n }\n }()) {\n //IE 6/7\n var array_splice = Array.prototype.splice;\n\n Array.prototype.splice = function (start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [start === void 0 ? 0 : start, deleteCount === void 0 ? this.length - start : deleteCount].concat(slice.call(arguments, 2)));\n }\n };\n } else {\n //IE8\n Array.prototype.splice = function (pos, removeCount) {\n var length = this.length;\n\n if (pos > 0) {\n if (pos > length) pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos + removeCount < length)) removeCount = length - pos;\n var removed = this.slice(pos, pos + removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length;\n\n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) {\n // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } else if (tailNewPos > tailOldPos) {\n // case B\n for (i = tailCount; i--;) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } // else, add == remove (nothing to do)\n\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n\n for (i = 0; i < add; ++i) {\n this[pos + i] = insert[i];\n }\n }\n }\n\n return removed;\n };\n }\n }\n\n if (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n }\n\n var boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n }\n\n if (!Array.prototype.map) {\n Array.prototype.map = function map(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) result[i] = fun.call(thisp, self[i], i, object);\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.every) {\n Array.prototype.every = function every(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n\n return true;\n };\n }\n\n if (!Array.prototype.some) {\n Array.prototype.some = function some(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n if (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result,\n i = length - 1;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n }\n\n if (!Array.prototype.indexOf || [0, 1].indexOf(1, 2) != -1) {\n Array.prototype.indexOf = function indexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n\n i = i >= 0 ? i : Math.max(0, length + i);\n\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Array.prototype.lastIndexOf || [0, 1].lastIndexOf(0, -3) != -1) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = length - 1;\n\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n\n i = i >= 0 ? i : length - Math.abs(i);\n\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (object.constructor ? object.constructor.prototype : prototypeOfObject);\n };\n }\n\n if (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" + \"non-object: \";\n\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property)) return;\n var descriptor, getter, setter;\n descriptor = {\n enumerable: true,\n configurable: true\n };\n\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n\n descriptor.value = object[property];\n return descriptor;\n };\n }\n\n if (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n }\n\n if (!Object.create) {\n var createEmpty;\n\n if (Object.prototype.__proto__ === null) {\n createEmpty = function createEmpty() {\n return {\n \"__proto__\": null\n };\n };\n } else {\n createEmpty = function createEmpty() {\n var empty = {};\n\n for (var i in empty) {\n empty[i] = null;\n }\n\n empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null;\n return empty;\n };\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\") throw new TypeError(\"typeof prototype[\" + typeof prototype + \"] != 'object'\");\n\n var Type = function Type() {};\n\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n\n if (properties !== void 0) Object.defineProperties(object, properties);\n return object;\n };\n }\n\n function doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {}\n }\n\n if (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" || doesDefinePropertyWork(document.createElement(\"div\"));\n\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n }\n\n if (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \";\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" + \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if (typeof descriptor != \"object\" && typeof descriptor != \"function\" || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {}\n }\n\n if (owns(descriptor, \"value\")) {\n if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\")) defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\")) defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n }\n\n if (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property)) Object.defineProperty(object, property, properties[property]);\n }\n\n return object;\n };\n }\n\n if (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n }\n\n if (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n }\n\n try {\n Object.freeze(function () {});\n } catch (exception) {\n Object.freeze = function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n }(Object.freeze);\n }\n\n if (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n }\n\n if (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n }\n\n if (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n }\n\n if (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n\n var name = '';\n\n while (owns(object, name)) {\n name += '?';\n }\n\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n }\n\n if (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\"],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\n \"toString\": null\n }) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n\n return keys;\n };\n }\n\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n var ws = \"\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u2000\\u2001\\u2002\\u2003\" + \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" + \"\\u2029\\uFEFF\";\n\n if (!String.prototype.trim) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n }\n\n function toInteger(n) {\n n = +n;\n\n if (n !== n) {\n // isNaN\n n = 0;\n } else if (n !== 0 && n !== 1 / 0 && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n\n return n;\n }\n\n function isPrimitive(input) {\n var type = typeof input;\n return input === null || type === \"undefined\" || type === \"boolean\" || type === \"number\" || type === \"string\";\n }\n\n function toPrimitive(input) {\n var val, valueOf, toString;\n\n if (isPrimitive(input)) {\n return input;\n }\n\n valueOf = input.valueOf;\n\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n toString = input.toString;\n\n if (typeof toString === \"function\") {\n val = toString.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n throw new TypeError();\n }\n\n var toObject = function toObject(o) {\n if (o == null) {\n // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + \" to object\");\n }\n\n return Object(o);\n };\n});\nace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\", \"ace/lib/regexp\", \"ace/lib/es5-shim\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./regexp\");\n\n require(\"./es5-shim\");\n\n if (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function value() {\n this.parentNode && this.parentNode.removeChild(this);\n }\n });\n }\n});\nace.define(\"ace/lib/useragent\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n };\n\n exports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n };\n\n var _navigator = typeof navigator == \"object\" ? navigator : {};\n\n var os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\n var ua = _navigator.userAgent || \"\";\n var appName = _navigator.appName || \"\";\n exports.isWin = os == \"win\";\n exports.isMac = os == \"mac\";\n exports.isLinux = os == \"linux\";\n exports.isIE = appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0 ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]) : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\n\n exports.isOldIE = exports.isIE && exports.isIE < 9;\n exports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\n exports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n exports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n exports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n exports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n exports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n exports.isAndroid = ua.indexOf(\"Android\") >= 0;\n exports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n if (exports.isIOS) exports.isMac = true;\n exports.isMobile = exports.isIOS || exports.isAndroid;\n});\nace.define(\"ace/lib/dom\", [\"require\", \"exports\", \"module\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var useragent = require(\"./useragent\");\n\n var XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\n exports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent) parent.appendChild(txt);\n return txt;\n }\n\n if (!Array.isArray(arr)) return arr;\n\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n\n return els;\n }\n\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options)) childIndex = 2;\n\n for (var i = childIndex; i < arr.length; i++) {\n buildDom(arr[i], el, refs);\n }\n\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n } else if (typeof val == \"function\" || n == \"value\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n\n if (parent) parent.appendChild(el);\n return el;\n };\n\n exports.getDocumentHead = function (doc) {\n if (!doc) doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n };\n\n exports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n };\n\n exports.removeChildren = function (element) {\n element.innerHTML = \"\";\n };\n\n exports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n };\n\n exports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n };\n\n exports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n };\n\n exports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n };\n\n exports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n classes.splice(index, 1);\n }\n\n el.className = classes.join(\" \");\n };\n\n exports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g),\n add = true;\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n add = false;\n classes.splice(index, 1);\n }\n\n if (add) classes.push(name);\n el.className = classes.join(\" \");\n return add;\n };\n\n exports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n };\n\n exports.hasCssString = function (id, doc) {\n var index = 0,\n sheets;\n doc = doc || document;\n\n if (sheets = doc.querySelectorAll(\"style\")) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) return true;\n }\n }\n };\n\n exports.importCssString = function importCssString(cssText, id, target) {\n var container = target;\n\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target) container = document;\n }\n\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container)) return null;\n if (id) cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id) style.id = id;\n if (container == doc) container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n };\n\n exports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", {\n rel: \"stylesheet\",\n href: uri\n }], exports.getDocumentHead(doc));\n };\n\n exports.scrollbarWidth = function (document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = document.documentElement;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n };\n\n if (typeof document == \"undefined\") {\n exports.importCssString = function () {};\n }\n\n exports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n };\n\n exports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n };\n\n exports.HAS_CSS_ANIMATION = false;\n exports.HAS_CSS_TRANSFORMS = false;\n exports.HI_DPI = useragent.isWin ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5 : true;\n\n if (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined) exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\") exports.HAS_CSS_ANIMATION = true;\n div = null;\n }\n\n if (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n } else {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n }\n});\nace.define(\"ace/lib/oop\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n\n exports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n\n return obj;\n };\n\n exports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n };\n});\nace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./oop\");\n\n var Keys = function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 224: 'Meta',\n 91: 'MetaLeft',\n 92: 'MetaRight',\n 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1,\n \"alt\": 2,\n \"option\": 2,\n \"shift\": 4,\n \"super\": 8,\n \"meta\": 8,\n \"command\": 8,\n \"cmd\": 8\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 107: '+',\n 109: '-',\n 110: '.',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 111: '/',\n 106: '*'\n }\n };\n var name, i;\n\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n }();\n\n oop.mixin(exports, Keys);\n\n exports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\") keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n };\n});\nace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keys = require(\"./keys\");\n\n var useragent = require(\"./useragent\");\n\n var pressedKeys = null;\n var ts = 0;\n\n exports.addListener = function (elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n\n if (elem.attachEvent) {\n var wrapper = function wrapper() {\n callback.call(elem, window.event);\n };\n\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n };\n\n exports.removeListener = function (elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n };\n\n exports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n };\n\n exports.stopPropagation = function (e) {\n if (e.stopPropagation) e.stopPropagation();else e.cancelBubble = true;\n };\n\n exports.preventDefault = function (e) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n };\n\n exports.getButton = function (e) {\n if (e.type == \"dblclick\") return 0;\n if (e.type == \"contextmenu\" || useragent.isMac && e.ctrlKey && !e.altKey && !e.shiftKey) return 2;\n\n if (e.preventDefault) {\n return e.button;\n } else {\n return {\n 1: 0,\n 2: 2,\n 4: 1\n }[e.button];\n }\n };\n\n exports.capture = function (el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n return onMouseUp;\n };\n\n exports.addMouseWheelListener = function (el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function (e) {\n var factor = 8;\n\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function (e) {\n var factor = 0.35;\n\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n\n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function (e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n\n callback(e);\n });\n }\n };\n\n exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4) clicks = 1;\n } else {\n clicks = 1;\n }\n\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick) clicks = 1;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4) clicks = 0;else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e);\n }\n\n function onDblclick(e) {\n clicks = 2;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n\n if (!Array.isArray(elements)) elements = [elements];\n elements.forEach(function (el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE) exports.addListener(el, \"dblclick\", onDblclick);\n });\n };\n\n var getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window) ? function (e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n } : function (e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\n exports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n };\n\n function normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\"))) hashId |= 8;\n\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3) pressedKeys.altGr = 0;else return;\n }\n\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1) ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50) pressedKeys.altGr = true;\n }\n }\n }\n\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n\n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented) return;\n }\n }\n\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented) return;else hashId &= ~8;\n }\n\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n\n return callback(e, hashId, keyCode);\n }\n\n exports.addCommandKeyListener = function (el, callback) {\n var addListener = exports.addListener;\n\n if (useragent.isOldGecko || useragent.isOpera && !(\"KeyboardEvent\" in window)) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n };\n\n function resetPressedKeys() {\n pressedKeys = Object.create(null);\n }\n\n if (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId++;\n\n var listener = function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n };\n\n exports.addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n }\n\n exports.$idleBlocked = false;\n\n exports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n };\n\n exports.$idleBlockId = null;\n\n exports.blockIdle = function (delay) {\n if (exports.$idleBlockId) clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n };\n\n exports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame);\n if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window);else exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n});\nace.define(\"ace/range\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var comparePoints = function comparePoints(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n var Range = function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n };\n\n (function () {\n this.isEqual = function (range) {\n return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column;\n };\n\n this.toString = function () {\n return \"Range: [\" + this.start.row + \"/\" + this.start.column + \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\";\n };\n\n this.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n\n this.compareRange = function (range) {\n var cmp,\n end = range.end,\n start = range.start;\n cmp = this.compare(end.row, end.column);\n\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n\n this.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n\n this.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n\n this.intersects = function (range) {\n var cmp = this.compareRange(range);\n return cmp == -1 || cmp == 0 || cmp == 1;\n };\n\n this.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n\n this.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n\n this.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n\n this.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n\n this.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : column > this.end.column ? 1 : 0;\n }\n }\n\n if (row < this.start.row) return -1;\n if (row > this.end.row) return 1;\n if (this.start.row === row) return column >= this.start.column ? 0 : -1;\n if (this.end.row === row) return column <= this.end.column ? 0 : 1;\n return 0;\n };\n\n this.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow) var end = {\n row: lastRow + 1,\n column: 0\n };else if (this.end.row < firstRow) var end = {\n row: firstRow,\n column: 0\n };\n if (this.start.row > lastRow) var start = {\n row: lastRow + 1,\n column: 0\n };else if (this.start.row < firstRow) var start = {\n row: firstRow,\n column: 0\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0) return this;else if (cmp == -1) var start = {\n row: row,\n column: column\n };else var end = {\n row: row,\n column: column\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function () {\n return this.start.row === this.end.row && this.start.column === this.end.column;\n };\n\n this.isMultiLine = function () {\n return this.start.row !== this.end.row;\n };\n\n this.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n\n this.collapseRows = function () {\n if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);else return new Range(this.start.row, 0, this.end.row, 0);\n };\n\n this.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n\n this.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n }).call(Range.prototype);\n\n Range.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n };\n\n Range.comparePoints = comparePoints;\n\n Range.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n exports.Range = Range;\n});\nace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.last = function (a) {\n return a[a.length - 1];\n };\n\n exports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n };\n\n exports.stringRepeat = function (string, count) {\n var result = '';\n\n while (count > 0) {\n if (count & 1) result += string;\n if (count >>= 1) string += string;\n }\n\n return result;\n };\n\n var trimBeginRegexp = /^\\s\\s*/;\n var trimEndRegexp = /\\s\\s*$/;\n\n exports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n };\n\n exports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n };\n\n exports.copyObject = function (obj) {\n var copy = {};\n\n for (var key in obj) {\n copy[key] = obj[key];\n }\n\n return copy;\n };\n\n exports.copyArray = function (array) {\n var copy = [];\n\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\") copy[i] = this.copyObject(array[i]);else copy[i] = array[i];\n }\n\n return copy;\n };\n\n exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj) return obj;\n var copy;\n\n if (Array.isArray(obj)) {\n copy = [];\n\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n }\n\n if (Object.prototype.toString.call(obj) !== \"[object Object]\") return obj;\n copy = {};\n\n for (var key in obj) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n };\n\n exports.arrayToMap = function (arr) {\n var map = {};\n\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n\n return map;\n };\n\n exports.createMap = function (props) {\n var map = Object.create(null);\n\n for (var i in props) {\n map[i] = props[i];\n }\n\n return map;\n };\n\n exports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n };\n\n exports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n };\n\n exports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\n };\n\n exports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n };\n\n exports.deferredCall = function (fcn) {\n var timer = null;\n\n var callback = function callback() {\n timer = null;\n fcn();\n };\n\n var deferred = function deferred(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n\n deferred.isPending = function () {\n return timer;\n };\n\n return deferred;\n };\n\n exports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n\n var callback = function callback() {\n timer = null;\n fcn();\n };\n\n var _self = function _self(timeout) {\n if (timer == null) timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.schedule = _self;\n\n _self.call = function () {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function () {\n return timer;\n };\n\n return _self;\n };\n});\nace.define(\"ace/clipboard\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var $cancelT;\n module.exports = {\n lineMode: false,\n pasteCancelled: function pasteCancelled() {\n if ($cancelT && $cancelT > Date.now() - 50) return true;\n return $cancelT = false;\n },\n cancel: function cancel() {\n $cancelT = Date.now();\n }\n };\n});\nace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/clipboard\", \"ace/lib/keys\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var clipboard = require(\"../clipboard\");\n\n var BROKEN_SETDATA = useragent.isChrome < 18;\n var USE_IE_MIME_TYPE = useragent.isIE;\n var HAS_FOCUS_ARGS = useragent.isChrome > 63;\n var MAX_LINE_LENGTH = 400;\n\n var KEYS = require(\"../lib/keys\");\n\n var MODS = KEYS.KEY_MODS;\n var isIOS = useragent.isIOS;\n var valueResetRegex = isIOS ? /\\s/ : /\\n/;\n\n var TextInput = function TextInput(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!useragent.isMobile) text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n\n try {\n var isFocused = document.activeElement === text;\n } catch (e) {}\n\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus()) return;\n } catch (e) {}\n }\n\n host.onFocus(e);\n if (useragent.isEdge) setTimeout(resetSelection);else resetSelection();\n });\n this.$focusScroll = false;\n\n this.focus = function () {\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\") return text.focus({\n preventScroll: true\n });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n } catch (e) {\n return;\n }\n\n var ancestors = [];\n\n if (isTransformed) {\n var t = text.parentElement;\n\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", true);\n if (!t.parentElement && t.getRootNode) t = t.getRootNode().host;else t = t.parentElement;\n }\n }\n\n text.focus({\n preventScroll: true\n });\n\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\") text.style.top = top;\n }, 0);\n };\n\n this.blur = function () {\n text.blur();\n };\n\n this.isFocused = function () {\n return isFocused;\n };\n\n host.on(\"beforeEndOperation\", function () {\n if (host.curOp && host.curOp.command.name == \"insertstring\") return;\n\n if (inComposition) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n\n resetSelection();\n });\n var resetSelection = isIOS ? function (value) {\n if (!isFocused || copied && !value || sendingText) return;\n if (!value) value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value) text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } : function () {\n if (inComposition || sendingText) return;\n if (!isFocused && !afterContextMenu) return;\n inComposition = true;\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n var selectionStart = range.start.column;\n var selectionEnd = range.end.column;\n var line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n } else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n } else {\n line = \"\\n\";\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n\n var newValue = line + \"\\n\\n\";\n\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n\n if (lastSelectionEnd != selectionEnd || lastSelectionStart != selectionStart || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } catch (e) {}\n }\n\n inComposition = false;\n };\n if (isFocused) host.onFocus();\n\n var isAllSelected = function isAllSelected(text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length && text.value === lastValue && lastValue && text.selectionEnd !== lastSelectionEnd;\n };\n\n var onSelect = function onSelect(e) {\n if (inComposition) return;\n\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n };\n\n var inputHandler = null;\n\n this.setInputHandler = function (cb) {\n inputHandler = cb;\n };\n\n this.getInputHandler = function () {\n return inputHandler;\n };\n\n var afterContextMenu = false;\n\n var sendText = function sendText(value, fromInput) {\n if (afterContextMenu) afterContextMenu = false;\n\n if (pasted) {\n resetSelection();\n if (value) host.onPaste(value);\n pasted = false;\n return \"\";\n } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n\n inserted = inserted.slice(i);\n i = 1;\n\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) return \"\";\n sendingText = true;\n\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return inserted;\n }\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return onCompositionUpdate();\n\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted)) resetSelection();\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch (e) {\n if (!forceIEMime) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled()) return;\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if (useragent.isMac && !e.metaKey || !e.ctrlKey) return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n\n case 86:\n onPaste(e);\n break;\n\n case 88:\n onCut(e);\n break;\n }\n });\n }\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n if (commandMode) return;\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n\n if (inComposition.useTextareaForIME) {\n text.value = \"\";\n lastValue = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n } else {\n if (text.msGetInputContext) inComposition.context = text.msGetInputContext();\n if (text.getInputContext) inComposition.context = text.getInputContext();\n }\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n if (commandMode) return cancelComposition();\n\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n } else {\n var data = text.value;\n sendText(data);\n\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart = inComposition.context.compositionStartOffset;\n }\n\n inComposition.markerRange.end.column = inComposition.markerRange.start.column + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition) lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n\n syncComposition();\n }\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate);\n event.addListener(text, \"keyup\", onKeyup);\n event.addListener(text, \"keydown\", syncComposition);\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function () {\n return text;\n };\n\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n\n this.setReadOnly = function (readOnly) {\n if (!commandMode) text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function (value) {};\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\") + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n\n var move = function move(e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n if (isIOS) addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n\n var detectArrowKeys = function detectArrowKeys(e) {\n if (document.activeElement !== text) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (selectionStart < lastSelectionStart || selectionStart == lastSelectionStart && lastSelectionEnd != lastSelectionStart && selectionStart == selectionEnd) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (selectionEnd > lastSelectionEnd || selectionEnd == lastSelectionEnd && lastSelectionEnd != lastSelectionStart && selectionStart == selectionEnd) {\n key = KEYS.right;\n }\n\n if (selectionStart !== selectionEnd) modifier |= MODS.shift;\n\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command) host.execCommand(command);\n }\n\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n };\n\n exports.TextInput = TextInput;\n});\nace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var useragent = require(\"../lib/useragent\");\n\n var DRAG_OFFSET = 0; // pixels\n\n var SCROLL_COOLDOWN_T = 550; // milliseconds\n\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n\n (function () {\n this.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos);\n\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla) ev.preventDefault();\n }\n\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) return;\n if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos);else if (!waitForClickSelection) editor.selection.moveToPosition(pos);\n if (!waitForClickSelection) this.select();\n\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.select = function () {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function (unitName) {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n\n this.select();\n };\n\n this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function (ev) {\n if (ev.getAccelKey()) return;\n\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n\n var editor = this.editor;\n if (!this.$lastScroll) this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n } else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n }).call(DefaultHandlers.prototype);\n exports.DefaultHandlers = DefaultHandlers;\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n function calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column;else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4;else var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0) return {\n cursor: range.start,\n anchor: range.end\n };else return {\n cursor: range.end,\n anchor: range.start\n };\n }\n});\nace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n\n (function () {\n this.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n\n this.getElement = function () {\n return this.$element || this.$init();\n };\n\n this.setText = function (text) {\n this.getElement().textContent = text;\n };\n\n this.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n\n this.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n\n this.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n\n this.show = function (text, x, y) {\n if (text != null) this.setText(text);\n if (x != null && y != null) this.setPosition(x, y);\n\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function () {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n\n this.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n\n this.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function () {\n this.isOpen = false;\n\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n }).call(Tooltip.prototype);\n exports.Tooltip = Tooltip;\n});\nace.define(\"ace/mouse/default_gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event\", \"ace/tooltip\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var oop = require(\"../lib/oop\");\n\n var event = require(\"../lib/event\");\n\n var Tooltip = require(\"../tooltip\").Tooltip;\n\n function GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0) return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\") return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey()) selection.selectTo(row, 0);else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation) return hideTooltip();\n var maxRow = editor.session.getLength();\n\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation) return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n\n editor._signal(\"showGutterTooltip\", tooltip);\n\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout);\n\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n\n editor._signal(\"hideGutterTooltip\", tooltip);\n\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\")) return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed) showTooltip();else hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n editor.on(\"changeSession\", hideTooltip);\n }\n\n function GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n }\n\n oop.inherits(GutterTooltip, Tooltip);\n (function () {\n this.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n\n if (x + width > windowWidth) {\n x -= x + width - windowWidth;\n }\n\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n }).call(GutterTooltip.prototype);\n exports.GutterHandler = GutterHandler;\n});\nace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n };\n\n (function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n\n this.getDocumentPosition = function () {\n if (this.$pos) return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n\n this.inSelection = function () {\n if (this.$inSelection !== null) return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty()) this.$inSelection = false;else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n\n this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n\n this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\n }).call(MouseEvent.prototype);\n});\nace.define(\"ace/mouse/dragdrop_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var AUTOSCROLL_DELAY = 200;\n var SCROLL_CURSOR_DELAY = 200;\n var SCROLL_CURSOR_HYSTERESIS = 5;\n\n function DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera) blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor,\n counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\") editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n\n if (onMouseMoveTimer !== null) onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function (e) {\n counter--;\n\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function (e) {\n if (!dragCursor) return;\n var dataTransfer = e.dataTransfer;\n\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n\n break;\n\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {\n x: x,\n y: y\n };\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {\n row: cursor.row,\n column: cursor.column\n };\n\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += offsets.x.left < offsets.x.right ? -3 : +2;\n }\n\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += offsets.y.top < offsets.y.bottom ? -1 : +1;\n }\n\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n\n if (vScroll || hScroll && !vMovement) {\n if (!autoScrollStartTime) autoScrollStartTime = now;else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal) editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n\n var onMouseMoveTimer = null;\n\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"move\";else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";\n return dropEffect;\n }\n }\n\n (function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay()) this.startDrag();\n };\n\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3) target.dragDrop();\n }\n\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled) return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget) eventTarget.unselectable = \"on\";\n\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n }).call(DragdropHandler.prototype);\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n exports.DragdropHandler = DragdropHandler;\n});\nace.define(\"ace/mouse/touch_handler\", [\"require\", \"exports\", \"module\", \"ace/mouse/mouse_event\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var MouseEvent = require(\"./mouse_event\").MouseEvent;\n\n var dom = require(\"../lib/dom\");\n\n exports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n\n var updateMenu = function updateMenu() {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\", !selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"selectall\"\n }, \"Select All\"], selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"copy\"\n }, \"Copy\"], selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"cut\"\n }, \"Cut\"], clipboard && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"paste\"\n }, \"Paste\"], hasUndo && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"undo\"\n }, \"Undo\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"find\"\n }, \"Find\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"openCommandPallete\"\n }, \"Pallete\"]] : [\"span\"]), contextMenu.firstChild);\n };\n\n var handleClick = function handleClick(e) {\n var action = e.target.getAttribute(\"action\");\n\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n } else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard) clipboard.writeText(editor.getCopyText());else document.execCommand(\"copy\");\n }\n\n editor.execCommand(action);\n }\n\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\") editor.focus();\n };\n\n contextMenu = dom.buildDom([\"div\", {\n class: \"ace_mobile-menu\",\n ontouchstart: function ontouchstart(e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function ontouchend(e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n }, [\"span\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"more\"\n }, \"...\"]], editor.container);\n }\n\n function showContextMenu() {\n if (!contextMenu) createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n contextMenu.style.right = \"10px\";\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n\n function hideContextMenu(e) {\n if (contextMenu) contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n\n mode = \"wait\";\n showContextMenu();\n }\n\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2 ? editor.selection.getLineRange(pos.row) : editor.session.getBracketRange(pos);\n\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n } else {\n editor.selection.selectWord();\n }\n\n mode = \"wait\";\n }\n\n el.addEventListener(\"contextmenu\", function (e) {\n if (!pressed) return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n });\n el.addEventListener(\"touchstart\", function (e) {\n var touches = e.touches;\n\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h) touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n\n var weightedDistance = function weightedDistance(x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left, e.clientY - rect.top - cursorPos.top);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left, e.clientY - rect.top - anchorPos.top);\n if (diff1 < 3.5 && diff2 < 3.5) mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5) mode = \"anchor\";else if (diff1 < 3.5) mode = \"cursor\";else mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n\n touchStartT = t;\n });\n el.addEventListener(\"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n e.preventDefault();\n hideContextMenu();\n } else {\n showContextMenu();\n }\n\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n });\n el.addEventListener(\"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\") return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4) mode = \"cursor\";else return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) wheelY = 0;\n\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n\n editor._emit(\"mousewheel\", mouseEvent);\n\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n } else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\") editor.selection.moveCursorToPosition(pos);else if (mode == \"anchor\") editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n });\n\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n\n if (Math.abs(vX) < 0.01) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop()) animationSteps = 0;\n }, 10);\n }\n };\n});\nace.define(\"ace/lib/net\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"./dom\");\n\n exports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send(null);\n };\n\n exports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort) callback();\n }\n };\n };\n\n exports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n };\n});\nace.define(\"ace/lib/event_emitter\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var EventEmitter = {};\n\n var stopPropagation = function stopPropagation() {\n this.propagationStopped = true;\n };\n\n var preventDefault = function preventDefault() {\n this.defaultPrevented = true;\n };\n\n EventEmitter._emit = EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler) return;\n if (typeof e != \"object\" || !e) e = {};\n if (!e.type) e.type = eventName;\n if (!e.stopPropagation) e.stopPropagation = stopPropagation;\n if (!e.preventDefault) e.preventDefault = preventDefault;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped) break;\n }\n\n if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this);\n };\n\n EventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners) return;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n }\n };\n\n EventEmitter.once = function (eventName, callback) {\n var _self = this;\n\n this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n\n callback.apply(null, arguments);\n });\n\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n };\n\n EventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) handlers = this._defaultHandlers = {\n _disabled_: {}\n };\n\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled) handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n\n handlers[eventName] = callback;\n };\n\n EventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) return;\n var disabled = handlers._disabled_[eventName];\n\n if (handlers[eventName] == callback) {\n if (disabled) this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n };\n\n EventEmitter.on = EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1) listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\n\n EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) return;\n var index = listeners.indexOf(callback);\n if (index !== -1) listeners.splice(index, 1);\n };\n\n EventEmitter.removeAllListeners = function (eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n };\n\n exports.EventEmitter = EventEmitter;\n});\nace.define(\"ace/lib/app_config\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"no use strict\";\n\n var oop = require(\"./oop\");\n\n var EventEmitter = require(\"./event_emitter\").EventEmitter;\n\n var optionsProvider = {\n setOptions: function setOptions(optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function getOptions(optionNames) {\n var result = {};\n\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function setOption(name, value) {\n if (this[\"$\" + name] === value) return;\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet) this[\"$\" + name] = value;\n if (opt && opt.set) opt.set.call(this, value);\n },\n getOption: function getOption(name) {\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n };\n\n function warn(message) {\n if (typeof console != \"undefined\" && console.warn) console.warn.apply(console, arguments);\n }\n\n function reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error) console.error(e);\n setTimeout(function () {\n throw e;\n });\n }\n\n var AppConfig = function AppConfig() {\n this.$defaultOptions = {};\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.defineOptions = function (obj, path, options) {\n if (!obj.$options) this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\") opt = {\n forwardTo: opt\n };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt) obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n\n this.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt) obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions) {\n if (this.$defaultOptions[path][name]) break;\n }\n\n if (!this.$defaultOptions[path][name]) return false;\n }\n\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n\n if (opts[name]) {\n if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value);else opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n\n this.warn = warn;\n this.reportError = reportError;\n }).call(AppConfig.prototype);\n exports.AppConfig = AppConfig;\n});\nace.define(\"ace/config\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/app_config\"], function (require, exports, module) {\n \"no use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var net = require(\"./lib/net\");\n\n var AppConfig = require(\"./lib/app_config\").AppConfig;\n\n module.exports = exports = new AppConfig();\n\n var global = function () {\n return this || typeof window != \"undefined\" && window;\n }();\n\n var options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false\n };\n\n exports.get = function (key) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n return options[key];\n };\n\n exports.set = function (key, value) {\n if (options.hasOwnProperty(key)) options[key] = value;else if (this.setDefaultValue(\"\", key, value) == false) throw new Error(\"Unknown config key: \" + key);\n };\n\n exports.all = function () {\n return lang.copyObject(options);\n };\n\n exports.$modes = {};\n\n exports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name]) return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n\n if (path && path.slice(-1) != \"/\") path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n };\n\n exports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n };\n\n exports.$loading = {};\n\n exports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n\n if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module);\n if (!exports.$loading[moduleName]) exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1) return;\n\n var afterLoad = function afterLoad() {\n require([moduleName], function (module) {\n exports._emit(\"load.module\", {\n name: moduleName,\n module: module\n });\n\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\")) return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n\n _reportErrorIfPathIsNotConfigured();\n };\n\n var _reportErrorIfPathIsNotConfigured = function reportErrorIfPathIsNotConfigured() {\n if (!options.basePath && !options.workerPath && !options.modePath && !options.themePath && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n\n _reportErrorIfPathIsNotConfigured = function reportErrorIfPathIsNotConfigured() {};\n }\n };\n\n init(true);\n\n function init(packaged) {\n if (!global || !global.document) return;\n options.packaged = packaged || require.packaged || module.packaged || global.define && define.packaged;\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = document.currentScript || document._currentScript; // native or polyfill\n\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n var scripts = currentDocument.getElementsByTagName(\"script\");\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n var src = script.src || script.getAttribute(\"src\");\n if (!src) continue;\n var attributes = script.attributes;\n\n for (var j = 0, l = attributes.length; j < l; j++) {\n var attr = attributes[j];\n\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m) scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions) {\n if (typeof scriptOptions[key] !== \"undefined\") exports.set(key, scriptOptions[key]);\n }\n }\n\n exports.init = init;\n\n function deHyphenate(str) {\n return str.replace(/-(.)/g, function (m, m1) {\n return m1.toUpperCase();\n });\n }\n\n exports.version = \"1.4.7\";\n});\nace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/mouse/touch_handler\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\n\n var DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\n\n var MouseEvent = require(\"./mouse_event\").MouseEvent;\n\n var DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\n\n var addTouchListeners = require(\"./touch_handler\").addTouchListeners;\n\n var config = require(\"../config\");\n\n var MouseHandler = function MouseHandler(editor) {\n var _self = this;\n\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function focusEditor(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred) window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([mouseTarget, editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, editor.textInput && editor.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n };\n\n (function () {\n this.onMouseEvent = function (name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length) return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function (state) {\n this.state = state;\n };\n\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n\n var onMouseMove = function onMouseMove(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function onCaptureEnd(e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor) renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n\n var onCaptureInterval = function onCaptureInterval() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () {\n onCaptureEnd(ev);\n });\n }\n\n var onOperationEnd = function onOperationEnd(e) {\n if (!self.releaseMouse) return;\n\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({\n command: {\n name: \"mouse\"\n }\n });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n\n this.releaseMouse = null;\n\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\") return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent) event.stopEvent(e.domEvent);\n }.bind(this);\n\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n }).call(MouseHandler.prototype);\n config.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: useragent.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: true\n },\n focusTimeout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: true\n }\n });\n exports.MouseHandler = MouseHandler;\n});\nace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n\n if (fold) {\n if (e.getAccelKey()) session.removeFold(fold);else session.expandFold(fold);\n e.stop();\n }\n\n var target = e.domEvent && e.domEvent.target;\n\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused()) editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({\n row: range.start.row,\n column: 0\n });\n }\n }\n\n e.stop();\n }\n });\n }\n\n exports.FoldHandler = FoldHandler;\n});\nace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n\n var event = require(\"../lib/event\");\n\n var KeyBinding = function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = {\n editor: editor\n };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n };\n\n (function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb) return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) {\n this.removeKeyboardHandler(h[h.length - 1]);\n }\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb) return;\n if (typeof kb == \"function\" && !kb.handleKeyboard) kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1) this.$handlers.splice(i, 1);\n if (pos == undefined) this.$handlers.push(kb);else this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach) kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1) return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command) continue;\n\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n\n if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n\n if (success) break;\n }\n\n if (!success && hashId == -1) {\n toExecute = {\n command: \"insertstring\"\n };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n\n if (success && this.$editor._signal) this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n }).call(KeyBinding.prototype);\n exports.KeyBinding = KeyBinding;\n});\nace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var ArabicAlefBetIntervalsBegine = [\"\\u0621\", \"\\u0641\"];\n var ArabicAlefBetIntervalsEnd = [\"\\u063A\", \"\\u064A\"];\n var dir = 0,\n hiLevel = 0;\n var lastArabic = false,\n hasUBAT_AL = false,\n hasUBAT_B = false,\n hasUBAT_S = false,\n hasBlockSep = false,\n hasSegSep = false;\n var impTab_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]];\n var impTab_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]];\n var LTR = 0,\n RTL = 1;\n var L = 0;\n var R = 1;\n var EN = 2;\n var AN = 3;\n var ON = 4;\n var B = 5;\n var S = 6;\n var AL = 7;\n var WS = 8;\n var CS = 9;\n var ES = 10;\n var ET = 11;\n var NSM = 12;\n var LRE = 13;\n var RLE = 14;\n var PDF = 15;\n var LRO = 16;\n var RLO = 17;\n var BN = 18;\n var UnicodeTBL00 = [BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON];\n var UnicodeTBL20 = [WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS];\n\n function _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR,\n prevState = null,\n newClass = null,\n newLevel = null,\n newState = 0,\n action = null,\n cond = null,\n condPos = -1,\n i = null,\n ix = null,\n classes = [];\n\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n\n cond = impTab[newState][6];\n\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n\n condPos = -1;\n }\n }\n\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n\n hiLevel |= newLevel;\n }\n\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n } else {\n break;\n }\n }\n }\n }\n }\n }\n\n function _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n\n return;\n }\n\n var len = _array.length,\n start = 0,\n end,\n lo,\n hi,\n tmp;\n\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n\n while (end < len && levels[end] >= lev) {\n end++;\n }\n\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n\n start = end;\n }\n\n start++;\n }\n }\n\n function _getCharClass(chars, types, classes, ix) {\n var cType = types[ix],\n wType,\n nType,\n len,\n i;\n\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n\n case ON:\n case AN:\n return cType;\n\n case EN:\n return lastArabic ? AN : EN;\n\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n\n case WS:\n return ON;\n\n case CS:\n if (ix < 1 || ix + 1 >= types.length || (wType = classes[ix - 1]) != EN && wType != AN || (nType = types[ix + 1]) != EN && nType != AN) {\n return ON;\n }\n\n if (lastArabic) {\n nType = AN;\n }\n\n return nType == wType ? nType : ON;\n\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n\n if (wType == EN && ix + 1 < types.length && types[ix + 1] == EN) {\n return EN;\n }\n\n return ON;\n\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n\n if (lastArabic) {\n return ON;\n }\n\n i = ix + 1;\n len = types.length;\n\n while (i < len && types[i] == ET) {\n i++;\n }\n\n if (i < len && types[i] == EN) {\n return EN;\n }\n\n return ON;\n\n case NSM:\n len = types.length;\n i = ix + 1;\n\n while (i < len && types[i] == NSM) {\n i++;\n }\n\n if (i < len) {\n var c = chars[ix],\n rtlCandidate = c >= 0x0591 && c <= 0x08FF || c == 0xFB1E;\n wType = types[i];\n\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n\n return classes[ix - 1];\n\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n\n case S:\n hasUBAT_S = true;\n return ON;\n\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n\n case BN:\n return ON;\n }\n }\n\n function _getCharacterType(ch) {\n var uc = ch.charCodeAt(0),\n hi = uc >> 8;\n\n if (hi == 0) {\n return uc > 0x00BF ? L : UnicodeTBL00[uc];\n } else if (hi == 5) {\n return /[\\u0591-\\u05f4]/.test(ch) ? R : L;\n } else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch)) return NSM;else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch)) return AN;else if (uc == 0x066A) return ET;else if (/[\\u06f0-\\u06f9]/.test(ch)) return EN;else return AL;\n } else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n } else if (hi == 0xFE) {\n return uc >= 0xFE70 ? AL : ON;\n }\n\n return ON;\n }\n\n function _isArabicDiacritics(ch) {\n return ch >= \"\\u064B\" && ch <= \"\\u0655\";\n }\n\n exports.L = L;\n exports.R = R;\n exports.EN = EN;\n exports.ON_R = 3;\n exports.AN = 4;\n exports.R_H = 5;\n exports.B = 6;\n exports.RLE = 7;\n exports.DOT = \"\\xB7\";\n\n exports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2) return {};\n var chars = text.split(\"\"),\n logicalFromVisual = new Array(chars.length),\n bidiLevels = new Array(chars.length),\n levels = [];\n dir = isRtl ? RTL : LTR;\n\n _computeLevels(chars, levels, chars.length, textCharTypes);\n\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) {\n ;\n }\n\n _invertLevel(2, levels, logicalFromVisual);\n\n _invertLevel(1, levels, logicalFromVisual);\n\n for (var i = 0; i < logicalFromVisual.length - 1; i++) {\n //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n } else if (levels[i] === R && (textCharTypes[i] > AL && textCharTypes[i] < LRE || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n } else if (i > 0 && chars[i - 1] === \"\\u0644\" && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n\n if (chars[chars.length - 1] === exports.DOT) levels[chars.length - 1] = exports.B;\n if (chars[0] === \"\\u202B\") levels[0] = exports.RLE;\n\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n\n return {\n 'logicalFromVisual': logicalFromVisual,\n 'bidiLevels': bidiLevels\n };\n };\n\n exports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) ret = true;\n }\n\n return ret;\n };\n\n exports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx) return i;\n }\n\n return 0;\n };\n});\nace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var bidiUtil = require(\"./lib/bidiutil\");\n\n var lang = require(\"./lib/lang\");\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\n\n var BidiHandler = function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n };\n\n (function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi) return false;\n\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0) docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var currentIndex,\n prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex) break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined) docRow = this.getDocumentRow();\n var isLastRow = docRow === this.session.getLength() - 1,\n endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n\n if (splits) {\n if (splitIndex === undefined) splitIndex = this.getSplitIndex();\n\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = splitIndex < splits.length ? this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n\n if (splitIndex == splits.length) this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n } else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n\n var session = this.session,\n shift = 0,\n size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = ch === '\\t' ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n\n return ch;\n });\n\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = this.line.charAt(this.line.length - 1) == bidiUtil.DOT ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n\n this.updateBidiMap = function () {\n var textCharTypes = [];\n\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n\n this.markAsDirty = function () {\n this.currentRow = null;\n };\n\n this.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width) return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05D4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n\n this.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function (row) {\n if (this.$isRtl) return true;\n if (row != undefined) return this.session.getLine(row).charAt(0) == this.RLE;else return this.isRtlDir;\n };\n\n this.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) editor.session.doc.removeInLine(row, 0, 1);else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) editor.session.doc.insert({\n column: 0,\n row: row\n }, editor.session.$bidiHandler.RLE);\n }\n };\n\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = this.line.charAt(0) === this.RLE ? 1 : 0;\n var logicalIdx = col > leftBoundary ? this.session.getOverwrite() ? col : col - 1 : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n levels = this.bidiMap.bidiLevels,\n left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && col > leftBoundary && levels[visualIdx] % 2 === 0) left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) left += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n if (this.isRtlDir) left += this.rtlLineOffset;\n return left;\n };\n\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap,\n levels = map.bidiLevels,\n level,\n selections = [],\n offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent,\n selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false,\n isSelectedPrev = false,\n selectionStart = 0;\n if (this.wrapIndent) offset += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = logIdx >= selColMin && logIdx < selColMax;\n\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && visIdx === levels.length) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n\n return selections;\n };\n\n this.offsetToCol = function (posX) {\n if (this.isRtlDir) posX -= this.rtlLineOffset;\n var logicalIdx = 0,\n posX = Math.max(posX, 0),\n offset = 0,\n visualIdx = 0,\n levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) posX -= this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && levels[visualIdx] % 2 === 0) {\n if (posX < offset) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n } else if (visualIdx > 0 && levels[visualIdx - 1] % 2 === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + (posX > offset ? this.bidiMap.logicalFromVisual[visualIdx] : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n } else if (this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && levels[visualIdx - 1] % 2 === 0 || !this.isRtlDir && visualIdx === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && charWidth !== 0) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir) logicalIdx++;\n return logicalIdx + this.wrapIndent;\n };\n }).call(BidiHandler.prototype);\n exports.BidiHandler = BidiHandler;\n});\nace.define(\"ace/selection\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var lang = require(\"./lib/lang\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Range = require(\"./range\").Range;\n\n var Selection = function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent) self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent) self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent) self._emit(\"changeSelection\");\n });\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n };\n\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n\n this.setSelectionAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n\n this.getAnchor = this.getSelectionAnchor = function () {\n if (this.$isEmpty) return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n\n this.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return anchor.row > lead.row || anchor.row == lead.row && anchor.column > lead.column;\n };\n\n this.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty) return Range.fromPoints(lead, lead);\n return this.isBackwards() ? Range.fromPoints(lead, anchor) : Range.fromPoints(anchor, lead);\n };\n\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n\n this.setRange = this.setSelectionRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n\n this.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged) this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) this._emit(\"changeSelection\");\n };\n\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n\n this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n\n this.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n\n return this.session.getWordRange(row, column);\n };\n\n this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n\n if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);else return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n\n this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n\n this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n\n this.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n } else {\n var tabSize = this.session.getTabSize();\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n\n this.moveCursorRight = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n } else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n } else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n\n this.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n\n this.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0) lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n\n this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n\n this.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1) this.moveCursorWordRight();\n return;\n }\n\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0) this.moveCursorWordLeft();\n return;\n }\n\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0,\n ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index > 2) break;\n }\n }\n }\n }\n }\n\n tokenRe.lastIndex = 0;\n return index;\n };\n\n this.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor)) rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line)) line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordRight();else this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();\n };\n\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn) screenPos.column = this.$desiredColumn;else this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0) docPos.row++;\n }\n }\n\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n\n this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n\n this.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1) column = column - 1;else column = column + 1;\n }\n\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn) this.$desiredColumn = null;\n };\n\n this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function (range) {\n var r = this.getRange();\n\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n\n this.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch (e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n\n return data;\n };\n\n this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards) r.cursor = r.start;\n this.addRange(r, true);\n }\n\n return;\n } else {\n data = data[0];\n }\n }\n\n if (this.rangeList) this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false;\n if (!data.length || !this.ranges) return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i])) return false;\n }\n\n return true;\n };\n }).call(Selection.prototype);\n exports.Selection = Selection;\n});\nace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var config = require(\"./config\");\n\n var MAX_TOKEN_COUNT = 2000;\n\n var Tokenizer = function Tokenizer(rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {\n defaultToken: \"text\"\n };\n var flag = \"g\";\n var splitterRurles = [];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken) mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive) flag = \"gi\";\n if (rule.regex == null) continue;\n if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1) rule.onMatch = this.$applyToken;else rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n\n if (!rule.splitRegex && typeof rule.token != \"string\") splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch) rule.onMatch = null;\n }\n\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n };\n\n (function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n\n this.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\") return [{\n type: types,\n value: str\n }];\n var tokens = [];\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i]) tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n\n return tokens;\n };\n\n this.$arrayTokens = function (str) {\n if (!str) return [];\n var values = this.splitRegex.exec(str);\n if (!values) return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1]) tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n\n return tokens;\n };\n\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g, function (x, y) {\n return y ? \"(?:\" : x;\n });\n return r;\n };\n\n this.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n\n stack--;\n } else if (parenOpen) {\n stack++;\n\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n\n this.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match,\n tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = {\n type: null,\n value: \"\"\n };\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: skipped\n };\n }\n }\n\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined) continue;\n rule = state[mapping[i]];\n if (rule.onMatch) type = rule.onMatch(value, currentState, stack, line);else type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n\n state = this.states[currentState];\n\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n\n if (rule.consumeLineEnd) lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: value\n };\n }\n } else if (type) {\n if (token.type) tokens.push(token);\n token = {\n type: null,\n value: \"\"\n };\n\n for (var i = 0; i < type.length; i++) {\n tokens.push(type[i]);\n }\n }\n }\n\n if (lastIndex == line.length) break;\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n\n while (lastIndex < line.length) {\n if (token.type) tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type) tokens.push(token);\n\n if (stack.length > 1) {\n if (stack[0] !== currentState) stack.unshift(\"#tmp\", currentState);\n }\n\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n\n this.reportError = config.reportError;\n }).call(Tokenizer.prototype);\n exports.Tokenizer = Tokenizer;\n});\nace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"../lib/lang\");\n\n var TextHighlightRules = function TextHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n };\n\n (function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules) {\n this.$rules[key] = rules[key];\n }\n\n return;\n }\n\n for (var key in rules) {\n var state = rules[key];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next;\n }\n\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState;\n }\n }\n\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function () {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\" ? new HighlightRules().getRules() : HighlightRules;\n\n if (states) {\n for (var i = 0; i < states.length; i++) {\n states[i] = prefix + states[i];\n }\n } else {\n states = [];\n\n for (var key in embedRules) {\n states.push(prefix + key);\n }\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n\n for (var i = 0; i < states.length; i++) {\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n }\n\n if (!this.$embeds) this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function () {\n return this.$embeds;\n };\n\n var pushState = function pushState(currentState, stack) {\n if (currentState != \"start\" || stack.length) stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n\n var popState = function popState(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next) rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n\n var next = rule.next || rule.push;\n\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\") stateName = stateName[0] || \"\";\n if (rules[stateName]) stateName += id++;\n }\n\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n\n if (includeName) {\n if (Array.isArray(includeName)) toInsert = includeName.map(function (x) {\n return rules[x];\n });else toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape) args = args.filter(function (x) {\n return !x.next;\n });\n state.splice.apply(state, args);\n i--;\n }\n\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n if (ignoreCase) a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n\n for (var i = list.length; i--;) {\n keywords[list[i]] = className;\n }\n });\n\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase ? function (value) {\n return keywords[value.toLowerCase()] || defaultToken;\n } : function (value) {\n return keywords[value] || defaultToken;\n };\n };\n\n this.getKeywords = function () {\n return this.$keywords;\n };\n }).call(TextHighlightRules.prototype);\n exports.TextHighlightRules = TextHighlightRules;\n});\nace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var Behaviour = function Behaviour() {\n this.$behaviours = {};\n };\n\n (function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n\n this.$behaviours[name][action] = callback;\n };\n\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n\n this.addBehaviours(behaviours);\n };\n\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n\n return ret;\n }\n };\n }).call(Behaviour.prototype);\n exports.Behaviour = Behaviour;\n});\nace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var TokenIterator = function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n };\n\n (function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount) rowCount = this.$session.getLength();\n\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n\n this.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined) return column;\n column = 0;\n\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n\n return column;\n };\n\n this.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\n };\n\n this.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n }).call(TokenIterator.prototype);\n exports.TokenIterator = TokenIterator;\n});\nace.define(\"ace/mode/behaviour/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Behaviour = require(\"../behaviour\").Behaviour;\n\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n var lang = require(\"../../lib/lang\");\n\n var SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\n var SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n var context;\n var contextCache = {};\n var defaultQuotes = {\n '\"': '\"',\n \"'\": \"'\"\n };\n\n var initContext = function initContext(editor) {\n var id = -1;\n\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {\n rangeCount: editor.multiSelect.rangeCount\n };\n }\n\n if (contextCache[id]) return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n };\n\n var getWrapped = function getWrapped(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1)]\n };\n };\n\n var CstyleBehaviour = function CstyleBehaviour(options) {\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n }, '}');\n if (!openBracePos) return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type)) return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type)) pair = false;\n } else {\n if (stringBefore && !stringAfter) return null; // wrap string with different quote\n\n if (stringBefore && stringAfter) return null; // do not pair quotes inside strings\n\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter) return null; // before or after alphanumeric\n\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing\n\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) return null;\n pair = true;\n }\n\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n };\n\n CstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) return false;\n }\n\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n };\n\n CstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n };\n\n CstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n };\n\n CstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n };\n\n CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd;\n };\n\n CstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n };\n\n CstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n };\n\n CstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n };\n\n oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n});\nace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\n var code = 0;\n var str = [];\n\n for (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1]) str.push(45, code += wordChars[i + 1]);\n }\n\n exports.wordChars = String.fromCharCode.apply(null, str);\n});\nace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"ace/config\", \"ace/tokenizer\", \"ace/mode/text_highlight_rules\", \"ace/mode/behaviour/cstyle\", \"ace/unicode\", \"ace/lib/lang\", \"ace/token_iterator\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var config = require(\"../config\");\n\n var Tokenizer = require(\"../tokenizer\").Tokenizer;\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\n var unicode = require(\"../unicode\");\n\n var lang = require(\"../lib/lang\");\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n var Range = require(\"../range\").Range;\n\n var Mode = function Mode() {\n this.HighlightRules = TextHighlightRules;\n };\n\n (function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment) return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function comment(line, i) {\n if (testRemove(line, i)) return;\n\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({\n row: i,\n column: line.length\n }, lineCommentEnd);\n doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var uncomment = function uncomment(line, i) {\n var m;\n if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function testRemove(line, row) {\n if (regexpStart.test(line)) return true;\n var tokens = session.getTokens(row);\n\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\") return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function uncomment(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length,\n end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \") end--;\n doc.removeInLine(i, start, end);\n };\n\n var commentWithSpace = lineCommentStart + \" \";\n\n var comment = function comment(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({\n row: i,\n column: minIndent\n }, commentWithSpace);else doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var testRemove = function testRemove(line, i) {\n return regexpStart.test(line);\n };\n\n var shouldInsertSpace = function shouldInsertSpace(line, before, after) {\n var spaces = 0;\n\n while (before-- && line.charAt(before) == \" \") {\n spaces++;\n }\n\n if (spaces % tabSize != 0) return false;\n var spaces = 0;\n\n while (line.charAt(after++) == \" \") {\n spaces++;\n }\n\n if (tabSize > 2) return spaces % tabSize != tabSize - 1;else return spaces % tabSize == 0;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++) {\n fun(doc.getLine(i), i);\n }\n }\n\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n\n if (indent !== -1) {\n if (indent < minIndent) minIndent = indent;\n if (shouldRemove && !testRemove(line, i)) shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment) return;\n if (!comment.start && comment[0]) comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n\n token = iterator.stepForward();\n }\n\n if (endRange) session.remove(endRange);\n\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n\n if (initialRange.start.row == startRow) initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow) initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n\n this.autoOutdent = function (state, doc, row) {};\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function (session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode) config.$modes[id] = mode = new Mode();\n if (!config.$modes[i]) config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n })(this);\n }\n };\n\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode) return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n\n state = state[0] || \"start\";\n }\n\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n var split = state.split(this.$embeds[i]);\n\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n\n for (var rule in rules) {\n var ruleItr = rules[rule];\n\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex);\n } else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n\n this.completionKeywords = completionKeywords;\n }\n\n if (!append) return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n\n this.$createKeywordList = function () {\n if (!this.$highlightRules) this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n function throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n }\n\n function positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length;\n }\n\n function validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\") throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array)) throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end) throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end)) throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = end.column - (numRangeRows == 0 ? start.column : 0);\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, \"delta.range must match delta lines\");\n }\n\n exports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n\n break;\n\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n\n break;\n }\n };\n});\nace.define(\"ace/anchor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\") this.setPosition(row.row, row.column);else this.setPosition(row, column);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n\n this.getDocument = function () {\n return this.document;\n };\n\n this.$insertRight = false;\n\n this.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row) return;\n if (delta.start.row > this.row) return;\n var point = $getTransformedPoint(delta, {\n row: this.row,\n column: this.column\n }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n\n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return point1.row < point2.row || point1.row == point2.row && bColIsAfter;\n }\n\n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n\n this.setPosition = function (row, column, noClip) {\n var pos;\n\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column) return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n\n this.detach = function () {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n } else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n } else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0) pos.column = 0;\n return pos;\n };\n }).call(Anchor.prototype);\n});\nace.define(\"ace/document\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/apply_delta\", \"ace/lib/event_emitter\", \"ace/range\", \"ace/anchor\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var applyDelta = require(\"./apply_delta\").applyDelta;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Range = require(\"./range\").Range;\n\n var Anchor = require(\"./anchor\").Anchor;\n\n var Document = function Document(textOrLines) {\n this.$lines = [\"\"];\n\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({\n row: 0,\n column: 0\n }, textOrLines);\n } else {\n this.insert({\n row: 0,\n column: 0\n }, textOrLines);\n }\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({\n row: 0,\n column: 0\n }, text);\n };\n\n this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n\n case \"unix\":\n return \"\\n\";\n\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode) return;\n this.$newLineMode = newLineMode;\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n\n this.isNewLine = function (text) {\n return text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\";\n };\n\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n\n this.getLength = function () {\n return this.$lines.length;\n };\n\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n\n this.getLinesForRange = function (range) {\n var lines;\n\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column);\n }\n\n return lines;\n };\n\n this.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n\n this.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n\n this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n\n this.insert = function (position, text) {\n if (this.getLength() <= 1) this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n\n this.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n\n this.clippedPos = function (row, column) {\n var length = this.getLength();\n\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n\n var line = this.getLine(row);\n if (column == undefined) column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {\n row: row,\n column: column\n };\n };\n\n this.clonePos = function (pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n };\n\n this.pos = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipPosition = function (position) {\n var length = this.getLength();\n\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n\n return position;\n };\n\n this.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n\n this.insertMergedLines({\n row: row,\n column: column\n }, lines);\n };\n\n this.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n\n this.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n });\n return this.clonePos(start);\n };\n\n this.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n }, true);\n return this.clonePos(start);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = deleteFirstNewLine ? firstRow - 1 : firstRow;\n var startCol = deleteFirstNewLine ? this.getLine(startRow).length : 0;\n var endRow = deleteLastNewLine ? lastRow + 1 : lastRow;\n var endCol = deleteLastNewLine ? 0 : this.getLine(endRow).length;\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n\n this.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n\n this.replace = function (range, text) {\n if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty()) return range.start;\n if (text == this.getTextRange(range)) return range.end;\n this.remove(range);\n var end;\n\n if (text) {\n end = this.insert(range.start, text);\n } else {\n end = range.start;\n }\n\n return end;\n };\n\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n\n this.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n } else {\n applyDelta(this.$lines, delta, doNotValidate);\n\n this._signal(\"change\", delta);\n }\n };\n\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n\n this.revertDelta = function (delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: delta.action == \"insert\" ? \"remove\" : \"insert\",\n lines: delta.lines.slice()\n });\n };\n\n this.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0) return {\n row: i,\n column: index + lines[i].length + newlineLength\n };\n }\n\n return {\n row: l - 1,\n column: index + lines[l - 1].length + newlineLength\n };\n };\n\n this.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n\n for (var i = startRow || 0; i < row; ++i) {\n index += lines[i].length + newlineLength;\n }\n\n return index + pos.column;\n };\n }).call(Document.prototype);\n exports.Document = Document;\n});\nace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var BackgroundTokenizer = function BackgroundTokenizer(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n\n while (self.lines[currentLine]) {\n currentLine++;\n }\n\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n\n processedLines++;\n\n if (processedLines % 5 === 0 && new Date() - workerStart > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n\n self.currentLine = currentLine;\n if (endLine == -1) endLine = currentLine;\n if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine);\n };\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n\n this._signal(\"update\", {\n data: data\n });\n };\n\n this.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.scheduleStart = function () {\n if (!this.running) this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n\n this.stop = function () {\n if (this.running) clearTimeout(this.running);\n this.running = false;\n };\n\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n\n this.getState = function (row) {\n if (this.currentLine == row) this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1) this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n }).call(BackgroundTokenizer.prototype);\n exports.BackgroundTokenizer = BackgroundTokenizer;\n});\nace.define(\"ace/search_highlight\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var Range = require(\"./range\").Range;\n\n var SearchHighlight = function SearchHighlight(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n };\n\n (function () {\n this.MAX_RANGES = 500;\n\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\") return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp) return;\n var start = config.firstRow,\n end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j--;) {\n markerLayer.drawSingleLineMarker(html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n }).call(SearchHighlight.prototype);\n exports.SearchHighlight = SearchHighlight;\n});\nace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [folds];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n\n (function () {\n this.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n\n fold.foldLine = this;\n };\n\n this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp,\n stop,\n isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n\n if (stop || cmp === 0) {\n return;\n }\n\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function (row, column) {\n var fold, cmp;\n\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n\n return null;\n };\n\n this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold,\n folds;\n\n if (ret) {\n fold = ret.fold;\n\n if (ret.kind == \"inside\" && fold.start.column != column && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n\n if (i === 0) {\n this.start.column += len;\n }\n\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n\n if (!fold.sameRow) {\n return;\n }\n\n fold.end.column += len;\n }\n\n this.end.column += len;\n }\n }\n };\n\n this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\") return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n }).call(FoldLine.prototype);\n exports.FoldLine = FoldLine;\n});\nace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var comparePoints = Range.comparePoints;\n\n var RangeList = function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n };\n\n (function () {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0) continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || cmpStart === 0 && !excludeEdges) return i;\n return -i - 1;\n }\n\n return -i - 1;\n };\n\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;else endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function (list) {\n var removed = [];\n\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n\n return removed;\n };\n\n this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges.splice(i, 1);\n };\n\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0],\n range;\n\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0) continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n\n this.ranges = list;\n return removed;\n };\n\n this.contains = function (row, column) {\n return this.pointIndex({\n row: row,\n column: column\n }) >= 0;\n };\n\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges[i];\n };\n\n this.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return [];\n var startIndex = this.pointIndex({\n row: startRow,\n column: 0\n });\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({\n row: endRow,\n column: 0\n }, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;\n var clipped = [];\n\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n\n return clipped;\n };\n\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function (session) {\n if (this.session) this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n\n this.detach = function () {\n if (!this.session) return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow) break;\n }\n\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow) break;\n\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {} else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) r.end.column -= colDiff;\n }\n\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow) break;\n\n if (r.end.row < endRow && (startRow < r.end.row || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n } else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n } else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n } else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n\n if (r.start.row < endRow && (startRow < r.start.row || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n } else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n } else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n }).call(RangeList.prototype);\n exports.RangeList = RangeList;\n});\nace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range_list\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var RangeList = require(\"../range_list\").RangeList;\n\n var oop = require(\"../lib/oop\");\n\n var Fold = exports.Fold = function (range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n };\n\n oop.inherits(Fold, RangeList);\n (function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function (fold) {\n if (this.range.isEqual(fold)) return;\n consumeRange(fold, this.start);\n var row = fold.start.row,\n column = fold.start.column;\n\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold)) return afterStart.addSubFold(fold);else firstConsumed = 1;\n }\n\n var row = fold.range.end.row,\n column = fold.range.end.column;\n\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n if (cmp == 0) j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n }).call(Fold.prototype);\n\n function consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0) point.column -= anchor.column;\n }\n\n function consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n }\n\n function restorePoint(point, anchor) {\n if (point.row == 0) point.column += anchor.column;\n point.row += anchor.row;\n }\n\n function restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n }\n});\nace.define(\"ace/edit_session/folding\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/edit_session/fold_line\", \"ace/edit_session/fold\", \"ace/token_iterator\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var FoldLine = require(\"./fold_line\").FoldLine;\n\n var Fold = require(\"./fold\").Fold;\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n function Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) return null;\n var folds = foldLine.folds;\n\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n } else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n\n return folds[i];\n }\n }\n };\n\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n\n if (cmp == 2) {\n continue;\n } else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else if (cmp == 42) {\n break;\n }\n\n foundFolds.push(fold);\n }\n }\n\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n\n return folds;\n };\n\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n\n for (var i = 0; i < foldLines.length; i++) {\n for (var j = 0; j < foldLines[i].folds.length; j++) {\n folds.push(foldLines[i].folds[j]);\n }\n }\n\n return folds;\n };\n\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine) return null;\n var lastFold = {\n end: {\n column: 0\n }\n };\n var str, fold;\n\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n str = this.getLine(fold.start.row).substring(lastFold.end.column, fold.start.column);\n break;\n } else if (cmp === 0) {\n return null;\n }\n\n lastFold = fold;\n }\n\n if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1) return str.substring(0, column - lastFold.end.column);else if (trim == 1) return str.substring(column - lastFold.end.column);else return str;\n };\n\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n\n return null;\n };\n\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n\n return null;\n };\n\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData,\n rowCount = last - first + 1;\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n\n if (end >= last) {\n if (start < last) {\n if (start >= first) rowCount -= last - start;else rowCount = 0; // in one fold\n }\n\n break;\n } else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;else rowCount -= end - first + 1;\n }\n }\n\n return rowCount;\n };\n\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold) fold = placeholder;else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold) return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"add\"\n });\n\n return fold;\n };\n\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode) this.$updateWrapData(startRow, endRow);else this.$updateRowLengthCache(startRow, endRow);\n }\n\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"remove\"\n });\n };\n\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n\n fold.subFolds = [];\n };\n\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function (location, expandInner) {\n var range, folds;\n\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\") range = new Range(location, 0, location, this.getLine(location).length);else if (\"row\" in location) range = Range.fromPoints(location, location);else range = location;\n\n folds = this.getFoldsInRangeList(range);\n\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n\n if (folds.length) return folds;\n };\n\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null) startRow = foldLine.start.row;\n if (startColumn == null) startColumn = 0;\n if (endRow == null) endRow = foldLine.end.row;\n if (endColumn == null) endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow) return;\n\n if (row == startRow) {\n if (column < startColumn) return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n })) {\n if (range.comparePoint(bracketPos) == 1) range.end = bracketPos;else range.start = bracketPos;\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n\n if (!fold) fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4) return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\") type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n\n iterator.stepForward();\n }\n\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n iterator = new TokenIterator(this, row, column);\n\n if (dir != -1) {\n var lastRow = -1;\n\n do {\n token = iterator.stepForward();\n\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state)) lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n\n token = iterator.stepBackward();\n } else token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function (startRow, endRow, depth) {\n if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity\n\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets) return; // mode doesn't support folding\n\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\") continue;\n var range = this.getFoldWidgetRange(row);\n\n if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow) {\n row = range.end.row;\n\n try {\n var fold = this.addFold(\"...\", range);\n if (fold) fold.collapseChildren = depth;\n } catch (e) {}\n }\n }\n };\n\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style]) throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style) return;\n this.$foldStyle = style;\n if (style == \"manual\") this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode) return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n\n this._signal(\"changeAnnotation\");\n\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || ignoreCurrent && fw[row]) return {};\n var i = row - 1,\n firstRange;\n\n while (i >= 0) {\n var c = fw[i];\n if (c == null) c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange) firstRange = range;\n if (range && range.end.row >= row) break;\n }\n\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function (row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n\n if (!range) {\n var el = e.target || e.srcElement;\n if (el && /ace_fold-widget/.test(el.className)) el.className += \" ace_invalid\";\n }\n };\n\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget) return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all) this.removeFold(fold);else this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n\n return range;\n };\n\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range) return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n }\n\n exports.Folding = Folding;\n});\nace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n var Range = require(\"../range\").Range;\n\n function BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0) return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\") return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) return null;\n if (match[1]) return this.$findClosingBracket(match[1], position);else return this.$findOpeningBracket(match[2], position);\n };\n\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true,\n range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n\n if (!match) return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(pos, bracketPos);\n\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(bracketPos, pos);\n\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n\n range.cursor = range.start;\n }\n\n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n\n if (chr == openBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex -= 1;\n }\n\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n\n return null;\n };\n\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n\n if (chr == closingBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex += 1;\n }\n\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n valueIndex = 0;\n }\n\n return null;\n };\n }\n\n exports.BracketMatch = BracketMatch;\n});\nace.define(\"ace/edit_session\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/bidihandler\", \"ace/config\", \"ace/lib/event_emitter\", \"ace/selection\", \"ace/mode/text\", \"ace/range\", \"ace/document\", \"ace/background_tokenizer\", \"ace/search_highlight\", \"ace/edit_session/folding\", \"ace/edit_session/bracket_match\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var lang = require(\"./lib/lang\");\n\n var BidiHandler = require(\"./bidihandler\").BidiHandler;\n\n var config = require(\"./config\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Selection = require(\"./selection\").Selection;\n\n var TextMode = require(\"./mode/text\").Mode;\n\n var Range = require(\"./range\").Range;\n\n var Document = require(\"./document\").Document;\n\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\n\n var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\n var EditSession = function EditSession(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + ++EditSession.$uid;\n\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine) text = new Document(text);\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n\n config._signal(\"session\", this);\n };\n\n EditSession.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setDocument = function (doc) {\n if (this.doc) this.doc.removeListener(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n\n this.getDocument = function () {\n return this.doc;\n };\n\n this.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = low + hi >> 1;\n var c = cacheArray[mid];\n if (val > c) low = mid + 1;else if (val < c) hi = mid - 1;else return mid;\n }\n\n return low - 1;\n };\n\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer) this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n\n this._signal(\"change\", delta);\n };\n\n this.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n\n this.getValue = this.toString = function () {\n return this.doc.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n\n this.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token,\n c = 0;\n\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column) break;\n }\n }\n\n token = tokens[i];\n if (!token) return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n\n this.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager) this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n } else {\n this.$syncInformUndoManager = function () {};\n }\n };\n\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager) this.$syncInformUndoManager();\n };\n\n this.$defaultUndoManager = {\n undo: function undo() {},\n redo: function redo() {},\n hasUndo: function hasUndo() {},\n hasRedo: function hasRedo() {},\n reset: function reset() {},\n add: function add() {},\n addSelection: function addSelection() {},\n startNewGroup: function startNewGroup() {},\n addSession: function addSession() {}\n };\n\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n\n this.getTabSize = function () {\n return this.$tabSize;\n };\n\n this.isTabStop = function (position) {\n return this.$useSoftTabs && position.column % this.$tabSize === 0;\n };\n\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row]) this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n\n this.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.setBreakpoint = function (row, className) {\n if (className === undefined) className = \"ace_breakpoint\";\n if (className) this.$breakpoints[row] = className;else delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update) return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker) return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete markers[markerId];\n\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n\n this.$searchHighlight.setRegexp(re);\n };\n\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n\n if (!clazz) clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n\n this._signal(\"changeAnnotation\", {});\n };\n\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken) var re = this.tokenRe;else if (/^\\s+$/.test(line.slice(column - 1, column + 1))) var re = /\\s/;else var re = this.nonTokenRe;\n var start = column;\n\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n\n start++;\n }\n\n var end = column;\n\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n\n this.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n\n return wordRange;\n };\n\n this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n\n this.setUseWorker = function (useWorker) {\n this.setOption(\"useWorker\", useWorker);\n };\n\n this.getUseWorker = function () {\n return this.$useWorker;\n };\n\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n\n this.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer) return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n\n if (!this.$modes[\"ace/mode/text\"]) this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path) return cb && cb();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n\n this.$onChangeMode(m);\n }\n\n cb && cb();\n }.bind(this));\n if (!this.$mode) this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder) this.$modeId = mode.$id;\n if (this.$mode === mode) return;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker) this.$startWorker();\n var tokenizer = mode.getTokenizer();\n\n if (tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n\n var _self = this;\n\n this.bgTokenizer.addEventListener(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n if (!$isPlaceholder) {\n if (mode.attachToSession) mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n\n this.getMode = function () {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return;\n this.$scrollTop = scrollTop;\n\n this._signal(\"changeScrollTop\", scrollTop);\n };\n\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return;\n this.$scrollLeft = scrollLeft;\n\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n\n this.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width) width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len) break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine) longestScreenLine = cache[i];\n }\n\n this.screenWidth = longestScreenLine;\n }\n };\n\n this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n\n this.getLength = function () {\n return this.doc.getLength();\n };\n\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n\n this.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n } else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore) this.selection.fromJSON(deltas.selectionBefore);else this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n\n this.$fromUndo = false;\n };\n\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.applyDelta(delta);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter) this.selection.fromJSON(deltas.selectionAfter);else this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n\n this.$fromUndo = false;\n };\n\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n var lastDeltaIsInsert;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n continue;\n }\n\n if (isInsert(delta)) {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n\n point = delta.end;\n\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n\n lastDeltaIsInsert = false;\n }\n }\n\n return range;\n };\n\n this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n\n this.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff;\n }\n\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row) x.start.column += collDiff;\n if (x.end.row == oldStart.row) x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n\n this.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n\n for (var row = startRow; row <= endRow; row++) {\n this.doc.insertInLine({\n row: row,\n column: 0\n }, indentString);\n }\n };\n\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n\n for (var j = 0; j < size; ++j) {\n if (line.charAt(j) != ' ') break;\n }\n\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row - firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1) return 0;\n var diff = row - lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n\n this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n\n this.$clipColumnToRow = function (row, column) {\n if (column < 0) return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n\n var len = this.doc.getLength() - 1;\n\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n\n return range;\n };\n\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n\n this.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n\n this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n\n this.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = {\n min: min,\n max: max\n };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode) this._signal(\"changeWrapMode\");\n }\n };\n\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0) limits = {\n min: $printMargin,\n max: $printMargin\n };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n\n this._signal(\"changeWrapLimit\");\n }\n\n return true;\n }\n\n return false;\n };\n\n this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min) wrapLimit = Math.max(min, wrapLimit);\n if (max) wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n\n this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n\n var foldLine = this.getFoldLine(firstRow);\n\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n\n this.$updating = false;\n if (useWrapMode) this.$updateWrapData(firstRow, lastRow);else this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n } else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0,\n lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0) return indentation;\n\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE) indentation += 1;else if (token == TAB) indentation += tabSize;else if (token == TAB_SPACE) continue;else break;\n }\n }\n\n if (isCode && indentedSoftWrap !== false) indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2) len -= 1;\n }\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n\n var indent = 0;\n\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n\n addSplit(split);\n continue;\n }\n\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT) split--;\n addSplit(split - indent);\n }\n\n return splits;\n };\n\n this.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n } else if (c == 32) {\n arr.push(SPACE);\n } else if (c > 39 && c < 48 || c > 57 && c < 64) {\n arr.push(PUNCTUATION);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n\n return arr;\n };\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0) return [0, 0];\n if (maxScreenColumn == null) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n\n this.getRowLength = function (row) {\n if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else h = 0;\n\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n\n this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n\n this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0) return {\n row: 0,\n column: 0\n };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n\n var wrapIndent = 0,\n splitIndex = Math.floor(screenRow - row);\n\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n\n if (splits) {\n column = splits[splitIndex];\n\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column) docColumn = column - 1;\n if (foldLine) return foldLine.idxToPosition(docColumn);\n return {\n row: docRow,\n column: docColumn\n };\n };\n\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\") var pos = this.$clipPositionToDocument(docRow.row, docRow.column);else pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd,\n row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow) break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n } else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n\n var textLine = \"\";\n\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n\n var wrapIndent = 0;\n\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n\n if (wrapRow) {\n var screenRowOffset = 0;\n\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n\n this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n\n this.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0,\n i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n\n if (this.lineWidgets) screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n\n this.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar) return;\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0) return [0, 0];\n if (!maxScreenColumn) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n };\n\n this.destroy = function () {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n\n function isFullWidth(c) {\n if (c < 0x1100) return false;\n return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6;\n }\n }).call(EditSession.prototype);\n\n require(\"./edit_session/folding\").Folding.call(EditSession.prototype);\n\n require(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n config.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function set(value) {\n if (!value || value == \"off\") value = false;else if (value == \"free\") value = true;else if (value == \"printMargin\") value = -1;else if (typeof value == \"string\") value = parseInt(value, 10) || false;\n if (this.$wrap == value) return;\n this.$wrap = value;\n\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function get() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1) return \"printMargin\";\n if (!this.getWrapLimitRange().min) return \"free\";\n return this.$wrap;\n }\n\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function set(val) {\n val = val == \"auto\" ? this.$mode.type != \"text\" : val != \"text\";\n\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function set() {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function set() {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function set(useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker) this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {\n initialValue: true\n },\n tabSize: {\n set: function set(tabSize) {\n tabSize = parseInt(tabSize);\n\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {\n initialValue: false\n },\n foldStyle: {\n set: function set(val) {\n this.setFoldStyle(val);\n },\n handlesSet: true\n },\n overwrite: {\n set: function set(val) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: false\n },\n newLineMode: {\n set: function set(val) {\n this.doc.setNewLineMode(val);\n },\n get: function get() {\n return this.doc.getNewLineMode();\n },\n handlesSet: true\n },\n mode: {\n set: function set(val) {\n this.setMode(val);\n },\n get: function get() {\n return this.$modeId;\n },\n handlesSet: true\n }\n });\n exports.EditSession = EditSession;\n});\nace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var Range = require(\"./range\").Range;\n\n var Search = function Search() {\n this.$options = {};\n };\n\n (function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n\n this.setOptions = function (options) {\n this.$options = options;\n };\n\n this.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator) return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n\n if (sc == ec && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n return firstRange;\n };\n\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle) return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++) {\n if (lines[row + j].search(re[j]) == -1) continue outer;\n }\n\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n\n if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex) {\n continue;\n }\n\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2) row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0,\n j = ranges.length - 1;\n\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) {\n i++;\n }\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) {\n j--;\n }\n\n ranges = ranges.slice(i, j + 1);\n\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine) return replacement;\n if (!re) return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length) return null;\n replacement = input.replace(re, replacement);\n\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase();else replacement[i] = replacement[i].toLowerCase();\n }\n\n replacement = replacement.join(\"\");\n }\n\n return replacement;\n };\n\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp) return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle) return options.re = false;\n if (!options.regExp) needle = lang.escapeRegExp(needle);\n if (options.wholeWord) needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch (e) {\n re = false;\n }\n\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n\n for (var i = 0; i < parts.length; i++) {\n try {\n re.push(new RegExp(parts[i], modifier));\n } catch (e) {\n return false;\n }\n }\n\n return re;\n };\n\n this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re) return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start) start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start) start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row--; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n };\n } else {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row = row + 1; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n };\n }\n\n if (options.$isMultiLine) {\n var len = re.length;\n\n var forEachInLine = function forEachInLine(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1) return;\n }\n\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex)) return true;\n };\n } else if (backwards) {\n var forEachInLine = function forEachInLine(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m,\n last = 0;\n re.lastIndex = 0;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n\n if (m.index + length > endIndex) break;\n matches.push(m.index, length);\n }\n\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length)) return true;\n }\n };\n } else {\n var forEachInLine = function forEachInLine(row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length)) return true;\n\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n\n return {\n forEach: forEach\n };\n };\n }).call(Search.prototype);\n\n function addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n\n return wordBoundary(needle[0]) + needle + wordBoundary(needle[needle.length - 1]);\n }\n\n exports.Search = Search;\n});\nace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n\n var useragent = require(\"../lib/useragent\");\n\n var KEY_MODS = keyUtil.KEY_MODS;\n\n function HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n }\n\n function MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n }\n\n MultiHashHandler.prototype = HashHandler.prototype;\n (function () {\n this.addCommand = function (command) {\n if (this.commands[command.name]) this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey) this._buildKeyHash(command);\n };\n\n this.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand) delete this.commands[name];\n var ckb = this.commandKeyBinding;\n\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined) position = key.position;\n key = key[this.platform];\n }\n\n if (!key) return;\n if (typeof command == \"function\") return this.addCommand({\n exec: command,\n bindKey: key,\n name: command.name || key\n });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n\n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey && command.bindKey.position || (command.isDefault ? -100 : 0);\n }\n\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding,\n i;\n\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position) break;\n }\n\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command) return;\n if (typeof command === \"string\") return this.bindKey(command, name);\n if (typeof command === \"function\") command = {\n exec: command\n };\n if (typeof command !== \"object\") return;\n if (!command.name) command.name = name;\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n\n this.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) {\n return x;\n });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if (!parts.length) return {\n key: key,\n hashId: -1\n };else if (parts.length == 1 && parts[0] == \"shift\") return {\n key: key.toUpperCase(),\n hashId: -1\n };\n var hashId = 0;\n\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n\n if (modifier == null) {\n if (typeof console != \"undefined\") console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n\n hashId |= modifier;\n }\n\n return {\n key: key,\n hashId: hashId\n };\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {\n command: \"null\"\n };\n }\n }\n\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0) data.$keyChain = \"\"; // reset keyChain\n }\n\n return {\n command: command\n };\n };\n\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n }).call(HashHandler.prototype);\n exports.HashHandler = HashHandler;\n exports.MultiHashHandler = MultiHashHandler;\n});\nace.define(\"ace/commands/command_manager\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/keyboard/hash_handler\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var CommandManager = function CommandManager(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function (e) {\n return e.command.exec(e.editor, e.args || {});\n });\n };\n\n oop.inherits(CommandManager, MultiHashHandler);\n (function () {\n oop.implement(this, EventEmitter);\n\n this.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args)) return true;\n }\n\n return false;\n }\n\n if (typeof command === \"string\") command = this.commands[command];\n if (!command) return false;\n if (editor && editor.$readOnly && !command.readOnly) return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) return false;\n var e = {\n editor: editor,\n command: command,\n args: args\n };\n e.returnValue = this._emit(\"exec\", e);\n\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function (editor) {\n if (this.$inReplay) return;\n editor && editor._emit(\"changeStatus\");\n\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length) this.macro = this.oldMacro;\n return this.recording = false;\n }\n\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro) return;\n if (this.recording) return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\") this.exec(x, editor);else this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\") x[0] = x[0].name;\n if (!x[1]) x = x[0];\n return x;\n });\n };\n }).call(CommandManager.prototype);\n exports.CommandManager = CommandManager;\n});\nace.define(\"ace/commands/default_commands\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/config\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"../lib/lang\");\n\n var config = require(\"../config\");\n\n var Range = require(\"../range\").Range;\n\n function bindKey(win, mac) {\n return {\n win: win,\n mac: mac\n };\n }\n\n exports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function exec(editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function exec(editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function exec(editor) {\n editor.selectAll();\n },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function exec(editor) {\n editor.centerSelection();\n },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function exec(editor, line) {\n if (typeof line === \"number\" && !isNaN(line)) editor.gotoLine(line);\n editor.prompt({\n $type: \"gotoLine\"\n });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function exec(editor) {\n editor.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function exec(editor) {\n editor.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function exec(editor) {\n editor.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor);\n });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function exec(editor) {\n editor.toggleOverwrite();\n },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function exec(editor) {\n editor.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function exec(editor, args) {\n editor.navigateUp(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function exec(editor) {\n editor.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function exec(editor) {\n editor.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function exec(editor, args) {\n editor.navigateDown(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function exec(editor) {\n editor.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function exec(editor) {\n editor.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function exec(editor) {\n editor.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function exec(editor, args) {\n editor.navigateLeft(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function exec(editor) {\n editor.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function exec(editor) {\n editor.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function exec(editor, args) {\n editor.navigateRight(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function exec(editor) {\n editor.selectPageDown();\n },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function exec(editor) {\n editor.scrollPageDown();\n },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function exec(editor) {\n editor.gotoPageDown();\n },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function exec(editor) {\n editor.selectPageUp();\n },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function exec(editor) {\n editor.scrollPageUp();\n },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function exec(editor) {\n editor.gotoPageUp();\n },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function exec(editor) {\n editor.commands.toggleRecording(editor);\n },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function exec(editor) {\n editor.commands.replay(editor);\n },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function exec(editor) {\n editor.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true, true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function exec() {},\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function exec(editor) {},\n readOnly: true\n }, {\n name: \"cut\",\n description: \"Cut\",\n exec: function exec(editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n\n editor._emit(\"cut\", range);\n\n if (!range.isEmpty()) editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function exec(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function exec(editor) {\n editor.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function exec(editor) {\n editor.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function exec(editor) {\n editor.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function exec(editor) {\n editor.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function exec(editor) {\n editor.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function exec(editor) {\n editor.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function exec(editor) {\n editor.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor, true);\n });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function exec(editor) {\n editor.undo();\n }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function exec(editor) {\n editor.redo();\n }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function exec(editor) {\n editor.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function exec(editor) {\n editor.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function exec(editor) {\n editor.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function exec(editor) {\n editor.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function exec(editor) {\n editor.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function exec(editor) {\n editor.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function exec(editor) {\n editor.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function exec(editor) {\n editor.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function exec(editor) {\n editor.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function exec(editor) {\n editor.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function exec(editor) {\n editor.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function exec(editor) {\n editor.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function exec(editor, str) {\n editor.insert(str);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function exec(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function exec(editor) {\n editor.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function exec(editor) {\n editor.transposeLetters();\n },\n multiSelectAction: function multiSelectAction(editor) {\n editor.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function exec(editor) {\n editor.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function exec(editor) {\n editor.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < editor.session.doc.getLength() - 1) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? firstLineEndCol + 1 : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == ranges.length - 1) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function exec(editor) {\n editor.prompt({\n $type: \"commands\"\n });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n editor.prompt({\n $type: \"modes\"\n });\n },\n readOnly: true\n }];\n});\nace.define(\"ace/editor\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/keyboard/textinput\", \"ace/mouse/mouse_handler\", \"ace/mouse/fold_handler\", \"ace/keyboard/keybinding\", \"ace/edit_session\", \"ace/search\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/commands/command_manager\", \"ace/commands/default_commands\", \"ace/config\", \"ace/token_iterator\", \"ace/clipboard\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./lib/fixoldbrowsers\");\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var lang = require(\"./lib/lang\");\n\n var useragent = require(\"./lib/useragent\");\n\n var TextInput = require(\"./keyboard/textinput\").TextInput;\n\n var MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\n\n var FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\n\n var KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n var Search = require(\"./search\").Search;\n\n var Range = require(\"./range\").Range;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var CommandManager = require(\"./commands/command_manager\").CommandManager;\n\n var defaultCommands = require(\"./commands/default_commands\").commands;\n\n var config = require(\"./config\");\n\n var TokenIterator = require(\"./token_iterator\").TokenIterator;\n\n var clipboard = require(\"./clipboard\");\n\n var Editor = function Editor(renderer, session, options) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + ++Editor.$uid;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n\n if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options) this.setOptions(options);\n\n config._signal(\"editor\", this);\n };\n\n Editor.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n\n this.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n\n this.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) return this.curOp = null;\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") return;\n\n this._signal(\"beforeEndOperation\");\n\n if (!this.curOp) return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n\n break;\n\n default:\n break;\n }\n\n if (scrollIntoView == \"animate\") this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n\n this.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas) return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && e.command.name == prev.command.name;\n\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined) this.mergeNextCommand = true;\n shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (this.$mergeUndoDeltas != \"always\" && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge) this.session.mergeUndoDeltas = true;else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now();\n };\n\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n\n var _self = this;\n\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n\n this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n\n this.setSession = function (session) {\n if (this.session == session) return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", {\n oldEditor: this\n });\n session && session._signal(\"changeEditor\", {\n editor: this\n });\n if (session && session.bgTokenizer) session.bgTokenizer.scheduleStart();\n };\n\n this.getSession = function () {\n return this.session;\n };\n\n this.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos) this.selectAll();else if (cursorPos == 1) this.navigateFileEnd();else if (cursorPos == -1) this.navigateFileStart();\n return val;\n };\n\n this.getValue = function () {\n return this.session.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") || dom.computedStyle(this.container).fontSize;\n };\n\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function () {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n\n if (range) session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.$highlightTags = function () {\n if (this.$highlightTagPending) return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function () {\n self.$highlightTagPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token) return;\n }\n\n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n\n if (prevToken.value == '<') {\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n\n iterator.stepForward();\n }\n\n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column + token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n\n if (!session.$tagHighlight) session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.focus = function () {\n var _self = this;\n\n setTimeout(function () {\n if (!_self.isFocused()) _self.textInput.focus();\n });\n this.textInput.focus();\n };\n\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n\n this.blur = function () {\n this.textInput.blur();\n };\n\n this.onFocus = function (e) {\n if (this.$isFocused) return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n\n this._emit(\"focus\", e);\n };\n\n this.onBlur = function (e) {\n if (!this.$isFocused) return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function () {\n this.renderer.updateCursor();\n };\n\n this.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = delta.start.row == delta.end.row ? delta.end.row : Infinity;\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n\n this.onCursorChange = function () {\n this.$cursorChange();\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine()) highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function (e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine()) return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle)) return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary)) return;\n return re;\n };\n\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n\n this._emit(\"changeMode\", e);\n };\n\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n\n this.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row) continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n\n var e = {\n text: text\n };\n\n this._signal(\"copy\", e);\n\n clipboard.lineMode = copyLine ? e.text : \"\";\n return e.text;\n };\n\n this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n\n this.onPaste = function (text, event) {\n var e = {\n text: text,\n event: event\n };\n this.commands.exec(\"paste\", this, e);\n };\n\n this.$handlePaste = function (e) {\n if (typeof e == \"string\") e = {\n text: e\n };\n\n this._signal(\"paste\", e);\n\n var text = e.text;\n var lineMode = text == clipboard.lineMode;\n var session = this.session;\n\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode) session.insert({\n row: this.selection.lead.row,\n column: 0\n }, text);else this.insert(text);\n } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({\n row: range.start.row,\n column: 0\n }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine) return this.commands.exec(\"insertstring\", this, text);\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty()) session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n\n this.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n\n text = transform.text;\n }\n }\n\n if (text == \"\\t\") text = this.session.getTabString();\n\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n } else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) {\n // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n } else {\n // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({\n row: cursor.row + 1,\n column: 0\n }, lineIndent);\n }\n\n if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function (text, composition) {\n if (!composition) return this.keyBinding.onTextInput(text);\n this.startOperation({\n command: {\n name: \"insertstring\"\n }\n });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount) this.forEachSelection(applyComposition);else applyComposition();\n this.endOperation();\n };\n\n this.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n this.selection.setRange(r);\n if (!text && !r.isEmpty()) this.remove();\n }\n\n if (text || !this.selection.isEmpty()) this.insert(text, true);\n\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\") this.selection.selectLeft();else this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n\n if (new_range) range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.removeWordRight = function () {\n if (this.selection.isEmpty()) this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeWordLeft = function () {\n if (this.selection.isEmpty()) this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineStart = function () {\n if (this.selection.isEmpty()) this.selection.selectLineStart();\n if (this.selection.isEmpty()) this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty()) this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n\n this.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0) return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n } else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n\n this.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = size - column % size;\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n\n return this.insert(indentString);\n };\n\n this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n\n this.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n\n for (var i = rows.first; i <= rows.last; i++) {\n lines.push(session.getLine(i));\n }\n\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n\n this.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n\n this.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n\n return null;\n };\n\n this.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n } else {\n this.toggleWord();\n }\n };\n\n this.$toggleWordPairs = [[\"first\", \"last\"], [\"true\", \"false\"], [\"yes\", \"no\"], [\"width\", \"height\"], [\"top\", \"bottom\"], [\"right\", \"left\"], [\"on\", \"off\"], [\"x\", \"y\"], [\"get\", \"set\"], [\"max\", \"min\"], [\"horizontal\", \"vertical\"], [\"show\", \"hide\"], [\"add\", \"remove\"], [\"up\", \"down\"], [\"before\", \"after\"], [\"even\", \"odd\"], [\"in\", \"out\"], [\"inside\", \"outside\"], [\"next\", \"previous\"], [\"increase\", \"decrease\"], [\"attach\", \"detach\"], [\"&&\", \"||\"], [\"==\", \"!=\"]];\n\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0) delta = 0;\n var curLength = 0,\n itLength = 0;\n var that = this;\n\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n\n curLength = itLength;\n });\n }\n\n var wordPairs = this.$toggleWordPairs;\n var reg;\n\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n\n this.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last) break;else if (!copy && subRows.first > last + 1) break;\n last = subRows.last;\n }\n\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n\n this.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n\n this.isRowVisible = function (row) {\n return row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow();\n };\n\n this.isRowFullyVisible = function (row) {\n return row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow();\n };\n\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null) renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n\n this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n\n this.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n\n this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n\n this.selectAll = function () {\n this.selection.selectAll();\n };\n\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n\n break;\n }\n }\n } else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n\n if (prevToken.value === '<') {\n depth[token.value]++;\n } else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n\n if (!matchType) return;\n var range, pos;\n\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2) range = this.session.getBracketRange(pos);\n }\n } else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) var tag = token.value;else return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n } else if (prevToken.value === '</') {\n depth[tag]--;\n }\n\n if (depth[tag] === 0) found = true;\n }\n }\n } while (prevToken && !found);\n }\n\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n\n this.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({\n row: lineNumber - 1,\n column: column || 0\n });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate);\n };\n\n this.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n\n this.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n\n this.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n\n this.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n\n this.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n\n this.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n\n this.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n\n this.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n\n this.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n\n this.replace = function (replacement, options) {\n if (options) this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range) return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n\n this.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length) return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n\n this.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n\n this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n\n this.find = function (needle, options, animate) {\n if (!options) options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp) options.needle = needle;else if (typeof needle == \"object\") oop.mixin(options, needle);\n var range = this.selection.getRange();\n\n if (options.needle == null) {\n needle = this.session.getTextRange(range) || this.$search.$options.needle;\n\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n\n this.$search.set({\n needle: needle\n });\n }\n\n this.$search.set(options);\n if (!options.start) this.$search.set({\n start: range\n });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll) return newRange;\n\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n\n if (options.backwards) range.start = range.end;else range.end = range.start;\n this.selection.setRange(range);\n };\n\n this.findNext = function (options, animate) {\n this.find({\n skipCurrent: true,\n backwards: false\n }, options, animate);\n };\n\n this.findPrevious = function (options, animate) {\n this.find(options, {\n skipCurrent: true,\n backwards: true\n }, animate);\n };\n\n this.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false) this.renderer.animateScrolling(scrollTop);\n };\n\n this.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.destroy = function () {\n this.renderer.destroy();\n\n this._signal(\"destroy\", this);\n\n if (this.session) {\n this.session.destroy();\n }\n };\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable) return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll) rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n\n shouldScroll = rect = null;\n }\n });\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable) return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer) return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n this.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n }).call(Editor.prototype);\n config.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function set(style) {\n this.onSelectionChange();\n\n this._signal(\"changeSelectionStyle\", {\n data: style\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function set() {\n this.$updateHighlightActiveLine();\n },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function set(shouldHighlight) {\n this.$onSelectionChange();\n },\n initialValue: true\n },\n readOnly: {\n set: function set(readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function set(value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function set(val) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {\n initialValue: true\n },\n wrapBehavioursEnabled: {\n initialValue: true\n },\n autoScrollEditorIntoView: {\n set: function set(val) {\n this.setAutoScrollEditorIntoView(val);\n }\n },\n keyboardHandler: {\n set: function set(val) {\n this.setKeyboardHandler(val);\n },\n get: function get() {\n return this.$keybindingId;\n },\n handlesSet: true\n },\n value: {\n set: function set(val) {\n this.session.setValue(val);\n },\n get: function get() {\n return this.getValue();\n },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function set(val) {\n this.setSession(val);\n },\n get: function get() {\n return this.session;\n },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function set(show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers) relativeNumberRenderer.attach(this);else relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function set(value) {\n if (this.$showLineNumbers && value) relativeNumberRenderer.attach(this);else relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function set(message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var value = this.renderer.$composition || this.getValue();\n\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n } else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n }.bind(this);\n\n this.on(\"input\", this.$updatePlaceholder);\n }\n\n this.$updatePlaceholder();\n }\n },\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n var relativeNumberRenderer = {\n getText: function getText(session, row) {\n return (Math.abs(session.selection.lead.row - row) || row + 1 + (row < 9 ? \"\\xb7\" : \"\")) + \"\";\n },\n getWidth: function getWidth(session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function update(e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function attach(editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function detach(editor) {\n if (editor.renderer.$gutterLayer.$renderer == this) editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n };\n exports.Editor = Editor;\n});\nace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var UndoManager = function UndoManager() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n };\n\n (function () {\n this.addSession = function (session) {\n this.$session = session;\n };\n\n this.add = function (delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n\n if (delta.action == \"remove\" || delta.action == \"insert\") this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n\n this.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n\n this.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n\n this.markIgnored = function (from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from) break;\n if (delta.id < to) delta.ignore = true;\n }\n\n this.lastDeltas = null;\n };\n\n this.getSelection = function (rev, after) {\n var stack = this.selections;\n\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n\n if (selection.rev < rev) {\n if (after) selection = stack[i + 1];\n return selection;\n }\n }\n };\n\n this.getRevision = function () {\n return this.$rev;\n };\n\n this.getDeltas = function (from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null,\n start = 0;\n\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end) end = i + 1;\n\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n\n return stack.slice(start, end);\n };\n\n this.getChangedRanges = function (from, to) {\n if (to == null) to = this.$rev + 1;\n };\n\n this.getChangedLines = function (from, to) {\n if (to == null) to = this.$rev + 1;\n };\n\n this.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length)) return;\n if (!session) session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n\n if (deltaSet && deltaSet.length) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n\n this.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session) session = this.$session;\n this.$fromUndo = true;\n\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n\n this.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n\n this.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n\n this.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n\n this.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n\n this.bookmark = function (rev) {\n if (rev == undefined) rev = this.$rev;\n this.mark = rev;\n };\n\n this.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n\n this.toJSON = function () {};\n\n this.fromJSON = function () {};\n\n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n\n this.$prettyPrint = function (delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n }).call(UndoManager.prototype);\n\n function rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n\n return true;\n }\n }\n }\n\n var Range = require(\"./range\").Range;\n\n var cmp = Range.comparePoints;\n var comparePoints = Range.comparePoints;\n\n function $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert) end = start;\n\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n } else {\n point.bias == -1;\n continue;\n }\n }\n }\n\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0) point.bias = 1;\n }\n }\n }\n\n function clonePos(pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n }\n\n function cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n }\n\n function stringifyDelta(d) {\n d = d || this;\n\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n\n var type = \"\";\n\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n } else {\n type = stringifyRange(d.value);\n }\n }\n\n if (d.start) {\n type += stringifyRange(d);\n }\n\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n\n return type;\n }\n\n function stringifyRange(r) {\n return r.start.row + \":\" + r.start.column + \"=>\" + r.end.row + \":\" + r.end.column;\n }\n\n function swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n }\n\n return [d2, d1];\n }\n\n function swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n\n j = ds2.length;\n i++;\n }\n\n return [ds1, ds2];\n }\n }\n }\n\n ds1.selectionBefore = ds2.selectionBefore = ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n }\n\n function xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n } else {\n var before, after;\n\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n\n shiftPos(c1.end, d1.start, d1.end, -1);\n\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n\n return [c1, before, after].filter(Boolean);\n }\n }\n\n return [c1, d1];\n }\n\n function shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n }\n\n function shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n\n pos.row += dir * (end.row - start.row);\n }\n\n function splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n }\n\n function moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n } else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n\n return redoStack;\n }\n\n function rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n }\n\n exports.UndoManager = UndoManager;\n});\nace.define(\"ace/layer/lines\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var Lines = function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = this.canvasHeight * 2 + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n };\n\n (function () {\n this.moveContainer = function (config) {\n dom.translate(this.element, 0, -(config.firstRowScreen * config.lineHeight % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n\n this.pageChanged = function (oldConfig, newConfig) {\n return Math.floor(oldConfig.firstRowScreen * oldConfig.lineHeight / this.canvasHeight) !== Math.floor(newConfig.firstRowScreen * newConfig.lineHeight / this.canvasHeight);\n };\n\n this.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - screenPage * this.canvasHeight;\n };\n\n this.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLength(row);\n };\n\n this.getLength = function () {\n return this.cells.length;\n };\n\n this.get = function (index) {\n return this.cells[index];\n };\n\n this.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n\n this.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n\n this.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n\n this.element.appendChild(fragment);\n } else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n\n this.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n\n if (this.element.firstChild) this.element.insertBefore(fragment, this.element.firstChild);else this.element.appendChild(fragment);\n } else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n\n this.last = function () {\n if (this.cells.length) return this.cells[this.cells.length - 1];else return null;\n };\n\n this.$cacheCell = function (cell) {\n if (!cell) return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n\n this.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement) initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n\n cell.row = row;\n return cell;\n };\n }).call(Lines.prototype);\n exports.Lines = Lines;\n});\nace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/layer/lines\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var Lines = require(\"./lines\").Lines;\n\n var Gutter = function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setSession = function (session) {\n if (this.session) this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session) session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo) rowInfo = this.$annotations[row] = {\n text: []\n };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText);\n var type = annotation.type;\n if (type == \"error\") rowInfo.className = \" ace_error\";else if (type == \"warning\" && rowInfo.className != \" ace_error\") rowInfo.className = \" ace_warning\";else if (type == \"info\" && !rowInfo.className) rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length) return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {} else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1) {\n this.$lines.pop();\n }\n\n break;\n }\n\n cell = this.$lines.get(++index);\n\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n\n this._signal(\"afterRender\");\n\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode) lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineText, config) : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width = this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$updateCursorRow = function () {\n if (!this.$highlightGutterLine) return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row) return;\n this.$cursorRow = position.row;\n };\n\n this.updateLineHighlight = function () {\n if (!this.$highlightGutterLine) return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row) return;\n if (this.$cursorCell) this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row) cell = cells[i - 1];else break;\n }\n\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config)) return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow) return this.update(config);\n if (lastRow < oldConfig.firstRow) return this.update(config);\n if (oldConfig.firstRow < config.firstRow) for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) {\n this.$lines.shift();\n }\n if (oldLastRow > lastRow) for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) {\n this.$lines.pop();\n }\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n\n this.updateLineHighlight();\n\n this._signal(\"afterRender\");\n\n this.$updateGutterWidth(config);\n };\n\n this.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > lastRow) break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n\n return fragment;\n };\n\n this.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var className = \"ace_gutter-cell \";\n\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row) {\n className += \"ace_gutter-active-line \";\n\n if (this.$cursorCell != cell) {\n if (this.$cursorCell) this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n\n if (breakpoints[row]) className += breakpoints[row];\n if (decorations[row]) className += decorations[row];\n if (this.$annotations[row]) className += this.$annotations[row].className;\n if (element.className != className) element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null) c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row) className += \" ace_closed\";else className += \" ace_open\";\n if (foldWidget.className != className) foldWidget.className = className;\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n\n var text = (gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber).toString();\n\n if (text !== textNode.data) {\n textNode.data = text;\n }\n\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n\n this.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function getWidth() {\n return 0;\n },\n getText: function getText() {\n return \"\";\n }\n };\n };\n\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n\n this.$showFoldWidgets = true;\n\n this.setShowFoldWidgets = function (show) {\n if (show) dom.addCssClass(this.element, \"ace_folding-enabled\");else dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function () {\n if (!this.element.firstChild) return {\n left: 0,\n right: 0\n };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0) + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0) + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n\n this.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left) return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right) return \"foldWidgets\";\n };\n }).call(Gutter.prototype);\n\n function onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n return element;\n }\n\n exports.Gutter = Gutter;\n});\nace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var dom = require(\"../lib/dom\");\n\n var Marker = function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n };\n\n (function () {\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n\n this.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n } else {\n this.i++;\n }\n\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function (config) {\n if (!config) return;\n this.config = config;\n this.i = 0;\n var html;\n\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n range = range.toScreenRange(this.session);\n\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\") this.drawTextMarker(html, range, marker.clazz, config);else this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n\n if (this.i != -1) {\n while (this.i < this.element.childElementCount) {\n this.element.removeChild(this.element.lastChild);\n }\n }\n };\n\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n\n this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" + \"width:\" + width + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0) return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;\" + \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n\n this.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"width:\" + width + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n\n this.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight,\n top = this.$getTop(range.start.row, config),\n padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" + \"width:\" + selection.width + (extraLength || 0) + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n\n this.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"top:\" + top + \"px;\" + \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n\n this.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"top:\" + top + \"px;\" + \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n }).call(Marker.prototype);\n exports.Marker = Marker;\n});\nace.define(\"ace/layer/text\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/layer/lines\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var Lines = require(\"./lines\").Lines;\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var Text = function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n\n this.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n\n this.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n\n this.setSession = function (session) {\n this.session = session;\n if (session) this.$computeTabString();\n };\n\n this.showInvisibles = false;\n\n this.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles) return false;\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n\n this.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display) return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n\n this.onChangeTabSize = this.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n } else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else {\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n\n lineElementsIdx++;\n }\n\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > last) break;\n var lineElement = lineElements[lineElementsIdx++];\n\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged) lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n\n row++;\n }\n\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config)) return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow) return this.update(config);\n if (lastRow < oldConfig.firstRow) return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config);\n if (config.lastRow < oldConfig.firstRow) return this.update(config);\n if (oldConfig.firstRow < config.firstRow) for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) {\n this.$lines.shift();\n }\n if (oldConfig.lastRow > config.lastRow) for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) {\n this.$lines.pop();\n }\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > lastRow) break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n\n fragment.push(line);\n row++;\n }\n\n return fragment;\n };\n\n this.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n\n while (lines.getLength()) {\n lines.pop();\n }\n\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showInvisibles && simpleSpace) continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n } else if (simpleSpace) {\n if (self.showInvisibles) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n } else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n } else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = self.config.characterWidth * 2 + \"px\";\n span.className = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showInvisibles ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n } else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = self.config.characterWidth * 2 + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") span.style.width = token.value.length * this.config.characterWidth + \"px\";\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n } else {\n parent.appendChild(valueFragment);\n }\n\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max) return value;\n\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n\n return value.substr(cols);\n }\n\n return value;\n };\n\n this.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n\n this.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value) continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides) value = this.renderIndentGuide(parent, value);\n if (value) screenColumn = this.$renderToken(parent, screenColumn, token, value);\n\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n if (screenColumn + value.length > this.MAX_LINE_LENGTH) return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n\n this.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n\n this.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row);\n if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine);else var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n } else {\n var lastLineEl = parent;\n\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showInvisibles && lastLineEl) {\n if (foldLine) row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0,\n col = 0;\n\n while (col + tokens[idx].value.length < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length) return;\n }\n\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > to - from) value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else renderTokens.push(tokens[idx]);\n\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow) tokens = session.getTokens(row);\n if (tokens.length) addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n\n this.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function () {};\n }).call(Text.prototype);\n exports.Text = Text;\n});\nace.define(\"ace/layer/cursor\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var Cursor = function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n };\n\n (function () {\n this.$updateOpacity = function (val) {\n var cursors = this.cursors;\n\n for (var i = cursors.length; i--;) {\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n }\n };\n\n this.$startCssAnimation = function () {\n var cursors = this.cursors;\n\n for (var i = cursors.length; i--;) {\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n }\n\n setTimeout(function () {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }.bind(this));\n };\n\n this.$stopCssAnimation = function () {\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n\n this.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n\n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n\n if (this.smoothBlinking) {\n setTimeout(function () {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session) return {\n left: 0,\n top: 0\n };\n if (!position) position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) ? this.session.$bidiHandler.getPosLeft(pos.column) : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight;\n return {\n left: cursorLeft,\n top: cursorTop\n };\n };\n\n this.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0,\n cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0) {\n selections = [{\n cursor: null\n }];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n\n if ((pixelPos.top > config.height + config.offset || pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n } else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n\n while (this.cursors.length > cursorIndex) {\n this.removeCursor();\n }\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n\n this.drawCursor = null;\n\n this.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite) dom.addCssClass(this.element, \"ace_overwrite-cursors\");else dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n }).call(Cursor.prototype);\n exports.Cursor = Cursor;\n});\nace.define(\"ace/scrollbar\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var event = require(\"./lib/event\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var MAX_SCROLL_H = 0x8000;\n\n var ScrollBar = function ScrollBar(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n }).call(ScrollBar.prototype);\n\n var VScrollBar = function VScrollBar(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n };\n\n oop.inherits(VScrollBar, ScrollBar);\n (function () {\n this.classSuffix = '-v';\n\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n\n this._emit(\"scroll\", {\n data: this.scrollTop\n });\n }\n\n this.skipEvent = false;\n };\n\n this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n\n this.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n\n this.setInnerHeight = this.setScrollHeight = function (height) {\n this.scrollHeight = height;\n\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n\n this.inner.style.height = height + \"px\";\n };\n\n this.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n }).call(VScrollBar.prototype);\n\n var HScrollBar = function HScrollBar(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + \"px\";\n };\n\n oop.inherits(HScrollBar, ScrollBar);\n (function () {\n this.classSuffix = '-h';\n\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n\n this._emit(\"scroll\", {\n data: this.scrollLeft\n });\n }\n\n this.skipEvent = false;\n };\n\n this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n\n this.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n\n this.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n\n this.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n }).call(HScrollBar.prototype);\n exports.ScrollBar = VScrollBar; // backward compatibility\n\n exports.ScrollBarV = VScrollBar; // backward compatibility\n\n exports.ScrollBarH = HScrollBar; // backward compatibility\n\n exports.VScrollBar = VScrollBar;\n exports.HScrollBar = HScrollBar;\n});\nace.define(\"ace/renderloop\", [\"require\", \"exports\", \"module\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"./lib/event\");\n\n var RenderLoop = function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n\n var _self = this;\n\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n\n _self.onRender(changes);\n }\n\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n };\n\n (function () {\n this.schedule = function (change) {\n this.changes = this.changes | change;\n\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n\n this.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n }).call(RenderLoop.prototype);\n exports.RenderLoop = RenderLoop;\n});\nace.define(\"ace/layer/font_metrics\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n var oop = require(\"../lib/oop\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var CHAR_COUNT = 256;\n var USE_OBSERVER = typeof ResizeObserver == \"function\";\n var L = 200;\n\n var FontMetrics = exports.FontMetrics = function (parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n if (USE_OBSERVER) this.$addObserver();else this.checkForSizeChanges();\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n\n this.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function (size) {\n if (size === undefined) size = this.$measureSizes();\n\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n\n this._emit(\"changeCharacterSize\", {\n data: size\n });\n }\n };\n\n this.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n var rect = e[0].contentRect;\n self.checkForSizeChanges({\n height: rect.height,\n width: rect.width / CHAR_COUNT\n });\n });\n this.$observer.observe(this.$measureNode);\n };\n\n this.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer) return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n\n this.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0) return null;\n return size;\n };\n\n this.$measureCharWidth = function (ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n\n this.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n\n return w;\n };\n\n this.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer) this.$observer.disconnect();\n if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el);\n };\n\n this.$getZoom = function getZoom(element) {\n if (!element) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n\n this.$initTransformMeasureNodes = function () {\n var t = function t(_t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + _t + \"px;left:\" + l + \"px;\"\n }];\n };\n\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n\n this.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [(-l2[1] * r[0] + l2[0] * r[1]) / det, (+l1[1] * r[0] - l1[0] * r[1]) / det];\n }\n\n function sub(a, b) {\n return [a[0] - b[0], a[1] - b[1]];\n }\n\n function add(a, b) {\n return [a[0] + b[0], a[1] + b[1]];\n }\n\n function mul(a, b) {\n return [a * b[0], a * b[1]];\n }\n\n if (!this.els) this.$initTransformMeasureNodes();\n\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n }).call(FontMetrics.prototype);\n});\nace.define(\"ace/virtual_renderer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/config\", \"ace/layer/gutter\", \"ace/layer/marker\", \"ace/layer/text\", \"ace/layer/cursor\", \"ace/scrollbar\", \"ace/scrollbar\", \"ace/renderloop\", \"ace/layer/font_metrics\", \"ace/lib/event_emitter\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var config = require(\"./config\");\n\n var GutterLayer = require(\"./layer/gutter\").Gutter;\n\n var MarkerLayer = require(\"./layer/marker\").Marker;\n\n var TextLayer = require(\"./layer/text\").Text;\n\n var CursorLayer = require(\"./layer/cursor\").Cursor;\n\n var HScrollBar = require(\"./scrollbar\").HScrollBar;\n\n var VScrollBar = require(\"./scrollbar\").VScrollBar;\n\n var RenderLoop = require(\"./renderloop\").RenderLoop;\n\n var FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var editorCss = \"\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nperspective: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\nopacity: 0.7;\\\ntransform-origin: left;\\\ntext-indent: 10px;\\\n}\";\n\n var useragent = require(\"./lib/useragent\");\n\n var HIDE_TEXTAREA = useragent.isIE;\n dom.importCssString(editorCss, \"ace_editor.css\");\n\n var VirtualRenderer = function VirtualRenderer(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n\n config._signal(\"renderer\", this);\n };\n\n (function () {\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n\n this.setSession = function (session) {\n if (this.session) this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session) return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n\n this.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined) lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n } else {\n if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow;\n }\n\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force) this.$changedLines.lastRow = this.layerConfig.lastRow;else return;\n }\n\n if (this.$changedLines.firstRow > this.layerConfig.lastRow) return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n\n this.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n\n this.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n\n this.updateFull = function (force) {\n if (force) this.$renderChanges(this.CHANGE_FULL, true);else this.$loop.schedule(this.CHANGE_FULL);\n };\n\n this.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n\n this.$updateSizeAsync = function () {\n if (this.$loop.pending) this.$size.$dirty = true;else this.onResize();\n };\n\n this.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2) return;else if (this.resizing > 0) this.resizing++;else this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height) height = el.clientHeight || el.scrollHeight;\n if (!width) width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (!this.$size.scrollerHeight || !width && !height) return this.resizing = 0;\n if (force) this.$gutterLayer.$padding = null;\n if (force) this.$renderChanges(changes | this.$changes, true);else this.$loop.schedule(changes | this.$changes);\n if (this.resizing) this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n\n this.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= this.$extraHeight || 0;\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n\n size.$dirty = !width || !height;\n if (changes) this._signal(\"resize\", oldSize);\n return changes;\n };\n\n this.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n\n this.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n\n this.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n\n this.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n\n this.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl) return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1) this.adjustWrapLimit();\n };\n\n this.getContainerElement = function () {\n return this.container;\n };\n\n this.getMouseEventTarget = function () {\n return this.scroller;\n };\n\n this.getTextAreaContainer = function () {\n return this.container;\n };\n\n this.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed) return;\n var style = this.textarea.style;\n var composition = this.$composition;\n\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos) return;\n if (composition && composition.markerRange) pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n\n var w = 1;\n var maxTop = this.$size.height - h;\n\n if (!composition) {\n posTop += this.lineHeight;\n } else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * this.session.$getStringScreenWidth(val)[0];\n } else {\n posTop += this.lineHeight + 2;\n }\n }\n\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n\n this.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n\n this.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n\n this.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight) return lastRow - 1;\n return lastRow;\n };\n\n this.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n\n this.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n\n this.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n\n this.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n\n this.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n\n this.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n\n this.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n\n this.$frozen = false;\n\n this.freeze = function () {\n this.$frozen = true;\n };\n\n this.unfreeze = function () {\n this.$frozen = false;\n };\n\n this.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n\n if (!this.session || !this.container.offsetWidth || this.$frozen || !changes && !force) {\n this.$changes |= changes;\n return;\n }\n\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n\n this._signal(\"beforeRender\");\n\n if (this.session && this.session.$bidiHandler) this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n\n if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n\n this._signal(\"afterRender\");\n\n return;\n }\n\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config);else this.$textLayer.scrollLines(config);\n\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) this.$gutterLayer.update(config);else this.$gutterLayer.scrollLines(config);\n }\n\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n\n this._signal(\"afterRender\");\n\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || changes & this.CHANGE_GUTTER && this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine) this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n this.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll) desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n\n if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n\n this._signal(\"autosize\");\n }\n };\n\n this.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n\n if (this.$maxLines && this.lineHeight > 1) this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged) changes = this.CHANGE_H_SCROLL;\n\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n\n this._signal(\"scrollbarVisibilityChanged\");\n\n if (vScrollChanged) longestLine = this.$getLongestLine();\n }\n\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler) this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n\n this.$updateLines = function () {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n\n if (lastRow === Infinity) {\n if (this.$showGutter) this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n\n this.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n\n this.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n\n this.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n\n this.updateBreakpoints = function (rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n\n this.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n\n this.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n\n this.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n\n this.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n\n this.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0) return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var left = pos.left;\n var top = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n\n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight) top -= offset * this.$size.scrollerHeight;\n if (top === 0) top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n\n this.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n\n this.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n\n this.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n\n this.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n\n this.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\") cursor = {\n row: cursor,\n column: 0\n };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n\n this.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function func(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i) {\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n }\n\n return steps;\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({\n row: line,\n column: 0\n });\n var offset = pos.top;\n if (center) offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false) this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll) return;\n\n var _self = this;\n\n if (fromValue == toValue) return;\n\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue) return;\n }\n }\n\n var steps = _self.$calcSteps(fromValue, toValue);\n\n this.$scrollAnimation = {\n from: fromValue,\n to: toValue,\n steps: steps\n };\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function () {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n\n _self.session.setScrollTop(toValue);\n\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n\n this.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n\n this.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n\n this.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n\n this.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n\n this.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true;\n };\n\n this.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n\n if (this.$hasCssTransforms) {\n canvasPos = {\n top: 0,\n left: 0\n };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return {\n row: row,\n column: col,\n side: offset - col > 0 ? 1 : -1,\n offsetX: offsetX\n };\n };\n\n this.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n\n if (this.$hasCssTransforms) {\n canvasPos = {\n top: 0,\n left: 0\n };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n\n this.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) ? this.session.$bidiHandler.getPosLeft(pos.column) : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n\n this.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n\n this.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n\n this.showComposition = function (composition) {\n this.$composition = composition;\n\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n\n composition.useTextareaForIME = this.$useTextareaForIME;\n\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n } else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n\n this.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n\n this.hideComposition = function () {\n if (!this.$composition) return;\n if (this.$composition.markerId) this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n\n this.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = {\n type: type,\n value: text\n };\n var tokens = session.getTokens(row);\n\n if (column == null) {\n tokens.push(newToken);\n } else {\n var l = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, {\n type: token.type,\n value: before\n }, newToken, {\n type: token.type,\n value: after\n });\n break;\n }\n }\n }\n\n this.updateLines(row, row);\n };\n\n this.setTheme = function (theme, cb) {\n var _self = this;\n\n this.$themeId = theme;\n\n _self._dispatchEvent('themeChange', {\n theme: theme\n });\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme) return cb && cb();\n if (!module || !module.cssClass) throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id) _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding) _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n\n if (_self.$size) {\n _self.$size.width = 0;\n\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {\n theme: module\n });\n\n cb && cb();\n }\n };\n\n this.getTheme = function () {\n return this.$themeId;\n };\n\n this.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n\n this.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n\n this.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n\n this.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n\n this.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n\n this.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n };\n }).call(VirtualRenderer.prototype);\n config.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {\n initialValue: false\n },\n showInvisibles: {\n set: function set(value) {\n if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function set() {\n this.$updatePrintMargin();\n },\n initialValue: true\n },\n printMarginColumn: {\n set: function set() {\n this.$updatePrintMargin();\n },\n initialValue: 80\n },\n printMargin: {\n set: function set(val) {\n if (typeof val == \"number\") this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function get() {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function set(show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function set(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function set(show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function set(show) {\n if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function set(shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function set(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function set(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function set(size) {\n if (typeof size == \"number\") size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function set(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function set(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function set(val) {\n if (!(this.$minLines < 0x1ffffffffffff)) this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function set(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function set(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val) return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function set(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function set(val) {\n this.setTheme(val);\n },\n get: function get() {\n return this.$themeId || this.theme;\n },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n });\n exports.VirtualRenderer = VirtualRenderer;\n});\nace.define(\"ace/worker/worker_client\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/event_emitter\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var net = require(\"../lib/net\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var config = require(\"../config\");\n\n function $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n\n try {\n return new Blob([script], {\n \"type\": \"application/javascript\"\n });\n } catch (e) {\n // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n }\n\n function createWorker(workerUrl) {\n if (typeof Worker == \"undefined\") return {\n postMessage: function postMessage() {},\n terminate: function terminate() {}\n };\n\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n\n return new Worker(workerUrl);\n }\n\n var WorkerClient = function WorkerClient(worker) {\n if (!worker.postMessage) worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.$worker.onmessage = this.onMessage;\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function (topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n var tlns = {};\n topLevelNamespaces.forEach(function (ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n\n this.$worker.postMessage({\n init: true,\n tlns: tlns,\n module: mod,\n classname: classname\n });\n return this.$worker;\n };\n\n this.onMessage = function (e) {\n var msg = e.data;\n\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {\n data: msg.data\n });\n\n break;\n\n case \"call\":\n var callback = this.callbacks[msg.id];\n\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n\n break;\n\n case \"error\":\n this.reportError(msg.data);\n break;\n\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n\n this.reportError = function (err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function (path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function () {\n this._signal(\"terminate\", {});\n\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc) this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function (cmd, args) {\n this.$worker.postMessage({\n command: cmd,\n args: args\n });\n };\n\n this.call = function (cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n\n this.send(cmd, args);\n };\n\n this.emit = function (event, data) {\n try {\n if (data.data && data.data.err) data.data.err = {\n message: data.data.err.message,\n stack: data.data.err.stack,\n code: data.data.err.code\n };\n this.$worker.postMessage({\n event: event,\n data: {\n data: data.data\n }\n });\n } catch (ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function (doc) {\n if (this.$doc) this.terminate();\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function (delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n\n if (delta.action == \"insert\") this.deltaQueue.push(delta.start, delta.lines);else this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function () {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else this.emit(\"change\", {\n data: q\n });\n };\n }).call(WorkerClient.prototype);\n\n var UIWorkerClient = function UIWorkerClient(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function terminate() {},\n postMessage: function postMessage(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync) setTimeout(processNext);else processNext();\n }\n });\n\n workerClient.setEmitSync = function (val) {\n emitSync = val;\n };\n\n var processNext = function processNext() {\n var msg = messageBuffer.shift();\n if (msg.command) main[msg.command].apply(main, msg.args);else if (msg.event) sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function (msg) {\n workerClient.onMessage({\n data: msg\n });\n };\n\n sender.callback = function (data, callbackId) {\n this.postMessage({\n type: \"call\",\n id: callbackId,\n data: data\n });\n };\n\n sender.emit = function (name, data) {\n this.postMessage({\n type: \"event\",\n name: name,\n data: data\n });\n };\n\n config.loadModule([\"worker\", mod], function (Main) {\n main = new Main[classname](sender);\n\n while (messageBuffer.length) {\n processNext();\n }\n });\n return workerClient;\n };\n\n exports.UIWorkerClient = UIWorkerClient;\n exports.WorkerClient = WorkerClient;\n exports.createWorker = createWorker;\n});\nace.define(\"ace/placeholder\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var oop = require(\"./lib/oop\");\n\n var PlaceHolder = function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {\n length: -1\n };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setup = function () {\n var _self = this;\n\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode) session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n\n this.showOtherMarkers = function () {\n if (this.othersActive) return;\n var session = this.session;\n\n var _self = this;\n\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n\n this.hideOtherMarkers = function () {\n if (!this.othersActive) return;\n this.othersActive = false;\n\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n\n this.onUpdate = function (delta) {\n if (this.$updating) return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange) this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n\n this.$updating = false;\n this.updateMarkers();\n };\n\n this.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n\n for (var i = this.others.length; i--;) {\n this.others[i].onChange(delta);\n }\n\n this.updateMarkers();\n };\n\n this.updateMarkers = function () {\n if (this.$updating) return;\n\n var _self = this;\n\n var session = this.session;\n\n var updateMarker = function updateMarker(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n\n updateMarker(this.pos, this.mainClass);\n\n for (var i = this.others.length; i--;) {\n updateMarker(this.others[i], this.othersClass);\n }\n };\n\n this.onCursorChange = function (event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n\n this._emit(\"cursorLeave\", event);\n }\n };\n\n this.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n\n this.cancel = function () {\n if (this.$undoStackDepth === -1) return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n\n if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore);\n };\n }).call(PlaceHolder.prototype);\n exports.PlaceHolder = PlaceHolder;\n});\nace.define(\"ace/mouse/multi_select_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n\n function onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac) button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode();\n return;\n }\n\n if (button !== 0) return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || selection.isEmpty() && isSamePoint(pos, cursor);\n var mouseX = e.x,\n mouseY = e.y;\n\n var onMouseSelection = function onMouseSelection(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt) selectionMode = shift ? \"block\" : \"add\";else if (alt && editor.$blockSelectEnabled) selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift) return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection) return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor);else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n\n var blockSelect = function blockSelect() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n\n if (shift) screenAnchor = session.documentToScreenPosition(selection.lead);else selection.moveToPosition(pos);\n screenCursor = {\n row: -1,\n column: -1\n };\n\n var onMouseSelectionEnd = function onMouseSelectionEnd(e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length) rectSel = [selection.toOrientedRange()];\n\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n\n for (var i = 0; i < rectSel.length; i++) {\n selection.addRange(rectSel[i]);\n }\n\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () {\n onSelectionInterval();\n }, 20);\n return e.preventDefault();\n }\n }\n\n exports.onMouseDown = onMouseDown;\n});\nace.define(\"ace/commands/multi_select_commands\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\"], function (require, exports, module) {\n exports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function exec(editor) {\n editor.selectMoreLines(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Up\",\n mac: \"Ctrl-Alt-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function exec(editor) {\n editor.selectMoreLines(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Down\",\n mac: \"Ctrl-Alt-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function exec(editor) {\n editor.selectMoreLines(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Up\",\n mac: \"Ctrl-Alt-Shift-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function exec(editor) {\n editor.selectMoreLines(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Down\",\n mac: \"Ctrl-Alt-Shift-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function exec(editor) {\n editor.selectMore(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Left\",\n mac: \"Ctrl-Alt-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function exec(editor) {\n editor.selectMore(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Right\",\n mac: \"Ctrl-Alt-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function exec(editor) {\n editor.selectMore(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Left\",\n mac: \"Ctrl-Alt-Shift-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function exec(editor) {\n editor.selectMore(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Right\",\n mac: \"Ctrl-Alt-Shift-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"splitIntoLines\",\n description: \"Split into lines\",\n exec: function exec(editor) {\n editor.multiSelect.splitIntoLines();\n },\n bindKey: {\n win: \"Ctrl-Alt-L\",\n mac: \"Ctrl-Alt-L\"\n },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function exec(editor) {\n editor.alignCursors();\n },\n bindKey: {\n win: \"Ctrl-Alt-A\",\n mac: \"Ctrl-Alt-A\"\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function exec(editor) {\n editor.findAll();\n },\n bindKey: {\n win: \"Ctrl-Alt-K\",\n mac: \"Ctrl-Alt-G\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\n exports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function exec(editor) {\n editor.exitMultiSelectMode();\n },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function isAvailable(editor) {\n return editor && editor.inMultiSelectMode;\n }\n }];\n\n var HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\n\n exports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n});\nace.define(\"ace/multi_select\", [\"require\", \"exports\", \"module\", \"ace/range_list\", \"ace/range\", \"ace/selection\", \"ace/mouse/multi_select_handler\", \"ace/lib/event\", \"ace/lib/lang\", \"ace/commands/multi_select_commands\", \"ace/search\", \"ace/edit_session\", \"ace/editor\", \"ace/config\"], function (require, exports, module) {\n var RangeList = require(\"./range_list\").RangeList;\n\n var Range = require(\"./range\").Range;\n\n var Selection = require(\"./selection\").Selection;\n\n var onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\n\n var event = require(\"./lib/event\");\n\n var lang = require(\"./lib/lang\");\n\n var commands = require(\"./commands/multi_select_commands\");\n\n exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\n\n var Search = require(\"./search\").Search;\n\n var search = new Search();\n\n function find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n }\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n (function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n }).call(EditSession.prototype);\n (function () {\n this.ranges = null;\n this.rangeList = null;\n\n this.addRange = function (range, $blockChangeEvents) {\n if (!range) return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor) range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length) this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length) this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length) this.$onRemoveRange(removed);\n };\n\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n\n this._signal(\"addRange\", {\n range: range\n });\n };\n\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {\n ranges: removed\n });\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n\n this._signal(\"singleSelect\");\n\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange);\n };\n\n this.$initRangeList = function () {\n if (this.rangeList) return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n\n if (startRow == endRow) {\n if (isBackwards) var start = range.end,\n end = range.start;else var start = range.start,\n end = range.end;\n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++) {\n rectSel.push(this.getLineRange(i, true));\n }\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n rectSel.forEach(this.addRange, this);\n }\n };\n\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0) startColumn = 0;\n if (startRow < 0) startRow = 0;\n if (startRow == endRow) includeEmptyLines = true;\n var docEnd;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd)) break;\n docEnd = range.end;\n }\n\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards) rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n\n while (rectSel[end].isEmpty() && end > 0) {\n end--;\n }\n\n if (end > 0) {\n var start = 0;\n\n while (rectSel[start].isEmpty()) {\n start++;\n }\n }\n\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty()) rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n }).call(Selection.prototype);\n\n var Editor = require(\"./editor\").Editor;\n\n (function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n\n this.removeSelectionMarker = function (range) {\n if (!range.marker) return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1) this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker) continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1) markerList.splice(index, 1);\n }\n\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode) return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode) return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect) return;\n\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n\n return result;\n };\n\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode) return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) {\n i--;\n }\n }\n\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined) result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0]) selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from);\n return result;\n };\n\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function () {\n var text = \"\";\n\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length) text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n\n return text;\n };\n\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) return;\n var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor;\n if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());else this.multiSelect.mergeOverlappingRanges();\n }\n };\n\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n\n if (options.needle == undefined) {\n var range = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length) return 0;\n var selection = this.multiSelect;\n if (!additive) selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--;) {\n selection.addRange(ranges[i], true);\n }\n\n if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true);\n return ranges.length;\n };\n\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip) var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove) this.selection.substractPoint(toRemove);\n };\n\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--;) {\n var range = all[i];\n\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n\n sel.mergeOverlappingRanges();\n var words = [];\n\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0) words.unshift(words.pop());else words.push(words.shift());\n\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n\n sel.fromOrientedRange(sel.ranges[0]);\n };\n\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst) return;\n }\n\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n\n if (skip) this.multiSelect.substractPoint(range.cursor);\n };\n\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row) return true;\n row = r.cursor.row;\n });\n\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row,\n lr = range.end.row;\n var guessRange = fr == lr;\n\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n\n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({\n row: fr,\n column: 0\n }, lines.join(\"\\n\") + \"\\n\");\n\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1) spaceOffset = 0;\n if (p.column > maxCol) maxCol = p.column;\n if (spaceOffset < minSpace) minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d) session.insert(p, lang.stringRepeat(\" \", l - d));else session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true,\n isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m) return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false;\n if (startW != m[1].length) isLeftAligned = false;\n if (startW > m[1].length) startW = m[1].length;\n if (textW < m[2].length) textW = m[2].length;\n if (endW > m[3].length) endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n }).call(Editor.prototype);\n\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n\n exports.onSessionChange = function (e) {\n var session = e.session;\n\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode) this.$onMultiSelect();else this.$onSingleSelect();\n }\n };\n\n function MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange) return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n }\n\n function addAltCursorListeners(editor) {\n if (!editor.textInput) return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n });\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n }\n\n exports.MultiSelect = MultiSelect;\n\n require(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function set(val) {\n MultiSelect(this);\n\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function set(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n });\n});\nace.define(\"ace/mode/folding/fold_mode\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../../range\").Range;\n\n var FoldMode = exports.FoldMode = function () {};\n\n (function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line)) return \"start\";\n if (foldStyle == \"markbeginend\" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1) return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1) continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\") break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = {\n row: row,\n column: column + 1\n };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end) return;\n var fw = session.foldWidgets[end.row];\n if (fw == null) fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = {\n row: row,\n column: column\n };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start) return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n }).call(FoldMode.prototype);\n});\nace.define(\"ace/theme/textmate\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n exports.isDark = false;\n exports.cssClass = \"ace-tm\";\n exports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n exports.$id = \"ace/theme/textmate\";\n\n var dom = require(\"../lib/dom\");\n\n dom.importCssString(exports.cssText, exports.cssClass);\n});\nace.define(\"ace/line_widgets\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var Range = require(\"./range\").Range;\n\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n\n (function () {\n this.getRowLength = function (row) {\n var h;\n if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else h = 0;\n\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden) screenRows += w.rowCount;\n });\n return screenRows;\n };\n\n this.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n\n this.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach();\n if (this.editor == editor) return;\n this.detach();\n this.editor = editor;\n\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n\n this.detach = function (e) {\n var editor = this.editor;\n if (!editor) return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action) return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i]) lineWidgets[i].hidden = hide;\n }\n\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start]) lineWidgets[start] = lineWidgets[end];else lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end]) lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n\n this.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {} else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n\n this.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets) this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function (w) {\n if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n\n if (old) {\n w.$oldWidget = old;\n\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n\n this.session.lineWidgets[w.row] = w;\n w.session = this.session;\n var renderer = this.editor.renderer;\n\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n\n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row]) lineWidgets[fold.start.row] = w;else w.hidden = true;\n }\n\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n\n this.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode) w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch (e) {}\n\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget) this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n\n w1 = w1.$oldWidget;\n }\n }\n }\n\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n\n this.$updateRows();\n };\n\n this.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n\n return list;\n };\n\n this.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n\n this.editor && this.editor.renderer.updateFull();\n };\n\n this.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w) continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n\n w.h = w.el.offsetHeight;\n\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n\n var rowCount = w.h / config.lineHeight;\n\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0) rowCount = 0;\n }\n\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min) min = w.row;\n }\n }\n\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: min\n }\n }\n });\n\n this.session.lineWidgetWidth = null;\n }\n\n this.session._changedWidgets = [];\n };\n\n this.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n\n while (first > 0 && !lineWidgets[first]) {\n first--;\n }\n\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n\n var top = renderer.$cursorLayer.getPixelPosition({\n row: i,\n column: 0\n }, true).top;\n if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth) left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n }).call(LineWidgets.prototype);\n exports.LineWidgets = LineWidgets;\n});\nace.define(\"ace/ext/error_marker\", [\"require\", \"exports\", \"module\", \"ace/line_widgets\", \"ace/lib/dom\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var LineWidgets = require(\"../line_widgets\").LineWidgets;\n\n var dom = require(\"../lib/dom\");\n\n var Range = require(\"../range\").Range;\n\n function binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = first + last >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0) first = mid + 1;else if (c < 0) last = mid - 1;else return mid;\n }\n\n return -(first + 1);\n }\n\n function findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length) return;\n var i = binarySearch(annotations, {\n row: row,\n column: -1\n }, Range.comparePoints);\n if (i < 0) i = -i - 1;\n if (i >= annotations.length) i = dir > 0 ? 0 : annotations.length - 1;else if (i === 0 && dir < 0) i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir) return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n\n if (!annotation) return annotations.slice();\n }\n\n var matched = [];\n row = annotation.row;\n\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n\n return matched.length && matched;\n }\n\n exports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\" ? annotation.pos.sc : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer.getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n el.appendChild(dom.createElement(\"div\"));\n\n var kb = function kb(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {\n command: \"null\"\n };\n }\n };\n\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed) return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, {\n bottom: w.el.offsetHeight\n });\n };\n\n dom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n});\nace.define(\"ace/ace\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/range\", \"ace/editor\", \"ace/edit_session\", \"ace/undomanager\", \"ace/virtual_renderer\", \"ace/worker/worker_client\", \"ace/keyboard/hash_handler\", \"ace/placeholder\", \"ace/multi_select\", \"ace/mode/folding/fold_mode\", \"ace/theme/textmate\", \"ace/ext/error_marker\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./lib/fixoldbrowsers\");\n\n var dom = require(\"./lib/dom\");\n\n var event = require(\"./lib/event\");\n\n var Range = require(\"./range\").Range;\n\n var Editor = require(\"./editor\").Editor;\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n var UndoManager = require(\"./undomanager\").UndoManager;\n\n var Renderer = require(\"./virtual_renderer\").VirtualRenderer;\n\n require(\"./worker/worker_client\");\n\n require(\"./keyboard/hash_handler\");\n\n require(\"./placeholder\");\n\n require(\"./multi_select\");\n\n require(\"./mode/folding/fold_mode\");\n\n require(\"./theme/textmate\");\n\n require(\"./ext/error_marker\");\n\n exports.config = require(\"./config\");\n exports.require = require;\n if (typeof define === \"function\") exports.define = define;\n\n exports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el) throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor) return el.env.editor;\n var value = \"\";\n\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function () {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n };\n\n exports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n };\n\n exports.Range = Range;\n exports.Editor = Editor;\n exports.EditSession = EditSession;\n exports.UndoManager = UndoManager;\n exports.VirtualRenderer = Renderer;\n exports.version = exports.config.version;\n});\n\n(function () {\n ace.require([\"ace/ace\"], function (a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n\n if (!window.ace) window.ace = a;\n\n for (var key in a) {\n if (a.hasOwnProperty(key)) window.ace[key] = a[key];\n }\n\n window.ace[\"default\"] = window.ace;\n\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n})();","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar editorOptions_1 = require(\"./editorOptions\");\n\nvar ace = editorOptions_1.getAceInstance();\n\nvar ace_builds_1 = require(\"ace-builds\");\n\nvar ext_split_1 = require(\"ace-builds/src-noconflict/ext-split\");\n\nvar PropTypes = require(\"prop-types\");\n\nvar React = require(\"react\");\n\nvar isEqual = require(\"lodash.isequal\");\n\nvar get = require(\"lodash.get\");\n\nvar SplitComponent =\n/** @class */\nfunction (_super) {\n __extends(SplitComponent, _super);\n\n function SplitComponent(props) {\n var _this = _super.call(this, props) || this;\n\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n\n SplitComponent.prototype.componentDidMount = function () {\n var _this = this;\n\n var _a = this.props,\n className = _a.className,\n onBeforeLoad = _a.onBeforeLoad,\n mode = _a.mode,\n focus = _a.focus,\n theme = _a.theme,\n fontSize = _a.fontSize,\n value = _a.value,\n defaultValue = _a.defaultValue,\n cursorStart = _a.cursorStart,\n showGutter = _a.showGutter,\n wrapEnabled = _a.wrapEnabled,\n showPrintMargin = _a.showPrintMargin,\n _b = _a.scrollMargin,\n scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b,\n keyboardHandler = _a.keyboardHandler,\n onLoad = _a.onLoad,\n commands = _a.commands,\n annotations = _a.annotations,\n markers = _a.markers,\n splits = _a.splits;\n this.editor = ace.edit(this.refEditor);\n\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n\n var editorProps = Object.keys(this.props.editorProps);\n var split = new ext_split_1.Split(this.editor.container, \"ace/theme/\" + theme, splits);\n this.editor.env.split = split;\n this.splitEditor = split.getEditor(0);\n this.split = split; // in a split scenario we don't want a print margin for the entire application\n\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false); // get a list of possible options to avoid 'misspelled option errors'\n\n var availableOptions = this.splitEditor.$options;\n\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n\n split.forEach(function (editor, index) {\n for (var i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = _this.props.editorProps[editorProps[i]];\n }\n\n var defaultValueForEditor = get(defaultValue, index);\n var valueForEditor = get(value, index, \"\");\n editor.session.setUndoManager(new ace.UndoManager());\n editor.setTheme(\"ace/theme/\" + theme);\n editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n editor.getSession().setMode(\"ace/mode/\" + mode);\n editor.setFontSize(fontSize);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on(\"focus\", _this.onFocus);\n editor.on(\"blur\", _this.onBlur);\n editor.on(\"input\", _this.onInput);\n editor.on(\"copy\", _this.onCopy);\n editor.on(\"paste\", _this.onPaste);\n editor.on(\"change\", _this.onChange);\n editor.getSession().selection.on(\"changeSelection\", _this.onSelectionChange);\n editor.getSession().selection.on(\"changeCursor\", _this.onCursorChange);\n editor.session.on(\"changeScrollTop\", _this.onScroll);\n editor.setValue(defaultValueForEditor === undefined ? valueForEditor : defaultValueForEditor, cursorStart);\n var newAnnotations = get(annotations, index, []);\n var newMarkers = get(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n\n if (newMarkers && newMarkers.length > 0) {\n _this.handleMarkers(newMarkers, editor);\n }\n\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n\n if (availableOptions.hasOwnProperty(option)) {\n editor.setOption(option, _this.props[option]);\n } else if (_this.props[option]) {\n console.warn(\"ReaceAce: editor option \" + option + \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\");\n }\n }\n\n _this.handleOptions(_this.props, editor);\n\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n editor.commands.addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n });\n\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n\n if (focus) {\n this.splitEditor.focus();\n }\n\n var sp = this.editor.env.split;\n sp.setOrientation(this.props.orientation === \"below\" ? sp.BELOW : sp.BESIDE);\n sp.resize(true);\n\n if (onLoad) {\n onLoad(sp);\n }\n };\n\n SplitComponent.prototype.componentDidUpdate = function (prevProps) {\n var _this = this;\n\n var oldProps = prevProps;\n var nextProps = this.props;\n var split = this.editor.env.split;\n\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(nextProps.orientation === \"below\" ? split.BELOW : split.BESIDE);\n }\n\n split.forEach(function (editor, index) {\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode(\"ace/mode/\" + nextProps.mode);\n }\n\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n } else {\n editor.setKeyboardHandler(null);\n }\n }\n\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize);\n }\n\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option, nextProps[option]);\n }\n }\n\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n _this.handleOptions(nextProps, editor);\n }\n\n var nextValue = get(nextProps.value, index, \"\");\n\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n _this.silent = true;\n var pos = editor.session.selection.toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n editor.session.selection.fromJSON(pos);\n _this.silent = false;\n }\n\n var newAnnotations = get(nextProps.annotations, index, []);\n var oldAnnotations = get(oldProps.annotations, index, []);\n\n if (!isEqual(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n\n var newMarkers = get(nextProps.markers, index, []);\n var oldMarkers = get(oldProps.markers, index, []);\n\n if (!isEqual(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n _this.handleMarkers(newMarkers, editor);\n }\n });\n\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className = \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n }\n\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n\n if (nextProps.height !== this.props.height || nextProps.width !== this.props.width) {\n this.editor.resize();\n }\n };\n\n SplitComponent.prototype.componentWillUnmount = function () {\n this.editor.destroy();\n this.editor = null;\n };\n\n SplitComponent.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value_1 = [];\n this.editor.env.split.forEach(function (editor) {\n value_1.push(editor.getValue());\n });\n this.props.onChange(value_1, event);\n }\n };\n\n SplitComponent.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value_2 = [];\n this.editor.env.split.forEach(function (editor) {\n value_2.push(editor.getSelection());\n });\n this.props.onSelectionChange(value_2, event);\n }\n };\n\n SplitComponent.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value_3 = [];\n this.editor.env.split.forEach(function (editor) {\n value_3.push(editor.getSelection());\n });\n this.props.onCursorChange(value_3, event);\n }\n };\n\n SplitComponent.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n SplitComponent.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n };\n\n SplitComponent.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n SplitComponent.prototype.onCopy = function (text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n\n SplitComponent.prototype.onPaste = function (text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n\n SplitComponent.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n\n SplitComponent.prototype.handleOptions = function (props, editor) {\n var setOptions = Object.keys(props.setOptions);\n\n for (var y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n\n SplitComponent.prototype.handleMarkers = function (markers, editor) {\n // remove foreground markers\n var currentMarkers = editor.getSession().getMarkers(true);\n\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n } // remove background markers\n\n\n currentMarkers = editor.getSession().getMarkers(false);\n\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n } // add new markers\n\n\n markers.forEach(function (_a) {\n var startRow = _a.startRow,\n startCol = _a.startCol,\n endRow = _a.endRow,\n endCol = _a.endCol,\n className = _a.className,\n type = _a.type,\n _b = _a.inFront,\n inFront = _b === void 0 ? false : _b;\n var range = new ace_builds_1.Range(startRow, startCol, endRow, endCol);\n editor.getSession().addMarker(range, className, type, inFront);\n });\n };\n\n SplitComponent.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n\n SplitComponent.prototype.render = function () {\n var _a = this.props,\n name = _a.name,\n width = _a.width,\n height = _a.height,\n style = _a.style;\n\n var divStyle = __assign({\n width: width,\n height: height\n }, style);\n\n return React.createElement(\"div\", {\n ref: this.updateRef,\n id: name,\n style: divStyle\n });\n };\n\n SplitComponent.propTypes = {\n className: PropTypes.string,\n debounceChangePeriod: PropTypes.number,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n focus: PropTypes.bool,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n height: PropTypes.string,\n mode: PropTypes.string,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n orientation: PropTypes.string,\n showGutter: PropTypes.bool,\n splits: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.arrayOf(PropTypes.string),\n width: PropTypes.string,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n enableLiveAutocompletion: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n commands: PropTypes.array\n };\n SplitComponent.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n orientation: \"beside\",\n splits: 2,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n };\n return SplitComponent;\n}(React.Component);\n\nexports.default = SplitComponent;","ace.define(\"ace/mode/python_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var PythonHighlightRules = function PythonHighlightRules() {\n var keywords = \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" + \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" + \"raise|return|try|while|with|yield|async|await|nonlocal\";\n var builtinConstants = \"True|False|None|NotImplemented|Ellipsis|__debug__\";\n var builtinFunctions = \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" + \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" + \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" + \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" + \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" + \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" + \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" + \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" + \"ascii|breakpoint|bytes\";\n var keywordMapper = this.createKeywordMapper({\n \"invalid.deprecated\": \"debugger\",\n \"support.function\": builtinFunctions,\n \"variable.language\": \"self|cls\",\n \"constant.language\": builtinConstants,\n \"keyword\": keywords\n }, \"identifier\");\n var strPre = \"[uU]?\";\n var strRawPre = \"[rR]\";\n var strFormatPre = \"[fF]\";\n var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n var octInteger = \"(?:0[oO]?[0-7]+)\";\n var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n var binInteger = \"(?:0[bB][01]+)\";\n var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n var exponent = \"(?:[eE][+-]?\\\\d+)\";\n var fraction = \"(?:\\\\.\\\\d+)\";\n var intPart = \"(?:\\\\d+)\";\n var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"#.*$\"\n }, {\n token: \"string\",\n // multi line \"\"\" string start\n regex: strPre + '\"{3}',\n next: \"qqstring3\"\n }, {\n token: \"string\",\n // \" string\n regex: strPre + '\"(?=.)',\n next: \"qqstring\"\n }, {\n token: \"string\",\n // multi line ''' string start\n regex: strPre + \"'{3}\",\n next: \"qstring3\"\n }, {\n token: \"string\",\n // ' string\n regex: strPre + \"'(?=.)\",\n next: \"qstring\"\n }, {\n token: \"string\",\n regex: strRawPre + '\"{3}',\n next: \"rawqqstring3\"\n }, {\n token: \"string\",\n regex: strRawPre + '\"(?=.)',\n next: \"rawqqstring\"\n }, {\n token: \"string\",\n regex: strRawPre + \"'{3}\",\n next: \"rawqstring3\"\n }, {\n token: \"string\",\n regex: strRawPre + \"'(?=.)\",\n next: \"rawqstring\"\n }, {\n token: \"string\",\n regex: strFormatPre + '\"{3}',\n next: \"fqqstring3\"\n }, {\n token: \"string\",\n regex: strFormatPre + '\"(?=.)',\n next: \"fqqstring\"\n }, {\n token: \"string\",\n regex: strFormatPre + \"'{3}\",\n next: \"fqstring3\"\n }, {\n token: \"string\",\n regex: strFormatPre + \"'(?=.)\",\n next: \"fqstring\"\n }, {\n token: \"string\",\n regex: strRawFormatPre + '\"{3}',\n next: \"rfqqstring3\"\n }, {\n token: \"string\",\n regex: strRawFormatPre + '\"(?=.)',\n next: \"rfqqstring\"\n }, {\n token: \"string\",\n regex: strRawFormatPre + \"'{3}\",\n next: \"rfqstring3\"\n }, {\n token: \"string\",\n regex: strRawFormatPre + \"'(?=.)\",\n next: \"rfqstring\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"punctuation\",\n regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\[\\\\(\\\\{]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\]\\\\)\\\\}]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n include: \"constants\"\n }],\n \"qqstring3\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n // multi line \"\"\" string end\n regex: '\"{3}',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"qstring3\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n // multi line ''' string end\n regex: \"'{3}\",\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"qqstring\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"qqstring\"\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"qstring\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"qstring\"\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"rawqqstring3\": [{\n token: \"string\",\n // multi line \"\"\" string end\n regex: '\"{3}',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"rawqstring3\": [{\n token: \"string\",\n // multi line ''' string end\n regex: \"'{3}\",\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"rawqqstring\": [{\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"rawqqstring\"\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"rawqstring\": [{\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"rawqstring\"\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"fqqstring3\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n // multi line \"\"\" string end\n regex: '\"{3}',\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"fqstring3\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n // multi line ''' string end\n regex: \"'{3}\",\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"fqqstring\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"fqqstring\"\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"fqstring\": [{\n token: \"constant.language.escape\",\n regex: stringEscape\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"rfqqstring3\": [{\n token: \"string\",\n // multi line \"\"\" string end\n regex: '\"{3}',\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"rfqstring3\": [{\n token: \"string\",\n // multi line ''' string end\n regex: \"'{3}\",\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"rfqqstring\": [{\n token: \"string\",\n regex: \"\\\\\\\\$\",\n next: \"rfqqstring\"\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"rfqstring\": [{\n token: \"string\",\n regex: \"'|$\",\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: \"{\",\n push: \"fqstringParRules\"\n }, {\n defaultToken: \"string\"\n }],\n \"fqstringParRules\": [{\n //TODO: nested {}\n token: \"paren.lparen\",\n regex: \"[\\\\[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\]\\\\)]\"\n }, {\n token: \"string\",\n regex: \"\\\\s+\"\n }, {\n token: \"string\",\n regex: \"'(.)*'\"\n }, {\n token: \"string\",\n regex: '\"(.)*\"'\n }, {\n token: \"function.support\",\n regex: \"(!s|!r|!a)\"\n }, {\n include: \"constants\"\n }, {\n token: 'paren.rparen',\n regex: \"}\",\n next: 'pop'\n }, {\n token: 'paren.lparen',\n regex: \"{\",\n push: \"fqstringParRules\"\n }],\n \"constants\": [{\n token: \"constant.numeric\",\n // imaginary\n regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n }, {\n token: \"constant.numeric\",\n // float\n regex: floatNumber\n }, {\n token: \"constant.numeric\",\n // long integer\n regex: integer + \"[lL]\\\\b\"\n }, {\n token: \"constant.numeric\",\n // integer\n regex: integer + \"\\\\b\"\n }, {\n token: [\"punctuation\", \"function.support\"],\n // method\n regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }]\n };\n this.normalizeRules();\n };\n\n oop.inherits(PythonHighlightRules, TextHighlightRules);\n exports.PythonHighlightRules = PythonHighlightRules;\n});\nace.define(\"ace/mode/folding/pythonic\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/folding/fold_mode\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (markers) {\n this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n };\n\n oop.inherits(FoldMode, BaseFoldMode);\n (function () {\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n var line = session.getLine(row);\n var match = line.match(this.foldingStartMarker);\n\n if (match) {\n if (match[1]) return this.openingBracketBlock(session, match[1], row, match.index);\n if (match[2]) return this.indentationBlock(session, row, match.index + match[2].length);\n return this.indentationBlock(session, row);\n }\n };\n }).call(FoldMode.prototype);\n});\nace.define(\"ace/mode/python\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text\", \"ace/mode/python_highlight_rules\", \"ace/mode/folding/pythonic\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\n var PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\n\n var Range = require(\"../range\").Range;\n\n var Mode = function Mode() {\n this.HighlightRules = PythonHighlightRules;\n this.foldingRules = new PythonFoldMode(\"\\\\:\");\n this.$behaviour = this.$defaultBehaviour;\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.lineCommentStart = \"#\";\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n var outdents = {\n \"pass\": 1,\n \"return\": 1,\n \"raise\": 1,\n \"break\": 1,\n \"continue\": 1\n };\n\n this.checkOutdent = function (state, line, input) {\n if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\") return false;\n var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n if (!tokens) return false;\n\n do {\n var last = tokens.pop();\n } while (last && (last.type == \"comment\" || last.type == \"text\" && last.value.match(/^\\s+$/)));\n\n if (!last) return false;\n return last.type == \"keyword\" && outdents[last.value];\n };\n\n this.autoOutdent = function (state, doc, row) {\n row += 1;\n var indent = this.$getIndent(doc.getLine(row));\n var tab = doc.getTabString();\n if (indent.slice(-tab.length) == tab) doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n };\n\n this.$id = \"ace/mode/python\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\n\n(function () {\n ace.require([\"ace/mode/python\"], function (m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","ace.define(\"ace/theme/dracula\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n exports.isDark = true;\n exports.cssClass = \"ace-dracula\";\n exports.cssText = \"\\\n.ace-dracula .ace_gutter {\\\nbackground: #282a36;\\\ncolor: rgb(144,145,148)\\\n}\\\n.ace-dracula .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #44475a\\\n}\\\n.ace-dracula {\\\nbackground-color: #282a36;\\\ncolor: #f8f8f2\\\n}\\\n.ace-dracula .ace_cursor {\\\ncolor: #f8f8f0\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selection {\\\nbackground: #44475a\\\n}\\\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #282a36;\\\nborder-radius: 2px\\\n}\\\n.ace-dracula .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-dracula .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #a29709\\\n}\\\n.ace-dracula .ace_marker-layer .ace_active-line {\\\nbackground: #44475a\\\n}\\\n.ace-dracula .ace_gutter-active-line {\\\nbackground-color: #44475a\\\n}\\\n.ace-dracula .ace_marker-layer .ace_selected-word {\\\nbox-shadow: 0px 0px 0px 1px #a29709;\\\nborder-radius: 3px;\\\n}\\\n.ace-dracula .ace_fold {\\\nbackground-color: #50fa7b;\\\nborder-color: #f8f8f2\\\n}\\\n.ace-dracula .ace_keyword {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_language {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_numeric {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_constant.ace_character.ace_escape {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_constant.ace_other {\\\ncolor: #bd93f9\\\n}\\\n.ace-dracula .ace_support.ace_function {\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_support.ace_constant {\\\ncolor: #6be5fd\\\n}\\\n.ace-dracula .ace_support.ace_class {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66d9ef\\\n}\\\n.ace-dracula .ace_storage {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_storage.ace_type {\\\nfont-style: italic;\\\ncolor: #8be9fd\\\n}\\\n.ace-dracula .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #ff79c6\\\n}\\\n.ace-dracula .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #bd93f9\\\n}\\\n.ace-dracula .ace_string {\\\ncolor: #f1fa8c\\\n}\\\n.ace-dracula .ace_comment {\\\ncolor: #6272a4\\\n}\\\n.ace-dracula .ace_variable {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #ffb86c\\\n}\\\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_function {\\\ncolor: #50fa7b\\\n}\\\n.ace-dracula .ace_entity.ace_name.ace_tag {\\\ncolor: #ff79c6\\\n}\\\n.ace-dracula .ace_invisible {\\\ncolor: #626680;\\\n}\\\n.ace-dracula .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n exports.$selectionColorConflict = true;\n\n var dom = require(\"../lib/dom\");\n\n dom.importCssString(exports.cssText, exports.cssClass);\n});\n\n(function () {\n ace.require([\"ace/theme/dracula\"], function (m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n})();"],"sourceRoot":""}