{"version":3,"sources":["webpack:///./behaviors/shortcuts/shortcuts_network.js","webpack:///./network/raphael.js","webpack:///./network/branch_graph.js","webpack:///./pages/projects/network/network.js","webpack:///./pages/projects/network/show/index.js","webpack:///./behaviors/shortcuts/shortcuts_navigation.js","webpack:///./project_select_combo_button.js","webpack:///./project_select.js","webpack:///./pages/projects/project.js","webpack:///./pages/projects/index.js","webpack:////builds/gitlab/gitlabhq/node_modules/raphael/raphael.js"],"names":["ShortcutsNetwork","graph","_this","_classCallCheck","this","_possibleConstructorReturn","_getPrototypeOf","call","Mousetrap","bind","scrollLeft","scrollRight","scrollUp","scrollDown","scrollTop","scrollBottom","enabledHelp","push","ShortcutsNavigation","Raphael","prototype","commitTooltip","x","y","commit","icon","image","gon","relative_url_root","author","nameText","text","name","idText","id","messageText","message","replace","textSet","set","attr","text-anchor","font","font-weight","fill","node","style","textWrap","boxWidth","rect","stroke","stroke-linecap","stroke-width","tooltip","height","getBBox","width","transform","t","content","abc","letterWidth","length","words","split","s","j","len","word","concat","join","trim","b","h","Math","abs","y2","branch_graph","BranchGraph","element1","options1","element","options","preparedCommits","mtime","mspace","parents","colors","offsetX","offsetY","unitTime","unitSpace","prev_start","load","_this2","axios","get","url","then","_ref","data","$","hide","prepareData","days","commits","buildGraph","catch","__","c","ch","cw","ref","collectParents","graphHeight","graphWidth","max","r","top","barHeight","isParent","markCommit","collectColors","p","results","time","space","l","len1","ref1","results1","k","getColor","cuday","cumonth","day","mm","_slicedToArray","renderPartialGraph","bindEvents","end","i","isGraphEdge","start","floor","hasDrawn","drawDot","drawLines","appendLabel","appendAnchor","toFront","scroll","event","find","shortrefs","textbox","refs","substr","title","fill-opacity","path","anchor","circle","opacity","cursor","click","window","open","commit_url","hover","insertBefore","remove","avatar_box_x","avatar_box_y","arrow","color","offset","parent","parentCommit","parentX1","parentX2","parentY","route","commit_id","network","opts","vph","closest","submit","css","document","addEventListener","networkGraph","Network","findAndFollowLink","Shortcuts","ProjectSelectComboButton","select","projectSelectInput","newItemBtn","resourceType","resourceLabel","formattedText","deriveTextVariants","groupId","initLocalStorage","siblings","on","e","openDropdown","getProjectFromLocalStorage","preventDefault","selectProject","AccessorUtilities","isLocalStorageAccessSafe","localStorageKey","localStorageItemType","setBtnTextFromLocalStorage","currentTarget","select2","selectedProjectData","JSON","parse","val","projectMeta","setNewItemBtnAttributes","setProjectInLocalStorage","cachedProjectData","project","defaultTextPrefix","presetTextSuffix","projectString","localStorage","getItem","stringify","setItem","slice","projectSelect","each","placeholder","simpleFilter","includeGroups","allProjects","orderBy","withIssuesEnabled","withMergeRequestsEnabled","withShared","undefined","includeProjectsInSubgroups","allowClear","minimumInputLength","query","finalCallback","projectsCallback","projects","callback","groupsCallback","groups","Api","term","groupProjects","with_issues_enabled","with_merge_requests_enabled","with_shared","include_subgroups","order_by","membership","web_url","name_with_namespace","initSelection","el","dropdownCssClass","__webpack_require__","d","__webpack_exports__","Project","$cloneOptions","$projectCloneField","$cloneBtnLabel","mobileCloneField","querySelector","selectedCloneOption","addClass","$this","cloneType","removeClass","$el","activeText","$label","toggleClass","dataset","clipboardText","initRefSwitcher","Cookies","projectId","cookieKey","projectSelectDropdown","changeProject","location","refListItem","createElement","refLink","href","$dropdown","selected","glDropdown","params","search","flash","selectable","filterable","filterRemote","filterByText","inputFieldName","fieldName","renderRow","li","cloneNode","header","className","textContent","link","appendChild","obj","toggleLabel","clicked","$form","$visit","shouldVisit","action","divider","indexOf","visitUrl","serialize","_dismissable_callout__WEBPACK_IMPORTED_MODULE_0__","_projects_gke_cluster_dropdowns__WEBPACK_IMPORTED_MODULE_1__","_project__WEBPACK_IMPORTED_MODULE_2__","_behaviors_shortcuts_shortcuts_navigation__WEBPACK_IMPORTED_MODULE_3__","page","body","initDismissableCallout","initGkeDropdowns","factory","modules","installedModules","moduleId","exports","module","loaded","m","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","R","apply","eve","first","is","array","_engine","create","splice","nu","add","args","Array","arguments","f","pop","version","paperproto","separator","elements","ellipse","formatrg","has","g","doc","win","oldRaphael","was","Object","Paper","ca","customAttributes","supportsTouch","DocumentTouch","E","S","Str","String","events","touchMap","mousedown","mousemove","mouseup","lowerCase","toLowerCase","math","mmax","mmin","min","pow","PI","objectToString","toString","colourRegExp","_ISURL","isnan","NaN","Infinity","-Infinity","bezierrg","round","toFloat","parseFloat","toInt","parseInt","upperCase","toUpperCase","availableAttrs","_availableAttrs","arrow-end","arrow-start","blur","clip-rect","cx","cy","font-family","font-size","font-style","gradient","letter-spacing","rx","ry","src","stroke-dasharray","stroke-linejoin","stroke-miterlimit","stroke-opacity","target","class","availableAnimAttrs","_availableAnimAttrs","commaSpaces","hsrg","hs","rg","p2s","pathCommand","tCommand","pathValues","eldata","_radial_gradient","sortByNumber","a","pipe","rectPath","_rectPath","w","ellipsePath","getPath","_getPath","attrs","bbox","_getBBox","mapPath","matrix","ii","jj","pathi","path2curve","_g","type","SVGAngle","implementation","hasFeature","innerHTML","firstChild","behavior","adj","clone","res","constructor","key","svg","vml","_Paper","fn","_id","o","isArray","angle","x1","y1","x2","x3","y3","atan2","rad","deg","snapTo","values","value","tolerance","rem","uuidRegEx","uuidReplacer","createUUID","random","setWindow","newwin","initWin","toHex","bod","docum","ActiveXObject","write","close","createPopup","range","createTextRange","cacher","queryCommandValue","display","defaultView","getComputedStyle","getPropertyValue","hsbtoString","hsltoString","rgbtoString","hex","prepareRGB","clr","getRGB","packageRGB","rgb","scope","postprocessor","newf","arg","cache","count","item","repush","shift","hsb2rgb","hsl2rgb","rgb2hsl","rgb2hsb","v","G","B","X","C","V","L","M","_path2string","_preload","img","cssText","onload","removeChild","onerror","clrToString","catmullRom2bezier","crp","z","iLen","colour","error","substring","charAt","red","green","blue","match","hsb","hsl","reset","parsePathString","pathString","pth","paths","arr","pathClone","paramCounts","q","parseTransformString","TString","ps","sleep","setTimeout","base3","p1","p2","p3","p4","bezlen","x4","y4","z2","Tvalues","Cvalues","sum","ct","xbase","ybase","comb","sqrt","intersect","denominator","px","py","px2","toFixed","py2","interHelper","bez1","bez2","justCount","bbox1","bezierBBox","bbox2","isBBoxIntersect","l1","l2","n1","n2","dots1","dots2","xy","findDotsAtSegment","di","di1","dj","dj1","ci","cj","t1","t2","interPathHelper","path1","path2","_path2curve","x1m","y1m","x2m","y2m","pi","pj","intr","kk","segment1","segment2","p1x","p1y","c1x","c1y","c2x","c2y","p2x","p2y","t13","t12","t3","mx","my","nx","ny","ax","ay","alpha","n","curveDim","isPointInsideBBox","pathIntersection","pathIntersectionNumber","isPointInsidePath","pathBBox","_removedFactory","methodname","pathDimensions","Y","dim","xmin","ymin","xmax","ymax","bb","pathArray","pathToRelative","_pathToRelative","rel","pa","pathToAbsolute","_pathToAbsolute","crz","dots","l2c","q2c","a2c","large_arc_flag","sweep_flag","recursive","_120","rotate","cos","sin","f1","f2","rx2","ry2","asin","df","f2old","x2old","y2old","c1","s1","c2","s2","tan","hx","hy","m1","m2","m3","m4","newres","findDotAtSegment","dot","curve","bx","by","qx","qy","attrs2","processPath","pcom","T","Q","fixArc","pp","pcoms1","pcoms2","fixM","a1","a2","pfirst","seg","seg2","seglen","seg2len","tear","_parseDots","par","_tear","paper","prev","bottom","next","toMatrix","_tofront","_toback","_insertafter","el2","_insertbefore","_","extractTransform","transformPath","_extractTransform","tstr","dx","dy","tdata","sx","sy","Matrix","tlen","command","absolute","inver","invert","translate","scale","dirtyT","getEmpty","equaliseTransform","_equaliseTransform","tt1","tt2","maxlength","from","to","_getContainer","container","getElementById","tagName","pixelWidth","offsetWidth","pixelHeight","offsetHeight","matrixproto","norm","normalize","mag","out","me","fromCharCode","toFilter","row","scalex","shear","scaley","acos","isSimple","isSuperSimple","noRotation","toTransformString","shorter","returnValue","preventTouch","originalEvent","stopPropagation","cancelBubble","stopTouch","getEventPosition","scrollY","documentElement","scrollX","clientX","clientY","addEvent","pos","_f","olde","targetTouches","removeEventListener","attachEvent","detachEvent","drag","dragMove","dragi","touches","touch","identifier","_drag","nextSibling","parentNode","opera","getElementByPoint","move_scope","dragUp","unmousemove","unmouseup","end_scope","start_scope","elproto","eventName","unbind","shape","removeData","getData","f_in","f_out","scope_in","scope_out","mouseover","mouseout","unhover","unmouseover","unmouseout","draggable","onmove","onstart","onend","onDragOver","undrag","unmousedown","__set__","format","itemsArray","Set","setStart","setFinish","getSize","canvas","setSize","setViewBox","fit","raphael","x_y_w_h","elem","box","docElem","clientTop","clientLeft","elementFromPoint","so","getBoundingClientRect","ownerDocument","pageYOffset","left","pageXOffset","sr","createSVGRect","hits","getIntersectionList","getById","raphaelid","getElementsByBBox","forEach","bot","thisArg","getElementsByPoint","isPointInside","rp","realPath","isWithoutTransform","removed","dirty","bboxwt","glow","offsetx","offsety","getPointAtSegmentLength","ll","step","getTatLen","getLengthFactory","istotal","subpath","onlystart","point","sp","subpaths","getTotalLength","getPointAtLength","getSubpathsAtLength","getSubpath","ef","easing_formulas","linear","<",">","<>","backIn","backOut","elastic","bounce","easeIn","easeOut","easeInOut","animationElements","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animation","Now","Date","paused","now","ms","easing","diff","that","init","initstatus","anim","percent","status","stop","upto255","real","from2","repeat","totalOrigin","runAnimation","percents","CubicBezierAtTime","duration","sampleCurveX","epsilon","t0","d2","solveCurveX","solve","Animation","newAnim","times","sort","isInAnim","isInAnimSet","timestamp","toColour","pathes","toPath","eq","to2","easyeasy","del","origin","stopAnimation","animateWith","onAnimation","delay","json","100","lastKey","animate","setTime","pause","resume","tokenRegex","objNotationRegex","items","setproto","method","clear","index","insertion","tail","todel","arglen","exclude","collector","insertAfter","glowConfig","ret","shape2","index2","registerFont","face","fonts","fontcopy","glyphs","family","prop","glyph","getFont","weight","stretch","normal","bold","lighter","bolder","thefont","RegExp","fontName","test","print","string","size","letter_spacing","line_spacing","letters","notfirst","lineHeight","shifty","descent","curr","token","str","fullfill","all","quote","quotedName","isFunc","replacer","ninja","st","readyState","isLoaded","current_event","comaseparator","numsort","firstDefined","lastDefined","objtos","ar","oldstop","listeners","indexed","queue","ce","zIndex","_events","nes","names","es","sep","exist","hasOwnProperty","nt","subname","cur","nts","off","funcs","once","xlink","markers","block","classic","diamond","oval","markerCounter","setAttributeNS","setAttribute","createElementNS","webkitTapHighlightColor","addGradientFill","fx","fy","SVG","_fx","_fy","dir","isNaN","vector","defs","gradientTransform","stop-color","stop-opacity","isFinite","fillurl","fillOpacity","mode","documentMode","protocol","host","pathname","updatePosition","pattern","patternTransform","addArrow","isEnd","refX","se","arrows","endPath","endMarker","startPath","startMarker","pathId","markerId","use","marker","getElementsByTagName","markerHeight","markerWidth","orient","refY","xlink:href","delta","startdx","enddx","dasharray","-",".","-.","-..",". ","- ","--","- .","--.","--..","addDashes","butt","square","dashes","setFillAndStroke","vis","visibility","att","nodeValue","createTextNode","pn","hl","clip","rc","clip-path","getAttribute","startString","endString","isURL","ig","patternUnits","stops","cssrule","tuneText","fontSize","tspan","texts","tspans","dif","getRealNode","Element","sw","show","containerStyle","canvasHidden","parentElement","clientWidth","clientHeight","def","subkey","toBack","afterNode","beforeNode","fltr","stdDeviation","_blur","filter","removeAttribute","preserveAspectRatio","_viewBox","con","Error","isFloating","cnvs","xmlns","xmlns:xlink","_left","_top","renderfix","vb","paperSize","aspectRatio","_vbSize","viewBox","getScreenCTM","createSVGMatrix","desc","map","Z","bites","blurregexp","cssDot","zoom","pathTypes","ovalTypes","compensation","setCoords","fillpos","flip","kx","ky","coordsize","rotation","coordorigin","fillsize","position","createNode","newpath","isOval","total","vals","isMove","path2vml","div","clipRect","dstyle","textpath","textpathStyle","fontFamily","fontWeight","fontStyle","newstroke","strokeColor","joinstyle","miterlimit","endcap","dashstyle","span","brect","W","right","H","dirtyattrs","dd","bbx","fxfy","color2","clrs","focus","focussize","focusposition","_oid","oldt","vbs","_viewBoxShift","vbt","skew","isGrad","isPatt","bbt","auxGetBBox","runtimeStyle","margin","Path","textpathok","cs","styleSheets","createStyleSheet","addRule","namespaces","rvml"],"mappings":"q0BAGqBA,cACnB,SAAAA,EAAYC,GAAO,IAAAC,EAAA,mGAAAC,CAAAC,KAAAJ,GACjBE,EAAAG,EAAAD,KAAAE,EAAAN,GAAAO,KAAAH,OAEAI,IAAUC,MAAM,OAAQ,KAAMR,EAAMS,YACpCF,IAAUC,MAAM,QAAS,KAAMR,EAAMU,aACrCH,IAAUC,MAAM,KAAM,KAAMR,EAAMW,UAClCJ,IAAUC,MAAM,OAAQ,KAAMR,EAAMY,YACpCL,IAAUC,MAAM,WAAY,WAAYR,EAAMa,WAC9CN,IAAUC,MAAM,aAAc,WAAYR,EAAMc,cAEhDb,EAAKc,YAAYC,KAAK,4BAVLf,8OADyBgB,oDCD9CC,IAAQC,UAAUC,cAAgB,SAAuBC,EAAGC,EAAGC,GAC7D,IACMC,EAAOrB,KAAKsB,MAAMC,IAAIC,kBAAoBJ,EAAOK,OAAOJ,KAAMH,EAAGC,EAAG,GAAI,IACxEO,EAAW1B,KAAK2B,KAAKT,EAAI,GAAIC,EAAI,GAAIC,EAAOK,OAAOG,MACnDC,EAAS7B,KAAK2B,KAAKT,EAAGC,EAAI,GAAIC,EAAOU,IACrCC,EAAc/B,KAAK2B,KAAKT,EAAGC,EAAI,GAAIC,EAAOY,QAAQC,QAAQ,SAAU,SACpEC,EAAUlC,KAAKmC,IAAId,EAAMK,EAAUG,EAAQE,GAAaK,MAC5DC,cAAe,QACfC,KAAM,2BAERZ,EAASU,MACPE,KAAM,aACNC,cAAe,SAEjBV,EAAOO,MACLI,KAAM,SAERT,EAAYU,KAAKC,MAAM,eAAiB,MACxC1C,KAAK2C,SAASZ,EAAaa,KAC3B,IAAMC,EAAO7C,KAAK6C,KAAK3B,EAAI,GAAIC,EAAI,GAlBlB,IAkBgC,IAAK,GAAGiB,MACvDI,KAAM,OACNM,OAAQ,OACRC,iBAAkB,QAClBC,eAAgB,IAEZC,EAAUjD,KAAKmC,IAAIU,EAAMX,GAM/B,OALAW,EAAKT,MACHc,OAAQD,EAAQE,UAAUD,OAAS,GACnCE,MAAOH,EAAQE,UAAUC,MAAQ,KAEnCH,EAAQI,WAAW,IAAK,GAAI,KACrBJ,GAGTlC,IAAQC,UAAU2B,SAAW,SAAkBW,EAAGF,GAChD,IAAMG,EAAUD,EAAElB,KAAK,QACjBoB,EAAM,uDACZF,EAAElB,MACAT,KAAM6B,IAER,IAAMC,EAAcH,EAAEH,UAAUC,MAAQI,EAAIE,OAC5CJ,EAAElB,MACAT,KAAM4B,IAKR,IAHA,IAAMI,EAAQJ,EAAQK,MAAM,KACxB1C,EAAI,EACF2C,KACGC,EAAI,EAAGC,EAAMJ,EAAMD,OAAQI,EAAIC,EAAKD,GAAK,EAAG,CACnD,IAAME,EAAOL,EAAMG,GACf5C,EAAI8C,EAAKN,OAASD,EAAcL,IAClCS,EAAEhD,KAAK,MACPK,EAAI,GAEO,OAAT8C,GACFH,EAAEhD,KAAK,MACPK,EAAI,IAEJ2C,EAAEhD,KAAF,GAAAoD,OAAUD,EAAV,MACA9C,GAAK8C,EAAKN,OAASD,GAGvBH,EAAElB,MACAT,KAAMkC,EAAEK,KAAK,IAAIC,SAEnB,IAAMC,EAAId,EAAEH,UACNkB,EAAIC,KAAKC,IAAIH,EAAEI,IAAM,EAC3B,OAAOlB,EAAElB,MACPjB,EAAGkD,KAIQtD,QAAf,oZCjEA,IAAA0D,EAAe,WACb,SAASC,EAAYC,EAAUC,GAC7B5E,KAAK6E,QAAUF,EACf3E,KAAK8E,QAAUF,EACf5E,KAAKU,UAAYV,KAAKU,UAAUL,KAAKL,MACrCA,KAAKW,aAAeX,KAAKW,aAAaN,KAAKL,MAC3CA,KAAKO,YAAcP,KAAKO,YAAYF,KAAKL,MACzCA,KAAKM,WAAaN,KAAKM,WAAWD,KAAKL,MACvCA,KAAKQ,SAAWR,KAAKQ,SAASH,KAAKL,MACnCA,KAAKS,WAAaT,KAAKS,WAAWJ,KAAKL,MACvCA,KAAK+E,mBACL/E,KAAKgF,MAAQ,EACbhF,KAAKiF,OAAS,EACdjF,KAAKkF,WACLlF,KAAKmF,QAAU,QACfnF,KAAKoF,QAAU,IACfpF,KAAKqF,QAAU,GACfrF,KAAKsF,SAAW,GAChBtF,KAAKuF,UAAY,GACjBvF,KAAKwF,YAAc,EACnBxF,KAAKyF,OAiVP,OA9UAf,EAAY1D,UAAUyE,KAAO,WAAW,IAAAC,EAAA1F,KACtC2F,IACGC,IAAI5F,KAAK8E,QAAQe,KACjBC,KAAK,SAAAC,GAAc,IAAXC,EAAWD,EAAXC,KACPC,IAAE,WAAYP,EAAKb,SAASqB,OAC5BR,EAAKS,YAAYH,EAAKI,KAAMJ,EAAKK,SACjCX,EAAKY,eAENC,MAAM,kBAAMC,YAAG,oCAGpB9B,EAAY1D,UAAUmF,YAAc,SAASC,EAAMC,GACjD,IAAII,EAAGC,EAAIC,EAAI7C,EAAGC,EAAK6C,EAYvB,IAXA5G,KAAKoG,KAAOA,EACZpG,KAAKqG,QAAUA,EACfrG,KAAK6G,iBACL7G,KAAK8G,YAAcb,IAAEjG,KAAK6E,SAAS3B,SACnClD,KAAK+G,WAAad,IAAEjG,KAAK6E,SAASzB,QAClCsD,EAAKpC,KAAK0C,IAAIhH,KAAK8G,YAAa9G,KAAKqF,QAAUrF,KAAKsF,SAAWtF,KAAKgF,MAAQ,KAC5E2B,EAAKrC,KAAK0C,IAAIhH,KAAK+G,WAAY/G,KAAKoF,QAAUpF,KAAKuF,UAAYvF,KAAKiF,OAAS,KAC7EjF,KAAKiH,EAAIlG,EAAQf,KAAK6E,QAAQe,IAAI,GAAIe,EAAID,GAC1C1G,KAAKkH,IAAMlH,KAAKiH,EAAE9E,MAClBnC,KAAKmH,UAAY7C,KAAK0C,IAAIhH,KAAK8G,YAAa9G,KAAKsF,SAAWtF,KAAKoG,KAAK1C,OAAS,KAE1EI,EAAI,EAAGC,GADZ6C,EAAM5G,KAAKqG,SACW3C,OAAQI,EAAIC,EAAKD,GAAK,GAC1C2C,EAAIG,EAAI9C,IACFhC,MAAM9B,KAAKkF,UACfuB,EAAEW,UAAW,GAEfpH,KAAK+E,gBAAgB0B,EAAE3E,IAAM2E,EAC7BzG,KAAKqH,WAAWZ,GAElB,OAAOzG,KAAKsH,iBAGd5C,EAAY1D,UAAU6F,eAAiB,WACrC,IAAIJ,EAAG3C,EAAGC,EAAKwD,EAAGX,EAAKY,EAGvB,IADAA,KACK1D,EAAI,EAAGC,GAFZ6C,EAAM5G,KAAKqG,SAEW3C,OAAQI,EAAIC,EAAKD,GAAK,EAC1C2C,EAAIG,EAAI9C,GACR9D,KAAKgF,MAAQV,KAAK0C,IAAIhH,KAAKgF,MAAOyB,EAAEgB,MACpCzH,KAAKiF,OAASX,KAAK0C,IAAIhH,KAAKiF,OAAQwB,EAAEiB,OACtCF,EAAQ3G,KACN,WACE,IAAI8G,EAAGC,EAAMC,EAAMC,EAGnB,IADAA,KACKH,EAAI,EAAGC,GAFZC,EAAOpB,EAAEvB,SAEexB,OAAQiE,EAAIC,EAAMD,GAAK,EAC7CJ,EAAIM,EAAKF,GACT3H,KAAKkF,QAAQqC,EAAE,KAAM,EACrBO,EAASjH,KAAMb,KAAKiF,OAASX,KAAK0C,IAAIhH,KAAKiF,OAAQsC,EAAE,KAEvD,OAAOO,GACP3H,KAAKH,OAGX,OAAOwH,GAGT9C,EAAY1D,UAAUsG,cAAgB,WACpC,IAAIS,EAAGP,EAGP,IAFAO,EAAI,EACJP,KACOO,EAAI/H,KAAKiF,QACdjF,KAAKmF,OAAOtE,KAAKE,EAAQiH,SAAS,KAElCjH,EAAQiH,WACRjH,EAAQiH,WACRR,EAAQ3G,KAAMkH,GAAK,GAErB,OAAOP,GAGT9C,EAAY1D,UAAUsF,WAAa,WACjC,IAAI2B,EAAOC,EAASC,EAAQpE,EAAKqE,EAAIxB,EAC7BK,EAAMjH,KAANiH,EAWR,IAVAgB,EAAQ,EACRC,EAAU,GACVjB,EAAEpE,KAAK,EAAG,EAAG,GAAI7C,KAAKmH,WAAW/E,MAC/BI,KAAM,SAERyE,EAAEpE,KAAK,GAAI,EAAG,GAAI7C,KAAKmH,WAAW/E,MAChCI,KAAM,SAIH4F,EAAK,EAAGrE,GAFb6C,EAAM5G,KAAKoG,MAEY1C,OAAQ0E,EAAKrE,EAAKqE,GAAM,EAAG,CAEhD,GAAIH,KADJE,EAAMvB,EAAIwB,IACQ,IAAMF,IAAYC,EAAI,GAEtClB,EAAEtF,KAAK,GAAI3B,KAAKqF,QAAUrF,KAAKsF,SAAW8C,EAAID,EAAI,IAAI/F,MACpDE,KAAM,yBACNE,KAAM,SAEPyF,EANyCI,EAMhCF,EANgC,MAQxCD,IAAYC,EAAI,KAElBlB,EAAEtF,KAAK,GAAI3B,KAAKqF,QAAUrF,KAAKsF,SAAW8C,EAAID,EAAI,IAAI/F,MACpDE,KAAM,yBACNE,KAAM,SAIR0F,EAAUC,EAAI,IAIlB,OADAnI,KAAKsI,qBACEtI,KAAKuI,cAGd7D,EAAY1D,UAAUsH,mBAAqB,WACzC,IAAIlH,EAAQoH,EAAKC,EAAGC,EAAaC,EAAOzH,EAAGC,EAW3C,IAVAwH,EAAQrE,KAAKsE,OAAO5I,KAAK6E,QAAQnE,YAAcV,KAAKqF,SAAWrF,KAAKsF,UAAY,IACpE,IACVoD,GAAc,EACdC,EAAQ,GAEVH,EAAMG,EAAQ,GACV3I,KAAKqG,QAAQ3C,OAAS8E,IACxBE,GAAc,EACdF,EAAMxI,KAAKqG,QAAQ3C,SAEI,IAArB1D,KAAKwF,YAAqBlB,KAAKC,IAAIvE,KAAKwF,WAAamD,GAAS,IAAMD,EAAa,CAGnF,IAFAD,EAAIE,EACJ3I,KAAKwF,WAAamD,EACXF,EAAID,GACTpH,EAASpB,KAAKqG,QAAQoC,GACtBA,GAAK,GACmB,IAApBrH,EAAOyH,WACT3H,EAAIlB,KAAKoF,QAAUpF,KAAKuF,WAAavF,KAAKiF,OAAS7D,EAAOsG,OAC1DvG,EAAInB,KAAKqF,QAAUrF,KAAKsF,SAAWlE,EAAOqG,KAC1CzH,KAAK8I,QAAQ5H,EAAGC,EAAGC,GACnBpB,KAAK+I,UAAU7H,EAAGC,EAAGC,GACrBpB,KAAKgJ,YAAY9H,EAAGC,EAAGC,GACvBpB,KAAKiJ,aAAa/H,EAAGC,EAAGC,GACxBA,EAAOyH,UAAW,GAGtB,OAAO7I,KAAKkH,IAAIgC,YAIpBxE,EAAY1D,UAAUuH,WAAa,WAAW,IAIhCzI,EAHJ+E,EAAY7E,KAAZ6E,QAER,OAAOoB,IAAEpB,GAASsE,QACNrJ,EAIPE,KAHM,SAASoJ,GACd,OAAOtJ,EAAMwI,yBAMrB5D,EAAY1D,UAAUP,WAAa,WAEjC,OADAT,KAAK6E,QAAQnE,UAAUV,KAAK6E,QAAQnE,YAAc,IAC3CV,KAAKsI,sBAGd5D,EAAY1D,UAAUR,SAAW,WAE/B,OADAR,KAAK6E,QAAQnE,UAAUV,KAAK6E,QAAQnE,YAAc,IAC3CV,KAAKsI,sBAGd5D,EAAY1D,UAAUV,WAAa,WAEjC,OADAN,KAAK6E,QAAQvE,WAAWN,KAAK6E,QAAQvE,aAAe,IAC7CN,KAAKsI,sBAGd5D,EAAY1D,UAAUT,YAAc,WAElC,OADAP,KAAK6E,QAAQvE,WAAWN,KAAK6E,QAAQvE,aAAe,IAC7CN,KAAKsI,sBAGd5D,EAAY1D,UAAUL,aAAe,WACnC,OAAOX,KAAK6E,QAAQnE,UAAUV,KAAK6E,QAAQwE,KAAK,OAAOnG,WAGzDwB,EAAY1D,UAAUN,UAAY,WAChC,OAAOV,KAAK6E,QAAQnE,UAAU,IAGhCgE,EAAY1D,UAAUgI,YAAc,SAAS9H,EAAGC,EAAGC,GACjD,IAAWyB,EAAMyG,EAAW3H,EAAM4H,EAElC,GAAKnI,EAAOoI,KAAZ,CAHyD,IAOjDvC,EAAMjH,KAANiH,EA2BR,OA1BAqC,EAAYlI,EAAOoI,MAEL9F,OAAS,KACrB4F,EAAYA,EAAUG,OAAO,EAAG,IAAM,KAQxCF,GANA5H,EAAOsF,EAAEtF,KAAKT,EAAI,EAAGC,EAAGmI,GAAWlH,MACjCC,cAAe,QACfC,KAAM,yBACNE,KAAM,OACNkH,MAAOtI,EAAOoI,QAEDrG,UAEfN,EAAOoE,EAAEpE,KAAK3B,EAAGC,EAAI,EAAGoI,EAAQnG,MAAQ,EAAGmG,EAAQrG,OAAS,EAAG,GAAGd,MAChEI,KAAM,OACNmH,eAAgB,GAChB7G,OAAQ,SAECmE,EAAE2C,MAAM,IAAK1I,EAAI,EAAGC,EAAG,IAAKD,EAAI,GAAIC,EAAI,EAAG,IAAKD,EAAI,GAAIC,EAAI,EAAG,MAAMiB,MAC9EI,KAAM,OACNmH,eAAgB,GAChB7G,OAAQ,SAEFmE,EAAE9E,IAAIU,EAAMlB,GACd0B,WAAW,KAAMR,EAAKM,UAAUC,MAAQ,GAAI,IAE3CzB,EAAKuH,YAGdxE,EAAY1D,UAAUiI,aAAe,SAAS/H,EAAGC,EAAGC,GAAQ,IAClD6F,EAAoBjH,KAApBiH,EAAGC,EAAiBlH,KAAjBkH,IAAKpC,EAAY9E,KAAZ8E,QACV+E,EAAS5C,EACZ6C,OAAO5I,EAAGC,EAAG,IACbiB,MACCI,KAAM,OACNuH,QAAS,EACTC,OAAQ,YAETC,MAAM,WACL,OAAOC,OAAOC,KAAKrF,EAAQsF,WAAWnI,QAAQ,KAAMb,EAAOU,IAAK,YAEjEuI,MACC,WAEE,OADArK,KAAKiD,QAAUgE,EAAEhG,cAAcC,EAAI,EAAGC,EAAGC,GAClC8F,EAAIrG,KAAKb,KAAKiD,QAAQqH,aAAatK,QAE5C,WACE,OAAOA,KAAKiD,SAAWjD,KAAKiD,QAAQsH,iBAAmBvK,KAAKiD,UAGlE,OAAOiE,EAAIrG,KAAKgJ,IAGlBnF,EAAY1D,UAAU8H,QAAU,SAAS5H,EAAGC,EAAGC,GAAQ,IAC7C6F,EAAMjH,KAANiH,EACRA,EAAE6C,OAAO5I,EAAGC,EAAG,GAAGiB,MAChBI,KAAMxC,KAAKmF,OAAO/D,EAAOsG,OACzB5E,OAAQ,SAGV,IAAM0H,EAAexK,KAAKoF,QAAUpF,KAAKuF,UAAYvF,KAAKiF,OAAS,GAC7DwF,EAAetJ,EAAI,GAOzB,OALA8F,EAAEpE,KAAK2H,EAAcC,EAAc,GAAI,IAAIrI,MACzCU,OAAQ9C,KAAKmF,OAAO/D,EAAOsG,OAC3B1E,eAAgB,IAElBiE,EAAE3F,MAAMF,EAAOK,OAAOJ,KAAMmJ,EAAcC,EAAc,GAAI,IACrDxD,EACJtF,KAAK3B,KAAKoF,QAAUpF,KAAKuF,UAAYvF,KAAKiF,OAAS,GAAI9D,EAAGC,EAAOY,QAAQ4B,MAAM,MAAM,IACrFxB,MACCC,cAAe,QACfC,KAAM,4BAIZoC,EAAY1D,UAAU+H,UAAY,SAAS7H,EAAGC,EAAGC,GAC/C,IAAIsJ,EAAOC,EAAOlC,EAAG1E,EAAK6G,EAAQC,EAAQC,EAAcC,EAAUC,EAAUC,EAASC,EAC7EjE,EAAMjH,KAANiH,EACFL,EAAMxF,EAAO8D,QACbsC,KAEN,IAAKiB,EAAI,EAAG1E,EAAM6C,EAAIlD,OAAQ+E,EAAI1E,EAAK0E,GAAK,EAC1CoC,EAASjE,EAAI6B,GACbqC,EAAe9K,KAAK+E,gBAAgB8F,EAAO,IAC3CI,EAAUjL,KAAKqF,QAAUrF,KAAKsF,SAAWwF,EAAarD,KACtDsD,EAAW/K,KAAKoF,QAAUpF,KAAKuF,WAAavF,KAAKiF,OAAS6F,EAAapD,OACvEsD,EAAWhL,KAAKoF,QAAUpF,KAAKuF,WAAavF,KAAKiF,OAAS4F,EAAO,IAG/DF,EADEG,EAAapD,OAAStG,EAAOsG,MACvB1H,KAAKmF,OAAO/D,EAAOsG,OAEnB1H,KAAKmF,OAAO2F,EAAapD,OAG/BmD,EAAO,KAAOzJ,EAAOsG,OACvBkD,GAAU,EAAG,GACbF,EAAQ,uBACCG,EAAO,GAAKzJ,EAAOsG,OAC5BkD,GAAU,EAAG,GACbF,EAAQ,wBAERE,IAAW,EAAG,GACdF,EAAQ,uBAGVQ,GAAS,IAAKhK,EAAI0J,EAAO,GAAIzJ,EAAIyJ,EAAO,IAEpCnC,EAAI,GACNyC,EAAMrK,KAAK6J,GAGTtJ,EAAOsG,QAAUoD,EAAapD,OAAStG,EAAOsG,QAAUmD,EAAO,IACjEK,EAAMrK,KAAK,IAAKmK,EAAU7J,EAAI,GAAI,IAAK6J,EAAUC,EAAU,GAG7DC,EAAMrK,KAAK,IAAKkK,EAAUE,GAC1BzD,EAAQ3G,KACNoG,EAAE2C,KAAKsB,GAAO9I,MACZU,OAAQ6H,EACR3H,eAAgB,KAItB,OAAOwE,GAGT9C,EAAY1D,UAAUqG,WAAa,SAASjG,GAC1C,GAAIA,EAAOU,KAAO9B,KAAK8E,QAAQqG,UAAW,KAChClE,EAAMjH,KAANiH,EACF/F,EAAIlB,KAAKoF,QAAUpF,KAAKuF,WAAavF,KAAKiF,OAAS7D,EAAOsG,OAC1DvG,EAAInB,KAAKqF,QAAUrF,KAAKsF,SAAWlE,EAAOqG,KAOhD,OANAR,EAAE2C,MAAM,IAAK1I,EAAI,EAAGC,EAAG,IAAKD,EAAI,GAAIC,EAAI,EAAG,IAAKD,EAAI,GAAIC,EAAI,EAAG,MAAMiB,MACnEI,KAAM,OACNmH,eAAgB,GAChB7G,OAAQ,SAGH9C,KAAK6E,QAAQnE,UAAUS,EAAInB,KAAK8G,YAAc,KAIlDpC,EArWT,GCHe0G,EAAA,WAeb,OAdA,SAAiBC,GACf,IAAIC,EACJrF,IAAE,eAAegE,MAAM,WACrB,OAAOhE,IAAEjG,MACNuL,QAAQ,QACRC,WAELxL,KAAKyE,aAAe,IAAIC,EAAYuB,IAAE,kBAAmBoF,GACzDC,EAAMrF,IAAEiE,QAAQhH,SAAW,IAC3B+C,IAAE,kBAAkBwF,KAClBvI,OAAQoI,EAAM,QAXL,GCDfI,SAASC,iBAAiB,mBAAoB,WAC5C,GAAK1F,IAAE,kBAAkBvC,OAAzB,CAEA,IAAMkI,EAAe,IAAIC,GACvBhG,IAAKI,IAAE,kBAAkB7D,KAAK,YAC9BgI,WAAYnE,IAAE,kBAAkB7D,KAAK,mBACrCwE,IAAKX,IAAE,kBAAkB7D,KAAK,YAC9B+I,UAAWlF,IAAE,kBAAkB7D,KAAK,oBAItC,IAAIxC,EAAiBgM,EAAanH,0vBCXf3D,cACnB,SAAAA,IAAc,IAAAhB,EAAA,mGAAAC,CAAAC,KAAAc,GACZhB,EAAAG,EAAAD,KAAAE,EAAAY,GAAAX,KAAAH,OAEAI,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,wBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,iCAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,qBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,wBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,uBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,wBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,kCAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,uBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,6BAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,+BAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,qBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,yBAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,2BAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,6BAC9C1L,IAAUC,KAAK,MAAO,kBAAMyL,YAAkB,wBAC9C1L,IAAUC,KAAK,IAAK,kBAAMyL,YAAkB,0BAE5ChM,EAAKc,YAAYC,KAAK,4BApBVf,8OADiCiM,4PCD5BC,aACnB,SAAAA,EAAYC,gGAAQlM,CAAAC,KAAAgM,GAClBhM,KAAKkM,mBAAqBjG,IAAEgG,GAC5BjM,KAAKmM,WAAalG,IAAE,0BACpBjG,KAAKoM,aAAepM,KAAKmM,WAAWnG,KAAK,QACzChG,KAAKqM,cAAgBrM,KAAKmM,WAAWnG,KAAK,SAC1ChG,KAAKsM,cAAgBtM,KAAKuM,qBAC1BvM,KAAKwM,QAAUxM,KAAKkM,mBAAmBlG,KAAK,WAC5ChG,KAAKuI,aACLvI,KAAKyM,+EAGM,IAAA3M,EAAAE,KACXA,KAAKkM,mBACFQ,SAAS,mCACTC,GAAG,QAAS,SAAAC,GAAC,OAAI9M,EAAK+M,aAAaD,KAEtC5M,KAAKmM,WAAWQ,GAAG,QAAS,SAAAC,GACrB9M,EAAKgN,+BACRF,EAAEG,iBACFjN,EAAK+M,aAAaD,MAItB5M,KAAKkM,mBAAmBS,GAAG,SAAU,kBAAM7M,EAAKkN,6DAIrBC,IAAkBC,6BAG3ClN,KAAKmN,iBACH,QACAnN,KAAKwM,QACLxM,KAAKsM,cAAcc,qBACnB,kBACAlJ,KAAK,KACPlE,KAAKqN,mEAKIjE,GACXnD,IAAEmD,EAAMkE,eACLZ,SAAS,wBACTa,QAAQ,gDAIX,IAAMC,EAAsBC,KAAKC,MAAM1N,KAAKkM,mBAAmByB,OAIzDC,GACJ/H,IAJc,GAAA5B,OAAMuJ,EAAoB3H,IAA1B,KAAA5B,OAAiCjE,KAAKkM,mBAAmBlG,KAAK,iBAK5EpE,KAJkB4L,EAAoB5L,MAOxC5B,KAAK6N,wBAAwBD,GAC7B5N,KAAK8N,yBAAyBF,wDAI9B,IAAMG,EAAoB/N,KAAK8M,6BAE/B9M,KAAK6N,wBAAwBE,mDAGPC,GAClBA,GACFhO,KAAKmM,WAAW/J,KAAK,OAAQ4L,EAAQnI,KACrC7F,KAAKmM,WAAWxK,KAAhB,GAAAsC,OAAwBjE,KAAKsM,cAAc2B,kBAA3C,QAAAhK,OAAmE+J,EAAQpM,QAE3E5B,KAAKmM,WAAWxK,KAAhB,4BAAAsC,OAAiDjE,KAAKsM,cAAc4B,wEAKtE,IAAMC,EAAgBC,aAAaC,QAAQrO,KAAKmN,iBAEhD,OAAOM,KAAKC,MAAMS,oDAGKP,GACvB,IAAMO,EAAgBV,KAAKa,UAAUV,GAErCQ,aAAaG,QAAQvO,KAAKmN,gBAAiBgB,gDAI3C,IAAMF,EAAoBjO,KAAKqM,cAY/B,OACEe,qBAVwB,OAAAnJ,OAAUjE,KAAKoM,aACtCxI,MAAM,KACNM,KAAK,KACLsK,MAAM,GAAI,IAQXP,oBACAC,iBARuBlO,KAAKoM,aAC3BxI,MAAM,KACNM,KAAK,KACLsK,MAAM,GAAI,yCCjGF,SAASC,IACtBxI,IAAE,wBAAwByI,KAAK,SAASjG,EAAGwD,GACzC,IAAI0C,EAqBe7O,EApBb8O,EAAe3I,IAAEgG,GAAQjG,KAAK,kBAAmB,EAwFvD,OAvFAhG,KAAKwM,QAAUvG,IAAEgG,GAAQjG,KAAK,WAC9BhG,KAAK6O,cAAgB5I,IAAEgG,GAAQjG,KAAK,iBACpChG,KAAK8O,YAAc7I,IAAEgG,GAAQjG,KAAK,iBAAkB,EACpDhG,KAAK+O,QAAU9I,IAAEgG,GAAQjG,KAAK,YAAc,KAC5ChG,KAAKgP,kBAAoB/I,IAAEgG,GAAQjG,KAAK,qBACxChG,KAAKiP,yBAA2BhJ,IAAEgG,GAAQjG,KAAK,4BAC/ChG,KAAKkP,gBAC8BC,IAAjClJ,IAAEgG,GAAQjG,KAAK,eAAqCC,IAAEgG,GAAQjG,KAAK,cACrEhG,KAAKoP,2BAA6BnJ,IAAEgG,GAAQjG,KAAK,gCAAiC,EAClFhG,KAAKqP,WAAapJ,IAAEgG,GAAQjG,KAAK,gBAAiB,EAElD2I,EAAc,qBACV3O,KAAK6O,gBACPF,GAAe,aAGjB1I,IAAEgG,GAAQsB,SACRoB,YAAaA,EACbW,mBAAoB,EACpBC,OAAiBzP,EAgDdE,KA/CM,SAASuP,GACd,IAAIC,EAAeC,EAqBnB,OApBAD,EAAgB,SAASE,GACvB,IAAI1J,EAIJ,OAHAA,GACEwB,QAASkI,GAEJH,EAAMI,SAAS3J,IAGtByJ,EADE3P,EAAM+O,cACW,SAASa,GAC1B,IAAIE,EAMJ,OALAA,EAAiB,SAASC,GACxB,IAAI7J,EAEJ,OADAA,EAAO6J,EAAO5L,OAAOyL,GACdF,EAAcxJ,IAEhB8J,IAAID,OAAON,EAAMQ,QAAUH,IAGjBJ,EAEjB1P,EAAM0M,QACDsD,IAAIE,cACTlQ,EAAM0M,QACN+C,EAAMQ,MAEJE,oBAAqBnQ,EAAMkP,kBAC3BkB,4BAA6BpQ,EAAMmP,yBACnCkB,YAAarQ,EAAMoP,WACnBkB,kBAAmBtQ,EAAMsP,4BAE3BK,GAGKK,IAAIJ,SACTH,EAAMQ,MAEJM,SAAUvQ,EAAMiP,QAChBkB,oBAAqBnQ,EAAMkP,kBAC3BkB,4BAA6BpQ,EAAMmP,yBACnCqB,YAAaxQ,EAAMgP,aAErBW,KAKR3N,GAAI,SAASkM,GACX,OAAIY,EAAqBZ,EAAQlM,GAC1B2L,KAAKa,WACV1M,KAAMoM,EAAQpM,KACdiE,IAAKmI,EAAQuC,WAGjB5O,KAAM,SAASqM,GACb,OAAOA,EAAQwC,qBAAuBxC,EAAQpM,MAGhD6O,cAAe,SAASC,EAAIf,GAC1B,OAAOG,IAAI9B,QAAQ0C,EAAG/C,OAAO7H,KAAK,SAAAC,GAAA,IAAGC,EAAHD,EAAGC,KAAH,OAAc2J,EAAS3J,MAG3DqJ,WAAYrP,KAAKqP,WAEjBsB,iBAAkB,0BAEhB/B,EAAqB3C,EAClB,IAAID,EAAyBC,KAlGxC2E,EAAAC,EAAAC,EAAA,sBAAArC,yTCUqBsC,aACnB,SAAAA,iGAAchR,CAAAC,KAAA+Q,GACZ,IAAMC,EAAgB/K,IAAE,6BAClBgL,EAAqBhL,IAAE,kBACvBiL,EAAiBjL,IAAE,iDACnBkL,EAAmBzF,SAAS0F,cAChC,iDAGIC,EAAsBH,EAAevP,OAAOwC,OAC9CkN,EAAoB3N,OAAS,GAC/BuC,IAAC,eAAAhC,OAAgBoN,EAAhB,MAAyCL,GAAeM,SAAS,aAGpErL,IAAE,IAAK+K,GAAerE,GAAG,QAAS,SAAAC,GAChCA,EAAEG,iBACF,IAAMwE,EAAQtL,IAAE2G,EAAEU,eACZzH,EAAM0L,EAAMnP,KAAK,QACjBoP,EAAYD,EAAMvL,KAAK,aAE7BC,IAAE,aAAc+K,GAAeS,YAAY,aAC3CxL,IAAC,sBAAAhC,OAAuBuN,EAAvB,OAAsC9C,KAAK,WAC1C,IAAMgD,EAAMzL,IAAEjG,MACR2R,EAAaD,EAAIrI,KAAK,8BAA8B1H,OAEpDiQ,EADaF,EAAInG,QAAQ,yBACLlC,KAAK,4BAE/BqI,EAAIG,YAAY,aAChBD,EAAOjQ,KAAKgQ,KAGVR,EACFA,EAAiBW,QAAQC,cAAgBlM,EAEzCoL,EAAmBtD,IAAI9H,GAEzBI,IAAE,2BAA2BtE,KAAKkE,KAGpCkL,EAAQiB,kBACR/L,IAAE,wBAAwB0G,GAAG,SAAU,WACrC,OAAO1G,IAAEjG,MACNkF,QAAQ,QACRsG,WAELvF,IAAE,wBAAwB0G,GAAG,QAAS,SAASC,GAK7C,OAJAqF,IAAQ9P,IAAI,sBAAuB,SACnC8D,IAAEjG,MACCkF,QAAQ,uBACRqF,SACIqC,EAAEG,mBAEX9G,IAAE,6BAA6B0G,GAAG,QAAS,SAASC,GAKlD,OAJAqF,IAAQ9P,IAAI,2BAA4B,SACxC8D,IAAEjG,MACCkF,QAAQ,wBACRqF,SACIqC,EAAEG,mBAEX9G,IAAE,+CAA+C0G,GAAG,QAAS,SAASC,GACpE,IAAMsF,EAAYjM,IAAEjG,MAAMgG,KAAK,cACzBmM,EAAS,8CAAAlO,OAAiDiO,GAKhE,OAJAD,IAAQ9P,IAAIgQ,EAAW,SACvBlM,IAAEjG,MACCkF,QAAQ,0CACRqF,SACIqC,EAAEG,mBAEXgE,EAAQqB,8FAIR3D,cACAxI,IAAE,wBAAwB0G,GAAG,QAAS,SAAAC,GAAC,OAAImE,EAAQsB,cAAcpM,IAAE2G,EAAEU,eAAeK,+CAGjE9H,GACnB,OAAQqE,OAAOoI,SAAWzM,4CAI1B,IAAI0M,EAAc7G,SAAS8G,cAAc,MACrCC,EAAU/G,SAAS8G,cAAc,KAIrC,OAFAC,EAAQC,KAAO,IAERzM,IAAE,6BAA6ByI,KAAK,WACzC,IAAIiE,EAAWC,EAGf,OAFAD,EAAY1M,IAAEjG,MACd4S,EAAWD,EAAU3M,KAAK,YACnB2M,EAAUE,YACf7M,KAD0B,SACrB+J,EAAMJ,GACThK,IACGC,IAAI+M,EAAU3M,KAAK,YAClB8M,QACElM,IAAK+L,EAAU3M,KAAK,OACpB+M,OAAQhD,KAGXjK,KAAK,SAAAC,GAAA,IAAGC,EAAHD,EAAGC,KAAH,OAAc2J,EAAS3J,KAC5BO,MAAM,kBAAMyM,YAAMxM,YAAG,gDAE1ByM,YAAY,EACZC,YAAY,EACZC,cAAc,EACdC,cAAc,EACdC,eAAgBV,EAAU3M,KAAK,kBAC/BsN,UAAWX,EAAU3M,KAAK,aAC1BuN,UAAW,SAAS3M,GAClB,IAAI4M,EAAKjB,EAAYkB,WAAU,GAE/B,GAAkB,MAAd7M,EAAI8M,OACNF,EAAGG,UAAY,kBACfH,EAAGI,YAAchN,EAAI8M,WAChB,CACL,IAAIG,EAAOpB,EAAQgB,WAAU,GAEzB7M,IAAQgM,IACViB,EAAKF,UAAY,aAGnBE,EAAKD,YAAchN,EACnBiN,EAAK/B,QAAQlL,IAAMA,EAEnB4M,EAAGM,YAAYD,GAGjB,OAAOL,GAET1R,GAAI,SAASiS,EAAKrC,GAChB,OAAOA,EAAItP,KAAK,aAElB4R,YAAa,SAASD,EAAKrC,GACzB,OAAOA,EAAI/P,OAAOwC,QAEpB8P,QAAS,SAASnP,GAGhB,GAFcA,EAAN8H,EACNG,iBACE9G,IAAE,qBAAqBvC,OAAQ,CACjC,IAAIwQ,EAAQvB,EAAUpH,QAAQ,QAE1B4I,EAASxB,EAAU3M,KAAK,SACxBoO,IAAcD,GAAgBA,EAC9BE,EAASH,EAAM9R,KAAK,UACpBkS,GAAmC,IAAzBD,EAAOE,QAAQ,KAAc,IAAM,IAC7CH,GACFI,YAAQ,GAAAvQ,OAAIoQ,GAAJpQ,OAAaqQ,GAAbrQ,OAAuBiQ,EAAMO,kGC5JnD7D,EAAA3J,EAAA6J,GAAA,IAAA4D,EAAA9D,EAAA,IAAA+D,EAAA/D,EAAA,IAAAgE,EAAAhE,EAAA,IAAAiE,EAAAjE,EAAA,IAKAlF,SAASC,iBAAiB,mBAAoB,WAAM,IAC1CmJ,EAASpJ,SAASqJ,KAAKjD,QAAvBgD,MAEN,wBACA,+BACA,iCAGkBP,QAAQO,IAAS,IACnCE,YAAuB,qBACvBC,eAGF,IAAIlE,IACJ,IAAIjQ,2BCVN,IAAAoU,IASC,WACD,gBAAAC,GAEA,IAAAC,KAGA,SAAAxE,EAAAyE,GAGA,GAAAD,EAAAC,GACA,OAAAD,EAAAC,GAAAC,QAGA,IAAAC,EAAAH,EAAAC,IACAC,WACAxT,GAAAuT,EACAG,QAAA,GAUA,OANAL,EAAAE,GAAAlV,KAAAoV,EAAAD,QAAAC,IAAAD,QAAA1E,GAGA2E,EAAAC,QAAA,EAGAD,EAAAD,QAcA,OATA1E,EAAA6E,EAAAN,EAGAvE,EAAAnK,EAAA2O,EAGAxE,EAAArJ,EAAA,GAGAqJ,EAAA,GAvCA,EA4CA,SAAA2E,EAAAD,EAAA1E,GAEA,IAAA8E,EAAAC,EAAiED,GAAA9E,EAAA,GAAAA,EAAA,GAAAA,EAAA,SAI/DzB,KAJ+DwG,EAAA,SAAAC,GAEjE,OAAAA,GAEEC,MAAAP,EAAAI,MAAAH,EAAAD,QAAAK,IAIF,SAAAJ,EAAAD,EAAA1E,GAEA,IAAA8E,EAAAC,EAAiED,GAAA9E,EAAA,SA4xK/DzB,KA5xK+DwG,EAAA,SAAAG,GAoDjE,SAAAF,EAAAG,GACA,GAAAH,EAAAI,GAAAD,EAAA,YACA,OAAAP,EAAAO,IAAAD,EAAAnJ,GAAA,kBAAAoJ,GACU,GAAAH,EAAAI,GAAAD,EAAAE,GACV,OAAAL,EAAAM,QAAAC,OAAAN,GAAAD,EAAAG,EAAAK,OAAA,IAAAR,EAAAI,GAAAD,EAAA,GAAAM,KAAAC,IAAAP,GAEA,IAAAQ,EAAAC,MAAAxV,UAAAwN,MAAArO,KAAAsW,UAAA,GACA,GAAAb,EAAAI,GAAAO,IAAA7S,OAAA,gBACA,IAAAgT,EAAAH,EAAAI,MACA,OAAAnB,EAAAkB,EAAAvW,KAAAyV,EAAAM,QAAAC,OAAAN,GAAAD,EAAAW,IAAAT,EAAAnJ,GAAA,6BACA+J,EAAAvW,KAAAyV,EAAAM,QAAAC,OAAAN,GAAAD,EAAAW,MAGA,OAAAX,EAAAM,QAAAC,OAAAN,GAAAD,EAAAa,WAIAb,EAAAgB,QAAA,QACAhB,EAAAE,MACA,IAAAN,EAiDAqB,EAhDAC,EAAA,QACAC,GAAqBjN,OAAA,EAAAjH,KAAA,EAAA+G,KAAA,EAAAoN,QAAA,EAAArV,KAAA,EAAAL,MAAA,GACrB2V,EAAA,aAEAC,EAAA,iBACAC,GACAC,IAAA1L,SACA2L,IAAAnN,QAEAoN,GACAC,IAAAC,OAAAxW,UAAAkW,GAAA/W,KAAAgX,EAAAE,IAAA,WACArB,GAAAmB,EAAAE,IAAAtW,SAEA0W,EAAA,WAiCAzX,KAAA0X,GAAA1X,KAAA2X,qBAIA9B,EAAA,QACA5R,EAAA,SACA2T,EAAA,iBAAAT,EAAAE,KAAAF,EAAAE,IAAAQ,eAAAV,EAAAC,eAAAS,cACAC,EAAA,GACAC,EAAA,IACAC,EAAAC,OACArU,EAAA,QACAsU,EAAA,0GAAAtU,GAAAmU,GACAI,GACAC,UAAA,aACAC,UAAA,YACAC,QAAA,YAEAC,EAAAP,EAAAhX,UAAAwX,YACAC,EAAAnU,KACAoU,EAAAD,EAAAzR,IACA2R,EAAAF,EAAAG,IACArU,EAAAkU,EAAAlU,IACAsU,EAAAJ,EAAAI,IACAC,EAAAL,EAAAK,GACAzC,EAAA,SAEAJ,EAAA,QAGA8C,EAAAvB,OAAAxW,UAAAgY,SAIAC,GADArD,EAAAsD,OAAA,4BACA,oTACAC,GAAkBC,IAAA,EAAAC,SAAA,EAAAC,YAAA,GAClBC,EAAA,yDACAC,EAAAf,EAAAe,MAEAC,EAAAC,WACAC,EAAAC,SACAC,EAAA7B,EAAAhX,UAAA8Y,YACAC,EAAAnE,EAAAoE,iBACAC,YAAA,OACAC,cAAA,OACAC,KAAA,EACAC,YAAA,cACApQ,OAAA,UACAqQ,GAAA,EACAC,GAAA,EACA9X,KAAA,OACAmH,eAAA,EACArH,KAAA,eACAiY,cAAA,UACAC,YAAA,KACAC,aAAA,SACAlY,cAAA,IACAmY,SAAA,EACAxX,OAAA,EACAwP,KAAA,wBACAiI,iBAAA,EACA5Q,QAAA,EACAH,KAAA,OACA3C,EAAA,EACA2T,GAAA,EACAC,GAAA,EACAC,IAAA,GACAhY,OAAA,OACAiY,mBAAA,GACAhY,iBAAA,OACAiY,kBAAA,OACAC,oBAAA,EACAC,iBAAA,EACAlY,eAAA,EACAmY,OAAA,SACA9Y,cAAA,SACAqH,MAAA,UACArG,UAAA,GACAD,MAAA,EACAlC,EAAA,EACAC,EAAA,EACAia,MAAA,IAEAC,EAAAzF,EAAA0F,qBACAnB,KAAA9D,EACA+D,YAAA,MACAC,GAAAhE,EACAiE,GAAAjE,EACA7T,KAAA,SACAmH,eAAA0M,EACAmE,YAAAnE,EACAnT,OAAAmT,EACAtM,QAAAsM,EACAzM,KAAA,OACA3C,EAAAoP,EACAuE,GAAAvE,EACAwE,GAAAxE,EACAvT,OAAA,SACAoY,iBAAA7E,EACArT,eAAAqT,EACAhT,UAAA,YACAD,MAAAiT,EACAnV,EAAAmV,EACAlV,EAAAkV,GAGAkF,EAAA,0RACAC,GAAiBC,GAAA,EAAAC,GAAA,GACjBC,EAAA,yBACAC,EAAA,udACAC,EAAA,gdACAC,EAAA,yTAEAC,GADAnG,EAAAoG,iBAAA,0TAKAC,EAAA,SAAAC,EAAA9X,GACA,OAAAqV,EAAAyC,GAAAzC,EAAArV,IAGA+X,EAAA,SAAAjb,GACA,OAAAA,GAEAkb,EAAAxG,EAAAyG,UAAA,SAAAnb,EAAAC,EAAAmb,EAAAjY,EAAA4C,GACA,OAAAA,IACA,IAAA/F,EAAA+F,EAAA9F,IAAA,IAAAmb,EAAA,EAAArV,EAAA,QAAAA,IAAA,MAAAA,MAAA,MAAA5C,EAAA,EAAA4C,IAAA,IAAAA,IAAA,OAAAA,MAAA,MAAAA,EAAAqV,EAAA,QAAArV,IAAA,OAAAA,OAAA,QAAAA,EAAA5C,IAAA,IAAA4C,IAAA,MAAAA,OAAA,QAEA,IAAA/F,EAAAC,IAAA,IAAAmb,EAAA,UAAAjY,IAAA,KAAAiY,EAAA,WAEAC,EAAA,SAAArb,EAAAC,EAAAyZ,EAAAC,GAIA,OAHA,MAAAA,IACAA,EAAAD,KAEA,IAAA1Z,EAAAC,IAAA,OAAA0Z,IAAA,IAAAD,EAAAC,EAAA,UAAAA,IAAA,IAAAD,EAAAC,EAAA,WAAAA,IAAA,OAEA2B,EAAA5G,EAAA6G,UACA7S,KAAA,SAAA8G,GACA,OAAAA,EAAAtO,KAAA,SAEA0H,OAAA,SAAA4G,GACA,IAAAwL,EAAAxL,EAAAgM,MACA,OAAAH,EAAAL,EAAA7B,GAAA6B,EAAA5B,GAAA4B,EAAAjV,IAEA+P,QAAA,SAAAtG,GACA,IAAAwL,EAAAxL,EAAAgM,MACA,OAAAH,EAAAL,EAAA7B,GAAA6B,EAAA5B,GAAA4B,EAAAtB,GAAAsB,EAAArB,KAEAhY,KAAA,SAAA6N,GACA,IAAAwL,EAAAxL,EAAAgM,MACA,OAAAN,EAAAF,EAAAhb,EAAAgb,EAAA/a,EAAA+a,EAAA9Y,MAAA8Y,EAAAhZ,OAAAgZ,EAAAjV,IAEA3F,MAAA,SAAAoP,GACA,IAAAwL,EAAAxL,EAAAgM,MACA,OAAAN,EAAAF,EAAAhb,EAAAgb,EAAA/a,EAAA+a,EAAA9Y,MAAA8Y,EAAAhZ,SAEAvB,KAAA,SAAA+O,GACA,IAAAiM,EAAAjM,EAAAkM,WACA,OAAAR,EAAAO,EAAAzb,EAAAyb,EAAAxb,EAAAwb,EAAAvZ,MAAAuZ,EAAAzZ,SAEAf,IAAA,SAAAuO,GACA,IAAAiM,EAAAjM,EAAAkM,WACA,OAAAR,EAAAO,EAAAzb,EAAAyb,EAAAxb,EAAAwb,EAAAvZ,MAAAuZ,EAAAzZ,UAaA2Z,EAAAjH,EAAAiH,QAAA,SAAAjT,EAAAkT,GACA,IAAAA,EACA,OAAAlT,EAEA,IAAA1I,EAAAC,EAAAsH,EAAA3E,EAAAiZ,EAAAC,EAAAC,EAEA,IAAAxU,EAAA,EAAAsU,GADAnT,EAAAsT,GAAAtT,IACAlG,OAA0C+E,EAAAsU,EAAQtU,IAElD,IAAA3E,EAAA,EAAAkZ,GADAC,EAAArT,EAAAnB,IACA/E,OAA+CI,EAAAkZ,EAAQlZ,GAAA,EACvD5C,EAAA4b,EAAA5b,EAAA+b,EAAAnZ,GAAAmZ,EAAAnZ,EAAA,IACA3C,EAAA2b,EAAA3b,EAAA8b,EAAAnZ,GAAAmZ,EAAAnZ,EAAA,IACAmZ,EAAAnZ,GAAA5C,EACA+b,EAAAnZ,EAAA,GAAA3C,EAGA,OAAAyI,GAWA,GARAgM,EAAAuH,GAAAhG,EAOAvB,EAAAwH,KAAAjG,EAAAE,IAAAgG,UAAAlG,EAAAC,IAAAkG,eAAAC,WAAA,uEACA,OAAA3H,EAAAwH,KAAA,CACA,IACAhZ,EADAyM,EAAAsG,EAAAC,IAAA5E,cAAA,OAKA,GAHA3B,EAAA2M,UAAA,sBACApZ,EAAAyM,EAAA4M,YACA/a,MAAAgb,SAAA,qBACAtZ,GAAA,iBAAAA,EAAAuZ,IACA,OAAA/H,EAAAwH,KAAAtF,EAEAjH,EAAA,KAqEA,SAAA+M,GAAA7J,GACA,sBAAAA,GAAAyD,OAAAzD,OACA,OAAAA,EAEA,IAAA8J,EAAA,IAAA9J,EAAA+J,YACA,QAAAC,KAAAhK,IAAAmD,GAAA6G,KACAF,EAAAE,GAAAH,GAAA7J,EAAAgK,KAEA,OAAAF,EA/DAjI,EAAAoI,MAAApI,EAAAqI,IAAA,OAAArI,EAAAwH,MACAxH,EAAAsI,OAAAzG,EA2BA7B,EAAAuI,GAAAtH,EAAAY,EAAAzW,UAAA4U,EAAA5U,UACA4U,EAAAwI,IAAA,EAWAxI,EAAAI,GAAA,SAAAqI,EAAAjB,GAEA,iBADAA,EAAA7E,EAAApY,KAAAid,KAEAjE,EAAAjC,IAAAmH,GAEA,SAAAjB,EACAiB,aAAA7H,MAEA,QAAA4G,GAAA,OAAAiB,GACAjB,UAAAiB,GAAA,OAAAA,GACA,UAAAjB,GAAAiB,IAAA7G,OAAA6G,IACA,SAAAjB,GAAA5G,MAAA8H,SAAA9H,MAAA8H,QAAAD,IACAtF,EAAA5Y,KAAAke,GAAA7P,MAAA,MAAAgK,eAAA4E,GA4BAxH,EAAA2I,MAAA,SAAAC,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,GACA,SAAAD,EAAA,CACA,IAAAzd,EAAAsd,EAAAE,EACAvd,EAAAsd,EAAAja,EACA,OAAAtD,GAAAC,GAGA,QAAAsX,EAAAoG,OAAA1d,GAAAD,GAAA4X,EAAA,SAFA,EAIA,OAAAlD,EAAA2I,MAAAC,EAAAC,EAAAE,EAAAC,GAAAhJ,EAAA2I,MAAAG,EAAAla,EAAAma,EAAAC,IAYAhJ,EAAAkJ,IAAA,SAAAC,GACA,OAAAA,EAAA,IAAAjG,EAAA,KAWAlD,EAAAmJ,IAAA,SAAAD,GACA,OAAAxa,KAAAkV,MAAA,IAAAsF,EAAAhG,EAAA,cAaAlD,EAAAoJ,OAAA,SAAAC,EAAAC,EAAAC,GAEA,GADAA,EAAAvJ,EAAAI,GAAAmJ,EAAA,UAAAA,EAAA,GACAvJ,EAAAI,GAAAiJ,EAAAhJ,IAEA,IADA,IAAAxN,EAAAwW,EAAAvb,OACA+E,KAAA,GAAAlE,EAAA0a,EAAAxW,GAAAyW,IAAAC,EACA,OAAAF,EAAAxW,OAEU,CAEV,IAAA2W,EAAAF,GADAD,MAEA,GAAAG,EAAAD,EACA,OAAAD,EAAAE,EAEA,GAAAA,EAAAH,EAAAE,EACA,OAAAD,EAAAE,EAAAH,EAGA,OAAAC,GASA,IAAAG,GAAAC,GAAA1J,EAAA2J,YAAAF,GAIM,QAJNC,GAIM,SAAA7Y,GACN,IAAAQ,EAAA,GAAAwR,EAAA+G,SAAA,EAEA,OADA,KAAA/Y,EAAAQ,EAAA,EAAAA,EAAA,GACA+R,SAAA,KANA,WACA,6CAAA/W,QAAAod,GAAAC,IAAAxF,gBAgBAlE,EAAA6J,UAAA,SAAAC,GACA5J,EAAA,oBAAAF,EAAAuB,EAAAE,IAAAqI,GACAvI,EAAAE,IAAAqI,EACAvI,EAAAC,IAAAD,EAAAE,IAAA3L,SACAkK,EAAAM,QAAAyJ,SACA/J,EAAAM,QAAAyJ,QAAAxI,EAAAE,MAGA,IAAAuI,GAAA,SAAAjV,GACA,GAAAiL,EAAAqI,IAAA,CAEA,IACA4B,EADA1b,EAAA,aAEA,IACA,IAAA2b,EAAA,IAAAC,cAAA,YACAD,EAAAE,MAAA,UACAF,EAAAG,QACAJ,EAAAC,EAAA/K,KACc,MAAAnI,GACdiT,EAAAK,cAAAxU,SAAAqJ,KAEA,IAAAoL,EAAAN,EAAAO,kBACAR,GAAAS,GAAA,SAAA1V,GACA,IACAkV,EAAAnd,MAAAiI,MAAAqN,EAAArN,GAAA1I,QAAAkC,EAAA2T,GACA,IAAAoH,EAAAiB,EAAAG,kBAAA,aAEA,qBADApB,GAAA,IAAAA,IAAA,SAAAA,GAAA,SAAAA,KAAA,IACAlG,SAAA,KAAAxK,OAAA,GACkB,MAAA5B,GAClB,oBAGU,CACV,IAAAnE,EAAA0O,EAAAC,IAAA5E,cAAA,KACA/J,EAAAiB,MAAA,wBACAjB,EAAA/F,MAAA6d,QAAA,OACApJ,EAAAC,IAAArC,KAAAjB,YAAArL,GACAmX,GAAAS,GAAA,SAAA1V,GAEA,OADAlC,EAAA/F,MAAAiI,QACAwM,EAAAC,IAAAoJ,YAAAC,iBAAAhY,EAAAqP,GAAA4I,iBAAA,WAGA,OAAAd,GAAAjV,IAEAgW,GAAA,WACA,cAAA3gB,KAAAqE,EAAArE,KAAA6D,EAAA7D,KAAAoE,GAAA,KAEAwc,GAAA,WACA,cAAA5gB,KAAAqE,EAAArE,KAAA6D,EAAA7D,KAAA2H,GAAA,KAEAkZ,GAAA,WACA,OAAA7gB,KAAA8gB,KAEAC,GAAA,SAAA9Z,EAAAkQ,EAAA/S,GAMA,GALA,MAAA+S,GAAAvB,EAAAI,GAAA/O,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,IACA7C,EAAA6C,EAAA7C,EACA+S,EAAAlQ,EAAAkQ,EACAlQ,OAEA,MAAAkQ,GAAAvB,EAAAI,GAAA/O,EA5aA,UA4aA,CACA,IAAA+Z,EAAApL,EAAAqL,OAAAha,GACAA,EAAA+Z,EAAA/Z,EACAkQ,EAAA6J,EAAA7J,EACA/S,EAAA4c,EAAA5c,EAQA,OANA6C,EAAA,GAAAkQ,EAAA,GAAA/S,EAAA,KACA6C,GAAA,IACAkQ,GAAA,IACA/S,GAAA,MAGA6C,EAAAkQ,EAAA/S,IAEA8c,GAAA,SAAAja,EAAAkQ,EAAA/S,EAAAia,GAIA,IAAA8C,GACAla,EAJAA,GAAA,IAKAkQ,EAJAA,GAAA,IAKA/S,EAJAA,GAAA,IAKA0c,IAAAlL,EAAAuL,IAAAla,EAAAkQ,EAAA/S,GACA4U,SAAA6H,IAGA,OADAjL,EAAAI,GAAAqI,EAAA,YAAA8C,EAAApX,QAAAsU,GACA8C,GAqNA,SAAAd,GAAA3J,EAAA0K,EAAAC,GAeA,OAdA,SAAAC,IACA,IAAAC,EAAA/K,MAAAxV,UAAAwN,MAAArO,KAAAsW,UAAA,GACAF,EAAAgL,EAAArd,KAAA,KACAsd,EAAAF,EAAAE,MAAAF,EAAAE,UACAC,EAAAH,EAAAG,MAAAH,EAAAG,UACA,OAAAD,EAAAtK,GAAAX,IAXA,SAAAN,EAAAyL,GACA,QAAAjZ,EAAA,EAAAsU,EAAA9G,EAAAvS,OAA2C+E,EAAAsU,EAAQtU,IAAA,GAAAwN,EAAAxN,KAAAiZ,EACnD,OAAAzL,EAAApV,KAAAoV,EAAAG,OAAA3N,EAAA,OAUAkZ,CAAAF,EAAAlL,GACA8K,IAAAG,EAAAjL,IAAAiL,EAAAjL,KAEAkL,EAAA/d,QAAA,YAAA8d,EAAAC,EAAAG,SACAH,EAAA5gB,KAAA0V,GACAiL,EAAAjL,GAAAG,EAAAb,GAAAuL,EAAAG,GACAF,IAAAG,EAAAjL,IAAAiL,EAAAjL,KA3MAX,EAAAjL,MAAA,SAAAqW,GACA,IAAAG,EA8BA,OA7BAvL,EAAAI,GAAAgL,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,GACAG,EAAAvL,EAAAiM,QAAAb,GACAA,EAAA/Z,EAAAka,EAAAla,EACA+Z,EAAA7J,EAAAgK,EAAAhK,EACA6J,EAAA5c,EAAA+c,EAAA/c,EACA4c,EAAAF,IAAAK,EAAAL,KACUlL,EAAAI,GAAAgL,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,GACVG,EAAAvL,EAAAkM,QAAAd,GACAA,EAAA/Z,EAAAka,EAAAla,EACA+Z,EAAA7J,EAAAgK,EAAAhK,EACA6J,EAAA5c,EAAA+c,EAAA/c,EACA4c,EAAAF,IAAAK,EAAAL,MAEAlL,EAAAI,GAAAgL,EAAA,YACAA,EAAApL,EAAAqL,OAAAD,IAEApL,EAAAI,GAAAgL,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,GACAG,EAAAvL,EAAAmM,QAAAf,GACAA,EAAA3c,EAAA8c,EAAA9c,EACA2c,EAAAnd,EAAAsd,EAAAtd,EACAmd,EAAArZ,EAAAwZ,EAAAxZ,EACAwZ,EAAAvL,EAAAoM,QAAAhB,GACAA,EAAAiB,EAAAd,EAAA/c,IAEA4c,GAAwBF,IAAA,SACxB7Z,EAAA+Z,EAAA7J,EAAA6J,EAAA5c,EAAA4c,EAAA3c,EAAA2c,EAAAnd,EAAAmd,EAAAiB,EAAAjB,EAAArZ,GAAA,GAGAqZ,EAAAhI,SAAA6H,GACAG,GAmBApL,EAAAiM,QAAA,SAAAxd,EAAAR,EAAAoe,EAAA5D,GAQA,IAAAzI,EAAAsM,EAAAC,EAAAC,EAAAC,EAUA,OAjBAriB,KAAAgW,GAAA3R,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,IACA4d,EAAA5d,EAAAD,EACAP,EAAAQ,EAAAR,EACAwa,EAAAha,EAAAga,EACAha,OAMA+d,GADAC,EAAAJ,EAAApe,IACA,EAAAU,GAFAF,GAFAA,GAAA,KAEA,QAEA,MACAuR,EAAAsM,EAAAC,EAAAF,EAAAI,EAMAnB,GAHAtL,IAAAyM,EAAAD,EAAA,IAAAA,EAAAC,GADAhe,OAEA6d,IAAAE,EAAAC,IAAAD,EAAA,KAAA/d,GACA8d,IAAA,IAAAC,EAAAC,IAAAD,GAAA/d,GACAga,IAmBAzI,EAAAkM,QAAA,SAAAzd,EAAAR,EAAA8D,EAAA0W,GAYA,IAAAzI,EAAAsM,EAAAC,EAAAC,EAAAC,EAUA,OArBAriB,KAAAgW,GAAA3R,EAAA,iBAAAA,GAAA,MAAAA,GAAA,MAAAA,IACAsD,EAAAtD,EAAAsD,EACA9D,EAAAQ,EAAAR,EACAQ,QAEAA,EAAA,GAAAR,EAAA,GAAA8D,EAAA,KACAtD,GAAA,IACAR,GAAA,IACA8D,GAAA,KAIAtD,GAFAA,GAAA,KAEA,OAEA+d,GADAC,EAAA,EAAAxe,GAAA8D,EAAA,GAAAA,EAAA,EAAAA,KACA,EAAApD,EAAAF,EAAA,MACAuR,EAAAsM,EAAAC,EAAAxa,EAAA0a,EAAA,EAMAnB,GAHAtL,IAAAyM,EAAAD,EAAA,IAAAA,EAAAC,GADAhe,OAEA6d,IAAAE,EAAAC,IAAAD,EAAA,KAAA/d,GACA8d,IAAA,IAAAC,EAAAC,IAAAD,GAAA/d,GACAga,IAkBAzI,EAAAoM,QAAA,SAAA/a,EAAAkQ,EAAA/S,GAMA,IAAAke,EAAAD,EAUA,OAdApb,GADA7C,EAAA2c,GAAA9Z,EAAAkQ,EAAA/S,IACA,GACA+S,EAAA/S,EAAA,GACAA,IAAA,IAYiBC,IAPjB,IADAge,GADAC,EAAA5J,EAAAzR,EAAAkQ,EAAA/S,IACAuU,EAAA1R,EAAAkQ,EAAA/S,IACA,KACAke,GAAArb,GAAAkQ,EAAA/S,GAAAie,EACAC,GAAAnL,GAAA/S,EAAA6C,GAAAob,EAAA,GACApb,EAAAkQ,GAAAkL,EAAA,GAEA,cAEiBxe,EADjB,GAAAwe,EAAA,EAAAA,EAAAC,EACiBle,EAAAke,EAAAtJ,SAAA2H,KAkBjB/K,EAAAmM,QAAA,SAAA9a,EAAAkQ,EAAA/S,GAMA,IAAAme,EAAAC,EAAA/M,EAAA4M,EAaA,OAjBApb,GADA7C,EAAA2c,GAAA9Z,EAAAkQ,EAAA/S,IACA,GACA+S,EAAA/S,EAAA,GACAA,IAAA,GAWAme,IARAC,EAAA9J,EAAAzR,EAAAkQ,EAAA/S,KACAqR,EAAAkD,EAAA1R,EAAAkQ,EAAA/S,KAOA,GAIiBC,IATjB,IADAge,EAAAG,EAAA/M,GACA,KACA+M,GAAAvb,GAAAkQ,EAAA/S,GAAAie,EACAG,GAAArL,GAAA/S,EAAA6C,GAAAob,EAAA,GACApb,EAAAkQ,GAAAkL,EAAA,GACA,cAKiBxe,EAHjB,GAAAwe,EAAA,EACAE,EAAA,GAAAF,GAAA,EAAAE,GACAF,GAAA,IAAAE,GACiB5a,EAAA4a,EAAAvJ,SAAA4H,KAEjBhL,EAAA6M,aAAA,WACA,OAAAziB,KAAAkE,KAAA,KAAAjC,QAAA0Z,EAAA,OAyBA/F,EAAA8M,SAAA,SAAA5H,EAAApE,GACA,IAAAiM,EAAAxL,EAAAC,IAAA5E,cAAA,OACAmQ,EAAAjgB,MAAAkgB,QAAA,6CACAD,EAAAE,OAAA,WACAnM,EAAAvW,KAAAH,MACAA,KAAA6iB,OAAA,KACA1L,EAAAC,IAAArC,KAAA+N,YAAA9iB,OAEA2iB,EAAAI,QAAA,WACA5L,EAAAC,IAAArC,KAAA+N,YAAA9iB,OAEAmX,EAAAC,IAAArC,KAAAjB,YAAA6O,GACAA,EAAA7H,OAGA,SAAAkI,KACA,OAAAhjB,KAAA8gB,IA+KA,SAAAmC,GAAAC,EAAAC,GAEA,IADA,IAAAtS,KACApI,EAAA,EAAA2a,EAAAF,EAAAxf,OAA2C0f,EAAA,GAAAD,EAAA1a,EAAmBA,GAAA,GAC9D,IAAAlB,IAC0BrG,GAAAgiB,EAAAza,EAAA,GAAAtH,GAAA+hB,EAAAza,EAAA,KACAvH,GAAAgiB,EAAAza,GAAAtH,GAAA+hB,EAAAza,EAAA,KACAvH,GAAAgiB,EAAAza,EAAA,GAAAtH,GAAA+hB,EAAAza,EAAA,KACAvH,GAAAgiB,EAAAza,EAAA,GAAAtH,GAAA+hB,EAAAza,EAAA,KAE1B0a,EACA1a,EAEkB2a,EAAA,GAAA3a,EAClBlB,EAAA,IAA6BrG,GAAAgiB,EAAA,GAAA/hB,GAAA+hB,EAAA,IACXE,EAAA,GAAA3a,IAClBlB,EAAA,IAA6BrG,GAAAgiB,EAAA,GAAA/hB,GAAA+hB,EAAA,IAC7B3b,EAAA,IAA6BrG,GAAAgiB,EAAA,GAAA/hB,GAAA+hB,EAAA,KAL7B3b,EAAA,IAA6BrG,GAAAgiB,EAAAE,EAAA,GAAAjiB,GAAA+hB,EAAAE,EAAA,IAQ7BA,EAAA,GAAA3a,EACAlB,EAAA,GAAAA,EAAA,GACkBkB,IAClBlB,EAAA,IAA6BrG,GAAAgiB,EAAAza,GAAAtH,GAAA+hB,EAAAza,EAAA,KAG7BoI,EAAAhQ,MAAA,MACA0G,EAAA,GAAArG,EAAA,EAAAqG,EAAA,GAAArG,EAAAqG,EAAA,GAAArG,GAAA,IACAqG,EAAA,GAAApG,EAAA,EAAAoG,EAAA,GAAApG,EAAAoG,EAAA,GAAApG,GAAA,GACAoG,EAAA,GAAArG,EAAA,EAAAqG,EAAA,GAAArG,EAAAqG,EAAA,GAAArG,GAAA,GACAqG,EAAA,GAAApG,EAAA,EAAAoG,EAAA,GAAApG,EAAAoG,EAAA,GAAApG,GAAA,EACAoG,EAAA,GAAArG,EACAqG,EAAA,GAAApG,IAIA,OAAA0P,EApLA+E,EAAAqL,OAAAZ,GAAA,SAAAgD,GACA,IAAAA,MAAArL,EAAAqL,IAAA9O,QAAA,OACA,OAAqBtN,GAAA,EAAAkQ,GAAA,EAAA/S,GAAA,EAAA0c,IAAA,OAAAwC,MAAA,EAAAtK,SAAAgK,IAErB,WAAAK,EACA,OAAqBpc,GAAA,EAAAkQ,GAAA,EAAA/S,GAAA,EAAA0c,IAAA,OAAA9H,SAAAgK,KAErBxH,EAAAtE,GAAAmM,EAAA7K,cAAA+K,UAAA,YAAAF,EAAAG,WAAAH,EAAAzD,GAAAyD,IACA,IACAI,EACAC,EACAC,EACA5Z,EACAzG,EACA2b,EACAkC,EAAAkC,EAAAO,MAAA3K,GACA,OAAAkI,GACAA,EAAA,KACAwC,EAAAhK,EAAAwH,EAAA,GAAAoC,UAAA,OACAG,EAAA/J,EAAAwH,EAAA,GAAAoC,UAAA,SACAE,EAAA9J,EAAAwH,EAAA,GAAAoC,UAAA,UAEApC,EAAA,KACAwC,EAAAhK,GAAArW,EAAA6d,EAAA,GAAAqC,OAAA,IAAAlgB,EAAA,IACAogB,EAAA/J,GAAArW,EAAA6d,EAAA,GAAAqC,OAAA,IAAAlgB,EAAA,IACAmgB,EAAA9J,GAAArW,EAAA6d,EAAA,GAAAqC,OAAA,IAAAlgB,EAAA,KAEA6d,EAAA,KACAlC,EAAAkC,EAAA,GAAAvd,GAAA2X,GACAkI,EAAAhK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAiV,GAAA,MACAC,EAAAjK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAkV,GAAA,MACAC,EAAAlK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAmV,GAAA,MACA,QAAAxC,EAAA,GAAA3I,cAAAhK,MAAA,OAAAzE,EAAA0P,EAAAwF,EAAA,KACAA,EAAA,SAAAA,EAAA,GAAAzQ,OAAA,KAAAzE,GAAA,MAEAoX,EAAA,IACAlC,EAAAkC,EAAA,GAAAvd,GAAA2X,GACAkI,EAAAhK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAiV,GAAA,MACAC,EAAAjK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAkV,GAAA,MACAC,EAAAlK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAmV,GAAA,OACA,OAAA1E,EAAA,GAAAzQ,OAAA,SAAAyQ,EAAA,GAAAzQ,OAAA,MAAAiV,GAAA,KACA,QAAAtC,EAAA,GAAA3I,cAAAhK,MAAA,OAAAzE,EAAA0P,EAAAwF,EAAA,KACAA,EAAA,SAAAA,EAAA,GAAAzQ,OAAA,KAAAzE,GAAA,KACA6L,EAAAiM,QAAA4B,EAAAC,EAAAC,EAAA5Z,IAEAoX,EAAA,IACAlC,EAAAkC,EAAA,GAAAvd,GAAA2X,GACAkI,EAAAhK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAiV,GAAA,MACAC,EAAAjK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAkV,GAAA,MACAC,EAAAlK,EAAAwF,EAAA,IACA,KAAAA,EAAA,GAAAzQ,OAAA,KAAAmV,GAAA,OACA,OAAA1E,EAAA,GAAAzQ,OAAA,SAAAyQ,EAAA,GAAAzQ,OAAA,MAAAiV,GAAA,KACA,QAAAtC,EAAA,GAAA3I,cAAAhK,MAAA,OAAAzE,EAAA0P,EAAAwF,EAAA,KACAA,EAAA,SAAAA,EAAA,GAAAzQ,OAAA,KAAAzE,GAAA,KACA6L,EAAAkM,QAAA2B,EAAAC,EAAAC,EAAA5Z,MAEAoX,GAAoBla,EAAAwc,EAAAtM,EAAAuM,EAAAtf,EAAAuf,EAAA3K,SAAAgK,KACpBlC,IAAA,cAAA6C,EAAAD,GAAA,EAAAD,GAAA,IAAAzK,SAAA,IAAAxK,MAAA,GACAoH,EAAAI,GAAAjM,EAAA,YAAAoX,EAAApX,WACAoX,KAEiBla,GAAA,EAAAkQ,GAAA,EAAA/S,GAAA,EAAA0c,IAAA,OAAAwC,MAAA,EAAAtK,SAAAgK,KACXpN,GAYNA,EAAAiO,IAAAxD,GAAA,SAAAhc,EAAAR,EAAAO,GACA,OAAAwR,EAAAiM,QAAAxd,EAAAR,EAAAO,GAAA0c,MAaAlL,EAAAkO,IAAAzD,GAAA,SAAAhc,EAAAR,EAAA8D,GACA,OAAAiO,EAAAkM,QAAAzd,EAAAR,EAAA8D,GAAAmZ,MAaAlL,EAAAuL,IAAAd,GAAA,SAAApZ,EAAAkQ,EAAA/S,GACA,SAAAoV,EAAAtY,GAA4B,OAAAA,EAAA,KAC5B,oBAAAsY,EAAApV,GAAAoV,EAAArC,IAAA,EAAAqC,EAAAvS,IAAA,IAAA+R,SAAA,IAAAxK,MAAA,KAWAoH,EAAA5N,SAAA,SAAAkX,GACA,IAAAvW,EAAA3I,KAAAgI,SAAAW,MAAA3I,KAAAgI,SAAAW,QAAmEtE,EAAA,EAAAR,EAAA,EAAAO,EAAA8a,GAAA,KACnEiC,EAAAnhB,KAAA6hB,QAAAlZ,EAAAtE,EAAAsE,EAAA9E,EAAA8E,EAAAvE,GAOA,OANAuE,EAAAtE,GAAA,KACAsE,EAAAtE,EAAA,IACAsE,EAAAtE,EAAA,EACAsE,EAAA9E,GAAA,GACA8E,EAAA9E,GAAA,IAAA7D,KAAAgI,SAAAW,OAAqDtE,EAAA,EAAAR,EAAA,EAAAO,EAAAuE,EAAAvE,KAErD+c,EAAAL,KAQAlL,EAAA5N,SAAA+b,MAAA,kBACA/jB,KAAA2I,OAoDAiN,EAAAoO,gBAAA,SAAAC,GACA,IAAAA,EACA,YAEA,IAAAC,EAAAC,GAAAF,GACA,GAAAC,EAAAE,IACA,OAAAC,GAAAH,EAAAE,KAGA,IAAAE,GAA4BpI,EAAA,EAAAzV,EAAA,EAAApC,EAAA,EAAAsD,EAAA,EAAA8N,EAAA,EAAAxO,EAAA,EAAAsd,EAAA,EAAA1gB,EAAA,EAAAP,EAAA,EAAA2e,EAAA,EAAAkB,EAAA,GAC5Bnd,KA4BA,OA3BA4P,EAAAI,GAAAiO,EAAAhO,IAAAL,EAAAI,GAAAiO,EAAA,GAAAhO,KACAjQ,EAAAqe,GAAAJ,IAEAje,EAAAtC,QACAsU,EAAAiM,GAAAhiB,QAAA2Z,EAAA,SAAAM,EAAA9X,EAAAqC,GACA,IAAAqM,KACAlR,EAAAwC,EAAAoU,cASA,GARA/R,EAAAxE,QAAA6Z,EAAA,SAAAI,EAAA9X,GACAA,GAAA0O,EAAAjS,MAAAuD,KAEA,KAAAxC,GAAAkR,EAAApP,OAAA,IACAsC,EAAAnF,MAAAuD,GAAAH,GAAA6O,EAAAsD,OAAA,OACAxU,EAAA,IACAwC,EAAA,KAAAA,EAAA,SAEA,KAAAxC,EACAoE,EAAAnF,MAAAuD,GAAAH,GAAA6O,SACkB,KAAAA,EAAApP,QAAA4gB,EAAA1iB,KAClBoE,EAAAnF,MAAAuD,GAAAH,GAAA6O,EAAAsD,OAAA,EAAAkO,EAAA1iB,MACA0iB,EAAA1iB,SAMAoE,EAAAgT,SAAApD,EAAA6M,aACAyB,EAAAE,IAAAC,GAAAre,GACAA,GAaA4P,EAAA4O,qBAAAnE,GAAA,SAAAoE,GACA,IAAAA,EACA,YAEA,IACAze,KAeA,OAdA4P,EAAAI,GAAAyO,EAAAxO,IAAAL,EAAAI,GAAAyO,EAAA,GAAAxO,KACAjQ,EAAAqe,GAAAI,IAEAze,EAAAtC,QACAsU,EAAAyM,GAAAxiB,QAAA4Z,EAAA,SAAAK,EAAA9X,EAAAqC,GACA,IAAAqM,KACAyF,EAAApY,KAAAiE,GACAqC,EAAAxE,QAAA6Z,EAAA,SAAAI,EAAA9X,GACAA,GAAA0O,EAAAjS,MAAAuD,KAEA4B,EAAAnF,MAAAuD,GAAAH,GAAA6O,MAGA9M,EAAAgT,SAAApD,EAAA6M,aACAzc,IAGA,IAAAme,GAAA,SAAAO,GACA,IAAAnd,EAAA4c,GAAAO,GAAAP,GAAAO,OAcA,OAbAnd,EAAAmd,GACAnd,EAAAmd,GAAAC,MAAA,IAEApd,EAAAmd,IACAC,MAAA,KAGAC,WAAA,WACA,QAAA7G,KAAAxW,IAAA2P,GAAA6G,OAAA2G,IACAnd,EAAAwW,GAAA4G,SACApd,EAAAwW,GAAA4G,cAAApd,EAAAwW,MAGAxW,EAAAmd,IA2JA,SAAAG,GAAAvhB,EAAAwhB,EAAAC,EAAAC,EAAAC,GAGA,OAAA3hB,GADAA,IADA,EAAAwhB,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,GACA,EAAAH,EAAA,GAAAC,EAAA,EAAAC,GACA,EAAAF,EAAA,EAAAC,EAEA,SAAAG,GAAA1G,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,EAAAjC,GACA,MAAAA,IACAA,EAAA,GAQA,IALA,IAAAkC,GADAlC,IAAA,IAAAA,EAAA,IAAAA,GACA,EAEAmC,IAAA,8EACAC,GAAA,yEACAC,EAAA,EACA/c,EAAA,EAAwBA,EAJxB,GAI+BA,IAAA,CAC/B,IAAAgd,EAAAJ,EAAAC,EAAA7c,GAAA4c,EACAK,EAAAb,GAAAY,EAAAjH,EAAAE,EAAAC,EAAAwG,GACAQ,EAAAd,GAAAY,EAAAhH,EAAAja,EAAAoa,EAAAwG,GACAQ,EAAAF,IAAAC,IACAH,GAAAD,EAAA9c,GAAAgQ,EAAAoN,KAAAD,GAEA,OAAAP,EAAAG,EAmBA,SAAAM,GAAAtH,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,GACA,KACA1M,EAAA8F,EAAAE,GAAA/F,EAAAgG,EAAAwG,IACAxM,EAAA6F,EAAAE,GAAAhG,EAAAiG,EAAAwG,IACAzM,EAAA+F,EAAAja,GAAAmU,EAAAiG,EAAAwG,IACAzM,EAAA8F,EAAAja,GAAAkU,EAAAkG,EAAAwG,IAJA,CAQA,IAEAW,GAAAvH,EAAAE,IAAAE,EAAAwG,IAAA3G,EAAAja,IAAAma,EAAAwG,GAEA,GAAAY,EAAA,CAGA,IAAAC,IAPAxH,EAAAha,EAAAia,EAAAC,IAAAC,EAAAwG,IAAA3G,EAAAE,IAAAC,EAAAyG,EAAAxG,EAAAuG,IAOAY,EACAE,IAPAzH,EAAAha,EAAAia,EAAAC,IAAAE,EAAAwG,IAAA3G,EAAAja,IAAAma,EAAAyG,EAAAxG,EAAAuG,IAOAY,EACAG,GAAAF,EAAAG,QAAA,GACAC,GAAAH,EAAAE,QAAA,GACA,KACAD,GAAAvN,EAAA6F,EAAAE,GAAAyH,QAAA,IACAD,GAAAxN,EAAA8F,EAAAE,GAAAyH,QAAA,IACAD,GAAAvN,EAAAgG,EAAAwG,GAAAgB,QAAA,IACAD,GAAAxN,EAAAiG,EAAAwG,GAAAgB,QAAA,IACAC,GAAAzN,EAAA8F,EAAAja,GAAA2hB,QAAA,IACAC,GAAA1N,EAAA+F,EAAAja,GAAA2hB,QAAA,IACAC,GAAAzN,EAAAiG,EAAAwG,GAAAe,QAAA,IACAC,GAAA1N,EAAAkG,EAAAwG,GAAAe,QAAA,IAIA,OAAiBjlB,EAAA8kB,EAAA7kB,EAAA8kB,KAQjB,SAAAI,GAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAA7Q,EAAA8Q,WAAAJ,GACAK,EAAA/Q,EAAA8Q,WAAAH,GACA,IAAA3Q,EAAAgR,gBAAAH,EAAAE,GACA,OAAAH,EAAA,KAUA,IARA,IAAAK,EAAA3B,GAAArP,MAAA,EAAAyQ,GACAQ,EAAA5B,GAAArP,MAAA,EAAA0Q,GACAQ,EAAArO,KAAAmO,EAAA,MACAG,EAAAtO,KAAAoO,EAAA,MACAG,KACAC,KACAC,KACAtJ,EAAA2I,EAAA,KACA/d,EAAA,EAAwBA,EAAAse,EAAA,EAAYte,IAAA,CACpC,IAAAlB,EAAAqO,EAAAwR,kBAAAvR,MAAAD,EAAA0Q,EAAAriB,OAAAwE,EAAAse,IACAE,EAAApmB,MAAyBK,EAAAqG,EAAArG,EAAAC,EAAAoG,EAAApG,EAAAmC,EAAAmF,EAAAse,IAEzB,IAAAte,EAAA,EAAoBA,EAAAue,EAAA,EAAYve,IAChClB,EAAAqO,EAAAwR,kBAAAvR,MAAAD,EAAA2Q,EAAAtiB,OAAAwE,EAAAue,IACAE,EAAArmB,MAAyBK,EAAAqG,EAAArG,EAAAC,EAAAoG,EAAApG,EAAAmC,EAAAmF,EAAAue,IAEzB,IAAAve,EAAA,EAAoBA,EAAAse,EAAQte,IAC5B,QAAA3E,EAAA,EAA4BA,EAAAkjB,EAAQljB,IAAA,CACpC,IAAAujB,EAAAJ,EAAAxe,GACA6e,EAAAL,EAAAxe,EAAA,GACA8e,EAAAL,EAAApjB,GACA0jB,EAAAN,EAAApjB,EAAA,GACA2jB,EAAAljB,EAAA+iB,EAAApmB,EAAAmmB,EAAAnmB,GAAA,aACAwmB,EAAAnjB,EAAAijB,EAAAtmB,EAAAqmB,EAAArmB,GAAA,aACA8U,EAAA8P,GAAAuB,EAAAnmB,EAAAmmB,EAAAlmB,EAAAmmB,EAAApmB,EAAAomB,EAAAnmB,EAAAomB,EAAArmB,EAAAqmB,EAAApmB,EAAAqmB,EAAAtmB,EAAAsmB,EAAArmB,GACA,GAAA6U,EAAA,CACA,GAAAmR,EAAAnR,EAAA9U,EAAAilB,QAAA,KAAAnQ,EAAA7U,EAAAglB,QAAA,GACA,SAEAgB,EAAAnR,EAAA9U,EAAAilB,QAAA,IAAAnQ,EAAA7U,EAAAglB,QAAA,GACA,IAAAwB,EAAAN,EAAA/jB,EAAAiB,GAAAyR,EAAAyR,GAAAJ,EAAAI,KAAAH,EAAAG,GAAAJ,EAAAI,MAAAH,EAAAhkB,EAAA+jB,EAAA/jB,GACAskB,EAAAL,EAAAjkB,EAAAiB,GAAAyR,EAAA0R,GAAAH,EAAAG,KAAAF,EAAAE,GAAAH,EAAAG,MAAAF,EAAAlkB,EAAAikB,EAAAjkB,GACAqkB,GAAA,GAAAA,GAAA,OAAAC,GAAA,GAAAA,GAAA,QACApB,EACA3I,IAEAA,EAAAhd,MACAK,EAAA8U,EAAA9U,EACAC,EAAA6U,EAAA7U,EACAwmB,GAAAhP,EAAAgP,EAAA,GACAC,GAAAjP,EAAAiP,EAAA,OAOA,OAAA/J,EAgCA,SAAAgK,GAAAC,EAAAC,EAAAvB,GACAsB,EAAAlS,EAAAoS,YAAAF,GACAC,EAAAnS,EAAAoS,YAAAD,GAGA,IAFA,IAAAvJ,EAAAC,EAAAC,EAAAla,EAAAyjB,EAAAC,EAAAC,EAAAC,EAAA9B,EAAAC,EACA1I,EAAA2I,EAAA,KACA/d,EAAA,EAAAsU,EAAA+K,EAAApkB,OAA2C+E,EAAAsU,EAAQtU,IAAA,CACnD,IAAA4f,EAAAP,EAAArf,GACA,QAAA4f,EAAA,GACA7J,EAAAyJ,EAAAI,EAAA,GACA5J,EAAAyJ,EAAAG,EAAA,OACc,CACd,KAAAA,EAAA,IAEA7J,GADA8H,GAAA9H,EAAAC,GAAAxa,OAAAokB,EAAA7Z,MAAA,KACA,GACAiQ,EAAA6H,EAAA,KAEAA,GAAA9H,EAAAC,EAAAD,EAAAC,EAAAwJ,EAAAC,EAAAD,EAAAC,GACA1J,EAAAyJ,EACAxJ,EAAAyJ,GAEA,QAAApkB,EAAA,EAAAkZ,EAAA+K,EAAArkB,OAAmDI,EAAAkZ,EAAQlZ,IAAA,CAC3D,IAAAwkB,EAAAP,EAAAjkB,GACA,QAAAwkB,EAAA,GACA5J,EAAAyJ,EAAAG,EAAA,GACA9jB,EAAA4jB,EAAAE,EAAA,OACsB,CACtB,KAAAA,EAAA,IAEA5J,GADA6H,GAAA7H,EAAAla,GAAAP,OAAAqkB,EAAA9Z,MAAA,KACA,GACAhK,EAAA+hB,EAAA,KAEAA,GAAA7H,EAAAla,EAAAka,EAAAla,EAAA2jB,EAAAC,EAAAD,EAAAC,GACA1J,EAAAyJ,EACA3jB,EAAA4jB,GAEA,IAAAG,EAAAlC,GAAAC,EAAAC,EAAAC,GACA,GAAAA,EACA3I,GAAA0K,MAC0B,CAC1B,QAAAxgB,EAAA,EAAAygB,EAAAD,EAAA7kB,OAA8DqE,EAAAygB,EAAQzgB,IACtEwgB,EAAAxgB,GAAA0gB,SAAAhgB,EACA8f,EAAAxgB,GAAA2gB,SAAA5kB,EACAykB,EAAAxgB,GAAAue,OACAiC,EAAAxgB,GAAAwe,OAEA1I,IAAA5Z,OAAAskB,OAMA,OAAA1K,EA1UAjI,EAAAwR,kBAAA,SAAAuB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA5lB,GACA,IAAAqkB,EAAA,EAAArkB,EACA6lB,EAAAtQ,EAAA8O,EAAA,GACAyB,EAAAvQ,EAAA8O,EAAA,GACAC,EAAAtkB,IACA+lB,EAAAzB,EAAAtkB,EACApC,EAAAioB,EAAAR,EAAA,EAAAS,EAAA9lB,EAAAulB,EAAA,EAAAlB,EAAArkB,IAAAylB,EAAAM,EAAAJ,EACA9nB,EAAAgoB,EAAAP,EAAA,EAAAQ,EAAA9lB,EAAAwlB,EAAA,EAAAnB,EAAArkB,IAAA0lB,EAAAK,EAAAH,EACAI,EAAAX,EAAA,EAAArlB,GAAAulB,EAAAF,GAAAf,GAAAmB,EAAA,EAAAF,EAAAF,GACAY,EAAAX,EAAA,EAAAtlB,GAAAwlB,EAAAF,GAAAhB,GAAAoB,EAAA,EAAAF,EAAAF,GACAY,EAAAX,EAAA,EAAAvlB,GAAAylB,EAAAF,GAAAjB,GAAAqB,EAAA,EAAAF,EAAAF,GACAY,EAAAX,EAAA,EAAAxlB,GAAA0lB,EAAAF,GAAAlB,GAAAsB,EAAA,EAAAF,EAAAF,GACAY,EAAA/B,EAAAgB,EAAArlB,EAAAulB,EACAc,EAAAhC,EAAAiB,EAAAtlB,EAAAwlB,EACAzO,EAAAsN,EAAAoB,EAAAzlB,EAAA2lB,EACA3O,EAAAqN,EAAAqB,EAAA1lB,EAAA4lB,EACAU,EAAA,OAAAnR,EAAAoG,MAAAyK,EAAAE,EAAAD,EAAAE,GAAA3Q,EAEA,OADAwQ,EAAAE,GAAAD,EAAAE,KAAAG,GAAA,MAEA1oB,IACAC,IACAsU,GAAiBvU,EAAAooB,EAAAnoB,EAAAooB,GACjBM,GAAiB3oB,EAAAsoB,EAAAroB,EAAAsoB,GACjB9gB,OAAqBzH,EAAAwoB,EAAAvoB,EAAAwoB,GACrBnhB,KAAmBtH,EAAAmZ,EAAAlZ,EAAAmZ,GACnBsP,UAiCAhU,EAAA8Q,WAAA,SAAAiC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAtT,EAAAI,GAAA2S,EAAA,WACAA,KAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,IAEA,IAAAvM,EAAAmN,GAAAjU,MAAA,KAAA8S,GACA,OACAznB,EAAAyb,EAAA/D,IAAA1X,EACAC,EAAAwb,EAAA/D,IAAAzX,EACAud,GAAA/B,EAAA3V,IAAA9F,EACAsD,GAAAmY,EAAA3V,IAAA7F,EACAiC,MAAAuZ,EAAA3V,IAAA9F,EAAAyb,EAAA/D,IAAA1X,EACAgC,OAAAyZ,EAAA3V,IAAA7F,EAAAwb,EAAA/D,IAAAzX,IAgBAyU,EAAAmU,kBAAA,SAAApN,EAAAzb,EAAAC,GACA,OAAAD,GAAAyb,EAAAzb,MAAAyb,EAAA+B,IAAAvd,GAAAwb,EAAAxb,MAAAwb,EAAAnY,IAcAoR,EAAAgR,gBAAA,SAAAH,EAAAE,GACA,IAAAle,EAAAmN,EAAAmU,kBACA,OAAAthB,EAAAke,EAAAF,EAAAvlB,EAAAulB,EAAAtlB,IACAsH,EAAAke,EAAAF,EAAA/H,GAAA+H,EAAAtlB,IACAsH,EAAAke,EAAAF,EAAAvlB,EAAAulB,EAAAjiB,KACAiE,EAAAke,EAAAF,EAAA/H,GAAA+H,EAAAjiB,KACAiE,EAAAge,EAAAE,EAAAzlB,EAAAylB,EAAAxlB,IACAsH,EAAAge,EAAAE,EAAAjI,GAAAiI,EAAAxlB,IACAsH,EAAAge,EAAAE,EAAAzlB,EAAAylB,EAAAniB,KACAiE,EAAAge,EAAAE,EAAAjI,GAAAiI,EAAAniB,MACAiiB,EAAAvlB,EAAAylB,EAAAjI,IAAA+H,EAAAvlB,EAAAylB,EAAAzlB,GAAAylB,EAAAzlB,EAAAulB,EAAA/H,IAAAiI,EAAAzlB,EAAAulB,EAAAvlB,KACAulB,EAAAtlB,EAAAwlB,EAAAniB,IAAAiiB,EAAAtlB,EAAAwlB,EAAAxlB,GAAAwlB,EAAAxlB,EAAAslB,EAAAjiB,IAAAmiB,EAAAxlB,EAAAslB,EAAAtlB,IAkKAyU,EAAAoU,iBAAA,SAAAlC,EAAAC,GACA,OAAAF,GAAAC,EAAAC,IAEAnS,EAAAqU,uBAAA,SAAAnC,EAAAC,GACA,OAAAF,GAAAC,EAAAC,EAAA,IAoEAnS,EAAAsU,kBAAA,SAAAtgB,EAAA1I,EAAAC,GACA,IAAAwb,EAAA/G,EAAAuU,SAAAvgB,GACA,OAAAgM,EAAAmU,kBAAApN,EAAAzb,EAAAC,IACA0mB,GAAAje,IAAA,IAAA1I,EAAAC,IAAA,IAAAwb,EAAA+B,GAAA,cAEA9I,EAAAwU,gBAAA,SAAAC,GACA,kBACAvU,EAAA,0DAAAuU,EAAA,sBAAAA,KAwBA,IAAAC,GAAA1U,EAAAuU,SAAA,SAAAvgB,GACA,IAAAsa,EAAAC,GAAAva,GACA,GAAAsa,EAAAvH,KACA,OAAAiB,GAAAsG,EAAAvH,MAEA,IAAA/S,EACA,OAAqB1I,EAAA,EAAAC,EAAA,EAAAiC,MAAA,EAAAF,OAAA,EAAAwb,GAAA,EAAAla,GAAA,GAQrB,IALA,IAIA+C,EAJArG,EAAA,EACAC,EAAA,EACAihB,KACAmI,KAEA9hB,EAAA,EAAAsU,GANAnT,EAAAsT,GAAAtT,IAMAlG,OAA0C+E,EAAAsU,EAAQtU,IAElD,SADAlB,EAAAqC,EAAAnB,IACA,GACAvH,EAAAqG,EAAA,GACApG,EAAAoG,EAAA,GACA6a,EAAAvhB,KAAAK,GACAqpB,EAAA1pB,KAAAM,OACc,CACd,IAAAqpB,EAAAV,GAAA5oB,EAAAC,EAAAoG,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IACA6a,IAAAne,GAAAumB,EAAA5R,IAAA1X,EAAAspB,EAAAxjB,IAAA9F,GACAqpB,IAAAtmB,GAAAumB,EAAA5R,IAAAzX,EAAAqpB,EAAAxjB,IAAA7F,GACAD,EAAAqG,EAAA,GACApG,EAAAoG,EAAA,GAGA,IAAAkjB,EAAA9R,EAAA9C,GAAA,EAAAuM,GACAsI,EAAA/R,EAAA9C,GAAA,EAAA0U,GACAI,EAAAjS,EAAA7C,GAAA,EAAAuM,GACAwI,EAAAlS,EAAA7C,GAAA,EAAA0U,GACAnnB,EAAAunB,EAAAF,EACAvnB,EAAA0nB,EAAAF,EACAG,GACA3pB,EAAAupB,EACAtpB,EAAAupB,EACAhM,GAAAiM,EACAnmB,GAAAomB,EACAxnB,QACAF,SACAmX,GAAAoQ,EAAArnB,EAAA,EACAkX,GAAAoQ,EAAAxnB,EAAA,GAGA,OADAghB,EAAAvH,KAAAiB,GAAAiN,GACAA,GAEAxG,GAAA,SAAAyG,GACA,IAAAjN,EAAAD,GAAAkN,GAEA,OADAjN,EAAA7E,SAAApD,EAAA6M,aACA5E,GAEAkN,GAAAnV,EAAAoV,gBAAA,SAAAF,GACA,IAAA5G,EAAAC,GAAA2G,GACA,GAAA5G,EAAA+G,IACA,OAAA5G,GAAAH,EAAA+G,KAEArV,EAAAI,GAAA8U,EAAA7U,IAAAL,EAAAI,GAAA8U,KAAA,GAAA7U,KACA6U,EAAAlV,EAAAoO,gBAAA8G,IAEA,IAAAjN,KACA3c,EAAA,EACAC,EAAA,EACAmoB,EAAA,EACAC,EAAA,EACA5gB,EAAA,EACA,KAAAmiB,EAAA,QAGAxB,EAFApoB,EAAA4pB,EAAA,MAGAvB,EAFApoB,EAAA2pB,EAAA,MAGAniB,IACAkV,EAAAhd,MAAA,IAAAK,EAAAC,KAEA,QAAAsH,EAAAE,EAAAoU,EAAA+N,EAAApnB,OAAuD+E,EAAAsU,EAAQtU,IAAA,CAC/D,IAAAxB,EAAA4W,EAAApV,MACAyiB,EAAAJ,EAAAriB,GACA,GAAAyiB,EAAA,IAAA3S,EAAApY,KAAA+qB,EAAA,IAEA,OADAjkB,EAAA,GAAAsR,EAAApY,KAAA+qB,EAAA,IACAjkB,EAAA,IACA,QACAA,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,KAAAikB,EAAA,GAAAhqB,GAAAilB,QAAA,GACAlf,EAAA,KAAAikB,EAAA,GAAA/pB,GAAAglB,QAAA,GACA,MACA,QACAlf,EAAA,KAAAikB,EAAA,GAAA/pB,GAAAglB,QAAA,GACA,MACA,QACAmD,EAAA4B,EAAA,GACA3B,EAAA2B,EAAA,GACA,QACA,QAAApnB,EAAA,EAAAkZ,EAAAkO,EAAAxnB,OAA4DI,EAAAkZ,EAAQlZ,IACpEmD,EAAAnD,KAAAonB,EAAApnB,MAAA,EAAA5C,EAAAC,IAAAglB,QAAA,OAGkB,CAClBlf,EAAA4W,EAAApV,MACA,KAAAyiB,EAAA,KACA5B,EAAA4B,EAAA,GAAAhqB,EACAqoB,EAAA2B,EAAA,GAAA/pB,GAEA,QAAA4G,EAAA,EAAAygB,EAAA0C,EAAAxnB,OAAoDqE,EAAAygB,EAAQzgB,IAC5D8V,EAAApV,GAAAV,GAAAmjB,EAAAnjB,GAGA,IAAAhE,EAAA8Z,EAAApV,GAAA/E,OACA,OAAAma,EAAApV,GAAA,IACA,QACAvH,EAAAooB,EACAnoB,EAAAooB,EACA,MACA,QACAroB,IAAA2c,EAAApV,GAAA1E,EAAA,GACA,MACA,QACA5C,IAAA0c,EAAApV,GAAA1E,EAAA,GACA,MACA,QACA7C,IAAA2c,EAAApV,GAAA1E,EAAA,GACA5C,IAAA0c,EAAApV,GAAA1E,EAAA,IAKA,OAFA8Z,EAAA7E,SAAApD,EAAA6M,aACAyB,EAAA+G,IAAA5G,GAAAxG,GACAA,GAEAsN,GAAAvV,EAAAwV,gBAAA,SAAAN,GACA,IAAA5G,EAAAC,GAAA2G,GACA,GAAA5G,EAAA3f,IACA,OAAA8f,GAAAH,EAAA3f,KAKA,GAHAqR,EAAAI,GAAA8U,EAAA7U,IAAAL,EAAAI,GAAA8U,KAAA,GAAA7U,KACA6U,EAAAlV,EAAAoO,gBAAA8G,KAEAA,MAAApnB,OACA,kBAEA,IAAAma,KACA3c,EAAA,EACAC,EAAA,EACAmoB,EAAA,EACAC,EAAA,EACA5gB,EAAA,EACA,KAAAmiB,EAAA,QAGAxB,EAFApoB,GAAA4pB,EAAA,MAGAvB,EAFApoB,GAAA2pB,EAAA,MAGAniB,IACAkV,EAAA,QAAA3c,EAAAC,IAGA,IADA,IACA8F,EAAAikB,EADAG,EAAA,GAAAP,EAAApnB,QAAA,KAAAonB,EAAA,YAAAA,EAAA,MAAAhR,eAAA,KAAAgR,EAAA,MAAAhR,cACArR,EAAAE,EAAAoU,EAAA+N,EAAApnB,OAA8D+E,EAAAsU,EAAQtU,IAAA,CAGtE,GAFAoV,EAAAhd,KAAAoG,OACAikB,EAAAJ,EAAAriB,IACA,IAAAoR,EAAA1Z,KAAA+qB,EAAA,IAEA,OADAjkB,EAAA,GAAA4S,EAAA1Z,KAAA+qB,EAAA,IACAjkB,EAAA,IACA,QACAA,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,GAAAikB,EAAA,GACAjkB,EAAA,KAAAikB,EAAA,GAAAhqB,GACA+F,EAAA,KAAAikB,EAAA,GAAA/pB,GACA,MACA,QACA8F,EAAA,IAAAikB,EAAA,GAAA/pB,EACA,MACA,QACA8F,EAAA,IAAAikB,EAAA,GAAAhqB,EACA,MACA,QAEA,IADA,IAAAoqB,GAAApqB,EAAAC,GAAA8C,GAAAinB,EAAA1c,MAAA,IACA1K,EAAA,EAAAkZ,EAAAsO,EAAA5nB,OAA8DI,EAAAkZ,EAAQlZ,IACtEwnB,EAAAxnB,IAAAwnB,EAAAxnB,GAAA5C,EACAoqB,IAAAxnB,IAAAwnB,EAAAxnB,GAAA3C,EAEA0c,EAAAlH,MACAkH,IAAA5Z,GAAAgf,GAAAqI,EAAAD,IACA,MACA,QACA/B,GAAA4B,EAAA,GAAAhqB,EACAqoB,GAAA2B,EAAA,GAAA/pB,EACA,QACA,IAAA2C,EAAA,EAAAkZ,EAAAkO,EAAAxnB,OAAwDI,EAAAkZ,EAAQlZ,IAChEmD,EAAAnD,IAAAonB,EAAApnB,MAAA,EAAA5C,EAAAC,QAGkB,QAAA+pB,EAAA,GAClBI,GAAApqB,EAAAC,GAAA8C,GAAAinB,EAAA1c,MAAA,IACAqP,EAAAlH,MACAkH,IAAA5Z,GAAAgf,GAAAqI,EAAAD,IACApkB,GAAA,KAAAhD,GAAAinB,EAAA1c,OAAA,SAEA,QAAAzG,EAAA,EAAAygB,EAAA0C,EAAAxnB,OAAoDqE,EAAAygB,EAAQzgB,IAC5Dd,EAAAc,GAAAmjB,EAAAnjB,GAGA,OAAAd,EAAA,IACA,QACA/F,EAAAooB,EACAnoB,EAAAooB,EACA,MACA,QACAroB,EAAA+F,EAAA,GACA,MACA,QACA9F,EAAA8F,EAAA,GACA,MACA,QACAqiB,EAAAriB,IAAAvD,OAAA,GACA6lB,EAAAtiB,IAAAvD,OAAA,GACA,QACAxC,EAAA+F,IAAAvD,OAAA,GACAvC,EAAA8F,IAAAvD,OAAA,IAKA,OAFAma,EAAA7E,SAAApD,EAAA6M,aACAyB,EAAA3f,IAAA8f,GAAAxG,GACAA,GAEA0N,GAAA,SAAA/M,EAAAC,EAAAC,EAAAla,GACA,OAAAga,EAAAC,EAAAC,EAAAla,EAAAka,EAAAla,IAEAgnB,GAAA,SAAAhN,EAAAC,EAAAiL,EAAAC,EAAAjL,EAAAla,GAGA,OAFA,IAGAga,EAFA,IAEAkL,EAHA,IAIAjL,EAHA,IAGAkL,EAJA,IAKAjL,EAJA,IAIAgL,EALA,IAMAllB,EALA,IAKAmlB,EACAjL,EACAla,IAGAinB,GAAA,SAAAjN,EAAAC,EAAA7D,EAAAC,EAAA0D,EAAAmN,EAAAC,EAAAjN,EAAAla,EAAAonB,GAGA,IAGAzE,EAHA0E,EAAA,IAAA/S,EAAA,IACAgG,EAAAhG,EAAA,MAAAyF,GAAA,GACAV,KAEAiO,EAAAzL,GAAA,SAAAnf,EAAAC,EAAA2d,GAGA,OAA6B5d,EAF7BA,EAAAuX,EAAAsT,IAAAjN,GAAA3d,EAAAsX,EAAAuT,IAAAlN,GAE6B3d,EAD7BD,EAAAuX,EAAAuT,IAAAlN,GAAA3d,EAAAsX,EAAAsT,IAAAjN,MAGA,GAAA8M,EAqCAK,EAAAL,EAAA,GACAM,EAAAN,EAAA,GACAvR,EAAAuR,EAAA,GACAtR,EAAAsR,EAAA,OAxCA,CAEApN,GADA2I,EAAA2E,EAAAtN,EAAAC,GAAAK,IACA5d,EACAud,EAAA0I,EAAAhmB,EAEAud,GADAyI,EAAA2E,EAAApN,EAAAla,GAAAsa,IACA5d,EACAsD,EAAA2iB,EAAAhmB,EACAsX,EAAAsT,IAAAjT,EAAA,IAAAyF,GACA9F,EAAAuT,IAAAlT,EAAA,IAAAyF,GADA,IAEArd,GAAAsd,EAAAE,GAAA,EACAvd,GAAAsd,EAAAja,GAAA,EACAH,EAAAnD,KAAA0Z,KAAAzZ,KAAA0Z,KACAxW,EAAA,IAEAuW,GADAvW,EAAAoU,EAAAoN,KAAAxhB,GAEAwW,GAAAxW,GAEA,IAAA8nB,EAAAvR,IACAwR,EAAAvR,IACA9S,GAAA2jB,GAAAC,GAAA,KACAlT,EAAAoN,KAAAthB,GAAA4nB,EAAAC,EAAAD,EAAAhrB,IAAAirB,EAAAlrB,MAAAirB,EAAAhrB,IAAAirB,EAAAlrB,OACAmZ,EAAAtS,EAAA6S,EAAAzZ,EAAA0Z,GAAA2D,EAAAE,GAAA,EACApE,EAAAvS,GAAA8S,EAAA3Z,EAAA0Z,GAAA6D,EAAAja,GAAA,EACAynB,EAAAxT,EAAA4T,OAAA5N,EAAAnE,GAAAO,GAAAsL,QAAA,IACA+F,EAAAzT,EAAA4T,OAAA7nB,EAAA8V,GAAAO,GAAAsL,QAAA,IAEA8F,EAAAzN,EAAAnE,EAAAvB,EAAAmT,IACAC,EAAAxN,EAAArE,EAAAvB,EAAAoT,IACAD,EAAA,IAAAA,EAAA,EAAAnT,EAAAmT,GACAC,EAAA,IAAAA,EAAA,EAAApT,EAAAoT,GACAP,GAAAM,EAAAC,IACAD,GAAA,EAAAnT,IAEA6S,GAAAO,EAAAD,IACAC,GAAA,EAAApT,GAQA,IAAAwT,EAAAJ,EAAAD,EACA,GAAA1nB,EAAA+nB,GAAAT,EAAA,CACA,IAAAU,EAAAL,EACAM,EAAA9N,EACA+N,EAAAjoB,EACA0nB,EAAAD,EAAAJ,GAAAF,GAAAO,EAAAD,EAAA,MACAvN,EAAArE,EAAAO,EAAAnC,EAAAsT,IAAAG,GACA1nB,EAAA8V,EAAAO,EAAApC,EAAAuT,IAAAE,GACArO,EAAA4N,GAAA/M,EAAAla,EAAAoW,EAAAC,EAAA0D,EAAA,EAAAoN,EAAAa,EAAAC,GAAAP,EAAAK,EAAAlS,EAAAC,IAEAgS,EAAAJ,EAAAD,EACA,IAAAS,EAAAjU,EAAAsT,IAAAE,GACAU,EAAAlU,EAAAuT,IAAAC,GACAW,EAAAnU,EAAAsT,IAAAG,GACAW,EAAApU,EAAAuT,IAAAE,GACA5oB,EAAAmV,EAAAqU,IAAAR,EAAA,GACAS,EAAA,IAAAnS,EAAAtX,EACA0pB,EAAA,IAAAnS,EAAAvX,EACA2pB,GAAAzO,EAAAC,GACAyO,GAAA1O,EAAAuO,EAAAJ,EAAAlO,EAAAuO,EAAAN,GACAS,GAAAzO,EAAAqO,EAAAF,EAAAroB,EAAAwoB,EAAAJ,GACAQ,GAAA1O,EAAAla,GAGA,GAFA0oB,EAAA,KAAAD,EAAA,GAAAC,EAAA,GACAA,EAAA,KAAAD,EAAA,GAAAC,EAAA,GACAtB,EACA,OAAAsB,EAAAC,EAAAC,GAAAnpB,GAAA4Z,GAIA,IADA,IAAAwP,KACA5kB,EAAA,EAAAsU,GAFAc,GAAAqP,EAAAC,EAAAC,GAAAnpB,GAAA4Z,GAAA3Z,OAAAN,GAAA,MAEAF,OAAiD+E,EAAAsU,EAAQtU,IACzD4kB,EAAA5kB,KAAA,EAAAqjB,EAAAjO,EAAApV,EAAA,GAAAoV,EAAApV,GAAAqW,GAAA3d,EAAA2qB,EAAAjO,EAAApV,GAAAoV,EAAApV,EAAA,GAAAqW,GAAA5d,EAEA,OAAAmsB,GAGAC,GAAA,SAAA3E,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA5lB,GACA,IAAAqkB,EAAA,EAAArkB,EACA,OACApC,EAAA2X,EAAA8O,EAAA,GAAAgB,EAAA,EAAA9P,EAAA8O,EAAA,GAAArkB,EAAAulB,EAAA,EAAAlB,EAAArkB,IAAAylB,EAAAlQ,EAAAvV,EAAA,GAAA2lB,EACA9nB,EAAA0X,EAAA8O,EAAA,GAAAiB,EAAA,EAAA/P,EAAA8O,EAAA,GAAArkB,EAAAwlB,EAAA,EAAAnB,EAAArkB,IAAA0lB,EAAAnQ,EAAAvV,EAAA,GAAA4lB,IAGAY,GAAAzJ,GAAA,SAAAsI,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,IAOAqE,EAPArR,EAAA6M,EAAA,EAAAF,EAAAF,GAAAM,EAAA,EAAAF,EAAAF,GACAzkB,EAAA,GAAAykB,EAAAF,GAAA,GAAAI,EAAAF,GACApiB,EAAAkiB,EAAAE,EACAlB,IAAAvjB,EAAAqU,EAAAoN,KAAAzhB,IAAA,EAAA8X,EAAAzV,IAAA,EAAAyV,EACA0L,IAAAxjB,EAAAqU,EAAAoN,KAAAzhB,IAAA,EAAA8X,EAAAzV,IAAA,EAAAyV,EACA/a,GAAAynB,EAAAM,GACAhoB,GAAAynB,EAAAM,GA+BA,OA7BA1kB,EAAAojB,GAAA,SAAAA,EAAA,IACApjB,EAAAqjB,GAAA,SAAAA,EAAA,IACAD,EAAA,GAAAA,EAAA,IACA4F,EAAAD,GAAA3E,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvB,GACAzmB,EAAAL,KAAA0sB,EAAArsB,GACAC,EAAAN,KAAA0sB,EAAApsB,IAEAymB,EAAA,GAAAA,EAAA,IACA2F,EAAAD,GAAA3E,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAtB,GACA1mB,EAAAL,KAAA0sB,EAAArsB,GACAC,EAAAN,KAAA0sB,EAAApsB,IAEA+a,EAAA8M,EAAA,EAAAF,EAAAF,GAAAM,EAAA,EAAAF,EAAAF,GAEAriB,EAAAmiB,EAAAE,EACAnB,KAFAvjB,EAAA,GAAA0kB,EAAAF,GAAA,GAAAI,EAAAF,IAEArQ,EAAAoN,KAAAzhB,IAAA,EAAA8X,EAAAzV,IAAA,EAAAyV,EACA0L,IAAAxjB,EAAAqU,EAAAoN,KAAAzhB,IAAA,EAAA8X,EAAAzV,IAAA,EAAAyV,EACA3X,EAAAojB,GAAA,SAAAA,EAAA,IACApjB,EAAAqjB,GAAA,SAAAA,EAAA,IACAD,EAAA,GAAAA,EAAA,IACA4F,EAAAD,GAAA3E,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvB,GACAzmB,EAAAL,KAAA0sB,EAAArsB,GACAC,EAAAN,KAAA0sB,EAAApsB,IAEAymB,EAAA,GAAAA,EAAA,IACA2F,EAAAD,GAAA3E,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAtB,GACA1mB,EAAAL,KAAA0sB,EAAArsB,GACAC,EAAAN,KAAA0sB,EAAApsB,KAGAyX,KAAuB1X,EAAAyX,EAAA9C,GAAA,EAAA3U,GAAAC,EAAAwX,EAAA9C,GAAA,EAAA1U,IACvB6F,KAAuB9F,EAAAwX,EAAA7C,GAAA,EAAA3U,GAAAC,EAAAuX,EAAA7C,GAAA,EAAA1U,OAGvB+b,GAAAtH,EAAAoS,YAAA3H,GAAA,SAAAzW,EAAAme,GACA,IAAA7D,GAAA6D,GAAA5D,GAAAva,GACA,IAAAme,GAAA7D,EAAAsJ,MACA,OAAAnJ,GAAAH,EAAAsJ,OAyFA,IAvFA,IAAAjmB,EAAA4jB,GAAAvhB,GACAmb,EAAAgD,GAAAoD,GAAApD,GACArL,GAA0Bxb,EAAA,EAAAC,EAAA,EAAAssB,GAAA,EAAAC,GAAA,EAAAtL,EAAA,EAAAmI,EAAA,EAAAoD,GAAA,KAAAC,GAAA,MAC1BC,GAA2B3sB,EAAA,EAAAC,EAAA,EAAAssB,GAAA,EAAAC,GAAA,EAAAtL,EAAA,EAAAmI,EAAA,EAAAoD,GAAA,KAAAC,GAAA,MAC3BE,EAAA,SAAAlkB,EAAAiH,EAAAkd,GACA,IAAAvE,EAAAC,EACA,IAAA7f,EACA,WAAAiH,EAAA3P,EAAA2P,EAAA1P,EAAA0P,EAAA3P,EAAA2P,EAAA1P,EAAA0P,EAAA3P,EAAA2P,EAAA1P,GAGA,SADAyI,EAAA,KAJuCokB,EAAA,EAAAC,EAAA,MAIvCpd,EAAA8c,GAAA9c,EAAA+c,GAAA,MACAhkB,EAAA,IACA,QACAiH,EAAAuR,EAAAxY,EAAA,GACAiH,EAAA0Z,EAAA3gB,EAAA,GACA,MACA,QACAA,GAAA,KAAA3F,GAAAwnB,GAAA5V,GAAA,GAAAhF,EAAA3P,EAAA2P,EAAA1P,GAAA8C,GAAA2F,EAAA4E,MAAA,MACA,MACA,QACA,KAAAuf,GAAA,KAAAA,GACAvE,EAAA,EAAA3Y,EAAA3P,EAAA2P,EAAA4c,GACAhE,EAAA,EAAA5Y,EAAA1P,EAAA0P,EAAA6c,KAGAlE,EAAA3Y,EAAA3P,EACAuoB,EAAA5Y,EAAA1P,GAEAyI,GAAA,IAAA4f,EAAAC,GAAAxlB,GAAA2F,EAAA4E,MAAA,IACA,MACA,QACA,KAAAuf,GAAA,KAAAA,GACAld,EAAA8c,GAAA,EAAA9c,EAAA3P,EAAA2P,EAAA8c,GACA9c,EAAA+c,GAAA,EAAA/c,EAAA1P,EAAA0P,EAAA+c,KAGA/c,EAAA8c,GAAA9c,EAAA3P,EACA2P,EAAA+c,GAAA/c,EAAA1P,GAEAyI,GAAA,KAAA3F,GAAAunB,GAAA3a,EAAA3P,EAAA2P,EAAA1P,EAAA0P,EAAA8c,GAAA9c,EAAA+c,GAAAhkB,EAAA,GAAAA,EAAA,KACA,MACA,QACAiH,EAAA8c,GAAA/jB,EAAA,GACAiH,EAAA+c,GAAAhkB,EAAA,GACAA,GAAA,KAAA3F,GAAAunB,GAAA3a,EAAA3P,EAAA2P,EAAA1P,EAAAyI,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KACA,MACA,QACAA,GAAA,KAAA3F,GAAAsnB,GAAA1a,EAAA3P,EAAA2P,EAAA1P,EAAAyI,EAAA,GAAAA,EAAA,KACA,MACA,QACAA,GAAA,KAAA3F,GAAAsnB,GAAA1a,EAAA3P,EAAA2P,EAAA1P,EAAAyI,EAAA,GAAAiH,EAAA1P,IACA,MACA,QACAyI,GAAA,KAAA3F,GAAAsnB,GAAA1a,EAAA3P,EAAA2P,EAAA1P,EAAA0P,EAAA3P,EAAA0I,EAAA,KACA,MACA,QACAA,GAAA,KAAA3F,GAAAsnB,GAAA1a,EAAA3P,EAAA2P,EAAA1P,EAAA0P,EAAAuR,EAAAvR,EAAA0Z,IAGA,OAAA3gB,GAEAskB,EAAA,SAAAC,EAAA1lB,GACA,GAAA0lB,EAAA1lB,GAAA/E,OAAA,GACAyqB,EAAA1lB,GAAAmZ,QAEA,IADA,IAAAyG,EAAA8F,EAAA1lB,GACA4f,EAAA3kB,QACA0qB,EAAA3lB,GAAA,IACAsc,IAAAsJ,EAAA5lB,GAAA,KACA0lB,EAAA/X,OAAA3N,IAAA,QAAAxE,GAAAokB,EAAAjS,OAAA,OAEA+X,EAAA/X,OAAA3N,EAAA,GACAsU,EAAArE,EAAAnR,EAAA7D,OAAAqhB,KAAArhB,QAAA,KAGA4qB,EAAA,SAAAxG,EAAAC,EAAAwG,EAAAC,EAAA/lB,GACAqf,GAAAC,GAAA,KAAAD,EAAArf,GAAA,SAAAsf,EAAAtf,GAAA,KACAsf,EAAA3R,OAAA3N,EAAA,OAAA+lB,EAAAttB,EAAAstB,EAAArtB,IACAotB,EAAAd,GAAA,EACAc,EAAAb,GAAA,EACAa,EAAArtB,EAAA4mB,EAAArf,GAAA,GACA8lB,EAAAptB,EAAA2mB,EAAArf,GAAA,GACAsU,EAAArE,EAAAnR,EAAA7D,OAAAqhB,KAAArhB,QAAA,KAGA0qB,KACAC,KACAI,EAAA,GACAV,EAAA,GACAtlB,EAAA,EAAAsU,EAAArE,EAAAnR,EAAA7D,OAAAqhB,KAAArhB,QAAA,GAAuE+E,EAAAsU,EAAQtU,IAAA,CAC/ElB,EAAAkB,KAAAgmB,EAAAlnB,EAAAkB,GAAA,IAEA,KAAAgmB,IAEAL,EAAA3lB,GAAAgmB,EACAhmB,IAAAslB,EAAAK,EAAA3lB,EAAA,KAEAlB,EAAAkB,GAAAqlB,EAAAvmB,EAAAkB,GAAAiU,EAAAqR,GAEA,KAAAK,EAAA3lB,IAAA,KAAAgmB,IAAAL,EAAA3lB,GAAA,KAIAylB,EAAA3mB,EAAAkB,GAEAsc,IACAA,EAAAtc,KAAAgmB,EAAA1J,EAAAtc,GAAA,IACA,KAAAgmB,IAEAJ,EAAA5lB,GAAAgmB,EACAhmB,IAAAslB,EAAAM,EAAA5lB,EAAA,KAEAsc,EAAAtc,GAAAqlB,EAAA/I,EAAAtc,GAAAolB,EAAAE,GAEA,KAAAM,EAAA5lB,IAAA,KAAAgmB,IAAAJ,EAAA5lB,GAAA,KAEAylB,EAAAnJ,EAAAtc,IAEA6lB,EAAA/mB,EAAAwd,EAAArI,EAAAmR,EAAAplB,GACA6lB,EAAAvJ,EAAAxd,EAAAsmB,EAAAnR,EAAAjU,GACA,IAAAimB,EAAAnnB,EAAAkB,GACAkmB,EAAA5J,KAAAtc,GACAmmB,EAAAF,EAAAhrB,OACAmrB,EAAA9J,GAAA4J,EAAAjrB,OACAgZ,EAAAxb,EAAAwtB,EAAAE,EAAA,GACAlS,EAAAvb,EAAAutB,EAAAE,EAAA,GACAlS,EAAA+Q,GAAAhU,EAAAiV,EAAAE,EAAA,KAAAlS,EAAAxb,EACAwb,EAAAgR,GAAAjU,EAAAiV,EAAAE,EAAA,KAAAlS,EAAAvb,EACA0sB,EAAAJ,GAAA1I,IAAAtL,EAAAkV,EAAAE,EAAA,KAAAhB,EAAA3sB,GACA2sB,EAAAH,GAAA3I,IAAAtL,EAAAkV,EAAAE,EAAA,KAAAhB,EAAA1sB,GACA0sB,EAAA3sB,EAAA6jB,GAAA4J,EAAAE,EAAA,GACAhB,EAAA1sB,EAAA4jB,GAAA4J,EAAAE,EAAA,GAKA,OAHA9J,IACAb,EAAAsJ,MAAAnJ,GAAA9c,IAEAwd,GAAAxd,EAAAwd,GAAAxd,GACU,KAAA8c,IAuCVyK,IAtCAlZ,EAAAmZ,WAAA1O,GAAA,SAAA3F,GAEA,IADA,IAAA4Q,KACA7iB,EAAA,EAAAsU,EAAArC,EAAAhX,OAAkD+E,EAAAsU,EAAQtU,IAAA,CAC1D,IAAA8kB,KACAyB,EAAAtU,EAAAjS,GAAAmb,MAAA,uBAEA,GADA2J,EAAA5iB,MAAAiL,EAAAqL,OAAA+N,EAAA,IACAzB,EAAA5iB,MAAA2Y,MACA,YAEAiK,EAAAxjB,QAAAwjB,EAAA5iB,MAAAZ,QACAwjB,EAAA5iB,MAAA4iB,EAAA5iB,MAAAmW,IACAkO,EAAA,KAAAzB,EAAA3iB,OAAAokB,EAAA,QACA1D,EAAAzqB,KAAA0sB,GAEA,IAAA9kB,EAAA,EAAAsU,EAAAuO,EAAA5nB,OAAA,EAA8C+E,EAAAsU,EAAQtU,IACtD,IAAA6iB,EAAA7iB,GAAAmC,OAAA,CAGA,IAFA,IAAAjC,EAAA8Q,EAAA6R,EAAA7iB,EAAA,GAAAmC,QAAA,GACApC,EAAA,EACA1E,EAAA2E,EAAA,EAAwC3E,EAAAiZ,EAAQjZ,IAChD,GAAAwnB,EAAAxnB,GAAA8G,OAAA,CACApC,EAAA8iB,EAAAxnB,GAAA8G,OACA,MAGApC,IACAA,EAAA,IACA1E,EAAAiZ,GAIA,IADA,IAAAlM,IADArI,EAAAiR,EAAAjR,IACAG,IAAA7E,EAAA2E,EAAA,GAC2BA,EAAA3E,EAAO2E,IAClCE,GAAAkI,EACAya,EAAA7iB,GAAAmC,OAAAjC,EAAA,IAIA,OAAA2iB,IAEA1V,EAAAqZ,MAAA,SAAAve,EAAAwe,GACAxe,GAAAwe,EAAAhoB,MAAAgoB,EAAAhoB,IAAAwJ,EAAAye,MACAze,GAAAwe,EAAAE,SAAAF,EAAAE,OAAA1e,EAAA2e,MACA3e,EAAA2e,OAAA3e,EAAA2e,KAAAF,KAAAze,EAAAye,MACAze,EAAAye,OAAAze,EAAAye,KAAAE,KAAA3e,EAAA2e,QAkDAC,IAhDA1Z,EAAA2Z,SAAA,SAAA7e,EAAAwe,GACAA,EAAAhoB,MAAAwJ,IAGAoe,GAAApe,EAAAwe,GACAxe,EAAA2e,KAAA,KACA3e,EAAAye,KAAAD,EAAAhoB,IACAgoB,EAAAhoB,IAAAmoB,KAAA3e,EACAwe,EAAAhoB,IAAAwJ,IAEAkF,EAAA4Z,QAAA,SAAA9e,EAAAwe,GACAA,EAAAE,SAAA1e,IAGAoe,GAAApe,EAAAwe,GACAxe,EAAA2e,KAAAH,EAAAE,OACA1e,EAAAye,KAAA,KACAD,EAAAE,OAAAD,KAAAze,EACAwe,EAAAE,OAAA1e,IAEAkF,EAAA6Z,aAAA,SAAA/e,EAAAgf,EAAAR,GACAJ,GAAApe,EAAAwe,GACAQ,GAAAR,EAAAhoB,MAAAgoB,EAAAhoB,IAAAwJ,GACAgf,EAAAL,OAAAK,EAAAL,KAAAF,KAAAze,GACAA,EAAA2e,KAAAK,EAAAL,KACA3e,EAAAye,KAAAO,EACAA,EAAAL,KAAA3e,GAEAkF,EAAA+Z,cAAA,SAAAjf,EAAAgf,EAAAR,GACAJ,GAAApe,EAAAwe,GACAQ,GAAAR,EAAAE,SAAAF,EAAAE,OAAA1e,GACAgf,EAAAP,OAAAO,EAAAP,KAAAE,KAAA3e,GACAA,EAAAye,KAAAO,EAAAP,KACAO,EAAAP,KAAAze,EACAA,EAAA2e,KAAAK,GAcA9Z,EAAA0Z,SAAA,SAAA1lB,EAAAvG,GACA,IAAAwnB,EAAAP,GAAA1gB,GACA8G,GACAkf,GACAvsB,UAAAyU,GAEA3U,QAAA,WACA,OAAA0nB,IAIA,OADAgF,GAAAnf,EAAArN,GACAqN,EAAAoM,SAiBA+S,IAHAja,EAAAka,cAAA,SAAAlmB,EAAAvG,GACA,OAAAwZ,EAAAjT,EAAA0lB,GAAA1lB,EAAAvG,KAEAuS,EAAAma,kBAAA,SAAArf,EAAAsf,GACA,SAAAA,EACA,OAAAtf,EAAAkf,EAAAvsB,UAEA2sB,EAAAhY,EAAAgY,GAAA/tB,QAAA,gBAA4CyO,EAAAkf,EAAAvsB,WAAAyU,GAC5C,IAEAmY,EACAC,EAHAC,EAAAva,EAAA4O,qBAAAwL,GACAjR,EAAA,EAGAqR,EAAA,EACAC,EAAA,EACAT,EAAAlf,EAAAkf,EACAna,EAAA,IAAA6a,GAEA,GADAV,EAAAvsB,UAAA8sB,MACAA,EACA,QAAA1nB,EAAA,EAAAsU,EAAAoT,EAAAzsB,OAAmD+E,EAAAsU,EAAQtU,IAAA,CAC3D,IAKA+V,EACAC,EACAC,EACAla,EACAqmB,EATAvnB,EAAA6sB,EAAA1nB,GACA8nB,EAAAjtB,EAAAI,OACA8sB,EAAAxY,EAAA1U,EAAA,IAAAkV,cACAiY,EAAAntB,EAAA,IAAAktB,EACAE,EAAAD,EAAAhb,EAAAkb,SAAA,EAMA,KAAAH,GAAA,GAAAD,EACAE,GACAjS,EAAAkS,EAAAxvB,EAAA,KACAud,EAAAiS,EAAAvvB,EAAA,KACAud,EAAAgS,EAAAxvB,EAAAoC,EAAA,GAAAA,EAAA,IACAkB,EAAAksB,EAAAvvB,EAAAmC,EAAA,GAAAA,EAAA,IACAmS,EAAAmb,UAAAlS,EAAAF,EAAAha,EAAAia,IAEAhJ,EAAAmb,UAAAttB,EAAA,GAAAA,EAAA,IAEsB,KAAAktB,EACtB,GAAAD,GACA1F,KAAAna,EAAAvN,QAAA,GACAsS,EAAAqW,OAAAxoB,EAAA,GAAAunB,EAAA3pB,EAAA2pB,EAAAznB,MAAA,EAAAynB,EAAA1pB,EAAA0pB,EAAA3nB,OAAA,GACA6b,GAAAzb,EAAA,IAC0B,GAAAitB,IAC1BE,GACA/R,EAAAgS,EAAAxvB,EAAAoC,EAAA,GAAAA,EAAA,IACAkB,EAAAksB,EAAAvvB,EAAAmC,EAAA,GAAAA,EAAA,IACAmS,EAAAqW,OAAAxoB,EAAA,GAAAob,EAAAla,IAEAiR,EAAAqW,OAAAxoB,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAEAyb,GAAAzb,EAAA,IAEsB,KAAAktB,EACtB,GAAAD,GAAA,GAAAA,GACA1F,KAAAna,EAAAvN,QAAA,GACAsS,EAAAob,MAAAvtB,EAAA,GAAAA,EAAAitB,EAAA,GAAA1F,EAAA3pB,EAAA2pB,EAAAznB,MAAA,EAAAynB,EAAA1pB,EAAA0pB,EAAA3nB,OAAA,GACAktB,GAAA9sB,EAAA,GACA+sB,GAAA/sB,EAAAitB,EAAA,IAC0B,GAAAA,IAC1BE,GACA/R,EAAAgS,EAAAxvB,EAAAoC,EAAA,GAAAA,EAAA,IACAkB,EAAAksB,EAAAvvB,EAAAmC,EAAA,GAAAA,EAAA,IACAmS,EAAAob,MAAAvtB,EAAA,GAAAA,EAAA,GAAAob,EAAAla,IAEAiR,EAAAob,MAAAvtB,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAEA8sB,GAAA9sB,EAAA,GACA+sB,GAAA/sB,EAAA,IAEsB,KAAAktB,GAAA,GAAAD,GACtB9a,EAAAa,IAAAhT,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAEAssB,EAAAkB,OAAA,EACApgB,EAAAoM,OAAArH,EAUA/E,EAAAoM,OAAArH,EAEAma,EAAAQ,KACAR,EAAAS,KACAT,EAAA7Q,MACA6Q,EAAAK,KAAAxa,EAAA7I,EACAgjB,EAAAM,KAAAza,EAAAiB,EAEA,GAAA0Z,GAAA,GAAAC,IAAAtR,GAAA6Q,EAAAjT,MACAiT,EAAAjT,KAAAzb,IAAA+uB,EACAL,EAAAjT,KAAAxb,IAAA+uB,GAEAN,EAAAkB,OAAA,IAGAC,GAAA,SAAArP,GACA,IAAA/Z,EAAA+Z,EAAA,GACA,OAAA/Z,EAAA6Q,eACA,eAAA7Q,EAAA,KACA,eAAAA,EAAA,aACA,kBAAA+Z,EAAAhe,QACAiE,EAAA,EAAA+Z,EAAA,GAAAA,EAAA,KAEA/Z,EAAA,GAEA,kBAAA+Z,EAAAhe,QACAiE,EAAA,IAAA+Z,EAAA,GAAAA,EAAA,IACkB,GAAAA,EAAAhe,QAClBiE,EAAA,MAEAA,EAAA,KAIAqpB,GAAApb,EAAAqb,mBAAA,SAAAtJ,EAAAC,GACAA,EAAA5P,EAAA4P,GAAA3lB,QAAA,gBAAwC0lB,GACxCA,EAAA/R,EAAA4O,qBAAAmD,OACAC,EAAAhS,EAAA4O,qBAAAoD,OAMA,IALA,IAGA9jB,EAAAkZ,EACAkU,EAAAC,EAJAC,EAAA1Y,EAAAiP,EAAAjkB,OAAAkkB,EAAAlkB,QACA2tB,KACAC,KACA7oB,EAAA,EAEmBA,EAAA2oB,EAAe3oB,IAAA,CAGlC,GAFAyoB,EAAAvJ,EAAAlf,IAAAsoB,GAAAnJ,EAAAnf,IACA0oB,EAAAvJ,EAAAnf,IAAAsoB,GAAAG,GACAA,EAAA,IAAAC,EAAA,IACA,KAAAD,EAAA,GAAA1Y,gBAAA0Y,EAAA,IAAAC,EAAA,IAAAD,EAAA,IAAAC,EAAA,KACA,KAAAD,EAAA,GAAA1Y,gBAAA0Y,EAAA,IAAAC,EAAA,IAAAD,EAAA,IAAAC,EAAA,IAEA,OAIA,IAFAE,EAAA5oB,MACA6oB,EAAA7oB,MACA3E,EAAA,EAAAkZ,EAAAtE,EAAAwY,EAAAxtB,OAAAytB,EAAAztB,QAA+DI,EAAAkZ,EAAQlZ,IACvEA,KAAAotB,IAAAG,EAAA5oB,GAAA3E,GAAAotB,EAAAptB,IACAA,KAAAqtB,IAAAG,EAAA7oB,GAAA3E,GAAAqtB,EAAArtB,IAGA,OACAutB,OACAC,OA4EA,SAAAhB,GAAApU,EAAA9X,EAAAqC,EAAAoK,EAAAjE,EAAA8J,GACA,MAAAwF,GACAlc,KAAAkc,KACAlc,KAAAoE,KACApE,KAAAyG,KACAzG,KAAA6Q,KACA7Q,KAAA4M,KACA5M,KAAA0W,OAEA1W,KAAAkc,EAAA,EACAlc,KAAAoE,EAAA,EACApE,KAAAyG,EAAA,EACAzG,KAAA6Q,EAAA,EACA7Q,KAAA4M,EAAA,EACA5M,KAAA0W,EAAA,GAvFAd,EAAA2b,cAAA,SAAArwB,EAAAC,EAAAmb,EAAAjY,GACA,IAAAmtB,EAEA,UADAA,EAAA,MAAAntB,GAAAuR,EAAAI,GAAA9U,EAAA,UAAAA,EAAAiW,EAAAC,IAAAqa,eAAAvwB,IAIA,OAAAswB,EAAAE,QACA,MAAAvwB,GAEAqwB,YACApuB,MAAAouB,EAAA9uB,MAAAivB,YAAAH,EAAAI,YACA1uB,OAAAsuB,EAAA9uB,MAAAmvB,aAAAL,EAAAM,eAIAN,YACApuB,MAAAjC,EACA+B,OAAAoZ,IAKAkV,UAAA,EACAtwB,IACAC,IACAiC,MAAAkZ,EACApZ,OAAAmB,IAcAuR,EAAAmV,kBACAnV,EAAAM,WAYAN,EAAAsH,cAiBAtH,EAAAkH,OAAA,SAAAZ,EAAA9X,EAAAqC,EAAAoK,EAAAjE,EAAA8J,GACA,WAAA4Z,GAAApU,EAAA9X,EAAAqC,EAAAoK,EAAAjE,EAAA8J,IAmBA,SAAAqb,GA0JA,SAAAC,EAAA9V,GACA,OAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAEA,SAAA+V,EAAA/V,GACA,IAAAgW,EAAAzZ,EAAAoN,KAAAmM,EAAA9V,IACAA,EAAA,KAAAA,EAAA,IAAAgW,GACAhW,EAAA,KAAAA,EAAA,IAAAgW,GAhJAH,EAAAzb,IAAA,SAAA4F,EAAA9X,EAAAqC,EAAAoK,EAAAjE,EAAA8J,GACA,IAGAxV,EAAAC,EAAAgiB,EAAAtF,EAHAsU,aACA1c,IAAAzV,KAAAkc,EAAAlc,KAAAyG,EAAAzG,KAAA4M,IAAA5M,KAAAoE,EAAApE,KAAA6Q,EAAA7Q,KAAA0W,IAAA,QACAoG,IAAAZ,EAAAzV,EAAAmG,IAAAxI,EAAAyM,EAAA6F,IAAA,QAOA,IAJAwF,gBAAAoU,KACAxT,IAAAZ,MAAAzV,EAAAyV,EAAAtP,IAAAsP,EAAA9X,EAAA8X,EAAArL,EAAAqL,EAAAxF,IAAA,SAGAxV,EAAA,EAAwBA,EAAA,EAAOA,IAC/B,IAAAC,EAAA,EAA4BA,EAAA,EAAOA,IAAA,CAEnC,IADA0c,EAAA,EACAsF,EAAA,EAAgCA,EAAA,EAAOA,IACvCtF,GAAApI,EAAAvU,GAAAiiB,GAAArG,EAAAqG,GAAAhiB,GAEAgxB,EAAAjxB,GAAAC,GAAA0c,EAGA7d,KAAAkc,EAAAiW,EAAA,MACAnyB,KAAAoE,EAAA+tB,EAAA,MACAnyB,KAAAyG,EAAA0rB,EAAA,MACAnyB,KAAA6Q,EAAAshB,EAAA,MACAnyB,KAAA4M,EAAAulB,EAAA,MACAnyB,KAAA0W,EAAAyb,EAAA,OASAJ,EAAApB,OAAA,WACA,IAAAyB,EAAApyB,KACAkB,EAAAkxB,EAAAlW,EAAAkW,EAAAvhB,EAAAuhB,EAAAhuB,EAAAguB,EAAA3rB,EACA,WAAA6pB,GAAA8B,EAAAvhB,EAAA3P,GAAAkxB,EAAAhuB,EAAAlD,GAAAkxB,EAAA3rB,EAAAvF,EAAAkxB,EAAAlW,EAAAhb,GAAAkxB,EAAA3rB,EAAA2rB,EAAA1b,EAAA0b,EAAAvhB,EAAAuhB,EAAAxlB,GAAA1L,GAAAkxB,EAAAhuB,EAAAguB,EAAAxlB,EAAAwlB,EAAAlW,EAAAkW,EAAA1b,GAAAxV,IASA6wB,EAAAnU,MAAA,WACA,WAAA0S,GAAAtwB,KAAAkc,EAAAlc,KAAAoE,EAAApE,KAAAyG,EAAAzG,KAAA6Q,EAAA7Q,KAAA4M,EAAA5M,KAAA0W,IAWAqb,EAAAnB,UAAA,SAAA1vB,EAAAC,GACAnB,KAAAsW,IAAA,QAAApV,EAAAC,IAaA4wB,EAAAlB,MAAA,SAAA3vB,EAAAC,EAAAkZ,EAAAC,GACA,MAAAnZ,MAAAD,IACAmZ,GAAAC,IAAAta,KAAAsW,IAAA,QAAA+D,EAAAC,GACAta,KAAAsW,IAAApV,EAAA,IAAAC,EAAA,MACAkZ,GAAAC,IAAAta,KAAAsW,IAAA,SAAA+D,GAAAC,IAYAyX,EAAAjG,OAAA,SAAA5P,EAAAhb,EAAAC,GACA+a,EAAAtG,EAAAkJ,IAAA5C,GACAhb,KAAA,EACAC,KAAA,EACA,IAAA4qB,GAAAtT,EAAAsT,IAAA7P,GAAAiK,QAAA,GACA6F,GAAAvT,EAAAuT,IAAA9P,GAAAiK,QAAA,GACAnmB,KAAAsW,IAAAyV,EAAAC,KAAAD,EAAA7qB,EAAAC,GACAnB,KAAAsW,IAAA,SAAApV,GAAAC,IAYA4wB,EAAA7wB,EAAA,SAAAA,EAAAC,GACA,OAAAD,EAAAlB,KAAAkc,EAAA/a,EAAAnB,KAAAyG,EAAAzG,KAAA4M,GAYAmlB,EAAA5wB,EAAA,SAAAD,EAAAC,GACA,OAAAD,EAAAlB,KAAAoE,EAAAjD,EAAAnB,KAAA6Q,EAAA7Q,KAAA0W,GAEAqb,EAAAnsB,IAAA,SAAA6C,GACA,OAAAzI,KAAAgY,EAAAqa,aAAA,GAAA5pB,IAAA0d,QAAA,IAEA4L,EAAA/Y,SAAA,WACA,OAAApD,EAAAoI,IACA,WAAAhe,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,IAAA1B,OAAA,KACAlE,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,QAAA1B,QAEA6tB,EAAAO,SAAA,WACA,sDAAAtyB,KAAA4F,IAAA,GACA,SAAA5F,KAAA4F,IAAA,YAAA5F,KAAA4F,IAAA,YAAA5F,KAAA4F,IAAA,GACA,QAAA5F,KAAA4F,IAAA,WAAA5F,KAAA4F,IAAA,oCAEAmsB,EAAAnnB,OAAA,WACA,OAAA5K,KAAA4M,EAAAuZ,QAAA,GAAAnmB,KAAA0W,EAAAyP,QAAA,KAwBA4L,EAAAnuB,MAAA,WACA,IAAAuuB,KAEAA,EAAAlC,GAAAjwB,KAAA4M,EACAulB,EAAAjC,GAAAlwB,KAAA0W,EAGA,IAAA6b,IAAAvyB,KAAAkc,EAAAlc,KAAAyG,IAAAzG,KAAAoE,EAAApE,KAAA6Q,IACAshB,EAAAK,OAAA/Z,EAAAoN,KAAAmM,EAAAO,EAAA,KACAN,EAAAM,EAAA,IAEAJ,EAAAM,MAAAF,EAAA,MAAAA,EAAA,MAAAA,EAAA,MAAAA,EAAA,MACAA,EAAA,IAAAA,EAAA,MAAAA,EAAA,MAAAJ,EAAAM,MAAAF,EAAA,MAAAA,EAAA,MAAAJ,EAAAM,OAEAN,EAAAO,OAAAja,EAAAoN,KAAAmM,EAAAO,EAAA,KACAN,EAAAM,EAAA,IACAJ,EAAAM,OAAAN,EAAAO,OAGA,IAAA1G,GAAAuG,EAAA,MACAxG,EAAAwG,EAAA,MAaA,OAZAxG,EAAA,GACAoG,EAAArG,OAAAlW,EAAAmJ,IAAAtG,EAAAka,KAAA5G,IACAC,EAAA,IACAmG,EAAArG,OAAA,IAAAqG,EAAArG,SAGAqG,EAAArG,OAAAlW,EAAAmJ,IAAAtG,EAAA4T,KAAAL,IAGAmG,EAAAS,YAAAT,EAAAM,MAAAtM,QAAA,IAAAgM,EAAAK,OAAArM,QAAA,IAAAgM,EAAAO,OAAAvM,QAAA,IAAAgM,EAAArG,QACAqG,EAAAU,gBAAAV,EAAAM,MAAAtM,QAAA,IAAAgM,EAAAK,OAAArM,QAAA,IAAAgM,EAAAO,OAAAvM,QAAA,KAAAgM,EAAArG,OACAqG,EAAAW,aAAAX,EAAAM,MAAAtM,QAAA,KAAAgM,EAAArG,OACAqG,GASAJ,EAAAgB,kBAAA,SAAAC,GACA,IAAAnvB,EAAAmvB,GAAAhzB,KAAA4D,KACA,OAAAC,EAAA+uB,UACA/uB,EAAA2uB,QAAA3uB,EAAA2uB,OAAArM,QAAA,GACAtiB,EAAA6uB,QAAA7uB,EAAA6uB,OAAAvM,QAAA,GACAtiB,EAAAioB,QAAAjoB,EAAAioB,OAAA3F,QAAA,IACAtiB,EAAAosB,IAAApsB,EAAAqsB,GAAA,KAAArsB,EAAAosB,GAAApsB,EAAAqsB,IAAApY,IACA,GAAAjU,EAAA2uB,QAAA,GAAA3uB,EAAA6uB,OAAA,KAAA7uB,EAAA2uB,OAAA3uB,EAAA6uB,OAAA,KAAA5a,IACAjU,EAAAioB,OAAA,KAAAjoB,EAAAioB,OAAA,KAAAhU,IAEA,KAAA9X,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,GAAA5F,KAAA4F,IAAA,KApOA,CAuOM0qB,GAAAtvB,WAqWN,IAnWA,IAAA+L,GAAA,WACA/M,KAAAizB,aAAA,GAEAC,GAAA,WACA,OAAAlzB,KAAAmzB,cAAApmB,kBAEAqmB,GAAA,WACApzB,KAAAqzB,cAAA,GAEAC,GAAA,WACA,OAAAtzB,KAAAmzB,cAAAC,mBAEAG,GAAA,SAAA3mB,GACA,IAAA4mB,EAAArc,EAAAC,IAAAqc,gBAAA/yB,WAAAyW,EAAAC,IAAArC,KAAArU,UACAgzB,EAAAvc,EAAAC,IAAAqc,gBAAAnzB,YAAA6W,EAAAC,IAAArC,KAAAzU,WAEA,OACAY,EAAA0L,EAAA+mB,QAAAD,EACAvyB,EAAAyL,EAAAgnB,QAAAJ,IAGAK,GACA1c,EAAAC,IAAAzL,iBACA,SAAAoI,EAAAqJ,EAAAe,EAAAtZ,GACA,IAAA6R,EAAA,SAAA9J,GACA,IAAAknB,EAAAP,GAAA3mB,GACA,OAAAuR,EAAAhe,KAAA0E,EAAA+H,EAAAknB,EAAA5yB,EAAA4yB,EAAA3yB,IAIA,GAFA4S,EAAApI,iBAAAyR,EAAA1G,GAAA,GAEAkB,GAAAO,EAAAiF,GAAA,CACA,IAAA2W,EAAA,SAAAnnB,GAIA,IAHA,IAAAknB,EAAAP,GAAA3mB,GACAonB,EAAApnB,EAEAnE,EAAA,EAAAsU,EAAAnQ,EAAAqnB,eAAArnB,EAAAqnB,cAAAvwB,OAAwF+E,EAAAsU,EAAQtU,IAChG,GAAAmE,EAAAqnB,cAAAxrB,GAAA0S,QAAApH,EAAA,EACAnH,IAAAqnB,cAAAxrB,IACA0qB,cAAAa,EACApnB,EAAAG,eAAAmmB,GACAtmB,EAAAwmB,gBAAAE,GACA,MAIA,OAAAnV,EAAAhe,KAAA0E,EAAA+H,EAAAknB,EAAA5yB,EAAA4yB,EAAA3yB,IAEA4S,EAAApI,iBAAAwM,EAAAiF,GAAA2W,GAAA,GAGA,kBAMA,OALAhgB,EAAAmgB,oBAAA9W,EAAA1G,GAAA,GAEAkB,GAAAO,EAAAiF,IACArJ,EAAAmgB,oBAAA/b,EAAAiF,GAAA2W,GAAA,IAEA,IAGU5c,EAAAC,IAAA+c,YACV,SAAApgB,EAAAqJ,EAAAe,EAAAtZ,GACA,IAAA6R,EAAA,SAAA9J,GACAA,KAAAuK,EAAAE,IAAAjO,MACA,IAAAoqB,EAAArc,EAAAC,IAAAqc,gBAAA/yB,WAAAyW,EAAAC,IAAArC,KAAArU,UACAgzB,EAAAvc,EAAAC,IAAAqc,gBAAAnzB,YAAA6W,EAAAC,IAAArC,KAAAzU,WACAY,EAAA0L,EAAA+mB,QAAAD,EACAvyB,EAAAyL,EAAAgnB,QAAAJ,EAGA,OAFA5mB,EAAAG,eAAAH,EAAAG,mBACAH,EAAAwmB,gBAAAxmB,EAAAwmB,oBACAjV,EAAAhe,KAAA0E,EAAA+H,EAAA1L,EAAAC,IAOA,OALA4S,EAAAogB,YAAA,KAAA/W,EAAA1G,GACA,WAEA,OADA3C,EAAAqgB,YAAA,KAAAhX,EAAA1G,IACA,SAfU,EAqBV2d,MACAC,GAAA,SAAA1nB,GAOA,IANA,IAIA2nB,EAJArzB,EAAA0L,EAAA+mB,QACAxyB,EAAAyL,EAAAgnB,QACAJ,EAAArc,EAAAC,IAAAqc,gBAAA/yB,WAAAyW,EAAAC,IAAArC,KAAArU,UACAgzB,EAAAvc,EAAAC,IAAAqc,gBAAAnzB,YAAA6W,EAAAC,IAAArC,KAAAzU,WAEAwD,EAAAuwB,GAAA3wB,OACAI,KAAA,CAEA,GADAywB,EAAAF,GAAAvwB,GACA8T,GAAAhL,EAAA4nB,SAGA,IAFA,IACAC,EADAhsB,EAAAmE,EAAA4nB,QAAA9wB,OAEA+E,KAEA,IADAgsB,EAAA7nB,EAAA4nB,QAAA/rB,IACAisB,YAAAH,EAAA7jB,GAAAikB,MAAA7yB,GAAA,CACAZ,EAAAuzB,EAAAd,QACAxyB,EAAAszB,EAAAb,SACAhnB,EAAAumB,cAAAvmB,EAAAumB,cAAAvmB,GAAAG,iBACA,YAIAH,EAAAG,iBAEA,IACAsR,EADA5b,EAAA8xB,EAAA7jB,GAAAjO,KAEA4sB,EAAA5sB,EAAAmyB,YACA/pB,EAAApI,EAAAoyB,WACAtU,EAAA9d,EAAAC,MAAA6d,QACApJ,EAAAE,IAAAyd,OAAAjqB,EAAAiY,YAAArgB,GACAA,EAAAC,MAAA6d,QAAA,OACAlC,EAAAkW,EAAA7jB,GAAAwe,MAAA6F,kBAAA7zB,EAAAC,GACAsB,EAAAC,MAAA6d,UACApJ,EAAAE,IAAAyd,QAAAzF,EAAAxkB,EAAAP,aAAA7H,EAAA4sB,GAAAxkB,EAAAiJ,YAAArR,IACA4b,GAAAvI,EAAA,qBAAAye,EAAA7jB,GAAA5O,GAAAyyB,EAAA7jB,GAAA2N,GACAnd,GAAAwyB,EACAvyB,GAAAqyB,EACA1d,EAAA,qBAAAye,EAAA7jB,GAAA5O,GAAAyyB,EAAAS,YAAAT,EAAA7jB,GAAAxP,EAAAqzB,EAAA7jB,GAAAikB,MAAAzzB,EAAAC,EAAAozB,EAAA7jB,GAAAikB,MAAAxzB,EAAAD,EAAAC,EAAAyL,KAGAqoB,GAAA,SAAAroB,GACAgJ,EAAAsf,YAAAZ,IAAAa,UAAAF,IAGA,IAFA,IACAV,EADA9rB,EAAA4rB,GAAA3wB,OAEA+E,MACA8rB,EAAAF,GAAA5rB,IACAiI,GAAAikB,SACA7e,EAAA,oBAAAye,EAAA7jB,GAAA5O,GAAAyyB,EAAAa,WAAAb,EAAAc,aAAAd,EAAAS,YAAAT,EAAA7jB,GAAA9D,GAEAynB,OAgBAiB,GAAA1f,EAAAlF,MAiNAjI,GAAAyP,EAAAxU,OAAgC+E,OAChC,SAAA8sB,GACA3f,EAAA2f,GAAAD,GAAAC,GAAA,SAAApX,EAAAiD,GAKA,OAJAxL,EAAAI,GAAAmI,EAAA,cACAne,KAAAkY,OAAAlY,KAAAkY,WACAlY,KAAAkY,OAAArX,MAAuCe,KAAA2zB,EAAA7e,EAAAyH,EAAAqX,OAAA3B,GAAA7zB,KAAAy1B,OAAAz1B,KAAAyC,MAAA0U,EAAAC,IAAAme,EAAApX,EAAAiD,GAAAphB,SAEvCA,MAEA4V,EAAA,KAAA2f,GAAAD,GAAA,KAAAC,GAAA,SAAApX,GAGA,IAFA,IAAAjG,EAAAlY,KAAAkY,WACAvQ,EAAAuQ,EAAAxU,OACAiE,KACAuQ,EAAAvQ,GAAA/F,MAAA2zB,IAAA3f,EAAAI,GAAAmI,EAAA,cAAAjG,EAAAvQ,GAAA+O,GAAAyH,IACAjG,EAAAvQ,GAAA6tB,SACAtd,EAAA9B,OAAAzO,EAAA,IACAuQ,EAAAxU,eAAA1D,KAAAkY,QAGA,OAAAlY,MAlBA,CAoBUkY,EAAAzP,KA4BV6sB,GAAAtvB,KAAA,SAAA+X,EAAAmB,GACA,IAAAlZ,EAAA+V,EAAA/b,KAAA8B,IAAAia,EAAA/b,KAAA8B,QACA,MAAA2U,UAAA/S,OACA,OAAAsC,EAEA,MAAAyQ,UAAA/S,OAAA,CACA,GAAAkS,EAAAI,GAAA+H,EAAA,WACA,QAAAtV,KAAAsV,IAAA7G,GAAAzO,IACAzI,KAAAgG,KAAAyC,EAAAsV,EAAAtV,IAEA,OAAAzI,KAGA,OADA8V,EAAA,oBAAA9V,KAAA8B,GAAA9B,KAAAgG,EAAA+X,MACA/X,EAAA+X,GAIA,OAFA/X,EAAA+X,GAAAmB,EACApJ,EAAA,oBAAA9V,KAAA8B,GAAA9B,KAAAkf,EAAAnB,GACA/d,MAYAs1B,GAAAI,WAAA,SAAA3X,GAMA,OALA,MAAAA,EACAhC,EAAA/b,KAAA8B,OAEAia,EAAA/b,KAAA8B,YAAAia,EAAA/b,KAAA8B,IAAAic,GAEA/d,MASAs1B,GAAAK,QAAA,WACA,OAAA/X,GAAA7B,EAAA/b,KAAA8B,UAcAwzB,GAAAjrB,MAAA,SAAAurB,EAAAC,EAAAC,EAAAC,GACA,OAAA/1B,KAAAg2B,UAAAJ,EAAAE,GAAAG,SAAAJ,EAAAE,GAAAD,IAYAR,GAAAY,QAAA,SAAAN,EAAAC,GACA,OAAA71B,KAAAm2B,YAAAP,GAAAQ,WAAAP,IAEA,IAAAQ,MA+BAf,GAAAjB,KAAA,SAAAiC,EAAAC,EAAAC,EAAAxB,EAAAK,EAAAD,GACA,SAAAzsB,EAAAiE,IACAA,EAAAumB,eAAAvmB,GAAAG,iBACA,IAAA7L,EAAA0L,EAAA+mB,QACAxyB,EAAAyL,EAAAgnB,QACAJ,EAAArc,EAAAC,IAAAqc,gBAAA/yB,WAAAyW,EAAAC,IAAArC,KAAArU,UACAgzB,EAAAvc,EAAAC,IAAAqc,gBAAAnzB,YAAA6W,EAAAC,IAAArC,KAAAzU,WAEA,GADAN,KAAA20B,MAAA7yB,GAAA8K,EAAA8nB,WACA9c,GAAAhL,EAAA4nB,QAEA,IADA,IAAAC,EAAAhsB,EAAAmE,EAAA4nB,QAAA9wB,OACA+E,KAGA,GAFAgsB,EAAA7nB,EAAA4nB,QAAA/rB,GACAzI,KAAA20B,MAAA7yB,GAAA2yB,EAAAC,WACAD,EAAAC,YAAA10B,KAAA20B,MAAA7yB,GAAA,CACAZ,EAAAuzB,EAAAd,QACAxyB,EAAAszB,EAAAb,QACA,MAIA5zB,KAAA20B,MAAAzzB,IAAAwyB,EACA1zB,KAAA20B,MAAAxzB,IAAAqyB,GACAa,GAAA3wB,QAAAkS,EAAAyC,UAAAic,IAAAhc,QAAA2c,IACAZ,GAAAxzB,MAAwB6P,GAAA1Q,KAAAg1B,aAAAK,cAAAD,cACxBmB,GAAAzgB,EAAAnJ,GAAA,sBAAA3M,KAAA8B,GAAAy0B,GACAD,GAAAxgB,EAAAnJ,GAAA,qBAAA3M,KAAA8B,GAAAw0B,GACAE,GAAA1gB,EAAAnJ,GAAA,oBAAA3M,KAAA8B,GAAA00B,GACA1gB,EAAA,sBAAA9V,KAAA8B,GAAAuzB,GAAAL,GAAAh1B,KAAA4M,EAAA+mB,QAAAD,EAAA9mB,EAAAgnB,QAAAJ,EAAA5mB,GAKA,OAHA5M,KAAA20B,SACA0B,GAAAx1B,MAAyB6P,GAAA1Q,KAAA2I,UACzB3I,KAAAoY,UAAAzP,GACA3I,MAUAs1B,GAAAmB,WAAA,SAAA/f,GACAA,EAAAZ,EAAAnJ,GAAA,qBAAA3M,KAAA8B,GAAA4U,GAAAZ,EAAA0f,OAAA,qBAAAx1B,KAAA8B,KAQAwzB,GAAAoB,OAAA,WAEA,IADA,IAAAjuB,EAAA4tB,GAAA3yB,OACA+E,KAAA4tB,GAAA5tB,GAAAiI,IAAA1Q,OACAA,KAAA22B,YAAAN,GAAA5tB,GAAAE,OACA0tB,GAAAjgB,OAAA3N,EAAA,GACAqN,EAAA0f,OAAA,kBAAAx1B,KAAA8B,MAEAu0B,GAAA3yB,QAAAkS,EAAAsf,YAAAZ,IAAAa,UAAAF,IACAZ,OAkBAxd,EAAA/M,OAAA,SAAA5I,EAAAC,EAAA8F,GACA,IAAAkrB,EAAAvc,EAAAM,QAAApM,OAAA9J,KAAAkB,GAAA,EAAAC,GAAA,EAAA8F,GAAA,GAEA,OADAjH,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAuBAtb,EAAAhU,KAAA,SAAA3B,EAAAC,EAAAmb,EAAAjY,EAAA4C,GACA,IAAAkrB,EAAAvc,EAAAM,QAAArT,KAAA7C,KAAAkB,GAAA,EAAAC,GAAA,EAAAmb,GAAA,EAAAjY,GAAA,EAAA4C,GAAA,GAEA,OADAjH,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAmBAtb,EAAAG,QAAA,SAAA9V,EAAAC,EAAAyZ,EAAAC,GACA,IAAAsX,EAAAvc,EAAAM,QAAAc,QAAAhX,KAAAkB,GAAA,EAAAC,GAAA,EAAAyZ,GAAA,EAAAC,GAAA,GAEA,OADA7a,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAkCAtb,EAAAjN,KAAA,SAAAqa,GACAA,IAAArO,EAAAI,GAAAiO,EAjpGA,YAipGArO,EAAAI,GAAAiO,EAAA,GAAAhO,KAAAgO,GAAAnM,GACA,IAAAqa,EAAAvc,EAAAM,QAAAtM,KAAAgM,EAAAihB,OAAAhhB,GAAAD,EAAAa,WAAAzW,MAEA,OADAA,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAoBAtb,EAAAvV,MAAA,SAAAwZ,EAAA5Z,EAAAC,EAAAmb,EAAAjY,GACA,IAAA8tB,EAAAvc,EAAAM,QAAA5U,MAAAtB,KAAA8a,GAAA,cAAA5Z,GAAA,EAAAC,GAAA,EAAAmb,GAAA,EAAAjY,GAAA,GAEA,OADArE,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAkBAtb,EAAAlV,KAAA,SAAAT,EAAAC,EAAAQ,GACA,IAAAwwB,EAAAvc,EAAAM,QAAAvU,KAAA3B,KAAAkB,GAAA,EAAAC,GAAA,EAAA6W,EAAArW,IAEA,OADA3B,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAmBAtb,EAAA1U,IAAA,SAAA20B,IACAlhB,EAAAI,GAAA8gB,EAAA,WAAAA,EAAAtgB,MAAAxV,UAAAoV,OAAAjW,KAAAsW,UAAA,EAAAA,UAAA/S,SACA,IAAAyuB,EAAA,IAAA4E,GAAAD,GAIA,OAHA92B,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,EAAA,MAAAnyB,KACAmyB,EAAA,WACAA,GAgBAtb,EAAAmgB,SAAA,SAAA70B,GACAnC,KAAA42B,QAAAz0B,GAAAnC,KAAAmC,OAUA0U,EAAAogB,UAAA,SAAA90B,GACA,IAAAgwB,EAAAnyB,KAAA42B,QAEA,cADA52B,KAAA42B,QACAzE,GAUAtb,EAAAqgB,QAAA,WACA,IAAA1F,EAAAxxB,KAAAm3B,OAAAtC,WACA,OACAzxB,MAAAouB,EAAAI,YACA1uB,OAAAsuB,EAAAM,eAcAjb,EAAAugB,QAAA,SAAAh0B,EAAAF,GACA,OAAA0S,EAAAM,QAAAkhB,QAAAj3B,KAAAH,KAAAoD,EAAAF,IAiBA2T,EAAAwgB,WAAA,SAAAn2B,EAAAC,EAAAmb,EAAAjY,EAAAizB,GACA,OAAA1hB,EAAAM,QAAAmhB,WAAAl3B,KAAAH,KAAAkB,EAAAC,EAAAmb,EAAAjY,EAAAizB,IAcAzgB,EAAA3P,IAAA2P,EAAAuY,OAAA,KAOAvY,EAAA0gB,QAAA3hB,EAoJA,SAAA4hB,KACA,OAAAx3B,KAAAkB,EAAA6W,EAAA/X,KAAAmB,EAAA4W,EAAA/X,KAAAoD,MAAA,MAAApD,KAAAkD,OAzHA2T,EAAAke,kBAAA,SAAA7zB,EAAAC,GACA,IA5BAs2B,EACAC,EACAtgB,EACArC,EACA4iB,EACAC,EAAAC,EAwBA7Z,EADAhe,KACAm3B,OACAhc,EAAAhE,EAAAC,IAAA0gB,iBAAA52B,EAAAC,GACA,GAAAgW,EAAAE,IAAAyd,OAAA,OAAA3Z,EAAAuW,QAAA,CACA,IAAAqG,GA/BAL,GADAD,EAgCAzZ,GA/BAga,wBACA5gB,EAAAqgB,EAAAQ,cACAljB,EAAAqC,EAAArC,KACA4iB,EAAAvgB,EAAAqc,gBACAmE,EAAAD,EAAAC,WAAA7iB,EAAA6iB,WAAA,EAAAC,EAAAF,EAAAE,YAAA9iB,EAAA8iB,YAAA,GAIA12B,EAHAu2B,EAAAxwB,KAAAiQ,EAAAE,IAAA6gB,aAAAP,EAAAj3B,WAAAqU,EAAArU,WAAAk3B,EAIA12B,EAHAw2B,EAAAS,MAAAhhB,EAAAE,IAAA+gB,aAAAT,EAAAr3B,YAAAyU,EAAAzU,YAAAu3B,IA0BAQ,EAAAra,EAAAsa,gBACAD,EAAAn3B,IAAA62B,EAAA72B,EACAm3B,EAAAl3B,IAAA42B,EAAA52B,EACAk3B,EAAAj1B,MAAAi1B,EAAAn1B,OAAA,EACA,IAAAq1B,EAAAva,EAAAwa,oBAAAH,EAAA,MACAE,EAAA70B,SACAyX,EAAAod,IAAA70B,OAAA,IAGA,IAAAyX,EACA,YAEA,KAAAA,EAAA0Z,YAAA1Z,GAAA6C,EAAA6W,aAAA1Z,EAAAoc,SACApc,IAAA0Z,WAIA,OAFA1Z,GApBAnb,KAoBAm3B,OAAAtC,aAAA1Z,EAAA6C,GACA7C,OAAAoc,QArBAv3B,KAqBAy4B,QAAAtd,EAAAud,WAAA,MAeA7hB,EAAA8hB,kBAAA,SAAAhc,GACA,IAAAxa,EAAAnC,KAAAmC,MAMA,OALAnC,KAAA44B,QAAA,SAAAloB,GACAkF,EAAAgR,gBAAAlW,EAAAvN,UAAAwZ,IACAxa,EAAAtB,KAAA6P,KAGAvO,GAcA0U,EAAA4hB,QAAA,SAAA32B,GAEA,IADA,IAAA+2B,EAAA74B,KAAAovB,OACAyJ,GAAA,CACA,GAAAA,EAAA/2B,MACA,OAAA+2B,EAEAA,IAAAxJ,KAEA,aAoBAxY,EAAA+hB,QAAA,SAAAjpB,EAAAmpB,GAEA,IADA,IAAAD,EAAA74B,KAAAovB,OACAyJ,GAAA,CACA,QAAAlpB,EAAAxP,KAAA24B,EAAAD,GACA,OAAA74B,KAEA64B,IAAAxJ,KAEA,OAAArvB,MAcA6W,EAAAkiB,mBAAA,SAAA73B,EAAAC,GACA,IAAAgB,EAAAnC,KAAAmC,MAMA,OALAnC,KAAA44B,QAAA,SAAAloB,GACAA,EAAAsoB,cAAA93B,EAAAC,IACAgB,EAAAtB,KAAA6P,KAGAvO,GAoBAmzB,GAAA0D,cAAA,SAAA93B,EAAAC,GACA,IAAA83B,EAAAj5B,KAAAk5B,SAAA1c,EAAAxc,KAAAod,MAAApd,MAIA,OAHAA,KAAAoC,KAAA,cAAApC,KAAAoC,KAAA,aAAAsB,SACAu1B,EAAArjB,EAAAka,cAAAmJ,EAAAj5B,KAAAoC,KAAA,eAEAwT,EAAAsU,kBAAA+O,EAAA/3B,EAAAC,IAqBAm0B,GAAAnyB,QAAA,SAAAg2B,GACA,GAAAn5B,KAAAo5B,QACA,SAEA,IAAAxJ,EAAA5vB,KAAA4vB,EACA,OAAAuJ,IACAvJ,EAAAyJ,OAAAzJ,EAAA0J,SACAt5B,KAAAk5B,SAAA1c,EAAAxc,KAAAod,MAAApd,MACA4vB,EAAA0J,OAAAhP,GAAAtqB,KAAAk5B,UACAtJ,EAAA0J,OAAAtgB,SAAAwe,GACA5H,EAAAyJ,MAAA,GAEAzJ,EAAA0J,UAEA1J,EAAAyJ,OAAAzJ,EAAAkB,SAAAlB,EAAAjT,SACAiT,EAAAyJ,OAAAr5B,KAAAk5B,WACAtJ,EAAA0J,OAAA,EACAt5B,KAAAk5B,SAAA1c,EAAAxc,KAAAod,MAAApd,OAEA4vB,EAAAjT,KAAA2N,GAAAzN,EAAA7c,KAAAk5B,SAAAl5B,KAAA8c,SACA8S,EAAAjT,KAAA3D,SAAAwe,GACA5H,EAAAyJ,MAAAzJ,EAAAkB,OAAA,GAEAlB,EAAAjT,OASA2Y,GAAA1X,MAAA,WACA,GAAA5d,KAAAo5B,QACA,YAEA,IAAAjH,EAAAnyB,KAAAkvB,MAAAlvB,KAAAod,QAAAhb,KAAApC,KAAAoC,QAEA,OADApC,KAAA42B,SAAA52B,KAAA42B,QAAA/1B,KAAAsxB,GACAA,GAuBAmD,GAAAiE,KAAA,SAAAA,GACA,WAAAv5B,KAAAod,KACA,YAGA,IAAAvZ,GACAT,QAFAm2B,SAEAn2B,OAAA,MAAApD,KAAAoC,KAAA,oBACAI,KAAA+2B,EAAA/2B,OAAA,EACAuH,QAAA,MAAAwvB,EAAAxvB,QAAA,GAAAwvB,EAAAxvB,QACAyvB,QAAAD,EAAAC,SAAA,EACAC,QAAAF,EAAAE,SAAA,EACA9uB,MAAA4uB,EAAA5uB,OAAA,QAEAlE,EAAA5C,EAAAT,MAAA,EACA6D,EAAAjH,KAAAkvB,MACAiD,EAAAlrB,EAAA9E,MACAyH,EAAA5J,KAAAk5B,UAAA1c,EAAAxc,KAAAod,MAAApd,MACA4J,EAAA5J,KAAA8c,OAAAD,EAAAjT,EAAA5J,KAAA8c,QAAAlT,EACA,QAAAnB,EAAA,EAAwBA,EAAAhC,EAAA,EAAWgC,IACnC0pB,EAAAtxB,KAAAoG,EAAA2C,QAAAxH,MACAU,OAAAe,EAAA8G,MACAnI,KAAAqB,EAAArB,KAAAqB,EAAA8G,MAAA,OACAqQ,kBAAA,QACAjY,iBAAA,QACAC,iBAAAa,EAAAT,MAAAqD,EAAAgC,GAAA0d,QAAA,GACApc,UAAAlG,EAAAkG,QAAAtD,GAAA0f,QAAA,MAGA,OAAAgM,EAAA7nB,aAAAtK,MAAA4wB,UAAA/sB,EAAA21B,QAAA31B,EAAA41B,UAEA,IACAC,GAAA,SAAA/Q,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxlB,GACA,aAAAA,EACAwhB,GAAAyD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEAtT,EAAAwR,kBAAAuB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAh7EA,SAAA1K,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,EAAAuU,GACA,KAAAA,EAAA,GAAAzU,GAAA1G,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,GAAAuU,GAAA,CAGA,IAGAhyB,EAFAiyB,EAAAt2B,GACAskB,EAFA,EAEAgS,EAIA,IADAjyB,EAAAud,GAAA1G,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,EAAAwC,GACArjB,EAAAoD,EAAAgyB,GAFA,KAGAC,GAAA,EAEAjyB,EAAAud,GAAA1G,EAAAC,EAAAC,EAAAla,EAAAma,EAAAC,EAAAuG,EAAAC,EADAwC,IAAAjgB,EAAAgyB,EAAA,MAAAC,GAGA,OAAAhS,GAi6EAiS,CAAAlR,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxlB,KAGAo2B,GAAA,SAAAC,EAAAC,GACA,gBAAApwB,EAAAlG,EAAAu2B,GAIA,IAFA,IAAA/4B,EAAAC,EAAAoG,EAAAI,EAAmDuyB,EAAnDC,EAAA,GAAAC,KACAr2B,EAAA,EACA0E,EAAA,EAAAsU,GAHAnT,EAAAsT,GAAAtT,IAGAlG,OAA8C+E,EAAAsU,EAAQtU,IAAA,CAEtD,SADAlB,EAAAqC,EAAAnB,IACA,GACAvH,GAAAqG,EAAA,GACApG,GAAAoG,EAAA,OACkB,CAElB,GAAAxD,GADA4D,EAAA+xB,GAAAx4B,EAAAC,EAAAoG,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KACA7D,EAAA,CACA,GAAAs2B,IAAAI,EAAAzxB,MAAA,CAGA,GADAwxB,IAAA,KADAD,EAAAR,GAAAx4B,EAAAC,EAAAoG,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA7D,EAAAK,IACA4E,MAAAzH,EAAAg5B,EAAAvxB,MAAAxH,EAAA+4B,EAAAzkB,EAAAvU,EAAAg5B,EAAAzkB,EAAAtU,EAAA+4B,EAAAh5B,EAAAg5B,EAAA/4B,GACA84B,EAA6C,OAAAE,EAC7CC,EAAAzxB,MAAAwxB,EACAA,GAAA,IAAAD,EAAAh5B,EAAAg5B,EAAA/4B,EAAA,IAAA+4B,EAAArQ,EAAA3oB,EAAAg5B,EAAArQ,EAAA1oB,EAAA+4B,EAAA1xB,IAAAtH,EAAAg5B,EAAA1xB,IAAArH,EAAAoG,EAAA,GAAAA,EAAA,IAAArD,OACAH,GAAA4D,EACAzG,GAAAqG,EAAA,GACApG,GAAAoG,EAAA,GACA,SAEA,IAAAwyB,IAAAC,EAEA,OAAqC94B,GADrCg5B,EAAAR,GAAAx4B,EAAAC,EAAAoG,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA7D,EAAAK,IACqC7C,EAAAC,EAAA+4B,EAAA/4B,EAAAyoB,MAAAsQ,EAAAtQ,OAGrC7lB,GAAA4D,EACAzG,GAAAqG,EAAA,GACApG,GAAAoG,EAAA,GAEA4yB,GAAA5yB,EAAAqa,QAAAra,EAKA,OAHA6yB,EAAA5xB,IAAA2xB,GACAD,EAAAH,EAAAh2B,EAAAi2B,EAAAI,EAAAxkB,EAAAwR,kBAAAlmB,EAAAC,EAAAoG,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,OACAqiB,QAAAsQ,GAAsCh5B,EAAAg5B,EAAAh5B,EAAAC,EAAA+4B,EAAA/4B,EAAAyoB,MAAAsQ,EAAAtQ,QACtCsQ,IAGAG,GAAAP,GAAA,GACAQ,GAAAR,KACAS,GAAAT,GAAA,KAaAlkB,EAAAykB,kBAmBAzkB,EAAA0kB,oBAeA1kB,EAAA4kB,WAAA,SAAA5wB,EAAAynB,EAAAC,GACA,GAAAtxB,KAAAq6B,eAAAzwB,GAAA0nB,EAAA,KACA,OAAAiJ,GAAA3wB,EAAAynB,GAAA7oB,IAEA,IAAA0T,EAAAqe,GAAA3wB,EAAA0nB,EAAA,GACA,OAAAD,EAAAkJ,GAAAre,EAAAmV,GAAA7oB,IAAA0T,GASAoZ,GAAA+E,eAAA,WACA,IAAAzwB,EAAA5J,KAAAwc,UACA,GAAA5S,EAIA,OAAA5J,KAAAyC,KAAA43B,eACAr6B,KAAAyC,KAAA43B,iBAGAA,GAAAzwB,IAmBA0rB,GAAAgF,iBAAA,SAAA52B,GACA,IAAAkG,EAAA5J,KAAAwc,UACA,GAAA5S,EAIA,OAAA0wB,GAAA1wB,EAAAlG,IAUA4xB,GAAA9Y,QAAA,WACA,IAAA5S,EACA4S,EAAA5G,EAAA6G,SAAAzc,KAAAod,MAEA,WAAApd,KAAAod,MAAA,OAAApd,KAAAod,KAQA,OAJAZ,IACA5S,EAAA4S,EAAAxc,OAGA4J,GAeA0rB,GAAAkF,WAAA,SAAAnJ,EAAAC,GACA,IAAA1nB,EAAA5J,KAAAwc,UACA,GAAA5S,EAIA,OAAAgM,EAAA4kB,WAAA5wB,EAAAynB,EAAAC,IAmBA,IAAAmJ,GAAA7kB,EAAA8kB,iBACAC,OAAA,SAAA9Q,GACA,OAAAA,GAEA+Q,IAAA,SAAA/Q,GACA,OAAAhR,EAAAgR,EAAA,MAEAgR,IAAA,SAAAhR,GACA,OAAAhR,EAAAgR,EAAA,MAEAiR,KAAA,SAAAjR,GACA,IAAAtF,EAAA,IAAAsF,EAAA,KACAoE,EAAAxV,EAAAoN,KAAA,MAAAtB,KACArjB,EAAA+sB,EAAA1J,EAEApjB,GAAA8sB,EAAA1J,EAEAjhB,EAHAuV,EAAAtU,EAAArD,GAAA,MAAAA,EAAA,QAEA2X,EAAAtU,EAAApD,GAAA,MAAAA,EAAA,QACA,GACA,YAAAmC,cAEAy3B,OAAA,SAAAlR,GACA,IAAAhmB,EAAA,QACA,OAAAgmB,MAAAhmB,EAAA,GAAAgmB,EAAAhmB,IAEAm3B,QAAA,SAAAnR,GAEA,IAAAhmB,EAAA,QACA,OAFAgmB,GAAA,GAEAA,IAAAhmB,EAAA,GAAAgmB,EAAAhmB,GAAA,GAEAo3B,QAAA,SAAApR,GACA,OAAAA,OACAA,EAEAhR,EAAA,MAAAgR,GAAApR,EAAAuT,IAAA,EAAAlT,GAAA+Q,EAAA,aAEAqR,OAAA,SAAArR,GACA,IAAAhmB,EAAA,OACA0D,EAAA,KAkBA,OAhBAsiB,EAAA,EAAAtiB,EACA1D,EAAAgmB,IAEAA,EAAA,EAAAtiB,EAEA1D,GADAgmB,GAAA,IAAAtiB,GACAsiB,EAAA,IAEAA,EAAA,IAAAtiB,EAEA1D,GADAgmB,GAAA,KAAAtiB,GACAsiB,EAAA,MAGAhmB,GADAgmB,GAAA,MAAAtiB,GACAsiB,EAAA,UAOA4Q,GAAAU,OAAAV,GAAA,WAAAA,GAAA,KACAA,GAAAW,QAAAX,GAAA,YAAAA,GAAA,KACAA,GAAAY,UAAAZ,GAAA,eAAAA,GAAA,MACAA,GAAA,WAAAA,GAAAM,OACAN,GAAA,YAAAA,GAAAO,QAEA,IAAAM,MACAC,GAAArxB,OAAAsxB,uBACAtxB,OAAAuxB,6BACAvxB,OAAAwxB,0BACAxxB,OAAAyxB,wBACAzxB,OAAA0xB,yBACA,SAAAjsB,GACAiV,WAAAjV,EAAA,KAEAksB,GAAA,WAGA,IAFA,IAAAC,GAAA,IAAAC,KACAp0B,EAAA,EACmBA,EAAA2zB,GAAA53B,OAA8BiE,IAAA,CACjD,IAAAiF,EAAA0uB,GAAA3zB,GACA,IAAAiF,EAAA8D,GAAA0oB,UAAAxsB,EAAAovB,OAAA,CAGA,IASAC,EAEAle,EAXAtW,EAAAq0B,EAAAlvB,EAAAjE,MACAuzB,EAAAtvB,EAAAsvB,GACAC,EAAAvvB,EAAAuvB,OACA9K,EAAAzkB,EAAAykB,KACA+K,EAAAxvB,EAAAwvB,KACA9K,EAAA1kB,EAAA0kB,GAEA+K,GADAzvB,EAAAtJ,EACAsJ,EAAA8D,IACAvO,KAEAm6B,KAUA,GARA1vB,EAAA2vB,YACA90B,GAAAmF,EAAA2vB,WAAA3vB,EAAA4vB,KAAAt1B,IAAA0F,EAAAuiB,OAAAviB,EAAA6vB,QAAA7vB,EAAAuiB,MAAA+M,EACAtvB,EAAA8vB,OAAA9vB,EAAA2vB,kBACA3vB,EAAA2vB,WACA3vB,EAAA+vB,MAAArB,GAAAllB,OAAAzO,IAAA,IAEAiF,EAAA8vB,QAAA9vB,EAAAuiB,MAAAviB,EAAA6vB,QAAA7vB,EAAAuiB,OAAA1nB,EAAAy0B,IAAAtvB,EAAA4vB,KAAAt1B,MAEAO,EAAA,GAGA,GAAAA,EAAAy0B,EAAA,CACA,IAAApI,EAAAqI,EAAA10B,EAAAy0B,GACA,QAAA95B,KAAAivB,EAAA,GAAAA,EAAAna,GAAA9U,GAAA,CACA,OAAAiZ,EAAAjZ,IACA,KAAAiU,EACA4lB,GAAA5K,EAAAjvB,GAAA0xB,EAAAoI,EAAAE,EAAAh6B,GACA,MACA,aACA65B,EAAA,QACAW,GAAApjB,EAAA6X,EAAAjvB,GAAA6E,EAAA6sB,EAAAoI,EAAAE,EAAAh6B,GAAA6E,IACA21B,GAAApjB,EAAA6X,EAAAjvB,GAAA+U,EAAA2c,EAAAoI,EAAAE,EAAAh6B,GAAA+U,IACAylB,GAAApjB,EAAA6X,EAAAjvB,GAAAgC,EAAA0vB,EAAAoI,EAAAE,EAAAh6B,GAAAgC,KACAF,KAAA,SACA,MACA,WACA+3B,KACA,QAAAxzB,EAAA,EAAAsU,EAAAsU,EAAAjvB,GAAAsB,OAAwE+E,EAAAsU,EAAQtU,IAAA,CAChFwzB,EAAAxzB,IAAA4oB,EAAAjvB,GAAAqG,GAAA,IACA,QAAA3E,EAAA,EAAAkZ,EAAAqU,EAAAjvB,GAAAqG,GAAA/E,OAA+EI,EAAAkZ,EAAQlZ,IACvFm4B,EAAAxzB,GAAA3E,IAAAutB,EAAAjvB,GAAAqG,GAAA3E,GAAAgwB,EAAAoI,EAAAE,EAAAh6B,GAAAqG,GAAA3E,GAEAm4B,EAAAxzB,GAAAwzB,EAAAxzB,GAAAvE,KAAA6T,GAEAkkB,IAAA/3B,KAAA6T,GACA,MACA,gBACA,GAAAqkB,EAAAh6B,GAAAy6B,KAEA,IADAZ,KACAxzB,EAAA,EAAAsU,EAAAsU,EAAAjvB,GAAAsB,OAAwE+E,EAAAsU,EAAQtU,IAEhF,IADAwzB,EAAAxzB,IAAA4oB,EAAAjvB,GAAAqG,GAAA,IACA3E,EAAA,EAAAkZ,EAAAqU,EAAAjvB,GAAAqG,GAAA/E,OAA+EI,EAAAkZ,EAAQlZ,IACvFm4B,EAAAxzB,GAAA3E,GAAAutB,EAAAjvB,GAAAqG,GAAA3E,GAAAgwB,EAAAoI,EAAAE,EAAAh6B,GAAAqG,GAAA3E,OAGkC,CAClC,IAAA8B,EAAA,SAAA6C,GACA,OAAA4oB,EAAAjvB,GAAAqG,GAAAqrB,EAAAoI,EAAAE,EAAAh6B,GAAAqG,IAGAwzB,IAAA,IAAAr2B,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAEA,MACA,UACA,gBAAAxD,EAGA,IAFA65B,KACAxzB,EAAA,EACAA,KACAwzB,EAAAxzB,IAAA4oB,EAAAjvB,GAAAqG,GAAAqrB,EAAAoI,EAAAE,EAAAh6B,GAAAqG,GAGA,MACA,QACA,IAAAq0B,KAAA74B,GAAAotB,EAAAjvB,IAGA,IAFA65B,KACAxzB,EAAA4zB,EAAAnN,MAAAvX,iBAAAvV,GAAAsB,OACA+E,KACAwzB,EAAAxzB,IAAAq0B,EAAAr0B,GAAAqrB,EAAAoI,EAAAE,EAAAh6B,GAAAqG,GAIAtG,EAAAC,GAAA65B,EAEAI,EAAAj6B,KAAAD,GACA,SAAAL,EAAAu6B,EAAAG,GACA5X,WAAA,WACA9O,EAAA,sBAAAhU,EAAAu6B,EAAAG,KAFA,CAIsBH,EAAAv6B,GAAAu6B,EAAAzvB,EAAA4vB,UACJ,CAUlB,GATA,SAAA9lB,EAAAhG,EAAAwL,GACA0I,WAAA,WACA9O,EAAA,sBAAApF,EAAA5O,GAAA4O,EAAAwL,GACApG,EAAA,uBAAApF,EAAA5O,GAAA4O,EAAAwL,GACAtG,EAAAI,GAAAU,EAAA,aAAAA,EAAAvW,KAAAuQ,KAJA,CAMsB9D,EAAA+C,SAAA0sB,EAAAzvB,EAAA4vB,MACtBH,EAAAj6B,KAAAkvB,GACAgK,GAAAllB,OAAAzO,IAAA,GACAiF,EAAAmwB,OAAA,IAAAnwB,EAAAyiB,KAAA,CACA,IAAAtR,KAAAuT,IAAApa,GAAA6G,KACAue,EAAAve,GAAAnR,EAAAowB,YAAAjf,IAEAnR,EAAA8D,GAAAtO,KAAAk6B,GACAW,GAAArwB,EAAA4vB,KAAA5vB,EAAA8D,GAAA9D,EAAA4vB,KAAAU,SAAA,QAAAtwB,EAAAowB,YAAApwB,EAAAmwB,OAAA,GAEAnwB,EAAAyiB,OAAAziB,EAAA+vB,MACAM,GAAArwB,EAAA4vB,KAAA5vB,EAAA8D,GAAA9D,EAAAyiB,KAAA,KAAAziB,EAAAowB,YAAApwB,EAAAmwB,UAIAzB,GAAA53B,QAAA63B,GAAAM,KAEAe,GAAA,SAAAjyB,GACA,OAAAA,EAAA,QAAAA,EAAA,IAAAA,GA6CA,SAAAwyB,GAAA75B,EAAAqlB,EAAAC,EAAAK,EAAAC,EAAAkU,GACA,IAAA/iB,EAAA,EAAAsO,EACA8E,EAAA,GAAAxE,EAAAN,GAAAtO,EACAqP,EAAA,EAAArP,EAAAoT,EACAnT,EAAA,EAAAsO,EACA8E,EAAA,GAAAxE,EAAAN,GAAAtO,EACAqP,EAAA,EAAArP,EAAAoT,EACA,SAAA2P,EAAA/5B,GACA,QAAAomB,EAAApmB,EAAAmqB,GAAAnqB,EAAA+W,GAAA/W,EA0CA,OAxCA,SAAApC,EAAAo8B,GACA,IAAAh6B,EAGA,SAAApC,EAAAo8B,GACA,IAAAC,EAAA5V,EAAAC,EAAAlJ,EAAA8e,EAAA/0B,EACA,IAAAmf,EAAA1mB,EAAAuH,EAAA,EAA+BA,EAAA,EAAOA,IAAA,CAEtC,GADAiW,EAAA2e,EAAAzV,GAAA1mB,EACAqD,EAAAma,GAAA4e,EACA,OAAA1V,EAGA,GAAArjB,EADAi5B,GAAA,EAAA9T,EAAA9B,EAAA,EAAA6F,GAAA7F,EAAAvN,GACA,KACA,MAEAuN,GAAAlJ,EAAA8e,EAKA,GAFA7V,EAAA,GACAC,EAAA1mB,IAFAq8B,EAAA,GAIA,OAAAA,EAEA,GAAA3V,EAAAD,EACA,OAAAA,EAEA,KAAA4V,EAAA5V,GAAA,CAEA,GADAjJ,EAAA2e,EAAAzV,GACArjB,EAAAma,EAAAxd,GAAAo8B,EACA,OAAA1V,EAEA1mB,EAAAwd,EACA6e,EAAA3V,EAEAD,EAAAC,EAEAA,GAAAD,EAAA4V,GAAA,EAAAA,EAEA,OAAA3V,EArCA6V,CAAAv8B,EAAAo8B,GACA,QAAA3T,EAAArmB,EAAAoqB,GAAApqB,EAAAgX,GAAAhX,EAsCAo6B,CAAAp6B,EAAA,OAAA85B,IAMA,SAAAO,GAAAnB,EAAAN,GACA,IAAAgB,KACAU,KAGA,GAFA59B,KAAAk8B,KACAl8B,KAAA69B,MAAA,EACArB,EAAA,CACA,QAAAp6B,KAAAo6B,IAAAtlB,GAAA9U,KACAw7B,EAAAnkB,EAAArX,IAAAo6B,EAAAp6B,GACA86B,EAAAr8B,KAAA4Y,EAAArX,KAEA86B,EAAAY,KAAA7hB,GAEAjc,KAAAw8B,KAAAoB,EACA59B,KAAAkH,IAAAg2B,IAAAx5B,OAAA,GACA1D,KAAAk9B,WAyCA,SAAAD,GAAAT,EAAA33B,EAAA43B,EAAAC,EAAAM,EAAAa,GACApB,EAAAhjB,EAAAgjB,GACA,IAAA3pB,EACAirB,EACAC,EAEA3O,EACAF,EACA8O,EACA/B,EAAAM,EAAAN,GACA7K,KACAC,KACA8K,KACA,GAAAM,EACA,IAAAj0B,EAAA,EAAAsU,EAAAue,GAAA53B,OAAuD+E,EAAAsU,EAAQtU,IAAA,CAC/D,IAAAmE,EAAA0uB,GAAA7yB,GACA,GAAAmE,EAAA8D,GAAA5O,IAAA+C,EAAA/C,IAAA8K,EAAA4vB,QAAA,CACA5vB,EAAA6vB,YACAnB,GAAAllB,OAAA3N,EAAA,GACAu1B,EAAA,GAEAD,EAAAnxB,EAEA/H,EAAAzC,KAAAwK,EAAAowB,aACA,YAIAN,GAAApL,EAEA,QAAA7oB,EAAA,EAAAsU,EAAAyf,EAAAU,SAAAx5B,OAAmD+E,EAAAsU,EAAQtU,IAAA,CAC3D,GAAA+zB,EAAAU,SAAAz0B,IAAAg0B,GAAAD,EAAAU,SAAAz0B,GAAAi0B,EAAAF,EAAAt1B,IAAA,CACAu1B,EAAAD,EAAAU,SAAAz0B,GACA0mB,EAAAqN,EAAAU,SAAAz0B,EAAA,MACAyzB,IAAAM,EAAAt1B,KAAAu1B,EAAAtN,GACAE,EAAAmN,EAAAU,SAAAz0B,EAAA,GACAqK,EAAA0pB,OAAAC,GACA,MACcC,GACd73B,EAAAzC,KAAAo6B,SAAAU,SAAAz0B,KAGA,GAAAqK,EAAA,CAGA,GAAAirB,EA4JAA,EAAAxB,WAAAG,EACAqB,EAAAp1B,MAAA,IAAAozB,KAAAgC,EAAA7B,GAAAQ,MA7JA,CACA,QAAAt6B,KAAA0Q,EAAA,GAAAA,EAAAoE,GAAA9U,KACAiZ,EAAAnE,GAAA9U,IAAAyC,EAAAqqB,MAAAvX,iBAAAT,GAAA9U,IAIA,OAHAivB,EAAAjvB,GAAAyC,EAAAzC,QACA,MAAAivB,EAAAjvB,KAAAivB,EAAAjvB,GAAA2X,EAAA3X,IACAkvB,EAAAlvB,GAAA0Q,EAAA1Q,GACAiZ,EAAAjZ,IACA,KAAAiU,EACA+lB,EAAAh6B,IAAAkvB,EAAAlvB,GAAAivB,EAAAjvB,IAAA85B,EACA,MACA,aACA7K,EAAAjvB,GAAAwT,EAAAqL,OAAAoQ,EAAAjvB,IACA,IAAA87B,EAAAtoB,EAAAqL,OAAAqQ,EAAAlvB,IACAg6B,EAAAh6B,IACA6E,GAAAi3B,EAAAj3B,EAAAoqB,EAAAjvB,GAAA6E,GAAAi1B,EACA/kB,GAAA+mB,EAAA/mB,EAAAka,EAAAjvB,GAAA+U,GAAA+kB,EACA93B,GAAA85B,EAAA95B,EAAAitB,EAAAjvB,GAAAgC,GAAA83B,GAEA,MACA,WACA,IAAAiC,EAAAjhB,GAAAmU,EAAAjvB,GAAAkvB,EAAAlvB,IACAg8B,EAAAD,EAAA,GAGA,IAFA9M,EAAAjvB,GAAA+7B,EAAA,GACA/B,EAAAh6B,MACAqG,EAAA,EAAAsU,EAAAsU,EAAAjvB,GAAAsB,OAAgE+E,EAAAsU,EAAQtU,IAAA,CACxE2zB,EAAAh6B,GAAAqG,IAAA,GACA,QAAA3E,EAAA,EAAAkZ,EAAAqU,EAAAjvB,GAAAqG,GAAA/E,OAA2EI,EAAAkZ,EAAQlZ,IACnFs4B,EAAAh6B,GAAAqG,GAAA3E,IAAAs6B,EAAA31B,GAAA3E,GAAAutB,EAAAjvB,GAAAqG,GAAA3E,IAAAo4B,EAGA,MACA,gBACA,IAAAtM,EAAA/qB,EAAA+qB,EACAyO,EAAArN,GAAApB,EAAAxtB,GAAAkvB,EAAAlvB,IACA,GAAAi8B,EAKA,IAJAhN,EAAAjvB,GAAAi8B,EAAAhN,KACAC,EAAAlvB,GAAAi8B,EAAA/M,GACA8K,EAAAh6B,MACAg6B,EAAAh6B,GAAAy6B,MAAA,EACAp0B,EAAA,EAAAsU,EAAAsU,EAAAjvB,GAAAsB,OAAoE+E,EAAAsU,EAAQtU,IAE5E,IADA2zB,EAAAh6B,GAAAqG,IAAA4oB,EAAAjvB,GAAAqG,GAAA,IACA3E,EAAA,EAAAkZ,EAAAqU,EAAAjvB,GAAAqG,GAAA/E,OAA2EI,EAAAkZ,EAAQlZ,IACnFs4B,EAAAh6B,GAAAqG,GAAA3E,IAAAwtB,EAAAlvB,GAAAqG,GAAA3E,GAAAutB,EAAAjvB,GAAAqG,GAAA3E,IAAAo4B,MAG8B,CAC9B,IAAAzmB,EAAA5Q,EAAAiY,QAAA,IAAAwT,GACAgO,GACA1O,GAA6CvsB,UAAAusB,EAAAvsB,WAC7CF,QAAA,WACA,OAAA0B,EAAA1B,QAAA,KAGAkuB,EAAAjvB,IACAqT,EAAAyG,EACAzG,EAAArR,EACAqR,EAAAhP,EACAgP,EAAA5E,EACA4E,EAAA7I,EACA6I,EAAAiB,GAEAmZ,GAAAyO,EAAAhN,EAAAlvB,IACAkvB,EAAAlvB,GAAAk8B,EAAA1O,EAAAvsB,UACA+4B,EAAAh6B,KACAk8B,EAAAxhB,OAAAZ,EAAAzG,EAAAyG,GAAAggB,GACAoC,EAAAxhB,OAAA1Y,EAAAqR,EAAArR,GAAA83B,GACAoC,EAAAxhB,OAAArW,EAAAgP,EAAAhP,GAAAy1B,GACAoC,EAAAxhB,OAAAjM,EAAA4E,EAAA5E,GAAAqrB,GACAoC,EAAAxhB,OAAAlQ,EAAA6I,EAAA7I,GAAAsvB,GACAoC,EAAAxhB,OAAApG,EAAAjB,EAAAiB,GAAAwlB,GAaA,MACA,UACA,IAAAjd,EAAAjH,EAAAlF,EAAA1Q,IAAAwB,GAAAkT,GACAgmB,EAAA9kB,EAAAqZ,EAAAjvB,IAAAwB,GAAAkT,GACA,gBAAA1U,EAIA,IAHAivB,EAAAjvB,GAAA06B,EACAV,EAAAh6B,MACAqG,EAAAq0B,EAAAp5B,OACA+E,KACA2zB,EAAAh6B,GAAAqG,IAAAwW,EAAAxW,GAAA4oB,EAAAjvB,GAAAqG,IAAAyzB,EAGA5K,EAAAlvB,GAAA6c,EACA,MACA,QAKA,IAJAA,KAAAhb,GAAA6O,EAAA1Q,IACA06B,KAAA74B,GAAAotB,EAAAjvB,IACAg6B,EAAAh6B,MACAqG,EAAA5D,EAAAqqB,MAAAvX,iBAAAvV,GAAAsB,OACA+E,KACA2zB,EAAAh6B,GAAAqG,KAAAwW,EAAAxW,IAAA,IAAAq0B,EAAAr0B,IAAA,IAAAyzB,EAMA,IAAAC,EAAArpB,EAAAqpB,OACAoC,EAAA3oB,EAAA8kB,gBAAAyB,GACA,IAAAoC,EAEA,IADAA,EAAAvmB,EAAAmkB,GAAAvY,MAAArK,KACA,GAAAglB,EAAA76B,OAAA,CACA,IAAA8pB,EAAA+Q,EACAA,EAAA,SAAAj7B,GACA,OAAA65B,GAAA75B,GAAAkqB,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,GAAA0O,SAGAqC,EAAApiB,EA0BA,GAtBAvP,GACA4vB,OACAC,UACAwB,UAJAA,EAAAnrB,EAAAnK,OAAA6zB,EAAA7zB,QAAA,IAAAozB,KAKApzB,MAAAs1B,GAAAzB,EAAAgC,KAAA,GACA9B,OAAA,EACAH,WAAAG,GAAA,EACAC,MAAA,EACAT,KACAC,OAAAoC,EACAlN,OACA+K,OACA9K,KACA5gB,GAAA7L,EACA8K,SAAAmD,EAAAnD,SACAwf,OACAE,OACA0N,OAAAc,GAAArB,EAAAqB,MACAY,OAAA55B,EAAAzC,OACA46B,eAEA1B,GAAAz6B,KAAA+L,GACA8vB,IAAAqB,IAAAC,IACApxB,EAAA+vB,MAAA,EACA/vB,EAAAjE,MAAA,IAAAozB,KAAAG,EAAAQ,EACA,GAAApB,GAAA53B,QACA,OAAAm4B,KAGAmC,IACApxB,EAAAjE,MAAA,IAAAozB,KAAAnvB,EAAAsvB,GAAAQ,GAEA,GAAApB,GAAA53B,QAAA63B,GAAAM,IAKA/lB,EAAA,sBAAAjR,EAAA/C,GAAA+C,EAAA23B,IAyNA,SAAAkC,GAAAxP,GACA,QAAAzmB,EAAA,EAAwBA,EAAA6yB,GAAA53B,OAA8B+E,IAAA6yB,GAAA7yB,GAAAiI,GAAAwe,UACtDoM,GAAAllB,OAAA3N,IAAA,GA5iBA6sB,GAAAqJ,YAAA,SAAAjuB,EAAA8rB,EAAA1pB,EAAAopB,EAAAC,EAAAxsB,GAEA,GADA3P,KACAo5B,QAEA,OADAzpB,KAAAxP,KAFAH,WAKA,IAAAkc,EAAApJ,aAAA6qB,GAAA7qB,EAAA8C,EAAAimB,UAAA/oB,EAAAopB,EAAAC,EAAAxsB,GAEAstB,GAAA/gB,EAPAlc,KAOAkc,EAAAghB,SAAA,QAPAl9B,KAOAoC,QACA,QAAAqG,EAAA,EAAAsU,EAAAue,GAAA53B,OAAuD+E,EAAAsU,EAAQtU,IAC/D,GAAA6yB,GAAA7yB,GAAA+zB,SAAAlB,GAAA7yB,GAAAiI,MAAA,CACA4qB,GAAAve,EAAA,GAAApU,MAAA2yB,GAAA7yB,GAAAE,MACA,MAGA,OAdA3I,MAyEAs1B,GAAAsJ,YAAA,SAAAloB,GAEA,OADAA,EAAAZ,EAAAnJ,GAAA,sBAAA3M,KAAA8B,GAAA4U,GAAAZ,EAAA0f,OAAA,sBAAAx1B,KAAA8B,IACA9B,MAiCA29B,GAAA38B,UAAA69B,MAAA,SAAAA,GACA,IAAA3iB,EAAA,IAAAyhB,GAAA39B,KAAAw8B,KAAAx8B,KAAAk8B,IAGA,OAFAhgB,EAAA2hB,MAAA79B,KAAA69B,MACA3hB,EAAAsiB,KAAAK,GAAA,EACA3iB,GAcAyhB,GAAA38B,UAAA+7B,OAAA,SAAAc,GACA,IAAA3hB,EAAA,IAAAyhB,GAAA39B,KAAAw8B,KAAAx8B,KAAAk8B,IAGA,OAFAhgB,EAAAsiB,IAAAx+B,KAAAw+B,IACAtiB,EAAA2hB,MAAAplB,EAAA7P,MAAA8P,EAAAmlB,EAAA,OACA3hB,GAgOAtG,EAAAimB,UAAA,SAAA/oB,EAAAopB,EAAAC,EAAAxsB,GACA,GAAAmD,aAAA6qB,GACA,OAAA7qB,GAEA8C,EAAAI,GAAAmmB,EAAA,aAAAA,IACAxsB,KAAAwsB,GAAA,KACAA,EAAA,MAEArpB,EAAA0E,OAAA1E,GACAopB,MAAA,EACA,IACA4C,EACA18B,EAFAmF,KAGA,IAAAnF,KAAA0Q,IAAAoE,GAAA9U,IAAAqX,EAAArX,OAAAqX,EAAArX,GAAA,KAAAA,IACA08B,GAAA,EACAv3B,EAAAnF,GAAA0Q,EAAA1Q,IAEA,GAAA08B,EAmBA,OAFA3C,IAAA50B,EAAA40B,UACAxsB,IAAApI,EAAAoI,YACA,IAAAguB,IAAmCoB,IAAAx3B,GAAO20B,GAjB1C,GAAAvsB,EAAA,CAEA,IAAAqvB,EAAA,EACA,QAAAv2B,KAAAqK,EAAA,CACA,IAAA2pB,EAAA9iB,EAAAlR,GACAqK,EAAAoE,GAAAzO,IAAAg0B,EAAAuC,IACAA,EAAAvC,IAKA3pB,EAFAksB,GAAA,KAEArvB,WAAAmD,EAAAksB,GAAArvB,YAEA,WAAAguB,GAAA7qB,EAAAopB,IAwBA5G,GAAA2J,QAAA,SAAAnsB,EAAAopB,EAAAC,EAAAxsB,GAEA,GADA3P,KACAo5B,QAEA,OADAzpB,KAAAxP,KAFAH,WAKA,IAAAw8B,EAAA1pB,aAAA6qB,GAAA7qB,EAAA8C,EAAAimB,UAAA/oB,EAAAopB,EAAAC,EAAAxsB,GAEA,OADAstB,GAAAT,EANAx8B,KAMAw8B,EAAAU,SAAA,QANAl9B,KAMAoC,QANApC,MAyBAs1B,GAAA4J,QAAA,SAAA1C,EAAAtd,GAIA,OAHAsd,GAAA,MAAAtd,GACAlf,KAAA08B,OAAAF,EAAA7jB,EAAAuG,EAAAsd,EAAAN,IAAAM,EAAAN,IAEAl8B,MAuBAs1B,GAAAoH,OAAA,SAAAF,EAAAtd,GACA,IAEAnb,EACA6I,EAHAulB,KACA1pB,EAAA,EAGA,SAAAyW,EAEA,OADA+d,GAAAT,EAAAx8B,MAAA,EAAA2Y,EAAAuG,EAAA,IACAlf,KAGA,IADA+D,EAAAu3B,GAAA53B,OACmB+E,EAAA1E,EAAS0E,IAE5B,IADAmE,EAAA0uB,GAAA7yB,IACAiI,GAAA5O,IAAA9B,KAAA8B,MAAA06B,GAAA5vB,EAAA4vB,SAAA,CACA,GAAAA,EACA,OAAA5vB,EAAA8vB,OAEAvK,EAAAtxB,MACA27B,KAAA5vB,EAAA4vB,KACAE,OAAA9vB,EAAA8vB,SAIA,OAAAF,EACA,EAEArK,GAeAmD,GAAA6J,MAAA,SAAA3C,GACA,QAAA/zB,EAAA,EAAwBA,EAAA6yB,GAAA53B,OAA8B+E,IAAA6yB,GAAA7yB,GAAAiI,GAAA5O,IAAA9B,KAAA8B,IAAA06B,GAAAlB,GAAA7yB,GAAA+zB,UACtD,IAAA1mB,EAAA,sBAAA9V,KAAA8B,GAAA9B,KAAAs7B,GAAA7yB,GAAA+zB,QACAlB,GAAA7yB,GAAAuzB,QAAA,GAGA,OAAAh8B,MAcAs1B,GAAA8J,OAAA,SAAA5C,GACA,QAAA/zB,EAAA,EAAwBA,EAAA6yB,GAAA53B,OAA8B+E,IAAA,GAAA6yB,GAAA7yB,GAAAiI,GAAA5O,IAAA9B,KAAA8B,MAAA06B,GAAAlB,GAAA7yB,GAAA+zB,SAAA,CACtD,IAAA5vB,EAAA0uB,GAAA7yB,IACA,IAAAqN,EAAA,uBAAA9V,KAAA8B,GAAA9B,KAAA4M,EAAA4vB,eACA5vB,EAAAovB,OACAh8B,KAAA08B,OAAA9vB,EAAA4vB,KAAA5vB,EAAA8vB,SAGA,OAAA18B,MAcAs1B,GAAAqH,KAAA,SAAAH,GACA,QAAA/zB,EAAA,EAAwBA,EAAA6yB,GAAA53B,OAA8B+E,IAAA6yB,GAAA7yB,GAAAiI,GAAA5O,IAAA9B,KAAA8B,IAAA06B,GAAAlB,GAAA7yB,GAAA+zB,UACtD,IAAA1mB,EAAA,qBAAA9V,KAAA8B,GAAA9B,KAAAs7B,GAAA7yB,GAAA+zB,OACAlB,GAAAllB,OAAA3N,IAAA,GAGA,OAAAzI,MAOA8V,EAAAnJ,GAAA,iBAAA+xB,IACA5oB,EAAAnJ,GAAA,gBAAA+xB,IACApJ,GAAAtc,SAAA,WACA,0BAIA,IA6fAqmB,GACAC,GA9fAvI,GAAA,SAAAwI,GAIA,GAHAv/B,KAAAu/B,SACAv/B,KAAA0D,OAAA,EACA1D,KAAAod,KAAA,MACAmiB,EACA,QAAA92B,EAAA,EAAAsU,EAAAwiB,EAAA77B,OAA+C+E,EAAAsU,EAAQtU,KACvD82B,EAAA92B,IAAA82B,EAAA92B,GAAAqV,aAAAwX,GAAAxX,aAAAyhB,EAAA92B,GAAAqV,aAAAiZ,KACA/2B,UAAAu/B,MAAA77B,QAAA1D,KAAAu/B,MAAAv/B,KAAAu/B,MAAA77B,QAAA67B,EAAA92B,GACAzI,KAAA0D,WAKA87B,GAAAzI,GAAA/1B,UAsDA,QAAAy+B,MA9CAD,GAAA3+B,KAAA,WAGA,IAFA,IAAA6gB,EACA3d,EACA0E,EAAA,EAAAsU,EAAAtG,UAAA/S,OAA+C+E,EAAAsU,EAAQtU,MACvDiZ,EAAAjL,UAAAhO,KACAiZ,EAAA5D,aAAAwX,GAAAxX,aAAA4D,EAAA5D,aAAAiZ,KAEA/2B,KADA+D,EAAA/D,KAAAu/B,MAAA77B,QACA1D,KAAAu/B,MAAAx7B,GAAA2d,EACA1hB,KAAA0D,UAGA,OAAA1D,MASAw/B,GAAA7oB,IAAA,WAEA,OADA3W,KAAA0D,eAAA1D,UAAA0D,UACA1D,KAAAu/B,MAAA5oB,OAgBA6oB,GAAA5G,QAAA,SAAAjpB,EAAAmpB,GACA,QAAArwB,EAAA,EAAAsU,EAAA/c,KAAAu/B,MAAA77B,OAAgD+E,EAAAsU,EAAQtU,IACxD,QAAAkH,EAAAxP,KAAA24B,EAAA94B,KAAAu/B,MAAA92B,MACA,OAAAzI,KAGA,OAAAA,MAEAs1B,MAAApe,GAAAuoB,MACAD,GAAAC,IAAA,SAAApV,GACA,kBACA,IAAA9I,EAAA9K,UACA,OAAAzW,KAAA44B,QAAA,SAAAloB,GACAA,EAAA2Z,GAAAxU,GAAAnF,EAAA6Q,MAJA,CAOUke,KA2gBV,OAzgBAD,GAAAp9B,KAAA,SAAAR,EAAAsd,GACA,GAAAtd,GAAAgU,EAAAI,GAAApU,EAAAqU,IAAAL,EAAAI,GAAApU,EAAA,aACA,QAAAkC,EAAA,EAAAkZ,EAAApb,EAAA8B,OAA8CI,EAAAkZ,EAAQlZ,IACtD9D,KAAAu/B,MAAAz7B,GAAA1B,KAAAR,EAAAkC,SAGA,QAAA2E,EAAA,EAAAsU,EAAA/c,KAAAu/B,MAAA77B,OAAoD+E,EAAAsU,EAAQtU,IAC5DzI,KAAAu/B,MAAA92B,GAAArG,KAAAR,EAAAsd,GAGA,OAAAlf,MAQAw/B,GAAAE,MAAA,WACA,KAAA1/B,KAAA0D,QACA1D,KAAA2W,OAgBA6oB,GAAAppB,OAAA,SAAAupB,EAAAle,EAAAme,GACAD,IAAA,EAAAjnB,EAAA1Y,KAAA0D,OAAAi8B,EAAA,GAAAA,EACAle,EAAA/I,EAAA,EAAAC,EAAA3Y,KAAA0D,OAAAi8B,EAAAle,IACA,IAGAhZ,EAHAo3B,KACAC,KACAvpB,KAEA,IAAA9N,EAAA,EAAoBA,EAAAgO,UAAA/S,OAAsB+E,IAC1C8N,EAAA1V,KAAA4V,UAAAhO,IAEA,IAAAA,EAAA,EAAoBA,EAAAgZ,EAAWhZ,IAC/Bq3B,EAAAj/B,KAAAb,KAAA2/B,EAAAl3B,IAEA,KAAeA,EAAAzI,KAAA0D,OAAAi8B,EAAyBl3B,IACxCo3B,EAAAh/B,KAAAb,KAAA2/B,EAAAl3B,IAEA,IAAAs3B,EAAAxpB,EAAA7S,OACA,IAAA+E,EAAA,EAAoBA,EAAAs3B,EAAAF,EAAAn8B,OAA0B+E,IAC9CzI,KAAAu/B,MAAAI,EAAAl3B,GAAAzI,KAAA2/B,EAAAl3B,KAAAs3B,EAAAxpB,EAAA9N,GAAAo3B,EAAAp3B,EAAAs3B,GAGA,IADAt3B,EAAAzI,KAAAu/B,MAAA77B,OAAA1D,KAAA0D,QAAA+d,EAAAse,EACA//B,KAAAyI,WACAzI,KAAAyI,KAEA,WAAAsuB,GAAA+I,IAaAN,GAAAQ,QAAA,SAAAtvB,GACA,QAAAjI,EAAA,EAAAsU,EAAA/c,KAAA0D,OAA0C+E,EAAAsU,EAAQtU,IAAA,GAAAzI,KAAAyI,IAAAiI,EAElD,OADA1Q,KAAAoW,OAAA3N,EAAA,IACA,GAGA+2B,GAAAP,QAAA,SAAAnsB,EAAAopB,EAAAC,EAAAxsB,IACAiG,EAAAI,GAAAmmB,EAAA,cAAAA,KAAAxsB,EAAAwsB,GAAA,MACA,IAEAza,EAEAue,EAJAl8B,EAAA/D,KAAAu/B,MAAA77B,OACA+E,EAAA1E,EAEA5B,EAAAnC,KAEA,IAAA+D,EACA,OAAA/D,KAEA2P,IAAAswB,EAAA,cACAl8B,GAAA4L,EAAAxP,KAAAgC,KAEAg6B,EAAAvmB,EAAAI,GAAAmmB,EA/tJA,UA+tJAA,EAAA8D,EACA,IAAAzD,EAAA5mB,EAAAimB,UAAA/oB,EAAAopB,EAAAC,EAAA8D,GAEA,IADAve,EAAA1hB,KAAAu/B,QAAA92B,GAAAw2B,QAAAzC,GACA/zB,KACAzI,KAAAu/B,MAAA92B,KAAAzI,KAAAu/B,MAAA92B,GAAA2wB,SAAAp5B,KAAAu/B,MAAA92B,GAAAk2B,YAAAjd,EAAA8a,KACAx8B,KAAAu/B,MAAA92B,KAAAzI,KAAAu/B,MAAA92B,GAAA2wB,SAAAr1B,IAEA,OAAA/D,MAEAw/B,GAAAU,YAAA,SAAAxvB,GAEA,IADA,IAAAjI,EAAAzI,KAAAu/B,MAAA77B,OACA+E,KACAzI,KAAAu/B,MAAA92B,GAAAy3B,YAAAxvB,GAEA,OAAA1Q,MAEAw/B,GAAAr8B,QAAA,WAKA,IAJA,IAAAjC,KACAC,KACAud,KACAla,KACAiE,EAAAzI,KAAAu/B,MAAA77B,OAAwC+E,KAAK,IAAAzI,KAAAu/B,MAAA92B,GAAA2wB,QAAA,CAC7C,IAAA1B,EAAA13B,KAAAu/B,MAAA92B,GAAAtF,UACAjC,EAAAL,KAAA62B,EAAAx2B,GACAC,EAAAN,KAAA62B,EAAAv2B,GACAud,EAAA7d,KAAA62B,EAAAx2B,EAAAw2B,EAAAt0B,OACAoB,EAAA3D,KAAA62B,EAAAv2B,EAAAu2B,EAAAx0B,QAMA,OACAhC,EALAA,EAAAyX,EAAA9C,GAAA,EAAA3U,GAMAC,EALAA,EAAAwX,EAAA9C,GAAA,EAAA1U,GAMAud,GALAA,EAAAhG,EAAA7C,GAAA,EAAA6I,GAMAla,GALAA,EAAAkU,EAAA7C,GAAA,EAAArR,GAMApB,MAAAsb,EAAAxd,EACAgC,OAAAsB,EAAArD,IAGAq+B,GAAA5hB,MAAA,SAAA/Z,GACAA,EAAA7D,KAAAkvB,MAAA/sB,MACA,QAAAsG,EAAA,EAAAsU,EAAA/c,KAAAu/B,MAAA77B,OAAgD+E,EAAAsU,EAAQtU,IACxD5E,EAAAhD,KAAAb,KAAAu/B,MAAA92B,GAAAmV,SAEA,OAAA/Z,GAEA27B,GAAAxmB,SAAA,WACA,uBAGAwmB,GAAAjG,KAAA,SAAA4G,GACA,IAAAC,EAAApgC,KAAAkvB,MAAA/sB,MASA,OARAnC,KAAA44B,QAAA,SAAAnD,EAAAkK,GACA,IAAAxoB,EAAAse,EAAA8D,KAAA4G,GACA,MAAAhpB,GACAA,EAAAyhB,QAAA,SAAAyH,EAAAC,GACAF,EAAAv/B,KAAAw/B,OAIAD,GAgBAZ,GAAAxG,cAAA,SAAA93B,EAAAC,GACA,IAAA63B,GAAA,EAOA,OANAh5B,KAAA44B,QAAA,SAAAloB,GACA,GAAAA,EAAAsoB,cAAA93B,EAAAC,GAEA,OADA63B,GAAA,GACA,IAGAA,GAkBApjB,EAAA2qB,aAAA,SAAAj+B,GACA,IAAAA,EAAAk+B,KACA,OAAAl+B,EAEAtC,KAAAygC,MAAAzgC,KAAAygC,UACA,IAAAC,GACApkB,EAAAha,EAAAga,EACAkkB,QACAG,WAEAC,EAAAt+B,EAAAk+B,KAAA,eACA,QAAAK,KAAAv+B,EAAAk+B,KAAAl+B,EAAAk+B,KAAAtpB,GAAA2pB,KACAH,EAAAF,KAAAK,GAAAv+B,EAAAk+B,KAAAK,IAOA,GALA7gC,KAAAygC,MAAAG,GACA5gC,KAAAygC,MAAAG,GAAA//B,KAAA6/B,GAEA1gC,KAAAygC,MAAAG,IAAAF,IAEAp+B,EAAA0b,IAEA,QAAA8iB,KADAJ,EAAAF,KAAA,gBAAA7mB,EAAArX,EAAAk+B,KAAA,oBACAl+B,EAAAq+B,OAAA,GAAAr+B,EAAAq+B,OAAAzpB,GAAA4pB,GAAA,CACA,IAAAl3B,EAAAtH,EAAAq+B,OAAAG,GAQA,GAPAJ,EAAAC,OAAAG,IACAxkB,EAAA1S,EAAA0S,EACAvU,KACA8I,EAAAjH,EAAAiH,GAAA,IAAAjH,EAAAiH,EAAA5O,QAAA,sBAAAuuB,GACA,OAAqC7oB,EAAA,IAAAlB,EAAA,IAAAvF,EAAA,IAAAoC,EAAA,IAAA2D,EAAA,IAAAgb,EAAA,KAA+CuO,IAAA,MAC1D,KAE1B5mB,EAAA7B,EACA,QAAAA,KAAA6B,EAAA7B,EAAA6B,EAAAsN,GAAAnP,KACA24B,EAAAC,OAAAG,GAAA/4B,KAAA6B,EAAA7B,MAKA,OAAAzF,GAkBAuU,EAAAkqB,QAAA,SAAAH,EAAAI,EAAAt+B,EAAAu+B,GAIA,GAHAA,KAAA,SACAv+B,KAAA,SACAs+B,OAA8BE,OAAA,IAAAC,KAAA,IAAAC,QAAA,IAAAC,OAAA,KAAkDL,IAAA,IAChFprB,EAAA6qB,MAAA,CAGA,IAUAa,EAVAh/B,EAAAsT,EAAA6qB,MAAAG,GACA,IAAAt+B,EAAA,CACA,IAAAV,EAAA,IAAA2/B,OAAA,UAAAX,EAAA3+B,QAAA,oBAAA6V,GAAA,eACA,QAAA0pB,KAAA5rB,EAAA6qB,MAAA,GAAA7qB,EAAA6qB,MAAAvpB,GAAAsqB,IACA5/B,EAAA6/B,KAAAD,GAAA,CACAl/B,EAAAsT,EAAA6qB,MAAAe,GACA,OAKA,GAAAl/B,EACA,QAAAmG,EAAA,EAAAsU,EAAAza,EAAAoB,OAA8C+E,EAAAsU,KAC9CukB,EAAAh/B,EAAAmG,IACA+3B,KAAA,gBAAAQ,GAAAM,EAAAd,KAAA,eAAA99B,GAAA4+B,EAAAd,KAAA,eAAAc,EAAAd,KAAA,iBAAAS,GAFsDx4B,KAOtD,OAAA64B,IAuBAzqB,EAAA6qB,MAAA,SAAAxgC,EAAAC,EAAAwgC,EAAAr/B,EAAAs/B,EAAAnD,EAAAoD,EAAAC,GACArD,KAAA,SACAoD,EAAAnpB,EAAAC,EAAAkpB,GAAA,SACAC,EAAAppB,EAAAC,EAAAmpB,GAAA,QACA,IAIAjR,EAJAkR,EAAA/pB,EAAA2pB,GAAA/9B,GAAAkU,GACA8J,EAAA,EACAogB,EAAA,EACAp4B,EAAAkO,EAGA,GADAlC,EAAAI,GAAA1T,EAAA,YAAAA,EAAAtC,KAAA+gC,QAAAz+B,IACAA,EAAA,CACAuuB,GAAA+Q,GAAA,IAAAt/B,EAAAk+B,KAAA,gBAMA,IALA,IAAA3V,EAAAvoB,EAAAk+B,KAAA7jB,KAAA/Y,GAAAkT,GACA5P,GAAA2jB,EAAA,GACAoX,EAAApX,EAAA,GAAAA,EAAA,GACAqX,EAAA,EACAh/B,GAAA2nB,EAAA,gBAAA4T,EAAAwD,IAAA3/B,EAAAk+B,KAAA2B,QAAAF,EAAA,GACAx5B,EAAA,EAAAsU,EAAAglB,EAAAr+B,OAAiD+E,EAAAsU,EAAQtU,IAAA,CACzD,SAAAs5B,EAAAt5B,GACAmZ,EAAA,EACAwgB,EAAA,EACAJ,EAAA,EACAE,GAAAD,EAAAH,MACkB,CAClB,IAAA3S,EAAA6S,GAAA1/B,EAAAq+B,OAAAoB,EAAAt5B,EAAA,QACA25B,EAAA9/B,EAAAq+B,OAAAoB,EAAAt5B,IACAmZ,GAAAogB,GAAA7S,EAAA7S,GAAAha,EAAAga,IAAA6S,EAAApnB,GAAAonB,EAAApnB,EAAAg6B,EAAAt5B,KAAA,GAAAnG,EAAAga,EAAAulB,EAAA,EACAG,EAAA,EAEAI,KAAAvxB,IACAjH,GAAAgM,EAAAka,cAAAsS,EAAAvxB,GAAA,IAAA+Q,EAAAiP,EAAAqR,EAAArR,EAAA,IAAAA,IAAA3pB,EAAAhE,EAAA,KAAAhC,EAAAgG,GAAA2pB,GAAA1vB,EAAA+B,GAAA2tB,MAIA,OAAA7wB,KAAA4J,QAAAxH,MACAI,KAAA,OACAM,OAAA,UAgCA+T,EAAAP,IAAA,SAAAwoB,GACA,GAAAlpB,EAAAI,GAAA8oB,EAAA,SAKA,IAJA,IAGAh7B,EAHA+Z,EAAA7d,KAAAmC,MACAsG,EAAA,EACAsU,EAAA+hB,EAAAp7B,OAEmB+E,EAAAsU,EAAQtU,IAC3B3E,EAAAg7B,EAAAr2B,OACAsO,EAAAG,GAAApT,EAAAsZ,OAAAS,EAAAhd,KAAAb,KAAA8D,EAAAsZ,QAAAhb,KAAA0B,IAGA,OAAA+Z,GAsBAjI,EAAAihB,OAAA,SAAAwL,EAAAvvB,GACA,IAAAyD,EAAAX,EAAAI,GAAAlD,EAAAmD,IAAA,GAAAhS,GAAA6O,GAAA2D,UAIA,OAHA4rB,GAAAzsB,EAAAI,GAAAqsB,EAthKA,WAshKA9rB,EAAA7S,OAAA,IAAA2+B,IAAApgC,QAAAgV,EAAA,SAAAqrB,EAAA75B,GACA,aAAA8N,IAAA9N,GAAAqP,EAAAvB,EAAA9N,MAEA45B,GAAAvqB,GAyBAlC,EAAA2sB,UACAlD,GAAA,gBACAC,GAAA,2DAeA,SAAAgD,EAAAvuB,GACA,OAAAkE,OAAAqqB,GAAArgC,QAAAo9B,GAAA,SAAAmD,EAAAzkB,GACA,OAhBA,SAAAykB,EAAAzkB,EAAAhK,GACA,IAAA8J,EAAA9J,EAWA,OAVAgK,EAAA9b,QAAAq9B,GAAA,SAAAkD,EAAA5gC,EAAA6gC,EAAAC,EAAAC,GACA/gC,KAAA8gC,EACA7kB,IACAjc,KAAAic,IACAA,IAAAjc,IAEA,mBAAAic,GAAA8kB,IAAA9kB,UAGAA,GAAA,MAAAA,MAAA9J,EAAAyuB,EAAA3kB,GAAA,GAKA+kB,CAAAJ,EAAAzkB,EAAAhK,OAkBA6B,EAAAitB,MAAA,WACA,GAAAvrB,EAAAC,IACAJ,EAAAE,IAAAtW,QAAAuW,EAAAtB,OACU,CAEV9L,OAAAnJ,aAAAoO,EACA,WACAjF,OAAAnJ,QACc,MAAA6L,KAEd,OAAAgJ,GAsBAA,EAAAktB,GAAAtD,GAEA1pB,EAAAnJ,GAAA,6BACA6I,GAAA,IAIA,SAAA4B,EAAA5B,EAAAkB,GACA,MAAAU,EAAA2rB,YAAA3rB,EAAAzL,mBACAyL,EAAAzL,iBAUM,mBAVN+K,EAAA,WACAU,EAAA8c,oBASM,mBATNxd,GAAA,GACAU,EAAA2rB,WAAA,aACc,GACd3rB,EAAA2rB,WAAA,WAEA,SAAAC,IACA,KAAAvB,KAAArqB,EAAA2rB,YAAAne,WAAAoe,EAAA,GAAAptB,EAAAE,IAAA,mBAEAktB,GAXA,CAYMt3B,UAENkK,GACEC,MAAAP,EAAAI,MAAAH,EAAAD,QAAAK,IAKF,SAAAJ,EAAAD,EAAA1E,GAEA,IAAA+E,EA6BAstB,EACAtG,EATAzlB,EACAJ,EACAosB,EAGAC,EAKAjrB,EACAkrB,EAOAC,EAQAC,EACAtrB,EACAsG,EA5BApH,EAAA,iBACAJ,EAAA,SACAosB,EAAA,UAGAC,EAAA,SAAAjnB,EAAA9X,GACA,OAAA8X,EAAA9X,GAIA8T,GAAmB2R,MACnBuZ,EAAA,WACA,QAAA36B,EAAA,EAAAsU,EAAA/c,KAAA0D,OAA8C+E,EAAAsU,EAAQtU,IACtD,YAAAzI,KAAAyI,GACA,OAAAzI,KAAAyI,IAIA46B,EAAA,WAEA,IADA,IAAA56B,EAAAzI,KAAA0D,SACA+E,GACA,YAAAzI,KAAAyI,GACA,OAAAzI,KAAAyI,IAIA66B,EAAA9rB,OAAAxW,UAAAgY,SACAhB,EAAAC,OACAqG,EAAA9H,MAAA8H,SAAA,SAAAilB,GACA,OAAAA,aAAA/sB,OAAA,kBAAA8sB,EAAAnjC,KAAAojC,IAgBAztB,IAAA,SAAAlU,EAAAwf,GACA,IAMAzZ,EALA67B,EAAA7G,EACApmB,EAAAC,MAAAxV,UAAAwN,MAAArO,KAAAsW,UAAA,GACAgtB,EAAA3tB,IAAA2tB,UAAA7hC,GACAuhB,EAAA,EAGAugB,KACAC,KACAxR,KACAyR,EAAAX,EAEA9Q,EAAAiR,eACAjR,EAAAkR,cACAJ,EAAArhC,EACA+6B,EAAA,EACA,QAAAl0B,EAAA,EAAAsU,EAAA0mB,EAAA//B,OAAmD+E,EAAAsU,EAAQtU,IAAA,WAAAg7B,EAAAh7B,KAC3Di7B,EAAA7iC,KAAA4iC,EAAAh7B,GAAAo7B,QACAJ,EAAAh7B,GAAAo7B,OAAA,IACAF,EAAAF,EAAAh7B,GAAAo7B,QAAAJ,EAAAh7B,KAIA,IADAi7B,EAAA5F,KAAAqF,GACAO,EAAAvgB,GAAA,GAGA,GAFAxb,EAAAg8B,EAAAD,EAAAvgB,MACAgP,EAAAtxB,KAAA8G,EAAAkO,MAAAuL,EAAA7K,IACAomB,EAEA,OADAA,EAAA6G,EACArR,EAGA,IAAA1pB,EAAA,EAAwBA,EAAAsU,EAAQtU,IAEhC,cADAd,EAAA87B,EAAAh7B,IAEA,GAAAd,EAAAk8B,QAAAH,EAAAvgB,GAAA,CAEA,GADAgP,EAAAtxB,KAAA8G,EAAAkO,MAAAuL,EAAA7K,IACAomB,EACA,MAEA,GAIA,IAFAh1B,EAAAg8B,EAAAD,IADAvgB,MAEAgP,EAAAtxB,KAAA8G,EAAAkO,MAAAuL,EAAA7K,IACAomB,EACA,YAE0Bh1B,QAE1Bg8B,EAAAh8B,EAAAk8B,QAAAl8B,OAIA,GADAwqB,EAAAtxB,KAAA8G,EAAAkO,MAAAuL,EAAA7K,IACAomB,EACA,MAMA,OAFAA,EAAA6G,EACAP,EAAAW,EACAzR,GAGArc,IAAAguB,QAAA5rB,EAaApC,IAAA2tB,UAAA,SAAA7hC,GACA,IAEA8f,EACA6d,EACAx3B,EACAU,EACAsU,EACAjZ,EACAkZ,EACA+mB,EATAC,EAAA1lB,EAAA1c,OAAAgC,MAAAkT,GACAlK,EAAAsL,EASA+rB,GAAAr3B,GACAulB,KACA,IAAA1pB,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAAuC+E,EAAAsU,EAAQtU,IAAA,CAE/C,IADAs7B,KACAjgC,EAAA,EAAAkZ,EAAAinB,EAAAvgC,OAAwCI,EAAAkZ,EAAQlZ,IAIhD,IAFAy7B,IADA3yB,EAAAq3B,EAAAngC,GAAA+lB,GACAma,EAAAv7B,IAAAmE,EAvIA,MAwIA7E,EAAA,EACAA,MACA2Z,EAAA6d,EAAAx3B,MAEAg8B,EAAAljC,KAAA6gB,GACAyQ,IAAAluB,OAAAyd,EAAAhL,QAIAutB,EAAAF,EAEA,OAAA5R,GAYArc,IAAAgB,UAAA,SAAAotB,GACAA,GAEAA,EAAA,KADAA,EAAAlsB,EAAAksB,GAAAjiC,QAAA,2BACA,IACA6U,EAAA,IAAAyqB,OAAA2C,IAEAptB,EAAA,UA4BAhB,IAAAnJ,GAAA,SAAA/K,EAAA8U,GACA,sBAAAA,EACA,oBAGA,IADA,IAAAstB,EAAA1lB,EAAA1c,GAAA0c,EAAA1c,EAAA,IAAAA,MAAAoW,EAAApW,GAAAgC,MAAAs/B,GACAz6B,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAA2C+E,EAAAsU,EAAQtU,KACnD,SAAA7G,GAIA,IAHA,IAEAuiC,EAFAH,EAAA1lB,EAAA1c,KAAAoW,EAAApW,GAAAgC,MAAAkT,GACAlK,EAAAsL,EAEAzP,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAAmD+E,EAAAsU,EAAQtU,IAE3DmE,GADAA,IAAAid,GACAua,eAAAJ,EAAAv7B,KAAAmE,EAAAo3B,EAAAv7B,MAAAmE,EAAAo3B,EAAAv7B,KAAsFohB,OAGtF,IADAjd,EAAA8J,EAAA9J,EAAA8J,MACAjO,EAAA,EAAAsU,EAAAnQ,EAAA8J,EAAAhT,OAA6C+E,EAAAsU,EAAQtU,IAAA,GAAAmE,EAAA8J,EAAAjO,IAAAiO,EAAA,CACrDytB,GAAA,EACA,OAEAA,GAAAv3B,EAAA8J,EAAA7V,KAAA6V,GAbA,CAccstB,EAAAv7B,IAEd,gBAAAo7B,IACAA,QACAntB,EAAAmtB,aAoBA/tB,IAAAY,EAAA,SAAAtN,GACA,IAAAsT,KAAAlO,MAAArO,KAAAsW,UAAA,GACA,kBACAX,IAAAD,MAAA,MAAAzM,EAAA,MAAAnF,OAAAyY,GAAAzY,UAAAuK,MAAArO,KAAAsW,UAAA,OASAX,IAAA6mB,KAAA,WACAA,EAAA,GAgBA7mB,IAAAuuB,GAAA,SAAAC,GACA,IAAAC,EAAAjmB,EAAA2kB,KAAA/+B,KAAA,KAAA++B,EACA,OAAAqB,EACA,IAAA/C,OAAA,gBAAA+C,EAAA,iBAAA7C,KAAA8C,GAEAA,GAWAzuB,IAAA0uB,IAAA,WACA,OAAAlmB,EAAA2kB,OAAAr/B,MAAAkT,IAoBAhB,IAAA2uB,IAAA3uB,IAAA0f,OAAA,SAAA5zB,EAAA8U,GACA,GAAA9U,EAAA,CAIA,IAAAoiC,EAAA1lB,EAAA1c,GAAA0c,EAAA1c,EAAA,IAAAA,MAAAoW,EAAApW,GAAAgC,MAAAs/B,GACA,GAAAc,EAAAtgC,OAAA,EACA,QAAA+E,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAA+C+E,EAAAsU,EAAQtU,IACvDqN,IAAA2uB,IAAAT,EAAAv7B,GAAAiO,OAFA,CAMAstB,EAAA1lB,EAAA1c,KAAAoW,EAAApW,GAAAgC,MAAAkT,GACA,IAAAlK,EACAmR,EACA3H,EACAtS,EAAAkZ,EACAunB,GAAArsB,GACA,IAAAzP,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAAuC+E,EAAAsU,EAAQtU,IAC/C,IAAA3E,EAAA,EAAwBA,EAAAygC,EAAA7gC,OAAgBI,GAAAsS,EAAA1S,OAAA,GAGxC,GAFA0S,GAAAtS,EAAA,GACA8I,EAAA23B,EAAAzgC,GAAA+lB,EApUA,KAqUAma,EAAAv7B,GACAmE,EAAAo3B,EAAAv7B,KACA2N,EAAAvV,KAAA+L,EAAAo3B,EAAAv7B,UAGA,IAAAsV,KAAAnR,IAAAsK,GAAA6G,IACA3H,EAAAvV,KAAA+L,EAAAmR,IAGAwmB,EAAAnuB,OAAAP,MAAA0uB,EAAAnuB,GAGA,IAAA3N,EAAA,EAAAsU,EAAAwnB,EAAA7gC,OAAqC+E,EAAAsU,EAAQtU,IAE7C,IADAmE,EAAA23B,EAAA97B,GACAmE,EAAAid,GAAA,CACA,GAAAnT,EAAA,CACA,GAAA9J,EAAA8J,EAAA,CACA,IAAA5S,EAAA,EAAAkZ,EAAApQ,EAAA8J,EAAAhT,OAAqDI,EAAAkZ,EAAQlZ,IAAA,GAAA8I,EAAA8J,EAAA5S,IAAA4S,EAAA,CAC7D9J,EAAA8J,EAAAN,OAAAtS,EAAA,GACA,OAEA8I,EAAA8J,EAAAhT,eAAAkJ,EAAA8J,EAEA,IAAAqH,KAAAnR,EAAAid,EAAA,GAAAjd,EAAAid,EAAA3S,GAAA6G,IAAAnR,EAAAid,EAAA9L,GAAArH,EAAA,CACA,IAAAguB,EAAA93B,EAAAid,EAAA9L,GAAArH,EACA,IAAA5S,EAAA,EAAAkZ,EAAA0nB,EAAAhhC,OAAuDI,EAAAkZ,EAAQlZ,IAAA,GAAA4gC,EAAA5gC,IAAA4S,EAAA,CAC/DguB,EAAAtuB,OAAAtS,EAAA,GACA,OAEA4gC,EAAAhhC,eAAAkJ,EAAAid,EAAA9L,GAAArH,QAIA,IAAAqH,YADAnR,EAAA8J,EACA9J,EAAAid,EAAAjd,EAAAid,EAAA3S,GAAA6G,IAAAnR,EAAAid,EAAA9L,GAAArH,UACA9J,EAAAid,EAAA9L,GAAArH,EAGA9J,IAAAid,SAzDA/T,IAAAguB,QAAA5rB,GAAqC2R,OA8ErC/T,IAAA6uB,KAAA,SAAA/iC,EAAA8U,GACA,IAAAwV,EAAA,WAEA,OADApW,IAAA2uB,IAAA7iC,EAAAsqB,GACAxV,EAAAb,MAAA7V,KAAAyW,YAEA,OAAAX,IAAAnJ,GAAA/K,EAAAsqB,IAQApW,IAAAc,QAhZA,QAiZAd,IAAAkD,SAAA,WACA,wCAEA,IAAAzD,KAAAD,QAAAC,EAAAD,QAAAQ,SAA0L3G,KAA1LwG,EAAA,WAA4K,OAAAG,KAAcD,MAAAP,SAAAC,EAAAD,QAAAK,IAM1L,SAAAJ,EAAAD,EAAA1E,GAEA,IAAA8E,EAAAC,EAAiED,GAAA9E,EAAA,SA+4C/DzB,KA/4C+DwG,EAAA,SAAAC,GACjE,IAAAA,KAAAoI,IAAA,CAIA,IAAA9G,EAAA,iBACAc,EAAAC,OACAwB,EAAAC,WACAC,EAAAC,SACAnB,EAAAnU,KACAoU,EAAAD,EAAAzR,IACAzC,EAAAkU,EAAAlU,IACAsU,EAAAJ,EAAAI,IACA/B,EAAA,QACAhB,EAAAF,EAAAE,IACAgC,EAAA,GACAC,EAAA,IACA6sB,EAAA,+BACAC,GACAC,MAAA,kBACAC,QAAA,8BACAC,QAAA,4BACA76B,KAAA,iBACA86B,KAAA,mDAEAC,KACAtvB,EAAAoD,SAAA,WACA,6DAAAhZ,KAAA4W,SAEA,IAAA3Q,EAAA,SAAAyK,EAAAtO,GACA,GAAAA,EAIA,QAAA2b,IAHA,iBAAArN,IACAA,EAAAzK,EAAAyK,IAEAtO,IAAA8U,GAAA6G,KACA,UAAAA,EAAAwF,UAAA,KACA7S,EAAAy0B,eAAAP,EAAA7mB,EAAAwF,UAAA,GAAAvL,EAAA5V,EAAA2b,KAEArN,EAAA00B,aAAArnB,EAAA/F,EAAA5V,EAAA2b,WAIArN,EAAAkF,EAAAuH,GAAA/F,IAAAiuB,gBAAA,6BAAA30B,IACAhO,QAAAgO,EAAAhO,MAAA4iC,wBAAA,iBAEA,OAAA50B,GAEA60B,EAAA,SAAA1gC,EAAA6V,GACA,IAAA0C,EAAA,SACAtb,EAAA+C,EAAA/C,GAAA4Y,EACA8qB,EAAA,GAAAC,EAAA,GACApnB,EAAAxZ,EAAApC,KACAijC,EAAA7gC,EAAAqqB,MACArrB,EAAAwa,EAAA3b,MACAgO,EAAAkF,EAAAuH,GAAA/F,IAAAqa,eAAA3vB,GACA,IAAA4O,EAAA,CAeA,GADAgK,GAbAA,EAAA1C,EAAA0C,GAAAzY,QAAA2T,EAAAoG,iBAAA,SAAAwmB,EAAAmD,EAAAC,GAEA,GADAxoB,EAAA,SACAuoB,GAAAC,EAAA,CACAJ,EAAA/rB,EAAAksB,GAEA,IAAAE,EAAA,IADAJ,EAAAhsB,EAAAmsB,IACA,MACA/sB,EAAA2sB,EAAA,MAAA3sB,EAAA4sB,EAAA,YACAA,EAAAhtB,EAAAoN,KAAA,IAAAhN,EAAA2sB,EAAA,OAAAK,EAAA,KACA,IAAAJ,IACAA,IAAAtf,QAAA,QAAA0f,GAEA,OAAA/tB,KAEAlU,MAAA,YACA,UAAAwZ,EAAA,CACA,IAAAmB,EAAA7D,EAAAkH,QAEA,GADArD,GAAA9E,EAAA8E,GACAunB,MAAAvnB,GACA,YAEA,IAAAwnB,GAAA,IAAAttB,EAAAsT,IAAAnW,EAAAkJ,IAAAP,IAAA9F,EAAAuT,IAAApW,EAAAkJ,IAAAP,KACAvX,EAAA,GAAA0R,EAAAnU,EAAAwhC,EAAA,IAAAxhC,EAAAwhC,EAAA,SACAA,EAAA,IAAA/+B,EACA++B,EAAA,IAAA/+B,EACA++B,EAAA,OACAA,EAAA,IAAAA,EAAA,GACAA,EAAA,MAEAA,EAAA,OACAA,EAAA,IAAAA,EAAA,GACAA,EAAA,MAGA,IAAAza,EAAA1V,EAAAmZ,WAAArU,GACA,IAAA4Q,EACA,YASA,GAPAxpB,IAAAG,QAAA,uBAEA4C,EAAA6V,UAAA5Y,GAAA+C,EAAA6V,SAAA5Y,KACA4jC,EAAAM,KAAAljB,YAAAje,EAAA6V,iBACA7V,EAAA6V,WAGA7V,EAAA6V,SAAA,CACAhK,EAAAzK,EAAAmX,EAAA,YAA4Ctb,OAC5C+C,EAAA6V,SAAAhK,EACAzK,EAAAyK,EAAA,UAAA0M,GACAooB,KACAC,OAEAjnB,GAAAunB,EAAA,GACAtnB,GAAAsnB,EAAA,GACArnB,GAAAqnB,EAAA,GACAvhC,GAAAuhC,EAAA,GACAE,kBAAAphC,EAAAiY,OAAA6T,WAEA+U,EAAAM,KAAAlyB,YAAApD,GACA,QAAAjI,EAAA,EAAAsU,EAAAuO,EAAA5nB,OAAkD+E,EAAAsU,EAAQtU,IAC1DiI,EAAAoD,YAAA7N,EAAA,QACA2E,OAAA0gB,EAAA7iB,GAAAmC,OAAA0gB,EAAA7iB,GAAAmC,OAAAnC,EAAA,YACAy9B,aAAA5a,EAAA7iB,GAAAkC,OAAA,OACAw7B,eAAAC,SAAA9a,EAAA7iB,GAAAsB,SAAAuhB,EAAA7iB,GAAAsB,QAAA,MAaA,OARA9D,EAAAoY,GACA7b,KAAA6jC,EAAAvkC,GACAiI,QAAA,EACAJ,eAAA,IAEA9F,EAAArB,KAAAsV,EACAjU,EAAAkG,QAAA,EACAlG,EAAAyiC,YAAA,EACA,GAMAD,EAAA,SAAAvkC,GACA,IAJAykC,EAAA76B,SAAA86B,gBACA,IAAAD,GAAA,KAAAA,GAIA,eAAAzkC,EAAA,KANA,IACAykC,EAOAj0B,EAAA5G,SAAA4G,SAOA,eALAA,EAAAm0B,SAAA,KACAn0B,EAAAo0B,KACAp0B,EAAAq0B,SACAr0B,EAAAS,QAEA,IAAAjR,EAAA,MAEA8kC,EAAA,SAAAvoB,GACA,IAAA1B,EAAA0B,EAAAlb,QAAA,GACA8C,EAAAoY,EAAAwoB,SAAuBC,iBAAAzoB,EAAAvB,OAAA6T,SAAA,cAAAhU,EAAAzb,EAAA,IAAAyb,EAAAxb,EAAA,OAEvB4lC,EAAA,SAAA1oB,EAAAa,EAAA8nB,GACA,WAAA3oB,EAAAjB,KAAA,CAiBA,IAhBA,IAQAiU,EACAC,EACArB,EACAgX,EACA7kC,EAZA6c,EAAAjH,EAAAkH,GAAA1G,cAAA5U,MAAA,KACA2D,EAAA8W,EAAA6Q,MACAgY,EAAAF,EAAA,cACAvkC,EAAA4b,EAAA5b,KACAia,EAAA2B,EAAA3B,MACA5Z,EAAA4Z,EAAA,gBACAjU,EAAAwW,EAAAvb,OACA0Z,EAAA,UAMAd,EAAA,EACAjY,EAAA,EACAf,EAAA,EACAmF,KACA,OAAAwW,EAAAxW,IACA,YACA,cACA,WACA,cACA,WACA,WACA2U,EAAA6B,EAAAxW,GACA,MACA,WAAApE,EAAA,EAAwC,MACxC,aAAAA,EAAA,EAA0C,MAC1C,WAAAiY,EAAA,EAAwC,MACxC,YAAAA,EAAA,EA+BA,GA5BA,QAAAc,GACAd,GAAA,EACAjY,GAAA,EACAf,GAAA,EACA2sB,EAAA,EACAgX,EAAAD,EAAA,IACA5kC,GACAI,KAAA,OACAM,OAAA4Z,EAAA5Z,UAGAmkC,EAAAhX,EAAA3T,EAAA,EACAla,GACAI,KAAAka,EAAA5Z,OACAA,OAAA,SAGAub,EAAAuR,EAAAuX,OACAH,GACA3oB,EAAAuR,EAAAuX,OAAAC,SAAAlC,EAAA7mB,EAAAuR,EAAAuX,OAAAC,WACA/oB,EAAAuR,EAAAuX,OAAAE,WAAAnC,EAAA7mB,EAAAuR,EAAAuX,OAAAE,eAEAhpB,EAAAuR,EAAAuX,OAAAG,WAAApC,EAAA7mB,EAAAuR,EAAAuX,OAAAG,aACAjpB,EAAAuR,EAAAuX,OAAAI,aAAArC,EAAA7mB,EAAAuR,EAAAuX,OAAAI,gBAGAlpB,EAAAuR,EAAAuX,UAEA,QAAA/pB,EAAA,CACA,IAAAoqB,EAAA,kBAAApqB,EACAqqB,EAAA,kBAAAP,EAAA9pB,EAAAd,EAAAjY,EAAA,OAAAga,EAAAvc,GACA8T,EAAAuH,GAAA/F,IAAAqa,eAAA+V,GAQAtC,EAAAsC,MAPAjgC,EAAAy+B,KAAAlyB,YAAA7N,IAAA,SACAlD,iBAAA,QACA8N,EAAAg0B,EAAAznB,GACAtb,GAAA0lC,KAEAtC,EAAAsC,GAAA,GAIA,IACAE,EADAC,EAAA/xB,EAAAuH,GAAA/F,IAAAqa,eAAAgW,GAEAE,GAkBAzC,EAAAuC,KACAC,EAAAC,EAAAC,qBAAA,YAlBAD,EAAA1hC,IAAA,WACAnE,GAAA2lC,EACAI,aAAAxjC,EACAyjC,YAAAxrB,EACAyrB,OAAA,OACAd,OACAe,KAAA3jC,EAAA,IAEAqjC,EAAAzhC,IAAA,QACAgiC,aAAA,IAAAT,EACAnkC,WAAA2jC,EAAA,cAAA1qB,EAAA,MAAAjY,EAAA,OAAAyT,GAAA,SAAAwE,EAAAhZ,EAAA,IAAAe,EAAAf,EAAA,IACAN,gBAAA,IAAAsZ,EAAAhZ,EAAAe,EAAAf,GAAA,IAAA6iB,QAAA,KAEAwhB,EAAA7zB,YAAA4zB,GACAngC,EAAAy+B,KAAAlyB,YAAA6zB,GACAzC,EAAAuC,GAAA,GAKAxhC,EAAAyhC,EAAAtlC,GACA,IAAA8lC,EAAAjY,GAAA,WAAA7S,GAAA,QAAAA,GACA4pB,GACA3V,EAAAhT,EAAAuR,EAAAuX,OAAAgB,QAAArlC,GAAA,EACAwuB,EAAA1b,EAAAykB,eAAA3d,EAAA9S,MAAAs+B,EAAAplC,IAEAuuB,EAAA6W,EAAAplC,EACAwuB,EAAA1b,EAAAykB,eAAA3d,EAAA9S,OAAAyU,EAAAuR,EAAAuX,OAAAiB,MAAAtlC,GAAA,KAEAV,MACA,UAAA8kC,GAAA,QAAAO,EAAA,KACAnW,GAAAD,KACAjvB,EAAAyO,EAAA+E,EAAA4kB,WAAA9d,EAAA9S,KAAAynB,EAAAC,IAEArrB,EAAAxD,EAAAL,GACAic,EAAAuR,EAAAuX,OAAAD,EAAA,QAAAM,EACAnpB,EAAAuR,EAAAuX,OAAAD,EAAA,UAAAO,EACAppB,EAAAuR,EAAAuX,OAAAD,EAAA,MAAAgB,EACA7pB,EAAAuR,EAAAuX,OAAAD,EAAA,QAAA9pB,EACAiB,EAAAuR,EAAAuX,OAAAD,EAAA,UAAAhoB,OAEA8nB,GACA3V,EAAAhT,EAAAuR,EAAAuX,OAAAgB,QAAArlC,GAAA,EACAwuB,EAAA1b,EAAAykB,eAAA3d,EAAA9S,MAAAynB,IAEAA,EAAA,EACAC,EAAA1b,EAAAykB,eAAA3d,EAAA9S,OAAAyU,EAAAuR,EAAAuX,OAAAiB,MAAAtlC,GAAA,IAEAub,EAAAuR,EAAAuX,OAAAD,EAAA,SAAAjhC,EAAAxD,GAAqDoO,EAAA+E,EAAA4kB,WAAA9d,EAAA9S,KAAAynB,EAAAC,YACrDjT,EAAAuR,EAAAuX,OAAAD,EAAA,eACA7oB,EAAAuR,EAAAuX,OAAAD,EAAA,iBACA7oB,EAAAuR,EAAAuX,OAAAD,EAAA,aACA7oB,EAAAuR,EAAAuX,OAAAD,EAAA,eACA7oB,EAAAuR,EAAAuX,OAAAD,EAAA,UAEA,IAAA9kC,KAAA8iC,EAAA,GAAAA,EAAAhuB,GAAA9U,KAAA8iC,EAAA9iC,GAAA,CACA,IAAAsf,EAAA9L,EAAAuH,GAAA/F,IAAAqa,eAAArvB,GACAsf,KAAAmT,WAAA/R,YAAApB,MAIA2mB,GACAC,KAAA,KACAC,KAAA,KACAC,MAAA,SACAC,OAAA,aACAC,MAAA,KACAC,MAAA,KACAC,MAAA,KACAC,OAAA,SACAC,OAAA,SACAC,QAAA,cAEAC,EAAA,SAAA3qB,EAAAa,EAAApM,GAEA,GADAoM,EAAAmpB,EAAArwB,EAAAkH,GAAA1G,eACA,CAKA,IAJA,IAAApV,EAAAib,EAAA3B,MAAA,qBACAusB,GAAyBzvB,MAAApW,EAAA8lC,OAAA9lC,EAAA6lC,KAAA,GAAqC5qB,EAAA3B,MAAA,mBAAA5J,EAAA,sBAC9Dq2B,KACA1gC,EAAAyW,EAAAxb,OACA+E,KACA0gC,EAAA1gC,GAAAyW,EAAAzW,GAAArF,GAAAqF,EAAA,QAAAwgC,EAEAhjC,EAAAoY,EAAA5b,MAAwBsY,mBAAAouB,EAAAjlC,KAAA,YAGxB+B,EAAAoY,EAAA5b,MAAsBsY,mBAAA,UAGtBquB,EAAA,SAAA/qB,EAAAvL,GACA,IAAArQ,EAAA4b,EAAA5b,KACAia,EAAA2B,EAAA3B,MACA2sB,EAAA5mC,EAAAC,MAAA4mC,WAEA,QAAAC,KADA9mC,EAAAC,MAAA4mC,WAAA,SACAx2B,EACA,GAAAA,EAAAoE,GAAAqyB,GAAA,CACA,IAAA3zB,EAAAoE,gBAAA9C,GAAAqyB,GACA,SAEA,IAAArqB,EAAApM,EAAAy2B,GAEA,OADA7sB,EAAA6sB,GAAArqB,EACAqqB,GACA,WACAlrB,EAAAlE,KAAA+E,GACA,MACA,YACA,IAAAxV,EAAAjH,EAAAmlC,qBAAA,SAGA,GAAAl+B,EAAAhG,SAAAgG,IAAA,IACAA,EAAA+T,WAAA+rB,UAAAtqB,MAC0B,CAC1BxV,EAAAzD,EAAA,SACA,IAAA0H,EAAAiI,EAAAuH,GAAA/F,IAAAqyB,eAAAvqB,GACAxV,EAAAoK,YAAAnG,GACAlL,EAAAqR,YAAApK,GAEA,MACA,WACA,aACA,IAAAggC,EAAAjnC,EAAAoyB,WACA,QAAA6U,EAAAhY,QAAAlZ,cAAA,CACA,IAAAmxB,EAAA1jC,EAAA,KACAyjC,EAAAp/B,aAAAq/B,EAAAlnC,GACAknC,EAAA71B,YAAArR,GACAinC,EAAAC,EAEA,UAAAJ,EACAG,EAAAvE,eAAAP,EAAA,gBAAA1lB,EAAA,MAAAA,GAEAwqB,EAAAvE,eAAAP,EAAA2E,EAAArqB,GAEA,MACA,aACAzc,EAAAC,MAAAsH,OAAAkV,EACA,MACA,gBACAb,EAAAhb,UAAA6b,GACA,MACA,kBACA6nB,EAAA1oB,EAAAa,GACA,MACA,gBACA6nB,EAAA1oB,EAAAa,EAAA,GACA,MACA,gBACA,IAAArc,EAAAmV,EAAAkH,GAAAtb,MAAAkT,GACA,MAAAjU,EAAAa,OAAA,CACA2a,EAAAurB,MAAAvrB,EAAAurB,KAAA/U,sBAAA/R,YAAAzE,EAAAurB,KAAA/U,YACA,IAAAnkB,EAAAzK,EAAA,YACA4jC,EAAA5jC,EAAA,QACAyK,EAAA5O,GAAA8T,EAAA2J,aACAtZ,EAAA4jC,GACA3oC,EAAA2B,EAAA,GACA1B,EAAA0B,EAAA,GACAO,MAAAP,EAAA,GACAK,OAAAL,EAAA,KAEA6N,EAAAoD,YAAA+1B,GACAxrB,EAAA6Q,MAAA8W,KAAAlyB,YAAApD,GACAzK,EAAAxD,GAAsCqnC,YAAA,QAAAp5B,EAAA5O,GAAA,MACtCuc,EAAAurB,KAAAC,EAEA,IAAA3qB,EAAA,CACA,IAAAtV,EAAAnH,EAAAsnC,aAAA,aACA,GAAAngC,EAAA,CACA,IAAAggC,EAAAh0B,EAAAuH,GAAA/F,IAAAqa,eAAA7nB,EAAA3H,QAAA,iBAAA6V,IACA8xB,KAAA/U,WAAA/R,YAAA8mB,GACA3jC,EAAAxD,GAA0CqnC,YAAAhyB,WAC1CuG,EAAAurB,MAGA,MACA,WACA,QAAAvrB,EAAAjB,OACAnX,EAAAxD,GAAsCoO,EAAAqO,EAAAxC,EAAA9S,KAAAgM,EAAAwV,gBAAAlM,GAAA,SACtCb,EAAAuR,EAAAyJ,MAAA,EACAhb,EAAAuR,EAAAuX,SACA,gBAAA9oB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA6C,aACA,cAAA3rB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA8C,UAAA,KAGA,MACA,YAGA,GAFAxnC,EAAA2iC,aAAAmE,EAAArqB,GACAb,EAAAuR,EAAAyJ,MAAA,GACA3c,EAAA8oB,GAIA,MAHA+D,EAAA,IACArqB,EAAAxC,EAAAxb,EAIA,QACAwb,EAAA8oB,KACAtmB,GAAAxC,EAAAxb,GAAAwb,EAAAtZ,OAAA,IAEA,SACA,SAAAmmC,GAAA,QAAAlrB,EAAAjB,KACA,MAEA,SACA3a,EAAA2iC,aAAAmE,EAAArqB,GACAb,EAAAwoB,SAAAD,EAAAvoB,GACAA,EAAAuR,EAAAyJ,MAAA,EACA,MACA,aAGA,GAFA52B,EAAA2iC,aAAAmE,EAAArqB,GACAb,EAAAuR,EAAAyJ,MAAA,GACA3c,EAAA+oB,GAIA,MAHA8D,EAAA,IACArqB,EAAAxC,EAAAvb,EAIA,QACAub,EAAA+oB,KACAvmB,GAAAxC,EAAAvb,GAAAub,EAAAxZ,QAAA,IAEA,SACA,SAAAqmC,GAAA,QAAAlrB,EAAAjB,KACA,MAEA,SACA3a,EAAA2iC,aAAAmE,EAAArqB,GACAb,EAAAwoB,SAAAD,EAAAvoB,GACAA,EAAAuR,EAAAyJ,MAAA,EACA,MACA,QACA,QAAAhb,EAAAjB,KACAnX,EAAAxD,GAAsCmY,GAAAsE,EAAArE,GAAAqE,IAEtCzc,EAAA2iC,aAAAmE,EAAArqB,GAEAb,EAAAuR,EAAAyJ,MAAA,EACA,MACA,UACA,SAAAhb,EAAAjB,MACA3a,EAAA0iC,eAAAP,EAAA,OAAA1lB,GAEA,MACA,mBACA,GAAAb,EAAAuR,EAAAQ,IAAA,GAAA/R,EAAAuR,EAAAS,KACAnR,GAAAxG,EAAAnU,EAAA8Z,EAAAuR,EAAAQ,IAAA7rB,EAAA8Z,EAAAuR,EAAAS,MAAA,GAEA5tB,EAAA2iC,aAAAmE,EAAArqB,GACAxC,EAAA,qBACAssB,EAAA3qB,EAAA3B,EAAA,oBAAA5J,GAEAuL,EAAAuR,EAAAuX,SACA,gBAAA9oB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA6C,aACA,cAAA3rB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA8C,UAAA,IAEA,MACA,uBACAjB,EAAA3qB,EAAAa,EAAApM,GACA,MACA,WACA,IAAAo3B,EAAAlyB,EAAAkH,GAAA0E,MAAAhO,EAAAsD,QACA,GAAAgxB,EAAA,CACAx5B,EAAAzK,EAAA,WACA,IAAAkkC,EAAAlkC,EAAA,SACAyK,EAAA5O,GAAA8T,EAAA2J,aACAtZ,EAAAyK,GAAoCxP,EAAA,EAAAC,EAAA,EAAAipC,aAAA,iBAAAlnC,OAAA,EAAAE,MAAA,IACpC6C,EAAAkkC,GAAoCjpC,EAAA,EAAAC,EAAA,EAAA8mC,aAAAiC,EAAA,KACpCx5B,EAAAoD,YAAAq2B,GAEA,SAAAz5B,GACAkF,EAAA8M,SAAAwnB,EAAA,cACA,IAAA5tB,EAAAtc,KAAA4xB,YACAvtB,EAAArE,KAAA8xB,aACA7rB,EAAAyK,GAA4CtN,MAAAkZ,EAAApZ,OAAAmB,IAC5C4B,EAAAkkC,GAA4C/mC,MAAAkZ,EAAApZ,OAAAmB,MAL5C,CAO8BqM,GAC9B2N,EAAA6Q,MAAA8W,KAAAlyB,YAAApD,GACAzK,EAAAxD,GAAsCD,KAAA,QAAAkO,EAAA5O,GAAA,MACtCuc,EAAAwoB,QAAAn2B,EACA2N,EAAAwoB,SAAAD,EAAAvoB,GACA,MAEA,IAAA2C,EAAApL,EAAAqL,OAAA/B,GACA,GAAA8B,EAAAsC,OAS0B,cAAAjF,EAAAjB,MAAA,WAAAiB,EAAAjB,MAAA,KAAApF,EAAAkH,GAAAsE,WAAA+hB,EAAAlnB,EAAAa,GAAA,CAC1B,eAAAxC,GAAA,iBAAAA,EAAA,CACA,IAAAhC,EAAA9E,EAAAuH,GAAA/F,IAAAqa,eAAAhvB,EAAAsnC,aAAA,QAAA9nC,QAAA,eAAA6V,IACA,GAAA4C,EAAA,CACA,IAAA2vB,EAAA3vB,EAAAktB,qBAAA,QACA3hC,EAAAokC,IAAA3mC,OAAA,IAAiEyiC,gBAAA,YAAAzpB,IAAA3S,QAAA,qBAAA2S,IAAA,sBAGjEA,EAAAhC,SAAAwE,EACAxC,EAAAla,KAAA,OACA,mBAlBAsQ,EAAA4H,gBACAgC,EAAAhC,UACA9E,EAAAI,GAAA0G,EAAA3S,QAAA,cACA6L,EAAAI,GAAAlD,EAAA/I,QAAA,cACA9D,EAAAxD,GAA0CsH,QAAA2S,EAAA3S,WAC1C6L,EAAAI,GAAA0G,EAAA,8BACA9G,EAAAI,GAAAlD,EAAA,8BACA7M,EAAAxD,GAA0CkH,eAAA+S,EAAA,kBAa1CsE,EAAA9J,GAAA,YAAAjR,EAAAxD,GAAyDkH,eAAAqX,EAAAjX,QAAA,EAAAiX,EAAAjX,QAAA,IAAAiX,EAAAjX,UACzD,aACAiX,EAAApL,EAAAqL,OAAA/B,GACAzc,EAAA2iC,aAAAmE,EAAAvoB,EAAAF,KACA,UAAAyoB,GAAAvoB,EAAA9J,GAAA,YAAAjR,EAAAxD,GAA4EyY,iBAAA8F,EAAAjX,QAAA,EAAAiX,EAAAjX,QAAA,IAAAiX,EAAAjX,UAC5E,UAAAw/B,GAAAlrB,EAAAuR,EAAAuX,SACA,gBAAA9oB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA6C,aACA,cAAA3rB,EAAAuR,EAAAuX,QAAAJ,EAAA1oB,IAAAuR,EAAAuX,OAAA8C,UAAA,IAEA,MACA,gBACA,UAAA5rB,EAAAjB,MAAA,WAAAiB,EAAAjB,MAAA,KAAApF,EAAAkH,GAAAsE,WAAA+hB,EAAAlnB,EAAAa,GACA,MACA,cACAxC,EAAAhC,WAAAgC,EAAAxF,GAAA,mBACAjR,EAAAxD,GAAsCyY,iBAAAgE,EAAA,EAAAA,EAAA,IAAAA,IAGtC,mBACA,GAAAxC,EAAAhC,SAAA,EACAA,EAAA9E,EAAAuH,GAAA/F,IAAAqa,eAAAhvB,EAAAsnC,aAAA,QAAA9nC,QAAA,eAAA6V,OAEAuyB,EAAA3vB,EAAAktB,qBAAA,QACA3hC,EAAAokC,IAAA3mC,OAAA,IAA6DyiC,eAAAjnB,KAE7D,MAEA,QACA,aAAAqqB,IAAArqB,EAAAvF,EAAAuF,EAAA,UACA,IAAAorB,EAAAf,EAAAtnC,QAAA,kBAAAqa,GACA,OAAAA,EAAAiH,UAAA,GAAAzJ,gBAEArX,EAAAC,MAAA4nC,GAAAprB,EACAb,EAAAuR,EAAAyJ,MAAA,EACA52B,EAAA2iC,aAAAmE,EAAArqB,IAMAqrB,EAAAlsB,EAAAvL,GACArQ,EAAAC,MAAA4mC,WAAAD,GAGAkB,EAAA,SAAA75B,EAAAoC,GACA,WAAApC,EAAA0M,OAAAtK,EAAAoE,GAAA,SAAApE,EAAAoE,GAAA,SAAApE,EAAAoE,GAAA,cAAApE,EAAAoE,GAAA,MAAApE,EAAAoE,GAAA,OAGA,IAAAgF,EAAAxL,EAAAgM,MACAja,EAAAiO,EAAAjO,KACA+nC,EAAA/nC,EAAAgb,WAAA9D,EAAA/D,EAAAuH,GAAA/F,IAAAoJ,YAAAC,iBAAAhe,EAAAgb,WAAA3F,GAAA4I,iBAAA,oBAEA,GAAA5N,EAAAoE,GAAA,SAEA,IADAgF,EAAAva,KAAAmR,EAAAnR,KACAc,EAAAgb,YACAhb,EAAAqgB,YAAArgB,EAAAgb,YAKA,IAHA,IAEAgtB,EAFAC,EAAA1yB,EAAAlF,EAAAnR,MAAAiC,MAAA,MACA+mC,KAEAliC,EAAA,EAAAsU,EAAA2tB,EAAAhnC,OAA+C+E,EAAAsU,EAAQtU,IACvDgiC,EAAAxkC,EAAA,SACAwC,GAAAxC,EAAAwkC,GAAgCva,GAnBhC,IAmBgCsa,EAAAtpC,EAAAgb,EAAAhb,IAChCupC,EAAA32B,YAAA8B,EAAAuH,GAAA/F,IAAAqyB,eAAAiB,EAAAjiC,KACAhG,EAAAqR,YAAA22B,GACAE,EAAAliC,GAAAgiC,OAIA,IAAAhiC,EAAA,EAAAsU,GADA4tB,EAAAloC,EAAAmlC,qBAAA,UACAlkC,OAA4C+E,EAAAsU,EAAQtU,MACpDxC,EAAA0kC,EAAAliC,IAA+BynB,GA3B/B,IA2B+Bsa,EAAAtpC,EAAAgb,EAAAhb,IAE/B+E,EAAA0kC,EAAA,IAA+Bza,GAAA,IAG/BjqB,EAAAxD,GAAkBvB,EAAAgb,EAAAhb,EAAAC,EAAA+a,EAAA/a,IAClBuP,EAAAkf,EAAAyJ,MAAA,EACA,IAAAxO,EAAAna,EAAAkM,WACAguB,EAAA1uB,EAAA/a,GAAA0pB,EAAA1pB,EAAA0pB,EAAA3nB,OAAA,GACA0nC,GAAAh1B,EAAAI,GAAA40B,EAAA,WAAA3kC,EAAA0kC,EAAA,IAAqDza,GAAA0a,MAErDC,EAAA,SAAApoC,GACA,OAAAA,EAAAoyB,YAAA,MAAApyB,EAAAoyB,WAAAnD,QAAAlZ,cACA/V,EAAAoyB,WAEApyB,GAGAqoC,EAAA,SAAAroC,EAAAub,GAiBAhe,KAAA,GAAAA,KAAAyC,OAaAA,EAAA80B,SAAA,EAQAv3B,KAAA8B,IAQA,QAAAwC,KAAAkb,SAAAlb,KAAAuU,IAAA,UAAAG,SAAA,KAAAxK,OAAA,GAPA/L,EAAAi2B,UAAA14B,KAAA8B,GAUA9B,KAAA8c,OAAAlH,EAAAkH,SACA9c,KAAAk5B,SAAA,KAaAl5B,KAAAkvB,MAAAlR,EACAhe,KAAA0c,MAAA1c,KAAA0c,UACA1c,KAAA4vB,GACAvsB,aACA+sB,GAAA,EACAC,GAAA,EACAtR,IAAA,EACAkR,GAAA,EACAC,GAAA,EACAmJ,MAAA,IAEArb,EAAAoR,SAAApR,EAAAoR,OAAApvB,MAOAA,KAAAmvB,KAAAnR,EAAA9W,IACA8W,EAAA9W,MAAA8W,EAAA9W,IAAAmoB,KAAArvB,MACAge,EAAA9W,IAAAlH,KAOAA,KAAAqvB,KAAA,MAEAiG,EAAA1f,EAAAlF,GAEAo6B,EAAA9pC,UAAAs0B,EACAA,EAAAxX,YAAAgtB,EAEAl1B,EAAAM,QAAAtM,KAAA,SAAAqa,EAAAyhB,GACA,IAAAh1B,EAAAzK,EAAA,QACAy/B,EAAAvO,QAAAuO,EAAAvO,OAAArjB,YAAApD,GACA,IAAAnJ,EAAA,IAAAujC,EAAAp6B,EAAAg1B,GAOA,OANAn+B,EAAA6V,KAAA,OACAgsB,EAAA7hC,GACA/E,KAAA,OACAM,OAAA,OACA8G,KAAAqa,IAEA1c,GAgBA+tB,EAAAxJ,OAAA,SAAA/M,EAAA1E,EAAAC,GACA,GAAAta,KAAAo5B,QACA,OAAAp5B,KASA,IAPA+e,EAAA/G,EAAA+G,GAAAnb,MAAAkT,IACApT,OAAA,IACA2W,EAAAZ,EAAAsF,EAAA,IACAzE,EAAAb,EAAAsF,EAAA,KAEAA,EAAAtF,EAAAsF,EAAA,IACA,MAAAzE,IAAAD,EAAAC,GACA,MAAAD,GAAA,MAAAC,EAAA,CACA,IAAAqC,EAAA3c,KAAAmD,QAAA,GACAkX,EAAAsC,EAAAzb,EAAAyb,EAAAvZ,MAAA,EACAkX,EAAAqC,EAAAxb,EAAAwb,EAAAzZ,OAAA,EAGA,OADAlD,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAA8a,EAAA1E,EAAAC,MACAta,MAiBAs1B,EAAAzE,MAAA,SAAAT,EAAAC,EAAAhW,EAAAC,GACA,GAAAta,KAAAo5B,QACA,OAAAp5B,KAWA,IATAowB,EAAApY,EAAAoY,GAAAxsB,MAAAkT,IACApT,OAAA,IACA2sB,EAAA5W,EAAA2W,EAAA,IACA/V,EAAAZ,EAAA2W,EAAA,IACA9V,EAAAb,EAAA2W,EAAA,KAEAA,EAAA3W,EAAA2W,EAAA,IACA,MAAAC,MAAAD,GACA,MAAA9V,IAAAD,EAAAC,GACA,MAAAD,GAAA,MAAAC,EACA,IAAAqC,EAAA3c,KAAAmD,QAAA,GAKA,OAHAkX,EAAA,MAAAA,EAAAsC,EAAAzb,EAAAyb,EAAAvZ,MAAA,EAAAiX,EACAC,EAAA,MAAAA,EAAAqC,EAAAxb,EAAAwb,EAAAzZ,OAAA,EAAAoX,EACAta,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAAmsB,EAAAC,EAAAhW,EAAAC,MACAta,MAaAs1B,EAAA1E,UAAA,SAAAX,EAAAC,GACA,OAAAlwB,KAAAo5B,QACAp5B,OAEAiwB,EAAAjY,EAAAiY,GAAArsB,MAAAkT,IACApT,OAAA,IACAwsB,EAAAzW,EAAAwW,EAAA,KAEAA,EAAAxW,EAAAwW,EAAA,OACAC,MAAA,EACAlwB,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAAgsB,EAAAC,MACAlwB,OAuCAs1B,EAAAjyB,UAAA,SAAA2sB,GACA,IAAAJ,EAAA5vB,KAAA4vB,EACA,SAAAI,EACA,OAAAJ,EAAAvsB,UAQA,GANAuS,EAAAma,kBAAA/vB,KAAAgwB,GAEAhwB,KAAA4pC,MAAA3jC,EAAAjG,KAAA4pC,MAAoCvmC,UAAArD,KAAA8c,OAAA6T,WACpC3wB,KAAA6mC,SAAAD,EAAA5mC,MACAA,KAAAyC,MAAAwD,EAAAjG,KAAAyC,MAAoCY,UAAArD,KAAA8c,SAEpC,GAAA8S,EAAAQ,IAAA,GAAAR,EAAAS,GAAA,CACA,IAAA0a,EAAA/qC,KAAA0c,MAAAxF,GAAA,gBAAAlX,KAAA0c,MAAA,kBACA1c,KAAAoC,MAAwBY,eAAA+nC,IAGxB,OAAA/qC,MASAs1B,EAAApvB,KAAA,WAEA,OADAlG,KAAAo5B,UAAAp5B,KAAAyC,KAAAC,MAAA6d,QAAA,QACAvgB,MASAs1B,EAAA0V,KAAA,WAEA,OADAhrC,KAAAo5B,UAAAp5B,KAAAyC,KAAAC,MAAA6d,QAAA,IACAvgB,MAQAs1B,EAAA/qB,OAAA,WACA,IAAA9H,EAAAooC,EAAA7qC,KAAAyC,MACA,IAAAzC,KAAAo5B,SAAA32B,EAAAoyB,WAAA,CAGA,IAAA3F,EAAAlvB,KAAAkvB,MAaA,QAAAzmB,KAZAymB,EAAA0H,SAAA1H,EAAA0H,QAAAoJ,QAAAhgC,MACA8V,EAAA0f,OAAA,eAAAx1B,KAAA8B,IACA9B,KAAA0a,UACAwU,EAAA8W,KAAAljB,YAAA9iB,KAAA0a,UAEA9E,EAAAqZ,MAAAjvB,KAAAkvB,GAEAzsB,EAAAoyB,WAAA/R,YAAArgB,GAGAzC,KAAA01B,aAEA11B,KACAA,KAAAyI,GAAA,mBAAAzI,KAAAyI,GAAAmN,EAAAwU,gBAAA3hB,GAAA,KAEAzI,KAAAo5B,SAAA,IAEA9D,EAAA1Y,SAAA,WACA,WAAA5c,KAAAyC,KAAAC,MAAA6d,QAAA,CACAvgB,KAAAgrC,OACA,IAAA9kC,GAAA,EAEA,IACA+kC,EADAC,GAAA,EAEAlrC,KAAAkvB,MAAAiI,OAAAgU,cACAF,EAAAjrC,KAAAkvB,MAAAiI,OAAAgU,cAAAzoC,MAEA1C,KAAAkvB,MAAAiI,OAAAtC,aACAoW,EAAAjrC,KAAAkvB,MAAAiI,OAAAtC,WAAAnyB,OAGAuoC,GAAA,QAAAA,EAAA1qB,UACA2qB,GAAA,EACAD,EAAA1qB,QAAA,IAEA,IAAA5D,KACA,IACAA,EAAA3c,KAAAyC,KAAAU,UACU,MAAAyJ,GAEV+P,GACAzb,EAAAlB,KAAAyC,KAAAo1B,WACA12B,EAAAnB,KAAAyC,KAAAm1B,UACAx0B,MAAApD,KAAAyC,KAAA2oC,YACAloC,OAAAlD,KAAAyC,KAAA4oC,cAEU,QACV1uB,QACAuuB,IACAD,EAAA1qB,QAAA,QAIA,OADAra,GAAAlG,KAAAkG,OACAyW,GAmFA2Y,EAAAlzB,KAAA,SAAAR,EAAAsd,GACA,GAAAlf,KAAAo5B,QACA,OAAAp5B,KAEA,SAAA4B,EAAA,CACA,IAAAic,KACA,QAAA3B,KAAAlc,KAAA0c,MAAA1c,KAAA0c,MAAAxF,GAAAgF,KACA2B,EAAA3B,GAAAlc,KAAA0c,MAAAR,IAIA,OAFA2B,EAAAnD,UAAA,QAAAmD,EAAArb,OAAAqb,EAAArb,KAAAqb,EAAAnD,kBAAAmD,EAAAnD,SACAmD,EAAAxa,UAAArD,KAAA4vB,EAAAvsB,UACAwa,EAEA,SAAAqB,GAAAtJ,EAAAI,GAAApU,EAAA,WACA,WAAAA,GAAA,QAAA5B,KAAA0c,MAAAla,MAAAxC,KAAA0c,MAAAhC,SACA,OAAA1a,KAAA0c,MAAAhC,SAEA,gBAAA9Y,EACA,OAAA5B,KAAA4vB,EAAAvsB,UAIA,IAFA,IAAA2gC,EAAApiC,EAAAgC,MAAAkT,GACAqb,KACA1pB,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAA+C+E,EAAAsU,EAAQtU,KACvD7G,EAAAoiC,EAAAv7B,MACAzI,KAAA0c,MACAyV,EAAAvwB,GAAA5B,KAAA0c,MAAA9a,GACkBgU,EAAAI,GAAAhW,KAAAkvB,MAAAvX,iBAAA/V,GAAA,YAClBuwB,EAAAvwB,GAAA5B,KAAAkvB,MAAAvX,iBAAA/V,GAAA0pC,IAEAnZ,EAAAvwB,GAAAgU,EAAAoE,gBAAApY,GAGA,OAAAmb,EAAA,EAAAoV,IAAA6R,EAAA,IAEA,SAAA9kB,GAAAtJ,EAAAI,GAAApU,EAAA,UAEA,IADAuwB,KACA1pB,EAAA,EAAAsU,EAAAnb,EAAA8B,OAA0C+E,EAAAsU,EAAQtU,IAClD0pB,EAAAvwB,EAAA6G,IAAAzI,KAAAoC,KAAAR,EAAA6G,IAEA,OAAA0pB,EAEA,SAAAjT,EAAA,CACA,IAAApM,KACAA,EAAAlR,GAAAsd,OACU,MAAAtd,GAAAgU,EAAAI,GAAApU,EAAA,YACVkR,EAAAlR,GAEA,QAAAmc,KAAAjL,EACAgD,EAAA,gBAAAiI,EAAA,IAAA/d,KAAA8B,GAAA9B,KAAA8S,EAAAiL,IAEA,IAAAA,KAAA/d,KAAAkvB,MAAAvX,iBAAA,GAAA3X,KAAAkvB,MAAAvX,iBAAAT,GAAA6G,IAAAjL,EAAAoE,GAAA6G,IAAAnI,EAAAI,GAAAhW,KAAAkvB,MAAAvX,iBAAAoG,GAAA,aACA,IAAAiR,EAAAhvB,KAAAkvB,MAAAvX,iBAAAoG,GAAAlI,MAAA7V,QAAAiE,OAAA6O,EAAAiL,KAEA,QAAAwtB,KADAvrC,KAAA0c,MAAAqB,GAAAjL,EAAAiL,GACAiR,IAAA9X,GAAAq0B,KACAz4B,EAAAy4B,GAAAvc,EAAAuc,IAIA,OADAnC,EAAAppC,KAAA8S,GACA9S,MASAs1B,EAAApsB,QAAA,WACA,GAAAlJ,KAAAo5B,QACA,OAAAp5B,KAEA,IAAAyC,EAAAooC,EAAA7qC,KAAAyC,MACAA,EAAAoyB,WAAA/gB,YAAArR,GACA,IAAAub,EAAAhe,KAAAkvB,MAEA,OADAlR,EAAA9W,KAAAlH,MAAA4V,EAAA2Z,SAAAvvB,KAAAge,GACAhe,MASAs1B,EAAAkW,OAAA,WACA,GAAAxrC,KAAAo5B,QACA,OAAAp5B,KAEA,IAAAyC,EAAAooC,EAAA7qC,KAAAyC,MACAoyB,EAAApyB,EAAAoyB,WACAA,EAAAvqB,aAAA7H,EAAAoyB,EAAApX,YACA7H,EAAA4Z,QAAAxvB,UAAAkvB,OACAlvB,KAAAkvB,MACA,OAAAlvB,MASAs1B,EAAA4K,YAAA,SAAAr7B,GACA,GAAA7E,KAAAo5B,UAAAv0B,EACA,OAAA7E,KAGA,IAAAyC,EAAAooC,EAAA7qC,KAAAyC,MACAgpC,EAAAZ,EAAAhmC,EAAApC,MAAAoC,IAAAnB,OAAA,GAAAjB,MAOA,OANAgpC,EAAA7W,YACA6W,EAAA5W,WAAAvqB,aAAA7H,EAAAgpC,EAAA7W,aAEA6W,EAAA5W,WAAA/gB,YAAArR,GAEAmT,EAAA6Z,aAAAzvB,KAAA6E,EAAA7E,KAAAkvB,OACAlvB,MASAs1B,EAAAhrB,aAAA,SAAAzF,GACA,GAAA7E,KAAAo5B,UAAAv0B,EACA,OAAA7E,KAGA,IAAAyC,EAAAooC,EAAA7qC,KAAAyC,MACAipC,EAAAb,EAAAhmC,EAAApC,MAAAoC,EAAA,GAAApC,MAGA,OAFAipC,EAAA7W,WAAAvqB,aAAA7H,EAAAipC,GACA91B,EAAA+Z,cAAA3vB,KAAA6E,EAAA7E,KAAAkvB,OACAlvB,MAEAs1B,EAAAnb,KAAA,SAAAynB,GAEA,IAAAt+B,EAAAtD,KACA,OAAA4hC,EAAA,CACA,IAAA+J,EAAA1lC,EAAA,UACAkU,EAAAlU,EAAA,kBACA3C,EAAAoZ,MAAAvC,KAAAynB,EACA+J,EAAA7pC,GAAA8T,EAAA2J,aACAtZ,EAAAkU,GAAsByxB,cAAAhK,GAAA,MACtB+J,EAAA73B,YAAAqG,GACA7W,EAAA4rB,MAAA8W,KAAAlyB,YAAA63B,GACAroC,EAAAuoC,MAAAF,EACA1lC,EAAA3C,EAAAb,MAAwBqpC,OAAA,QAAAH,EAAA7pC,GAAA,WAExBwB,EAAAuoC,QACAvoC,EAAAuoC,MAAAhX,WAAA/R,YAAAxf,EAAAuoC,cACAvoC,EAAAuoC,aACAvoC,EAAAoZ,MAAAvC,MAEA7W,EAAAb,KAAAspC,gBAAA,UAEA,OAAAzoC,GAEAsS,EAAAM,QAAApM,OAAA,SAAAkU,EAAA9c,EAAAC,EAAA8F,GACA,IAAAyJ,EAAAzK,EAAA,UACA+X,EAAAmZ,QAAAnZ,EAAAmZ,OAAArjB,YAAApD,GACA,IAAAmN,EAAA,IAAAitB,EAAAp6B,EAAAsN,GAIA,OAHAH,EAAAnB,OAAsBrC,GAAAnZ,EAAAoZ,GAAAnZ,EAAA8F,IAAAzE,KAAA,OAAAM,OAAA,QACtB+a,EAAAT,KAAA,SACAnX,EAAAyK,EAAAmN,EAAAnB,OACAmB,GAEAjI,EAAAM,QAAArT,KAAA,SAAAmb,EAAA9c,EAAAC,EAAAmb,EAAAjY,EAAA4C,GACA,IAAAyJ,EAAAzK,EAAA,QACA+X,EAAAmZ,QAAAnZ,EAAAmZ,OAAArjB,YAAApD,GACA,IAAAmN,EAAA,IAAAitB,EAAAp6B,EAAAsN,GAIA,OAHAH,EAAAnB,OAAsBxb,IAAAC,IAAAiC,MAAAkZ,EAAApZ,OAAAmB,EAAAuW,GAAA3T,GAAA,EAAA4T,GAAA5T,GAAA,EAAAzE,KAAA,OAAAM,OAAA,QACtB+a,EAAAT,KAAA,OACAnX,EAAAyK,EAAAmN,EAAAnB,OACAmB,GAEAjI,EAAAM,QAAAc,QAAA,SAAAgH,EAAA9c,EAAAC,EAAAyZ,EAAAC,GACA,IAAAnK,EAAAzK,EAAA,WACA+X,EAAAmZ,QAAAnZ,EAAAmZ,OAAArjB,YAAApD,GACA,IAAAmN,EAAA,IAAAitB,EAAAp6B,EAAAsN,GAIA,OAHAH,EAAAnB,OAAsBrC,GAAAnZ,EAAAoZ,GAAAnZ,EAAAyZ,KAAAC,KAAArY,KAAA,OAAAM,OAAA,QACtB+a,EAAAT,KAAA,UACAnX,EAAAyK,EAAAmN,EAAAnB,OACAmB,GAEAjI,EAAAM,QAAA5U,MAAA,SAAA0c,EAAAlD,EAAA5Z,EAAAC,EAAAmb,EAAAjY,GACA,IAAAqM,EAAAzK,EAAA,SACAA,EAAAyK,GAAgBxP,IAAAC,IAAAiC,MAAAkZ,EAAApZ,OAAAmB,EAAA2nC,oBAAA,SAChBt7B,EAAAy0B,eAAAP,EAAA,OAAA9pB,GACAkD,EAAAmZ,QAAAnZ,EAAAmZ,OAAArjB,YAAApD,GACA,IAAAmN,EAAA,IAAAitB,EAAAp6B,EAAAsN,GAGA,OAFAH,EAAAnB,OAAsBxb,IAAAC,IAAAiC,MAAAkZ,EAAApZ,OAAAmB,EAAAyW,OACtB+C,EAAAT,KAAA,QACAS,GAEAjI,EAAAM,QAAAvU,KAAA,SAAAqc,EAAA9c,EAAAC,EAAAQ,GACA,IAAA+O,EAAAzK,EAAA,QACA+X,EAAAmZ,QAAAnZ,EAAAmZ,OAAArjB,YAAApD,GACA,IAAAmN,EAAA,IAAAitB,EAAAp6B,EAAAsN,GAaA,OAZAH,EAAAnB,OACAxb,IACAC,IACAkB,cAAA,SACAV,OACA4Y,cAAA3E,EAAAoE,gBAAA,eACAQ,YAAA5E,EAAAoE,gBAAA,aACAlX,OAAA,OACAN,KAAA,QAEAqb,EAAAT,KAAA,OACAgsB,EAAAvrB,IAAAnB,OACAmB,GAEAjI,EAAAM,QAAAkhB,QAAA,SAAAh0B,EAAAF,GAQA,OAPAlD,KAAAoD,SAAApD,KAAAoD,MACApD,KAAAkD,UAAAlD,KAAAkD,OACAlD,KAAAm3B,OAAAiO,aAAA,QAAAplC,KAAAoD,OACApD,KAAAm3B,OAAAiO,aAAA,SAAAplC,KAAAkD,QACAlD,KAAAisC,UACAjsC,KAAAq3B,WAAAxhB,MAAA7V,UAAAisC,UAEAjsC,MAEA4V,EAAAM,QAAAC,OAAA,WACA,IAAA+1B,EAAAt2B,EAAA2b,cAAA1b,MAAA,EAAAY,WACA+a,EAAA0a,KAAA1a,UACAtwB,EAAAgrC,EAAAhrC,EACAC,EAAA+qC,EAAA/qC,EACAiC,EAAA8oC,EAAA9oC,MACAF,EAAAgpC,EAAAhpC,OACA,IAAAsuB,EACA,UAAA2a,MAAA,4BAEA,IAEAC,EAFAC,EAAApmC,EAAA,OACAwF,EAAA,mBAiCA,OA/BAvK,KAAA,EACAC,KAAA,EACAiC,KAAA,IAEA6C,EAAAomC,GACAnpC,OAFAA,KAAA,IAGA0T,QAAA,IACAxT,QACAkpC,MAAA,6BACAC,cAAA,iCAEA,GAAA/a,GACA6a,EAAA3pC,MAAAkgB,QAAAnX,EAAA,0BAA2DvK,EAAA,UAAiBC,EAAA,KAC5EyU,EAAAuH,GAAA/F,IAAArC,KAAAjB,YAAAu4B,GACAD,EAAA,IAEAC,EAAA3pC,MAAAkgB,QAAAnX,EAAA,oBACA+lB,EAAA/T,WACA+T,EAAAlnB,aAAA+hC,EAAA7a,EAAA/T,YAEA+T,EAAA1d,YAAAu4B,KAGA7a,EAAA,IAAA5b,EAAAsI,QACA9a,QACAouB,EAAAtuB,SACAsuB,EAAA2F,OAAAkV,EACA7a,EAAAkO,QACAlO,EAAAgb,MAAAhb,EAAAib,KAAA,EACAL,IAAA5a,EAAAkb,UAAA,cACAlb,EAAAkb,YACAlb,GAEA5b,EAAAM,QAAAmhB,WAAA,SAAAn2B,EAAAC,EAAAmb,EAAAjY,EAAAizB,GACAxhB,EAAA,qBAAA9V,UAAAisC,UAAA/qC,EAAAC,EAAAmb,EAAAjY,EAAAizB,IACA,IAIAqV,EACA5B,EALA6B,EAAA5sC,KAAAk3B,UACA0K,EAAAlpB,EAAA4D,EAAAswB,EAAAxpC,MAAAiB,EAAAuoC,EAAA1pC,QACAgE,EAAAlH,KAAAkH,IACA2lC,EAAAvV,EAAA,2BAiBA,IAdA,MAAAp2B,GACAlB,KAAA8sC,UACAlL,EAAA,UAEA5hC,KAAA8sC,QACAH,EAAA,OAAA3sC,KAAAoD,MAAA2U,EAAA/X,KAAAkD,SAEAlD,KAAA8sC,QAAAlL,EACA+K,EAAAzrC,EAAA6W,EAAA5W,EAAA4W,EAAAuE,EAAAvE,EAAA1T,GAEA4B,EAAAjG,KAAAm3B,QACA4V,QAAAJ,EACAX,oBAAAa,IAEAjL,GAAA16B,GACA6jC,EAAA,iBAAA7jC,EAAAwV,MAAAxV,EAAAwV,MAAA,kBACAxV,EAAA9E,MAAuBY,eAAA+nC,IACvB7jC,EAAA0oB,EAAAyJ,MAAA,EACAnyB,EAAA0oB,EAAAkB,OAAA,EACA5pB,IAAAioB,KAGA,OADAnvB,KAAAisC,UAAA/qC,EAAAC,EAAAmb,EAAAjY,IAAAizB,GACAt3B,MAYA4V,EAAA5U,UAAA0rC,UAAA,WACA,IAEA5Y,EAFAuY,EAAArsC,KAAAm3B,OACAtzB,EAAAwoC,EAAA3pC,MAEA,IACAoxB,EAAAuY,EAAAW,gBAAAX,EAAAY,kBACU,MAAArgC,GACVknB,EAAAuY,EAAAY,kBAEA,IAAA9U,GAAArE,EAAAlnB,EAAA,EACA1F,GAAA4sB,EAAApd,EAAA,GACAyhB,GAAAjxB,KACAixB,IACAn4B,KAAAwsC,OAAAxsC,KAAAwsC,MAAArU,GAAA,EACAt0B,EAAAs0B,KAAAn4B,KAAAwsC,MAAA,MAEAtlC,IACAlH,KAAAysC,MAAAzsC,KAAAysC,KAAAvlC,GAAA,EACArD,EAAAqD,IAAAlH,KAAAysC,KAAA,QAUA72B,EAAA5U,UAAA0+B,MAAA,WACA9pB,EAAAE,IAAA,gBAAA9V,MAEA,IADA,IAAAyG,EAAAzG,KAAAm3B,OACA1wB,EAAAgX,YACAhX,EAAAqc,YAAArc,EAAAgX,YAEAzd,KAAAovB,OAAApvB,KAAAkH,IAAA,MACAlH,KAAAktC,KAAAjnC,EAAA,SAAA6N,YAAA8B,EAAAuH,GAAA/F,IAAAqyB,eAAA,wBAAA7zB,EAAAgB,UACAnQ,EAAAqN,YAAA9T,KAAAktC,MACAzmC,EAAAqN,YAAA9T,KAAAgmC,KAAA//B,EAAA,UAQA2P,EAAA5U,UAAAuJ,OAAA,WAGA,QAAA9B,KAFAqN,EAAA,iBAAA9V,MACAA,KAAAm3B,OAAAtC,YAAA70B,KAAAm3B,OAAAtC,WAAA/R,YAAA9iB,KAAAm3B,QACAn3B,KACAA,KAAAyI,GAAA,mBAAAzI,KAAAyI,GAAAmN,EAAAwU,gBAAA3hB,GAAA,MAGA,IAAA+2B,EAAA5pB,EAAAktB,GACA,QAAArD,KAAAnK,IAAApe,GAAAuoB,KAAAD,EAAAtoB,GAAAuoB,KACAD,EAAAC,GAAA,SAAApV,GACA,kBACA,IAAA9I,EAAA9K,UACA,OAAAzW,KAAA44B,QAAA,SAAAloB,GACAA,EAAA2Z,GAAAxU,MAAAnF,EAAA6Q,MAJA,CAOUke,MAER5pB,MAAAP,EAAAI,MAAAH,EAAAD,QAAAK,IAKF,SAAAJ,EAAAD,EAAA1E,GAEA,IAAA8E,EAAAC,EAAiED,GAAA9E,EAAA,SAs+B/DzB,KAt+B+DwG,EAAA,SAAAC,GACjE,IAAAA,KAAAqI,IAAA,CAIA,IAAA/G,EAAA,iBACAc,EAAAC,OACAwB,EAAAC,WACAjB,EAAAnU,KACAkV,EAAAf,EAAAe,MACAd,EAAAD,EAAAzR,IACA2R,EAAAF,EAAAG,IACArU,EAAAkU,EAAAlU,IAEAuS,EAAA,QACAhB,EAAAF,EAAAE,IAEAiC,EAAA,IACAD,EAAA,GACAq1B,GAAgB3qB,EAAA,IAAAD,EAAA,IAAAF,EAAA,IAAA+qB,EAAA,IAAA33B,EAAA,IAAA9N,EAAA,IAAAlB,EAAA,IAAA0c,EAAA,KAChBkqB,EAAA,yBACAC,EAAA,6BACA3/B,EAAA,cACA4/B,EAAA,iFACAC,EAAA,MACAC,GAAsB7jC,KAAA,EAAA/G,KAAA,EAAAvB,MAAA,GACtBosC,GAAsB5jC,OAAA,EAAAkN,QAAA,GAmCtB22B,EAAA,SAAA5uB,EAAAkR,EAAAC,GACA,IAAAza,EAAAG,EAAAkH,SAEA,OADArH,EAAAqW,QAAA/M,EAAA,QAEAkR,GAAAxa,EAAAvU,EAAA+uB,EAAAC,GACAA,GAAAza,EAAAtU,EAAA8uB,EAAAC,KAGA0d,EAAA,SAAArmC,EAAA6oB,EAAAC,EAAAJ,EAAAC,EAAAnR,GACA,IAAA6Q,EAAAroB,EAAAqoB,EACAna,EAAAlO,EAAAuV,OACA+wB,EAAAje,EAAAie,QACAxvB,EAAA9W,EAAA9E,KACAoB,EAAAwa,EAAA3b,MACAvB,EAAA,EACA2sC,EAAA,GAEAC,EAAAP,EAAApd,EACA4d,EAAAR,EAAAnd,EAEA,GADAxsB,EAAAylC,WAAA,SACAlZ,GAAAC,EAAA,CAKA,GAFAhS,EAAA4vB,UAAA1pC,EAAAwpC,GAAAh2B,EAAAxT,EAAAypC,GACAnqC,EAAAqqC,SAAAnvB,GAAAqR,EAAAC,EAAA,QACAtR,EAAA,CACA,IAAAtY,EAAAknC,EAAA5uB,EAAAkR,EAAAC,GACAD,EAAAxpB,EAAAwpB,GACAC,EAAAzpB,EAAAypB,GAMA,GAJAE,EAAA,IAAA0d,GAAA,KACAzd,EAAA,IAAAyd,GAAA,QAAA3sC,GAAA,GACA0C,EAAAiqC,OACAzvB,EAAA8vB,YAAAle,GAAA8d,EAAAh2B,EAAAmY,GAAA8d,EACAH,GAAAje,EAAAwe,SAAA,CACA,IAAA5rC,EAAA6b,EAAAupB,qBAnFA,QAoFAplC,OAAA,GACA6b,EAAAyE,YAAAtgB,GACAqrC,IACApnC,EAAAknC,EAAA5uB,EAAAtJ,EAAAvU,EAAA2sC,EAAA,GAAAA,EAAA,IAAAp4B,EAAAtU,EAAA0sC,EAAA,GAAAA,EAAA,KACArrC,EAAA6rC,SAAA5nC,EAAAwpB,GAAA9uB,EAAA4W,EAAAtR,EAAAypB,GAAA/uB,GAEAyuB,EAAAwe,WACA5rC,EAAAo/B,KAAAhS,EAAAwe,SAAA,GAAA7pC,EAAA6rB,GAAArY,EAAA6X,EAAAwe,SAAA,GAAA7pC,EAAA8rB,IAEAhS,EAAAvK,YAAAtR,GAEAqB,EAAAylC,WAAA,YAEA1zB,EAAAoD,SAAA,WACA,yFAAAhZ,KAAA4W,SAEA,IAwxBA03B,EAxxBAvH,EAAA,SAAA1oB,EAAAa,EAAA8nB,GAOA,IANA,IAAA/nB,EAAAjH,EAAAkH,GAAA1G,cAAA5U,MAAA,KACAsjC,EAAAF,EAAA,cACAv+B,EAAAwW,EAAAvb,OACA0Z,EAAA,UACAd,EAAA,SACAjY,EAAA,SACAoE,KACA,OAAAwW,EAAAxW,IACA,YACA,cACA,WACA,cACA,WACA,WACA2U,EAAA6B,EAAAxW,GACA,MACA,WACA,aAAApE,EAAA4a,EAAAxW,GAA8C,MAC9C,WACA,YAAA6T,EAAA2C,EAAAxW,GAGA,IAAA3F,EAAAub,EAAA5b,KAAAmlC,qBAAA,aACA9kC,EAAAokC,EAAA,SAAA9pB,EACAta,EAAAokC,EAAA,eAAA5qB,EACAxZ,EAAAokC,EAAA,cAAA7iC,GAEA+kC,EAAA,SAAA/qB,EAAAvL,GAEAuL,EAAA3B,MAAA2B,EAAA3B,UACA,IAAAja,EAAA4b,EAAA5b,KACAyZ,EAAAmC,EAAA3B,MACA7Y,EAAApB,EAAAC,MAEA6rC,EAAAd,EAAApvB,EAAAjB,QAAAtK,EAAA5R,GAAAgb,EAAAhb,GAAA4R,EAAA3R,GAAA+a,EAAA/a,GAAA2R,EAAA1P,OAAA8Y,EAAA9Y,OAAA0P,EAAA5P,QAAAgZ,EAAAhZ,QAAA4P,EAAAuH,IAAA6B,EAAA7B,IAAAvH,EAAAwH,IAAA4B,EAAA5B,IAAAxH,EAAA8H,IAAAsB,EAAAtB,IAAA9H,EAAA+H,IAAAqB,EAAArB,IAAA/H,EAAA7L,GAAAiV,EAAAjV,GACAunC,EAAAd,EAAArvB,EAAAjB,QAAAlB,EAAA7B,IAAAvH,EAAAuH,IAAA6B,EAAA5B,IAAAxH,EAAAwH,IAAA4B,EAAAjV,GAAA6L,EAAA7L,GAAAiV,EAAAtB,IAAA9H,EAAA8H,IAAAsB,EAAArB,IAAA/H,EAAA+H,IACAgD,EAAAQ,EAGA,QAAA2Q,KAAAlc,IAAAoE,GAAA8X,KACA9S,EAAA8S,GAAAlc,EAAAkc,IAqBA,GAnBAuf,IACAryB,EAAAtS,KAAAgM,EAAA6G,SAAA4B,EAAAjB,MAAAiB,GACAA,EAAAuR,EAAAyJ,MAAA,GAEAvmB,EAAAJ,OAAAjQ,EAAAiQ,KAAAI,EAAAJ,MACAI,EAAApJ,QAAAjH,EAAAiH,MAAAoJ,EAAApJ,OACAoJ,EAAAqI,SAAA1Y,EAAA0Y,OAAArI,EAAAqI,QACArI,EAAA9I,SAAAnG,EAAAmG,OAAA8I,EAAA9I,QACA,SAAA8I,GAAAuL,EAAAlE,KAAArH,EAAAqH,OACArH,EAAAlJ,MAAA,QAAAyU,EAAAjB,MAAAmxB,KACA9rC,EAAAmH,KA3IA,SAAAA,GACA,IAAA6kC,EAAA,aACAje,EAAA5a,EAAAwV,gBAGA,GAFApT,EAAApO,GAAAga,MAAA6qB,KAAAje,EAAA5a,EAAAoS,aACAymB,EAAA,UACAje,GAAA5a,EAAAwV,kBAAApT,EAAApO,GAAAga,MAAA6qB,GAAA,CACA,IAAA5wB,EAAA7F,EAAApO,GAAA3H,QAAAorC,EAAA,SAAA7K,EAAAhS,EAAAja,GACA,IAAAm4B,KACAC,EAAA,KAAAne,EAAAhY,cACAqF,EAAAsvB,EAAA3c,GAQA,OAPAja,EAAAtU,QAAA0L,EAAA,SAAAuR,GACAyvB,GAAA,GAAAD,EAAAhrC,SACAma,GAAA6wB,EAAAvB,EAAA,KAAA3c,EAAA,SACAke,MAEAA,EAAA7tC,KAAA2Y,EAAA0F,EAAAsuB,MAEA3vB,EAAA6wB,IAEA,OAAA7wB,EAEA,IAAAtW,EAAAN,EAAAikB,EAAAsF,EAAA5mB,GACAiU,KACA,QAAApV,EAAA,EAAAsU,EAAAmO,EAAAxnB,OAA4C+E,EAAAsU,EAAQtU,IAAA,CACpDlB,EAAA2jB,EAAAziB,GAEA,MADAxB,EAAAikB,EAAAziB,GAAA,GAAA+P,iBACAvR,EAAA,KACA,QAAAnD,EAAA,EAAAkZ,EAAAzV,EAAA7D,OAA+CI,EAAAkZ,EAAQlZ,IACvDmD,GAAAuS,EAAAjS,EAAAzD,GAAA0pC,IAAA1pC,GAAAkZ,EAAA,MAAAlF,GAEA+F,EAAAhd,KAAAoG,GAEA,OAAA4W,EAAA3Z,KAAA6T,GA2GA62B,EAAA52B,EAAAkE,EAAAtS,MAAA4O,cAAAjE,QAAA,KAAAqB,EAAAwV,gBAAAlP,EAAAtS,MAAAsS,EAAAtS,MACAyU,EAAAuR,EAAAyJ,MAAA,EACA,SAAAhb,EAAAjB,OACAiB,EAAAuR,EAAAie,SAAA3xB,EAAAhb,EAAAgb,EAAA/a,GACAkd,EAAAuR,EAAAwe,UAAAlyB,EAAA9Y,MAAA8Y,EAAAhZ,QACA0qC,EAAAvvB,EAAA,aAGA,cAAAvL,GAAAuL,EAAAhb,UAAAyP,EAAAzP,WACAmrC,EAAA,CACA,IAAAn0B,GAAA6B,EAAA7B,GACAC,GAAA4B,EAAA5B,GACAM,GAAAsB,EAAAtB,KAAAsB,EAAAjV,GAAA,EACA4T,GAAAqB,EAAArB,KAAAqB,EAAAjV,GAAA,EACAxE,EAAAmH,KAAAgM,EAAAihB,OAAA,qCAAoErd,GAAAa,EAAAO,GAAA4yB,GAAAh0B,GAAAc,EAAAO,GAAA2yB,GAAAh0B,GAAAa,EAAAO,GAAA4yB,GAAAh0B,GAAAc,EAAAO,GAAA2yB,GAAAh0B,EAAAa,EAAAmzB,IACpEnvB,EAAAuR,EAAAyJ,MAAA,EAEA,iBAAAvmB,EAAA,CACA,IAAAjQ,EAAAmV,EAAAlF,EAAA,cAAAlP,MAAAkT,GACA,MAAAjU,EAAAa,OAAA,CACAb,EAAA,IAAAA,EAAA,KAAAA,EAAA,GACAA,EAAA,IAAAA,EAAA,KAAAA,EAAA,GACA,IAAAgsC,EAAApsC,EAAAqsC,UAAAl5B,EAAAuH,GAAA/F,IAAA5E,cAAA,OACAu8B,EAAAF,EAAAnsC,MACAqsC,EAAAnF,KAAAh0B,EAAAihB,OAAA,gCAAmEh0B,GACnEJ,EAAAqsC,WACAC,EAAAV,SAAA,WACAU,EAAA7nC,IAAA,EACA6nC,EAAA5W,KAAA,EACA4W,EAAA3rC,MAAAib,EAAA6Q,MAAA9rB,MAAA,KACA2rC,EAAA7rC,OAAAmb,EAAA6Q,MAAAhsB,OAAA,KACAT,EAAAoyB,WAAAvqB,aAAAukC,EAAApsC,GACAosC,EAAA/6B,YAAArR,GACAA,EAAAqsC,SAAAD,GAGA/7B,EAAA,cACArQ,EAAAqsC,WAAArsC,EAAAqsC,SAAApsC,MAAAknC,KAAA,QAGA,GAAAvrB,EAAA2wB,SAAA,CACA,IAAAC,EAAA5wB,EAAA2wB,SAAAtsC,MACAoQ,EAAAxQ,OAAA2sC,EAAA3sC,KAAAwQ,EAAAxQ,MACAwQ,EAAA,iBAAAm8B,EAAAC,WAAA,IAAAp8B,EAAA,eAAAlP,MAAA,QAAA3B,QAAA,iBAAA6V,GAAA,KACAhF,EAAA,eAAAm8B,EAAAzE,SAAA13B,EAAA,cACAA,EAAA,iBAAAm8B,EAAAE,WAAAr8B,EAAA,gBACAA,EAAA,gBAAAm8B,EAAAG,UAAAt8B,EAAA,eAQA,GANA,gBAAAA,GACAi0B,EAAAlpB,EAAA/K,EAAA,gBAEA,cAAAA,GACAi0B,EAAAlpB,EAAA/K,EAAA,gBAEA,MAAAA,EAAA/I,SACA,MAAA+I,EAAAtQ,MACA,MAAAsQ,EAAAgI,KACA,MAAAhI,EAAAhQ,QACA,MAAAgQ,EAAA,iBACA,MAAAA,EAAA,mBACA,MAAAA,EAAA,iBACA,MAAAA,EAAA,qBACA,MAAAA,EAAA,sBACA,MAAAA,EAAA,oBACA,MAAAA,EAAA,mBACA,IAAAtQ,EAAAC,EAAAmlC,qBA1NA,QAqOA,KATAplC,OAAA,MACAA,EAAA8rC,EA7NA,SA8NA,SAAAjwB,EAAAjB,MAAAtK,EAAAgI,MACAtY,EAAAsY,IAAAhI,EAAAgI,KAEAhI,EAAAtQ,SAAAmK,IAAA,GACA,MAAAnK,EAAAmK,IAAA,QAAAmG,EAAAtQ,MAAA,OAAAsQ,EAAAtQ,OACAA,EAAAmK,IAAA,GAEAnK,EAAAmK,IAAAmG,EAAAtQ,KAAA,CACA,IAAA0nC,EAAAlyB,EAAAlF,EAAAtQ,MAAAohB,MAAAhO,EAAAsD,QACA,GAAAgxB,EAAA,CACA1nC,EAAAqyB,YAAApyB,KAAAqgB,YAAAtgB,GACAA,EAAAspB,QAAA,EACAtpB,EAAAsY,IAAAovB,EAAA,GACA1nC,EAAA4a,KAAA,OACA,IAAAT,EAAA0B,EAAAlb,QAAA,GACAX,EAAA6rC,SAAA1xB,EAAAzb,EAAA6W,EAAA4E,EAAAxb,EACAkd,EAAAuR,EAAAie,SAAAlxB,EAAAzb,EAAAyb,EAAAxb,GAEAyU,EAAA8M,SAAAwnB,EAAA,cACA7rB,EAAAuR,EAAAwe,UAAApuC,KAAA4xB,YAAA5xB,KAAA8xB,qBAGAtvB,EAAAmI,MAAAiL,EAAAqL,OAAAnO,EAAAtQ,MAAAse,IACAte,EAAAsY,IAAAhD,EACAtV,EAAA4a,KAAA,QACAxH,EAAAqL,OAAAnO,EAAAtQ,MAAA8gB,QAAAzF,EAAAT,QAAsEtT,OAAA,EAAAkN,QAAA,IAAsB,KAAAgB,EAAAlF,EAAAtQ,MAAAghB,WAAA+hB,EAAA1nB,EAAA/K,EAAAtQ,UAC5F0Z,EAAA1Z,KAAA,OACA0Z,EAAAxB,SAAA5H,EAAAtQ,KACAA,EAAAspB,QAAA,GAIA,oBAAAhZ,GAAA,YAAAA,EAAA,CACA,IAAA/I,KAAAmS,EAAA,4BAAAA,EAAAnS,QAAA,YAAA6L,EAAAqL,OAAAnO,EAAAtQ,MAAA6b,EAAA,SACAtU,EAAA4O,EAAAD,EAAA3O,EAAA,MACAvH,EAAAuH,UACAvH,EAAAsY,MACAtY,EAAAmI,MAAA,QAGAlI,EAAAqR,YAAAtR,GACA,IAAAM,EAAAL,EAAAmlC,qBAAA,WAAAnlC,EAAAmlC,qBAAA,aACAyH,GAAA,GACAvsC,IAAAusC,EAAAvsC,EAAAwrC,EAAA,YACAx7B,EAAAhQ,QAAA,QAAAgQ,EAAAhQ,QACAgQ,EAAA,iBACA,MAAAA,EAAA,mBACAA,EAAA,qBACAA,EAAA,sBACAA,EAAA,oBACAA,EAAA,qBACAhQ,EAAA6J,IAAA,IAEA,QAAAmG,EAAAhQ,QAAA,OAAAgQ,EAAAhQ,QAAA,MAAAA,EAAA6J,IAAA,GAAAmG,EAAAhQ,QAAA,GAAAgQ,EAAA,mBAAAhQ,EAAA6J,IAAA,GACA,IAAA2iC,EAAA15B,EAAAqL,OAAAnO,EAAAhQ,QACAA,EAAA6J,IAAAmG,EAAAhQ,WAAA6H,MAAA2kC,EAAAxuB,KACA/W,KAAAmS,EAAA,8BAAAA,EAAAnS,QAAA,YAAAulC,EAAAjxB,EAAA,SACA,IAAAjb,EAAA,KAAAqW,EAAA3G,EAAA,qBAUA,GATA/I,EAAA4O,EAAAD,EAAA3O,EAAA,MACA,MAAA+I,EAAA,kBAAA1P,EAAA8Y,EAAA,iBACApJ,EAAA,kBAAAhQ,EAAAk+B,OAAA59B,GACAA,KAAA,IAAA2G,GAAA3G,KAAAN,EAAAk+B,OAAA,GACAl+B,EAAAiH,UAEA+I,EAAA,qBAAAhQ,EAAAysC,UAAAz8B,EAAA,6BACAhQ,EAAA0sC,WAAA18B,EAAA,wBACAA,EAAA,oBAAAhQ,EAAA2sC,OAAA,QAAA38B,EAAA,mCAAAA,EAAA,oCACA,qBAAAA,EAAA,CACA,IAAAu1B,GACAC,IAAA,YACAC,IAAA,WACAC,KAAA,eACAC,MAAA,kBACAC,KAAA,MACAC,KAAA,OACAC,KAAA,WACAC,MAAA,UACAC,MAAA,cACAC,OAAA,kBAEAjmC,EAAA4sC,UAAArH,EAAAnxB,GAAApE,EAAA,qBAAAu1B,EAAAv1B,EAAA,qBAAAgF,EAEAu3B,GAAA5sC,EAAAqR,YAAAhR,GAEA,WAAA+a,EAAAT,KAAA,CACAS,EAAAqR,MAAAiI,OAAAz0B,MAAA6d,QAAAzI,EACA,IAAA63B,EAAA9xB,EAAAqR,MAAAygB,KAEAnF,EAAAtuB,EAAA5Z,MAAA4Z,EAAA5Z,KAAAshB,MAAA,uBACA/f,EAAA8rC,EAAAjtC,MACAwZ,EAAA5Z,OAAAuB,EAAAvB,KAAA4Z,EAAA5Z,MACA4Z,EAAA,iBAAArY,EAAAqrC,WAAAhzB,EAAA,gBACAA,EAAA,iBAAArY,EAAAsrC,WAAAjzB,EAAA,gBACAA,EAAA,gBAAArY,EAAAurC,UAAAlzB,EAAA,eACAsuB,EAAA/wB,EAAAyC,EAAA,cAAAsuB,KAAA,QACA3mC,EAAA2mC,SARA,IAQAA,EAAA,KACA3sB,EAAAmxB,SAAArN,SAAAgO,EAAAnyB,UAAAxF,EAAA6F,EAAAmxB,SAAArN,QAAA1/B,QAAA,cAAmGA,QAAA,cAAuBA,QAAA,eAC1H,IAAA2tC,EAAAD,EAAA3X,wBACAna,EAAAgyB,EAAA3zB,EAAAI,GAAAszB,EAAAE,MAAAF,EAAAzX,MAXA,IAYAta,EAAAkyB,EAAA7zB,EAAA7X,GAAAurC,EAAAxgB,OAAAwgB,EAAA1oC,KAZA,IAcA2W,EAAAuE,EAAAlG,EAAAhb,EACA2c,EAAA0M,EAAArO,EAAA/a,EAAA0c,EAAAkyB,EAAA,GAEA,MAAAj9B,GAAA,MAAAA,KAAA+K,EAAAjU,KAAAqY,EAAArM,EAAAihB,OAAA,mBAAyFrd,EAAA0C,EAAAhb,EAAAssC,GAAAh0B,EAAA0C,EAAA/a,EAAAqsC,GAAAh0B,EAAA0C,EAAAhb,EAAAssC,GAAA,IAEzF,IADA,IAAAwC,GAAA,4EACAn/B,EAAA,EAAAo/B,EAAAD,EAAAtsC,OAAoDmN,EAAAo/B,EAAQp/B,IAAA,GAAAm/B,EAAAn/B,KAAAiC,EAAA,CAC5D+K,EAAA+R,EAAAyJ,MAAA,EACA,MAIA,OAAAnd,EAAA,gBACA,YACA2B,EAAAmxB,SAAAtsC,MAAA,uBACAmb,EAAAqyB,IAAAryB,EAAAgyB,EAAA,EACA,MACA,UACAhyB,EAAAmxB,SAAAtsC,MAAA,wBACAmb,EAAAqyB,KAAAryB,EAAAgyB,EAAA,EACA,MACA,QACAhyB,EAAAmxB,SAAAtsC,MAAA,yBACAmb,EAAAqyB,IAAA,EAGAryB,EAAAmxB,SAAAtsC,MAAA,oBAIA6iC,EAAA,SAAAlnB,EAAA3D,EAAAlY,GACA6b,EAAA3B,MAAA2B,EAAA3B,UACA2B,EAAA3B,MAAA,IACA7D,EAAAvU,KAAAuU,IAGAuE,EAAA,SACA+yB,EAAA,QAaA,GAZA9xB,EAAA3B,MAAAhC,WAWAA,GAVAA,EAAA1C,EAAA0C,GAAAzY,QAAA2T,EAAAoG,iBAAA,SAAAwmB,EAAAgD,EAAAC,GAQA,OAPAroB,EAAA,SACAooB,GAAAC,IACAD,EAAA/rB,EAAA+rB,GACAC,EAAAhsB,EAAAgsB,GACA5sB,EAAA2sB,EAAA,MAAA3sB,EAAA4sB,EAAA,YAAAA,EAAAhtB,EAAAoN,KAAA,IAAAhN,EAAA2sB,EAAA,WAAAC,EAAA,WACA0K,EAAA3K,EAAAztB,EAAA0tB,GAEA3tB,KAEAlU,MAAA,YACA,UAAAwZ,EAAA,CACA,IAAAmB,EAAA7D,EAAAkH,QAEA,GADArD,GAAA9E,EAAA8E,GACAunB,MAAAvnB,GACA,YAGA,IAAA+M,EAAA1V,EAAAmZ,WAAArU,GACA,IAAA4Q,EACA,YAGA,GADAjN,IAAAoX,OAAApX,EAAA5b,KACA6oB,EAAA5nB,OAAA,CACA2a,EAAAyE,YAAAtgB,GACAA,EAAAmK,IAAA,EACAnK,EAAAi9B,OAAA,OACAj9B,EAAAmI,MAAA2gB,EAAA,GAAA3gB,MACAnI,EAAA4tC,OAAA9kB,IAAA5nB,OAAA,GAAAiH,MAEA,IADA,IAAA0lC,KACA5nC,EAAA,EAAAsU,EAAAuO,EAAA5nB,OAA8C+E,EAAAsU,EAAQtU,IACtD6iB,EAAA7iB,GAAAmC,QAAAylC,EAAAxvC,KAAAyqB,EAAA7iB,GAAAmC,OAAAmN,EAAAuT,EAAA7iB,GAAAkC,OAEAnI,EAAA2C,OAAAkrC,EAAA3sC,OAAA2sC,EAAAnsC,OAAA,MAAA1B,EAAAmI,MACA,UAAAyS,GACA5a,EAAA4a,KAAA,gBACA5a,EAAA8tC,MAAA,OACA9tC,EAAA+tC,UAAA,MACA/tC,EAAAguC,cAAAL,EACA3tC,EAAA+b,MAAA,IAGA/b,EAAA4a,KAAA,WACA5a,EAAA+b,OAAA,IAAAA,GAAA,KAEAF,EAAAvK,YAAAtR,GAEA,UAEAsoC,EAAA,SAAAroC,EAAAwb,GACAje,KAAA,GAAAA,KAAAyC,OACAA,EAAA80B,SAAA,EACAv3B,KAAA8B,GAAA8T,EAAA66B,OACAhuC,EAAAi2B,UAAA14B,KAAA8B,GACA9B,KAAAoiB,EAAA,EACApiB,KAAAuqB,EAAA,EACAvqB,KAAA0c,SACA1c,KAAAkvB,MAAAjR,EACAje,KAAA8c,OAAAlH,EAAAkH,SACA9c,KAAA4vB,GACAvsB,aACA+sB,GAAA,EACAC,GAAA,EACAJ,GAAA,EACAC,GAAA,EACAnR,IAAA,EACAsa,MAAA,EACAvI,OAAA,IAEA7S,EAAAmR,SAAAnR,EAAAmR,OAAApvB,MACAA,KAAAmvB,KAAAlR,EAAA/W,IACA+W,EAAA/W,MAAA+W,EAAA/W,IAAAmoB,KAAArvB,MACAie,EAAA/W,IAAAlH,KACAA,KAAAqvB,KAAA,MAEAiG,EAAA1f,EAAAlF,GAEAo6B,EAAA9pC,UAAAs0B,EACAA,EAAAxX,YAAAgtB,EACAxV,EAAAjyB,UAAA,SAAA2sB,GACA,SAAAA,EACA,OAAAhwB,KAAA4vB,EAAAvsB,UAEA,IAEAqtC,EAFAC,EAAA3wC,KAAAkvB,MAAA0hB,cACAC,EAAAF,EAAA,KAAAA,EAAA9f,MAAA8f,EAAA9f,OAAA,SAAA8f,EAAA1gB,GAAA0gB,EAAAzgB,IAAApY,EAEA64B,IACAD,EAAA1gB,EAAAhY,EAAAgY,GAAA/tB,QAAA,gBAAmDjC,KAAA4vB,EAAAvsB,WAAAyU,IAEnDlC,EAAAma,kBAAA/vB,KAAA6wC,EAAA7gB,GACA,IAGApsB,EAHAkZ,EAAA9c,KAAA8c,OAAAc,QACAkzB,EAAA9wC,KAAA8wC,KACAzyB,EAAAre,KAAAyC,KAEAsuC,GAAA/4B,EAAAhY,KAAA0c,MAAAla,MAAA+R,QAAA,KACAy8B,GAAAh5B,EAAAhY,KAAA0c,MAAAla,MAAA+R,QAAA,QAEA,GADAuI,EAAA8T,UAAA,KACAogB,GAAAD,GAAA,SAAA/wC,KAAAod,KAIA,GAHA0zB,EAAAh0B,OAAA,UACAg0B,EAAAlmC,OAAA,MACAhH,EAAAkZ,EAAAlZ,QACAmtC,GAAAntC,EAAAkvB,aAAAlvB,EAAAgvB,SAAA,CACAvU,EAAA3b,MAAAopC,OAAAhvB,EAAAwV,WACA,IAAAzH,EAAA7qB,KAAAmD,UACA8tC,EAAAjxC,KAAAmD,QAAA,GACA8sB,EAAApF,EAAA3pB,EAAA+vC,EAAA/vC,EACAgvB,EAAArF,EAAA1pB,EAAA8vC,EAAA9vC,EACAkd,EAAA8vB,YAAAle,GAAAud,EAAAz1B,EAAAmY,GAAAsd,EACAI,EAAA5tC,KAAA,IAAAiwB,EAAAC,EAAA,QAEA7R,EAAA3b,MAAAopC,OAAAh0B,EACA81B,EAAA5tC,KAAA4D,EAAA4uB,OAAA5uB,EAAA8uB,OAAA9uB,EAAAqsB,GAAArsB,EAAAssB,GAAAtsB,EAAAkoB,aAGAzN,EAAA3b,MAAAopC,OAAAh0B,EACAg5B,EAAAh0B,OAAA9E,EAAA8E,GACAg0B,EAAAlmC,OAAAkS,EAAAlS,SAMA,OAJA,OAAA8lC,IACA1wC,KAAA4vB,EAAAvsB,UAAAqtC,EACA96B,EAAAma,kBAAA/vB,KAAA0wC,IAEA1wC,MAEAs1B,EAAAxJ,OAAA,SAAA/M,EAAA1E,EAAAC,GACA,GAAAta,KAAAo5B,QACA,OAAAp5B,KAEA,SAAA+e,EAAA,CAUA,IAPAA,EAAA/G,EAAA+G,GAAAnb,MAAAkT,IACApT,OAAA,IACA2W,EAAAZ,EAAAsF,EAAA,IACAzE,EAAAb,EAAAsF,EAAA,KAEAA,EAAAtF,EAAAsF,EAAA,IACA,MAAAzE,IAAAD,EAAAC,GACA,MAAAD,GAAA,MAAAC,EAAA,CACA,IAAAqC,EAAA3c,KAAAmD,QAAA,GACAkX,EAAAsC,EAAAzb,EAAAyb,EAAAvZ,MAAA,EACAkX,EAAAqC,EAAAxb,EAAAwb,EAAAzZ,OAAA,EAIA,OAFAlD,KAAA4vB,EAAAkB,OAAA,EACA9wB,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAA8a,EAAA1E,EAAAC,MACAta,OAEAs1B,EAAA1E,UAAA,SAAAX,EAAAC,GACA,OAAAlwB,KAAAo5B,QACAp5B,OAEAiwB,EAAAjY,EAAAiY,GAAArsB,MAAAkT,IACApT,OAAA,IACAwsB,EAAAzW,EAAAwW,EAAA,KAEAA,EAAAxW,EAAAwW,EAAA,OACAC,MAAA,EACAlwB,KAAA4vB,EAAAjT,OACA3c,KAAA4vB,EAAAjT,KAAAzb,GAAA+uB,EACAjwB,KAAA4vB,EAAAjT,KAAAxb,GAAA+uB,GAEAlwB,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAAgsB,EAAAC,MACAlwB,OAEAs1B,EAAAzE,MAAA,SAAAT,EAAAC,EAAAhW,EAAAC,GACA,GAAAta,KAAAo5B,QACA,OAAAp5B,KAaA,IAXAowB,EAAApY,EAAAoY,GAAAxsB,MAAAkT,IACApT,OAAA,IACA2sB,EAAA5W,EAAA2W,EAAA,IACA/V,EAAAZ,EAAA2W,EAAA,IACA9V,EAAAb,EAAA2W,EAAA,IACA0V,MAAAzrB,OAAA,MACAyrB,MAAAxrB,OAAA,OAEA8V,EAAA3W,EAAA2W,EAAA,IACA,MAAAC,MAAAD,GACA,MAAA9V,IAAAD,EAAAC,GACA,MAAAD,GAAA,MAAAC,EACA,IAAAqC,EAAA3c,KAAAmD,QAAA,GAOA,OALAkX,EAAA,MAAAA,EAAAsC,EAAAzb,EAAAyb,EAAAvZ,MAAA,EAAAiX,EACAC,EAAA,MAAAA,EAAAqC,EAAAxb,EAAAwb,EAAAzZ,OAAA,EAAAoX,EAEAta,KAAAqD,UAAArD,KAAA4vB,EAAAvsB,UAAAY,SAAA,IAAAmsB,EAAAC,EAAAhW,EAAAC,MACAta,KAAA4vB,EAAAkB,OAAA,EACA9wB,MAEAs1B,EAAApvB,KAAA,WAEA,OADAlG,KAAAo5B,UAAAp5B,KAAAyC,KAAAC,MAAA6d,QAAA,QACAvgB,MAEAs1B,EAAA0V,KAAA,WAEA,OADAhrC,KAAAo5B,UAAAp5B,KAAAyC,KAAAC,MAAA6d,QAAAzI,GACA9X,MAGAs1B,EAAA4b,WAAAt7B,EAAAlF,GAAAvN,QACAmyB,EAAAnyB,QAAA,WACA,IAAAiB,EAAApE,KAAAkxC,aACA,GAAAlxC,KAAAkvB,OAAAlvB,KAAAkvB,MAAA0hB,cACA,CACA,IAAAnqC,KACA0c,EAAA,EAAAnjB,KAAAkvB,MAAA0hB,cAAA/f,MASA,OARApqB,EAAAvF,EAAAkD,EAAAlD,EAAAlB,KAAAkvB,MAAA0hB,cAAA3gB,GACAxpB,EAAAvF,GAAAiiB,EACA1c,EAAAtF,EAAAiD,EAAAjD,EAAAnB,KAAAkvB,MAAA0hB,cAAA1gB,GACAzpB,EAAAtF,GAAAgiB,EACA1c,EAAArD,MAAAgB,EAAAhB,MAAA+f,EACA1c,EAAAvD,OAAAkB,EAAAlB,OAAAigB,EACA1c,EAAAiY,GAAAjY,EAAAvF,EAAAuF,EAAArD,MACAqD,EAAAjC,GAAAiC,EAAAtF,EAAAsF,EAAAvD,OACAuD,EAEA,OAAArC,GAEAkxB,EAAA1Y,SAAA,WACA,OAAA5c,KAAAo5B,YAIAl4B,EAAAlB,KAAAoiB,GAAApiB,KAAAkwC,KAAA,GAAAlwC,KAAA6vC,EAAA,EACA1uC,EAAAnB,KAAAuqB,EAAAvqB,KAAA+vC,EACA3sC,MAAApD,KAAA6vC,EACA3sC,OAAAlD,KAAA+vC,IAGAza,EAAA/qB,OAAA,WACA,IAAAvK,KAAAo5B,SAAAp5B,KAAAyC,KAAAoyB,WAAA,CAQA,QAAApsB,KALAzI,KAAAkvB,MAAA0H,SAAA52B,KAAAkvB,MAAA0H,QAAAoJ,QAAAhgC,MACA4V,EAAAE,IAAA0f,OAAA,eAAAx1B,KAAA8B,IACA8T,EAAAqZ,MAAAjvB,UAAAkvB,OACAlvB,KAAAyC,KAAAoyB,WAAA/R,YAAA9iB,KAAAyC,MACAzC,KAAAy1B,OAAAz1B,KAAAy1B,MAAAZ,WAAA/R,YAAA9iB,KAAAy1B,OACAz1B,KACAA,KAAAyI,GAAA,mBAAAzI,KAAAyI,GAAAmN,EAAAwU,gBAAA3hB,GAAA,KAEAzI,KAAAo5B,SAAA,IAEA9D,EAAAlzB,KAAA,SAAAR,EAAAsd,GACA,GAAAlf,KAAAo5B,QACA,OAAAp5B,KAEA,SAAA4B,EAAA,CACA,IAAAic,KACA,QAAA3B,KAAAlc,KAAA0c,MAAA1c,KAAA0c,MAAAxF,GAAAgF,KACA2B,EAAA3B,GAAAlc,KAAA0c,MAAAR,IAIA,OAFA2B,EAAAnD,UAAA,QAAAmD,EAAArb,OAAAqb,EAAArb,KAAAqb,EAAAnD,kBAAAmD,EAAAnD,SACAmD,EAAAxa,UAAArD,KAAA4vB,EAAAvsB,UACAwa,EAEA,SAAAqB,GAAAtJ,EAAAI,GAAApU,EAAA,WACA,GAzmBA,QAymBAA,GAAA,QAAA5B,KAAA0c,MAAAla,MAAAxC,KAAA0c,MAAAhC,SACA,OAAA1a,KAAA0c,MAAAhC,SAIA,IAFA,IAAAspB,EAAApiC,EAAAgC,MAAAkT,GACAqb,KACA1pB,EAAA,EAAAsU,EAAAinB,EAAAtgC,OAA+C+E,EAAAsU,EAAQtU,KACvD7G,EAAAoiC,EAAAv7B,MACAzI,KAAA0c,MACAyV,EAAAvwB,GAAA5B,KAAA0c,MAAA9a,GACkBgU,EAAAI,GAAAhW,KAAAkvB,MAAAvX,iBAAA/V,GAAA,YAClBuwB,EAAAvwB,GAAA5B,KAAAkvB,MAAAvX,iBAAA/V,GAAA0pC,IAEAnZ,EAAAvwB,GAAAgU,EAAAoE,gBAAApY,GAGA,OAAAmb,EAAA,EAAAoV,IAAA6R,EAAA,IAEA,GAAAhkC,KAAA0c,OAAA,MAAAwC,GAAAtJ,EAAAI,GAAApU,EAAA,UAEA,IADAuwB,KACA1pB,EAAA,EAAAsU,EAAAnb,EAAA8B,OAA0C+E,EAAAsU,EAAQtU,IAClD0pB,EAAAvwB,EAAA6G,IAAAzI,KAAAoC,KAAAR,EAAA6G,IAEA,OAAA0pB,EAEA,IAAArf,EAMA,QAAAiL,KALA,MAAAmB,KACApM,MACAlR,GAAAsd,GAEA,MAAAA,GAAAtJ,EAAAI,GAAApU,EAAA,YAAAkR,EAAAlR,GACAkR,EACAgD,EAAA,gBAAAiI,EAAA,IAAA/d,KAAA8B,GAAA9B,KAAA8S,EAAAiL,IAEA,GAAAjL,EAAA,CACA,IAAAiL,KAAA/d,KAAAkvB,MAAAvX,iBAAA,GAAA3X,KAAAkvB,MAAAvX,iBAAAT,GAAA6G,IAAAjL,EAAAoE,GAAA6G,IAAAnI,EAAAI,GAAAhW,KAAAkvB,MAAAvX,iBAAAoG,GAAA,aACA,IAAAiR,EAAAhvB,KAAAkvB,MAAAvX,iBAAAoG,GAAAlI,MAAA7V,QAAAiE,OAAA6O,EAAAiL,KAEA,QAAAwtB,KADAvrC,KAAA0c,MAAAqB,GAAAjL,EAAAiL,GACAiR,IAAA9X,GAAAq0B,KACAz4B,EAAAy4B,GAAAvc,EAAAuc,IAIAz4B,EAAAnR,MAAA,QAAA3B,KAAAod,OACApd,KAAAgvC,SAAArN,OAAA7uB,EAAAnR,MAEAynC,EAAAppC,KAAA8S,GAGA,OAAA9S,MAEAs1B,EAAApsB,QAAA,WAGA,OAFAlJ,KAAAo5B,SAAAp5B,KAAAyC,KAAAoyB,WAAA/gB,YAAA9T,KAAAyC,MACAzC,KAAAkvB,OAAAlvB,KAAAkvB,MAAAhoB,KAAAlH,MAAA4V,EAAA2Z,SAAAvvB,UAAAkvB,OACAlvB,MAEAs1B,EAAAkW,OAAA,WACA,OAAAxrC,KAAAo5B,QACAp5B,MAEAA,KAAAyC,KAAAoyB,WAAApX,YAAAzd,KAAAyC,OACAzC,KAAAyC,KAAAoyB,WAAAvqB,aAAAtK,KAAAyC,KAAAzC,KAAAyC,KAAAoyB,WAAApX,YACA7H,EAAA4Z,QAAAxvB,UAAAkvB,QAEAlvB,OAEAs1B,EAAA4K,YAAA,SAAAr7B,GACA,OAAA7E,KAAAo5B,QACAp5B,MAEA6E,EAAAiZ,aAAAlI,EAAAktB,GAAAhlB,cACAjZ,MAAAnB,OAAA,IAEAmB,EAAApC,KAAAmyB,YACA/vB,EAAApC,KAAAoyB,WAAAvqB,aAAAtK,KAAAyC,KAAAoC,EAAApC,KAAAmyB,aAEA/vB,EAAApC,KAAAoyB,WAAA/gB,YAAA9T,KAAAyC,MAEAmT,EAAA6Z,aAAAzvB,KAAA6E,EAAA7E,KAAAkvB,OACAlvB,OAEAs1B,EAAAhrB,aAAA,SAAAzF,GACA,OAAA7E,KAAAo5B,QACAp5B,MAEA6E,EAAAiZ,aAAAlI,EAAAktB,GAAAhlB,cACAjZ,IAAA,IAEAA,EAAApC,KAAAoyB,WAAAvqB,aAAAtK,KAAAyC,KAAAoC,EAAApC,MACAmT,EAAA+Z,cAAA3vB,KAAA6E,EAAA7E,KAAAkvB,OACAlvB,OAEAs1B,EAAAnb,KAAA,SAAAynB,GACA,IAAA/9B,EAAA7D,KAAAyC,KAAA0uC,aACAz6B,EAAA7S,EAAAioC,OAWA,OAVAp1B,IAAAzU,QAAAqrC,EAAAx1B,GACA,IAAA8pB,GACA5hC,KAAA0c,MAAAvC,KAAAynB,EACA/9B,EAAAioC,OAAAp1B,EAAAqB,EAvsBA,yDAusBA6pB,GAAA,SACA/9B,EAAAutC,OAAAx7B,EAAAihB,OAAA,oBAAiDrd,GAAAooB,GAAA,QAEjD/9B,EAAAioC,OAAAp1B,EACA7S,EAAAutC,OAAA,SACApxC,KAAA0c,MAAAvC,MAEAna,MAGA4V,EAAAM,QAAAtM,KAAA,SAAAqa,EAAAhG,GACA,IAAAvN,EAAA49B,EAAA,SACA59B,EAAAhO,MAAAkgB,QAAA2qB,EACA78B,EAAAu9B,UAAAT,EAAAz1B,EAAAy1B,EACA98B,EAAAy9B,YAAAlwB,EAAAkwB,YACA,IAAA5mC,EAAA,IAAAujC,EAAAp6B,EAAAuN,GACA7b,GAAqBI,KAAA,OAAAM,OAAA,QACrBmhB,IAAA7hB,EAAAwH,KAAAqa,GACA1c,EAAA6V,KAAA,OACA7V,EAAAqC,QACArC,EAAA8pC,KAAAv5B,EACAsxB,EAAA7hC,EAAAnF,GACA6b,EAAAkZ,QAAAlZ,EAAAkZ,OAAArjB,YAAApD,GACA,IAAAogC,EAAAxC,EAAA,QAKA,OAJAwC,EAAAnkC,IAAA,EACA+D,EAAAoD,YAAAg9B,GACAvpC,EAAAupC,OACAvpC,EAAAlE,UAAAyU,GACAvQ,GAEAqO,EAAAM,QAAArT,KAAA,SAAAob,EAAA/c,EAAAC,EAAAmb,EAAAjY,EAAA4C,GACA,IAAA2C,EAAAgM,EAAAyG,UAAAnb,EAAAC,EAAAmb,EAAAjY,EAAA4C,GACA4W,EAAAI,EAAArU,QACAsS,EAAA2B,EAAAnB,MAQA,OAPAmB,EAAAuE,EAAAlG,EAAAhb,IACA2c,EAAA0M,EAAArO,EAAA/a,IACA0c,EAAAgyB,EAAA3zB,EAAA9Y,MAAAkZ,EACAuB,EAAAkyB,EAAA7zB,EAAAhZ,OAAAmB,EACA6X,EAAAjV,IACAiV,EAAAtS,OACAiU,EAAAT,KAAA,OACAS,GAEAjI,EAAAM,QAAAc,QAAA,SAAAiH,EAAA/c,EAAAC,EAAAyZ,EAAAC,GACA,IAAAgD,EAAAI,EAAArU,OACAiU,EAAAnB,MAYA,OAXAmB,EAAAuE,EAAAlhB,EAAA0Z,EACAiD,EAAA0M,EAAAppB,EAAA0Z,EACAgD,EAAAgyB,EAAA,EAAAj1B,EACAiD,EAAAkyB,EAAA,EAAAl1B,EACAgD,EAAAT,KAAA,UACAgsB,EAAAvrB,GACAxD,GAAAnZ,EACAoZ,GAAAnZ,EACAyZ,KACAC,OAEAgD,GAEAjI,EAAAM,QAAApM,OAAA,SAAAmU,EAAA/c,EAAAC,EAAA8F,GACA,IAAA4W,EAAAI,EAAArU,OACAiU,EAAAnB,MAUA,OATAmB,EAAAuE,EAAAlhB,EAAA+F,EACA4W,EAAA0M,EAAAppB,EAAA8F,EACA4W,EAAAgyB,EAAAhyB,EAAAkyB,EAAA,EAAA9oC,EACA4W,EAAAT,KAAA,SACAgsB,EAAAvrB,GACAxD,GAAAnZ,EACAoZ,GAAAnZ,EACA8F,MAEA4W,GAEAjI,EAAAM,QAAA5U,MAAA,SAAA2c,EAAAnD,EAAA5Z,EAAAC,EAAAmb,EAAAjY,GACA,IAAAuF,EAAAgM,EAAAyG,UAAAnb,EAAAC,EAAAmb,EAAAjY,GACAwZ,EAAAI,EAAArU,QAAAxH,MAAwCU,OAAA,SACxCoZ,EAAA2B,EAAAnB,MACAja,EAAAob,EAAApb,KACAD,EAAAC,EAAAmlC,qBAxxBA,QAwxBA,GAgBA,OAfA1rB,EAAApB,MACA+C,EAAAuE,EAAAlG,EAAAhb,IACA2c,EAAA0M,EAAArO,EAAA/a,IACA0c,EAAAgyB,EAAA3zB,EAAA9Y,MAAAkZ,EACAuB,EAAAkyB,EAAA7zB,EAAAhZ,OAAAmB,EACA6X,EAAAtS,OACAiU,EAAAT,KAAA,QACA5a,EAAAqyB,YAAApyB,KAAAqgB,YAAAtgB,GACAA,EAAAspB,QAAA,EACAtpB,EAAAsY,MACAtY,EAAA4a,KAAA,OACAS,EAAA+R,EAAAie,SAAA3sC,EAAAC,GACA0c,EAAA+R,EAAAwe,UAAA9xB,EAAAjY,GACA5B,EAAAqR,YAAAtR,GACAorC,EAAA/vB,EAAA,WACAA,GAEAjI,EAAAM,QAAAvU,KAAA,SAAAsc,EAAA/c,EAAAC,EAAAQ,GACA,IAAA+O,EAAA49B,EAAA,SACA1kC,EAAA0kC,EAAA,QACAjwB,EAAAiwB,EAAA,YACAptC,KAAA,EACAC,KAAA,EACAQ,KAAA,GACAiI,EAAAqY,EAAArM,EAAAihB,OAAA,mBAA4Crd,EAAAtY,EAAAssC,GAAAh0B,EAAArY,EAAAqsC,GAAAh0B,EAAAtY,EAAAssC,GAAA,GAC5C5jC,EAAA0nC,YAAA,EACAjzB,EAAAsjB,OAAA3pB,EAAArW,GACA0c,EAAA1R,IAAA,EACA+D,EAAAhO,MAAAkgB,QAAA2qB,EACA78B,EAAAu9B,UAAAT,EAAAz1B,EAAAy1B,EACA98B,EAAAy9B,YAAA,MACA,IAAA5mC,EAAA,IAAAujC,EAAAp6B,EAAAuN,GACA7b,GACAI,KAAA,OACAM,OAAA,OACAR,KAAAsT,EAAAoE,gBAAA1X,KACAX,QAEA4F,EAAAkuB,MAAA/kB,EACAnJ,EAAAqC,OACArC,EAAAynC,SAAA3wB,EACA9W,EAAA6V,KAAA,OACA7V,EAAAmV,MAAA/a,KAAAqW,EAAArW,GACA4F,EAAAmV,MAAAxb,IACAqG,EAAAmV,MAAAvb,IACAoG,EAAAmV,MAAAJ,EAAA,EACA/U,EAAAmV,MAAArY,EAAA,EACA+kC,EAAA7hC,EAAAnF,GACAsO,EAAAoD,YAAAuK,GACA3N,EAAAoD,YAAAlK,GACAqU,EAAAkZ,OAAArjB,YAAApD,GACA,IAAAogC,EAAAxC,EAAA,QAKA,OAJAwC,EAAAnkC,IAAA,EACA+D,EAAAoD,YAAAg9B,GACAvpC,EAAAupC,OACAvpC,EAAAlE,UAAAyU,GACAvQ,GAEAqO,EAAAM,QAAAkhB,QAAA,SAAAh0B,EAAAF,GACA,IAAAquC,EAAAvxC,KAAAm3B,OAAAz0B,MAWA,OAVA1C,KAAAoD,QACApD,KAAAkD,SACAE,WAAA,MACAF,WAAA,MACAquC,EAAAnuC,QACAmuC,EAAAruC,SACAquC,EAAA3H,KAAA,UAAAxmC,EAAA,IAAAF,EAAA,MACAlD,KAAAisC,UACAr2B,EAAAM,QAAAmhB,WAAAxhB,MAAA7V,UAAAisC,UAEAjsC,MAEA4V,EAAAM,QAAAmhB,WAAA,SAAAn2B,EAAAC,EAAAmb,EAAAjY,EAAAizB,GACA1hB,EAAAE,IAAA,qBAAA9V,UAAAisC,UAAA/qC,EAAAC,EAAAmb,EAAAjY,EAAAizB,IACA,IAGAyY,EAAAF,EAHAjD,EAAA5sC,KAAAk3B,UACA9zB,EAAAwpC,EAAAxpC,MACAF,EAAA0pC,EAAA1pC,OAqBA,OAnBAo0B,IAEAuY,EAAAzsC,EAAAkZ,EACAA,GAFAyzB,EAAA7sC,EAAAmB,GAEAjB,IACAlC,IAAAkC,EAAAkZ,EAAAyzB,GAAA,EAAAA,GAEA1rC,EAAAwrC,EAAA3sC,IACA/B,IAAA+B,EAAAmB,EAAAwrC,GAAA,EAAAA,IAGA7vC,KAAAisC,UAAA/qC,EAAAC,EAAAmb,EAAAjY,IAAAizB,GACAt3B,KAAA4wC,eACA3gB,IAAA/uB,EACAgvB,IAAA/uB,EACA0vB,MAAA+b,GAEA5sC,KAAA44B,QAAA,SAAAloB,GACAA,EAAArN,UAAA,SAEArD,MAGA4V,EAAAM,QAAAyJ,QAAA,SAAAtI,GACA,IAAAD,EAAAC,EAAA3L,SACA0L,EAAAo6B,YAAA9tC,OAAA,GACA0T,EAAAq6B,mBAAAC,QAAA,sCAIAt6B,EAAAo6B,YAAA,GAAAE,QAAA,sCAEA,KACAt6B,EAAAu6B,WAAAC,MAAAx6B,EAAAu6B,WAAAr7B,IAAA,wCACAg4B,EAAA,SAAA5c,GACA,OAAAta,EAAA5E,cAAA,SAAAkf,EAAA,mBAEc,MAAA9kB,GACd0hC,EAAA,SAAA5c,GACA,OAAAta,EAAA5E,cAAA,IAAAkf,EAAA,2DAIA9b,EAAAM,QAAAyJ,QAAA/J,EAAAuH,GAAA9F,KACAzB,EAAAM,QAAAC,OAAA,WACA,IAAA+1B,EAAAt2B,EAAA2b,cAAA1b,MAAA,EAAAY,WACA+a,EAAA0a,EAAA1a,UACAtuB,EAAAgpC,EAAAhpC,OAEAE,EAAA8oC,EAAA9oC,MACAlC,EAAAgrC,EAAAhrC,EACAC,EAAA+qC,EAAA/qC,EACA,IAAAqwB,EACA,UAAA2a,MAAA,4BAEA,IAAAtuB,EAAA,IAAAjI,EAAAsI,OACAzX,EAAAoX,EAAAsZ,OAAAvhB,EAAAuH,GAAA/F,IAAA5E,cAAA,OACA++B,EAAA9qC,EAAA/D,MA4BA,OA3BAxB,KAAA,EACAC,KAAA,EACAiC,KAAA,IACAF,KAAA,IACA2a,EAAAza,QACAya,EAAA3a,SACAE,WAAA,MACAF,WAAA,MACA2a,EAAAowB,UAAAT,MAAAz1B,EAAAy1B,MACA3vB,EAAAswB,YAAA,MACAtwB,EAAA8xB,KAAA/5B,EAAAuH,GAAA/F,IAAA5E,cAAA,QACAqL,EAAA8xB,KAAAjtC,MAAAkgB,QAAA,+EACAnc,EAAAqN,YAAA+J,EAAA8xB,MACA4B,EAAA3uB,QAAAhN,EAAAihB,OAAA,kHAAgIzzB,EAAAF,GAChI,GAAAsuB,GACA5b,EAAAuH,GAAA/F,IAAArC,KAAAjB,YAAArN,GACA8qC,EAAApZ,KAAAj3B,EAAA,KACAqwC,EAAArqC,IAAA/F,EAAA,KACAowC,EAAAlD,SAAA,YAEA7c,EAAA/T,WACA+T,EAAAlnB,aAAA7D,EAAA+qB,EAAA/T,YAEA+T,EAAA1d,YAAArN,GAGAoX,EAAA6uB,UAAA,aACA7uB,GAEAjI,EAAA5U,UAAA0+B,MAAA,WACA9pB,EAAAE,IAAA,gBAAA9V,MACAA,KAAAm3B,OAAA3Z,UAAA1F,EACA9X,KAAA2vC,KAAA/5B,EAAAuH,GAAA/F,IAAA5E,cAAA,QACAxS,KAAA2vC,KAAAjtC,MAAAkgB,QAAA,8FACA5iB,KAAAm3B,OAAArjB,YAAA9T,KAAA2vC,MACA3vC,KAAAovB,OAAApvB,KAAAkH,IAAA,MAEA0O,EAAA5U,UAAAuJ,OAAA,WAGA,QAAA9B,KAFAmN,EAAAE,IAAA,iBAAA9V,MACAA,KAAAm3B,OAAAtC,WAAA/R,YAAA9iB,KAAAm3B,QACAn3B,KACAA,KAAAyI,GAAA,mBAAAzI,KAAAyI,GAAAmN,EAAAwU,gBAAA3hB,GAAA,KAEA,UAGA,IAAA+2B,EAAA5pB,EAAAktB,GACA,QAAArD,KAAAnK,IAAApe,GAAAuoB,KAAAD,EAAAtoB,GAAAuoB,KACAD,EAAAC,GAAA,SAAApV,GACA,kBACA,IAAA9I,EAAA9K,UACA,OAAAzW,KAAA44B,QAAA,SAAAloB,GACAA,EAAA2Z,GAAAxU,MAAAnF,EAAA6Q,MAJA,CAOUke,MAER5pB,MAAAP,EAAAI,MAAAH,EAAAD,QAAAK,OA/oQFJ,EAAAD,QAAAJ","file":"pages.projects.network.show.af22c8ac.chunk.js","sourcesContent":["import Mousetrap from 'mousetrap';\nimport ShortcutsNavigation from './shortcuts_navigation';\n\nexport default class ShortcutsNetwork extends ShortcutsNavigation {\n  constructor(graph) {\n    super();\n\n    Mousetrap.bind(['left', 'h'], graph.scrollLeft);\n    Mousetrap.bind(['right', 'l'], graph.scrollRight);\n    Mousetrap.bind(['up', 'k'], graph.scrollUp);\n    Mousetrap.bind(['down', 'j'], graph.scrollDown);\n    Mousetrap.bind(['shift+up', 'shift+k'], graph.scrollTop);\n    Mousetrap.bind(['shift+down', 'shift+j'], graph.scrollBottom);\n\n    this.enabledHelp.push('.hidden-shortcut.network');\n  }\n}\n","import Raphael from 'raphael/raphael';\n\nRaphael.prototype.commitTooltip = function commitTooltip(x, y, commit) {\n  const boxWidth = 300;\n  const icon = this.image(gon.relative_url_root + commit.author.icon, x, y, 20, 20);\n  const nameText = this.text(x + 25, y + 10, commit.author.name);\n  const idText = this.text(x, y + 35, commit.id);\n  const messageText = this.text(x, y + 50, commit.message.replace(/\\r?\\n/g, ' \\n '));\n  const textSet = this.set(icon, nameText, idText, messageText).attr({\n    'text-anchor': 'start',\n    font: '12px Monaco, monospace',\n  });\n  nameText.attr({\n    font: '14px Arial',\n    'font-weight': 'bold',\n  });\n  idText.attr({\n    fill: '#AAA',\n  });\n  messageText.node.style['white-space'] = 'pre';\n  this.textWrap(messageText, boxWidth - 50);\n  const rect = this.rect(x - 10, y - 10, boxWidth, 100, 4).attr({\n    fill: '#FFF',\n    stroke: '#000',\n    'stroke-linecap': 'round',\n    'stroke-width': 2,\n  });\n  const tooltip = this.set(rect, textSet);\n  rect.attr({\n    height: tooltip.getBBox().height + 10,\n    width: tooltip.getBBox().width + 10,\n  });\n  tooltip.transform(['t', 20, 20]);\n  return tooltip;\n};\n\nRaphael.prototype.textWrap = function testWrap(t, width) {\n  const content = t.attr('text');\n  const abc = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  t.attr({\n    text: abc,\n  });\n  const letterWidth = t.getBBox().width / abc.length;\n  t.attr({\n    text: content,\n  });\n  const words = content.split(' ');\n  let x = 0;\n  const s = [];\n  for (let j = 0, len = words.length; j < len; j += 1) {\n    const word = words[j];\n    if (x + word.length * letterWidth > width) {\n      s.push('\\n');\n      x = 0;\n    }\n    if (word === '\\n') {\n      s.push('\\n');\n      x = 0;\n    } else {\n      s.push(`${word} `);\n      x += word.length * letterWidth;\n    }\n  }\n  t.attr({\n    text: s.join('').trim(),\n  });\n  const b = t.getBBox();\n  const h = Math.abs(b.y2) + 1;\n  return t.attr({\n    y: h,\n  });\n};\n\nexport default Raphael;\n","/* eslint-disable func-names, no-var, one-var, no-loop-func, consistent-return, no-unused-vars, prefer-template, prefer-arrow-callback, camelcase */\n\nimport $ from 'jquery';\nimport { __ } from '../locale';\nimport axios from '../lib/utils/axios_utils';\nimport flash from '../flash';\nimport Raphael from './raphael';\n\nexport default (function() {\n  function BranchGraph(element1, options1) {\n    this.element = element1;\n    this.options = options1;\n    this.scrollTop = this.scrollTop.bind(this);\n    this.scrollBottom = this.scrollBottom.bind(this);\n    this.scrollRight = this.scrollRight.bind(this);\n    this.scrollLeft = this.scrollLeft.bind(this);\n    this.scrollUp = this.scrollUp.bind(this);\n    this.scrollDown = this.scrollDown.bind(this);\n    this.preparedCommits = {};\n    this.mtime = 0;\n    this.mspace = 0;\n    this.parents = {};\n    this.colors = ['#000'];\n    this.offsetX = 150;\n    this.offsetY = 20;\n    this.unitTime = 30;\n    this.unitSpace = 10;\n    this.prev_start = -1;\n    this.load();\n  }\n\n  BranchGraph.prototype.load = function() {\n    axios\n      .get(this.options.url)\n      .then(({ data }) => {\n        $('.loading', this.element).hide();\n        this.prepareData(data.days, data.commits);\n        this.buildGraph();\n      })\n      .catch(() => __('Error fetching network graph.'));\n  };\n\n  BranchGraph.prototype.prepareData = function(days, commits) {\n    var c, ch, cw, j, len, ref;\n    this.days = days;\n    this.commits = commits;\n    this.collectParents();\n    this.graphHeight = $(this.element).height();\n    this.graphWidth = $(this.element).width();\n    ch = Math.max(this.graphHeight, this.offsetY + this.unitTime * this.mtime + 150);\n    cw = Math.max(this.graphWidth, this.offsetX + this.unitSpace * this.mspace + 300);\n    this.r = Raphael(this.element.get(0), cw, ch);\n    this.top = this.r.set();\n    this.barHeight = Math.max(this.graphHeight, this.unitTime * this.days.length + 320);\n    ref = this.commits;\n    for (j = 0, len = ref.length; j < len; j += 1) {\n      c = ref[j];\n      if (c.id in this.parents) {\n        c.isParent = true;\n      }\n      this.preparedCommits[c.id] = c;\n      this.markCommit(c);\n    }\n    return this.collectColors();\n  };\n\n  BranchGraph.prototype.collectParents = function() {\n    var c, j, len, p, ref, results;\n    ref = this.commits;\n    results = [];\n    for (j = 0, len = ref.length; j < len; j += 1) {\n      c = ref[j];\n      this.mtime = Math.max(this.mtime, c.time);\n      this.mspace = Math.max(this.mspace, c.space);\n      results.push(\n        function() {\n          var l, len1, ref1, results1;\n          ref1 = c.parents;\n          results1 = [];\n          for (l = 0, len1 = ref1.length; l < len1; l += 1) {\n            p = ref1[l];\n            this.parents[p[0]] = true;\n            results1.push((this.mspace = Math.max(this.mspace, p[1])));\n          }\n          return results1;\n        }.call(this),\n      );\n    }\n    return results;\n  };\n\n  BranchGraph.prototype.collectColors = function() {\n    var k, results;\n    k = 0;\n    results = [];\n    while (k < this.mspace) {\n      this.colors.push(Raphael.getColor(0.8));\n      // Skipping a few colors in the spectrum to get more contrast between colors\n      Raphael.getColor();\n      Raphael.getColor();\n      results.push((k += 1));\n    }\n    return results;\n  };\n\n  BranchGraph.prototype.buildGraph = function() {\n    var cuday, cumonth, day, j, len, mm, ref;\n    const { r } = this;\n    cuday = 0;\n    cumonth = '';\n    r.rect(0, 0, 40, this.barHeight).attr({\n      fill: '#222',\n    });\n    r.rect(40, 0, 30, this.barHeight).attr({\n      fill: '#444',\n    });\n    ref = this.days;\n\n    for (mm = 0, len = ref.length; mm < len; mm += 1) {\n      day = ref[mm];\n      if (cuday !== day[0] || cumonth !== day[1]) {\n        // Dates\n        r.text(55, this.offsetY + this.unitTime * mm, day[0]).attr({\n          font: '12px Monaco, monospace',\n          fill: '#BBB',\n        });\n        [cuday] = day;\n      }\n      if (cumonth !== day[1]) {\n        // Months\n        r.text(20, this.offsetY + this.unitTime * mm, day[1]).attr({\n          font: '12px Monaco, monospace',\n          fill: '#EEE',\n        });\n\n        // eslint-disable-next-line prefer-destructuring\n        cumonth = day[1];\n      }\n    }\n    this.renderPartialGraph();\n    return this.bindEvents();\n  };\n\n  BranchGraph.prototype.renderPartialGraph = function() {\n    var commit, end, i, isGraphEdge, start, x, y;\n    start = Math.floor((this.element.scrollTop() - this.offsetY) / this.unitTime) - 10;\n    if (start < 0) {\n      isGraphEdge = true;\n      start = 0;\n    }\n    end = start + 40;\n    if (this.commits.length < end) {\n      isGraphEdge = true;\n      end = this.commits.length;\n    }\n    if (this.prev_start === -1 || Math.abs(this.prev_start - start) > 10 || isGraphEdge) {\n      i = start;\n      this.prev_start = start;\n      while (i < end) {\n        commit = this.commits[i];\n        i += 1;\n        if (commit.hasDrawn !== true) {\n          x = this.offsetX + this.unitSpace * (this.mspace - commit.space);\n          y = this.offsetY + this.unitTime * commit.time;\n          this.drawDot(x, y, commit);\n          this.drawLines(x, y, commit);\n          this.appendLabel(x, y, commit);\n          this.appendAnchor(x, y, commit);\n          commit.hasDrawn = true;\n        }\n      }\n      return this.top.toFront();\n    }\n  };\n\n  BranchGraph.prototype.bindEvents = function() {\n    const { element } = this;\n\n    return $(element).scroll(\n      (function(_this) {\n        return function(event) {\n          return _this.renderPartialGraph();\n        };\n      })(this),\n    );\n  };\n\n  BranchGraph.prototype.scrollDown = function() {\n    this.element.scrollTop(this.element.scrollTop() + 50);\n    return this.renderPartialGraph();\n  };\n\n  BranchGraph.prototype.scrollUp = function() {\n    this.element.scrollTop(this.element.scrollTop() - 50);\n    return this.renderPartialGraph();\n  };\n\n  BranchGraph.prototype.scrollLeft = function() {\n    this.element.scrollLeft(this.element.scrollLeft() - 50);\n    return this.renderPartialGraph();\n  };\n\n  BranchGraph.prototype.scrollRight = function() {\n    this.element.scrollLeft(this.element.scrollLeft() + 50);\n    return this.renderPartialGraph();\n  };\n\n  BranchGraph.prototype.scrollBottom = function() {\n    return this.element.scrollTop(this.element.find('svg').height());\n  };\n\n  BranchGraph.prototype.scrollTop = function() {\n    return this.element.scrollTop(0);\n  };\n\n  BranchGraph.prototype.appendLabel = function(x, y, commit) {\n    var label, rect, shortrefs, text, textbox, triangle;\n\n    if (!commit.refs) {\n      return;\n    }\n\n    const { r } = this;\n    shortrefs = commit.refs;\n    // Truncate if longer than 15 chars\n    if (shortrefs.length > 17) {\n      shortrefs = shortrefs.substr(0, 15) + '…';\n    }\n    text = r.text(x + 4, y, shortrefs).attr({\n      'text-anchor': 'start',\n      font: '10px Monaco, monospace',\n      fill: '#FFF',\n      title: commit.refs,\n    });\n    textbox = text.getBBox();\n    // Create rectangle based on the size of the textbox\n    rect = r.rect(x, y - 7, textbox.width + 5, textbox.height + 5, 4).attr({\n      fill: '#000',\n      'fill-opacity': 0.5,\n      stroke: 'none',\n    });\n    triangle = r.path(['M', x - 5, y, 'L', x - 15, y - 4, 'L', x - 15, y + 4, 'Z']).attr({\n      fill: '#000',\n      'fill-opacity': 0.5,\n      stroke: 'none',\n    });\n    label = r.set(rect, text);\n    label.transform(['t', -rect.getBBox().width - 15, 0]);\n    // Set text to front\n    return text.toFront();\n  };\n\n  BranchGraph.prototype.appendAnchor = function(x, y, commit) {\n    const { r, top, options } = this;\n    const anchor = r\n      .circle(x, y, 10)\n      .attr({\n        fill: '#000',\n        opacity: 0,\n        cursor: 'pointer',\n      })\n      .click(function() {\n        return window.open(options.commit_url.replace('%s', commit.id), '_blank');\n      })\n      .hover(\n        function() {\n          this.tooltip = r.commitTooltip(x + 5, y, commit);\n          return top.push(this.tooltip.insertBefore(this));\n        },\n        function() {\n          return this.tooltip && this.tooltip.remove() && delete this.tooltip;\n        },\n      );\n    return top.push(anchor);\n  };\n\n  BranchGraph.prototype.drawDot = function(x, y, commit) {\n    const { r } = this;\n    r.circle(x, y, 3).attr({\n      fill: this.colors[commit.space],\n      stroke: 'none',\n    });\n\n    const avatar_box_x = this.offsetX + this.unitSpace * this.mspace + 10;\n    const avatar_box_y = y - 10;\n\n    r.rect(avatar_box_x, avatar_box_y, 20, 20).attr({\n      stroke: this.colors[commit.space],\n      'stroke-width': 2,\n    });\n    r.image(commit.author.icon, avatar_box_x, avatar_box_y, 20, 20);\n    return r\n      .text(this.offsetX + this.unitSpace * this.mspace + 35, y, commit.message.split('\\n')[0])\n      .attr({\n        'text-anchor': 'start',\n        font: '14px Monaco, monospace',\n      });\n  };\n\n  BranchGraph.prototype.drawLines = function(x, y, commit) {\n    var arrow, color, i, len, offset, parent, parentCommit, parentX1, parentX2, parentY, route;\n    const { r } = this;\n    const ref = commit.parents;\n    const results = [];\n\n    for (i = 0, len = ref.length; i < len; i += 1) {\n      parent = ref[i];\n      parentCommit = this.preparedCommits[parent[0]];\n      parentY = this.offsetY + this.unitTime * parentCommit.time;\n      parentX1 = this.offsetX + this.unitSpace * (this.mspace - parentCommit.space);\n      parentX2 = this.offsetX + this.unitSpace * (this.mspace - parent[1]);\n      // Set line color\n      if (parentCommit.space <= commit.space) {\n        color = this.colors[commit.space];\n      } else {\n        color = this.colors[parentCommit.space];\n      }\n      // Build line shape\n      if (parent[1] === commit.space) {\n        offset = [0, 5];\n        arrow = 'l-2,5,4,0,-2,-5,0,5';\n      } else if (parent[1] < commit.space) {\n        offset = [3, 3];\n        arrow = 'l5,0,-2,4,-3,-4,4,2';\n      } else {\n        offset = [-3, 3];\n        arrow = 'l-5,0,2,4,3,-4,-4,2';\n      }\n      // Start point\n      route = ['M', x + offset[0], y + offset[1]];\n      // Add arrow if not first parent\n      if (i > 0) {\n        route.push(arrow);\n      }\n      // Circumvent if overlap\n      if (commit.space !== parentCommit.space || commit.space !== parent[1]) {\n        route.push('L', parentX2, y + 10, 'L', parentX2, parentY - 5);\n      }\n      // End point\n      route.push('L', parentX1, parentY);\n      results.push(\n        r.path(route).attr({\n          stroke: color,\n          'stroke-width': 2,\n        }),\n      );\n    }\n    return results;\n  };\n\n  BranchGraph.prototype.markCommit = function(commit) {\n    if (commit.id === this.options.commit_id) {\n      const { r } = this;\n      const x = this.offsetX + this.unitSpace * (this.mspace - commit.space);\n      const y = this.offsetY + this.unitTime * commit.time;\n      r.path(['M', x + 5, y, 'L', x + 15, y + 4, 'L', x + 15, y - 4, 'Z']).attr({\n        fill: '#000',\n        'fill-opacity': 0.5,\n        stroke: 'none',\n      });\n      // Displayed in the center\n      return this.element.scrollTop(y - this.graphHeight / 2);\n    }\n  };\n\n  return BranchGraph;\n})();\n","/* eslint-disable func-names, no-var, prefer-template */\n\nimport $ from 'jquery';\nimport BranchGraph from '../../../network/branch_graph';\n\nexport default (function() {\n  function Network(opts) {\n    var vph;\n    $('#filter_ref').click(function() {\n      return $(this)\n        .closest('form')\n        .submit();\n    });\n    this.branch_graph = new BranchGraph($('.network-graph'), opts);\n    vph = $(window).height() - 250;\n    $('.network-graph').css({\n      height: vph + 'px',\n    });\n  }\n\n  return Network;\n})();\n","import $ from 'jquery';\nimport ShortcutsNetwork from '~/behaviors/shortcuts/shortcuts_network';\nimport Network from '../network';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  if (!$('.network-graph').length) return;\n\n  const networkGraph = new Network({\n    url: $('.network-graph').attr('data-url'),\n    commit_url: $('.network-graph').attr('data-commit-url'),\n    ref: $('.network-graph').attr('data-ref'),\n    commit_id: $('.network-graph').attr('data-commit-id'),\n  });\n\n  // eslint-disable-next-line no-new\n  new ShortcutsNetwork(networkGraph.branch_graph);\n});\n","import Mousetrap from 'mousetrap';\nimport findAndFollowLink from '../../lib/utils/navigation_utility';\nimport Shortcuts from './shortcuts';\n\nexport default class ShortcutsNavigation extends Shortcuts {\n  constructor() {\n    super();\n\n    Mousetrap.bind('g p', () => findAndFollowLink('.shortcuts-project'));\n    Mousetrap.bind('g v', () => findAndFollowLink('.shortcuts-project-activity'));\n    Mousetrap.bind('g f', () => findAndFollowLink('.shortcuts-tree'));\n    Mousetrap.bind('g c', () => findAndFollowLink('.shortcuts-commits'));\n    Mousetrap.bind('g j', () => findAndFollowLink('.shortcuts-builds'));\n    Mousetrap.bind('g n', () => findAndFollowLink('.shortcuts-network'));\n    Mousetrap.bind('g d', () => findAndFollowLink('.shortcuts-repository-charts'));\n    Mousetrap.bind('g i', () => findAndFollowLink('.shortcuts-issues'));\n    Mousetrap.bind('g b', () => findAndFollowLink('.shortcuts-issue-boards'));\n    Mousetrap.bind('g m', () => findAndFollowLink('.shortcuts-merge_requests'));\n    Mousetrap.bind('g w', () => findAndFollowLink('.shortcuts-wiki'));\n    Mousetrap.bind('g s', () => findAndFollowLink('.shortcuts-snippets'));\n    Mousetrap.bind('g k', () => findAndFollowLink('.shortcuts-kubernetes'));\n    Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments'));\n    Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics'));\n    Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue'));\n\n    this.enabledHelp.push('.hidden-shortcut.project');\n  }\n}\n","import $ from 'jquery';\nimport AccessorUtilities from './lib/utils/accessor';\n\nexport default class ProjectSelectComboButton {\n  constructor(select) {\n    this.projectSelectInput = $(select);\n    this.newItemBtn = $('.new-project-item-link');\n    this.resourceType = this.newItemBtn.data('type');\n    this.resourceLabel = this.newItemBtn.data('label');\n    this.formattedText = this.deriveTextVariants();\n    this.groupId = this.projectSelectInput.data('groupId');\n    this.bindEvents();\n    this.initLocalStorage();\n  }\n\n  bindEvents() {\n    this.projectSelectInput\n      .siblings('.new-project-item-select-button')\n      .on('click', e => this.openDropdown(e));\n\n    this.newItemBtn.on('click', e => {\n      if (!this.getProjectFromLocalStorage()) {\n        e.preventDefault();\n        this.openDropdown(e);\n      }\n    });\n\n    this.projectSelectInput.on('change', () => this.selectProject());\n  }\n\n  initLocalStorage() {\n    const localStorageIsSafe = AccessorUtilities.isLocalStorageAccessSafe();\n\n    if (localStorageIsSafe) {\n      this.localStorageKey = [\n        'group',\n        this.groupId,\n        this.formattedText.localStorageItemType,\n        'recent-project',\n      ].join('-');\n      this.setBtnTextFromLocalStorage();\n    }\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  openDropdown(event) {\n    $(event.currentTarget)\n      .siblings('.project-item-select')\n      .select2('open');\n  }\n\n  selectProject() {\n    const selectedProjectData = JSON.parse(this.projectSelectInput.val());\n    const projectUrl = `${selectedProjectData.url}/${this.projectSelectInput.data('relativePath')}`;\n    const projectName = selectedProjectData.name;\n\n    const projectMeta = {\n      url: projectUrl,\n      name: projectName,\n    };\n\n    this.setNewItemBtnAttributes(projectMeta);\n    this.setProjectInLocalStorage(projectMeta);\n  }\n\n  setBtnTextFromLocalStorage() {\n    const cachedProjectData = this.getProjectFromLocalStorage();\n\n    this.setNewItemBtnAttributes(cachedProjectData);\n  }\n\n  setNewItemBtnAttributes(project) {\n    if (project) {\n      this.newItemBtn.attr('href', project.url);\n      this.newItemBtn.text(`${this.formattedText.defaultTextPrefix} in ${project.name}`);\n    } else {\n      this.newItemBtn.text(`Select project to create ${this.formattedText.presetTextSuffix}`);\n    }\n  }\n\n  getProjectFromLocalStorage() {\n    const projectString = localStorage.getItem(this.localStorageKey);\n\n    return JSON.parse(projectString);\n  }\n\n  setProjectInLocalStorage(projectMeta) {\n    const projectString = JSON.stringify(projectMeta);\n\n    localStorage.setItem(this.localStorageKey, projectString);\n  }\n\n  deriveTextVariants() {\n    const defaultTextPrefix = this.resourceLabel;\n\n    // the trailing slice call depluralizes each of these strings (e.g. new-issues -> new-issue)\n    const localStorageItemType = `new-${this.resourceType\n      .split('_')\n      .join('-')\n      .slice(0, -1)}`;\n    const presetTextSuffix = this.resourceType\n      .split('_')\n      .join(' ')\n      .slice(0, -1);\n\n    return {\n      localStorageItemType, // new-issue / new-merge-request\n      defaultTextPrefix, // New issue / New merge request\n      presetTextSuffix, // issue / merge request\n    };\n  }\n}\n","/* eslint-disable func-names, no-var, object-shorthand, one-var, no-else-return */\n\nimport $ from 'jquery';\nimport Api from './api';\nimport ProjectSelectComboButton from './project_select_combo_button';\n\nexport default function projectSelect() {\n  $('.ajax-project-select').each(function(i, select) {\n    var placeholder;\n    const simpleFilter = $(select).data('simpleFilter') || false;\n    this.groupId = $(select).data('groupId');\n    this.includeGroups = $(select).data('includeGroups');\n    this.allProjects = $(select).data('allProjects') || false;\n    this.orderBy = $(select).data('orderBy') || 'id';\n    this.withIssuesEnabled = $(select).data('withIssuesEnabled');\n    this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');\n    this.withShared =\n      $(select).data('withShared') === undefined ? true : $(select).data('withShared');\n    this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;\n    this.allowClear = $(select).data('allowClear') || false;\n\n    placeholder = 'Search for project';\n    if (this.includeGroups) {\n      placeholder += ' or group';\n    }\n\n    $(select).select2({\n      placeholder: placeholder,\n      minimumInputLength: 0,\n      query: (function(_this) {\n        return function(query) {\n          var finalCallback, projectsCallback;\n          finalCallback = function(projects) {\n            var data;\n            data = {\n              results: projects,\n            };\n            return query.callback(data);\n          };\n          if (_this.includeGroups) {\n            projectsCallback = function(projects) {\n              var groupsCallback;\n              groupsCallback = function(groups) {\n                var data;\n                data = groups.concat(projects);\n                return finalCallback(data);\n              };\n              return Api.groups(query.term, {}, groupsCallback);\n            };\n          } else {\n            projectsCallback = finalCallback;\n          }\n          if (_this.groupId) {\n            return Api.groupProjects(\n              _this.groupId,\n              query.term,\n              {\n                with_issues_enabled: _this.withIssuesEnabled,\n                with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n                with_shared: _this.withShared,\n                include_subgroups: _this.includeProjectsInSubgroups,\n              },\n              projectsCallback,\n            );\n          } else {\n            return Api.projects(\n              query.term,\n              {\n                order_by: _this.orderBy,\n                with_issues_enabled: _this.withIssuesEnabled,\n                with_merge_requests_enabled: _this.withMergeRequestsEnabled,\n                membership: !_this.allProjects,\n              },\n              projectsCallback,\n            );\n          }\n        };\n      })(this),\n      id: function(project) {\n        if (simpleFilter) return project.id;\n        return JSON.stringify({\n          name: project.name,\n          url: project.web_url,\n        });\n      },\n      text: function(project) {\n        return project.name_with_namespace || project.name;\n      },\n\n      initSelection: function(el, callback) {\n        return Api.project(el.val()).then(({ data }) => callback(data));\n      },\n\n      allowClear: this.allowClear,\n\n      dropdownCssClass: 'ajax-project-dropdown',\n    });\n    if (simpleFilter) return select;\n    return new ProjectSelectComboButton(select);\n  });\n}\n","/* eslint-disable func-names, no-var, no-return-assign, one-var, object-shorthand, vars-on-top */\n\nimport $ from 'jquery';\nimport Cookies from 'js-cookie';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport projectSelect from '../../project_select';\n\nexport default class Project {\n  constructor() {\n    const $cloneOptions = $('ul.clone-options-dropdown');\n    const $projectCloneField = $('#project_clone');\n    const $cloneBtnLabel = $('.js-git-clone-holder .js-clone-dropdown-label');\n    const mobileCloneField = document.querySelector(\n      '.js-mobile-git-clone .js-clone-dropdown-label',\n    );\n\n    const selectedCloneOption = $cloneBtnLabel.text().trim();\n    if (selectedCloneOption.length > 0) {\n      $(`a:contains('${selectedCloneOption}')`, $cloneOptions).addClass('is-active');\n    }\n\n    $('a', $cloneOptions).on('click', e => {\n      e.preventDefault();\n      const $this = $(e.currentTarget);\n      const url = $this.attr('href');\n      const cloneType = $this.data('cloneType');\n\n      $('.is-active', $cloneOptions).removeClass('is-active');\n      $(`a[data-clone-type=\"${cloneType}\"]`).each(function() {\n        const $el = $(this);\n        const activeText = $el.find('.dropdown-menu-inner-title').text();\n        const $container = $el.closest('.project-clone-holder');\n        const $label = $container.find('.js-clone-dropdown-label');\n\n        $el.toggleClass('is-active');\n        $label.text(activeText);\n      });\n\n      if (mobileCloneField) {\n        mobileCloneField.dataset.clipboardText = url;\n      } else {\n        $projectCloneField.val(url);\n      }\n      $('.js-git-empty .js-clone').text(url);\n    });\n    // Ref switcher\n    Project.initRefSwitcher();\n    $('.project-refs-select').on('change', function() {\n      return $(this)\n        .parents('form')\n        .submit();\n    });\n    $('.hide-no-ssh-message').on('click', function(e) {\n      Cookies.set('hide_no_ssh_message', 'false');\n      $(this)\n        .parents('.no-ssh-key-message')\n        .remove();\n      return e.preventDefault();\n    });\n    $('.hide-no-password-message').on('click', function(e) {\n      Cookies.set('hide_no_password_message', 'false');\n      $(this)\n        .parents('.no-password-message')\n        .remove();\n      return e.preventDefault();\n    });\n    $('.hide-auto-devops-implicitly-enabled-banner').on('click', function(e) {\n      const projectId = $(this).data('project-id');\n      const cookieKey = `hide_auto_devops_implicitly_enabled_banner_${projectId}`;\n      Cookies.set(cookieKey, 'false');\n      $(this)\n        .parents('.auto-devops-implicitly-enabled-banner')\n        .remove();\n      return e.preventDefault();\n    });\n    Project.projectSelectDropdown();\n  }\n\n  static projectSelectDropdown() {\n    projectSelect();\n    $('.project-item-select').on('click', e => Project.changeProject($(e.currentTarget).val()));\n  }\n\n  static changeProject(url) {\n    return (window.location = url);\n  }\n\n  static initRefSwitcher() {\n    var refListItem = document.createElement('li');\n    var refLink = document.createElement('a');\n\n    refLink.href = '#';\n\n    return $('.js-project-refs-dropdown').each(function() {\n      var $dropdown, selected;\n      $dropdown = $(this);\n      selected = $dropdown.data('selected');\n      return $dropdown.glDropdown({\n        data(term, callback) {\n          axios\n            .get($dropdown.data('refsUrl'), {\n              params: {\n                ref: $dropdown.data('ref'),\n                search: term,\n              },\n            })\n            .then(({ data }) => callback(data))\n            .catch(() => flash(__('An error occurred while getting projects')));\n        },\n        selectable: true,\n        filterable: true,\n        filterRemote: true,\n        filterByText: true,\n        inputFieldName: $dropdown.data('inputFieldName'),\n        fieldName: $dropdown.data('fieldName'),\n        renderRow: function(ref) {\n          var li = refListItem.cloneNode(false);\n\n          if (ref.header != null) {\n            li.className = 'dropdown-header';\n            li.textContent = ref.header;\n          } else {\n            var link = refLink.cloneNode(false);\n\n            if (ref === selected) {\n              link.className = 'is-active';\n            }\n\n            link.textContent = ref;\n            link.dataset.ref = ref;\n\n            li.appendChild(link);\n          }\n\n          return li;\n        },\n        id: function(obj, $el) {\n          return $el.attr('data-ref');\n        },\n        toggleLabel: function(obj, $el) {\n          return $el.text().trim();\n        },\n        clicked: function(options) {\n          const { e } = options;\n          e.preventDefault();\n          if ($('input[name=\"ref\"]').length) {\n            var $form = $dropdown.closest('form');\n\n            var $visit = $dropdown.data('visit');\n            var shouldVisit = $visit ? true : $visit;\n            var action = $form.attr('action');\n            var divider = action.indexOf('?') === -1 ? '?' : '&';\n            if (shouldVisit) {\n              visitUrl(`${action}${divider}${$form.serialize()}`);\n            }\n          }\n        },\n      });\n    });\n  }\n}\n","import initDismissableCallout from '~/dismissable_callout';\nimport initGkeDropdowns from '~/projects/gke_cluster_dropdowns';\nimport Project from './project';\nimport ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  const { page } = document.body.dataset;\n  const newClusterViews = [\n    'projects:clusters:new',\n    'projects:clusters:create_gcp',\n    'projects:clusters:create_user',\n  ];\n\n  if (newClusterViews.indexOf(page) > -1) {\n    initDismissableCallout('.gcp-signup-offer');\n    initGkeDropdowns();\n  }\n\n  new Project(); // eslint-disable-line no-new\n  new ShortcutsNavigation(); // eslint-disable-line no-new\n});\n","// ┌───────────────────────────────────────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.2.0 - JavaScript Vector Library                                                             │ \\\\\n// ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2016 Dmitry Baranovskiy (http://raphaeljs.com)                                       │ \\\\\n// │ Copyright © 2008-2016 Sencha Labs (http://sencha.com)                                                 │ \\\\\n// ├───────────────────────────────────────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (https://github.com/DmitryBaranovskiy/raphael/blob/master/license.txt) license.│ \\\\\n// └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ \\\\\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Raphael\"] = factory();\n\telse\n\t\troot[\"Raphael\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(3), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\n\t    return R;\n\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function(eve) {\n\n\t    /*\\\n\t     * Raphael\n\t     [ method ]\n\t     **\n\t     * Creates a canvas object on which to draw.\n\t     * You must do this first, as all future calls to drawing methods\n\t     * from this instance will be bound to this canvas.\n\t     > Parameters\n\t     **\n\t     - container (HTMLElement|string) DOM element or its ID which is going to be a parent for drawing surface\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - x (number)\n\t     - y (number)\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - all (array) (first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, <attributes>}). See @Paper.add.\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - onReadyCallback (function) function that is going to be called on DOM ready event. You can also subscribe to this event via Eve’s “DOMLoad” event. In this case method returns `undefined`.\n\t     = (object) @Paper\n\t     > Usage\n\t     | // Each of the following examples create a canvas\n\t     | // that is 320px wide by 200px high.\n\t     | // Canvas is created at the viewport’s 10,50 coordinate.\n\t     | var paper = Raphael(10, 50, 320, 200);\n\t     | // Canvas is created at the top left corner of the #notepad element\n\t     | // (or its top right corner in dir=\"rtl\" elements)\n\t     | var paper = Raphael(document.getElementById(\"notepad\"), 320, 200);\n\t     | // Same as above\n\t     | var paper = Raphael(\"notepad\", 320, 200);\n\t     | // Image dump\n\t     | var set = Raphael([\"notepad\", 320, 200, {\n\t     |     type: \"rect\",\n\t     |     x: 10,\n\t     |     y: 10,\n\t     |     width: 25,\n\t     |     height: 25,\n\t     |     stroke: \"#f00\"\n\t     | }, {\n\t     |     type: \"text\",\n\t     |     x: 30,\n\t     |     y: 40,\n\t     |     text: \"Dump\"\n\t     | }]);\n\t    \\*/\n\t    function R(first) {\n\t        if (R.is(first, \"function\")) {\n\t            return loaded ? first() : eve.on(\"raphael.DOMload\", first);\n\t        } else if (R.is(first, array)) {\n\t            return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first);\n\t        } else {\n\t            var args = Array.prototype.slice.call(arguments, 0);\n\t            if (R.is(args[args.length - 1], \"function\")) {\n\t                var f = args.pop();\n\t                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on(\"raphael.DOMload\", function () {\n\t                    f.call(R._engine.create[apply](R, args));\n\t                });\n\t            } else {\n\t                return R._engine.create[apply](R, arguments);\n\t            }\n\t        }\n\t    }\n\t    R.version = \"2.2.0\";\n\t    R.eve = eve;\n\t    var loaded,\n\t        separator = /[, ]+/,\n\t        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},\n\t        formatrg = /\\{(\\d+)\\}/g,\n\t        proto = \"prototype\",\n\t        has = \"hasOwnProperty\",\n\t        g = {\n\t            doc: document,\n\t            win: window\n\t        },\n\t        oldRaphael = {\n\t            was: Object.prototype[has].call(g.win, \"Raphael\"),\n\t            is: g.win.Raphael\n\t        },\n\t        Paper = function () {\n\t            /*\\\n\t             * Paper.ca\n\t             [ property (object) ]\n\t             **\n\t             * Shortcut for @Paper.customAttributes\n\t            \\*/\n\t            /*\\\n\t             * Paper.customAttributes\n\t             [ property (object) ]\n\t             **\n\t             * If you have a set of attributes that you would like to represent\n\t             * as a function of some number you can do it easily with custom attributes:\n\t             > Usage\n\t             | paper.customAttributes.hue = function (num) {\n\t             |     num = num % 1;\n\t             |     return {fill: \"hsb(\" + num + \", 0.75, 1)\"};\n\t             | };\n\t             | // Custom attribute “hue” will change fill\n\t             | // to be given hue with fixed saturation and brightness.\n\t             | // Now you can use it like this:\n\t             | var c = paper.circle(10, 10, 10).attr({hue: .45});\n\t             | // or even like this:\n\t             | c.animate({hue: 1}, 1e3);\n\t             |\n\t             | // You could also create custom attribute\n\t             | // with multiple parameters:\n\t             | paper.customAttributes.hsb = function (h, s, b) {\n\t             |     return {fill: \"hsb(\" + [h, s, b].join(\",\") + \")\"};\n\t             | };\n\t             | c.attr({hsb: \"0.5 .8 1\"});\n\t             | c.animate({hsb: [1, 0, 0.5]}, 1e3);\n\t            \\*/\n\t            this.ca = this.customAttributes = {};\n\t        },\n\t        paperproto,\n\t        appendChild = \"appendChild\",\n\t        apply = \"apply\",\n\t        concat = \"concat\",\n\t        supportsTouch = ('ontouchstart' in g.win) || g.win.DocumentTouch && g.doc instanceof DocumentTouch, //taken from Modernizr touch test\n\t        E = \"\",\n\t        S = \" \",\n\t        Str = String,\n\t        split = \"split\",\n\t        events = \"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[split](S),\n\t        touchMap = {\n\t            mousedown: \"touchstart\",\n\t            mousemove: \"touchmove\",\n\t            mouseup: \"touchend\"\n\t        },\n\t        lowerCase = Str.prototype.toLowerCase,\n\t        math = Math,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        PI = math.PI,\n\t        nu = \"number\",\n\t        string = \"string\",\n\t        array = \"array\",\n\t        toString = \"toString\",\n\t        fillString = \"fill\",\n\t        objectToString = Object.prototype.toString,\n\t        paper = {},\n\t        push = \"push\",\n\t        ISURL = R._ISURL = /^url\\(['\"]?(.+?)['\"]?\\)$/i,\n\t        colourRegExp = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,\n\t        isnan = {\"NaN\": 1, \"Infinity\": 1, \"-Infinity\": 1},\n\t        bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n\t        round = math.round,\n\t        setAttribute = \"setAttribute\",\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        upperCase = Str.prototype.toUpperCase,\n\t        availableAttrs = R._availableAttrs = {\n\t            \"arrow-end\": \"none\",\n\t            \"arrow-start\": \"none\",\n\t            blur: 0,\n\t            \"clip-rect\": \"0 0 1e9 1e9\",\n\t            cursor: \"default\",\n\t            cx: 0,\n\t            cy: 0,\n\t            fill: \"#fff\",\n\t            \"fill-opacity\": 1,\n\t            font: '10px \"Arial\"',\n\t            \"font-family\": '\"Arial\"',\n\t            \"font-size\": \"10\",\n\t            \"font-style\": \"normal\",\n\t            \"font-weight\": 400,\n\t            gradient: 0,\n\t            height: 0,\n\t            href: \"http://raphaeljs.com/\",\n\t            \"letter-spacing\": 0,\n\t            opacity: 1,\n\t            path: \"M0,0\",\n\t            r: 0,\n\t            rx: 0,\n\t            ry: 0,\n\t            src: \"\",\n\t            stroke: \"#000\",\n\t            \"stroke-dasharray\": \"\",\n\t            \"stroke-linecap\": \"butt\",\n\t            \"stroke-linejoin\": \"butt\",\n\t            \"stroke-miterlimit\": 0,\n\t            \"stroke-opacity\": 1,\n\t            \"stroke-width\": 1,\n\t            target: \"_blank\",\n\t            \"text-anchor\": \"middle\",\n\t            title: \"Raphael\",\n\t            transform: \"\",\n\t            width: 0,\n\t            x: 0,\n\t            y: 0,\n\t            \"class\": \"\"\n\t        },\n\t        availableAnimAttrs = R._availableAnimAttrs = {\n\t            blur: nu,\n\t            \"clip-rect\": \"csv\",\n\t            cx: nu,\n\t            cy: nu,\n\t            fill: \"colour\",\n\t            \"fill-opacity\": nu,\n\t            \"font-size\": nu,\n\t            height: nu,\n\t            opacity: nu,\n\t            path: \"path\",\n\t            r: nu,\n\t            rx: nu,\n\t            ry: nu,\n\t            stroke: \"colour\",\n\t            \"stroke-opacity\": nu,\n\t            \"stroke-width\": nu,\n\t            transform: \"transform\",\n\t            width: nu,\n\t            x: nu,\n\t            y: nu\n\t        },\n\t        whitespace = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]/g,\n\t        commaSpaces = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,\n\t        hsrg = {hs: 1, rg: 1},\n\t        p2s = /,?([achlmqrstvxz]),?/gi,\n\t        pathCommand = /([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        tCommand = /([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        pathValues = /(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/ig,\n\t        radial_gradient = R._radial_gradient = /^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,\n\t        eldata = {},\n\t        sortByKey = function (a, b) {\n\t            return a.key - b.key;\n\t        },\n\t        sortByNumber = function (a, b) {\n\t            return toFloat(a) - toFloat(b);\n\t        },\n\t        fun = function () {},\n\t        pipe = function (x) {\n\t            return x;\n\t        },\n\t        rectPath = R._rectPath = function (x, y, w, h, r) {\n\t            if (r) {\n\t                return [[\"M\", x + r, y], [\"l\", w - r * 2, 0], [\"a\", r, r, 0, 0, 1, r, r], [\"l\", 0, h - r * 2], [\"a\", r, r, 0, 0, 1, -r, r], [\"l\", r * 2 - w, 0], [\"a\", r, r, 0, 0, 1, -r, -r], [\"l\", 0, r * 2 - h], [\"a\", r, r, 0, 0, 1, r, -r], [\"z\"]];\n\t            }\n\t            return [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n\t        },\n\t        ellipsePath = function (x, y, rx, ry) {\n\t            if (ry == null) {\n\t                ry = rx;\n\t            }\n\t            return [[\"M\", x, y], [\"m\", 0, -ry], [\"a\", rx, ry, 0, 1, 1, 0, 2 * ry], [\"a\", rx, ry, 0, 1, 1, 0, -2 * ry], [\"z\"]];\n\t        },\n\t        getPath = R._getPath = {\n\t            path: function (el) {\n\t                return el.attr(\"path\");\n\t            },\n\t            circle: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.r);\n\t            },\n\t            ellipse: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.rx, a.ry);\n\t            },\n\t            rect: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height, a.r);\n\t            },\n\t            image: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height);\n\t            },\n\t            text: function (el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            },\n\t            set : function(el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            }\n\t        },\n\t        /*\\\n\t         * Raphael.mapPath\n\t         [ method ]\n\t         **\n\t         * Transform the path string with given matrix.\n\t         > Parameters\n\t         - path (string) path string\n\t         - matrix (object) see @Matrix\n\t         = (string) transformed path string\n\t        \\*/\n\t        mapPath = R.mapPath = function (path, matrix) {\n\t            if (!matrix) {\n\t                return path;\n\t            }\n\t            var x, y, i, j, ii, jj, pathi;\n\t            path = path2curve(path);\n\t            for (i = 0, ii = path.length; i < ii; i++) {\n\t                pathi = path[i];\n\t                for (j = 1, jj = pathi.length; j < jj; j += 2) {\n\t                    x = matrix.x(pathi[j], pathi[j + 1]);\n\t                    y = matrix.y(pathi[j], pathi[j + 1]);\n\t                    pathi[j] = x;\n\t                    pathi[j + 1] = y;\n\t                }\n\t            }\n\t            return path;\n\t        };\n\n\t    R._g = g;\n\t    /*\\\n\t     * Raphael.type\n\t     [ property (string) ]\n\t     **\n\t     * Can be “SVG”, “VML” or empty, depending on browser support.\n\t    \\*/\n\t    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") ? \"SVG\" : \"VML\");\n\t    if (R.type == \"VML\") {\n\t        var d = g.doc.createElement(\"div\"),\n\t            b;\n\t        d.innerHTML = '<v:shape adj=\"1\"/>';\n\t        b = d.firstChild;\n\t        b.style.behavior = \"url(#default#VML)\";\n\t        if (!(b && typeof b.adj == \"object\")) {\n\t            return (R.type = E);\n\t        }\n\t        d = null;\n\t    }\n\t    /*\\\n\t     * Raphael.svg\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports SVG.\n\t    \\*/\n\t    /*\\\n\t     * Raphael.vml\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports VML.\n\t    \\*/\n\t    R.svg = !(R.vml = R.type == \"VML\");\n\t    R._Paper = Paper;\n\t    /*\\\n\t     * Raphael.fn\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to the canvas. For example if you want to draw a pie chart,\n\t     * you can create your own pie chart function and ship it as a Raphaël plugin. To do this\n\t     * you need to extend the `Raphael.fn` object. You should modify the `fn` object before a\n\t     * Raphaël instance is created, otherwise it will take no effect. Please note that the\n\t     * ability for namespaced plugins was removed in Raphael 2.0. It is up to the plugin to\n\t     * ensure any namespacing ensures proper context.\n\t     > Usage\n\t     | Raphael.fn.arrow = function (x1, y1, x2, y2, size) {\n\t     |     return this.path( ... );\n\t     | };\n\t     | // or create namespace\n\t     | Raphael.fn.mystuff = {\n\t     |     arrow: function () {…},\n\t     |     star: function () {…},\n\t     |     // etc…\n\t     | };\n\t     | var paper = Raphael(10, 10, 630, 480);\n\t     | // then use it\n\t     | paper.arrow(10, 10, 30, 30, 5).attr({fill: \"#f00\"});\n\t     | paper.mystuff.arrow();\n\t     | paper.mystuff.star();\n\t    \\*/\n\t    R.fn = paperproto = Paper.prototype = R.prototype;\n\t    R._id = 0;\n\t    /*\\\n\t     * Raphael.is\n\t     [ method ]\n\t     **\n\t     * Handful of replacements for `typeof` operator.\n\t     > Parameters\n\t     - o (…) any object or primitive\n\t     - type (string) name of the type, i.e. “string”, “function”, “number”, etc.\n\t     = (boolean) is given value is of given type\n\t    \\*/\n\t    R.is = function (o, type) {\n\t        type = lowerCase.call(type);\n\t        if (type == \"finite\") {\n\t            return !isnan[has](+o);\n\t        }\n\t        if (type == \"array\") {\n\t            return o instanceof Array;\n\t        }\n\t        return  (type == \"null\" && o === null) ||\n\t                (type == typeof o && o !== null) ||\n\t                (type == \"object\" && o === Object(o)) ||\n\t                (type == \"array\" && Array.isArray && Array.isArray(o)) ||\n\t                objectToString.call(o).slice(8, -1).toLowerCase() == type;\n\t    };\n\n\t    function clone(obj) {\n\t        if (typeof obj == \"function\" || Object(obj) !== obj) {\n\t            return obj;\n\t        }\n\t        var res = new obj.constructor;\n\t        for (var key in obj) if (obj[has](key)) {\n\t            res[key] = clone(obj[key]);\n\t        }\n\t        return res;\n\t    }\n\n\t    /*\\\n\t     * Raphael.angle\n\t     [ method ]\n\t     **\n\t     * Returns angle between two or three points\n\t     > Parameters\n\t     - x1 (number) x coord of first point\n\t     - y1 (number) y coord of first point\n\t     - x2 (number) x coord of second point\n\t     - y2 (number) y coord of second point\n\t     - x3 (number) #optional x coord of third point\n\t     - y3 (number) #optional y coord of third point\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.angle = function (x1, y1, x2, y2, x3, y3) {\n\t        if (x3 == null) {\n\t            var x = x1 - x2,\n\t                y = y1 - y2;\n\t            if (!x && !y) {\n\t                return 0;\n\t            }\n\t            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n\t        } else {\n\t            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);\n\t        }\n\t    };\n\t    /*\\\n\t     * Raphael.rad\n\t     [ method ]\n\t     **\n\t     * Transform angle to radians\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     = (number) angle in radians.\n\t    \\*/\n\t    R.rad = function (deg) {\n\t        return deg % 360 * PI / 180;\n\t    };\n\t    /*\\\n\t     * Raphael.deg\n\t     [ method ]\n\t     **\n\t     * Transform angle to degrees\n\t     > Parameters\n\t     - rad (number) angle in radians\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.deg = function (rad) {\n\t        return Math.round ((rad * 180 / PI% 360)* 1000) / 1000;\n\t    };\n\t    /*\\\n\t     * Raphael.snapTo\n\t     [ method ]\n\t     **\n\t     * Snaps given value to given grid.\n\t     > Parameters\n\t     - values (array|number) given array of values or step of the grid\n\t     - value (number) value to adjust\n\t     - tolerance (number) #optional tolerance for snapping. Default is `10`.\n\t     = (number) adjusted value.\n\t    \\*/\n\t    R.snapTo = function (values, value, tolerance) {\n\t        tolerance = R.is(tolerance, \"finite\") ? tolerance : 10;\n\t        if (R.is(values, array)) {\n\t            var i = values.length;\n\t            while (i--) if (abs(values[i] - value) <= tolerance) {\n\t                return values[i];\n\t            }\n\t        } else {\n\t            values = +values;\n\t            var rem = value % values;\n\t            if (rem < tolerance) {\n\t                return value - rem;\n\t            }\n\t            if (rem > values - tolerance) {\n\t                return value - rem + values;\n\t            }\n\t        }\n\t        return value;\n\t    };\n\n\t    /*\\\n\t     * Raphael.createUUID\n\t     [ method ]\n\t     **\n\t     * Returns RFC4122, version 4 ID\n\t    \\*/\n\t    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {\n\t        return function () {\n\t            return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(uuidRegEx, uuidReplacer).toUpperCase();\n\t        };\n\t    })(/[xy]/g, function (c) {\n\t        var r = math.random() * 16 | 0,\n\t            v = c == \"x\" ? r : (r & 3 | 8);\n\t        return v.toString(16);\n\t    });\n\n\t    /*\\\n\t     * Raphael.setWindow\n\t     [ method ]\n\t     **\n\t     * Used when you need to draw in `&lt;iframe>`. Switched window to the iframe one.\n\t     > Parameters\n\t     - newwin (window) new window object\n\t    \\*/\n\t    R.setWindow = function (newwin) {\n\t        eve(\"raphael.setWindow\", R, g.win, newwin);\n\t        g.win = newwin;\n\t        g.doc = g.win.document;\n\t        if (R._engine.initWin) {\n\t            R._engine.initWin(g.win);\n\t        }\n\t    };\n\t    var toHex = function (color) {\n\t        if (R.vml) {\n\t            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/\n\t            var trim = /^\\s+|\\s+$/g;\n\t            var bod;\n\t            try {\n\t                var docum = new ActiveXObject(\"htmlfile\");\n\t                docum.write(\"<body>\");\n\t                docum.close();\n\t                bod = docum.body;\n\t            } catch(e) {\n\t                bod = createPopup().document.body;\n\t            }\n\t            var range = bod.createTextRange();\n\t            toHex = cacher(function (color) {\n\t                try {\n\t                    bod.style.color = Str(color).replace(trim, E);\n\t                    var value = range.queryCommandValue(\"ForeColor\");\n\t                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);\n\t                    return \"#\" + (\"000000\" + value.toString(16)).slice(-6);\n\t                } catch(e) {\n\t                    return \"none\";\n\t                }\n\t            });\n\t        } else {\n\t            var i = g.doc.createElement(\"i\");\n\t            i.title = \"Rapha\\xebl Colour Picker\";\n\t            i.style.display = \"none\";\n\t            g.doc.body.appendChild(i);\n\t            toHex = cacher(function (color) {\n\t                i.style.color = color;\n\t                return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n\t            });\n\t        }\n\t        return toHex(color);\n\t    },\n\t    hsbtoString = function () {\n\t        return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n\t    },\n\t    hsltoString = function () {\n\t        return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n\t    },\n\t    rgbtoString = function () {\n\t        return this.hex;\n\t    },\n\t    prepareRGB = function (r, g, b) {\n\t        if (g == null && R.is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n\t            b = r.b;\n\t            g = r.g;\n\t            r = r.r;\n\t        }\n\t        if (g == null && R.is(r, string)) {\n\t            var clr = R.getRGB(r);\n\t            r = clr.r;\n\t            g = clr.g;\n\t            b = clr.b;\n\t        }\n\t        if (r > 1 || g > 1 || b > 1) {\n\t            r /= 255;\n\t            g /= 255;\n\t            b /= 255;\n\t        }\n\n\t        return [r, g, b];\n\t    },\n\t    packageRGB = function (r, g, b, o) {\n\t        r *= 255;\n\t        g *= 255;\n\t        b *= 255;\n\t        var rgb = {\n\t            r: r,\n\t            g: g,\n\t            b: b,\n\t            hex: R.rgb(r, g, b),\n\t            toString: rgbtoString\n\t        };\n\t        R.is(o, \"finite\") && (rgb.opacity = o);\n\t        return rgb;\n\t    };\n\n\t    /*\\\n\t     * Raphael.color\n\t     [ method ]\n\t     **\n\t     * Parses the color string and returns object with all values for the given color.\n\t     > Parameters\n\t     - clr (string) color string in one of the supported formats (see @Raphael.getRGB)\n\t     = (object) Combined RGB & HSB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #••••••,\n\t     o     error (boolean) `true` if string can’t be parsed,\n\t     o     h (number) hue,\n\t     o     s (number) saturation,\n\t     o     v (number) value (brightness),\n\t     o     l (number) lightness\n\t     o }\n\t    \\*/\n\t    R.color = function (clr) {\n\t        var rgb;\n\t        if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n\t            rgb = R.hsb2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n\t            rgb = R.hsl2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else {\n\t            if (R.is(clr, \"string\")) {\n\t                clr = R.getRGB(clr);\n\t            }\n\t            if (R.is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr) {\n\t                rgb = R.rgb2hsl(clr);\n\t                clr.h = rgb.h;\n\t                clr.s = rgb.s;\n\t                clr.l = rgb.l;\n\t                rgb = R.rgb2hsb(clr);\n\t                clr.v = rgb.b;\n\t            } else {\n\t                clr = {hex: \"none\"};\n\t                clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n\t            }\n\t        }\n\t        clr.toString = rgbtoString;\n\t        return clr;\n\t    };\n\t    /*\\\n\t     * Raphael.hsb2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - v (number) value or brightness\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #••••••\n\t     o }\n\t    \\*/\n\t    R.hsb2rgb = function (h, s, v, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n\t            v = h.b;\n\t            s = h.s;\n\t            o = h.o;\n\t            h = h.h;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = v * s;\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = v - C;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.hsl2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #••••••\n\t     o }\n\t    \\*/\n\t    R.hsl2rgb = function (h, s, l, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n\t            l = h.l;\n\t            s = h.s;\n\t            h = h.h;\n\t        }\n\t        if (h > 1 || s > 1 || l > 1) {\n\t            h /= 360;\n\t            s /= 100;\n\t            l /= 100;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = 2 * s * (l < .5 ? l : 1 - l);\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = l - C / 2;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSB object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSB object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     b (number) brightness\n\t     o }\n\t    \\*/\n\t    R.rgb2hsb = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, V, C;\n\t        V = mmax(r, g, b);\n\t        C = V - mmin(r, g, b);\n\t        H = (C == 0 ? null :\n\t             V == r ? (g - b) / C :\n\t             V == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4\n\t            );\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        S = C == 0 ? 0 : C / V;\n\t        return {h: H, s: S, b: V, toString: hsbtoString};\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsl\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSL object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSL object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     l (number) luminosity\n\t     o }\n\t    \\*/\n\t    R.rgb2hsl = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, L, M, m, C;\n\t        M = mmax(r, g, b);\n\t        m = mmin(r, g, b);\n\t        C = M - m;\n\t        H = (C == 0 ? null :\n\t             M == r ? (g - b) / C :\n\t             M == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4);\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        L = (M + m) / 2;\n\t        S = (C == 0 ? 0 :\n\t             L < .5 ? C / (2 * L) :\n\t                      C / (2 - 2 * L));\n\t        return {h: H, s: S, l: L, toString: hsltoString};\n\t    };\n\t    R._path2string = function () {\n\t        return this.join(\",\").replace(p2s, \"$1\");\n\t    };\n\t    function repush(array, item) {\n\t        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n\t            return array.push(array.splice(i, 1)[0]);\n\t        }\n\t    }\n\t    function cacher(f, scope, postprocessor) {\n\t        function newf() {\n\t            var arg = Array.prototype.slice.call(arguments, 0),\n\t                args = arg.join(\"\\u2400\"),\n\t                cache = newf.cache = newf.cache || {},\n\t                count = newf.count = newf.count || [];\n\t            if (cache[has](args)) {\n\t                repush(count, args);\n\t                return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t            }\n\t            count.length >= 1e3 && delete cache[count.shift()];\n\t            count.push(args);\n\t            cache[args] = f[apply](scope, arg);\n\t            return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t        }\n\t        return newf;\n\t    }\n\n\t    var preload = R._preload = function (src, f) {\n\t        var img = g.doc.createElement(\"img\");\n\t        img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n\t        img.onload = function () {\n\t            f.call(this);\n\t            this.onload = null;\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        img.onerror = function () {\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        g.doc.body.appendChild(img);\n\t        img.src = src;\n\t    };\n\n\t    function clrToString() {\n\t        return this.hex;\n\t    }\n\n\t    /*\\\n\t     * Raphael.getRGB\n\t     [ method ]\n\t     **\n\t     * Parses colour string as RGB object\n\t     > Parameters\n\t     - colour (string) colour string in one of formats:\n\t     # <ul>\n\t     #     <li>Colour name (“<code>red</code>”, “<code>green</code>”, “<code>cornflowerblue</code>”, etc)</li>\n\t     #     <li>#••• — shortened HTML colour: (“<code>#000</code>”, “<code>#fc0</code>”, etc)</li>\n\t     #     <li>#•••••• — full length HTML colour: (“<code>#000000</code>”, “<code>#bd2300</code>”)</li>\n\t     #     <li>rgb(•••, •••, •••) — red, green and blue channels’ values: (“<code>rgb(200,&nbsp;100,&nbsp;0)</code>”)</li>\n\t     #     <li>rgb(•••%, •••%, •••%) — same as above, but in %: (“<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>”)</li>\n\t     #     <li>hsb(•••, •••, •••) — hue, saturation and brightness values: (“<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>”)</li>\n\t     #     <li>hsb(•••%, •••%, •••%) — same as above, but in %</li>\n\t     #     <li>hsl(•••, •••, •••) — same as hsb</li>\n\t     #     <li>hsl(•••%, •••%, •••%) — same as hsb</li>\n\t     # </ul>\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue\n\t     o     hex (string) color in HTML/CSS format: #••••••,\n\t     o     error (boolean) true if string can’t be parsed\n\t     o }\n\t    \\*/\n\t    R.getRGB = cacher(function (colour) {\n\t        if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t        }\n\t        if (colour == \"none\") {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", toString: clrToString};\n\t        }\n\t        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n\t        var res,\n\t            red,\n\t            green,\n\t            blue,\n\t            opacity,\n\t            t,\n\t            values,\n\t            rgb = colour.match(colourRegExp);\n\t        if (rgb) {\n\t            if (rgb[2]) {\n\t                blue = toInt(rgb[2].substring(5), 16);\n\t                green = toInt(rgb[2].substring(3, 5), 16);\n\t                red = toInt(rgb[2].substring(1, 3), 16);\n\t            }\n\t            if (rgb[3]) {\n\t                blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n\t                green = toInt((t = rgb[3].charAt(2)) + t, 16);\n\t                red = toInt((t = rgb[3].charAt(1)) + t, 16);\n\t            }\n\t            if (rgb[4]) {\n\t                values = rgb[4][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t            }\n\t            if (rgb[5]) {\n\t                values = rgb[5][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsb2rgb(red, green, blue, opacity);\n\t            }\n\t            if (rgb[6]) {\n\t                values = rgb[6][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsl2rgb(red, green, blue, opacity);\n\t            }\n\t            rgb = {r: red, g: green, b: blue, toString: clrToString};\n\t            rgb.hex = \"#\" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);\n\t            R.is(opacity, \"finite\") && (rgb.opacity = opacity);\n\t            return rgb;\n\t        }\n\t        return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t    }, R);\n\t    /*\\\n\t     * Raphael.hsb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - b (number) value or brightness\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsb = cacher(function (h, s, b) {\n\t        return R.hsb2rgb(h, s, b).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.hsl\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsl = cacher(function (h, s, l) {\n\t        return R.hsl2rgb(h, s, l).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.rgb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to hex representation of the colour.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.rgb = cacher(function (r, g, b) {\n\t        function round(x) { return (x + 0.5) | 0; }\n\t        return \"#\" + (16777216 | round(b) | (round(g) << 8) | (round(r) << 16)).toString(16).slice(1);\n\t    });\n\t    /*\\\n\t     * Raphael.getColor\n\t     [ method ]\n\t     **\n\t     * On each call returns next colour in the spectrum. To reset it back to red call @Raphael.getColor.reset\n\t     > Parameters\n\t     - value (number) #optional brightness, default is `0.75`\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.getColor = function (value) {\n\t        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},\n\t            rgb = this.hsb2rgb(start.h, start.s, start.b);\n\t        start.h += .075;\n\t        if (start.h > 1) {\n\t            start.h = 0;\n\t            start.s -= .2;\n\t            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});\n\t        }\n\t        return rgb.hex;\n\t    };\n\t    /*\\\n\t     * Raphael.getColor.reset\n\t     [ method ]\n\t     **\n\t     * Resets spectrum position for @Raphael.getColor back to red.\n\t    \\*/\n\t    R.getColor.reset = function () {\n\t        delete this.start;\n\t    };\n\n\t    // http://schepers.cc/getting-to-the-point\n\t    function catmullRom2bezier(crp, z) {\n\t        var d = [];\n\t        for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n\t            var p = [\n\t                        {x: +crp[i - 2], y: +crp[i - 1]},\n\t                        {x: +crp[i],     y: +crp[i + 1]},\n\t                        {x: +crp[i + 2], y: +crp[i + 3]},\n\t                        {x: +crp[i + 4], y: +crp[i + 5]}\n\t                    ];\n\t            if (z) {\n\t                if (!i) {\n\t                    p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n\t                } else if (iLen - 4 == i) {\n\t                    p[3] = {x: +crp[0], y: +crp[1]};\n\t                } else if (iLen - 2 == i) {\n\t                    p[2] = {x: +crp[0], y: +crp[1]};\n\t                    p[3] = {x: +crp[2], y: +crp[3]};\n\t                }\n\t            } else {\n\t                if (iLen - 4 == i) {\n\t                    p[3] = p[2];\n\t                } else if (!i) {\n\t                    p[0] = {x: +crp[i], y: +crp[i + 1]};\n\t                }\n\t            }\n\t            d.push([\"C\",\n\t                  (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n\t                  (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n\t                  (p[1].x + 6 * p[2].x - p[3].x) / 6,\n\t                  (p[1].y + 6*p[2].y - p[3].y) / 6,\n\t                  p[2].x,\n\t                  p[2].y\n\t            ]);\n\t        }\n\n\t        return d;\n\t    }\n\t    /*\\\n\t     * Raphael.parsePathString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of arrays of path segments.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments (in the last case it will be returned straight away)\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.parsePathString = function (pathString) {\n\t        if (!pathString) {\n\t            return null;\n\t        }\n\t        var pth = paths(pathString);\n\t        if (pth.arr) {\n\t            return pathClone(pth.arr);\n\t        }\n\n\t        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0},\n\t            data = [];\n\t        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption\n\t            data = pathClone(pathString);\n\t        }\n\t        if (!data.length) {\n\t            Str(pathString).replace(pathCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = b.toLowerCase();\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                if (name == \"m\" && params.length > 2) {\n\t                    data.push([b][concat](params.splice(0, 2)));\n\t                    name = \"l\";\n\t                    b = b == \"m\" ? \"l\" : \"L\";\n\t                }\n\t                if (name == \"r\") {\n\t                    data.push([b][concat](params));\n\t                } else while (params.length >= paramCounts[name]) {\n\t                    data.push([b][concat](params.splice(0, paramCounts[name])));\n\t                    if (!paramCounts[name]) {\n\t                        break;\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        pth.arr = pathClone(data);\n\t        return data;\n\t    };\n\t    /*\\\n\t     * Raphael.parseTransformString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of transformations.\n\t     > Parameters\n\t     - TString (string|array) transform string or array of transformations (in the last case it will be returned straight away)\n\t     = (array) array of transformations.\n\t    \\*/\n\t    R.parseTransformString = cacher(function (TString) {\n\t        if (!TString) {\n\t            return null;\n\t        }\n\t        var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n\t            data = [];\n\t        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption\n\t            data = pathClone(TString);\n\t        }\n\t        if (!data.length) {\n\t            Str(TString).replace(tCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = lowerCase.call(b);\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                data.push([b][concat](params));\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        return data;\n\t    });\n\t    // PATHS\n\t    var paths = function (ps) {\n\t        var p = paths.ps = paths.ps || {};\n\t        if (p[ps]) {\n\t            p[ps].sleep = 100;\n\t        } else {\n\t            p[ps] = {\n\t                sleep: 100\n\t            };\n\t        }\n\t        setTimeout(function () {\n\t            for (var key in p) if (p[has](key) && key != ps) {\n\t                p[key].sleep--;\n\t                !p[key].sleep && delete p[key];\n\t            }\n\t        });\n\t        return p[ps];\n\t    };\n\t    /*\\\n\t     * Raphael.findDotsAtSegment\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Find dot coordinates on the given cubic bezier curve at the given t.\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     - t (number) position on the curve (0..1)\n\t     = (object) point information in format:\n\t     o {\n\t     o     x: (number) x coordinate of the point\n\t     o     y: (number) y coordinate of the point\n\t     o     m: {\n\t     o         x: (number) x coordinate of the left anchor\n\t     o         y: (number) y coordinate of the left anchor\n\t     o     }\n\t     o     n: {\n\t     o         x: (number) x coordinate of the right anchor\n\t     o         y: (number) y coordinate of the right anchor\n\t     o     }\n\t     o     start: {\n\t     o         x: (number) x coordinate of the start of the curve\n\t     o         y: (number) y coordinate of the start of the curve\n\t     o     }\n\t     o     end: {\n\t     o         x: (number) x coordinate of the end of the curve\n\t     o         y: (number) y coordinate of the end of the curve\n\t     o     }\n\t     o     alpha: (number) angle of the curve derivative at the point\n\t     o }\n\t    \\*/\n\t    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t        var t1 = 1 - t,\n\t            t13 = pow(t1, 3),\n\t            t12 = pow(t1, 2),\n\t            t2 = t * t,\n\t            t3 = t2 * t,\n\t            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n\t            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n\t            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n\t            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n\t            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n\t            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n\t            ax = t1 * p1x + t * c1x,\n\t            ay = t1 * p1y + t * c1y,\n\t            cx = t1 * c2x + t * p2x,\n\t            cy = t1 * c2y + t * p2y,\n\t            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);\n\t        (mx > nx || my < ny) && (alpha += 180);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            m: {x: mx, y: my},\n\t            n: {x: nx, y: ny},\n\t            start: {x: ax, y: ay},\n\t            end: {x: cx, y: cy},\n\t            alpha: alpha\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.bezierBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given cubic bezier curve\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     * or\n\t     - bez (array) array of six points for bezier curve\n\t     = (object) point information in format:\n\t     o {\n\t     o     min: {\n\t     o         x: (number) x coordinate of the left point\n\t     o         y: (number) y coordinate of the top point\n\t     o     }\n\t     o     max: {\n\t     o         x: (number) x coordinate of the right point\n\t     o         y: (number) y coordinate of the bottom point\n\t     o     }\n\t     o }\n\t    \\*/\n\t    R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t        if (!R.is(p1x, \"array\")) {\n\t            p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n\t        }\n\t        var bbox = curveDim.apply(null, p1x);\n\t        return {\n\t            x: bbox.min.x,\n\t            y: bbox.min.y,\n\t            x2: bbox.max.x,\n\t            y2: bbox.max.y,\n\t            width: bbox.max.x - bbox.min.x,\n\t            height: bbox.max.y - bbox.min.y\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.isPointInsideBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside bounding boxes.\n\t     > Parameters\n\t     - bbox (string) bounding box\n\t     - x (string) x coordinate of the point\n\t     - y (string) y coordinate of the point\n\t     = (boolean) `true` if point inside\n\t    \\*/\n\t    R.isPointInsideBBox = function (bbox, x, y) {\n\t        return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2;\n\t    };\n\t    /*\\\n\t     * Raphael.isBBoxIntersect\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if two bounding boxes intersect\n\t     > Parameters\n\t     - bbox1 (string) first bounding box\n\t     - bbox2 (string) second bounding box\n\t     = (boolean) `true` if they intersect\n\t    \\*/\n\t    R.isBBoxIntersect = function (bbox1, bbox2) {\n\t        var i = R.isPointInsideBBox;\n\t        return i(bbox2, bbox1.x, bbox1.y)\n\t            || i(bbox2, bbox1.x2, bbox1.y)\n\t            || i(bbox2, bbox1.x, bbox1.y2)\n\t            || i(bbox2, bbox1.x2, bbox1.y2)\n\t            || i(bbox1, bbox2.x, bbox2.y)\n\t            || i(bbox1, bbox2.x2, bbox2.y)\n\t            || i(bbox1, bbox2.x, bbox2.y2)\n\t            || i(bbox1, bbox2.x2, bbox2.y2)\n\t            || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n\t            && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n\t    };\n\t    function base3(t, p1, p2, p3, p4) {\n\t        var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n\t            t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n\t        return t * t2 - 3 * p1 + 3 * p2;\n\t    }\n\t    function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n\t        if (z == null) {\n\t            z = 1;\n\t        }\n\t        z = z > 1 ? 1 : z < 0 ? 0 : z;\n\t        var z2 = z / 2,\n\t            n = 12,\n\t            Tvalues = [-0.1252,0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816],\n\t            Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n\t            sum = 0;\n\t        for (var i = 0; i < n; i++) {\n\t            var ct = z2 * Tvalues[i] + z2,\n\t                xbase = base3(ct, x1, x2, x3, x4),\n\t                ybase = base3(ct, y1, y2, y3, y4),\n\t                comb = xbase * xbase + ybase * ybase;\n\t            sum += Cvalues[i] * math.sqrt(comb);\n\t        }\n\t        return z2 * sum;\n\t    }\n\t    function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n\t        if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n\t            return;\n\t        }\n\t        var t = 1,\n\t            step = t / 2,\n\t            t2 = t - step,\n\t            l,\n\t            e = .01;\n\t        l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        while (abs(l - ll) > e) {\n\t            step /= 2;\n\t            t2 += (l < ll ? 1 : -1) * step;\n\t            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        }\n\t        return t2;\n\t    }\n\t    function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n\t        if (\n\t            mmax(x1, x2) < mmin(x3, x4) ||\n\t            mmin(x1, x2) > mmax(x3, x4) ||\n\t            mmax(y1, y2) < mmin(y3, y4) ||\n\t            mmin(y1, y2) > mmax(y3, y4)\n\t        ) {\n\t            return;\n\t        }\n\t        var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n\t            ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n\t            denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n\t        if (!denominator) {\n\t            return;\n\t        }\n\t        var px = nx / denominator,\n\t            py = ny / denominator,\n\t            px2 = +px.toFixed(2),\n\t            py2 = +py.toFixed(2);\n\t        if (\n\t            px2 < +mmin(x1, x2).toFixed(2) ||\n\t            px2 > +mmax(x1, x2).toFixed(2) ||\n\t            px2 < +mmin(x3, x4).toFixed(2) ||\n\t            px2 > +mmax(x3, x4).toFixed(2) ||\n\t            py2 < +mmin(y1, y2).toFixed(2) ||\n\t            py2 > +mmax(y1, y2).toFixed(2) ||\n\t            py2 < +mmin(y3, y4).toFixed(2) ||\n\t            py2 > +mmax(y3, y4).toFixed(2)\n\t        ) {\n\t            return;\n\t        }\n\t        return {x: px, y: py};\n\t    }\n\t    function inter(bez1, bez2) {\n\t        return interHelper(bez1, bez2);\n\t    }\n\t    function interCount(bez1, bez2) {\n\t        return interHelper(bez1, bez2, 1);\n\t    }\n\t    function interHelper(bez1, bez2, justCount) {\n\t        var bbox1 = R.bezierBBox(bez1),\n\t            bbox2 = R.bezierBBox(bez2);\n\t        if (!R.isBBoxIntersect(bbox1, bbox2)) {\n\t            return justCount ? 0 : [];\n\t        }\n\t        var l1 = bezlen.apply(0, bez1),\n\t            l2 = bezlen.apply(0, bez2),\n\t            n1 = mmax(~~(l1 / 5), 1),\n\t            n2 = mmax(~~(l2 / 5), 1),\n\t            dots1 = [],\n\t            dots2 = [],\n\t            xy = {},\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0; i < n1 + 1; i++) {\n\t            var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1));\n\t            dots1.push({x: p.x, y: p.y, t: i / n1});\n\t        }\n\t        for (i = 0; i < n2 + 1; i++) {\n\t            p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2));\n\t            dots2.push({x: p.x, y: p.y, t: i / n2});\n\t        }\n\t        for (i = 0; i < n1; i++) {\n\t            for (var j = 0; j < n2; j++) {\n\t                var di = dots1[i],\n\t                    di1 = dots1[i + 1],\n\t                    dj = dots2[j],\n\t                    dj1 = dots2[j + 1],\n\t                    ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n\t                    cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n\t                    is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n\t                if (is) {\n\t                    if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n\t                        continue;\n\t                    }\n\t                    xy[is.x.toFixed(4)] = is.y.toFixed(4);\n\t                    var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n\t                        t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n\t                    if (t1 >= 0 && t1 <= 1.001 && t2 >= 0 && t2 <= 1.001) {\n\t                        if (justCount) {\n\t                            res++;\n\t                        } else {\n\t                            res.push({\n\t                                x: is.x,\n\t                                y: is.y,\n\t                                t1: mmin(t1, 1),\n\t                                t2: mmin(t2, 1)\n\t                            });\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.pathIntersection\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Finds intersections of two paths\n\t     > Parameters\n\t     - path1 (string) path string\n\t     - path2 (string) path string\n\t     = (array) dots of intersection\n\t     o [\n\t     o     {\n\t     o         x: (number) x coordinate of the point\n\t     o         y: (number) y coordinate of the point\n\t     o         t1: (number) t value for segment of path1\n\t     o         t2: (number) t value for segment of path2\n\t     o         segment1: (number) order number for segment of path1\n\t     o         segment2: (number) order number for segment of path2\n\t     o         bez1: (array) eight coordinates representing beziér curve for the segment of path1\n\t     o         bez2: (array) eight coordinates representing beziér curve for the segment of path2\n\t     o     }\n\t     o ]\n\t    \\*/\n\t    R.pathIntersection = function (path1, path2) {\n\t        return interPathHelper(path1, path2);\n\t    };\n\t    R.pathIntersectionNumber = function (path1, path2) {\n\t        return interPathHelper(path1, path2, 1);\n\t    };\n\t    function interPathHelper(path1, path2, justCount) {\n\t        path1 = R._path2curve(path1);\n\t        path2 = R._path2curve(path2);\n\t        var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0, ii = path1.length; i < ii; i++) {\n\t            var pi = path1[i];\n\t            if (pi[0] == \"M\") {\n\t                x1 = x1m = pi[1];\n\t                y1 = y1m = pi[2];\n\t            } else {\n\t                if (pi[0] == \"C\") {\n\t                    bez1 = [x1, y1].concat(pi.slice(1));\n\t                    x1 = bez1[6];\n\t                    y1 = bez1[7];\n\t                } else {\n\t                    bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n\t                    x1 = x1m;\n\t                    y1 = y1m;\n\t                }\n\t                for (var j = 0, jj = path2.length; j < jj; j++) {\n\t                    var pj = path2[j];\n\t                    if (pj[0] == \"M\") {\n\t                        x2 = x2m = pj[1];\n\t                        y2 = y2m = pj[2];\n\t                    } else {\n\t                        if (pj[0] == \"C\") {\n\t                            bez2 = [x2, y2].concat(pj.slice(1));\n\t                            x2 = bez2[6];\n\t                            y2 = bez2[7];\n\t                        } else {\n\t                            bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n\t                            x2 = x2m;\n\t                            y2 = y2m;\n\t                        }\n\t                        var intr = interHelper(bez1, bez2, justCount);\n\t                        if (justCount) {\n\t                            res += intr;\n\t                        } else {\n\t                            for (var k = 0, kk = intr.length; k < kk; k++) {\n\t                                intr[k].segment1 = i;\n\t                                intr[k].segment2 = j;\n\t                                intr[k].bez1 = bez1;\n\t                                intr[k].bez2 = bez2;\n\t                            }\n\t                            res = res.concat(intr);\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.isPointInsidePath\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside a given closed path.\n\t     > Parameters\n\t     - path (string) path string\n\t     - x (number) x of the point\n\t     - y (number) y of the point\n\t     = (boolean) true, if point is inside the path\n\t    \\*/\n\t    R.isPointInsidePath = function (path, x, y) {\n\t        var bbox = R.pathBBox(path);\n\t        return R.isPointInsideBBox(bbox, x, y) &&\n\t               interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n\t    };\n\t    R._removedFactory = function (methodname) {\n\t        return function () {\n\t            eve(\"raphael.log\", null, \"Rapha\\xebl: you are calling to method \\u201c\" + methodname + \"\\u201d of removed object\", methodname);\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given path\n\t     > Parameters\n\t     - path (string) path string\n\t     = (object) bounding box\n\t     o {\n\t     o     x: (number) x coordinate of the left top point of the box\n\t     o     y: (number) y coordinate of the left top point of the box\n\t     o     x2: (number) x coordinate of the right bottom point of the box\n\t     o     y2: (number) y coordinate of the right bottom point of the box\n\t     o     width: (number) width of the box\n\t     o     height: (number) height of the box\n\t     o     cx: (number) x coordinate of the center of the box\n\t     o     cy: (number) y coordinate of the center of the box\n\t     o }\n\t    \\*/\n\t    var pathDimensions = R.pathBBox = function (path) {\n\t        var pth = paths(path);\n\t        if (pth.bbox) {\n\t            return clone(pth.bbox);\n\t        }\n\t        if (!path) {\n\t            return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};\n\t        }\n\t        path = path2curve(path);\n\t        var x = 0,\n\t            y = 0,\n\t            X = [],\n\t            Y = [],\n\t            p;\n\t        for (var i = 0, ii = path.length; i < ii; i++) {\n\t            p = path[i];\n\t            if (p[0] == \"M\") {\n\t                x = p[1];\n\t                y = p[2];\n\t                X.push(x);\n\t                Y.push(y);\n\t            } else {\n\t                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                X = X[concat](dim.min.x, dim.max.x);\n\t                Y = Y[concat](dim.min.y, dim.max.y);\n\t                x = p[5];\n\t                y = p[6];\n\t            }\n\t        }\n\t        var xmin = mmin[apply](0, X),\n\t            ymin = mmin[apply](0, Y),\n\t            xmax = mmax[apply](0, X),\n\t            ymax = mmax[apply](0, Y),\n\t            width = xmax - xmin,\n\t            height = ymax - ymin,\n\t                bb = {\n\t                x: xmin,\n\t                y: ymin,\n\t                x2: xmax,\n\t                y2: ymax,\n\t                width: width,\n\t                height: height,\n\t                cx: xmin + width / 2,\n\t                cy: ymin + height / 2\n\t            };\n\t        pth.bbox = clone(bb);\n\t        return bb;\n\t    },\n\t        pathClone = function (pathArray) {\n\t            var res = clone(pathArray);\n\t            res.toString = R._path2string;\n\t            return res;\n\t        },\n\t        pathToRelative = R._pathToRelative = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.rel) {\n\t                return pathClone(pth.rel);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = pathArray[0][1];\n\t                y = pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res.push([\"M\", x, y]);\n\t            }\n\t            for (var i = start, ii = pathArray.length; i < ii; i++) {\n\t                var r = res[i] = [],\n\t                    pa = pathArray[i];\n\t                if (pa[0] != lowerCase.call(pa[0])) {\n\t                    r[0] = lowerCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"a\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] - x).toFixed(3);\n\t                            r[7] = +(pa[7] - y).toFixed(3);\n\t                            break;\n\t                        case \"v\":\n\t                            r[1] = +(pa[1] - y).toFixed(3);\n\t                            break;\n\t                        case \"m\":\n\t                            mx = pa[1];\n\t                            my = pa[2];\n\t                        default:\n\t                            for (var j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);\n\t                            }\n\t                    }\n\t                } else {\n\t                    r = res[i] = [];\n\t                    if (pa[0] == \"m\") {\n\t                        mx = pa[1] + x;\n\t                        my = pa[2] + y;\n\t                    }\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        res[i][k] = pa[k];\n\t                    }\n\t                }\n\t                var len = res[i].length;\n\t                switch (res[i][0]) {\n\t                    case \"z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"h\":\n\t                        x += +res[i][len - 1];\n\t                        break;\n\t                    case \"v\":\n\t                        y += +res[i][len - 1];\n\t                        break;\n\t                    default:\n\t                        x += +res[i][len - 2];\n\t                        y += +res[i][len - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.rel = pathClone(res);\n\t            return res;\n\t        },\n\t        pathToAbsolute = R._pathToAbsolute = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.abs) {\n\t                return pathClone(pth.abs);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            if (!pathArray || !pathArray.length) {\n\t                return [[\"M\", 0, 0]];\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = +pathArray[0][1];\n\t                y = +pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res[0] = [\"M\", x, y];\n\t            }\n\t            var crz = pathArray.length == 3 && pathArray[0][0] == \"M\" && pathArray[1][0].toUpperCase() == \"R\" && pathArray[2][0].toUpperCase() == \"Z\";\n\t            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n\t                res.push(r = []);\n\t                pa = pathArray[i];\n\t                if (pa[0] != upperCase.call(pa[0])) {\n\t                    r[0] = upperCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"A\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] + x);\n\t                            r[7] = +(pa[7] + y);\n\t                            break;\n\t                        case \"V\":\n\t                            r[1] = +pa[1] + y;\n\t                            break;\n\t                        case \"H\":\n\t                            r[1] = +pa[1] + x;\n\t                            break;\n\t                        case \"R\":\n\t                            var dots = [x, y][concat](pa.slice(1));\n\t                            for (var j = 2, jj = dots.length; j < jj; j++) {\n\t                                dots[j] = +dots[j] + x;\n\t                                dots[++j] = +dots[j] + y;\n\t                            }\n\t                            res.pop();\n\t                            res = res[concat](catmullRom2bezier(dots, crz));\n\t                            break;\n\t                        case \"M\":\n\t                            mx = +pa[1] + x;\n\t                            my = +pa[2] + y;\n\t                        default:\n\t                            for (j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +pa[j] + ((j % 2) ? x : y);\n\t                            }\n\t                    }\n\t                } else if (pa[0] == \"R\") {\n\t                    dots = [x, y][concat](pa.slice(1));\n\t                    res.pop();\n\t                    res = res[concat](catmullRom2bezier(dots, crz));\n\t                    r = [\"R\"][concat](pa.slice(-2));\n\t                } else {\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        r[k] = pa[k];\n\t                    }\n\t                }\n\t                switch (r[0]) {\n\t                    case \"Z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"H\":\n\t                        x = r[1];\n\t                        break;\n\t                    case \"V\":\n\t                        y = r[1];\n\t                        break;\n\t                    case \"M\":\n\t                        mx = r[r.length - 2];\n\t                        my = r[r.length - 1];\n\t                    default:\n\t                        x = r[r.length - 2];\n\t                        y = r[r.length - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.abs = pathClone(res);\n\t            return res;\n\t        },\n\t        l2c = function (x1, y1, x2, y2) {\n\t            return [x1, y1, x2, y2, x2, y2];\n\t        },\n\t        q2c = function (x1, y1, ax, ay, x2, y2) {\n\t            var _13 = 1 / 3,\n\t                _23 = 2 / 3;\n\t            return [\n\t                    _13 * x1 + _23 * ax,\n\t                    _13 * y1 + _23 * ay,\n\t                    _13 * x2 + _23 * ax,\n\t                    _13 * y2 + _23 * ay,\n\t                    x2,\n\t                    y2\n\t                ];\n\t        },\n\t        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n\t            // for more information of where this math came from visit:\n\t            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t            var _120 = PI * 120 / 180,\n\t                rad = PI / 180 * (+angle || 0),\n\t                res = [],\n\t                xy,\n\t                rotate = cacher(function (x, y, rad) {\n\t                    var X = x * math.cos(rad) - y * math.sin(rad),\n\t                        Y = x * math.sin(rad) + y * math.cos(rad);\n\t                    return {x: X, y: Y};\n\t                });\n\t            if (!recursive) {\n\t                xy = rotate(x1, y1, -rad);\n\t                x1 = xy.x;\n\t                y1 = xy.y;\n\t                xy = rotate(x2, y2, -rad);\n\t                x2 = xy.x;\n\t                y2 = xy.y;\n\t                var cos = math.cos(PI / 180 * angle),\n\t                    sin = math.sin(PI / 180 * angle),\n\t                    x = (x1 - x2) / 2,\n\t                    y = (y1 - y2) / 2;\n\t                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n\t                if (h > 1) {\n\t                    h = math.sqrt(h);\n\t                    rx = h * rx;\n\t                    ry = h * ry;\n\t                }\n\t                var rx2 = rx * rx,\n\t                    ry2 = ry * ry,\n\t                    k = (large_arc_flag == sweep_flag ? -1 : 1) *\n\t                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n\t                    cx = k * rx * y / ry + (x1 + x2) / 2,\n\t                    cy = k * -ry * x / rx + (y1 + y2) / 2,\n\t                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n\t                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n\t                f1 = x1 < cx ? PI - f1 : f1;\n\t                f2 = x2 < cx ? PI - f2 : f2;\n\t                f1 < 0 && (f1 = PI * 2 + f1);\n\t                f2 < 0 && (f2 = PI * 2 + f2);\n\t                if (sweep_flag && f1 > f2) {\n\t                    f1 = f1 - PI * 2;\n\t                }\n\t                if (!sweep_flag && f2 > f1) {\n\t                    f2 = f2 - PI * 2;\n\t                }\n\t            } else {\n\t                f1 = recursive[0];\n\t                f2 = recursive[1];\n\t                cx = recursive[2];\n\t                cy = recursive[3];\n\t            }\n\t            var df = f2 - f1;\n\t            if (abs(df) > _120) {\n\t                var f2old = f2,\n\t                    x2old = x2,\n\t                    y2old = y2;\n\t                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n\t                x2 = cx + rx * math.cos(f2);\n\t                y2 = cy + ry * math.sin(f2);\n\t                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n\t            }\n\t            df = f2 - f1;\n\t            var c1 = math.cos(f1),\n\t                s1 = math.sin(f1),\n\t                c2 = math.cos(f2),\n\t                s2 = math.sin(f2),\n\t                t = math.tan(df / 4),\n\t                hx = 4 / 3 * rx * t,\n\t                hy = 4 / 3 * ry * t,\n\t                m1 = [x1, y1],\n\t                m2 = [x1 + hx * s1, y1 - hy * c1],\n\t                m3 = [x2 + hx * s2, y2 - hy * c2],\n\t                m4 = [x2, y2];\n\t            m2[0] = 2 * m1[0] - m2[0];\n\t            m2[1] = 2 * m1[1] - m2[1];\n\t            if (recursive) {\n\t                return [m2, m3, m4][concat](res);\n\t            } else {\n\t                res = [m2, m3, m4][concat](res).join()[split](\",\");\n\t                var newres = [];\n\t                for (var i = 0, ii = res.length; i < ii; i++) {\n\t                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n\t                }\n\t                return newres;\n\t            }\n\t        },\n\t        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t            var t1 = 1 - t;\n\t            return {\n\t                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n\t                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n\t            };\n\t        },\n\t        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),\n\t                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),\n\t                c = p1x - c1x,\n\t                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                y = [p1y, p2y],\n\t                x = [p1x, p2x],\n\t                dot;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);\n\t            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);\n\t            c = p1y - c1y;\n\t            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            return {\n\t                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},\n\t                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}\n\t            };\n\t        }),\n\t        path2curve = R._path2curve = cacher(function (path, path2) {\n\t            var pth = !path2 && paths(path);\n\t            if (!path2 && pth.curve) {\n\t                return pathClone(pth.curve);\n\t            }\n\t            var p = pathToAbsolute(path),\n\t                p2 = path2 && pathToAbsolute(path2),\n\t                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                processPath = function (path, d, pcom) {\n\t                    var nx, ny, tq = {T:1, Q:1};\n\t                    if (!path) {\n\t                        return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n\t                    }\n\t                    !(path[0] in tq) && (d.qx = d.qy = null);\n\t                    switch (path[0]) {\n\t                        case \"M\":\n\t                            d.X = path[1];\n\t                            d.Y = path[2];\n\t                            break;\n\t                        case \"A\":\n\t                            path = [\"C\"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));\n\t                            break;\n\t                        case \"S\":\n\t                            if (pcom == \"C\" || pcom == \"S\") { // In \"S\" case we have to take into account, if the previous command is C/S.\n\t                                nx = d.x * 2 - d.bx;          // And reflect the previous\n\t                                ny = d.y * 2 - d.by;          // command's control point relative to the current point.\n\t                            }\n\t                            else {                            // or some else or nothing\n\t                                nx = d.x;\n\t                                ny = d.y;\n\t                            }\n\t                            path = [\"C\", nx, ny][concat](path.slice(1));\n\t                            break;\n\t                        case \"T\":\n\t                            if (pcom == \"Q\" || pcom == \"T\") { // In \"T\" case we have to take into account, if the previous command is Q/T.\n\t                                d.qx = d.x * 2 - d.qx;        // And make a reflection similar\n\t                                d.qy = d.y * 2 - d.qy;        // to case \"S\".\n\t                            }\n\t                            else {                            // or something else or nothing\n\t                                d.qx = d.x;\n\t                                d.qy = d.y;\n\t                            }\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n\t                            break;\n\t                        case \"Q\":\n\t                            d.qx = path[1];\n\t                            d.qy = path[2];\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n\t                            break;\n\t                        case \"L\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], path[2]));\n\t                            break;\n\t                        case \"H\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], d.y));\n\t                            break;\n\t                        case \"V\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.x, path[1]));\n\t                            break;\n\t                        case \"Z\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.X, d.Y));\n\t                            break;\n\t                    }\n\t                    return path;\n\t                },\n\t                fixArc = function (pp, i) {\n\t                    if (pp[i].length > 7) {\n\t                        pp[i].shift();\n\t                        var pi = pp[i];\n\t                        while (pi.length) {\n\t                            pcoms1[i]=\"A\"; // if created multiple C:s, their original seg is saved\n\t                            p2 && (pcoms2[i]=\"A\"); // the same as above\n\t                            pp.splice(i++, 0, [\"C\"][concat](pi.splice(0, 6)));\n\t                        }\n\t                        pp.splice(i, 1);\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                fixM = function (path1, path2, a1, a2, i) {\n\t                    if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n\t                        path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n\t                        a1.bx = 0;\n\t                        a1.by = 0;\n\t                        a1.x = path1[i][1];\n\t                        a1.y = path1[i][2];\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                pcoms1 = [], // path commands of original path p\n\t                pcoms2 = [], // path commands of original path p2\n\t                pfirst = \"\", // temporary holder for original path command\n\t                pcom = \"\"; // holder for previous path command of original path\n\t            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n\t                p[i] && (pfirst = p[i][0]); // save current path command\n\n\t                if (pfirst != \"C\") // C is not saved yet, because it may be result of conversion\n\t                {\n\t                    pcoms1[i] = pfirst; // Save current path command\n\t                    i && ( pcom = pcoms1[i-1]); // Get previous path command pcom\n\t                }\n\t                p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n\t                if (pcoms1[i] != \"A\" && pfirst == \"C\") pcoms1[i] = \"C\"; // A is the only command\n\t                // which may produce multiple C:s\n\t                // so we have to make sure that C is also C in original path\n\n\t                fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n\t                if (p2) { // the same procedures is done to p2\n\t                    p2[i] && (pfirst = p2[i][0]);\n\t                    if (pfirst != \"C\")\n\t                    {\n\t                        pcoms2[i] = pfirst;\n\t                        i && (pcom = pcoms2[i-1]);\n\t                    }\n\t                    p2[i] = processPath(p2[i], attrs2, pcom);\n\n\t                    if (pcoms2[i]!=\"A\" && pfirst==\"C\") pcoms2[i]=\"C\";\n\n\t                    fixArc(p2, i);\n\t                }\n\t                fixM(p, p2, attrs, attrs2, i);\n\t                fixM(p2, p, attrs2, attrs, i);\n\t                var seg = p[i],\n\t                    seg2 = p2 && p2[i],\n\t                    seglen = seg.length,\n\t                    seg2len = p2 && seg2.length;\n\t                attrs.x = seg[seglen - 2];\n\t                attrs.y = seg[seglen - 1];\n\t                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n\t                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n\t                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n\t                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n\t                attrs2.x = p2 && seg2[seg2len - 2];\n\t                attrs2.y = p2 && seg2[seg2len - 1];\n\t            }\n\t            if (!p2) {\n\t                pth.curve = pathClone(p);\n\t            }\n\t            return p2 ? [p, p2] : p;\n\t        }, null, pathClone),\n\t        parseDots = R._parseDots = cacher(function (gradient) {\n\t            var dots = [];\n\t            for (var i = 0, ii = gradient.length; i < ii; i++) {\n\t                var dot = {},\n\t                    par = gradient[i].match(/^([^:]*):?([\\d\\.]*)/);\n\t                dot.color = R.getRGB(par[1]);\n\t                if (dot.color.error) {\n\t                    return null;\n\t                }\n\t                dot.opacity = dot.color.opacity;\n\t                dot.color = dot.color.hex;\n\t                par[2] && (dot.offset = par[2] + \"%\");\n\t                dots.push(dot);\n\t            }\n\t            for (i = 1, ii = dots.length - 1; i < ii; i++) {\n\t                if (!dots[i].offset) {\n\t                    var start = toFloat(dots[i - 1].offset || 0),\n\t                        end = 0;\n\t                    for (var j = i + 1; j < ii; j++) {\n\t                        if (dots[j].offset) {\n\t                            end = dots[j].offset;\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!end) {\n\t                        end = 100;\n\t                        j = ii;\n\t                    }\n\t                    end = toFloat(end);\n\t                    var d = (end - start) / (j - i + 1);\n\t                    for (; i < j; i++) {\n\t                        start += d;\n\t                        dots[i].offset = start + \"%\";\n\t                    }\n\t                }\n\t            }\n\t            return dots;\n\t        }),\n\t        tear = R._tear = function (el, paper) {\n\t            el == paper.top && (paper.top = el.prev);\n\t            el == paper.bottom && (paper.bottom = el.next);\n\t            el.next && (el.next.prev = el.prev);\n\t            el.prev && (el.prev.next = el.next);\n\t        },\n\t        tofront = R._tofront = function (el, paper) {\n\t            if (paper.top === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = null;\n\t            el.prev = paper.top;\n\t            paper.top.next = el;\n\t            paper.top = el;\n\t        },\n\t        toback = R._toback = function (el, paper) {\n\t            if (paper.bottom === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = paper.bottom;\n\t            el.prev = null;\n\t            paper.bottom.prev = el;\n\t            paper.bottom = el;\n\t        },\n\t        insertafter = R._insertafter = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.top && (paper.top = el);\n\t            el2.next && (el2.next.prev = el);\n\t            el.next = el2.next;\n\t            el.prev = el2;\n\t            el2.next = el;\n\t        },\n\t        insertbefore = R._insertbefore = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.bottom && (paper.bottom = el);\n\t            el2.prev && (el2.prev.next = el);\n\t            el.prev = el2.prev;\n\t            el2.prev = el;\n\t            el.next = el2;\n\t        },\n\t        /*\\\n\t         * Raphael.toMatrix\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns matrix of transformations applied to a given path\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (object) @Matrix\n\t        \\*/\n\t        toMatrix = R.toMatrix = function (path, transform) {\n\t            var bb = pathDimensions(path),\n\t                el = {\n\t                    _: {\n\t                        transform: E\n\t                    },\n\t                    getBBox: function () {\n\t                        return bb;\n\t                    }\n\t                };\n\t            extractTransform(el, transform);\n\t            return el.matrix;\n\t        },\n\t        /*\\\n\t         * Raphael.transformPath\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns path transformed by a given transformation\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (string) path\n\t        \\*/\n\t        transformPath = R.transformPath = function (path, transform) {\n\t            return mapPath(path, toMatrix(path, transform));\n\t        },\n\t        extractTransform = R._extractTransform = function (el, tstr) {\n\t            if (tstr == null) {\n\t                return el._.transform;\n\t            }\n\t            tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || E);\n\t            var tdata = R.parseTransformString(tstr),\n\t                deg = 0,\n\t                dx = 0,\n\t                dy = 0,\n\t                sx = 1,\n\t                sy = 1,\n\t                _ = el._,\n\t                m = new Matrix;\n\t            _.transform = tdata || [];\n\t            if (tdata) {\n\t                for (var i = 0, ii = tdata.length; i < ii; i++) {\n\t                    var t = tdata[i],\n\t                        tlen = t.length,\n\t                        command = Str(t[0]).toLowerCase(),\n\t                        absolute = t[0] != command,\n\t                        inver = absolute ? m.invert() : 0,\n\t                        x1,\n\t                        y1,\n\t                        x2,\n\t                        y2,\n\t                        bb;\n\t                    if (command == \"t\" && tlen == 3) {\n\t                        if (absolute) {\n\t                            x1 = inver.x(0, 0);\n\t                            y1 = inver.y(0, 0);\n\t                            x2 = inver.x(t[1], t[2]);\n\t                            y2 = inver.y(t[1], t[2]);\n\t                            m.translate(x2 - x1, y2 - y1);\n\t                        } else {\n\t                            m.translate(t[1], t[2]);\n\t                        }\n\t                    } else if (command == \"r\") {\n\t                        if (tlen == 2) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            deg += t[1];\n\t                        } else if (tlen == 4) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[2], t[3]);\n\t                                y2 = inver.y(t[2], t[3]);\n\t                                m.rotate(t[1], x2, y2);\n\t                            } else {\n\t                                m.rotate(t[1], t[2], t[3]);\n\t                            }\n\t                            deg += t[1];\n\t                        }\n\t                    } else if (command == \"s\") {\n\t                        if (tlen == 2 || tlen == 3) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            sx *= t[1];\n\t                            sy *= t[tlen - 1];\n\t                        } else if (tlen == 5) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[3], t[4]);\n\t                                y2 = inver.y(t[3], t[4]);\n\t                                m.scale(t[1], t[2], x2, y2);\n\t                            } else {\n\t                                m.scale(t[1], t[2], t[3], t[4]);\n\t                            }\n\t                            sx *= t[1];\n\t                            sy *= t[2];\n\t                        }\n\t                    } else if (command == \"m\" && tlen == 7) {\n\t                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n\t                    }\n\t                    _.dirtyT = 1;\n\t                    el.matrix = m;\n\t                }\n\t            }\n\n\t            /*\\\n\t             * Element.matrix\n\t             [ property (object) ]\n\t             **\n\t             * Keeps @Matrix object, which represents element transformation\n\t            \\*/\n\t            el.matrix = m;\n\n\t            _.sx = sx;\n\t            _.sy = sy;\n\t            _.deg = deg;\n\t            _.dx = dx = m.e;\n\t            _.dy = dy = m.f;\n\n\t            if (sx == 1 && sy == 1 && !deg && _.bbox) {\n\t                _.bbox.x += +dx;\n\t                _.bbox.y += +dy;\n\t            } else {\n\t                _.dirtyT = 1;\n\t            }\n\t        },\n\t        getEmpty = function (item) {\n\t            var l = item[0];\n\t            switch (l.toLowerCase()) {\n\t                case \"t\": return [l, 0, 0];\n\t                case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n\t                case \"r\": if (item.length == 4) {\n\t                    return [l, 0, item[2], item[3]];\n\t                } else {\n\t                    return [l, 0];\n\t                }\n\t                case \"s\": if (item.length == 5) {\n\t                    return [l, 1, 1, item[3], item[4]];\n\t                } else if (item.length == 3) {\n\t                    return [l, 1, 1];\n\t                } else {\n\t                    return [l, 1];\n\t                }\n\t            }\n\t        },\n\t        equaliseTransform = R._equaliseTransform = function (t1, t2) {\n\t            t2 = Str(t2).replace(/\\.{3}|\\u2026/g, t1);\n\t            t1 = R.parseTransformString(t1) || [];\n\t            t2 = R.parseTransformString(t2) || [];\n\t            var maxlength = mmax(t1.length, t2.length),\n\t                from = [],\n\t                to = [],\n\t                i = 0, j, jj,\n\t                tt1, tt2;\n\t            for (; i < maxlength; i++) {\n\t                tt1 = t1[i] || getEmpty(t2[i]);\n\t                tt2 = t2[i] || getEmpty(tt1);\n\t                if ((tt1[0] != tt2[0]) ||\n\t                    (tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||\n\t                    (tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))\n\t                    ) {\n\t                    return;\n\t                }\n\t                from[i] = [];\n\t                to[i] = [];\n\t                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {\n\t                    j in tt1 && (from[i][j] = tt1[j]);\n\t                    j in tt2 && (to[i][j] = tt2[j]);\n\t                }\n\t            }\n\t            return {\n\t                from: from,\n\t                to: to\n\t            };\n\t        };\n\t    R._getContainer = function (x, y, w, h) {\n\t        var container;\n\t        container = h == null && !R.is(x, \"object\") ? g.doc.getElementById(x) : x;\n\t        if (container == null) {\n\t            return;\n\t        }\n\t        if (container.tagName) {\n\t            if (y == null) {\n\t                return {\n\t                    container: container,\n\t                    width: container.style.pixelWidth || container.offsetWidth,\n\t                    height: container.style.pixelHeight || container.offsetHeight\n\t                };\n\t            } else {\n\t                return {\n\t                    container: container,\n\t                    width: y,\n\t                    height: w\n\t                };\n\t            }\n\t        }\n\t        return {\n\t            container: 1,\n\t            x: x,\n\t            y: y,\n\t            width: w,\n\t            height: h\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathToRelative\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to relative form\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.pathToRelative = pathToRelative;\n\t    R._engine = {};\n\t    /*\\\n\t     * Raphael.path2curve\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to a new path where all segments are cubic bezier curves.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.path2curve = path2curve;\n\t    /*\\\n\t     * Raphael.matrix\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns matrix based on given parameters.\n\t     > Parameters\n\t     - a (number)\n\t     - b (number)\n\t     - c (number)\n\t     - d (number)\n\t     - e (number)\n\t     - f (number)\n\t     = (object) @Matrix\n\t    \\*/\n\t    R.matrix = function (a, b, c, d, e, f) {\n\t        return new Matrix(a, b, c, d, e, f);\n\t    };\n\t    function Matrix(a, b, c, d, e, f) {\n\t        if (a != null) {\n\t            this.a = +a;\n\t            this.b = +b;\n\t            this.c = +c;\n\t            this.d = +d;\n\t            this.e = +e;\n\t            this.f = +f;\n\t        } else {\n\t            this.a = 1;\n\t            this.b = 0;\n\t            this.c = 0;\n\t            this.d = 1;\n\t            this.e = 0;\n\t            this.f = 0;\n\t        }\n\t    }\n\t    (function (matrixproto) {\n\t        /*\\\n\t         * Matrix.add\n\t         [ method ]\n\t         **\n\t         * Adds given matrix to existing one.\n\t         > Parameters\n\t         - a (number)\n\t         - b (number)\n\t         - c (number)\n\t         - d (number)\n\t         - e (number)\n\t         - f (number)\n\t         or\n\t         - matrix (object) @Matrix\n\t        \\*/\n\t        matrixproto.add = function (a, b, c, d, e, f) {\n\t            var out = [[], [], []],\n\t                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],\n\t                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],\n\t                x, y, z, res;\n\n\t            if (a && a instanceof Matrix) {\n\t                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];\n\t            }\n\n\t            for (x = 0; x < 3; x++) {\n\t                for (y = 0; y < 3; y++) {\n\t                    res = 0;\n\t                    for (z = 0; z < 3; z++) {\n\t                        res += m[x][z] * matrix[z][y];\n\t                    }\n\t                    out[x][y] = res;\n\t                }\n\t            }\n\t            this.a = out[0][0];\n\t            this.b = out[1][0];\n\t            this.c = out[0][1];\n\t            this.d = out[1][1];\n\t            this.e = out[0][2];\n\t            this.f = out[1][2];\n\t        };\n\t        /*\\\n\t         * Matrix.invert\n\t         [ method ]\n\t         **\n\t         * Returns inverted version of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.invert = function () {\n\t            var me = this,\n\t                x = me.a * me.d - me.b * me.c;\n\t            return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\n\t        };\n\t        /*\\\n\t         * Matrix.clone\n\t         [ method ]\n\t         **\n\t         * Returns copy of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.clone = function () {\n\t            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n\t        };\n\t        /*\\\n\t         * Matrix.translate\n\t         [ method ]\n\t         **\n\t         * Translate the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.translate = function (x, y) {\n\t            this.add(1, 0, 0, 1, x, y);\n\t        };\n\t        /*\\\n\t         * Matrix.scale\n\t         [ method ]\n\t         **\n\t         * Scales the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number) #optional\n\t         - cx (number) #optional\n\t         - cy (number) #optional\n\t        \\*/\n\t        matrixproto.scale = function (x, y, cx, cy) {\n\t            y == null && (y = x);\n\t            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);\n\t            this.add(x, 0, 0, y, 0, 0);\n\t            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);\n\t        };\n\t        /*\\\n\t         * Matrix.rotate\n\t         [ method ]\n\t         **\n\t         * Rotates the matrix\n\t         > Parameters\n\t         - a (number)\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.rotate = function (a, x, y) {\n\t            a = R.rad(a);\n\t            x = x || 0;\n\t            y = y || 0;\n\t            var cos = +math.cos(a).toFixed(9),\n\t                sin = +math.sin(a).toFixed(9);\n\t            this.add(cos, sin, -sin, cos, x, y);\n\t            this.add(1, 0, 0, 1, -x, -y);\n\t        };\n\t        /*\\\n\t         * Matrix.x\n\t         [ method ]\n\t         **\n\t         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) x\n\t        \\*/\n\t        matrixproto.x = function (x, y) {\n\t            return x * this.a + y * this.c + this.e;\n\t        };\n\t        /*\\\n\t         * Matrix.y\n\t         [ method ]\n\t         **\n\t         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) y\n\t        \\*/\n\t        matrixproto.y = function (x, y) {\n\t            return x * this.b + y * this.d + this.f;\n\t        };\n\t        matrixproto.get = function (i) {\n\t            return +this[Str.fromCharCode(97 + i)].toFixed(4);\n\t        };\n\t        matrixproto.toString = function () {\n\t            return R.svg ?\n\t                \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\" :\n\t                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();\n\t        };\n\t        matrixproto.toFilter = function () {\n\t            return \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + this.get(0) +\n\t                \", M12=\" + this.get(2) + \", M21=\" + this.get(1) + \", M22=\" + this.get(3) +\n\t                \", Dx=\" + this.get(4) + \", Dy=\" + this.get(5) + \", sizingmethod='auto expand')\";\n\t        };\n\t        matrixproto.offset = function () {\n\t            return [this.e.toFixed(4), this.f.toFixed(4)];\n\t        };\n\t        function norm(a) {\n\t            return a[0] * a[0] + a[1] * a[1];\n\t        }\n\t        function normalize(a) {\n\t            var mag = math.sqrt(norm(a));\n\t            a[0] && (a[0] /= mag);\n\t            a[1] && (a[1] /= mag);\n\t        }\n\t        /*\\\n\t         * Matrix.split\n\t         [ method ]\n\t         **\n\t         * Splits matrix into primitive transformations\n\t         = (object) in format:\n\t         o dx (number) translation by x\n\t         o dy (number) translation by y\n\t         o scalex (number) scale by x\n\t         o scaley (number) scale by y\n\t         o shear (number) shear\n\t         o rotate (number) rotation in deg\n\t         o isSimple (boolean) could it be represented via simple transformations\n\t        \\*/\n\t        matrixproto.split = function () {\n\t            var out = {};\n\t            // translation\n\t            out.dx = this.e;\n\t            out.dy = this.f;\n\n\t            // scale and shear\n\t            var row = [[this.a, this.c], [this.b, this.d]];\n\t            out.scalex = math.sqrt(norm(row[0]));\n\t            normalize(row[0]);\n\n\t            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n\t            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n\t            out.scaley = math.sqrt(norm(row[1]));\n\t            normalize(row[1]);\n\t            out.shear /= out.scaley;\n\n\t            // rotation\n\t            var sin = -row[0][1],\n\t                cos = row[1][1];\n\t            if (cos < 0) {\n\t                out.rotate = R.deg(math.acos(cos));\n\t                if (sin < 0) {\n\t                    out.rotate = 360 - out.rotate;\n\t                }\n\t            } else {\n\t                out.rotate = R.deg(math.asin(sin));\n\t            }\n\n\t            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n\t            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n\t            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n\t            return out;\n\t        };\n\t        /*\\\n\t         * Matrix.toTransformString\n\t         [ method ]\n\t         **\n\t         * Return transform string that represents given matrix\n\t         = (string) transform string\n\t        \\*/\n\t        matrixproto.toTransformString = function (shorter) {\n\t            var s = shorter || this[split]();\n\t            if (s.isSimple) {\n\t                s.scalex = +s.scalex.toFixed(4);\n\t                s.scaley = +s.scaley.toFixed(4);\n\t                s.rotate = +s.rotate.toFixed(4);\n\t                return  (s.dx || s.dy ? \"t\" + [s.dx, s.dy] : E) +\n\t                        (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E) +\n\t                        (s.rotate ? \"r\" + [s.rotate, 0, 0] : E);\n\t            } else {\n\t                return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n\t            }\n\t        };\n\t    })(Matrix.prototype);\n\n\t    var preventDefault = function () {\n\t        this.returnValue = false;\n\t    },\n\t    preventTouch = function () {\n\t        return this.originalEvent.preventDefault();\n\t    },\n\t    stopPropagation = function () {\n\t        this.cancelBubble = true;\n\t    },\n\t    stopTouch = function () {\n\t        return this.originalEvent.stopPropagation();\n\t    },\n\t    getEventPosition = function (e) {\n\t        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\n\t        return {\n\t            x: e.clientX + scrollX,\n\t            y: e.clientY + scrollY\n\t        };\n\t    },\n\t    addEvent = (function () {\n\t        if (g.doc.addEventListener) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    var pos = getEventPosition(e);\n\t                    return fn.call(element, e, pos.x, pos.y);\n\t                };\n\t                obj.addEventListener(type, f, false);\n\n\t                if (supportsTouch && touchMap[type]) {\n\t                    var _f = function (e) {\n\t                        var pos = getEventPosition(e),\n\t                            olde = e;\n\n\t                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n\t                            if (e.targetTouches[i].target == obj) {\n\t                                e = e.targetTouches[i];\n\t                                e.originalEvent = olde;\n\t                                e.preventDefault = preventTouch;\n\t                                e.stopPropagation = stopTouch;\n\t                                break;\n\t                            }\n\t                        }\n\n\t                        return fn.call(element, e, pos.x, pos.y);\n\t                    };\n\t                    obj.addEventListener(touchMap[type], _f, false);\n\t                }\n\n\t                return function () {\n\t                    obj.removeEventListener(type, f, false);\n\n\t                    if (supportsTouch && touchMap[type])\n\t                        obj.removeEventListener(touchMap[type], _f, false);\n\n\t                    return true;\n\t                };\n\t            };\n\t        } else if (g.doc.attachEvent) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    e = e || g.win.event;\n\t                    var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                        scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t                        x = e.clientX + scrollX,\n\t                        y = e.clientY + scrollY;\n\t                    e.preventDefault = e.preventDefault || preventDefault;\n\t                    e.stopPropagation = e.stopPropagation || stopPropagation;\n\t                    return fn.call(element, e, x, y);\n\t                };\n\t                obj.attachEvent(\"on\" + type, f);\n\t                var detacher = function () {\n\t                    obj.detachEvent(\"on\" + type, f);\n\t                    return true;\n\t                };\n\t                return detacher;\n\t            };\n\t        }\n\t    })(),\n\t    drag = [],\n\t    dragMove = function (e) {\n\t        var x = e.clientX,\n\t            y = e.clientY,\n\t            scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t            dragi,\n\t            j = drag.length;\n\t        while (j--) {\n\t            dragi = drag[j];\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length,\n\t                    touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    if (touch.identifier == dragi.el._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        (e.originalEvent ? e.originalEvent : e).preventDefault();\n\t                        break;\n\t                    }\n\t                }\n\t            } else {\n\t                e.preventDefault();\n\t            }\n\t            var node = dragi.el.node,\n\t                o,\n\t                next = node.nextSibling,\n\t                parent = node.parentNode,\n\t                display = node.style.display;\n\t            g.win.opera && parent.removeChild(node);\n\t            node.style.display = \"none\";\n\t            o = dragi.el.paper.getElementByPoint(x, y);\n\t            node.style.display = display;\n\t            g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n\t            o && eve(\"raphael.drag.over.\" + dragi.el.id, dragi.el, o);\n\t            x += scrollX;\n\t            y += scrollY;\n\t            eve(\"raphael.drag.move.\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\n\t        }\n\t    },\n\t    dragUp = function (e) {\n\t        R.unmousemove(dragMove).unmouseup(dragUp);\n\t        var i = drag.length,\n\t            dragi;\n\t        while (i--) {\n\t            dragi = drag[i];\n\t            dragi.el._drag = {};\n\t            eve(\"raphael.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n\t        }\n\t        drag = [];\n\t    },\n\t    /*\\\n\t     * Raphael.el\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements. This is useful when you want to hack default functionality or\n\t     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,\n\t     * you can redefine element method at any time. Expending element methods wouldn’t affect set.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | // then use it\n\t     | paper.circle(100, 100, 20).red();\n\t    \\*/\n\t    elproto = R.el = {};\n\t    /*\\\n\t     * Element.click\n\t     [ method ]\n\t     **\n\t     * Adds event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.dblclick\n\t     [ method ]\n\t     **\n\t     * Adds event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.undblclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousedown\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousedown\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousemove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousemove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseout\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseout\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseover\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseover\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseup\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseup\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchstart\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchstart\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchmove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchmove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchend\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchend\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchcancel\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchcancel\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    for (var i = events.length; i--;) {\n\t        (function (eventName) {\n\t            R[eventName] = elproto[eventName] = function (fn, scope) {\n\t                if (R.is(fn, \"function\")) {\n\t                    this.events = this.events || [];\n\t                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});\n\t                }\n\t                return this;\n\t            };\n\t            R[\"un\" + eventName] = elproto[\"un\" + eventName] = function (fn) {\n\t                var events = this.events || [],\n\t                    l = events.length;\n\t                while (l--){\n\t                    if (events[l].name == eventName && (R.is(fn, \"undefined\") || events[l].f == fn)) {\n\t                        events[l].unbind();\n\t                        events.splice(l, 1);\n\t                        !events.length && delete this.events;\n\t                    }\n\t                }\n\t                return this;\n\t            };\n\t        })(events[i]);\n\t    }\n\n\t    /*\\\n\t     * Element.data\n\t     [ method ]\n\t     **\n\t     * Adds or retrieves given value associated with given key.\n\t     **\n\t     * See also @Element.removeData\n\t     > Parameters\n\t     - key (string) key to store data\n\t     - value (any) #optional value to store\n\t     = (object) @Element\n\t     * or, if value is not specified:\n\t     = (any) value\n\t     * or, if key and value are not specified:\n\t     = (object) Key/value pairs for all the data associated with the element.\n\t     > Usage\n\t     | for (var i = 0, i < 5, i++) {\n\t     |     paper.circle(10 + 15 * i, 10, 10)\n\t     |          .attr({fill: \"#000\"})\n\t     |          .data(\"i\", i)\n\t     |          .click(function () {\n\t     |             alert(this.data(\"i\"));\n\t     |          });\n\t     | }\n\t    \\*/\n\t    elproto.data = function (key, value) {\n\t        var data = eldata[this.id] = eldata[this.id] || {};\n\t        if (arguments.length == 0) {\n\t            return data;\n\t        }\n\t        if (arguments.length == 1) {\n\t            if (R.is(key, \"object\")) {\n\t                for (var i in key) if (key[has](i)) {\n\t                    this.data(i, key[i]);\n\t                }\n\t                return this;\n\t            }\n\t            eve(\"raphael.data.get.\" + this.id, this, data[key], key);\n\t            return data[key];\n\t        }\n\t        data[key] = value;\n\t        eve(\"raphael.data.set.\" + this.id, this, value, key);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.removeData\n\t     [ method ]\n\t     **\n\t     * Removes value associated with an element by given key.\n\t     * If key is not provided, removes all the data of the element.\n\t     > Parameters\n\t     - key (string) #optional key\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.removeData = function (key) {\n\t        if (key == null) {\n\t            eldata[this.id] = {};\n\t        } else {\n\t            eldata[this.id] && delete eldata[this.id][key];\n\t        }\n\t        return this;\n\t    };\n\t     /*\\\n\t     * Element.getData\n\t     [ method ]\n\t     **\n\t     * Retrieves the element data\n\t     = (object) data\n\t    \\*/\n\t    elproto.getData = function () {\n\t        return clone(eldata[this.id] || {});\n\t    };\n\t    /*\\\n\t     * Element.hover\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     - icontext (object) #optional context for hover in handler\n\t     - ocontext (object) #optional context for hover out handler\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n\t        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n\t    };\n\t    /*\\\n\t     * Element.unhover\n\t     [ method ]\n\t     **\n\t     * Removes event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.unhover = function (f_in, f_out) {\n\t        return this.unmouseover(f_in).unmouseout(f_out);\n\t    };\n\t    var draggable = [];\n\t    /*\\\n\t     * Element.drag\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for drag of the element.\n\t     > Parameters\n\t     - onmove (function) handler for moving\n\t     - onstart (function) handler for drag start\n\t     - onend (function) handler for drag end\n\t     - mcontext (object) #optional context for moving handler\n\t     - scontext (object) #optional context for drag start handler\n\t     - econtext (object) #optional context for drag end handler\n\t     * Additionally following `drag` events will be triggered: `drag.start.<id>` on start,\n\t     * `drag.end.<id>` on end and `drag.move.<id>` on every move. When element will be dragged over another element\n\t     * `drag.over.<id>` will be fired as well.\n\t     *\n\t     * Start event and start handler will be called in specified context or in context of the element with following parameters:\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * Move event and move handler will be called in specified context or in context of the element with following parameters:\n\t     o dx (number) shift by x from the start point\n\t     o dy (number) shift by y from the start point\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * End event and end handler will be called in specified context or in context of the element with following parameters:\n\t     o event (object) DOM event object\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n\t        function start(e) {\n\t            (e.originalEvent || e).preventDefault();\n\t            var x = e.clientX,\n\t                y = e.clientY,\n\t                scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\t            this._drag.id = e.identifier;\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length, touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    this._drag.id = touch.identifier;\n\t                    if (touch.identifier == this._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            this._drag.x = x + scrollX;\n\t            this._drag.y = y + scrollY;\n\t            !drag.length && R.mousemove(dragMove).mouseup(dragUp);\n\t            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n\t            onstart && eve.on(\"raphael.drag.start.\" + this.id, onstart);\n\t            onmove && eve.on(\"raphael.drag.move.\" + this.id, onmove);\n\t            onend && eve.on(\"raphael.drag.end.\" + this.id, onend);\n\t            eve(\"raphael.drag.start.\" + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);\n\t        }\n\t        this._drag = {};\n\t        draggable.push({el: this, start: start});\n\t        this.mousedown(start);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.onDragOver\n\t     [ method ]\n\t     **\n\t     * Shortcut for assigning event handler for `drag.over.<id>` event, where id is id of the element (see @Element.id).\n\t     > Parameters\n\t     - f (function) handler for event, first argument would be the element you are dragging over\n\t    \\*/\n\t    elproto.onDragOver = function (f) {\n\t        f ? eve.on(\"raphael.drag.over.\" + this.id, f) : eve.unbind(\"raphael.drag.over.\" + this.id);\n\t    };\n\t    /*\\\n\t     * Element.undrag\n\t     [ method ]\n\t     **\n\t     * Removes all drag event handlers from given element.\n\t    \\*/\n\t    elproto.undrag = function () {\n\t        var i = draggable.length;\n\t        while (i--) if (draggable[i].el == this) {\n\t            this.unmousedown(draggable[i].start);\n\t            draggable.splice(i, 1);\n\t            eve.unbind(\"raphael.drag.*.\" + this.id);\n\t        }\n\t        !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp);\n\t        drag = [];\n\t    };\n\t    /*\\\n\t     * Paper.circle\n\t     [ method ]\n\t     **\n\t     * Draws a circle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - r (number) radius\n\t     = (object) Raphaël element object with type “circle”\n\t     **\n\t     > Usage\n\t     | var c = paper.circle(50, 50, 40);\n\t    \\*/\n\t    paperproto.circle = function (x, y, r) {\n\t        var out = R._engine.circle(this, x || 0, y || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.rect\n\t     [ method ]\n\t     *\n\t     * Draws a rectangle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the top left corner\n\t     - y (number) y coordinate of the top left corner\n\t     - width (number) width\n\t     - height (number) height\n\t     - r (number) #optional radius for rounded corners, default is 0\n\t     = (object) Raphaël element object with type “rect”\n\t     **\n\t     > Usage\n\t     | // regular rectangle\n\t     | var c = paper.rect(10, 10, 50, 50);\n\t     | // rectangle with rounded corners\n\t     | var c = paper.rect(40, 40, 50, 50, 10);\n\t    \\*/\n\t    paperproto.rect = function (x, y, w, h, r) {\n\t        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.ellipse\n\t     [ method ]\n\t     **\n\t     * Draws an ellipse.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - rx (number) horizontal radius\n\t     - ry (number) vertical radius\n\t     = (object) Raphaël element object with type “ellipse”\n\t     **\n\t     > Usage\n\t     | var c = paper.ellipse(50, 50, 40, 20);\n\t    \\*/\n\t    paperproto.ellipse = function (x, y, rx, ry) {\n\t        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.path\n\t     [ method ]\n\t     **\n\t     * Creates a path element by given path data string.\n\t     > Parameters\n\t     - pathString (string) #optional path string in SVG format.\n\t     * Path string consists of one-letter commands, followed by comma seprarated arguments in numercal form. Example:\n\t     | \"M10,20L30,40\"\n\t     * Here we can see two commands: “M”, with arguments `(10, 20)` and “L” with arguments `(30, 40)`. Upper case letter mean command is absolute, lower case—relative.\n\t     *\n\t     # <p>Here is short list of commands available, for more details see <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a path's data attribute's format are described in the SVG specification.\">SVG path string format</a>.</p>\n\t     # <table><thead><tr><th>Command</th><th>Name</th><th>Parameters</th></tr></thead><tbody>\n\t     # <tr><td>M</td><td>moveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>Z</td><td>closepath</td><td>(none)</td></tr>\n\t     # <tr><td>L</td><td>lineto</td><td>(x y)+</td></tr>\n\t     # <tr><td>H</td><td>horizontal lineto</td><td>x+</td></tr>\n\t     # <tr><td>V</td><td>vertical lineto</td><td>y+</td></tr>\n\t     # <tr><td>C</td><td>curveto</td><td>(x1 y1 x2 y2 x y)+</td></tr>\n\t     # <tr><td>S</td><td>smooth curveto</td><td>(x2 y2 x y)+</td></tr>\n\t     # <tr><td>Q</td><td>quadratic Bézier curveto</td><td>(x1 y1 x y)+</td></tr>\n\t     # <tr><td>T</td><td>smooth quadratic Bézier curveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>A</td><td>elliptical arc</td><td>(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+</td></tr>\n\t     # <tr><td>R</td><td><a href=\"http://en.wikipedia.org/wiki/Catmull–Rom_spline#Catmull.E2.80.93Rom_spline\">Catmull-Rom curveto</a>*</td><td>x1 y1 (x y)+</td></tr></tbody></table>\n\t     * * “Catmull-Rom curveto” is a not standard SVG command and added in 2.0 to make life easier.\n\t     * Note: there is a special case when path consist of just three commands: “M10,10R…z”. In this case path will smoothly connects to its beginning.\n\t     > Usage\n\t     | var c = paper.path(\"M10 10L90 90\");\n\t     | // draw a diagonal line:\n\t     | // move to 10,10, line to 90,90\n\t     * For example of path strings, check out these icons: http://raphaeljs.com/icons/\n\t    \\*/\n\t    paperproto.path = function (pathString) {\n\t        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);\n\t        var out = R._engine.path(R.format[apply](R, arguments), this);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.image\n\t     [ method ]\n\t     **\n\t     * Embeds an image into the surface.\n\t     **\n\t     > Parameters\n\t     **\n\t     - src (string) URI of the source image\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - width (number) width of the image\n\t     - height (number) height of the image\n\t     = (object) Raphaël element object with type “image”\n\t     **\n\t     > Usage\n\t     | var c = paper.image(\"apple.png\", 10, 10, 80, 80);\n\t    \\*/\n\t    paperproto.image = function (src, x, y, w, h) {\n\t        var out = R._engine.image(this, src || \"about:blank\", x || 0, y || 0, w || 0, h || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.text\n\t     [ method ]\n\t     **\n\t     * Draws a text string. If you need line breaks, put “\\n” in the string.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - text (string) The text string to draw\n\t     = (object) Raphaël element object with type “text”\n\t     **\n\t     > Usage\n\t     | var t = paper.text(50, 50, \"Raphaël\\nkicks\\nbutt!\");\n\t    \\*/\n\t    paperproto.text = function (x, y, text) {\n\t        var out = R._engine.text(this, x || 0, y || 0, Str(text));\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.set\n\t     [ method ]\n\t     **\n\t     * Creates array-like object to keep and operate several elements at once.\n\t     * Warning: it doesn’t create any elements for itself in the page, it just groups existing elements.\n\t     * Sets act as pseudo elements — all methods available to an element can be used on a set.\n\t     = (object) array-like object that represents set of elements\n\t     **\n\t     > Usage\n\t     | var st = paper.set();\n\t     | st.push(\n\t     |     paper.circle(10, 10, 5),\n\t     |     paper.circle(30, 10, 5)\n\t     | );\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.set = function (itemsArray) {\n\t        !R.is(itemsArray, \"array\") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));\n\t        var out = new Set(itemsArray);\n\t        this.__set__ && this.__set__.push(out);\n\t        out[\"paper\"] = this;\n\t        out[\"type\"] = \"set\";\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.setStart\n\t     [ method ]\n\t     **\n\t     * Creates @Paper.set. All elements that will be created after calling this method and before calling\n\t     * @Paper.setFinish will be added to the set.\n\t     **\n\t     > Usage\n\t     | paper.setStart();\n\t     | paper.circle(10, 10, 5),\n\t     | paper.circle(30, 10, 5)\n\t     | var st = paper.setFinish();\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.setStart = function (set) {\n\t        this.__set__ = set || this.set();\n\t    };\n\t    /*\\\n\t     * Paper.setFinish\n\t     [ method ]\n\t     **\n\t     * See @Paper.setStart. This method finishes catching and returns resulting set.\n\t     **\n\t     = (object) set\n\t    \\*/\n\t    paperproto.setFinish = function (set) {\n\t        var out = this.__set__;\n\t        delete this.__set__;\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.getSize\n\t     [ method ]\n\t     **\n\t     * Obtains current paper actual size.\n\t     **\n\t     = (object)\n\t     \\*/\n\t    paperproto.getSize = function () {\n\t        var container = this.canvas.parentNode;\n\t        return {\n\t            width: container.offsetWidth,\n\t            height: container.offsetHeight\n\t                };\n\t        };\n\t    /*\\\n\t     * Paper.setSize\n\t     [ method ]\n\t     **\n\t     * If you need to change dimensions of the canvas call this method\n\t     **\n\t     > Parameters\n\t     **\n\t     - width (number) new width of the canvas\n\t     - height (number) new height of the canvas\n\t    \\*/\n\t    paperproto.setSize = function (width, height) {\n\t        return R._engine.setSize.call(this, width, height);\n\t    };\n\t    /*\\\n\t     * Paper.setViewBox\n\t     [ method ]\n\t     **\n\t     * Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by\n\t     * specifying new boundaries.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) new x position, default is `0`\n\t     - y (number) new y position, default is `0`\n\t     - w (number) new width of the canvas\n\t     - h (number) new height of the canvas\n\t     - fit (boolean) `true` if you want graphics to fit into new boundary box\n\t    \\*/\n\t    paperproto.setViewBox = function (x, y, w, h, fit) {\n\t        return R._engine.setViewBox.call(this, x, y, w, h, fit);\n\t    };\n\t    /*\\\n\t     * Paper.top\n\t     [ property ]\n\t     **\n\t     * Points to the topmost element on the paper\n\t    \\*/\n\t    /*\\\n\t     * Paper.bottom\n\t     [ property ]\n\t     **\n\t     * Points to the bottom element on the paper\n\t    \\*/\n\t    paperproto.top = paperproto.bottom = null;\n\t    /*\\\n\t     * Paper.raphael\n\t     [ property ]\n\t     **\n\t     * Points to the @Raphael object/function\n\t    \\*/\n\t    paperproto.raphael = R;\n\t    var getOffset = function (elem) {\n\t        var box = elem.getBoundingClientRect(),\n\t            doc = elem.ownerDocument,\n\t            body = doc.body,\n\t            docElem = doc.documentElement,\n\t            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n\t            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n\t        return {\n\t            y: top,\n\t            x: left\n\t        };\n\t    };\n\t    /*\\\n\t     * Paper.getElementByPoint\n\t     [ method ]\n\t     **\n\t     * Returns you topmost element under given point.\n\t     **\n\t     = (object) Raphaël element object\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate from the top left corner of the window\n\t     - y (number) y coordinate from the top left corner of the window\n\t     > Usage\n\t     | paper.getElementByPoint(mouseX, mouseY).attr({stroke: \"#f00\"});\n\t    \\*/\n\t    paperproto.getElementByPoint = function (x, y) {\n\t        var paper = this,\n\t            svg = paper.canvas,\n\t            target = g.doc.elementFromPoint(x, y);\n\t        if (g.win.opera && target.tagName == \"svg\") {\n\t            var so = getOffset(svg),\n\t                sr = svg.createSVGRect();\n\t            sr.x = x - so.x;\n\t            sr.y = y - so.y;\n\t            sr.width = sr.height = 1;\n\t            var hits = svg.getIntersectionList(sr, null);\n\t            if (hits.length) {\n\t                target = hits[hits.length - 1];\n\t            }\n\t        }\n\t        if (!target) {\n\t            return null;\n\t        }\n\t        while (target.parentNode && target != svg.parentNode && !target.raphael) {\n\t            target = target.parentNode;\n\t        }\n\t        target == paper.canvas.parentNode && (target = svg);\n\t        target = target && target.raphael ? paper.getById(target.raphaelid) : null;\n\t        return target;\n\t    };\n\n\t    /*\\\n\t     * Paper.getElementsByBBox\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have an intersecting bounding box\n\t     **\n\t     > Parameters\n\t     **\n\t     - bbox (object) bbox to check with\n\t     = (object) @Set\n\t     \\*/\n\t    paperproto.getElementsByBBox = function (bbox) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (R.isBBoxIntersect(el.getBBox(), bbox)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\n\t    /*\\\n\t     * Paper.getById\n\t     [ method ]\n\t     **\n\t     * Returns you element by its internal ID.\n\t     **\n\t     > Parameters\n\t     **\n\t     - id (number) id\n\t     = (object) Raphaël element object\n\t    \\*/\n\t    paperproto.getById = function (id) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (bot.id == id) {\n\t                return bot;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return null;\n\t    };\n\t    /*\\\n\t     * Paper.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element on the paper\n\t     *\n\t     * If callback function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Paper object\n\t     > Usage\n\t     | paper.forEach(function (el) {\n\t     |     el.attr({ stroke: \"blue\" });\n\t     | });\n\t    \\*/\n\t    paperproto.forEach = function (callback, thisArg) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (callback.call(thisArg, bot) === false) {\n\t                return this;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.getElementsByPoint\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have common point inside\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (object) @Set\n\t    \\*/\n\t    paperproto.getElementsByPoint = function (x, y) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\t    function x_y() {\n\t        return this.x + S + this.y;\n\t    }\n\t    function x_y_w_h() {\n\t        return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n\t    }\n\t    /*\\\n\t     * Element.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this element’s shape\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point inside the shape\n\t    \\*/\n\t    elproto.isPointInside = function (x, y) {\n\t        var rp = this.realPath = getPath[this.type](this);\n\t        if (this.attr('transform') && this.attr('transform').length) {\n\t            rp = R.transformPath(rp, this.attr('transform'));\n\t        }\n\t        return R.isPointInsidePath(rp, x, y);\n\t    };\n\t    /*\\\n\t     * Element.getBBox\n\t     [ method ]\n\t     **\n\t     * Return bounding box for a given element\n\t     **\n\t     > Parameters\n\t     **\n\t     - isWithoutTransform (boolean) flag, `true` if you want to have bounding box before transformations. Default is `false`.\n\t     = (object) Bounding box object:\n\t     o {\n\t     o     x: (number) top left corner x\n\t     o     y: (number) top left corner y\n\t     o     x2: (number) bottom right corner x\n\t     o     y2: (number) bottom right corner y\n\t     o     width: (number) width\n\t     o     height: (number) height\n\t     o }\n\t    \\*/\n\t    elproto.getBBox = function (isWithoutTransform) {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        var _ = this._;\n\t        if (isWithoutTransform) {\n\t            if (_.dirty || !_.bboxwt) {\n\t                this.realPath = getPath[this.type](this);\n\t                _.bboxwt = pathDimensions(this.realPath);\n\t                _.bboxwt.toString = x_y_w_h;\n\t                _.dirty = 0;\n\t            }\n\t            return _.bboxwt;\n\t        }\n\t        if (_.dirty || _.dirtyT || !_.bbox) {\n\t            if (_.dirty || !this.realPath) {\n\t                _.bboxwt = 0;\n\t                this.realPath = getPath[this.type](this);\n\t            }\n\t            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));\n\t            _.bbox.toString = x_y_w_h;\n\t            _.dirty = _.dirtyT = 0;\n\t        }\n\t        return _.bbox;\n\t    };\n\t    /*\\\n\t     * Element.clone\n\t     [ method ]\n\t     **\n\t     = (object) clone of a given element\n\t     **\n\t    \\*/\n\t    elproto.clone = function () {\n\t        if (this.removed) {\n\t            return null;\n\t        }\n\t        var out = this.paper[this.type]().attr(this.attr());\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Element.glow\n\t     [ method ]\n\t     **\n\t     * Return set of elements that create glow-like effect around given element. See @Paper.set.\n\t     *\n\t     * Note: Glow is not connected to the element. If you change element attributes it won’t adjust itself.\n\t     **\n\t     > Parameters\n\t     **\n\t     - glow (object) #optional parameters object with all properties optional:\n\t     o {\n\t     o     width (number) size of the glow, default is `10`\n\t     o     fill (boolean) will it be filled, default is `false`\n\t     o     opacity (number) opacity, default is `0.5`\n\t     o     offsetx (number) horizontal offset, default is `0`\n\t     o     offsety (number) vertical offset, default is `0`\n\t     o     color (string) glow colour, default is `black`\n\t     o }\n\t     = (object) @Paper.set of elements that represents glow\n\t    \\*/\n\t    elproto.glow = function (glow) {\n\t        if (this.type == \"text\") {\n\t            return null;\n\t        }\n\t        glow = glow || {};\n\t        var s = {\n\t            width: (glow.width || 10) + (+this.attr(\"stroke-width\") || 1),\n\t            fill: glow.fill || false,\n\t            opacity: glow.opacity == null ? .5 : glow.opacity,\n\t            offsetx: glow.offsetx || 0,\n\t            offsety: glow.offsety || 0,\n\t            color: glow.color || \"#000\"\n\t        },\n\t            c = s.width / 2,\n\t            r = this.paper,\n\t            out = r.set(),\n\t            path = this.realPath || getPath[this.type](this);\n\t        path = this.matrix ? mapPath(path, this.matrix) : path;\n\t        for (var i = 1; i < c + 1; i++) {\n\t            out.push(r.path(path).attr({\n\t                stroke: s.color,\n\t                fill: s.fill ? s.color : \"none\",\n\t                \"stroke-linejoin\": \"round\",\n\t                \"stroke-linecap\": \"round\",\n\t                \"stroke-width\": +(s.width / c * i).toFixed(3),\n\t                opacity: +(s.opacity / c).toFixed(3)\n\t            }));\n\t        }\n\t        return out.insertBefore(this).translate(s.offsetx, s.offsety);\n\t    };\n\t    var curveslengths = {},\n\t    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n\t        if (length == null) {\n\t            return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n\t        } else {\n\t            return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n\t        }\n\t    },\n\t    getLengthFactory = function (istotal, subpath) {\n\t        return function (path, length, onlystart) {\n\t            path = path2curve(path);\n\t            var x, y, p, l, sp = \"\", subpaths = {}, point,\n\t                len = 0;\n\t            for (var i = 0, ii = path.length; i < ii; i++) {\n\t                p = path[i];\n\t                if (p[0] == \"M\") {\n\t                    x = +p[1];\n\t                    y = +p[2];\n\t                } else {\n\t                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                    if (len + l > length) {\n\t                        if (subpath && !subpaths.start) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            sp += [\"C\" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];\n\t                            if (onlystart) {return sp;}\n\t                            subpaths.start = sp;\n\t                            sp = [\"M\" + point.x, point.y + \"C\" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();\n\t                            len += l;\n\t                            x = +p[5];\n\t                            y = +p[6];\n\t                            continue;\n\t                        }\n\t                        if (!istotal && !subpath) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            return {x: point.x, y: point.y, alpha: point.alpha};\n\t                        }\n\t                    }\n\t                    len += l;\n\t                    x = +p[5];\n\t                    y = +p[6];\n\t                }\n\t                sp += p.shift() + p;\n\t            }\n\t            subpaths.end = sp;\n\t            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n\t            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});\n\t            return point;\n\t        };\n\t    };\n\t    var getTotalLength = getLengthFactory(1),\n\t        getPointAtLength = getLengthFactory(),\n\t        getSubpathsAtLength = getLengthFactory(0, 1);\n\t    /*\\\n\t     * Raphael.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the given path in pixels.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string.\n\t     **\n\t     = (number) length.\n\t    \\*/\n\t    R.getTotalLength = getTotalLength;\n\t    /*\\\n\t     * Raphael.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    R.getPointAtLength = getPointAtLength;\n\t    /*\\\n\t     * Raphael.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given path from given length to given length.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    R.getSubpath = function (path, from, to) {\n\t        if (this.getTotalLength(path) - to < 1e-6) {\n\t            return getSubpathsAtLength(path, from).end;\n\t        }\n\t        var a = getSubpathsAtLength(path, to, 1);\n\t        return from ? getSubpathsAtLength(a, from).end : a;\n\t    };\n\t    /*\\\n\t     * Element.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the path in pixels. Only works for element of “path” type.\n\t     = (number) length.\n\t    \\*/\n\t    elproto.getTotalLength = function () {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        if (this.node.getTotalLength) {\n\t            return this.node.getTotalLength();\n\t        }\n\n\t        return getTotalLength(path);\n\t    };\n\t    /*\\\n\t     * Element.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path. Only works for element of “path” type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    elproto.getPointAtLength = function (length) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return getPointAtLength(path, length);\n\t    };\n\t    /*\\\n\t     * Element.getPath\n\t     [ method ]\n\t     **\n\t     * Returns path of the element. Only works for elements of “path” type and simple elements like circle.\n\t     = (object) path\n\t     **\n\t    \\*/\n\t    elproto.getPath = function () {\n\t        var path,\n\t            getPath = R._getPath[this.type];\n\n\t        if (this.type == \"text\" || this.type == \"set\") {\n\t            return;\n\t        }\n\n\t        if (getPath) {\n\t            path = getPath(this);\n\t        }\n\n\t        return path;\n\t    };\n\t    /*\\\n\t     * Element.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given element from given length to given length. Only works for element of “path” type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    elproto.getSubpath = function (from, to) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return R.getSubpath(path, from, to);\n\t    };\n\t    /*\\\n\t     * Raphael.easing_formulas\n\t     [ property ]\n\t     **\n\t     * Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing:\n\t     # <ul>\n\t     #     <li>“linear”</li>\n\t     #     <li>“&lt;” or “easeIn” or “ease-in”</li>\n\t     #     <li>“>” or “easeOut” or “ease-out”</li>\n\t     #     <li>“&lt;>” or “easeInOut” or “ease-in-out”</li>\n\t     #     <li>“backIn” or “back-in”</li>\n\t     #     <li>“backOut” or “back-out”</li>\n\t     #     <li>“elastic”</li>\n\t     #     <li>“bounce”</li>\n\t     # </ul>\n\t     # <p>See also <a href=\"http://raphaeljs.com/easing.html\">Easing demo</a>.</p>\n\t    \\*/\n\t    var ef = R.easing_formulas = {\n\t        linear: function (n) {\n\t            return n;\n\t        },\n\t        \"<\": function (n) {\n\t            return pow(n, 1.7);\n\t        },\n\t        \">\": function (n) {\n\t            return pow(n, .48);\n\t        },\n\t        \"<>\": function (n) {\n\t            var q = .48 - n / 1.04,\n\t                Q = math.sqrt(.1734 + q * q),\n\t                x = Q - q,\n\t                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n\t                y = -Q - q,\n\t                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n\t                t = X + Y + .5;\n\t            return (1 - t) * 3 * t * t + t * t * t;\n\t        },\n\t        backIn: function (n) {\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n - s);\n\t        },\n\t        backOut: function (n) {\n\t            n = n - 1;\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n + s) + 1;\n\t        },\n\t        elastic: function (n) {\n\t            if (n == !!n) {\n\t                return n;\n\t            }\n\t            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;\n\t        },\n\t        bounce: function (n) {\n\t            var s = 7.5625,\n\t                p = 2.75,\n\t                l;\n\t            if (n < (1 / p)) {\n\t                l = s * n * n;\n\t            } else {\n\t                if (n < (2 / p)) {\n\t                    n -= (1.5 / p);\n\t                    l = s * n * n + .75;\n\t                } else {\n\t                    if (n < (2.5 / p)) {\n\t                        n -= (2.25 / p);\n\t                        l = s * n * n + .9375;\n\t                    } else {\n\t                        n -= (2.625 / p);\n\t                        l = s * n * n + .984375;\n\t                    }\n\t                }\n\t            }\n\t            return l;\n\t        }\n\t    };\n\t    ef.easeIn = ef[\"ease-in\"] = ef[\"<\"];\n\t    ef.easeOut = ef[\"ease-out\"] = ef[\">\"];\n\t    ef.easeInOut = ef[\"ease-in-out\"] = ef[\"<>\"];\n\t    ef[\"back-in\"] = ef.backIn;\n\t    ef[\"back-out\"] = ef.backOut;\n\n\t    var animationElements = [],\n\t        requestAnimFrame = window.requestAnimationFrame       ||\n\t                           window.webkitRequestAnimationFrame ||\n\t                           window.mozRequestAnimationFrame    ||\n\t                           window.oRequestAnimationFrame      ||\n\t                           window.msRequestAnimationFrame     ||\n\t                           function (callback) {\n\t                               setTimeout(callback, 16);\n\t                           },\n\t        animation = function () {\n\t            var Now = +new Date,\n\t                l = 0;\n\t            for (; l < animationElements.length; l++) {\n\t                var e = animationElements[l];\n\t                if (e.el.removed || e.paused) {\n\t                    continue;\n\t                }\n\t                var time = Now - e.start,\n\t                    ms = e.ms,\n\t                    easing = e.easing,\n\t                    from = e.from,\n\t                    diff = e.diff,\n\t                    to = e.to,\n\t                    t = e.t,\n\t                    that = e.el,\n\t                    set = {},\n\t                    now,\n\t                    init = {},\n\t                    key;\n\t                if (e.initstatus) {\n\t                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;\n\t                    e.status = e.initstatus;\n\t                    delete e.initstatus;\n\t                    e.stop && animationElements.splice(l--, 1);\n\t                } else {\n\t                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;\n\t                }\n\t                if (time < 0) {\n\t                    continue;\n\t                }\n\t                if (time < ms) {\n\t                    var pos = easing(time / ms);\n\t                    for (var attr in from) if (from[has](attr)) {\n\t                        switch (availableAnimAttrs[attr]) {\n\t                            case nu:\n\t                                now = +from[attr] + pos * ms * diff[attr];\n\t                                break;\n\t                            case \"colour\":\n\t                                now = \"rgb(\" + [\n\t                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),\n\t                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),\n\t                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))\n\t                                ].join(\",\") + \")\";\n\t                                break;\n\t                            case \"path\":\n\t                                now = [];\n\t                                for (var i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    now[i] = [from[attr][i][0]];\n\t                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                    }\n\t                                    now[i] = now[i].join(S);\n\t                                }\n\t                                now = now.join(S);\n\t                                break;\n\t                            case \"transform\":\n\t                                if (diff[attr].real) {\n\t                                    now = [];\n\t                                    for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                        now[i] = [from[attr][i][0]];\n\t                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                        }\n\t                                    }\n\t                                } else {\n\t                                    var get = function (i) {\n\t                                        return +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    };\n\t                                    // now = [[\"r\", get(2), 0, 0], [\"t\", get(3), get(4)], [\"s\", get(0), get(1), 0, 0]];\n\t                                    now = [[\"m\", get(0), get(1), get(2), get(3), get(4), get(5)]];\n\t                                }\n\t                                break;\n\t                            case \"csv\":\n\t                                if (attr == \"clip-rect\") {\n\t                                    now = [];\n\t                                    i = 4;\n\t                                    while (i--) {\n\t                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    }\n\t                                }\n\t                                break;\n\t                            default:\n\t                                var from2 = [][concat](from[attr]);\n\t                                now = [];\n\t                                i = that.paper.customAttributes[attr].length;\n\t                                while (i--) {\n\t                                    now[i] = +from2[i] + pos * ms * diff[attr][i];\n\t                                }\n\t                                break;\n\t                        }\n\t                        set[attr] = now;\n\t                    }\n\t                    that.attr(set);\n\t                    (function (id, that, anim) {\n\t                        setTimeout(function () {\n\t                            eve(\"raphael.anim.frame.\" + id, that, anim);\n\t                        });\n\t                    })(that.id, that, e.anim);\n\t                } else {\n\t                    (function(f, el, a) {\n\t                        setTimeout(function() {\n\t                            eve(\"raphael.anim.frame.\" + el.id, el, a);\n\t                            eve(\"raphael.anim.finish.\" + el.id, el, a);\n\t                            R.is(f, \"function\") && f.call(el);\n\t                        });\n\t                    })(e.callback, that, e.anim);\n\t                    that.attr(to);\n\t                    animationElements.splice(l--, 1);\n\t                    if (e.repeat > 1 && !e.next) {\n\t                        for (key in to) if (to[has](key)) {\n\t                            init[key] = e.totalOrigin[key];\n\t                        }\n\t                        e.el.attr(init);\n\t                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);\n\t                    }\n\t                    if (e.next && !e.stop) {\n\t                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);\n\t                    }\n\t                }\n\t            }\n\t            animationElements.length && requestAnimFrame(animation);\n\t        },\n\t        upto255 = function (color) {\n\t            return color > 255 ? 255 : color < 0 ? 0 : color;\n\t        };\n\t    /*\\\n\t     * Element.animateWith\n\t     [ method ]\n\t     **\n\t     * Acts similar to @Element.animate, but ensure that given animation runs in sync with another given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - el (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - params (object) #optional final attributes for the element, see also @Element.attr\n\t     - ms (number) #optional number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept on of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - element (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - animation (object) #optional animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animateWith = function (el, anim, params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback),\n\t            x, y;\n\t        runAnimation(a, element, a.percents[0], null, element.attr());\n\t        for (var i = 0, ii = animationElements.length; i < ii; i++) {\n\t            if (animationElements[i].anim == anim && animationElements[i].el == el) {\n\t                animationElements[ii - 1].start = animationElements[i].start;\n\t                break;\n\t            }\n\t        }\n\t        return element;\n\t        //\n\t        //\n\t        // var a = params ? R.animation(params, ms, easing, callback) : anim,\n\t        //     status = element.status(anim);\n\t        // return this.animate(a).status(a, status * anim.ms / a.ms);\n\t    };\n\t    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n\t        var cx = 3 * p1x,\n\t            bx = 3 * (p2x - p1x) - cx,\n\t            ax = 1 - cx - bx,\n\t            cy = 3 * p1y,\n\t            by = 3 * (p2y - p1y) - cy,\n\t            ay = 1 - cy - by;\n\t        function sampleCurveX(t) {\n\t            return ((ax * t + bx) * t + cx) * t;\n\t        }\n\t        function solve(x, epsilon) {\n\t            var t = solveCurveX(x, epsilon);\n\t            return ((ay * t + by) * t + cy) * t;\n\t        }\n\t        function solveCurveX(x, epsilon) {\n\t            var t0, t1, t2, x2, d2, i;\n\t            for(t2 = x, i = 0; i < 8; i++) {\n\t                x2 = sampleCurveX(t2) - x;\n\t                if (abs(x2) < epsilon) {\n\t                    return t2;\n\t                }\n\t                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;\n\t                if (abs(d2) < 1e-6) {\n\t                    break;\n\t                }\n\t                t2 = t2 - x2 / d2;\n\t            }\n\t            t0 = 0;\n\t            t1 = 1;\n\t            t2 = x;\n\t            if (t2 < t0) {\n\t                return t0;\n\t            }\n\t            if (t2 > t1) {\n\t                return t1;\n\t            }\n\t            while (t0 < t1) {\n\t                x2 = sampleCurveX(t2);\n\t                if (abs(x2 - x) < epsilon) {\n\t                    return t2;\n\t                }\n\t                if (x > x2) {\n\t                    t0 = t2;\n\t                } else {\n\t                    t1 = t2;\n\t                }\n\t                t2 = (t1 - t0) / 2 + t0;\n\t            }\n\t            return t2;\n\t        }\n\t        return solve(t, 1 / (200 * duration));\n\t    }\n\t    elproto.onAnimation = function (f) {\n\t        f ? eve.on(\"raphael.anim.frame.\" + this.id, f) : eve.unbind(\"raphael.anim.frame.\" + this.id);\n\t        return this;\n\t    };\n\t    function Animation(anim, ms) {\n\t        var percents = [],\n\t            newAnim = {};\n\t        this.ms = ms;\n\t        this.times = 1;\n\t        if (anim) {\n\t            for (var attr in anim) if (anim[has](attr)) {\n\t                newAnim[toFloat(attr)] = anim[attr];\n\t                percents.push(toFloat(attr));\n\t            }\n\t            percents.sort(sortByNumber);\n\t        }\n\t        this.anim = newAnim;\n\t        this.top = percents[percents.length - 1];\n\t        this.percents = percents;\n\t    }\n\t    /*\\\n\t     * Animation.delay\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given delay.\n\t     **\n\t     > Parameters\n\t     **\n\t     - delay (number) number of ms to pass between animation start and actual animation\n\t     **\n\t     = (object) new altered Animation object\n\t     | var anim = Raphael.animation({cx: 10, cy: 20}, 2e3);\n\t     | circle1.animate(anim); // run the given animation immediately\n\t     | circle2.animate(anim.delay(500)); // run the given animation after 500 ms\n\t    \\*/\n\t    Animation.prototype.delay = function (delay) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.times = this.times;\n\t        a.del = +delay || 0;\n\t        return a;\n\t    };\n\t    /*\\\n\t     * Animation.repeat\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given repetition.\n\t     **\n\t     > Parameters\n\t     **\n\t     - repeat (number) number iterations of animation. For infinite animation pass `Infinity`\n\t     **\n\t     = (object) new altered Animation object\n\t    \\*/\n\t    Animation.prototype.repeat = function (times) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.del = this.del;\n\t        a.times = math.floor(mmax(times, 0)) || 1;\n\t        return a;\n\t    };\n\t    function runAnimation(anim, element, percent, status, totalOrigin, times) {\n\t        percent = toFloat(percent);\n\t        var params,\n\t            isInAnim,\n\t            isInAnimSet,\n\t            percents = [],\n\t            next,\n\t            prev,\n\t            timestamp,\n\t            ms = anim.ms,\n\t            from = {},\n\t            to = {},\n\t            diff = {};\n\t        if (status) {\n\t            for (i = 0, ii = animationElements.length; i < ii; i++) {\n\t                var e = animationElements[i];\n\t                if (e.el.id == element.id && e.anim == anim) {\n\t                    if (e.percent != percent) {\n\t                        animationElements.splice(i, 1);\n\t                        isInAnimSet = 1;\n\t                    } else {\n\t                        isInAnim = e;\n\t                    }\n\t                    element.attr(e.totalOrigin);\n\t                    break;\n\t                }\n\t            }\n\t        } else {\n\t            status = +to; // NaN\n\t        }\n\t        for (var i = 0, ii = anim.percents.length; i < ii; i++) {\n\t            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {\n\t                percent = anim.percents[i];\n\t                prev = anim.percents[i - 1] || 0;\n\t                ms = ms / anim.top * (percent - prev);\n\t                next = anim.percents[i + 1];\n\t                params = anim.anim[percent];\n\t                break;\n\t            } else if (status) {\n\t                element.attr(anim.anim[anim.percents[i]]);\n\t            }\n\t        }\n\t        if (!params) {\n\t            return;\n\t        }\n\t        if (!isInAnim) {\n\t            for (var attr in params) if (params[has](attr)) {\n\t                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {\n\t                    from[attr] = element.attr(attr);\n\t                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);\n\t                    to[attr] = params[attr];\n\t                    switch (availableAnimAttrs[attr]) {\n\t                        case nu:\n\t                            diff[attr] = (to[attr] - from[attr]) / ms;\n\t                            break;\n\t                        case \"colour\":\n\t                            from[attr] = R.getRGB(from[attr]);\n\t                            var toColour = R.getRGB(to[attr]);\n\t                            diff[attr] = {\n\t                                r: (toColour.r - from[attr].r) / ms,\n\t                                g: (toColour.g - from[attr].g) / ms,\n\t                                b: (toColour.b - from[attr].b) / ms\n\t                            };\n\t                            break;\n\t                        case \"path\":\n\t                            var pathes = path2curve(from[attr], to[attr]),\n\t                                toPath = pathes[1];\n\t                            from[attr] = pathes[0];\n\t                            diff[attr] = [];\n\t                            for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                diff[attr][i] = [0];\n\t                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case \"transform\":\n\t                            var _ = element._,\n\t                                eq = equaliseTransform(_[attr], to[attr]);\n\t                            if (eq) {\n\t                                from[attr] = eq.from;\n\t                                to[attr] = eq.to;\n\t                                diff[attr] = [];\n\t                                diff[attr].real = true;\n\t                                for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    diff[attr][i] = [from[attr][i][0]];\n\t                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;\n\t                                    }\n\t                                }\n\t                            } else {\n\t                                var m = (element.matrix || new Matrix),\n\t                                    to2 = {\n\t                                        _: {transform: _.transform},\n\t                                        getBBox: function () {\n\t                                            return element.getBBox(1);\n\t                                        }\n\t                                    };\n\t                                from[attr] = [\n\t                                    m.a,\n\t                                    m.b,\n\t                                    m.c,\n\t                                    m.d,\n\t                                    m.e,\n\t                                    m.f\n\t                                ];\n\t                                extractTransform(to2, to[attr]);\n\t                                to[attr] = to2._.transform;\n\t                                diff[attr] = [\n\t                                    (to2.matrix.a - m.a) / ms,\n\t                                    (to2.matrix.b - m.b) / ms,\n\t                                    (to2.matrix.c - m.c) / ms,\n\t                                    (to2.matrix.d - m.d) / ms,\n\t                                    (to2.matrix.e - m.e) / ms,\n\t                                    (to2.matrix.f - m.f) / ms\n\t                                ];\n\t                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];\n\t                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};\n\t                                // extractTransform(to2, to[attr]);\n\t                                // diff[attr] = [\n\t                                //     (to2._.sx - _.sx) / ms,\n\t                                //     (to2._.sy - _.sy) / ms,\n\t                                //     (to2._.deg - _.deg) / ms,\n\t                                //     (to2._.dx - _.dx) / ms,\n\t                                //     (to2._.dy - _.dy) / ms\n\t                                // ];\n\t                            }\n\t                            break;\n\t                        case \"csv\":\n\t                            var values = Str(params[attr])[split](separator),\n\t                                from2 = Str(from[attr])[split](separator);\n\t                            if (attr == \"clip-rect\") {\n\t                                from[attr] = from2;\n\t                                diff[attr] = [];\n\t                                i = from2.length;\n\t                                while (i--) {\n\t                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;\n\t                                }\n\t                            }\n\t                            to[attr] = values;\n\t                            break;\n\t                        default:\n\t                            values = [][concat](params[attr]);\n\t                            from2 = [][concat](from[attr]);\n\t                            diff[attr] = [];\n\t                            i = element.paper.customAttributes[attr].length;\n\t                            while (i--) {\n\t                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t            }\n\t            var easing = params.easing,\n\t                easyeasy = R.easing_formulas[easing];\n\t            if (!easyeasy) {\n\t                easyeasy = Str(easing).match(bezierrg);\n\t                if (easyeasy && easyeasy.length == 5) {\n\t                    var curve = easyeasy;\n\t                    easyeasy = function (t) {\n\t                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);\n\t                    };\n\t                } else {\n\t                    easyeasy = pipe;\n\t                }\n\t            }\n\t            timestamp = params.start || anim.start || +new Date;\n\t            e = {\n\t                anim: anim,\n\t                percent: percent,\n\t                timestamp: timestamp,\n\t                start: timestamp + (anim.del || 0),\n\t                status: 0,\n\t                initstatus: status || 0,\n\t                stop: false,\n\t                ms: ms,\n\t                easing: easyeasy,\n\t                from: from,\n\t                diff: diff,\n\t                to: to,\n\t                el: element,\n\t                callback: params.callback,\n\t                prev: prev,\n\t                next: next,\n\t                repeat: times || anim.times,\n\t                origin: element.attr(),\n\t                totalOrigin: totalOrigin\n\t            };\n\t            animationElements.push(e);\n\t            if (status && !isInAnim && !isInAnimSet) {\n\t                e.stop = true;\n\t                e.start = new Date - ms * status;\n\t                if (animationElements.length == 1) {\n\t                    return animation();\n\t                }\n\t            }\n\t            if (isInAnimSet) {\n\t                e.start = new Date - e.ms * status;\n\t            }\n\t            animationElements.length == 1 && requestAnimFrame(animation);\n\t        } else {\n\t            isInAnim.initstatus = status;\n\t            isInAnim.start = new Date - isInAnim.ms * status;\n\t        }\n\t        eve(\"raphael.anim.start.\" + element.id, element, anim);\n\t    }\n\t    /*\\\n\t     * Raphael.animation\n\t     [ method ]\n\t     **\n\t     * Creates an animation object that can be passed to the @Element.animate or @Element.animateWith methods.\n\t     * See also @Animation.delay and @Animation.repeat methods.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     **\n\t     = (object) @Animation\n\t    \\*/\n\t    R.animation = function (params, ms, easing, callback) {\n\t        if (params instanceof Animation) {\n\t            return params;\n\t        }\n\t        if (R.is(easing, \"function\") || !easing) {\n\t            callback = callback || easing || null;\n\t            easing = null;\n\t        }\n\t        params = Object(params);\n\t        ms = +ms || 0;\n\t        var p = {},\n\t            json,\n\t            attr;\n\t        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + \"%\" != attr) {\n\t            json = true;\n\t            p[attr] = params[attr];\n\t        }\n\t        if (!json) {\n\t            // if percent-like syntax is used and end-of-all animation callback used\n\t            if(callback){\n\t                // find the last one\n\t                var lastKey = 0;\n\t                for(var i in params){\n\t                    var percent = toInt(i);\n\t                    if(params[has](i) && percent > lastKey){\n\t                        lastKey = percent;\n\t                    }\n\t                }\n\t                lastKey += '%';\n\t                // if already defined callback in the last keyframe, skip\n\t                !params[lastKey].callback && (params[lastKey].callback = callback);\n\t            }\n\t          return new Animation(params, ms);\n\t        } else {\n\t            easing && (p.easing = easing);\n\t            callback && (p.callback = callback);\n\t            return new Animation({100: p}, ms);\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.animate\n\t     [ method ]\n\t     **\n\t     * Creates and starts animation for given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - animation (object) animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animate = function (params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);\n\t        runAnimation(anim, element, anim.percents[0], null, element.attr());\n\t        return element;\n\t    };\n\t    /*\\\n\t     * Element.setTime\n\t     [ method ]\n\t     **\n\t     * Sets the status of animation of the element in milliseconds. Similar to @Element.status method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) animation object\n\t     - value (number) number of milliseconds from the beginning of the animation\n\t     **\n\t     = (object) original element if `value` is specified\n\t     * Note, that during animation following events are triggered:\n\t     *\n\t     * On each animation frame event `anim.frame.<id>`, on start `anim.start.<id>` and on end `anim.finish.<id>`.\n\t    \\*/\n\t    elproto.setTime = function (anim, value) {\n\t        if (anim && value != null) {\n\t            this.status(anim, mmin(value, anim.ms) / anim.ms);\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.status\n\t     [ method ]\n\t     **\n\t     * Gets or sets the status of animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     - value (number) #optional 0 – 1. If specified, method works like a setter and sets the status of a given animation to the value. This will cause animation to jump to the given position.\n\t     **\n\t     = (number) status\n\t     * or\n\t     = (array) status if `anim` is not specified. Array of objects in format:\n\t     o {\n\t     o     anim: (object) animation object\n\t     o     status: (number) status\n\t     o }\n\t     * or\n\t     = (object) original element if `value` is specified\n\t    \\*/\n\t    elproto.status = function (anim, value) {\n\t        var out = [],\n\t            i = 0,\n\t            len,\n\t            e;\n\t        if (value != null) {\n\t            runAnimation(anim, this, -1, mmin(value, 1));\n\t            return this;\n\t        } else {\n\t            len = animationElements.length;\n\t            for (; i < len; i++) {\n\t                e = animationElements[i];\n\t                if (e.el.id == this.id && (!anim || e.anim == anim)) {\n\t                    if (anim) {\n\t                        return e.status;\n\t                    }\n\t                    out.push({\n\t                        anim: e.anim,\n\t                        status: e.status\n\t                    });\n\t                }\n\t            }\n\t            if (anim) {\n\t                return 0;\n\t            }\n\t            return out;\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.pause\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element with ability to resume it later on.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.pause = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.pause.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements[i].paused = true;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.resume\n\t     [ method ]\n\t     **\n\t     * Resumes animation if it was paused with @Element.pause method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.resume = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            var e = animationElements[i];\n\t            if (eve(\"raphael.anim.resume.\" + this.id, this, e.anim) !== false) {\n\t                delete e.paused;\n\t                this.status(e.anim, e.status);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.stop\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.stop = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.stop.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements.splice(i--, 1);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    function stopAnimation(paper) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) {\n\t            animationElements.splice(i--, 1);\n\t        }\n\t    }\n\t    eve.on(\"raphael.remove\", stopAnimation);\n\t    eve.on(\"raphael.clear\", stopAnimation);\n\t    elproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2019s object\";\n\t    };\n\n\t    // Set\n\t    var Set = function (items) {\n\t        this.items = [];\n\t        this.length = 0;\n\t        this.type = \"set\";\n\t        if (items) {\n\t            for (var i = 0, ii = items.length; i < ii; i++) {\n\t                if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {\n\t                    this[this.items.length] = this.items[this.items.length] = items[i];\n\t                    this.length++;\n\t                }\n\t            }\n\t        }\n\t    },\n\t    setproto = Set.prototype;\n\t    /*\\\n\t     * Set.push\n\t     [ method ]\n\t     **\n\t     * Adds each argument to the current set.\n\t     = (object) original element\n\t    \\*/\n\t    setproto.push = function () {\n\t        var item,\n\t            len;\n\t        for (var i = 0, ii = arguments.length; i < ii; i++) {\n\t            item = arguments[i];\n\t            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {\n\t                len = this.items.length;\n\t                this[len] = this.items[len] = item;\n\t                this.length++;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.pop\n\t     [ method ]\n\t     **\n\t     * Removes last element and returns it.\n\t     = (object) element\n\t    \\*/\n\t    setproto.pop = function () {\n\t        this.length && delete this[this.length--];\n\t        return this.items.pop();\n\t    };\n\t    /*\\\n\t     * Set.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element in the set.\n\t     *\n\t     * If function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Set object\n\t    \\*/\n\t    setproto.forEach = function (callback, thisArg) {\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            if (callback.call(thisArg, this.items[i], i) === false) {\n\t                return this;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    for (var method in elproto) if (elproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname][apply](el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t    setproto.attr = function (name, value) {\n\t        if (name && R.is(name, array) && R.is(name[0], \"object\")) {\n\t            for (var j = 0, jj = name.length; j < jj; j++) {\n\t                this.items[j].attr(name[j]);\n\t            }\n\t        } else {\n\t            for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t                this.items[i].attr(name, value);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.clear\n\t     [ method ]\n\t     **\n\t     * Removes all elements from the set\n\t    \\*/\n\t    setproto.clear = function () {\n\t        while (this.length) {\n\t            this.pop();\n\t        }\n\t    };\n\t    /*\\\n\t     * Set.splice\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - index (number) position of the deletion\n\t     - count (number) number of element to remove\n\t     - insertion… (object) #optional elements to insert\n\t     = (object) set elements that were deleted\n\t    \\*/\n\t    setproto.splice = function (index, count, insertion) {\n\t        index = index < 0 ? mmax(this.length + index, 0) : index;\n\t        count = mmax(0, mmin(this.length - index, count));\n\t        var tail = [],\n\t            todel = [],\n\t            args = [],\n\t            i;\n\t        for (i = 2; i < arguments.length; i++) {\n\t            args.push(arguments[i]);\n\t        }\n\t        for (i = 0; i < count; i++) {\n\t            todel.push(this[index + i]);\n\t        }\n\t        for (; i < this.length - index; i++) {\n\t            tail.push(this[index + i]);\n\t        }\n\t        var arglen = args.length;\n\t        for (i = 0; i < arglen + tail.length; i++) {\n\t            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n\t        }\n\t        i = this.items.length = this.length -= count - arglen;\n\t        while (this[i]) {\n\t            delete this[i++];\n\t        }\n\t        return new Set(todel);\n\t    };\n\t    /*\\\n\t     * Set.exclude\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - element (object) element to remove\n\t     = (boolean) `true` if object was found & removed from the set\n\t    \\*/\n\t    setproto.exclude = function (el) {\n\t        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n\t            this.splice(i, 1);\n\t            return true;\n\t        }\n\t    };\n\t    setproto.animate = function (params, ms, easing, callback) {\n\t        (R.is(easing, \"function\") || !easing) && (callback = easing || null);\n\t        var len = this.items.length,\n\t            i = len,\n\t            item,\n\t            set = this,\n\t            collector;\n\t        if (!len) {\n\t            return this;\n\t        }\n\t        callback && (collector = function () {\n\t            !--len && callback.call(set);\n\t        });\n\t        easing = R.is(easing, string) ? easing : collector;\n\t        var anim = R.animation(params, ms, easing, collector);\n\t        item = this.items[--i].animate(anim);\n\t        while (i--) {\n\t            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim);\n\t            (this.items[i] && !this.items[i].removed) || len--;\n\t        }\n\t        return this;\n\t    };\n\t    setproto.insertAfter = function (el) {\n\t        var i = this.items.length;\n\t        while (i--) {\n\t            this.items[i].insertAfter(el);\n\t        }\n\t        return this;\n\t    };\n\t    setproto.getBBox = function () {\n\t        var x = [],\n\t            y = [],\n\t            x2 = [],\n\t            y2 = [];\n\t        for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n\t            var box = this.items[i].getBBox();\n\t            x.push(box.x);\n\t            y.push(box.y);\n\t            x2.push(box.x + box.width);\n\t            y2.push(box.y + box.height);\n\t        }\n\t        x = mmin[apply](0, x);\n\t        y = mmin[apply](0, y);\n\t        x2 = mmax[apply](0, x2);\n\t        y2 = mmax[apply](0, y2);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            x2: x2,\n\t            y2: y2,\n\t            width: x2 - x,\n\t            height: y2 - y\n\t        };\n\t    };\n\t    setproto.clone = function (s) {\n\t        s = this.paper.set();\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            s.push(this.items[i].clone());\n\t        }\n\t        return s;\n\t    };\n\t    setproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2018s set\";\n\t    };\n\n\t    setproto.glow = function(glowConfig) {\n\t        var ret = this.paper.set();\n\t        this.forEach(function(shape, index){\n\t            var g = shape.glow(glowConfig);\n\t            if(g != null){\n\t                g.forEach(function(shape2, index2){\n\t                    ret.push(shape2);\n\t                });\n\t            }\n\t        });\n\t        return ret;\n\t    };\n\n\n\t    /*\\\n\t     * Set.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this set’s elements\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point is inside any of the set's elements\n\t     \\*/\n\t    setproto.isPointInside = function (x, y) {\n\t        var isPointInside = false;\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                isPointInside = true;\n\t                return false; // stop loop\n\t            }\n\t        });\n\t        return isPointInside;\n\t    };\n\n\t    /*\\\n\t     * Raphael.registerFont\n\t     [ method ]\n\t     **\n\t     * Adds given font to the registered set of fonts for Raphaël. Should be used as an internal call from within Cufón’s font file.\n\t     * Returns original parameter, so it could be used with chaining.\n\t     # <a href=\"http://wiki.github.com/sorccu/cufon/about\">More about Cufón and how to convert your font form TTF, OTF, etc to JavaScript file.</a>\n\t     **\n\t     > Parameters\n\t     **\n\t     - font (object) the font to register\n\t     = (object) the font you passed in\n\t     > Usage\n\t     | Cufon.registerFont(Raphael.registerFont({…}));\n\t    \\*/\n\t    R.registerFont = function (font) {\n\t        if (!font.face) {\n\t            return font;\n\t        }\n\t        this.fonts = this.fonts || {};\n\t        var fontcopy = {\n\t                w: font.w,\n\t                face: {},\n\t                glyphs: {}\n\t            },\n\t            family = font.face[\"font-family\"];\n\t        for (var prop in font.face) if (font.face[has](prop)) {\n\t            fontcopy.face[prop] = font.face[prop];\n\t        }\n\t        if (this.fonts[family]) {\n\t            this.fonts[family].push(fontcopy);\n\t        } else {\n\t            this.fonts[family] = [fontcopy];\n\t        }\n\t        if (!font.svg) {\n\t            fontcopy.face[\"units-per-em\"] = toInt(font.face[\"units-per-em\"], 10);\n\t            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {\n\t                var path = font.glyphs[glyph];\n\t                fontcopy.glyphs[glyph] = {\n\t                    w: path.w,\n\t                    k: {},\n\t                    d: path.d && \"M\" + path.d.replace(/[mlcxtrv]/g, function (command) {\n\t                            return {l: \"L\", c: \"C\", x: \"z\", t: \"m\", r: \"l\", v: \"c\"}[command] || \"M\";\n\t                        }) + \"z\"\n\t                };\n\t                if (path.k) {\n\t                    for (var k in path.k) if (path[has](k)) {\n\t                        fontcopy.glyphs[glyph].k[k] = path.k[k];\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return font;\n\t    };\n\t    /*\\\n\t     * Paper.getFont\n\t     [ method ]\n\t     **\n\t     * Finds font object in the registered fonts by given parameters. You could specify only one word from the font name, like “Myriad” for “Myriad Pro”.\n\t     **\n\t     > Parameters\n\t     **\n\t     - family (string) font family name or any word from it\n\t     - weight (string) #optional font weight\n\t     - style (string) #optional font style\n\t     - stretch (string) #optional font stretch\n\t     = (object) the font object\n\t     > Usage\n\t     | paper.print(100, 100, \"Test string\", paper.getFont(\"Times\", 800), 30);\n\t    \\*/\n\t    paperproto.getFont = function (family, weight, style, stretch) {\n\t        stretch = stretch || \"normal\";\n\t        style = style || \"normal\";\n\t        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;\n\t        if (!R.fonts) {\n\t            return;\n\t        }\n\t        var font = R.fonts[family];\n\t        if (!font) {\n\t            var name = new RegExp(\"(^|\\\\s)\" + family.replace(/[^\\w\\d\\s+!~.:_-]/g, E) + \"(\\\\s|$)\", \"i\");\n\t            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {\n\t                if (name.test(fontName)) {\n\t                    font = R.fonts[fontName];\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        var thefont;\n\t        if (font) {\n\t            for (var i = 0, ii = font.length; i < ii; i++) {\n\t                thefont = font[i];\n\t                if (thefont.face[\"font-weight\"] == weight && (thefont.face[\"font-style\"] == style || !thefont.face[\"font-style\"]) && thefont.face[\"font-stretch\"] == stretch) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return thefont;\n\t    };\n\t    /*\\\n\t     * Paper.print\n\t     [ method ]\n\t     **\n\t     * Creates path that represent given text written using given font at given position with given size.\n\t     * Result of the method is path element that contains whole text as a separate path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x position of the text\n\t     - y (number) y position of the text\n\t     - string (string) text to print\n\t     - font (object) font object, see @Paper.getFont\n\t     - size (number) #optional size of the font, default is `16`\n\t     - origin (string) #optional could be `\"baseline\"` or `\"middle\"`, default is `\"middle\"`\n\t     - letter_spacing (number) #optional number in range `-1..1`, default is `0`\n\t     - line_spacing (number) #optional number in range `1..3`, default is `1`\n\t     = (object) resulting path element, which consist of all letters\n\t     > Usage\n\t     | var txt = r.print(10, 50, \"print\", r.getFont(\"Museo\"), 30).attr({fill: \"#fff\"});\n\t    \\*/\n\t    paperproto.print = function (x, y, string, font, size, origin, letter_spacing, line_spacing) {\n\t        origin = origin || \"middle\"; // baseline|middle\n\t        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);\n\t        line_spacing = mmax(mmin(line_spacing || 1, 3), 1);\n\t        var letters = Str(string)[split](E),\n\t            shift = 0,\n\t            notfirst = 0,\n\t            path = E,\n\t            scale;\n\t        R.is(font, \"string\") && (font = this.getFont(font));\n\t        if (font) {\n\t            scale = (size || 16) / font.face[\"units-per-em\"];\n\t            var bb = font.face.bbox[split](separator),\n\t                top = +bb[0],\n\t                lineHeight = bb[3] - bb[1],\n\t                shifty = 0,\n\t                height = +bb[1] + (origin == \"baseline\" ? lineHeight + (+font.face.descent) : lineHeight / 2);\n\t            for (var i = 0, ii = letters.length; i < ii; i++) {\n\t                if (letters[i] == \"\\n\") {\n\t                    shift = 0;\n\t                    curr = 0;\n\t                    notfirst = 0;\n\t                    shifty += lineHeight * line_spacing;\n\t                } else {\n\t                    var prev = notfirst && font.glyphs[letters[i - 1]] || {},\n\t                        curr = font.glyphs[letters[i]];\n\t                    shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;\n\t                    notfirst = 1;\n\t                }\n\t                if (curr && curr.d) {\n\t                    path += R.transformPath(curr.d, [\"t\", shift * scale, shifty * scale, \"s\", scale, scale, top, height, \"t\", (x - top) / scale, (y - height) / scale]);\n\t                }\n\t            }\n\t        }\n\t        return this.path(path).attr({\n\t            fill: \"#000\",\n\t            stroke: \"none\"\n\t        });\n\t    };\n\n\t    /*\\\n\t     * Paper.add\n\t     [ method ]\n\t     **\n\t     * Imports elements in JSON array in format `{type: type, <attributes>}`\n\t     **\n\t     > Parameters\n\t     **\n\t     - json (array)\n\t     = (object) resulting set of imported elements\n\t     > Usage\n\t     | paper.add([\n\t     |     {\n\t     |         type: \"circle\",\n\t     |         cx: 10,\n\t     |         cy: 10,\n\t     |         r: 5\n\t     |     },\n\t     |     {\n\t     |         type: \"rect\",\n\t     |         x: 10,\n\t     |         y: 10,\n\t     |         width: 10,\n\t     |         height: 10,\n\t     |         fill: \"#fc0\"\n\t     |     }\n\t     | ]);\n\t    \\*/\n\t    paperproto.add = function (json) {\n\t        if (R.is(json, \"array\")) {\n\t            var res = this.set(),\n\t                i = 0,\n\t                ii = json.length,\n\t                j;\n\t            for (; i < ii; i++) {\n\t                j = json[i] || {};\n\t                elements[has](j.type) && res.push(this[j.type]().attr(j));\n\t            }\n\t        }\n\t        return res;\n\t    };\n\n\t    /*\\\n\t     * Raphael.format\n\t     [ method ]\n\t     **\n\t     * Simple format function. Replaces construction of type “`{<number>}`” to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - … (string) rest of arguments will be treated as parameters for replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | var x = 10,\n\t     |     y = 20,\n\t     |     width = 40,\n\t     |     height = 50;\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.format(\"M{0},{1}h{2}v{3}h{4}z\", x, y, width, height, -width));\n\t    \\*/\n\t    R.format = function (token, params) {\n\t        var args = R.is(params, array) ? [0][concat](params) : arguments;\n\t        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {\n\t            return args[++i] == null ? E : args[i];\n\t        }));\n\t        return token || E;\n\t    };\n\t    /*\\\n\t     * Raphael.fullfill\n\t     [ method ]\n\t     **\n\t     * A little bit more advanced format function than @Raphael.format. Replaces construction of type “`{<name>}`” to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - json (object) object which properties will be used as a replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.fullfill(\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\", {\n\t     |     x: 10,\n\t     |     y: 20,\n\t     |     dim: {\n\t     |         width: 40,\n\t     |         height: 50,\n\t     |         \"negative width\": -40\n\t     |     }\n\t     | }));\n\t    \\*/\n\t    R.fullfill = (function () {\n\t        var tokenRegex = /\\{([^\\}]+)\\}/g,\n\t            objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n\t            replacer = function (all, key, obj) {\n\t                var res = obj;\n\t                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n\t                    name = name || quotedName;\n\t                    if (res) {\n\t                        if (name in res) {\n\t                            res = res[name];\n\t                        }\n\t                        typeof res == \"function\" && isFunc && (res = res());\n\t                    }\n\t                });\n\t                res = (res == null || res == obj ? all : res) + \"\";\n\t                return res;\n\t            };\n\t        return function (str, obj) {\n\t            return String(str).replace(tokenRegex, function (all, key) {\n\t                return replacer(all, key, obj);\n\t            });\n\t        };\n\t    })();\n\t    /*\\\n\t     * Raphael.ninja\n\t     [ method ]\n\t     **\n\t     * If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.\n\t     * Beware, that in this case plugins could stop working, because they are depending on global variable existence.\n\t     **\n\t     = (object) Raphael object\n\t     > Usage\n\t     | (function (local_raphael) {\n\t     |     var paper = local_raphael(10, 10, 320, 200);\n\t     |     …\n\t     | })(Raphael.ninja());\n\t    \\*/\n\t    R.ninja = function () {\n\t        if (oldRaphael.was) {\n\t            g.win.Raphael = oldRaphael.is;\n\t        } else {\n\t            // IE8 raises an error when deleting window property\n\t            window.Raphael = undefined;\n\t            try {\n\t                delete window.Raphael;\n\t            } catch(e) {}\n\t        }\n\t        return R;\n\t    };\n\t    /*\\\n\t     * Raphael.st\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements and sets. It is wise to add a set method for each element method\n\t     * you added, so you will be able to call the same method on sets too.\n\t     **\n\t     * See also @Raphael.el.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | Raphael.st.red = function () {\n\t     |     this.forEach(function (el) {\n\t     |         el.red();\n\t     |     });\n\t     | };\n\t     | // then use it\n\t     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();\n\t    \\*/\n\t    R.st = setproto;\n\n\t    eve.on(\"raphael.DOMload\", function () {\n\t        loaded = true;\n\t    });\n\n\t    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    (function (doc, loaded, f) {\n\t        if (doc.readyState == null && doc.addEventListener){\n\t            doc.addEventListener(loaded, f = function () {\n\t                doc.removeEventListener(loaded, f, false);\n\t                doc.readyState = \"complete\";\n\t            }, false);\n\t            doc.readyState = \"loading\";\n\t        }\n\t        function isLoaded() {\n\t            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve(\"raphael.DOMload\");\n\t        }\n\t        isLoaded();\n\t    })(document, \"DOMContentLoaded\");\n\n\t    return R;\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n\t// \n\t// Licensed under the Apache License, Version 2.0 (the \"License\");\n\t// you may not use this file except in compliance with the License.\n\t// You may obtain a copy of the License at\n\t// \n\t// http://www.apache.org/licenses/LICENSE-2.0\n\t// \n\t// Unless required by applicable law or agreed to in writing, software\n\t// distributed under the License is distributed on an \"AS IS\" BASIS,\n\t// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t// See the License for the specific language governing permissions and\n\t// limitations under the License.\n\t// ┌────────────────────────────────────────────────────────────┐ \\\\\n\t// │ Eve 0.5.0 - JavaScript Events Library                      │ \\\\\n\t// ├────────────────────────────────────────────────────────────┤ \\\\\n\t// │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\\\\n\t// └────────────────────────────────────────────────────────────┘ \\\\\n\n\t(function (glob) {\n\t    var version = \"0.5.0\",\n\t        has = \"hasOwnProperty\",\n\t        separator = /[\\.\\/]/,\n\t        comaseparator = /\\s*,\\s*/,\n\t        wildcard = \"*\",\n\t        fun = function () {},\n\t        numsort = function (a, b) {\n\t            return a - b;\n\t        },\n\t        current_event,\n\t        stop,\n\t        events = {n: {}},\n\t        firstDefined = function () {\n\t            for (var i = 0, ii = this.length; i < ii; i++) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        lastDefined = function () {\n\t            var i = this.length;\n\t            while (--i) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        objtos = Object.prototype.toString,\n\t        Str = String,\n\t        isArray = Array.isArray || function (ar) {\n\t            return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n\t        };\n\t    /*\\\n\t     * eve\n\t     [ method ]\n\n\t     * Fires event with given `name`, given scope and other parameters.\n\n\t     > Arguments\n\n\t     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n\t     - scope (object) context for the event handlers\n\t     - varargs (...) the rest of arguments will be sent to event handlers\n\n\t     = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n\t    \\*/\n\t        eve = function (name, scope) {\n\t            var e = events,\n\t                oldstop = stop,\n\t                args = Array.prototype.slice.call(arguments, 2),\n\t                listeners = eve.listeners(name),\n\t                z = 0,\n\t                f = false,\n\t                l,\n\t                indexed = [],\n\t                queue = {},\n\t                out = [],\n\t                ce = current_event,\n\t                errors = [];\n\t            out.firstDefined = firstDefined;\n\t            out.lastDefined = lastDefined;\n\t            current_event = name;\n\t            stop = 0;\n\t            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n\t                indexed.push(listeners[i].zIndex);\n\t                if (listeners[i].zIndex < 0) {\n\t                    queue[listeners[i].zIndex] = listeners[i];\n\t                }\n\t            }\n\t            indexed.sort(numsort);\n\t            while (indexed[z] < 0) {\n\t                l = queue[indexed[z++]];\n\t                out.push(l.apply(scope, args));\n\t                if (stop) {\n\t                    stop = oldstop;\n\t                    return out;\n\t                }\n\t            }\n\t            for (i = 0; i < ii; i++) {\n\t                l = listeners[i];\n\t                if (\"zIndex\" in l) {\n\t                    if (l.zIndex == indexed[z]) {\n\t                        out.push(l.apply(scope, args));\n\t                        if (stop) {\n\t                            break;\n\t                        }\n\t                        do {\n\t                            z++;\n\t                            l = queue[indexed[z]];\n\t                            l && out.push(l.apply(scope, args));\n\t                            if (stop) {\n\t                                break;\n\t                            }\n\t                        } while (l)\n\t                    } else {\n\t                        queue[l.zIndex] = l;\n\t                    }\n\t                } else {\n\t                    out.push(l.apply(scope, args));\n\t                    if (stop) {\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            stop = oldstop;\n\t            current_event = ce;\n\t            return out;\n\t        };\n\t        // Undocumented. Debug only.\n\t        eve._events = events;\n\t    /*\\\n\t     * eve.listeners\n\t     [ method ]\n\n\t     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n\t     > Arguments\n\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n\t     = (array) array of event handlers\n\t    \\*/\n\t    eve.listeners = function (name) {\n\t        var names = isArray(name) ? name : name.split(separator),\n\t            e = events,\n\t            item,\n\t            items,\n\t            k,\n\t            i,\n\t            ii,\n\t            j,\n\t            jj,\n\t            nes,\n\t            es = [e],\n\t            out = [];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            nes = [];\n\t            for (j = 0, jj = es.length; j < jj; j++) {\n\t                e = es[j].n;\n\t                items = [e[names[i]], e[wildcard]];\n\t                k = 2;\n\t                while (k--) {\n\t                    item = items[k];\n\t                    if (item) {\n\t                        nes.push(item);\n\t                        out = out.concat(item.f || []);\n\t                    }\n\t                }\n\t            }\n\t            es = nes;\n\t        }\n\t        return out;\n\t    };\n\t    /*\\\n\t     * eve.separator\n\t     [ method ]\n\n\t     * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours\n\t     * here. Be aware that if you pass a string longer than one character it will be treated as\n\t     * a list of characters.\n\n\t     - separator (string) new separator. Empty string resets to default: `.` or `/`.\n\t    \\*/\n\t    eve.separator = function (sep) {\n\t        if (sep) {\n\t            sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n\t            sep = \"[\" + sep + \"]\";\n\t            separator = new RegExp(sep);\n\t        } else {\n\t            separator = /[\\.\\/]/;\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.on\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name. You can use wildcards “`*`” for the names:\n\t     | eve.on(\"*.under.*\", f);\n\t     | eve(\"mouse.under.floor\"); // triggers f\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     - name (array) if you don’t want to use separators, you can use array of strings\n\t     - f (function) event handler function\n\t     **\n\t     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. \n\t     > Example:\n\t     | eve.on(\"mouse\", eatIt)(2);\n\t     | eve.on(\"mouse\", scream);\n\t     | eve.on(\"mouse\", catchIt)(1);\n\t     * This will ensure that `catchIt` function will be called before `eatIt`.\n\t     *\n\t     * If you want to put your handler before non-indexed handlers, specify a negative value.\n\t     * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.\n\t    \\*/\n\t    eve.on = function (name, f) {\n\t        if (typeof f != \"function\") {\n\t            return function () {};\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        for (var i = 0, ii = names.length; i < ii; i++) {\n\t            (function (name) {\n\t                var names = isArray(name) ? name : Str(name).split(separator),\n\t                    e = events,\n\t                    exist;\n\t                for (var i = 0, ii = names.length; i < ii; i++) {\n\t                    e = e.n;\n\t                    e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n\t                }\n\t                e.f = e.f || [];\n\t                for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n\t                    exist = true;\n\t                    break;\n\t                }\n\t                !exist && e.f.push(f);\n\t            }(names[i]));\n\t        }\n\t        return function (zIndex) {\n\t            if (+zIndex == +zIndex) {\n\t                f.zIndex = +zIndex;\n\t            }\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.f\n\t     [ method ]\n\t     **\n\t     * Returns function that will fire given event with optional arguments.\n\t     * Arguments that will be passed to the result function will be also\n\t     * concated to the list of final arguments.\n\t     | el.onclick = eve.f(\"click\", 1, 2);\n\t     | eve.on(\"click\", function (a, b, c) {\n\t     |     console.log(a, b, c); // 1, 2, [event object]\n\t     | });\n\t     > Arguments\n\t     - event (string) event name\n\t     - varargs (…) and any other arguments\n\t     = (function) possible event handler function\n\t    \\*/\n\t    eve.f = function (event) {\n\t        var attrs = [].slice.call(arguments, 1);\n\t        return function () {\n\t            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.stop\n\t     [ method ]\n\t     **\n\t     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n\t    \\*/\n\t    eve.stop = function () {\n\t        stop = 1;\n\t    };\n\t    /*\\\n\t     * eve.nt\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     > Arguments\n\t     **\n\t     - subname (string) #optional subname of the event\n\t     **\n\t     = (string) name of the event, if `subname` is not specified\n\t     * or\n\t     = (boolean) `true`, if current event’s name contains `subname`\n\t    \\*/\n\t    eve.nt = function (subname) {\n\t        var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n\t        if (subname) {\n\t            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n\t        }\n\t        return cur;\n\t    };\n\t    /*\\\n\t     * eve.nts\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     **\n\t     = (array) names of the event\n\t    \\*/\n\t    eve.nts = function () {\n\t        return isArray(current_event) ? current_event : current_event.split(separator);\n\t    };\n\t    /*\\\n\t     * eve.off\n\t     [ method ]\n\t     **\n\t     * Removes given function from the list of event listeners assigned to given name.\n\t     * If no arguments specified all the events will be cleared.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t    \\*/\n\t    /*\\\n\t     * eve.unbind\n\t     [ method ]\n\t     **\n\t     * See @eve.off\n\t    \\*/\n\t    eve.off = eve.unbind = function (name, f) {\n\t        if (!name) {\n\t            eve._events = events = {n: {}};\n\t            return;\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        if (names.length > 1) {\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                eve.off(names[i], f);\n\t            }\n\t            return;\n\t        }\n\t        names = isArray(name) ? name : Str(name).split(separator);\n\t        var e,\n\t            key,\n\t            splice,\n\t            i, ii, j, jj,\n\t            cur = [events];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            for (j = 0; j < cur.length; j += splice.length - 2) {\n\t                splice = [j, 1];\n\t                e = cur[j].n;\n\t                if (names[i] != wildcard) {\n\t                    if (e[names[i]]) {\n\t                        splice.push(e[names[i]]);\n\t                    }\n\t                } else {\n\t                    for (key in e) if (e[has](key)) {\n\t                        splice.push(e[key]);\n\t                    }\n\t                }\n\t                cur.splice.apply(cur, splice);\n\t            }\n\t        }\n\t        for (i = 0, ii = cur.length; i < ii; i++) {\n\t            e = cur[i];\n\t            while (e.n) {\n\t                if (f) {\n\t                    if (e.f) {\n\t                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n\t                            e.f.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !e.f.length && delete e.f;\n\t                    }\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        var funcs = e.n[key].f;\n\t                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n\t                            funcs.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !funcs.length && delete e.n[key].f;\n\t                    }\n\t                } else {\n\t                    delete e.f;\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        delete e.n[key].f;\n\t                    }\n\t                }\n\t                e = e.n;\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.once\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name to only run once then unbind itself.\n\t     | eve.once(\"login\", f);\n\t     | eve(\"login\"); // triggers f\n\t     | eve(\"login\"); // no listeners\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     = (function) same return function as @eve.on\n\t    \\*/\n\t    eve.once = function (name, f) {\n\t        var f2 = function () {\n\t            eve.off(name, f2);\n\t            return f.apply(this, arguments);\n\t        };\n\t        return eve.on(name, f2);\n\t    };\n\t    /*\\\n\t     * eve.version\n\t     [ property (string) ]\n\t     **\n\t     * Current version of the library.\n\t    \\*/\n\t    eve.version = version;\n\t    eve.toString = function () {\n\t        return \"You are running Eve \" + version;\n\t    };\n\t    (typeof module != \"undefined\" && module.exports) ? (module.exports = eve) : ( true ? (!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return eve; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))) : (glob.eve = eve));\n\t})(this);\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.svg) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        math = Math,\n\t        mmax = math.max,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        E = \"\",\n\t        S = \" \";\n\t    var xlink = \"http://www.w3.org/1999/xlink\",\n\t        markers = {\n\t            block: \"M5,0 0,2.5 5,5z\",\n\t            classic: \"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",\n\t            diamond: \"M2.5,0 5,2.5 2.5,5 0,2.5z\",\n\t            open: \"M6,1 1,3.5 6,6\",\n\t            oval: \"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"\n\t        },\n\t        markerCounter = {};\n\t    R.toString = function () {\n\t        return  \"Your browser supports SVG.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var $ = function (el, attr) {\n\t        if (attr) {\n\t            if (typeof el == \"string\") {\n\t                el = $(el);\n\t            }\n\t            for (var key in attr) if (attr[has](key)) {\n\t                if (key.substring(0, 6) == \"xlink:\") {\n\t                    el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));\n\t                } else {\n\t                    el.setAttribute(key, Str(attr[key]));\n\t                }\n\t            }\n\t        } else {\n\t            el = R._g.doc.createElementNS(\"http://www.w3.org/2000/svg\", el);\n\t            el.style && (el.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\");\n\t        }\n\t        return el;\n\t    },\n\t    addGradientFill = function (element, gradient) {\n\t        var type = \"linear\",\n\t            id = element.id + gradient,\n\t            fx = .5, fy = .5,\n\t            o = element.node,\n\t            SVG = element.paper,\n\t            s = o.style,\n\t            el = R._g.doc.getElementById(id);\n\t        if (!el) {\n\t            gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {\n\t                type = \"radial\";\n\t                if (_fx && _fy) {\n\t                    fx = toFloat(_fx);\n\t                    fy = toFloat(_fy);\n\t                    var dir = ((fy > .5) * 2 - 1);\n\t                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&\n\t                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&\n\t                        fy != .5 &&\n\t                        (fy = fy.toFixed(5) - 1e-5 * dir);\n\t                }\n\t                return E;\n\t            });\n\t            gradient = gradient.split(/\\s*\\-\\s*/);\n\t            if (type == \"linear\") {\n\t                var angle = gradient.shift();\n\t                angle = -toFloat(angle);\n\t                if (isNaN(angle)) {\n\t                    return null;\n\t                }\n\t                var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],\n\t                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);\n\t                vector[2] *= max;\n\t                vector[3] *= max;\n\t                if (vector[2] < 0) {\n\t                    vector[0] = -vector[2];\n\t                    vector[2] = 0;\n\t                }\n\t                if (vector[3] < 0) {\n\t                    vector[1] = -vector[3];\n\t                    vector[3] = 0;\n\t                }\n\t            }\n\t            var dots = R._parseDots(gradient);\n\t            if (!dots) {\n\t                return null;\n\t            }\n\t            id = id.replace(/[\\(\\)\\s,\\xb0#]/g, \"_\");\n\n\t            if (element.gradient && id != element.gradient.id) {\n\t                SVG.defs.removeChild(element.gradient);\n\t                delete element.gradient;\n\t            }\n\n\t            if (!element.gradient) {\n\t                el = $(type + \"Gradient\", {id: id});\n\t                element.gradient = el;\n\t                $(el, type == \"radial\" ? {\n\t                    fx: fx,\n\t                    fy: fy\n\t                } : {\n\t                    x1: vector[0],\n\t                    y1: vector[1],\n\t                    x2: vector[2],\n\t                    y2: vector[3],\n\t                    gradientTransform: element.matrix.invert()\n\t                });\n\t                SVG.defs.appendChild(el);\n\t                for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                    el.appendChild($(\"stop\", {\n\t                        offset: dots[i].offset ? dots[i].offset : i ? \"100%\" : \"0%\",\n\t                        \"stop-color\": dots[i].color || \"#fff\",\n\t                        \"stop-opacity\": isFinite(dots[i].opacity) ? dots[i].opacity : 1\n\t                    }));\n\t                }\n\t            }\n\t        }\n\t        $(o, {\n\t            fill: fillurl(id),\n\t            opacity: 1,\n\t            \"fill-opacity\": 1\n\t        });\n\t        s.fill = E;\n\t        s.opacity = 1;\n\t        s.fillOpacity = 1;\n\t        return 1;\n\t    },\n\t    isIE9or10 = function () {\n\t      var mode = document.documentMode;\n\t      return mode && (mode === 9 || mode === 10);\n\t    },\n\t    fillurl = function (id) {\n\t      if (isIE9or10()) {\n\t          return \"url('#\" + id + \"')\";\n\t      }\n\t      var location = document.location;\n\t      var locationString = (\n\t          location.protocol + '//' +\n\t          location.host +\n\t          location.pathname +\n\t          location.search\n\t      );\n\t      return \"url('\" + locationString + \"#\" + id + \"')\";\n\t    },\n\t    updatePosition = function (o) {\n\t        var bbox = o.getBBox(1);\n\t        $(o.pattern, {patternTransform: o.matrix.invert() + \" translate(\" + bbox.x + \",\" + bbox.y + \")\"});\n\t    },\n\t    addArrow = function (o, value, isEnd) {\n\t        if (o.type == \"path\") {\n\t            var values = Str(value).toLowerCase().split(\"-\"),\n\t                p = o.paper,\n\t                se = isEnd ? \"end\" : \"start\",\n\t                node = o.node,\n\t                attrs = o.attrs,\n\t                stroke = attrs[\"stroke-width\"],\n\t                i = values.length,\n\t                type = \"classic\",\n\t                from,\n\t                to,\n\t                dx,\n\t                refX,\n\t                attr,\n\t                w = 3,\n\t                h = 3,\n\t                t = 5;\n\t            while (i--) {\n\t                switch (values[i]) {\n\t                    case \"block\":\n\t                    case \"classic\":\n\t                    case \"oval\":\n\t                    case \"diamond\":\n\t                    case \"open\":\n\t                    case \"none\":\n\t                        type = values[i];\n\t                        break;\n\t                    case \"wide\": h = 5; break;\n\t                    case \"narrow\": h = 2; break;\n\t                    case \"long\": w = 5; break;\n\t                    case \"short\": w = 2; break;\n\t                }\n\t            }\n\t            if (type == \"open\") {\n\t                w += 2;\n\t                h += 2;\n\t                t += 2;\n\t                dx = 1;\n\t                refX = isEnd ? 4 : 1;\n\t                attr = {\n\t                    fill: \"none\",\n\t                    stroke: attrs.stroke\n\t                };\n\t            } else {\n\t                refX = dx = w / 2;\n\t                attr = {\n\t                    fill: attrs.stroke,\n\t                    stroke: \"none\"\n\t                };\n\t            }\n\t            if (o._.arrows) {\n\t                if (isEnd) {\n\t                    o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;\n\t                    o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;\n\t                } else {\n\t                    o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;\n\t                    o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;\n\t                }\n\t            } else {\n\t                o._.arrows = {};\n\t            }\n\t            if (type != \"none\") {\n\t                var pathId = \"raphael-marker-\" + type,\n\t                    markerId = \"raphael-marker-\" + se + type + w + h + \"-obj\" + o.id;\n\t                if (!R._g.doc.getElementById(pathId)) {\n\t                    p.defs.appendChild($($(\"path\"), {\n\t                        \"stroke-linecap\": \"round\",\n\t                        d: markers[type],\n\t                        id: pathId\n\t                    }));\n\t                    markerCounter[pathId] = 1;\n\t                } else {\n\t                    markerCounter[pathId]++;\n\t                }\n\t                var marker = R._g.doc.getElementById(markerId),\n\t                    use;\n\t                if (!marker) {\n\t                    marker = $($(\"marker\"), {\n\t                        id: markerId,\n\t                        markerHeight: h,\n\t                        markerWidth: w,\n\t                        orient: \"auto\",\n\t                        refX: refX,\n\t                        refY: h / 2\n\t                    });\n\t                    use = $($(\"use\"), {\n\t                        \"xlink:href\": \"#\" + pathId,\n\t                        transform: (isEnd ? \"rotate(180 \" + w / 2 + \" \" + h / 2 + \") \" : E) + \"scale(\" + w / t + \",\" + h / t + \")\",\n\t                        \"stroke-width\": (1 / ((w / t + h / t) / 2)).toFixed(4)\n\t                    });\n\t                    marker.appendChild(use);\n\t                    p.defs.appendChild(marker);\n\t                    markerCounter[markerId] = 1;\n\t                } else {\n\t                    markerCounter[markerId]++;\n\t                    use = marker.getElementsByTagName(\"use\")[0];\n\t                }\n\t                $(use, attr);\n\t                var delta = dx * (type != \"diamond\" && type != \"oval\");\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - delta * stroke;\n\t                } else {\n\t                    from = delta * stroke;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                attr = {};\n\t                attr[\"marker-\" + se] = \"url(#\" + markerId + \")\";\n\t                if (to || from) {\n\t                    attr.d = R.getSubpath(attrs.path, from, to);\n\t                }\n\t                $(node, attr);\n\t                o._.arrows[se + \"Path\"] = pathId;\n\t                o._.arrows[se + \"Marker\"] = markerId;\n\t                o._.arrows[se + \"dx\"] = delta;\n\t                o._.arrows[se + \"Type\"] = type;\n\t                o._.arrows[se + \"String\"] = value;\n\t            } else {\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - from;\n\t                } else {\n\t                    from = 0;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                o._.arrows[se + \"Path\"] && $(node, {d: R.getSubpath(attrs.path, from, to)});\n\t                delete o._.arrows[se + \"Path\"];\n\t                delete o._.arrows[se + \"Marker\"];\n\t                delete o._.arrows[se + \"dx\"];\n\t                delete o._.arrows[se + \"Type\"];\n\t                delete o._.arrows[se + \"String\"];\n\t            }\n\t            for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {\n\t                var item = R._g.doc.getElementById(attr);\n\t                item && item.parentNode.removeChild(item);\n\t            }\n\t        }\n\t    },\n\t    dasharray = {\n\t        \"-\": [3, 1],\n\t        \".\": [1, 1],\n\t        \"-.\": [3, 1, 1, 1],\n\t        \"-..\": [3, 1, 1, 1, 1, 1],\n\t        \". \": [1, 3],\n\t        \"- \": [4, 3],\n\t        \"--\": [8, 3],\n\t        \"- .\": [4, 3, 1, 3],\n\t        \"--.\": [8, 3, 1, 3],\n\t        \"--..\": [8, 3, 1, 3, 1, 3]\n\t    },\n\t    addDashes = function (o, value, params) {\n\t        value = dasharray[Str(value).toLowerCase()];\n\t        if (value) {\n\t            var width = o.attrs[\"stroke-width\"] || \"1\",\n\t                butt = {round: width, square: width, butt: 0}[o.attrs[\"stroke-linecap\"] || params[\"stroke-linecap\"]] || 0,\n\t                dashes = [],\n\t                i = value.length;\n\t            while (i--) {\n\t                dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;\n\t            }\n\t            $(o.node, {\"stroke-dasharray\": dashes.join(\",\")});\n\t        }\n\t        else {\n\t          $(o.node, {\"stroke-dasharray\": \"none\"});\n\t        }\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        var node = o.node,\n\t            attrs = o.attrs,\n\t            vis = node.style.visibility;\n\t        node.style.visibility = \"hidden\";\n\t        for (var att in params) {\n\t            if (params[has](att)) {\n\t                if (!R._availableAttrs[has](att)) {\n\t                    continue;\n\t                }\n\t                var value = params[att];\n\t                attrs[att] = value;\n\t                switch (att) {\n\t                    case \"blur\":\n\t                        o.blur(value);\n\t                        break;\n\t                    case \"title\":\n\t                        var title = node.getElementsByTagName(\"title\");\n\n\t                        // Use the existing <title>.\n\t                        if (title.length && (title = title[0])) {\n\t                          title.firstChild.nodeValue = value;\n\t                        } else {\n\t                          title = $(\"title\");\n\t                          var val = R._g.doc.createTextNode(value);\n\t                          title.appendChild(val);\n\t                          node.appendChild(title);\n\t                        }\n\t                        break;\n\t                    case \"href\":\n\t                    case \"target\":\n\t                        var pn = node.parentNode;\n\t                        if (pn.tagName.toLowerCase() != \"a\") {\n\t                            var hl = $(\"a\");\n\t                            pn.insertBefore(hl, node);\n\t                            hl.appendChild(node);\n\t                            pn = hl;\n\t                        }\n\t                        if (att == \"target\") {\n\t                            pn.setAttributeNS(xlink, \"show\", value == \"blank\" ? \"new\" : value);\n\t                        } else {\n\t                            pn.setAttributeNS(xlink, att, value);\n\t                        }\n\t                        break;\n\t                    case \"cursor\":\n\t                        node.style.cursor = value;\n\t                        break;\n\t                    case \"transform\":\n\t                        o.transform(value);\n\t                        break;\n\t                    case \"arrow-start\":\n\t                        addArrow(o, value);\n\t                        break;\n\t                    case \"arrow-end\":\n\t                        addArrow(o, value, 1);\n\t                        break;\n\t                    case \"clip-rect\":\n\t                        var rect = Str(value).split(separator);\n\t                        if (rect.length == 4) {\n\t                            o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);\n\t                            var el = $(\"clipPath\"),\n\t                                rc = $(\"rect\");\n\t                            el.id = R.createUUID();\n\t                            $(rc, {\n\t                                x: rect[0],\n\t                                y: rect[1],\n\t                                width: rect[2],\n\t                                height: rect[3]\n\t                            });\n\t                            el.appendChild(rc);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {\"clip-path\": \"url(#\" + el.id + \")\"});\n\t                            o.clip = rc;\n\t                        }\n\t                        if (!value) {\n\t                            var path = node.getAttribute(\"clip-path\");\n\t                            if (path) {\n\t                                var clip = R._g.doc.getElementById(path.replace(/(^url\\(#|\\)$)/g, E));\n\t                                clip && clip.parentNode.removeChild(clip);\n\t                                $(node, {\"clip-path\": E});\n\t                                delete o.clip;\n\t                            }\n\t                        }\n\t                    break;\n\t                    case \"path\":\n\t                        if (o.type == \"path\") {\n\t                            $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : \"M0,0\"});\n\t                            o._.dirty = 1;\n\t                            if (o._.arrows) {\n\t                                \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                                \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                            }\n\t                        }\n\t                        break;\n\t                    case \"width\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fx) {\n\t                            att = \"x\";\n\t                            value = attrs.x;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"x\":\n\t                        if (attrs.fx) {\n\t                            value = -attrs.x - (attrs.width || 0);\n\t                        }\n\t                    case \"rx\":\n\t                        if (att == \"rx\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cx\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"height\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fy) {\n\t                            att = \"y\";\n\t                            value = attrs.y;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"y\":\n\t                        if (attrs.fy) {\n\t                            value = -attrs.y - (attrs.height || 0);\n\t                        }\n\t                    case \"ry\":\n\t                        if (att == \"ry\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cy\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"r\":\n\t                        if (o.type == \"rect\") {\n\t                            $(node, {rx: value, ry: value});\n\t                        } else {\n\t                            node.setAttribute(att, value);\n\t                        }\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"src\":\n\t                        if (o.type == \"image\") {\n\t                            node.setAttributeNS(xlink, \"href\", value);\n\t                        }\n\t                        break;\n\t                    case \"stroke-width\":\n\t                        if (o._.sx != 1 || o._.sy != 1) {\n\t                            value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;\n\t                        }\n\t                        node.setAttribute(att, value);\n\t                        if (attrs[\"stroke-dasharray\"]) {\n\t                            addDashes(o, attrs[\"stroke-dasharray\"], params);\n\t                        }\n\t                        if (o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"stroke-dasharray\":\n\t                        addDashes(o, value, params);\n\t                        break;\n\t                    case \"fill\":\n\t                        var isURL = Str(value).match(R._ISURL);\n\t                        if (isURL) {\n\t                            el = $(\"pattern\");\n\t                            var ig = $(\"image\");\n\t                            el.id = R.createUUID();\n\t                            $(el, {x: 0, y: 0, patternUnits: \"userSpaceOnUse\", height: 1, width: 1});\n\t                            $(ig, {x: 0, y: 0, \"xlink:href\": isURL[1]});\n\t                            el.appendChild(ig);\n\n\t                            (function (el) {\n\t                                R._preload(isURL[1], function () {\n\t                                    var w = this.offsetWidth,\n\t                                        h = this.offsetHeight;\n\t                                    $(el, {width: w, height: h});\n\t                                    $(ig, {width: w, height: h});\n\t                                });\n\t                            })(el);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {fill: \"url(#\" + el.id + \")\"});\n\t                            o.pattern = el;\n\t                            o.pattern && updatePosition(o);\n\t                            break;\n\t                        }\n\t                        var clr = R.getRGB(value);\n\t                        if (!clr.error) {\n\t                            delete params.gradient;\n\t                            delete attrs.gradient;\n\t                            !R.is(attrs.opacity, \"undefined\") &&\n\t                                R.is(params.opacity, \"undefined\") &&\n\t                                $(node, {opacity: attrs.opacity});\n\t                            !R.is(attrs[\"fill-opacity\"], \"undefined\") &&\n\t                                R.is(params[\"fill-opacity\"], \"undefined\") &&\n\t                                $(node, {\"fill-opacity\": attrs[\"fill-opacity\"]});\n\t                        } else if ((o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value)) {\n\t                            if (\"opacity\" in attrs || \"fill-opacity\" in attrs) {\n\t                                var gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                                if (gradient) {\n\t                                    var stops = gradient.getElementsByTagName(\"stop\");\n\t                                    $(stops[stops.length - 1], {\"stop-opacity\": (\"opacity\" in attrs ? attrs.opacity : 1) * (\"fill-opacity\" in attrs ? attrs[\"fill-opacity\"] : 1)});\n\t                                }\n\t                            }\n\t                            attrs.gradient = value;\n\t                            attrs.fill = \"none\";\n\t                            break;\n\t                        }\n\t                        clr[has](\"opacity\") && $(node, {\"fill-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                    case \"stroke\":\n\t                        clr = R.getRGB(value);\n\t                        node.setAttribute(att, clr.hex);\n\t                        att == \"stroke\" && clr[has](\"opacity\") && $(node, {\"stroke-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                        if (att == \"stroke\" && o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"gradient\":\n\t                        (o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value);\n\t                        break;\n\t                    case \"opacity\":\n\t                        if (attrs.gradient && !attrs[has](\"stroke-opacity\")) {\n\t                            $(node, {\"stroke-opacity\": value > 1 ? value / 100 : value});\n\t                        }\n\t                        // fall\n\t                    case \"fill-opacity\":\n\t                        if (attrs.gradient) {\n\t                            gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                            if (gradient) {\n\t                                stops = gradient.getElementsByTagName(\"stop\");\n\t                                $(stops[stops.length - 1], {\"stop-opacity\": value});\n\t                            }\n\t                            break;\n\t                        }\n\t                    default:\n\t                        att == \"font-size\" && (value = toInt(value, 10) + \"px\");\n\t                        var cssrule = att.replace(/(\\-.)/g, function (w) {\n\t                            return w.substring(1).toUpperCase();\n\t                        });\n\t                        node.style[cssrule] = value;\n\t                        o._.dirty = 1;\n\t                        node.setAttribute(att, value);\n\t                        break;\n\t                }\n\t            }\n\t        }\n\n\t        tuneText(o, params);\n\t        node.style.visibility = vis;\n\t    },\n\t    leading = 1.2,\n\t    tuneText = function (el, params) {\n\t        if (el.type != \"text\" || !(params[has](\"text\") || params[has](\"font\") || params[has](\"font-size\") || params[has](\"x\") || params[has](\"y\"))) {\n\t            return;\n\t        }\n\t        var a = el.attrs,\n\t            node = el.node,\n\t            fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue(\"font-size\"), 10) : 10;\n\n\t        if (params[has](\"text\")) {\n\t            a.text = params.text;\n\t            while (node.firstChild) {\n\t                node.removeChild(node.firstChild);\n\t            }\n\t            var texts = Str(params.text).split(\"\\n\"),\n\t                tspans = [],\n\t                tspan;\n\t            for (var i = 0, ii = texts.length; i < ii; i++) {\n\t                tspan = $(\"tspan\");\n\t                i && $(tspan, {dy: fontSize * leading, x: a.x});\n\t                tspan.appendChild(R._g.doc.createTextNode(texts[i]));\n\t                node.appendChild(tspan);\n\t                tspans[i] = tspan;\n\t            }\n\t        } else {\n\t            tspans = node.getElementsByTagName(\"tspan\");\n\t            for (i = 0, ii = tspans.length; i < ii; i++) if (i) {\n\t                $(tspans[i], {dy: fontSize * leading, x: a.x});\n\t            } else {\n\t                $(tspans[0], {dy: 0});\n\t            }\n\t        }\n\t        $(node, {x: a.x, y: a.y});\n\t        el._.dirty = 1;\n\t        var bb = el._getBBox(),\n\t            dif = a.y - (bb.y + bb.height / 2);\n\t        dif && R.is(dif, \"finite\") && $(tspans[0], {dy: dif});\n\t    },\n\t    getRealNode = function (node) {\n\t        if (node.parentNode && node.parentNode.tagName.toLowerCase() === \"a\") {\n\t            return node.parentNode;\n\t        } else {\n\t            return node;\n\t        }\n\t    },\n\t    Element = function (node, svg) {\n\t        var X = 0,\n\t            Y = 0;\n\t        /*\\\n\t         * Element.node\n\t         [ property (object) ]\n\t         **\n\t         * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\n\t         **\n\t         * Note: Don’t mess with it.\n\t         > Usage\n\t         | // draw a circle at coordinate 10,10 with radius of 10\n\t         | var c = paper.circle(10, 10, 10);\n\t         | c.node.onclick = function () {\n\t         |     c.attr(\"fill\", \"red\");\n\t         | };\n\t        \\*/\n\t        this[0] = this.node = node;\n\t        /*\\\n\t         * Element.raphael\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to @Raphael object. In case it is not available.\n\t         > Usage\n\t         | Raphael.el.red = function () {\n\t         |     var hsb = this.paper.raphael.rgb2hsb(this.attr(\"fill\"));\n\t         |     hsb.h = 1;\n\t         |     this.attr({fill: this.paper.raphael.hsb2rgb(hsb).hex});\n\t         | }\n\t        \\*/\n\t        node.raphael = true;\n\t        /*\\\n\t         * Element.id\n\t         [ property (number) ]\n\t         **\n\t         * Unique id of the element. Especially useful when you want to listen to events of the element,\n\t         * because all events are fired in format `<module>.<action>.<id>`. Also useful for @Paper.getById method.\n\t        \\*/\n\t        this.id = guid();\n\t        node.raphaelid = this.id;\n\n\t        /**\n\t        * Method that returns a 5 letter/digit id, enough for 36^5 = 60466176 elements\n\t        * @returns {string} id\n\t        */\n\t        function guid() {\n\t            return (\"0000\" + (Math.random()*Math.pow(36,5) << 0).toString(36)).slice(-5);\n\t        }\n\n\t        this.matrix = R.matrix();\n\t        this.realPath = null;\n\t        /*\\\n\t         * Element.paper\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to “paper” where object drawn. Mainly for use in plugins and element extensions.\n\t         > Usage\n\t         | Raphael.el.cross = function () {\n\t         |     this.attr({fill: \"red\"});\n\t         |     this.paper.path(\"M10,10L50,50M50,10L10,50\")\n\t         |         .attr({stroke: \"red\"});\n\t         | }\n\t        \\*/\n\t        this.paper = svg;\n\t        this.attrs = this.attrs || {};\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            deg: 0,\n\t            dx: 0,\n\t            dy: 0,\n\t            dirty: 1\n\t        };\n\t        !svg.bottom && (svg.bottom = this);\n\t        /*\\\n\t         * Element.prev\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the previous element in the hierarchy.\n\t        \\*/\n\t        this.prev = svg.top;\n\t        svg.top && (svg.top.next = this);\n\t        svg.top = this;\n\t        /*\\\n\t         * Element.next\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the next element in the hierarchy.\n\t        \\*/\n\t        this.next = null;\n\t    },\n\t    elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\n\t    R._engine.path = function (pathString, SVG) {\n\t        var el = $(\"path\");\n\t        SVG.canvas && SVG.canvas.appendChild(el);\n\t        var p = new Element(el, SVG);\n\t        p.type = \"path\";\n\t        setFillAndStroke(p, {\n\t            fill: \"none\",\n\t            stroke: \"#000\",\n\t            path: pathString\n\t        });\n\t        return p;\n\t    };\n\t    /*\\\n\t     * Element.rotate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds rotation by given angle around given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     - cx (number) #optional x coordinate of the centre of rotation\n\t     - cy (number) #optional y coordinate of the centre of rotation\n\t     * If cx & cy aren’t specified centre of the shape is used as a point of rotation.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.scale\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds scale by given amount relative to given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - sx (number) horisontal scale amount\n\t     - sy (number) vertical scale amount\n\t     - cx (number) #optional x coordinate of the centre of scale\n\t     - cy (number) #optional y coordinate of the centre of scale\n\t     * If cx & cy aren’t specified centre of the shape is used instead.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.translate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds translation by given amount to the list of transformations of the element.\n\t     > Parameters\n\t     - dx (number) horisontal shift\n\t     - dy (number) vertical shift\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.transform\n\t     [ method ]\n\t     **\n\t     * Adds transformation to the element which is separate to other attributes,\n\t     * i.e. translation doesn’t change `x` or `y` of the rectange. The format\n\t     * of transformation string is similar to the path string syntax:\n\t     | \"t100,100r30,100,100s2,2,100,100r45s1.5\"\n\t     * Each letter is a command. There are four commands: `t` is for translate, `r` is for rotate, `s` is for\n\t     * scale and `m` is for matrix.\n\t     *\n\t     * There are also alternative “absolute” translation, rotation and scale: `T`, `R` and `S`. They will not take previous transformation into account. For example, `...T100,0` will always move element 100 px horisontally, while `...t100,0` could move it vertically if there is `r90` before. Just compare results of `r90t100,0` and `r90T100,0`.\n\t     *\n\t     * So, the example line above could be read like “translate by 100, 100; rotate 30° around 100, 100; scale twice around 100, 100;\n\t     * rotate 45° around centre; scale 1.5 times relative to centre”. As you can see rotate and scale commands have origin\n\t     * coordinates as optional parameters, the default is the centre point of the element.\n\t     * Matrix accepts six parameters.\n\t     > Usage\n\t     | var el = paper.rect(10, 20, 300, 200);\n\t     | // translate 100, 100, rotate 45°, translate -100, 0\n\t     | el.transform(\"t100,100r45t-100,0\");\n\t     | // if you want you can append or prepend transformations\n\t     | el.transform(\"...t50,50\");\n\t     | el.transform(\"s2...\");\n\t     | // or even wrap\n\t     | el.transform(\"t50,50...t-50-50\");\n\t     | // to reset transformation call method with empty string\n\t     | el.transform(\"\");\n\t     | // to get current value call it without parameters\n\t     | console.log(el.transform());\n\t     > Parameters\n\t     - tstr (string) #optional transformation string\n\t     * If tstr isn’t specified\n\t     = (string) current transformation string\n\t     * else\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.transform = function (tstr) {\n\t        var _ = this._;\n\t        if (tstr == null) {\n\t            return _.transform;\n\t        }\n\t        R._extractTransform(this, tstr);\n\n\t        this.clip && $(this.clip, {transform: this.matrix.invert()});\n\t        this.pattern && updatePosition(this);\n\t        this.node && $(this.node, {transform: this.matrix});\n\n\t        if (_.sx != 1 || _.sy != 1) {\n\t            var sw = this.attrs[has](\"stroke-width\") ? this.attrs[\"stroke-width\"] : 1;\n\t            this.attr({\"stroke-width\": sw});\n\t        }\n\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.hide\n\t     [ method ]\n\t     **\n\t     * Makes element invisible. See @Element.show.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hide = function () {\n\t        if(!this.removed) this.node.style.display = \"none\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.show\n\t     [ method ]\n\t     **\n\t     * Makes element visible. See @Element.hide.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.show = function () {\n\t        if(!this.removed) this.node.style.display = \"\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.remove\n\t     [ method ]\n\t     **\n\t     * Removes element from the paper.\n\t    \\*/\n\t    elproto.remove = function () {\n\t        var node = getRealNode(this.node);\n\t        if (this.removed || !node.parentNode) {\n\t            return;\n\t        }\n\t        var paper = this.paper;\n\t        paper.__set__ && paper.__set__.exclude(this);\n\t        eve.unbind(\"raphael.*.*.\" + this.id);\n\t        if (this.gradient) {\n\t            paper.defs.removeChild(this.gradient);\n\t        }\n\t        R._tear(this, paper);\n\n\t        node.parentNode.removeChild(node);\n\n\t        // Remove custom data for element\n\t        this.removeData();\n\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.node.style.display == \"none\") {\n\t            this.show();\n\t            var hide = true;\n\t        }\n\t        var canvasHidden = false,\n\t            containerStyle;\n\t        if (this.paper.canvas.parentElement) {\n\t          containerStyle = this.paper.canvas.parentElement.style;\n\t        } //IE10+ can't find parentElement\n\t        else if (this.paper.canvas.parentNode) {\n\t          containerStyle = this.paper.canvas.parentNode.style;\n\t        }\n\n\t        if(containerStyle && containerStyle.display == \"none\") {\n\t          canvasHidden = true;\n\t          containerStyle.display = \"\";\n\t        }\n\t        var bbox = {};\n\t        try {\n\t            bbox = this.node.getBBox();\n\t        } catch(e) {\n\t            // Firefox 3.0.x, 25.0.1 (probably more versions affected) play badly here - possible fix\n\t            bbox = {\n\t                x: this.node.clientLeft,\n\t                y: this.node.clientTop,\n\t                width: this.node.clientWidth,\n\t                height: this.node.clientHeight\n\t            }\n\t        } finally {\n\t            bbox = bbox || {};\n\t            if(canvasHidden){\n\t              containerStyle.display = \"none\";\n\t            }\n\t        }\n\t        hide && this.hide();\n\t        return bbox;\n\t    };\n\t    /*\\\n\t     * Element.attr\n\t     [ method ]\n\t     **\n\t     * Sets the attributes of the element.\n\t     > Parameters\n\t     - attrName (string) attribute’s name\n\t     - value (string) value\n\t     * or\n\t     - params (object) object of name/value pairs\n\t     * or\n\t     - attrName (string) attribute’s name\n\t     * or\n\t     - attrNames (array) in this case method returns array of current values for given attribute names\n\t     = (object) @Element if attrsName & value or params are passed in.\n\t     = (...) value of the attribute if only attrsName is passed in.\n\t     = (array) array of values of the attribute if attrsNames is passed in.\n\t     = (object) object of attributes if nothing is passed in.\n\t     > Possible parameters\n\t     # <p>Please refer to the <a href=\"http://www.w3.org/TR/SVG/\" title=\"The W3C Recommendation for the SVG language describes these properties in detail.\">SVG specification</a> for an explanation of these parameters.</p>\n\t     o arrow-end (string) arrowhead on the end of the path. The format for string is `<type>[-<width>[-<length>]]`. Possible types: `classic`, `block`, `open`, `oval`, `diamond`, `none`, width: `wide`, `narrow`, `medium`, length: `long`, `short`, `midium`.\n\t     o clip-rect (string) comma or space separated values: x, y, width and height\n\t     o cursor (string) CSS type of the cursor\n\t     o cx (number) the x-axis coordinate of the center of the circle, or ellipse\n\t     o cy (number) the y-axis coordinate of the center of the circle, or ellipse\n\t     o fill (string) colour, gradient or image\n\t     o fill-opacity (number)\n\t     o font (string)\n\t     o font-family (string)\n\t     o font-size (number) font size in pixels\n\t     o font-weight (string)\n\t     o height (number)\n\t     o href (string) URL, if specified element behaves as hyperlink\n\t     o opacity (number)\n\t     o path (string) SVG path string format\n\t     o r (number) radius of the circle, ellipse or rounded corner on the rect\n\t     o rx (number) horisontal radius of the ellipse\n\t     o ry (number) vertical radius of the ellipse\n\t     o src (string) image URL, only works for @Element.image element\n\t     o stroke (string) stroke colour\n\t     o stroke-dasharray (string) [“”, “none”, “`-`”, “`.`”, “`-.`”, “`-..`”, “`. `”, “`- `”, “`--`”, “`- .`”, “`--.`”, “`--..`”]\n\t     o stroke-linecap (string) [“`butt`”, “`square`”, “`round`”]\n\t     o stroke-linejoin (string) [“`bevel`”, “`round`”, “`miter`”]\n\t     o stroke-miterlimit (number)\n\t     o stroke-opacity (number)\n\t     o stroke-width (number) stroke width in pixels, default is '1'\n\t     o target (string) used with href\n\t     o text (string) contents of the text element. Use `\\n` for multiline text\n\t     o text-anchor (string) [“`start`”, “`middle`”, “`end`”], default is “`middle`”\n\t     o title (string) will create tooltip with a given text\n\t     o transform (string) see @Element.transform\n\t     o width (number)\n\t     o x (number)\n\t     o y (number)\n\t     > Gradients\n\t     * Linear gradient format: “`‹angle›-‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`90-#fff-#000`” – 90°\n\t     * gradient from white to black or “`0-#fff-#f00:20-#000`” – 0° gradient from white via red (at 20%) to black.\n\t     *\n\t     * radial gradient: “`r[(‹fx›, ‹fy›)]‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`r#fff-#000`” –\n\t     * gradient from white to black or “`r(0.25, 0.75)#fff-#000`” – gradient from white to black with focus point\n\t     * at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can only be applied to circles and ellipses.\n\t     > Path String\n\t     # <p>Please refer to <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a path’s data attribute’s format are described in the SVG specification.\">SVG documentation regarding path string</a>. Raphaël fully supports it.</p>\n\t     > Colour Parsing\n\t     # <ul>\n\t     #     <li>Colour name (“<code>red</code>”, “<code>green</code>”, “<code>cornflowerblue</code>”, etc)</li>\n\t     #     <li>#••• — shortened HTML colour: (“<code>#000</code>”, “<code>#fc0</code>”, etc)</li>\n\t     #     <li>#•••••• — full length HTML colour: (“<code>#000000</code>”, “<code>#bd2300</code>”)</li>\n\t     #     <li>rgb(•••, •••, •••) — red, green and blue channels’ values: (“<code>rgb(200,&nbsp;100,&nbsp;0)</code>”)</li>\n\t     #     <li>rgb(•••%, •••%, •••%) — same as above, but in %: (“<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>”)</li>\n\t     #     <li>rgba(•••, •••, •••, •••) — red, green and blue channels’ values: (“<code>rgba(200,&nbsp;100,&nbsp;0, .5)</code>”)</li>\n\t     #     <li>rgba(•••%, •••%, •••%, •••%) — same as above, but in %: (“<code>rgba(100%,&nbsp;175%,&nbsp;0%, 50%)</code>”)</li>\n\t     #     <li>hsb(•••, •••, •••) — hue, saturation and brightness values: (“<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>”)</li>\n\t     #     <li>hsb(•••%, •••%, •••%) — same as above, but in %</li>\n\t     #     <li>hsba(•••, •••, •••, •••) — same as above, but with opacity</li>\n\t     #     <li>hsl(•••, •••, •••) — almost the same as hsb, see <a href=\"http://en.wikipedia.org/wiki/HSL_and_HSV\" title=\"HSL and HSV - Wikipedia, the free encyclopedia\">Wikipedia page</a></li>\n\t     #     <li>hsl(•••%, •••%, •••%) — same as above, but in %</li>\n\t     #     <li>hsla(•••, •••, •••, •••) — same as above, but with opacity</li>\n\t     #     <li>Optionally for hsb and hsl you could specify hue as a degree: “<code>hsl(240deg,&nbsp;1,&nbsp;.5)</code>” or, if you want to go fancy, “<code>hsl(240°,&nbsp;1,&nbsp;.5)</code>”</li>\n\t     # </ul>\n\t    \\*/\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == \"fill\" && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            if (name == \"transform\") {\n\t                return this._.transform;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        if (value != null) {\n\t            var params = {};\n\t            params[name] = value;\n\t        } else if (name != null && R.is(name, \"object\")) {\n\t            params = name;\n\t        }\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t            this.attrs[key] = params[key];\n\t            for (var subkey in par) if (par[has](subkey)) {\n\t                params[subkey] = par[subkey];\n\t            }\n\t        }\n\t        setFillAndStroke(this, params);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toFront\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the closest to the viewer’s eyes, on top of other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toFront = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        node.parentNode.appendChild(node);\n\t        var svg = this.paper;\n\t        svg.top != this && R._tofront(this, svg);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toBack\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the furthest from the viewer’s eyes, behind other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        var parentNode = node.parentNode;\n\t        parentNode.insertBefore(node, parentNode.firstChild);\n\t        R._toback(this, this.paper);\n\t        var svg = this.paper;\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertAfter\n\t     [ method ]\n\t     **\n\t     * Inserts current object after the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var afterNode = getRealNode(element.node || element[element.length - 1].node);\n\t        if (afterNode.nextSibling) {\n\t            afterNode.parentNode.insertBefore(node, afterNode.nextSibling);\n\t        } else {\n\t            afterNode.parentNode.appendChild(node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertBefore\n\t     [ method ]\n\t     **\n\t     * Inserts current object before the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var beforeNode = getRealNode(element.node || element[0].node);\n\t        beforeNode.parentNode.insertBefore(node, beforeNode);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        // Experimental. No Safari support. Use it on your own risk.\n\t        var t = this;\n\t        if (+size !== 0) {\n\t            var fltr = $(\"filter\"),\n\t                blur = $(\"feGaussianBlur\");\n\t            t.attrs.blur = size;\n\t            fltr.id = R.createUUID();\n\t            $(blur, {stdDeviation: +size || 1.5});\n\t            fltr.appendChild(blur);\n\t            t.paper.defs.appendChild(fltr);\n\t            t._blur = fltr;\n\t            $(t.node, {filter: \"url(#\" + fltr.id + \")\"});\n\t        } else {\n\t            if (t._blur) {\n\t                t._blur.parentNode.removeChild(t._blur);\n\t                delete t._blur;\n\t                delete t.attrs.blur;\n\t            }\n\t            t.node.removeAttribute(\"filter\");\n\t        }\n\t        return t;\n\t    };\n\t    R._engine.circle = function (svg, x, y, r) {\n\t        var el = $(\"circle\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, r: r, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"circle\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.rect = function (svg, x, y, w, h, r) {\n\t        var el = $(\"rect\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, rx: r || 0, ry: r || 0, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"rect\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (svg, x, y, rx, ry) {\n\t        var el = $(\"ellipse\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"ellipse\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.image = function (svg, src, x, y, w, h) {\n\t        var el = $(\"image\");\n\t        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: \"none\"});\n\t        el.setAttributeNS(xlink, \"href\", src);\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, src: src};\n\t        res.type = \"image\";\n\t        return res;\n\t    };\n\t    R._engine.text = function (svg, x, y, text) {\n\t        var el = $(\"text\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {\n\t            x: x,\n\t            y: y,\n\t            \"text-anchor\": \"middle\",\n\t            text: text,\n\t            \"font-family\": R._availableAttrs[\"font-family\"],\n\t            \"font-size\": R._availableAttrs[\"font-size\"],\n\t            stroke: \"none\",\n\t            fill: \"#000\"\n\t        };\n\t        res.type = \"text\";\n\t        setFillAndStroke(res, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        this.width = width || this.width;\n\t        this.height = height || this.height;\n\t        this.canvas.setAttribute(\"width\", this.width);\n\t        this.canvas.setAttribute(\"height\", this.height);\n\t        if (this._viewBox) {\n\t            this.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con && con.container,\n\t            x = con.x,\n\t            y = con.y,\n\t            width = con.width,\n\t            height = con.height;\n\t        if (!container) {\n\t            throw new Error(\"SVG container not found.\");\n\t        }\n\t        var cnvs = $(\"svg\"),\n\t            css = \"overflow:hidden;\",\n\t            isFloating;\n\t        x = x || 0;\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        $(cnvs, {\n\t            height: height,\n\t            version: 1.1,\n\t            width: width,\n\t            xmlns: \"http://www.w3.org/2000/svg\",\n\t            \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n\t        });\n\t        if (container == 1) {\n\t            cnvs.style.cssText = css + \"position:absolute;left:\" + x + \"px;top:\" + y + \"px\";\n\t            R._g.doc.body.appendChild(cnvs);\n\t            isFloating = 1;\n\t        } else {\n\t            cnvs.style.cssText = css + \"position:relative\";\n\t            if (container.firstChild) {\n\t                container.insertBefore(cnvs, container.firstChild);\n\t            } else {\n\t                container.appendChild(cnvs);\n\t            }\n\t        }\n\t        container = new R._Paper;\n\t        container.width = width;\n\t        container.height = height;\n\t        container.canvas = cnvs;\n\t        container.clear();\n\t        container._left = container._top = 0;\n\t        isFloating && (container.renderfix = function () {});\n\t        container.renderfix();\n\t        return container;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            size = mmax(w / paperSize.width, h / paperSize.height),\n\t            top = this.top,\n\t            aspectRatio = fit ? \"xMidYMid meet\" : \"xMinYMin\",\n\t            vb,\n\t            sw;\n\t        if (x == null) {\n\t            if (this._vbSize) {\n\t                size = 1;\n\t            }\n\t            delete this._vbSize;\n\t            vb = \"0 0 \" + this.width + S + this.height;\n\t        } else {\n\t            this._vbSize = size;\n\t            vb = x + S + y + S + w + S + h;\n\t        }\n\t        $(this.canvas, {\n\t            viewBox: vb,\n\t            preserveAspectRatio: aspectRatio\n\t        });\n\t        while (size && top) {\n\t            sw = \"stroke-width\" in top.attrs ? top.attrs[\"stroke-width\"] : 1;\n\t            top.attr({\"stroke-width\": sw});\n\t            top._.dirty = 1;\n\t            top._.dirtyT = 1;\n\t            top = top.prev;\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.renderfix\n\t     [ method ]\n\t     **\n\t     * Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependent\n\t     * on other elements after reflow it could shift half pixel which cause for lines to lost their crispness.\n\t     * This method fixes the issue.\n\t     **\n\t       Special thanks to Mariusz Nowak (http://www.medikoo.com/) for this method.\n\t    \\*/\n\t    R.prototype.renderfix = function () {\n\t        var cnvs = this.canvas,\n\t            s = cnvs.style,\n\t            pos;\n\t        try {\n\t            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix();\n\t        } catch (e) {\n\t            pos = cnvs.createSVGMatrix();\n\t        }\n\t        var left = -pos.e % 1,\n\t            top = -pos.f % 1;\n\t        if (left || top) {\n\t            if (left) {\n\t                this._left = (this._left + left) % 1;\n\t                s.left = this._left + \"px\";\n\t            }\n\t            if (top) {\n\t                this._top = (this._top + top) % 1;\n\t                s.top = this._top + \"px\";\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * Paper.clear\n\t     [ method ]\n\t     **\n\t     * Clears the paper, i.e. removes all the elements.\n\t    \\*/\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        var c = this.canvas;\n\t        while (c.firstChild) {\n\t            c.removeChild(c.firstChild);\n\t        }\n\t        this.bottom = this.top = null;\n\t        (this.desc = $(\"desc\")).appendChild(R._g.doc.createTextNode(\"Created with Rapha\\xebl \" + R.version));\n\t        c.appendChild(this.desc);\n\t        c.appendChild(this.defs = $(\"defs\"));\n\t    };\n\t    /*\\\n\t     * Paper.remove\n\t     [ method ]\n\t     **\n\t     * Removes the paper from the DOM.\n\t    \\*/\n\t    R.prototype.remove = function () {\n\t        eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t    };\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.vml) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        math = Math,\n\t        round = math.round,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        fillString = \"fill\",\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        ms = \" progid:DXImageTransform.Microsoft\",\n\t        S = \" \",\n\t        E = \"\",\n\t        map = {M: \"m\", L: \"l\", C: \"c\", Z: \"x\", m: \"t\", l: \"r\", c: \"v\", z: \"x\"},\n\t        bites = /([clmz]),?([^clmz]*)/gi,\n\t        blurregexp = / progid:\\S+Blur\\([^\\)]+\\)/g,\n\t        val = /-?[^,\\s-]+/g,\n\t        cssDot = \"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",\n\t        zoom = 21600,\n\t        pathTypes = {path: 1, rect: 1, image: 1},\n\t        ovalTypes = {circle: 1, ellipse: 1},\n\t        path2vml = function (path) {\n\t            var total =  /[ahqstv]/ig,\n\t                command = R._pathToAbsolute;\n\t            Str(path).match(total) && (command = R._path2curve);\n\t            total = /[clmz]/g;\n\t            if (command == R._pathToAbsolute && !Str(path).match(total)) {\n\t                var res = Str(path).replace(bites, function (all, command, args) {\n\t                    var vals = [],\n\t                        isMove = command.toLowerCase() == \"m\",\n\t                        res = map[command];\n\t                    args.replace(val, function (value) {\n\t                        if (isMove && vals.length == 2) {\n\t                            res += vals + map[command == \"m\" ? \"l\" : \"L\"];\n\t                            vals = [];\n\t                        }\n\t                        vals.push(round(value * zoom));\n\t                    });\n\t                    return res + vals;\n\t                });\n\t                return res;\n\t            }\n\t            var pa = command(path), p, r;\n\t            res = [];\n\t            for (var i = 0, ii = pa.length; i < ii; i++) {\n\t                p = pa[i];\n\t                r = pa[i][0].toLowerCase();\n\t                r == \"z\" && (r = \"x\");\n\t                for (var j = 1, jj = p.length; j < jj; j++) {\n\t                    r += round(p[j] * zoom) + (j != jj - 1 ? \",\" : E);\n\t                }\n\t                res.push(r);\n\t            }\n\t            return res.join(S);\n\t        },\n\t        compensation = function (deg, dx, dy) {\n\t            var m = R.matrix();\n\t            m.rotate(-deg, .5, .5);\n\t            return {\n\t                dx: m.x(dx, dy),\n\t                dy: m.y(dx, dy)\n\t            };\n\t        },\n\t        setCoords = function (p, sx, sy, dx, dy, deg) {\n\t            var _ = p._,\n\t                m = p.matrix,\n\t                fillpos = _.fillpos,\n\t                o = p.node,\n\t                s = o.style,\n\t                y = 1,\n\t                flip = \"\",\n\t                dxdy,\n\t                kx = zoom / sx,\n\t                ky = zoom / sy;\n\t            s.visibility = \"hidden\";\n\t            if (!sx || !sy) {\n\t                return;\n\t            }\n\t            o.coordsize = abs(kx) + S + abs(ky);\n\t            s.rotation = deg * (sx * sy < 0 ? -1 : 1);\n\t            if (deg) {\n\t                var c = compensation(deg, dx, dy);\n\t                dx = c.dx;\n\t                dy = c.dy;\n\t            }\n\t            sx < 0 && (flip += \"x\");\n\t            sy < 0 && (flip += \" y\") && (y = -1);\n\t            s.flip = flip;\n\t            o.coordorigin = (dx * -kx) + S + (dy * -ky);\n\t            if (fillpos || _.fillsize) {\n\t                var fill = o.getElementsByTagName(fillString);\n\t                fill = fill && fill[0];\n\t                o.removeChild(fill);\n\t                if (fillpos) {\n\t                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));\n\t                    fill.position = c.dx * y + S + c.dy * y;\n\t                }\n\t                if (_.fillsize) {\n\t                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);\n\t                }\n\t                o.appendChild(fill);\n\t            }\n\t            s.visibility = \"visible\";\n\t        };\n\t    R.toString = function () {\n\t        return  \"Your browser doesn\\u2019t support SVG. Falling down to VML.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var addArrow = function (o, value, isEnd) {\n\t        var values = Str(value).toLowerCase().split(\"-\"),\n\t            se = isEnd ? \"end\" : \"start\",\n\t            i = values.length,\n\t            type = \"classic\",\n\t            w = \"medium\",\n\t            h = \"medium\";\n\t        while (i--) {\n\t            switch (values[i]) {\n\t                case \"block\":\n\t                case \"classic\":\n\t                case \"oval\":\n\t                case \"diamond\":\n\t                case \"open\":\n\t                case \"none\":\n\t                    type = values[i];\n\t                    break;\n\t                case \"wide\":\n\t                case \"narrow\": h = values[i]; break;\n\t                case \"long\":\n\t                case \"short\": w = values[i]; break;\n\t            }\n\t        }\n\t        var stroke = o.node.getElementsByTagName(\"stroke\")[0];\n\t        stroke[se + \"arrow\"] = type;\n\t        stroke[se + \"arrowlength\"] = w;\n\t        stroke[se + \"arrowwidth\"] = h;\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        // o.paper.canvas.style.display = \"none\";\n\t        o.attrs = o.attrs || {};\n\t        var node = o.node,\n\t            a = o.attrs,\n\t            s = node.style,\n\t            xy,\n\t            newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r),\n\t            isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry),\n\t            res = o;\n\n\n\t        for (var par in params) if (params[has](par)) {\n\t            a[par] = params[par];\n\t        }\n\t        if (newpath) {\n\t            a.path = R._getPath[o.type](o);\n\t            o._.dirty = 1;\n\t        }\n\t        params.href && (node.href = params.href);\n\t        params.title && (node.title = params.title);\n\t        params.target && (node.target = params.target);\n\t        params.cursor && (s.cursor = params.cursor);\n\t        \"blur\" in params && o.blur(params.blur);\n\t        if (params.path && o.type == \"path\" || newpath) {\n\t            node.path = path2vml(~Str(a.path).toLowerCase().indexOf(\"r\") ? R._pathToAbsolute(a.path) : a.path);\n\t            o._.dirty = 1;\n\t            if (o.type == \"image\") {\n\t                o._.fillpos = [a.x, a.y];\n\t                o._.fillsize = [a.width, a.height];\n\t                setCoords(o, 1, 1, 0, 0, 0);\n\t            }\n\t        }\n\t        \"transform\" in params && o.transform(params.transform);\n\t        if (isOval) {\n\t            var cx = +a.cx,\n\t                cy = +a.cy,\n\t                rx = +a.rx || +a.r || 0,\n\t                ry = +a.ry || +a.r || 0;\n\t            node.path = R.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));\n\t            o._.dirty = 1;\n\t        }\n\t        if (\"clip-rect\" in params) {\n\t            var rect = Str(params[\"clip-rect\"]).split(separator);\n\t            if (rect.length == 4) {\n\t                rect[2] = +rect[2] + (+rect[0]);\n\t                rect[3] = +rect[3] + (+rect[1]);\n\t                var div = node.clipRect || R._g.doc.createElement(\"div\"),\n\t                    dstyle = div.style;\n\t                dstyle.clip = R.format(\"rect({1}px {2}px {3}px {0}px)\", rect);\n\t                if (!node.clipRect) {\n\t                    dstyle.position = \"absolute\";\n\t                    dstyle.top = 0;\n\t                    dstyle.left = 0;\n\t                    dstyle.width = o.paper.width + \"px\";\n\t                    dstyle.height = o.paper.height + \"px\";\n\t                    node.parentNode.insertBefore(div, node);\n\t                    div.appendChild(node);\n\t                    node.clipRect = div;\n\t                }\n\t            }\n\t            if (!params[\"clip-rect\"]) {\n\t                node.clipRect && (node.clipRect.style.clip = \"auto\");\n\t            }\n\t        }\n\t        if (o.textpath) {\n\t            var textpathStyle = o.textpath.style;\n\t            params.font && (textpathStyle.font = params.font);\n\t            params[\"font-family\"] && (textpathStyle.fontFamily = '\"' + params[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g, E) + '\"');\n\t            params[\"font-size\"] && (textpathStyle.fontSize = params[\"font-size\"]);\n\t            params[\"font-weight\"] && (textpathStyle.fontWeight = params[\"font-weight\"]);\n\t            params[\"font-style\"] && (textpathStyle.fontStyle = params[\"font-style\"]);\n\t        }\n\t        if (\"arrow-start\" in params) {\n\t            addArrow(res, params[\"arrow-start\"]);\n\t        }\n\t        if (\"arrow-end\" in params) {\n\t            addArrow(res, params[\"arrow-end\"], 1);\n\t        }\n\t        if (params.opacity != null ||\n\t            params.fill != null ||\n\t            params.src != null ||\n\t            params.stroke != null ||\n\t            params[\"stroke-width\"] != null ||\n\t            params[\"stroke-opacity\"] != null ||\n\t            params[\"fill-opacity\"] != null ||\n\t            params[\"stroke-dasharray\"] != null ||\n\t            params[\"stroke-miterlimit\"] != null ||\n\t            params[\"stroke-linejoin\"] != null ||\n\t            params[\"stroke-linecap\"] != null) {\n\t            var fill = node.getElementsByTagName(fillString),\n\t                newfill = false;\n\t            fill = fill && fill[0];\n\t            !fill && (newfill = fill = createNode(fillString));\n\t            if (o.type == \"image\" && params.src) {\n\t                fill.src = params.src;\n\t            }\n\t            params.fill && (fill.on = true);\n\t            if (fill.on == null || params.fill == \"none\" || params.fill === null) {\n\t                fill.on = false;\n\t            }\n\t            if (fill.on && params.fill) {\n\t                var isURL = Str(params.fill).match(R._ISURL);\n\t                if (isURL) {\n\t                    fill.parentNode == node && node.removeChild(fill);\n\t                    fill.rotate = true;\n\t                    fill.src = isURL[1];\n\t                    fill.type = \"tile\";\n\t                    var bbox = o.getBBox(1);\n\t                    fill.position = bbox.x + S + bbox.y;\n\t                    o._.fillpos = [bbox.x, bbox.y];\n\n\t                    R._preload(isURL[1], function () {\n\t                        o._.fillsize = [this.offsetWidth, this.offsetHeight];\n\t                    });\n\t                } else {\n\t                    fill.color = R.getRGB(params.fill).hex;\n\t                    fill.src = E;\n\t                    fill.type = \"solid\";\n\t                    if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != \"r\") && addGradientFill(res, params.fill, fill)) {\n\t                        a.fill = \"none\";\n\t                        a.gradient = params.fill;\n\t                        fill.rotate = false;\n\t                    }\n\t                }\n\t            }\n\t            if (\"fill-opacity\" in params || \"opacity\" in params) {\n\t                var opacity = ((+a[\"fill-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);\n\t                opacity = mmin(mmax(opacity, 0), 1);\n\t                fill.opacity = opacity;\n\t                if (fill.src) {\n\t                    fill.color = \"none\";\n\t                }\n\t            }\n\t            node.appendChild(fill);\n\t            var stroke = (node.getElementsByTagName(\"stroke\") && node.getElementsByTagName(\"stroke\")[0]),\n\t            newstroke = false;\n\t            !stroke && (newstroke = stroke = createNode(\"stroke\"));\n\t            if ((params.stroke && params.stroke != \"none\") ||\n\t                params[\"stroke-width\"] ||\n\t                params[\"stroke-opacity\"] != null ||\n\t                params[\"stroke-dasharray\"] ||\n\t                params[\"stroke-miterlimit\"] ||\n\t                params[\"stroke-linejoin\"] ||\n\t                params[\"stroke-linecap\"]) {\n\t                stroke.on = true;\n\t            }\n\t            (params.stroke == \"none\" || params.stroke === null || stroke.on == null || params.stroke == 0 || params[\"stroke-width\"] == 0) && (stroke.on = false);\n\t            var strokeColor = R.getRGB(params.stroke);\n\t            stroke.on && params.stroke && (stroke.color = strokeColor.hex);\n\t            opacity = ((+a[\"stroke-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);\n\t            var width = (toFloat(params[\"stroke-width\"]) || 1) * .75;\n\t            opacity = mmin(mmax(opacity, 0), 1);\n\t            params[\"stroke-width\"] == null && (width = a[\"stroke-width\"]);\n\t            params[\"stroke-width\"] && (stroke.weight = width);\n\t            width && width < 1 && (opacity *= width) && (stroke.weight = 1);\n\t            stroke.opacity = opacity;\n\n\t            params[\"stroke-linejoin\"] && (stroke.joinstyle = params[\"stroke-linejoin\"] || \"miter\");\n\t            stroke.miterlimit = params[\"stroke-miterlimit\"] || 8;\n\t            params[\"stroke-linecap\"] && (stroke.endcap = params[\"stroke-linecap\"] == \"butt\" ? \"flat\" : params[\"stroke-linecap\"] == \"square\" ? \"square\" : \"round\");\n\t            if (\"stroke-dasharray\" in params) {\n\t                var dasharray = {\n\t                    \"-\": \"shortdash\",\n\t                    \".\": \"shortdot\",\n\t                    \"-.\": \"shortdashdot\",\n\t                    \"-..\": \"shortdashdotdot\",\n\t                    \". \": \"dot\",\n\t                    \"- \": \"dash\",\n\t                    \"--\": \"longdash\",\n\t                    \"- .\": \"dashdot\",\n\t                    \"--.\": \"longdashdot\",\n\t                    \"--..\": \"longdashdotdot\"\n\t                };\n\t                stroke.dashstyle = dasharray[has](params[\"stroke-dasharray\"]) ? dasharray[params[\"stroke-dasharray\"]] : E;\n\t            }\n\t            newstroke && node.appendChild(stroke);\n\t        }\n\t        if (res.type == \"text\") {\n\t            res.paper.canvas.style.display = E;\n\t            var span = res.paper.span,\n\t                m = 100,\n\t                fontSize = a.font && a.font.match(/\\d+(?:\\.\\d*)?(?=px)/);\n\t            s = span.style;\n\t            a.font && (s.font = a.font);\n\t            a[\"font-family\"] && (s.fontFamily = a[\"font-family\"]);\n\t            a[\"font-weight\"] && (s.fontWeight = a[\"font-weight\"]);\n\t            a[\"font-style\"] && (s.fontStyle = a[\"font-style\"]);\n\t            fontSize = toFloat(a[\"font-size\"] || fontSize && fontSize[0]) || 10;\n\t            s.fontSize = fontSize * m + \"px\";\n\t            res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, \"&#60;\").replace(/&/g, \"&#38;\").replace(/\\n/g, \"<br>\"));\n\t            var brect = span.getBoundingClientRect();\n\t            res.W = a.w = (brect.right - brect.left) / m;\n\t            res.H = a.h = (brect.bottom - brect.top) / m;\n\t            // res.paper.canvas.style.display = \"none\";\n\t            res.X = a.x;\n\t            res.Y = a.y + res.H / 2;\n\n\t            (\"x\" in params || \"y\" in params) && (res.path.v = R.format(\"m{0},{1}l{2},{1}\", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1));\n\t            var dirtyattrs = [\"x\", \"y\", \"text\", \"font\", \"font-family\", \"font-weight\", \"font-style\", \"font-size\"];\n\t            for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {\n\t                res._.dirty = 1;\n\t                break;\n\t            }\n\n\t            // text-anchor emulation\n\t            switch (a[\"text-anchor\"]) {\n\t                case \"start\":\n\t                    res.textpath.style[\"v-text-align\"] = \"left\";\n\t                    res.bbx = res.W / 2;\n\t                break;\n\t                case \"end\":\n\t                    res.textpath.style[\"v-text-align\"] = \"right\";\n\t                    res.bbx = -res.W / 2;\n\t                break;\n\t                default:\n\t                    res.textpath.style[\"v-text-align\"] = \"center\";\n\t                    res.bbx = 0;\n\t                break;\n\t            }\n\t            res.textpath.style[\"v-text-kern\"] = true;\n\t        }\n\t        // res.paper.canvas.style.display = E;\n\t    },\n\t    addGradientFill = function (o, gradient, fill) {\n\t        o.attrs = o.attrs || {};\n\t        var attrs = o.attrs,\n\t            pow = Math.pow,\n\t            opacity,\n\t            oindex,\n\t            type = \"linear\",\n\t            fxfy = \".5 .5\";\n\t        o.attrs.gradient = gradient;\n\t        gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {\n\t            type = \"radial\";\n\t            if (fx && fy) {\n\t                fx = toFloat(fx);\n\t                fy = toFloat(fy);\n\t                pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);\n\t                fxfy = fx + S + fy;\n\t            }\n\t            return E;\n\t        });\n\t        gradient = gradient.split(/\\s*\\-\\s*/);\n\t        if (type == \"linear\") {\n\t            var angle = gradient.shift();\n\t            angle = -toFloat(angle);\n\t            if (isNaN(angle)) {\n\t                return null;\n\t            }\n\t        }\n\t        var dots = R._parseDots(gradient);\n\t        if (!dots) {\n\t            return null;\n\t        }\n\t        o = o.shape || o.node;\n\t        if (dots.length) {\n\t            o.removeChild(fill);\n\t            fill.on = true;\n\t            fill.method = \"none\";\n\t            fill.color = dots[0].color;\n\t            fill.color2 = dots[dots.length - 1].color;\n\t            var clrs = [];\n\t            for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);\n\t            }\n\t            fill.colors = clrs.length ? clrs.join() : \"0% \" + fill.color;\n\t            if (type == \"radial\") {\n\t                fill.type = \"gradientTitle\";\n\t                fill.focus = \"100%\";\n\t                fill.focussize = \"0 0\";\n\t                fill.focusposition = fxfy;\n\t                fill.angle = 0;\n\t            } else {\n\t                // fill.rotate= true;\n\t                fill.type = \"gradient\";\n\t                fill.angle = (270 - angle) % 360;\n\t            }\n\t            o.appendChild(fill);\n\t        }\n\t        return 1;\n\t    },\n\t    Element = function (node, vml) {\n\t        this[0] = this.node = node;\n\t        node.raphael = true;\n\t        this.id = R._oid++;\n\t        node.raphaelid = this.id;\n\t        this.X = 0;\n\t        this.Y = 0;\n\t        this.attrs = {};\n\t        this.paper = vml;\n\t        this.matrix = R.matrix();\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            dx: 0,\n\t            dy: 0,\n\t            deg: 0,\n\t            dirty: 1,\n\t            dirtyT: 1\n\t        };\n\t        !vml.bottom && (vml.bottom = this);\n\t        this.prev = vml.top;\n\t        vml.top && (vml.top.next = this);\n\t        vml.top = this;\n\t        this.next = null;\n\t    };\n\t    var elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\t    elproto.transform = function (tstr) {\n\t        if (tstr == null) {\n\t            return this._.transform;\n\t        }\n\t        var vbs = this.paper._viewBoxShift,\n\t            vbt = vbs ? \"s\" + [vbs.scale, vbs.scale] + \"-1-1t\" + [vbs.dx, vbs.dy] : E,\n\t            oldt;\n\t        if (vbs) {\n\t            oldt = tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, this._.transform || E);\n\t        }\n\t        R._extractTransform(this, vbt + tstr);\n\t        var matrix = this.matrix.clone(),\n\t            skew = this.skew,\n\t            o = this.node,\n\t            split,\n\t            isGrad = ~Str(this.attrs.fill).indexOf(\"-\"),\n\t            isPatt = !Str(this.attrs.fill).indexOf(\"url(\");\n\t        matrix.translate(1, 1);\n\t        if (isPatt || isGrad || this.type == \"image\") {\n\t            skew.matrix = \"1 0 0 1\";\n\t            skew.offset = \"0 0\";\n\t            split = matrix.split();\n\t            if ((isGrad && split.noRotation) || !split.isSimple) {\n\t                o.style.filter = matrix.toFilter();\n\t                var bb = this.getBBox(),\n\t                    bbt = this.getBBox(1),\n\t                    dx = bb.x - bbt.x,\n\t                    dy = bb.y - bbt.y;\n\t                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);\n\t                setCoords(this, 1, 1, dx, dy, 0);\n\t            } else {\n\t                o.style.filter = E;\n\t                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);\n\t            }\n\t        } else {\n\t            o.style.filter = E;\n\t            skew.matrix = Str(matrix);\n\t            skew.offset = matrix.offset();\n\t        }\n\t        if (oldt !== null) { // empty string value is true as well\n\t            this._.transform = oldt;\n\t            R._extractTransform(this, oldt);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (deg == null) {\n\t            return;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this._.dirtyT = 1;\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        if (this._.bbox) {\n\t            this._.bbox.x += dx;\n\t            this._.bbox.y += dy;\n\t        }\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t            isNaN(cx) && (cx = null);\n\t            isNaN(cy) && (cy = null);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        this._.dirtyT = 1;\n\t        return this;\n\t    };\n\t    elproto.hide = function () {\n\t        !this.removed && (this.node.style.display = \"none\");\n\t        return this;\n\t    };\n\t    elproto.show = function () {\n\t        !this.removed && (this.node.style.display = E);\n\t        return this;\n\t    };\n\t    // Needed to fix the vml setViewBox issues\n\t    elproto.auxGetBBox = R.el.getBBox;\n\t    elproto.getBBox = function(){\n\t      var b = this.auxGetBBox();\n\t      if (this.paper && this.paper._viewBoxShift)\n\t      {\n\t        var c = {};\n\t        var z = 1/this.paper._viewBoxShift.scale;\n\t        c.x = b.x - this.paper._viewBoxShift.dx;\n\t        c.x *= z;\n\t        c.y = b.y - this.paper._viewBoxShift.dy;\n\t        c.y *= z;\n\t        c.width  = b.width  * z;\n\t        c.height = b.height * z;\n\t        c.x2 = c.x + c.width;\n\t        c.y2 = c.y + c.height;\n\t        return c;\n\t      }\n\t      return b;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        return {\n\t            x: this.X + (this.bbx || 0) - this.W / 2,\n\t            y: this.Y - this.H,\n\t            width: this.W,\n\t            height: this.H\n\t        };\n\t    };\n\t    elproto.remove = function () {\n\t        if (this.removed || !this.node.parentNode) {\n\t            return;\n\t        }\n\t        this.paper.__set__ && this.paper.__set__.exclude(this);\n\t        R.eve.unbind(\"raphael.*.*.\" + this.id);\n\t        R._tear(this, this.paper);\n\t        this.node.parentNode.removeChild(this.node);\n\t        this.shape && this.shape.parentNode.removeChild(this.shape);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == fillString && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (this.attrs && value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        var params;\n\t        if (value != null) {\n\t            params = {};\n\t            params[name] = value;\n\t        }\n\t        value == null && R.is(name, \"object\") && (params = name);\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        if (params) {\n\t            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t                this.attrs[key] = params[key];\n\t                for (var subkey in par) if (par[has](subkey)) {\n\t                    params[subkey] = par[subkey];\n\t                }\n\t            }\n\t            // this.paper.canvas.style.display = \"none\";\n\t            if (params.text && this.type == \"text\") {\n\t                this.textpath.string = params.text;\n\t            }\n\t            setFillAndStroke(this, params);\n\t            // this.paper.canvas.style.display = E;\n\t        }\n\t        return this;\n\t    };\n\t    elproto.toFront = function () {\n\t        !this.removed && this.node.parentNode.appendChild(this.node);\n\t        this.paper && this.paper.top != this && R._tofront(this, this.paper);\n\t        return this;\n\t    };\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (this.node.parentNode.firstChild != this.node) {\n\t            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);\n\t            R._toback(this, this.paper);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[element.length - 1];\n\t        }\n\t        if (element.node.nextSibling) {\n\t            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);\n\t        } else {\n\t            element.node.parentNode.appendChild(this.node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[0];\n\t        }\n\t        element.node.parentNode.insertBefore(this.node, element.node);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        var s = this.node.runtimeStyle,\n\t            f = s.filter;\n\t        f = f.replace(blurregexp, E);\n\t        if (+size !== 0) {\n\t            this.attrs.blur = size;\n\t            s.filter = f + S + ms + \".Blur(pixelradius=\" + (+size || 1.5) + \")\";\n\t            s.margin = R.format(\"-{0}px 0 0 -{0}px\", round(+size || 1.5));\n\t        } else {\n\t            s.filter = f;\n\t            s.margin = 0;\n\t            delete this.attrs.blur;\n\t        }\n\t        return this;\n\t    };\n\n\t    R._engine.path = function (pathString, vml) {\n\t        var el = createNode(\"shape\");\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = vml.coordorigin;\n\t        var p = new Element(el, vml),\n\t            attr = {fill: \"none\", stroke: \"#000\"};\n\t        pathString && (attr.path = pathString);\n\t        p.type = \"path\";\n\t        p.path = [];\n\t        p.Path = E;\n\t        setFillAndStroke(p, attr);\n\t        vml.canvas && vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.rect = function (vml, x, y, w, h, r) {\n\t        var path = R._rectPath(x, y, w, h, r),\n\t            res = vml.path(path),\n\t            a = res.attrs;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.r = r;\n\t        a.path = path;\n\t        res.type = \"rect\";\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (vml, x, y, rx, ry) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - rx;\n\t        res.Y = y - ry;\n\t        res.W = rx * 2;\n\t        res.H = ry * 2;\n\t        res.type = \"ellipse\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            rx: rx,\n\t            ry: ry\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.circle = function (vml, x, y, r) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - r;\n\t        res.Y = y - r;\n\t        res.W = res.H = r * 2;\n\t        res.type = \"circle\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            r: r\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.image = function (vml, src, x, y, w, h) {\n\t        var path = R._rectPath(x, y, w, h),\n\t            res = vml.path(path).attr({stroke: \"none\"}),\n\t            a = res.attrs,\n\t            node = res.node,\n\t            fill = node.getElementsByTagName(fillString)[0];\n\t        a.src = src;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.path = path;\n\t        res.type = \"image\";\n\t        fill.parentNode == node && node.removeChild(fill);\n\t        fill.rotate = true;\n\t        fill.src = src;\n\t        fill.type = \"tile\";\n\t        res._.fillpos = [x, y];\n\t        res._.fillsize = [w, h];\n\t        node.appendChild(fill);\n\t        setCoords(res, 1, 1, 0, 0, 0);\n\t        return res;\n\t    };\n\t    R._engine.text = function (vml, x, y, text) {\n\t        var el = createNode(\"shape\"),\n\t            path = createNode(\"path\"),\n\t            o = createNode(\"textpath\");\n\t        x = x || 0;\n\t        y = y || 0;\n\t        text = text || \"\";\n\t        path.v = R.format(\"m{0},{1}l{2},{1}\", round(x * zoom), round(y * zoom), round(x * zoom) + 1);\n\t        path.textpathok = true;\n\t        o.string = Str(text);\n\t        o.on = true;\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = \"0 0\";\n\t        var p = new Element(el, vml),\n\t            attr = {\n\t                fill: \"#000\",\n\t                stroke: \"none\",\n\t                font: R._availableAttrs.font,\n\t                text: text\n\t            };\n\t        p.shape = el;\n\t        p.path = path;\n\t        p.textpath = o;\n\t        p.type = \"text\";\n\t        p.attrs.text = Str(text);\n\t        p.attrs.x = x;\n\t        p.attrs.y = y;\n\t        p.attrs.w = 1;\n\t        p.attrs.h = 1;\n\t        setFillAndStroke(p, attr);\n\t        el.appendChild(o);\n\t        el.appendChild(path);\n\t        vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        var cs = this.canvas.style;\n\t        this.width = width;\n\t        this.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        cs.width = width;\n\t        cs.height = height;\n\t        cs.clip = \"rect(0 \" + width + \" \" + height + \" 0)\";\n\t        if (this._viewBox) {\n\t            R._engine.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        R.eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            width = paperSize.width,\n\t            height = paperSize.height,\n\t            H, W;\n\t        if (fit) {\n\t            H = height / h;\n\t            W = width / w;\n\t            if (w * H < width) {\n\t                x -= (width - w * H) / 2 / H;\n\t            }\n\t            if (h * W < height) {\n\t                y -= (height - h * W) / 2 / W;\n\t            }\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        this._viewBoxShift = {\n\t            dx: -x,\n\t            dy: -y,\n\t            scale: paperSize\n\t        };\n\t        this.forEach(function (el) {\n\t            el.transform(\"...\");\n\t        });\n\t        return this;\n\t    };\n\t    var createNode;\n\t    R._engine.initWin = function (win) {\n\t            var doc = win.document;\n\t            if (doc.styleSheets.length < 31) {\n\t                doc.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            } else {\n\t                // no more room, add to the existing one\n\t                // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n\t                doc.styleSheets[0].addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            }\n\t            try {\n\t                !doc.namespaces.rvml && doc.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\");\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<rvml:' + tagName + ' class=\"rvml\">');\n\t                };\n\t            } catch (e) {\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<' + tagName + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n\t                };\n\t            }\n\t        };\n\t    R._engine.initWin(R._g.win);\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con.container,\n\t            height = con.height,\n\t            s,\n\t            width = con.width,\n\t            x = con.x,\n\t            y = con.y;\n\t        if (!container) {\n\t            throw new Error(\"VML container not found.\");\n\t        }\n\t        var res = new R._Paper,\n\t            c = res.canvas = R._g.doc.createElement(\"div\"),\n\t            cs = c.style;\n\t        x = x || 0;\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        res.width = width;\n\t        res.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        res.coordsize = zoom * 1e3 + S + zoom * 1e3;\n\t        res.coordorigin = \"0 0\";\n\t        res.span = R._g.doc.createElement(\"span\");\n\t        res.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\";\n\t        c.appendChild(res.span);\n\t        cs.cssText = R.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\", width, height);\n\t        if (container == 1) {\n\t            R._g.doc.body.appendChild(c);\n\t            cs.left = x + \"px\";\n\t            cs.top = y + \"px\";\n\t            cs.position = \"absolute\";\n\t        } else {\n\t            if (container.firstChild) {\n\t                container.insertBefore(c, container.firstChild);\n\t            } else {\n\t                container.appendChild(c);\n\t            }\n\t        }\n\t        res.renderfix = function () {};\n\t        return res;\n\t    };\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        this.canvas.innerHTML = E;\n\t        this.span = R._g.doc.createElement(\"span\");\n\t        this.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\";\n\t        this.canvas.appendChild(this.span);\n\t        this.bottom = this.top = null;\n\t    };\n\t    R.prototype.remove = function () {\n\t        R.eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        return true;\n\t    };\n\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }\n/******/ ])\n});\n;"],"sourceRoot":""}