{"version":3,"sources":["../../../../../../../../../usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/browser-pack/_prelude.js","dep/intSharing/intSharing.css","illustrated_map.css","illustrated_map.js","lib/entity.es6","lib/raphael-svg-import.min.js","dep/intSharing/intSharing.js","../node_modules/raphael-browserify/raphael-browserify.js","lib/tooltip.es6","../../../../../node_modules/browserify-css/browser.js"],"names":["$","IllustratedMap","container","this","$c","slug","data","path","INT_PATH","attr","window","width","printMobileVersion","printDesktopVersion","MAX_MAP_WIDTH","MAX_MAP_HEIGHT","Entity","require","Raphael","prototype","mobile_preview","mobile_full","html","mobile_wrapper","appendTo","css","on","_this","unbind","remove","startLoad","$map_wrapper","find","fetchData","_this2","printBackground","printSVG","addResizeListener","printGuideText","getText","text","saveText","addListeners","endLoad","size","loader","addClass","insertAfter","position","left","callback","getJSON","window_width","offset","map_width","Math","min","map_perc","height","scale","resize","_this3","tooltip","close","perc","tstring","all_shapes","transform","background_url","map_image","background_color","background-color","svg_path","svg","ajax","type","url","dataType","success","svgXML","_this4","canvas_wrapper","paper","newSet","importSVG","entities","sets","forEach","node","attributes","entity_code","value","slice","push","attrs","hover_attrs","$background_layer","background_layers","undefined","click","e","clicked","target","hasClass","parents","length","nodeName","self","i","hasOwnProperty","text_source","$div","$entities","each","guide_text","removeGuideText","par","set","conf","DEFAULT_ATTRS","DEFAULT_HOVER_ATTRS","ghost","obj","id","substring","fill","fill-opacity","stroke-width","cursor","Tooltip","stroke","stroke-opacity","addListenersTo","raphael_obj","select","hover","newTooltip","openTooltip","share_text","getShareText","appendShareBtns","showAround","parseShareString","share_string","entity_name","entity_subtitle","replace","fix_possessives","share_data","share","fb","head","desc","img","label","tw","email","subject","body","module","exports","fn","a","b","c","d","text-anchor","parseElement","nodeType","f","g","h","j","k","name","l","getAttribute","m","n","childNodes","o","setAttribute","p","item","q","exec","translate","display","hide","rx","ry","r","polygon","polyline","line","image","x","y","textContent","getElementsByTagName","normalize","s","split","map","parseFloat","t","matrix","add","apply","toTransformString","style","u","v","trim","w","Function","bind","Array","call","document","createElement","appendChild","styleSheet","cssText","rules","createTextNode","sheet","cssRules","querySelectorAll","selectorText","_availableAttrs","getById","raphaelid","groups","x1","y1","x2","y2","points","isNaN","TRACKING_URL","cssNode","intSharing","getURL","location","protocol","host","pathname","twitterShare","top","opts","share_link_encoded","encodeURIComponent","URL","hashtags","join","via","open","track","tracking_code","facebookShare","method","link","picture","caption","description","FB","ui","emailShare","href","escape","labels","getHtml","share_code","btns","linkShare","prompt","code","eve","glob","current_event","stop","version","has","separator","wildcard","fun","numsort","events","scope","oldstop","args","arguments","listeners","z","indexed","queue","out","ce","ii","zIndex","sort","items","jj","nes","names","es","concat","nt","subname","RegExp","test","off","key","splice","cur","funcs","once","f2","res","toString","R","first","is","loaded","array","_engine","create","nu","pop","clone","Object","constructor","repush","cacher","postprocessor","newf","arg","cache","count","shift","clrToString","hex","catmullRom2bezier","crp","iLen","base3","p1","p2","p3","p4","t1","t2","bezlen","x3","y3","x4","y4","z2","Tvalues","Cvalues","sum","ct","xbase","ybase","comb","math","sqrt","getTatLen","ll","step","abs","intersect","mmax","mmin","nx","ny","denominator","px","py","px2","toFixed","py2","inter","bez1","bez2","interHelper","interCount","justCount","bbox1","bezierBBox","bbox2","isBBoxIntersect","l1","l2","n1","n2","dots1","dots2","xy","findDotsAtSegment","di","di1","dj","dj1","ci","cj","interPathHelper","path1","path2","_path2curve","x1m","y1m","x2m","y2m","pi","pj","intr","kk","segment1","segment2","Matrix","x_y","S","x_y_w_h","CubicBezierAtTime","p1x","p1y","p2x","p2y","duration","sampleCurveX","ax","bx","cx","solve","epsilon","solveCurveX","ay","by","cy","t0","d2","Animation","anim","ms","percents","newAnim","times","toFloat","sortByNumber","runAnimation","element","percent","status","totalOrigin","params","isInAnim","isInAnimSet","next","prev","timestamp","from","to","diff","animationElements","el","initstatus","start","Date","availableAnimAttrs","customAttributes","availableAttrs","getRGB","toColour","pathes","path2curve","toPath","_","eq","equaliseTransform","real","to2","getBBox","extractTransform","values","Str","from2","easing","easyeasy","easing_formulas","match","bezierrg","curve","pipe","del","repeat","origin","animation","requestAnimFrame","stopAnimation","elements","circle","rect","ellipse","formatrg","proto","_g","win","doc","eval","createWindow","implementation","addFeature","oldRaphael","was","Paper","ca","paperproto","supportsTouch","E","String","touchMap","mousedown","mousemove","mouseup","lowerCase","toLowerCase","max","pow","PI","string","fillString","objectToString","ISURL","_ISURL","colourRegExp","isnan","NaN","Infinity","-Infinity","round","toInt","parseInt","upperCase","toUpperCase","arrow-end","arrow-start","blur","clip-rect","font","font-family","font-size","font-style","font-weight","gradient","letter-spacing","opacity","src","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","title","_availableAnimAttrs","whitespace","commaSpaces","hsrg","hs","rg","p2s","pathCommand","tCommand","pathValues","radial_gradient","_radial_gradient","eldata","sortByKey","rectPath","_rectPath","ellipsePath","getPath","_getPath","bbox","_getBBox","mapPath","pathi","SVGAngle","hasFeature","innerHTML","firstChild","behavior","adj","vml","_Paper","_id","_oid","isArray","angle","atan2","rad","deg","snapTo","tolerance","rem","createUUID","uuidRegEx","uuidReplacer","random","setWindow","newwin","initWin","toHex","color","bod","docum","ActiveXObject","write","createPopup","range","createTextRange","queryCommandValue","defaultView","getComputedStyle","getPropertyValue","hsbtoString","hsltoString","rgbtoString","prepareRGB","clr","packageRGB","rgb","hsb2rgb","hsl2rgb","rgb2hsl","rgb2hsb","G","B","X","C","H","V","L","M","_path2string","preload","_preload","onload","removeChild","onerror","colour","indexOf","error","charAt","red","green","blue","hsb","hsl","getColor","reset","parsePathString","pathString","pth","paths","arr","pathClone","paramCounts","parseTransformString","TString","ps","sleep","setTimeout","c1x","c1y","c2x","c2y","t13","t12","t3","mx","my","alpha","end","curveDim","isPointInsideBBox","pathIntersection","pathIntersectionNumber","isPointInsidePath","pathBBox","_removedFactory","methodname","pathDimensions","Y","dim","xmin","ymin","xmax","ymax","bb","pathArray","pathToRelative","_pathToRelative","rel","pa","len","pathToAbsolute","_pathToAbsolute","crz","dots","l2c","q2c","_13","_23","a2c","large_arc_flag","sweep_flag","recursive","_120","rotate","cos","sin","f1","rx2","ry2","asin","df","f2old","x2old","y2old","c1","s1","c2","s2","tan","hx","hy","m1","m2","m3","m4","newres","findDotAtSegment","dot","qx","qy","attrs2","processPath","T","Q","fixArc","pp","fixM","a1","a2","seg","seg2","seglen","seg2len","parseDots","_parseDots","tear","_tear","bottom","tofront","_tofront","toback","_toback","insertafter","_insertafter","el2","insertbefore","_insertbefore","toMatrix","transformPath","_extractTransform","tstr","tdata","dx","dy","sx","sy","tlen","command","absolute","inver","invert","dirtyT","getEmpty","_equaliseTransform","tt1","tt2","maxlength","_getContainer","getElementById","tagName","pixelWidth","offsetWidth","pixelHeight","offsetHeight","matrixproto","norm","mag","me","get","fromCharCode","toFilter","row","scalex","shear","scaley","acos","isSimple","isSuperSimple","noRotation","shorter","navigator","userAgent","vendor","platform","safari","preventDefault","returnValue","preventTouch","originalEvent","stopPropagation","cancelBubble","stopTouch","addEvent","addEventListener","realName","scrollY","documentElement","scrollTop","scrollX","scrollLeft","clientX","clientY","targetTouches","olde","removeEventListener","attachEvent","event","detacher","detachEvent","drag","dragMove","dragi","touch","touches","identifier","_drag","nextSibling","parent","parentNode","opera","getElementByPoint","insertBefore","move_scope","dragUp","unmousemove","unmouseup","end_scope","start_scope","elproto","eventName","shape","removeData","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","setSize","setViewBox","fit","raphael","getOffset","elem","box","getBoundingClientRect","ownerDocument","docElem","clientTop","clientLeft","pageYOffset","pageXOffset","canvas","elementFromPoint","so","sr","createSVGRect","hits","getIntersectionList","bot","thisArg","getElementsByPoint","isPointInside","rp","realPath","isWithoutTransform","removed","dirty","bboxwt","glow","offsetx","offsety","curveslengths","getPointAtSegmentLength","getLengthFactory","istotal","subpath","onlystart","point","sp","subpaths","getTotalLength","getPointAtLength","getSubpathsAtLength","getSubpath","ef","linear","<",">","<>","backIn","backOut","elastic","bounce","easeIn","easeOut","easeInOut","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","Now","paused","now","time","that","init","pos","upto255","animateWith","onAnimation","delay","floor","json",100,"animate","setTime","pause","resume","setproto","clear","index","insertion","tail","todel","arglen","exclude","collector","registerFont","face","fonts","fontcopy","glyphs","family","prop","glyph","getFont","weight","stretch","normal","bold","lighter","bolder","fontName","thefont","print","letter_spacing","letters","notfirst","lineHeight","shifty","descent","curr","token","str","fullfill","tokenRegex","objNotationRegex","replacer","all","quote","quotedName","isFunc","ninja","st","isLoaded","readyState","xlink","markers","block","classic","diamond","oval","markerCounter","setAttributeNS","createElementNS","webkitTapHighlightColor","addGradientFill","fx","fy","SVG","_fx","_fy","dir","vector","defs","gradientTransform","stop-color","fillOpacity","updatePosition","pattern","patternTransform","addArrow","isEnd","refX","se","arrows","endPath","endMarker","startPath","startMarker","pathId","markerId","use","marker","markerHeight","markerWidth","orient","refY","xlink:href","delta","startdx","enddx","dasharray","none","-",".","-.","-..",". ","- ","--","- .","--.","--..","addDashes","butt","square","dashes","setFillAndStroke","vis","visibility","att","pn","hl","clip","rc","clip-path","startString","endString","_vbSize","isURL","ig","patternUnits","stops","stop-opacity","cssrule","tuneText","leading","fontSize","tspan","texts","tspans","dif","Element","sw","show","def","subkey","toFront","toBack","fltr","stdDeviation","_blur","filter","removeAttribute","preserveAspectRatio","_viewBox","con","Error","isFloating","cnvs","xmlns","_left","_top","renderfix","vb","aspectRatio","viewBox","getScreenCTM","createSVGMatrix","Z","bites","blurregexp","val","cssDot","zoom","pathTypes","ovalTypes","path2vml","total","vals","isMove","compensation","setCoords","fillpos","flip","kx","ky","coordsize","rotation","coordorigin","fillsize","newpath","isOval","div","clipRect","dstyle","textpath","textpathStyle","fontFamily","fontWeight","fontStyle","newfill","createNode","newstroke","strokeColor","joinstyle","miterlimit","endcap","dashstyle","span","brect","W","right","dirtyattrs","dd","bbx","fxfy","color2","clrs","colors","focus","focussize","focusposition","oldt","vbs","_viewBoxShift","vbt","skew","isGrad","isPatt","bbt","runtimeStyle","margin","Path","textpathok","cs","createStyleSheet","addRule","namespaces","rvml","parent_container","show_at","inner","triangle","loadHTML","IntSharing","empty","btn_ex","TOOLTIP_OFFSET_X","positioned_on_left","xpos","outerWidth","raphael_obj_center_y","ypos","outerHeight","triangle_ypos","removeClass","fadeIn","keyCode","fadeOut","share_conf","share_wrapper","int_path","createLink","createStyle"],"mappings":"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,iBKNmB,CLMD,AKNE,CLMD,AKNE,CLMD;AGK5C,AHJD,ACFE,ACP+I,QCa1I,AHJD,ACFE,CDED,CGIE,AFNC,ACP2I,CAAC,KFSxI,CCFG,EDEA,OAAO,CAAC,CGIL,mBHJyB,CAAC,CAAC;AGK3C,AHJJ,ACFE,AIJF,SLMO,AKNE,CLMD,AEV+I,CCc5I,ADd6I,KDQxI,AIJA,CAAC,CJIC,CEMC,AFNA,CEMC,QAAQ,GAAG,EHJA,AKNE,CLMD,CGIG,AHJF,AKNE,GFUG,IEVI,EAAE,EFUE,CAAC,CEVC,EAAC,CFUE,GAAG,QAAQ,CAAC,QAAQ,CAAC;AHHxE,ACFE,AIJA,GFUA,GEVI,CAAC,ELMA,AKNE,CLMD,AEXiJ,CAAC,CGK9I,CAAC,CAAC,IJII,EAAE,CAAC,AIJA,CAAC,CACjB,QAAQ,CAAC,WLK2B,CAAC,CAAC,AKLhB,CAAC,CACvB,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC9B,CJED,CAAC,IIFI,CAAC,GHRoJ,CAAC,CGQhJ,GAAG,CAAC,CAAC,OAAO,CAAC,CACpB,QAAQ,CAAC,mBAAmB,CAAC,CAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;ALGvB,ACFA,AIAE,IJAI,EIAA,CAAC,GHXsJ,CFapJ,AEbqJ,GAAC,CGWhJ,CHXiJ,EGW9I,CAAC,CAAC,EHXkJ,CDW7I,CCX8I,CFahJ,CAAC,ACFI,CIAD,CAAC,CACvB,CHZwK,EAAC,GFa7I,EAAC,AKDrB,CAAC,QHZ8K,EAAC,AGYrK,CHZsK,AGYrK,CACpB,CHb0L,IAAI,EAAC,CGavL,CAAC,IAAI,CHbyL,AGaxL,EHbyL,AGavL,CAAC,CAAC;ALCrB,ACFA,AIEA,MAAG,ELAC,CAAC,CEdsM,AGcpM,CLAA,AEdqM,CGcpM,ELAE,AEdmM,CAAC,CDYhM,ACZiM,EDY/L,CAAC,IDEE,CAAC,AEdmM,CAAC,IAAG,CAAC,CAAC,UAAU,EAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAA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uBt2B,EHvBw2B,EC2Bz2B,CAAC,CAAC,AD3By2B,CAAC,AGuBp2B,CHvBq2B,AGuBp2B,CHvBq2B,AGwB13B,EFGmB,CD3Bw2B,CC2Bt2B,AD3Bu2B,EAAE,CC2Bt2B,AD3Bu2B,CAAC,AGwBx3B,CAAC,CHxBy3B,EC2Br2B,CAAA,CD3Bu2B,CAAC,CC2Bp2B,AD3Bo2B,AAAC,CC2Bp2B,AEHjB,CAAC,CHxBs3B,AGyBx4B,EHzB04B,CAAC,CAAC,AGyBx4B,CAAC,CHzBy4B,EGyBt4B,CAAC,CHzBu4B,AG0Bh5B,CH1Bi5B,CAAA,AAAC,CAAA,GAAE,CAAC,CG0B74B,CH1B84B,AG0B74B,IAAI,CAAC,EH1B+4B,CAAC,CAAC,CG0B54B,CH1B84B,AG0B74B,CACpB,CH3Bk6B,IG2B75B,CAAC,EH3Bm6B,CAAC,CAAC,EAAE,CAAA,IAAG,CAAC,AG2Bv6B,CH3Bw6B,CAAC,GAAC,CAAC,CAAC,EAAE,IAAE,CAAC,CAAC,EAAE,IAAE,CAAC,EAAC,OAAO,CAAC,CAAC,EAAE,EAAC,OAAO,CAAC,CAAC,EAAE,CAAA,AAAC,CAAC,KAAI,QAAQ,CAAC,KAAI,SAAS;AF0B5/B,ACNE,ACpB2/B,AG4Br/B,MJRF,CAAC,CEQJ,GAAG,AD5Bw/B,CG4Bj/B,EFAJ,AD5Bs/B,CC4Br/B,CAAC,AHFG,CGEF,AHFG,AKEG,CJRA,ACpBi/B,CAAC,AG4Bh/B,CH5Bi/B,AG4Bh/B,CJRA,ACpBi/B,EC4Bp/B,AD5Bs/B,CC4Br/B,AD5Bs/B,CC4Br/B,CHFI,GAAG,CE1Bo/B,CC4Br/B,CFRM,CEQJ,AFRK,ECpBk/B,CC4Bp/B,KD5B0/B,CC4Bp/B,CAAA,GAAI,CAAC;AHDxC,ACNA,ACrBwhC,KG6BnhC,CJRD,AIQE,CJRD,AIQE,CFAN,EFRO,CCrBihC,CC6BphC,CFRM,CCrB+gC,CC6BlhC,CFRM,CAAC,CCrB+gC,CAAC,GF2B7gC,ACNE,CAAC,ACrB8gC,CF2BhhC,AE3BihC,CC6BlhC,AD7BmhC,CDqB7gC,ACrB8gC,CAAC,CC6BlhC,AFRK,ACrB8gC,CDqB7gC,CCrB8gC,OC6B3gC,AD7BkhC,CAAC,CAAC,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,GFOF,EFZG,CAAC,EIKE,CHjC07C,CFuC17C,CAAC,CEvC07C,AGiCv7C,CLMD,ACXE,AC5Bu7C,CFuCx7C,ACXE,AC5Bu7C,CGiCt7C,ELMA,CAAC,CKNG,CAAC,GHjC07C,CD4B/7C,AC5Bg8C,CFuCx7C,AEvCy7C,EFuCx7C,ACXN,AC5B+7C,CAAC,CD4B77C,AC5B87C,IFuCr7C,CAAC,CAAC,AEvCy7C,GAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAS,CAAC,EAAC;AAAC,AGkCp/C,QAAI,SHlCu/C,AGkC9+C,GAAG,IAAI,CAAC,EHlCg/C,AGkC9+C,CHlC++C,AGkC9+C,CHlC++C,CAAC,CAAA;AFyCxgD,ACXA,AIKA,OLMC,CAAC,ACXE,AIKA,CHnCqgD,CD8BngD,AC9BogD,CAAC,CGmCngD,CJLC,CDWD,CAAC,AEzCsgD,AGmCpgD,CLOR,ACZS,AC9BogD,CD8BngD,CDYR,CAAC,AE1C2gD,CAAC,CD8BjgD,AC9BkgD,CD8BjgD,IIKI,CHnCmgD,AGmClgD,CHnCmgD,CAAC,CAAC,ED8BhgD,CAAC,AC9BkgD,CAAC,AGmClgD,CLOR,CKPU,CLOR,AKPS,EHnCogD,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CF0ChhD,ACZiB,AC9BggD,CD8B//C,CAAC,KAAK,CAAC,CC9BigD,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,EAAC,OAAO,CAAC,CAAC,SAAS,CAAA;AF2C5lD,ACZJ,AIKA,OHpCimD,CD+B9lD,AIKC,EJLC,CAAC,AC/B8lD,CF2C7lD,AE3C8lD,CF2C7lD,AE3C8lD,CF2C7lD,AKPC,GAAG,CHpC8lD,AGoC7lD,CAAC,CLOA,ACZA,AC/B6lD,CF2C5lD,ACZA,CDYC,CCZC,CAAC,GDYG,EAAE,CCZC,AIKC,CAAC,CLOF,CCZG,CAAC,CDYD,CCZG,CDYF,AKPI,CJLA,CAAC,CIKE,KJLI,CAAC,KAAK,AIKC,CAAC,CAAC,CAAC,CAAC,IJLG,CIKE,CJLD,AIKE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;ALQtF,ACZJ,ACh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AC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA,AAAC,EAAC,CAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;ACsDzhF,AFXC,AC3CyhF,AGmDvhF,OLCD,GCTK,AC3CuhF,AGmDvhF,CHnDwhF,CCsDzhF,AFXG,AIQA,EFGD,ADtDwhF,CAAC,CAAC,ICsDphF,CFXI,AC3CqhF,SGmD5gF,GAAC,CAAC,GAAC,MAAM,AAAC;AFIrC,AHFC,AKDE,GJRH,CAAC,CAAC,KEWE,AHFC,AErDmiF,CFqDliF,AErDmiF,AGoDjiF,CFGF,CEHI,CHpDgiF,ECuDhiF,CAAC,GAAG,AHFC,EAAE,AErDiiF,CCuDhiF,AHFA,AErDiiF,OCuD1hF,CEHG,GFGC,AEHA,CFGC,GAAG,CDvDkiF,CAAC,AGoDjiF,CHpDkiF,CAAC,CCuDhiF,AEHF,CAAC,AAAC,SFGU,CDvDkiF,CAAC,CCuDhiF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAI,UAAU,CAAC,MAAM,EAAE;AAC/F,AHFC,CCTH,IIQI,CAAC,CAAC,GLCC,AEtD+kF,CAAC,ECwD9kF,CHFE,AEtD6kF,CCwD7kF,CDxD+kF,CAAC,ECwD5kF,CAAC,EDxD+kF,CCwD5kF,GDxDglF,CCwD5kF,ADxD6kF,IAAI,OAAO,CAAC,eAAe,EAAC,8CCwD9hF,2BHC9F,CAAC;AGAH,AHCC,ACZJ,AC9CkoF,AGsD9nF,MJRE,CDYD,ACZE,CDYD,AKJC,EFGA,EAAE,AHCC,AE1D4nF,CF0D3nF,AE1D4nF,CF0D3nF,EGDC,AFXG,AC9CwnF,CCyD1nF,ADzD2nF,CAAC,CD8CvnF,AC9CwnF,CAAC,CCyD1nF,ADzD2nF,CF0DznF,AE1D0nF,CF0DznF,GKJI,CLIA,AE1DwnF,CF0DvnF,AE1DwnF,AGsDxnF,CHtDynF,CF0DvnF,AE1DwnF,CF0DvnF,AE1DwnF,CF0DvnF,EE1DwnF,QAAQ,IAAE,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC,CAAC,CAAC,GAAC,CAAC,CAAA,AAAC,CAAA;AC0D/sF,AHCC,ACZF,AIQI,OHvD6sF,CAAC,CAAC,CF2D7sF,AE3D8sF,AGuD5sF,CLID,AKJE,CHvD4sF,CC0D7sF,CFXI,CEWF,CFXG,GIQI,CAAC,EHvD4sF,CF2D3sF,AE3D4sF,EAAC,CC0D3sF,AHCC,EKJI,CAAC,CLID,CAAC,EAAE,CAAC,IAAI,AKJE,CLID,AKJE,CJRd,AIQe,aLIW,CAAC,CAAC;AGAlD,AHCC,ACZA,AChD+tF,KGwD9tF,GJRG,CAAC,AChD2tF,CF4D5tF,AE5D6tF,CF4D5tF,AKHD,MFEM,AD3D8tF,CAAC,CC2D7tF,AD3D8tF,CF4D5tF,AE5D6tF,CF4D5tF,EGDC,AFXG,CEWF,AFXG,IEWC,AFXG,CAAC,AChD2tF,CAAC,CF4DruF,AE5DsuF,CDgD1tF,CAAC,CAAC,CDYV,AE5DsuF,CAAC,CF4DpuF,AE5DquF,CAAC,CAAA;AF6D3vF,ACZF,AISE,KFEH,CAAC,CD5D8vF,CDiD1vF,ACjD2vF,CDiD1vF,ACjD0vF,CG0DzvF,CAAC,ILGA,IAAI,AKHI,CAAC,ELGF,CCZK,CAAC,EDYF,CAAC,CCZK,CAAC,EISE,CAAC,EJTE,CAAC,CAAC,KISK,CAAC,CAAC;AFGzC,AHCI,GCZH,EClDiwF,AG2D/vF,CFED,AD7DiwF,CC6DhwF,AD7DgwF,EC6D9vF,CAAC,GAAG,CAAC,CAAC,AHCF,eAAe,CAAC,IAAI,CAAC,CAAC;AGA/B,AHCI,ACZJ,GCnDowF,CAAC,CAAC,GC8DnwF,CD9DuwF,CAAC,EC8DpwF,CAAC,EHCC,CCZK,EEWD,AFXC,KEWI,AHCD,CAAC,IGDK,EAAC,MHCF,MCZP,WAAW,EAAC;AEYxB,AHCG,MEhEswF,CAAC,GAAC,CAAC,CAAC,CAAC,GC+DpwF,CAAC,AHCH,CEhE0wF,CAAC,GC+DnwF,CAAC,AD/DswF,CAAC,EC+DpwF,AD/DqwF,EC+DnwF,IAAI,CAAC,CHCF,EAAE,CAAC,SGDY,CAAC,CAAC;AHEvC,AEjEuxF,AG8D3xF,KFED,ADhE6xF,GAAC,CAAC,CAAC,CAAC,EG8DvxF,CACN,GLEM,AEjE4xF,AG+D/xF,CAAC,aLEgB,EAAE,CAAC;AACtB,ACdJ,AIYI,GFCN,ADjEwyF,OGgE9xF,CHhEqyF,CAAC,AGgEryF,GJZE,CACR,AIWU,CLEJ,AElEwyF,CAAC,CAAC,EDqD3yF,CAAC,EDaO,CAAC,AElEwyF,GAAC,CFkEryF,AElEsyF,CAAA,AAAC,CFkEtyF,CElEuyF,CAAC,CDqDjzF,ACrDizF,CAAA,MFkEvyF,IAAI,EAAG;AACxB,ACbF,AIWA,CHjE2zF,EAAC,MGiEzzF,CHjEg0F,CAAC,AGiEh0F,EJXC,ACtDi0F,CAAC,CGiE/zF,GHjEm0F,CFmEp0F,ACbI,EAAE,ACtD+zF,CDsD9zF,KDaC,CAAC,GEnEq0F,CFmEj0F,AEnEk0F,CFmEj0F,CAAC,AEnEi0F;AFoEr1F,AEpEs1F,KDuDz1F,AIWA,CJXC,ACvD41F,AGkE51F,CJVD,ACxD81F,AGmE91F,GHnE+1F,CAAC,CDwD31F,CAAC,AIWA,CHnE61F,AGmE51F,EHnE61F,CAAC,AGmE31F,CHnE41F,AGmE31F,CLCH,AKDI,CHnE41F,EAAC,CAAC,CAAC,CDwDj2F,CCxDm2F,EAAC,GFoE11F,AEpE61F,EFoE31F,AEpE41F,CFoE31F,AEpE41F,CAAC,EAAE,EAAC,CAAC,CAAC,EAAE,EAAC,GAAG,CAAC,CAAC,QAAO,OAAO,CAAC,CAAC,EAAE,EAAC,OAAO,CAAC,CAAC,EAAE,EAAC,OAAO,CAAC,CAAC,EAAE,EAAC,OAAO,CAAC,CAAC,EAAE,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA;AFqEj8F,ACZF,AIWJ,CHpEw8F,EAAC,EGoEx8F,CAAC,IHpE88F,CAAC,CGoEz8F,CJXC,ACzD08F,AGoE18F,CHpE28F,AGqEj9F,EJZS,CAAC,AIYP,CAAC,CLAI,ECZM,ACzD08F,CDyDz8F,ECzD08F,EFqE18F,EAAE,CAAC,ACZE,IAAI,CAAC,ACzDy8F,CAAC,EAAC,KGqEx8F,CAAC,CAC7B,CJboC,CAAC,AIanC,CJboC,AIanC,wBAAwB,EAAE,UAAC,CAAC,EAAG;ALA/B,ACZF,AC1Do+F,AGuEp+F,OHvEw+F,GD0Dr+F,AIaA,CHvEy+F,AGuEx+F,CHvEy+F,AGuEx+F,GHvEy+F,CAAC,CD0Dv+F,AC1Dw+F,EFsEz+F,AKCK,ILDD,AEtE2+F,CGuEr+F,CLDJ,AEtE0+F,CFsEz+F,AEtE0+F,AGuEr+F,EAAC,CHvEq+F,CAAC,GAAG,CD0Dp+F,AC1Dq+F,ED0Dp+F,AC1Dq+F,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC;AD2D/hG,AC3DgiG,SAAI,EFuEriG,CAAC,CAAC,AEvEuiG,CAAC,CD2DpiG,EC3DqiG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CD2DliG,AC3DmiG,CD2DliG,CC3DmiG,CAAC,CD2DjiG,CAAC,CC3DiiG,CAAC,EAAC,CAAC,GAAC,CD2D5hG,AC3D6hG,CAAC,CD2D5hG,GAAG,CAAC,CAAC,AC3D6hG,EAAC,CAAC,EAAE,EAAC;AAAC,AGwE9kG,OJZD,EDYF,CAAC,AExEolG,CFwEnlG,AExEolG,GAAC,CGwE/kG,KAAK,EAAE,CAAC,CHxEilG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;ACwEjoG,KFXM,AC7D4nG,CAAC,CFyE/nG,ACZI,AIYA,CLAH,CAAC,EEzEgoG,CCwE5nG,ADxE6nG,ECwE5nG,EDxE8nG,CAAC,CAAC,CD6D/nG,GC7DmoG,CAAC,GAAG,CAAC,CAAA,MCwEhoG,IAAI,EAAC;AACtB,AFXI,GC9D8oG,EF0EnpG,AKAE,CAAC,CAAC,CFDC,GDzEqpG,CCyEjpG,ADzEkpG,CD8DjpG,AC9DkpG,ECyEhpG,CFXC,CAAC,AC9DkpG,CAAC,GD8D/oG,AC9DkpG,CD8DjpG,AC9DkpG,ECyEhpG,ADzEipG,GC0EnqG,EFZqB,EC9DqpG,CAAC,CD8DlpG,AC9DmpG,CD8DlpG,IEYf,CFZoB,AC9DmpG,CD8DlpG,CEYpB,AFZqB,AC9DkpG,IAAI,CAAC,CC0EtqG,CAAC,ED1EyqG,CAAC,CC0EtqG,AD1EuqG,CC0EtqG,AD1EuqG,CAAA,CAAA,KC0EhqG,CAAC,GAChC,QAAQ,IAAG,IAAI,CAAC,IAAI,GAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAC,EAAE,CAAA,AAAC,GAAG,GAAG,IAC/C,IAAI,CAAC,GAAG,GAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAI,UAAU,CAAC,MAAM,EAAE,CAAA,AAAC,CAAC;AAC9F,AHFF,ACZM,AIYJ,CH3EksG,EAAC,OC6E7rG,AFdC,AC/DmsG,CC6EnsG,AD7EosG,AG2EpsG,ELAA,AE3EssG,CAAC,CF2EtsG,AKAG,CAAC,CJZA,EEcG,CAAC,ED7EssG,EC6ElsG,CD7EmsG,EC6EhsG,IAAI,CAAC,EFdC,CC/DmsG,CF2E9sG,ACZY,AC/DmsG,EAAC;AC8EnuG,AHFC,ACZM,AChE6tG,GG4EpuG,IH5EwuG,CC8EruG,EHFE,CAAC,AE5EsuG,CC8EruG,AD9EsuG,CC8EruG,EFdI,AChEkuG,CAAC,CF4EnuG,AE5EouG,CC8EnuG,EHFE,CAAC,CAAC,CGEC,AD9EouG,EAAC,CAAC,EC8EjuG,CHFC,AE5EiuG,CC8EjuG,AHFC,AE5EiuG,CF6EtvG,CCbyB,CAAC,AChE+tG,CAAC,EDgE7tG,AChE8tG,CDgE7tG,AChE8tG,EF6EpvG,CAAC,AE7EovG,CAAC,CAAC,IDgExtG,CChE6tG,CDgE3tG,AChE4tG,CDgE3tG,CAAC,CAAC,AChE4tG,CF6EnvG,AE7EovG,CF6EnvG,CACtB,AE9E0wG,CAAC,GF8EvwG,AE9EwwG,CF8EvwG,AE9EwwG,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,GF8EhwG,CAAC,CAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AGArB,AHCH,AEhFiyG,AG6EnyG,OJZO,AIYF,EH7EkyG,AG6EjyG,CLGA,CAAC,EAAE,AEhFkyG,CFiFtyG,AEjFuyG,EC+E7xG,CAAC,AHER,AEjFqyG,CFiFpyG,AEjFqyG,CAAC,CAAC,CAAC,CC+E5xG,AD/E6xG,CC+E5xG,CEFP,EFEU,CD/E8xG,CC+E5xG,AD/E6xG,GAAG,CC+E5xG,AD/E6xG,AG6EryG,CFES,CD/E6xG,AG6EryG,CH7EsyG,GAAC,CAAC,EAAC,CAAC,GAAC,CC+EtxG,AD/EuxG,CC+EtxG,AD/EuxG,CC+EtxG,KD/E4xG,EAAC,CAAC,EAAE,EAAC;AFkF10G,AElF20G,AG8E/0G,KFEA,AFdG,CAAC,CAAC,CIYD,EH9E+0G,CAAC,GAAC,GG8Ex0G,CLIC,EAAC,AKJC,IH9E+0G,AG8E30G,CH9E40G,AG8E30G,CH9E40G,CAAC,AG8E30G,CH9E40G,AG8E30G,CH9E40G,CFkF30G,AElF40G,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AFmFr3G,AKJJ,GFEF,AFdC,ECnE23G,CAAC,KAAG,CAAC,CG+Et3G,CLIC,AKJA,ELIC,AEnFs3G,CAAC,CAAC,GFmFn3G,AKJC,CH/Es3G,AG+Er3G,CH/Es3G,EG+En3G,CH/Es3G,CAAC,AG+Et3G,CH/Es3G,WG+E52G;AJXlC,AIYI,GHhF24G,IFoF14G,CAAC,AChBA,CDgBC,CChBA,CCpE+4G,IGgFz4G,CAAC,EHhF+4G,CAAC,CAAC,EGgF34G,EAAE,CAAC,CHhF84G,EDoEp5G,ACpEq5G,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA;ADqEh7G,AIYE,CHjF+6G,CAAC,GFqFn7G,GChBK,EIYC,EJZG,GAAG,GIYE,CJZE,CAAC,AIYF;ALKhB,AChBE,AIYI,QJZD,GDgBE,CChBE,CDgBD,AChBE,GAAG,AIYC,CJZA,CIYE,CAAC,KJZI,EAAC,MDgBJ;AAChB,AChBE,OIYC,GLIC,AChBE,CDgBD,AChBE,GAAG,CAAC,EDgBA,CAAC,IChBM,CAAC,CDgBD,EAAE,CAAC,CChBG,CAAC,UAAU,CAAC,CAAC;ADiBrC,KChBC,AIYA,CAAC,CAAC,IJXC,EDeG,IAAI,CAAC,MAAM,CAAC;AACnB,ACfE,GIWH,OLIK,CAAC,EAAE,CACJ,EChBS,CDgBN,CAAC,AChBO,CAAC;ADiBX,AKLN,KJXG,YIWY,CLKC,CKLA,CLKC,QAAQ,gBKLA,UAAU,EAAE,QAAQ,EAAC;ALMxC,AChBJ,AIWA,QAAI,KJXK,CDgBC,EAAC,KKLM,CLKA,CChBE,CIWC,CAAC,CJXA,AIWC,OAAO,CAAC,CAC3B,QAAQ,CAAC,eAAe,CAAC,CACzB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AJZtB,AIaF,OLGG,CAAC,CAAC,CChBC,CAAC,GIaG,CAAC,OJbO,CIaC,CJbC,CAAC,CIaC,QAAQ,CAAC;AAC/B,KLGD,AChBE,SIaS,CAAC,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;ALIxD,AKHE,GJbD,KIaI,KLGI,EAAC,CKHG,EAAC,gBLGK,QAAQ,EAAC;AAC1B,AChBF,AIaI,ULGE,GChBK,CDgBD,AKHE,CJbA,CIaE,CLGD,AKHE,ILGE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,AChBZ,GDgBe,OAAO,CAAC;AGF7C,AHGC,KKHE,ELGD,CAAC,OAAO,CAAC,CGHI,EAAC,CHGD,EAAE,UAAS,IAAI,EAAC,MGHN,SAAS,EAAE,IAAI,EAAC;AACvC,AHGE,GKHH,KFAK,IHGC,EGHK,GAAG,GHGA,EAAC;AGFZ,AHGE,AClBJ,CIeH,CAAC,MFAM,AFfA,EEeE,AAAC,IAAI,CFfA,GEeI,AHGH,AClBE,CDkBD,GGHM,AFfD,CEeE,AHGH,CAAC,CGHI,AHGH,IGHO,AFfD,CAAC,GEeI,CAAC,AFfD,CAAC,CEeE,CAAC,CFfA,CAAC,EAAE,CEeE,CFfA,EEeI,EFfA,CAAC,CEeG,CAAC,CFfD,CEeG,CAAC,AFfF,IAAI,CEeG,AFfF,GEeK,CFfD,CAAC,CAAC,IEeM;AAChE,AFfF,QEeI,AFfA,CDkBD,CGHG,AAAC,IAAI,IAAI,AFfD,GAAG,CEeE,CAAC,EAAE,AFfD,CAAC,GEeI,IAAI,CAAC,EAAE,CAAC,CFfA,EAAE,CAAC,CEeE,GAAI,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,OAAO;AAChE,AFfF,AIeJ,MAAM,CLGD,AKHE,CLGD,CAAC,EGHI,AFfA,CAAC,CEeC,AAAC,CEAA,GFAI,AEAD,IFAK,GEAE,CFAE,AEAD,CFAE,CFfA,CAAC,GEeI,IAAI,GFfE,CEeE,CAAC,AFfD,KEeM,CAAC,KAAK,CFfR,EEeY,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;AFd5E,KEeD,AHGF,CGHG,IFfG,OAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAC;AEgB3B,AHGA,AClBM,QEeH,AHGC,EAAC,EGHE,CAAC,EFfK,CAAC,CEeF,EAAC,OHGE,AClBS,CAAC,OAAK,GAAG,CAAC,CAAC;AEgBlC,AHGC,OClBG,GDkBC,CAAC,CGHA,CAAC,AHGC,ACjBA,CDiBC,GGHE,AHGC,ACjBD,CDiBE,EGHC,IAAI,AFdF,CEcG,IAAI,AFdF,CEcG,AFdF,KEcO,CFdD,GEcK,AFdF,CAAC,EAAC,OEcU,CAAC;AHIzC,ACjBE,KEcL,UFdY,CAAC,EDiBA,EAAC,MCjBS,CAAC,CDiBF,MCjBO,KAAK,CAAC,CAAC;AEenC,AHGE,OCjBC,CEcC,MHGI,CGHG,CHGF,EGHK,IHGC,KGHX,OAAO,CAAY,UAAU,EAAC;AAChC,KFdD,CAAC,CDiBD,ACjBE,CDiBD,CAAC,IGHM,CAAC,CAAC,iDAAiD,GAAC,UAAU,GAAC,UAAU,GAC9E,gCAAgC,GAChC,2BAA2B,GAAC,MAAM,CAAC,UAAU,CAAC,GAAC,QAAQ,GACzD,WAAW,CAAC,CAAC;AHCf,ACjBA,KEiBC,CAAC,EFjBE,CAAC,CDiBD,ECjBI,CAAC,OAAO,EDiBA,CCjBG,EDiBA,CAAC,CAAC,GCjBK,CAAC,EDiBA,CAAC,CAAC,KAAK,EAAE,CAAC;AGCrC,AHAA,ACjBA,QEiBI,AFjBA,CAAC,CDiBD,CAAC,CGAG,AFjBA,CDiBD,ACjBE,CDkBN,CGDQ,EHCL,CAAC,UClBiB,EAAE,CAAC;AEkBzB,AHCE,GClBL,KEiBK,EAAE,KHCK,EGDE,AHCD,CGDE,IAAI,CAAC,MHCK;AGAtB,AHCE,AClBN,QEiBM,EAAE,IHCI,AClBA,EDkBC,AClBA,CEiBE,CAAC,EHCC,CAAC,CGDE,CAAC,AHCD,CAAC,MAAM,EAAE,CAAC,IAAI,GAAC,AClBZ,CDkBa,CAAC;AGAjC,AHCE,AClBJ,QAAI,GEiBG,CFjBC,CEiBC,EFjBE,GDkBG,CClBC,CEiBC,AHCD,AClBC,CEiBC,OAAO,CAAC,CHCA;AGA1B,AFjBC,ODkBG,CAAC,AClBA,CDkBC,CGDF,EAAE,AFjBG,GAAG,CEiBF,CAAC,EFjBK,CAAC,CEiBF,GAAG,AFjBG,CAAC,MEiBG,CAAC,MAAM,CAAC,GAAG,IAAI;AHEvC,AClBA,KEiBC,CAAC,EFjBE,EDkBA,QClBU,CDkBD,EClBI,CDkBD,GClBK,CDkBD,AClBE,CDkBD,EClBI,CDkBD,AClBE,CDkBD,GClBK,CAAC,KAAK,CAAC,EDkBA,EAAE,aAAa,CAAC,CAAC;AGAtD,AHCA,AClBA,QEiBG,AFjBC,EDkBA,EGDG,EAAC,IHCI,GAAG,EClBI,GAAG,IDkBE,GAAC,GClBO,CAAC,SDkBK,CAAC,KClBS,CAAC;AEkB/C,AHCF,AClBA,UEiBM,AHCF,CGDG,AHCF,AClBE,EEiBE,CAAC,GAAG,GAAG,GHCC,CGDG,AHEjB,CGFkB,EAAE,AHEjB,CGFkB,AHEjB,GGFoB,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AAC9C,AHEE,ACnBF,QAAE,EEiBE,AFjBA,CEiBC,EAAE,CAAC,CHEC,EGFE,AHED,GGFI,IAAI,CAAC,CHEA,CGFE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AAC9C,AHEE,ACnBA,UEiBE,CAAC,CFjBC,EAAE,EEiBE,AHEA,CGFC,CHEC,EGFE,GAAG,IAAI,CAAC,EFjBE,CAAC,CDmBC,CGFC,CAAC,CHEC,EGFE,IAAI,AFjBA,CAAC,CDmBC,CCnBC,CEiBC,AFjBA,CEiBC,GAAG,AFjBA,CAAC,GEiBG,IAAI,CAAC;AACvD,AFjBK,ODmBD,CAAC,CAAC,CGFH,EFjBM,EEiBF,AFjBI,CEiBH,IAAI,EAAC,SFjBc,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;AEkB9C,AHEA,ACnBI,UDmBA,CAAC,ACnBE,CEiBH,CAAC,AFjBI,GDmBC,CGFD,AHEE,CGFD,GAAG,EFjBM,CEiBH,AFjBI,CDmBD,CAAC,ACnBE,CDmBD,ACnBE,CEiBH,CAAC,CFjBK,GEiBD,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AFhB9C,KDmBL,EGFC,MFjBS,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK;ADoBhC,KGFG,EFjBE,cDmBY,EAAC,6BAAU;AGD5B,AFjBI,QEiBD,AFjBG,EAAC,EEiBA,CAAC,KAAK,EAAC;AACb,AFjBK,UEiBD,CAAC,EAAE,CAAC,IFjBO,EAAE,OEiBI,GAAG,IAAI,CAAC,CFjBI,CAAC,GEiBA,CAAC,MFjBS,CAAC,EAAE,CAAC,UAAU,CAAC;AEkB3D,AHAC,ACjBI,ODiBH,CAAC,EGAC,CAAC,EAAE,AFjBG,CEiBF,AHAC,CAAC,ACjBE,CDiBD,MAAM,CAAC,ECjBI,CAAC,CEiBF,CFjBI,CAAC,CEiBF,IAAI,AFjBG,CEiBF,AHAP,KGAY,CAAC;AACnC,AHAG,OCjBC,GEiBA,CAAC,CHAC,IGAI,CAAC,EHAA,OAAO,EAAC,EGAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACtC,AHAK,ACjBF,UEiBC,CAAC,AFjBG,EAAE,EEiBD,CAAC,CHAA,OAAO,CAAC,IGAK,CHAA,EGAG,AHAD,CAAC,GGAI,CAAC,KAAK,CAAC;AFhBhC,KEiBL,IHAI,MCjBQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AEkBvD,AHAE,ACjBE,QEiBD,IAAI,AFjBC,EEiBA,AFjBE,CDiBH,IAAI,EAAE,CAAC,QCjBY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AEkB/C,AFjBE,ODiBH,CAAC,CAAC,CGAE,GFjBI,CEiBA,CAAC,AFjBC,EEiBC,EAAC,MFjBQ,CAAC,KAAK,CAAC,KAAK;AEkB7B,KHAL,ECjBI,KEiBK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAU;AACtB,AHAR,KCjBG,CAAC,GDiBC,EAAC,SGAY,CAAC,KHAJ,IAAI,EAAC,EGAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AHCxC,ACjBA,SEiBK,CAAC,AHAF,CGCC,EFlBI,IDiBE,EGCE,CAAC,AHDA,GAAG,GAAC,GGCK,AFlBE,CEkBD,AHDF,ACjBI,CEkBD,EHDF,GAAG,GAAC,GCjBW,CDiBP,CCjBQ,EDiBP,MAAM,CAAC;AACvC,ACjBE,OEkBC,GHDC,ACjBE,CDiBD,ECjBI,GAAG,CAAC,CAAC,GDiBC,CAAC,GCjBK,CAAC,CAAC,IDiBE,ACjBE,CDiBD,ACjBE,IAAI,CAAC,EDiBA,CAAC,CAAC,ACjBE,CAAC,CAAC;AEmBrC,AFlBA,KDiBH,KGCM,AFlBC,IEkBG,CAAC,EAAE,EAAC,EFlBI,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;AEmBhD,AHDN,ACjBI,UAAI,EEkBE,CAAC,EAAE,CAAC,GHDC,EGCI,AHDH,CGCI,GFlBG,GAAG,GAAG,CAAC,EEkBA,EFlBI,CAAC,SDiBV,IAAI,EAAC,GCjBuB,CAAC,CAAC,IAAI,EAAE,CAAC;AEmBtD,AHDN,ACjBE,UDiBE,QCjBU,EEkBE,CAAC,AFlBA,GDiBC,GAAG,IAAI,CAAC,CGCG,AFlBA,CEkBC,AFlBA,EDiBA,EGCI,CAAC,AHDJ,EGCM,AFlBA,CEkBC,AFlBA,CEkBC,YHDQ,CAAC,ACjBI,EAAC,WAAW,CAAC,CAAC;ADkBlE,ACjBE,SEkBG,CAAC,AHDF,CGEC,AHFA,OCjBS,CEmBD,CAAC,AHFA,CCjBG,EDiBA,CAAC,CAAC,IGEI,CAAC,CAAC,CHFC,CAAC,ACjBE,CDkB1B,AClB2B,OAAO,CDkB1B,AClB2B,CDkB1B,SAAS,CAAC,CACnB,IAAI,CAAC,CCnBgD,EAAC,EDmB5C,EAAC,WCnB0D,CAAC,CAAC,CDmB9C,CAAC,CAC1B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/B,ACpBE,OEmBC,GHCA,ACpBE,IDoBE,CAAC,UCpBY,EAAC,IDoBG,EAAC;AGAvB,AHCA,ACpBE,UEmBC,EHCC,CAAC,CGDE,CAAC,AHCD,CAAC,GAAG,CGDE,AHCD,ACpBE,EEmBA,CFnBG,YAAY,CAAC,OAAO,CAAC,MAAK,EAAC,KAAI,CAAC,CAAC;AEoBhD,AHCA,OCpBD,KEmBK,CAAC,KAAK,CAAC,KAAK,CAAC,GHCC,EAAC,IAAI,CAAC,EGDG,cHCa;AGAtC,AFnBJ,SDoBC,CAAC,CAAC,ECpBI,OEmBO,CAAC,IFnBI,CAAC,KEmBK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KFlBvC,EDoBA,EGDI,CAAC,CACD,QAAQ,CAAC,SAAS,CAAC,CAAC;AHCzB,GCpBD,IEoBI,MHAI,IAAI,CAAC;AGCb,CFpBF,CAAC,GDoBC,KGAG,IAAI,CAAC,IAAI,EAAC;AACZ,AHAF,ACpBF,MAAM,CAAC,KEoBC,AHAE,CGAD,CHAE,ACpBG,GEoBD,AFpBI,CEoBH,KAAK,AFpBI,CEoBH,AFpBI,QDoBJ,IGAU,IHAF,EAAC;AGCxB,oBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChC,CAAC,CACD,QAAQ,CAAC,SAAS,CAAC,CAAC;AHFrB,OGGA,GHHI,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAK,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,AAAC,CAAC;AACnE,KGGC,EHHA,CAAC,IAAI,CAAC;AGIP,AHHE,WGGK,CHHD,EAAE,CGGG,CAAC,GHHC;AACX,GGGH,QHHM,EAAE,QAAQ;AGIlB,AHHK,WGGI,EAAE,GHHE,EAAE,KAAK,SGGA,IAAI,EAAC;AACxB,AHHI,UGGE,CAAC,IHHI,EAAE,WGGW,EAAE,IAAI,AHHhB,CGGiB,GAAG,EHHd,EGGkB,AHHf,UGGyB,CAAC,MAAM,EAAE,CAAC,CAAC;AHFrD,GGGN,cHHW,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,CAC7B,QAAQ,CAAC,gBAAgB,CAAC,CAC1B,IAAI,CAAC,IAAI,EAAC,iBAAiB,GAAC,OAAK,IAAI,CAAC,CACtC,QAAQ,CAAC,OAAK,YAAY,CAAC,CAAC;AGCrC,AHAM,OGAD,EAAE,QHAI,KAAK,EGAA,CHAG,GGAC,EAAE,EHAI,CAAC,CGAD,EAAC,cHAiB,GAAG,OAAK,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;AGC9E,AHAM,QGAF,IAAI,EHAE,CGAC,KHAK,GAAG,OAAK,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AGC/C,AHAK,UGAD,EAAE,IAAI,CHAA,UAAU,GAAG,MAAM,CAAC;AGC9B,AHAK,SGAF,EAAE,MHAK,IGAK,CAAC,GHAE,GGAI,AHAD,EGAG,AHAD,CAAC;AACnB,KGAL,CAAC,QHAQ,IAAI,GAAG,EAAE,CAAC;AGCpB,AHAM,QGAH,IAAI,EAAC,EHAI,CAAC,OAAO,CAAC,UAAC,IAAI,EAAG;AGC5B,AHAO,UGAH,CAAC,IAAI,CHAC,CAAC,CGAC,GHAG,CGAC,AHAA,CGAC,GHAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAC;AACzC,KGAT,gBHAgB;AGCf,KAAC,CAAC,IAAI,CAAC,EHAA;AGCL,AHAI,cGAI,EAAE,AHAF,OGAS,IHAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AGC9E,AHAI,SGAD,EAAE,KHAE,CAAC,IAAI,CAAC,CGAI,UHAO,CAAC,EAAC;AGC1B,AHAM,UGAF,EAAE,IAAI,EHAA,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;KGC9B,CAAC,CAAC,MHAI;AACD,GGAP,aHAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CGCtC,CAAC,SHAO,CAAC,CAAC;AGCX,AHAQ,MGAF,CAAC,OAAO,CHAF,EGAK,EHAD,QGAW,CAAC,EHAD,IAAI,IAAI,EAAC;AAC1B,mBAAK,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,MAAM,SAAO,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;AAC5E,mBAAK,EAAE,OAAK,IAAI,CAAC,KAAK,IAAI,KAAK;AAC/B,yBAAW,EAAE,OAAK,IAAI,CAAC,WAAW,IAAI,KAAK;AAC3C,+BAAiB,EAAE,OAAK,IAAI,CAAC,iBAAiB,GAC5C,CAAC,CAAC,OAAO,CAAC,CACP,QAAQ,CAAC,kBAAkB,CAAC,CAC5B,IAAI,CAAC,KAAK,EAAE,OAAK,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC,CACzD,QAAQ,CAAC,OAAK,YAAY,CAAC,GAC5B,SAAS;aACd,CAAC,CAAC;WACJ;AACD,cAAG,QAAQ,EAAC;AACV,oBAAQ,EAAE,CAAC;WACZ;AACD,mBAAS,MAAM,GAAE;AACf,gBAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACnB,sBAAU,CAAC,YAAU;AACnB,kBAAI,CAAC,MAAM,EAAE,CAAC;aACf,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;WAC1B;SACF;OACF,CAAC,CAAC;KACJ;AACD,gBAAY,EAAC,wBAAU;AACrB,UAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7B,UAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAS,CAAC,EAAC;AACvB,YAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1B,YAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAC;AACjC,iBAAO;SACR;AACD,YAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC;AAC1C,iBAAO;SACR;AACD,YAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAG,MAAM,EAAC;AAC5B,iBAAO;SACR;AACD,YAAG,IAAI,CAAC,OAAO,EAAC;AACd,cAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACtB;OACF,CAAC,CAAC;AACH,WAAI,IAAI,CAAC,IAAI,QAAQ,EAAC;AACpB,YAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAC;AAC5B,kBAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;SAC5B;OACF;KACF;AACD,WAAO,EAAC,iBAAS,IAAI,EAAE,QAAQ,EAAC;AAC9B,UAAG,IAAI,CAAC,WAAW,EAAC;AAClB,YAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AAC3C,SAAC,CAAC,IAAI,CAAC;AACL,cAAI,EAAE,KAAK;AACX,aAAG,EAAE,IAAI;AACT,kBAAQ,EAAE,MAAM;AAChB,iBAAO,EAAE,iBAAS,IAAI,EAAE;AACtB,gBAAG,QAAQ,EAAC;AACV,sBAAQ,CAAC,IAAI,CAAC,CAAC;aAChB;WACF;SACF,CAAC,CAAC;OACJ;KACF;AACD,YAAQ,EAAC,kBAAS,IAAI,EAAC;AACrB,UAAI,IAAI,GAAG,IAAI,CAAC;AAChB,UAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,UAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACrD,eAAS,CAAC,IAAI,CAAC,YAAU;AACvB,YAAI,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,YAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAC;AAC5B,cAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,cAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;SACxC;OACF,CAAC,CAAC;KACJ;AACD,kBAAc,EAAC,0BAAU;AACvB,UAAI,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CACzB,QAAQ,CAAC,YAAY,CAAC,CACtB,IAAI,CAAC,sCAAsC,CAAC,CAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,aAAO,IAAI,CAAC;KACb;AACD,mBAAe,EAAC,2BAAU;AACxB,UAAG,IAAI,CAAC,UAAU,EAAC;AACjB,YAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;OAC1B;AACD,aAAO,IAAI,CAAC;KACb;GACF,CAAC;;AAKF,GAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAU;AACnC,QAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;GAC7B,CAAC,CAAC;CAGF,CAAC,CAAC","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","var css = \".intSharing_btn_share {\\n  padding: 3px;\\n  border: none;\\n  outline: 1px solid #e3e3e3;\\n  display: inline-block;\\n  margin-right: 10px;\\n  margin-top: 5px;\\n  cursor: pointer;\\n  line-height: 32px;\\n  -moz-user-select: -moz-none;\\n  -khtml-user-select: none;\\n  -webkit-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  font-family: inherit;\\n  background-color: white;\\n}\\n.intSharing_btn_share:hover {\\n  position: relative;\\n  top: 1px;\\n}\\n.intSharing_btn_share:active {\\n  position: relative;\\n  top: 1px;\\n}\\n.intSharing_btn_share:last-child {\\n  margin-right: 0px;\\n}\\n.intSharing_btn_share .share_icon {\\n  width: 32px;\\n  height: 32px;\\n  display: inline-block;\\n  vertical-align: top;\\n  margin-right: 3px;\\n}\\n.intSharing_btn_share .share_icon:hover {\\n  background-color: red;\\n  position: relative;\\n  top: 1px;\\n}\\n.intSharing_btn_share .share_icon:active {\\n  position: relative;\\n}\\n.intSharing_btn_share .share_label {\\n  display: inline-block;\\n}\\n.intSharing_btn_share.intSharing_fb_share .share_icon {\\n  background: url(http://slate-static-prod.s3.amazonaws.com/etc/designs/slate/images/social/colored-social-s94cfbbefc0.6cc514e8.png) 0px -68px;\\n}\\n.intSharing_btn_share.intSharing_tw_share .share_icon {\\n  background: url(http://slate-static-prod.s3.amazonaws.com/etc/designs/slate/images/social/colored-social-s94cfbbefc0.6cc514e8.png);\\n}\\n.intSharing_btn_share.intSharing_email_share .share_icon {\\n  background: url(http://slate-static-prod.s3.amazonaws.com/etc/designs/slate/images/social/colored-social-s94cfbbefc0.6cc514e8.png) 0px -170px;\\n}\\n\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"dep/intSharing/intSharing.css\"})); module.exports = css;","var css = \".illustrated_map {\\n  margin-left: auto;\\n  margin-right: auto;\\n  width: 1150px;\\n  margin: 1em 0;\\n  box-shadow: 5px 0px 5px rgba(0, 0, 0, 0.2);\\n  border-top: 1px solid #c7c7c7;\\n  border-bottom: 1px solid #c7c7c7;\\n}\\n.illustrated_map .map_wrapper {\\n  margin-left: auto;\\n  margin-right: auto;\\n  width: 1100px;\\n  height: 710px;\\n  position: relative;\\n}\\n.illustrated_map .guide_text {\\n  background-color: rgba(255, 255, 255, 0.7);\\n  position: absolute;\\n  margin-left: auto;\\n  margin-right: auto;\\n  text-align: center;\\n  width: 100%;\\n  padding: 1em;\\n  bottom: 1em;\\n}\\n.illustrated_map .map_img {\\n  position: absolute;\\n  top: 0px;\\n  left: 0px;\\n  width: 100%;\\n}\\n.illustrated_map .int_tooltip {\\n  width: 365px;\\n  display: none;\\n  z-index: 3;\\n  position: absolute;\\n}\\n.illustrated_map .int_tooltip .int_tooltip_inner {\\n  word-break: keep-all;\\n  margin: 0px 30px;\\n  border: 5px solid black;\\n  box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.2);\\n  padding: 15px;\\n  position: relative;\\n  background: white;\\n  background: rgba(255, 255, 255, 0.95);\\n  font-size: 1em;\\n}\\n.illustrated_map .int_tooltip .int_tooltip_inner p {\\n  margin: 0.5em 0;\\n  line-height: 1.3;\\n}\\n.illustrated_map .int_tooltip .int_tooltip_inner p:first-child {\\n  margin-top: 0;\\n}\\n.illustrated_map .int_tooltip .int_tooltip_inner p:last-child {\\n  margin-bottom: 0;\\n}\\n.illustrated_map .int_tooltip .btn_ex {\\n  color: gray;\\n  position: absolute;\\n  top: 10px;\\n  right: 10px;\\n  cursor: pointer;\\n}\\n.illustrated_map .int_tooltip .btn_ex:hover {\\n  color: #660033;\\n}\\n.illustrated_map .int_tooltip .entity_name {\\n  font-size: 1.5em;\\n  border-bottom: 1px solid #c7c7c7;\\n  padding-bottom: 0.2em;\\n  font-weight: bold;\\n}\\n.illustrated_map .int_tooltip .entity_subtitle {\\n  text-transform: uppercase;\\n}\\n.illustrated_map .int_tooltip .triangle {\\n  background: url(\\\"/features/2014/08/illustrated_map/graphics/triangle.png\\\") no-repeat;\\n  width: 35px;\\n  height: 40px;\\n  z-index: 2;\\n  position: absolute;\\n}\\n.illustrated_map .int_tooltip .triangle.flipped {\\n  background: url(\\\"/features/2014/08/illustrated_map/graphics/triangle.png\\\") no-repeat right;\\n  transform: scale(-1, 1);\\n  -moz-transform: scale(-1, 1);\\n  -webkit-transform: scale(-1, 1);\\n  -o-transform: scale(-1, 1);\\n  -khtml-transform: scale(-1, 1);\\n  -ms-transform: scale(-1, 1);\\n}\\n.illustrated_map .share_wrapper {\\n  margin: 0.5em 0 0 0;\\n}\\n.illustrated_map .int_attribution {\\n  text-align: right;\\n  color: white;\\n  position: absolute;\\n  bottom: 2px;\\n  right: 2px;\\n  font-size: 0.7em;\\n}\\n.illustrated_map .intSharing_btn_share {\\n  font-size: 0.8em;\\n  line-height: 1em;\\n  width: calc((100% - 20px)/3);\\n}\\n.illustrated_map .intSharing_btn_share .share_label {\\n  padding: 0.3em 0;\\n}\\n.illustrated_map .background_layer {\\n  position: absolute;\\n  top: 0px;\\n  width: 100%;\\n  left: 0px;\\n}\\n.illustrated_map .canvas_wrapper {\\n  position: absolute;\\n  top: 0px;\\n  left: 0px;\\n  z-index: 2;\\n}\\n\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"illustrated_map.css\"})); module.exports = css;","// jshint esnext: true\n// to build: watchify illustrated_map.js -o illustrated_map.bundle.js -v --delay 0 -t browserify-css -t babelify\n\n$(function(){\n\nconst INT_PATH = '/features/2014/08/illustrated_map/';\nconst MAX_MAP_WIDTH = 1100;\nconst MAX_MAP_HEIGHT = 710;\nvar Entity = require('./lib/entity.es6');\nvar intSharing = require('./dep/intSharing');\nwindow.Raphael = require('raphael-browserify');\nrequire('./illustrated_map.css');\nrequire('./lib/raphael-svg-import.min.js');\n\nfunction IllustratedMap(container){\n  this.$c = container;\n  this.slug = this.$c.data('slug');\n  this.path = INT_PATH + 'data/' + this.slug + '/';\n  this.$c.attr('id','illustrated_map_'+this.slug);\n  if($(window).width() <= 580){\n    this.printMobileVersion();\n  }\n  else{\n    this.printDesktopVersion();\n  }\n\n}\nIllustratedMap.prototype = {\n  printMobileVersion:function(){\n    const mobile_preview = this.path + 'mobile_preview.jpg';\n    const mobile_full = this.path + 'mobile_full.jpg';\n    const html = `\n      <div>\n        <a href=\"${mobile_full}\">\n          <img src=\"${mobile_preview}\" style=\"width:100%;height:100%\"/>\n        </a>\n        <p>This is a mobile version of the app. Click it to enlarge. For the full interactive version, try a larger device.</p>\n      </div>\n    `;\n    this.mobile_wrapper = $(html).appendTo(this.$c);\n    this.$c.css('width','100%');\n\n    $(window)\n      .on('resize.initial', ()=>{\n        if($(window).width()>580){\n          this.printDesktopVersion();\n          $(window).unbind('resize.initial');\n        }\n      });\n  },\n  printDesktopVersion:function(){\n    if(this.mobile_wrapper){\n      this.mobile_wrapper.remove();\n    }\n    this.startLoad();\n    var html = `\n      <div class=\"map_wrapper\"></div>\n      <p class=\"int_attribution\">Interactive by Chris Kirk.</p>\n    `;\n    $(html).appendTo(this.$c);\n    this.$map_wrapper = this.$c.find('.map_wrapper');\n    this.fetchData((data)=>{\n      this.data = data;\n      this.printBackground(data);\n      this.printSVG(()=>{\n        this.addResizeListener();\n        this.printGuideText();\n        this.getText(data,(text)=>{\n          this.saveText(text);\n          this.addListeners();\n          this.endLoad();\n          this.size();\n        });\n      });\n    });\n  },\n  startLoad:function(){\n    this.loader = $('<div>')\n      .addClass('int_loader')\n      .html('Loading interactive...')\n      .insertAfter(this.$c);\n    this.$c\n      .css({\n        'position':'absolute',\n        'left':10000\n      });\n  },\n  endLoad:function(){\n    this.loader.remove();\n    delete this.loader;\n    this.$c\n      .css({\n        'position':'static',\n        'left':'auto'\n      });\n  },\n  fetchData:function(callback){\n    var path = this.path + this.slug + '.json';\n\t  $.getJSON(path, function(data){\n      if(callback){\n        callback(data);\n      }\n    });\n  },\n  size:function(){\n    this.$c.css({\n      'position':'static',\n      'left':'auto'\n    });\n    var window_width = $(window).width();\n    this.$c\n      .css({\n        'width':window_width,\n        'left':this.$c.offset().left*-1,\n        'position':'relative'\n      });\n    var map_width = Math.min(window_width, MAX_MAP_WIDTH);\n    var map_perc = map_width/MAX_MAP_WIDTH;\n    this.$map_wrapper\n      .css({\n        'width':map_width,\n        'height': MAX_MAP_HEIGHT * map_perc\n      });\n    this.scale(map_perc);\n  },\n  addResizeListener:function(){\n    $(window).resize(()=>{\n      if(this.tooltip){\n        this.tooltip.close();\n      }\n      this.size();\n    });\n  },\n  scale:function(perc){\n    var tstring = 'S'+perc+','+perc+',0,0';\n    this.all_shapes.transform(tstring);\n  },\n  printBackground:function(data){\n    var background_url = this.path+'background.jpg';\n    this.map_image = $('<img>')\n      .addClass('map_img')\n      .attr('src',background_url)\n      .appendTo(this.$map_wrapper);\n    if(data.background_color){\n      this.$c.css({\n        'background-color':data.background_color\n      });\n    }\n    return this;\n  },\n  printSVG:function(callback){\n    var svg_path = this.path + (this.data.svg || (this.slug + '.svg'));\n    $.ajax({\n      type: \"GET\",\n      url: svg_path,\n      dataType: \"xml\",\n      success: (svgXML)=>{\n        this.canvas_wrapper = $('<div>')\n          .addClass('canvas_wrapper')\n          .attr('id','canvas_wrapper_'+this.slug)\n          .appendTo(this.$map_wrapper);\n        this.paper = Raphael('canvas_wrapper_' + this.slug, MAX_MAP_WIDTH, 676);\n        var newSet = this.paper.importSVG(svgXML);\n        this.all_shapes = newSet;\n        this.entities = {};\n        var sets = {};\n        newSet.forEach((path)=>{\n          if(!path.node.attributes['data-svg-group']){\n            return;\n          }\n          var entity_code = path.node.attributes['data-svg-group'].value.slice(0,2);\n          if(!sets[entity_code]){\n            sets[entity_code] = [];\n          }\n          sets[entity_code].push(path);\n        });\n        for(let entity_code in sets){\n          this.entities[entity_code] = new Entity(this, entity_code, sets[entity_code], {\n            attrs: this.data.attrs || false,\n            hover_attrs: this.data.hover_attrs || false,\n            $background_layer: this.data.background_layers ?\n              $('<img>')\n                .addClass('background_layer')\n                .attr('src', this.path + 'layers/' + entity_code + '.png')\n                .appendTo(this.$map_wrapper)\n              : undefined\n          });\n        }\n        if(callback){\n          callback();\n        }\n        function fadeIn(){\n          var $ele = $(this);\n          setTimeout(function(){\n            $ele.fadeIn();\n          }, Math.random() * 1000);\n        }\n      }\n    });\n  },\n  addListeners:function(){\n    var entities = this.entities;\n    this.$c.click(function(e){\n      var clicked = $(e.target);\n      if(clicked.hasClass('int_tooltip')){\n        return;\n      }\n      if(clicked.parents('.int_tooltip').length>0){\n        return;\n      }\n      if(e.target.nodeName==='path'){\n        return;\n      }\n      if(self.tooltip){\n        self.tooltip.close();\n      }\n    });\n    for(var i in entities){\n      if(entities.hasOwnProperty(i)){\n        entities[i].addListeners();\n      }\n    }\n  },\n  getText:function(data, callback){\n    if(data.text_source){\n      var path = this.path + this.slug + '.html';\n      $.ajax({\n        type: \"GET\",\n        url: path,\n        dataType: \"html\",\n        success: function(data) {\n          if(callback){\n            callback(data);\n          }\n        }\n      });\n    }\n  },\n  saveText:function(text){\n    var self = this;\n    var $div = $('<div>').html(text);\n    var $entities = $div.find('.illustrated_map_entity');\n    $entities.each(function(){\n      var entity_code = $(this).data('code');\n      if(self.entities[entity_code]){\n        var html = $(this).html();\n        self.entities[entity_code].text = html;\n      }\n    });\n  },\n  printGuideText:function(){\n    this.guide_text = $('<div>')\n      .addClass('guide_text')\n      .html('Click an illustration to learn more.')\n      .appendTo(this.$c);\n    return this;\n  },\n  removeGuideText:function(){\n    if(this.guide_text){\n      this.guide_text.remove();\n    }\n    return this;\n  }\n};\n\n\n\n\n$('.illustrated_map').each(function(){\n  new IllustratedMap($(this));\n});\n\n\n}); //end jQuery\n","// jshint esnext: true\nvar Tooltip = require('./tooltip.es6');\n\nconst DEFAULT_ATTRS = {\n  // 'stroke': '#4b636e',\n  'stroke': 'black',\n  'stroke-width': 0,\n  'cursor':'pointer',\n  'fill': 'white',\n  'fill-opacity': 0,\n  'stroke-opacity': 0\n};\nconst DEFAULT_HOVER_ATTRS = {\n  'stroke-width': 3,\n  'fill': 'black',\n  'fill-opacity': 0,\n  'stroke-opacity': 1\n};\n\nfunction Entity(par, entity_code, set, conf){\n  this.par = par;\n  this.entity_code = entity_code;\n  this.set = par.paper.set();\n  this.conf = {\n    attrs: conf.attrs || DEFAULT_ATTRS,\n    hover_attrs: conf.hover_attrs || DEFAULT_HOVER_ATTRS\n  };\n  this.$background_layer = conf.$background_layer;\n  this.ghost = par.paper.set();\n  set.forEach((obj)=>{\n    // $(obj.node).attr('fill-rule','evenodd');\n    var id = obj.node.attributes['data-svg-group'].value;\n    if(id.substring(id.length - 6, id.length) === '-ghost'){\n      this.ghost.push(obj);\n    }\n    else{\n      this.set.push(obj);\n    }\n  });\n  this.set.attr(this.conf.attrs);\n  this.ghost.attr({\n    'fill':'black',\n    'fill-opacity': 0,\n    'stroke-width': 0,\n    cursor: 'pointer'\n  });\n}\nEntity.prototype = {\n  addListeners:function(){\n    this.addListenersTo(this.set);\n    this.addListenersTo(this.ghost);\n  },\n  addListenersTo(raphael_obj){\n    raphael_obj\n      .click(()=>{\n        this.select();\n      })\n      .hover(()=>{\n        this.set.attr(this.conf.hover_attrs);\n        if(this.$background_layer){\n          this.$background_layer.css('opacity', 0.5);\n        }\n      }, ()=>{\n        this.set.attr(this.conf.attrs);\n        if(this.$background_layer){\n          this.$background_layer.css('opacity', 1);\n        }\n      });\n  },\n  select:function(){\n    var self = this;\n    if(this.par.tooltip){\n      this.par.tooltip.close(newTooltip);\n    }\n    else{\n      newTooltip();\n    }\n    function newTooltip(){\n      self.openTooltip();\n    }\n  },\n  openTooltip:function(){\n    var tooltip = new Tooltip(this.par.$c, this.set, this.text);\n    var share_text = this.getShareText();\n    tooltip.appendShareBtns(share_text, ()=>{\n      if(this.set.length > 0){\n        tooltip.showAround(this.set);\n      }\n      else if(this.ghost.length > 0){\n        tooltip.showAround(this.ghost);\n      }\n    });\n    this.par.tooltip = tooltip;\n    this.par.removeGuideText();\n  },\n  getShareText:function(){\n    var self = this;\n    var text = this.text;\n    var share_data = this.par.data.share;\n    var fix_possessives = share_data.fix_possessives;\n    return {\n      fb: {\n        head: parseShareString(share_data.fb.head),\n        desc: parseShareString(share_data.fb.desc),\n        img: share_data.fb.img,\n        label: share_data.fb.label\n      },\n      tw:{\n        share_text: parseShareString(share_data.tw.share_text),\n        label: share_data.tw.label\n      },\n      email: {\n        subject: parseShareString(share_data.email.subject),\n        body: parseShareString(share_data.email.body),\n        label: share_data.email.label\n      }\n    };\n    function parseShareString(share_string){\n      var obj = $('<div>').html(self.text);\n      var entity_name = obj.find('.entity_name').html();\n      var entity_subtitle = obj.find('.entity_subtitle').html();\n      share_string = share_string.replace('%entity_name',entity_name);\n      share_string = share_string.replace('%entity_subtitle',entity_subtitle);\n      if(fix_possessives){\n        share_string = share_string.replace(\"s's\",\"s'\");\n      }\n      return share_string;\n    }\n  },\n};\nmodule.exports = Entity;\n","/* raphael-svg-import-classic - v0.2.1 - 2014-02-11 */\nRaphael.fn.importSVG=function(a,b){\"use strict\";var c=this.set(),d={},e={\"text-anchor\":\"start\"};this.parseElement=function(a){if(3!==a.nodeType){var f,g,h,i,j={stroke:\"none\",\"stroke-width\":1,fill:\"black\"},k=a.nodeName;if(a.attributes)for(f=0,g=a.attributes.length;g>f;f++)j[a.attributes[f].name]=a.attributes[f].value;switch(k){case\"svg\":case\"g\":var l=a.getAttribute(\"id\"),m=a.getAttribute(\"class\");if(l||m){var n=a.childNodes;for(f=0,g=n.length;g>f;f++){var o=n[f];3!==o.nodeType&&(l&&o.setAttribute(\"data-svg-group\",l),m&&o.setAttribute(\"class\",(o.getAttribute(\"class\")||\"\")+\" \"+m))}}var p=this.set();for(f=0,g=a.childNodes.length;g>f;f++)p.push(this.parseElement(a.childNodes.item(f)));if(j.transform){var q=/translate\\(([^,]+),([^,]+)\\)/.exec(j.transform);3==q.length&&p.translate(q[1],q[2])}return\"none\"===j.display&&p.hide(),l&&a.childNodes.length&&(d[l]=p),void 0;case\"rect\":j.rx&&j.ry?(j.r=(+(j.rx||0)+ +(j.ry||0))/2,delete j.rx,delete j.ry):(j.r=j.rx||j.ry||0,delete j.rx,delete j.ry);case\"circle\":case\"ellipse\":i=this[k]();break;case\"path\":i=this.path(j.d),delete j.d;break;case\"polygon\":i=this.polygon(j);break;case\"polyline\":i=this.polyline(j);break;case\"line\":i=this.line(j);break;case\"image\":i=this.image();break;case\"text\":for(h in e)!j[h]&&e.hasOwnProperty(h)&&(j[h]=e[h]);i=this.text(j.x,j.y,a.text||a.textContent);break;default:var r=a.getElementsByTagName(\"svg\");return r.length&&(r[0].normalize(),this.parseElement(r[0])),void 0}var s=j.transform;if(s){s=s.substring(7,s.length-1).split(\" \").map(function(a){return parseFloat(a)});var t=i.matrix;t.add.apply(t,s),i.transform(t.toTransformString()),delete j.transform}if(j.style){var u,v=j.style.split(\";\");for(f=0;f<v.length;f++)u=v[f].split(\":\"),h=$.trim(u[0]),h&&(j[h]=$.trim(u[1]))}i.attr(j);var w=a.getAttribute(\"class\");w&&i.node.setAttribute(\"class\",(i.node.getAttribute(\"class\")||\"\")+\" \"+w),i.node.setAttribute(\"data-svg\",k);var x=a.getAttribute(\"data-svg-group\");x&&i.node.setAttribute(\"data-svg-group\",x);var y=a.getAttribute(\"id\");return y&&(i.node.id=y),b&&b.parseElement&&(i=b.parseElement(i,a)),i&&c.push(i),i}},this.parseElement(a);var f=Function.prototype.bind&&Array.prototype.forEach?Function.prototype.call.bind(Array.prototype.forEach):function(a,b){for(var c=0,d=a.length;d>c;c++)b(a[c],c,a)},g=this;f(a.getElementsByTagName(\"style\"),function(a){var b=document.createElement(\"style\"),c=a.textContent||a.text;b.type=\"text/css\",document.head.appendChild(b);var d;b.styleSheet?(b.styleSheet.cssText=c,d=b.styleSheet.rules):(b.appendChild(document.createTextNode(c)),d=b.sheet.cssRules),f(d,function(a){var b=a.style,c=document.querySelectorAll(a.selectorText),d={};for(var e in Raphael._availableAttrs){var h=b[e];h&&(d[e]=\"number\"==typeof Raphael._availableAttrs[e]?parseFloat(h):h)}f(c,function(a){g.getById(a.raphaelid).attr(d)})})});var h,i=!1;for(h in d){i=!0;break}return i&&(c.groups=d),c},Raphael.fn.line=function(a){var b=[\"M\",a.x1,a.y1,\"L\",a.x2,a.y2,\"Z\"];return delete a.x1,delete a.y1,delete a.x2,delete a.y2,this.path(b)},Raphael.fn.polygon=function(a){for(var b=a.points,c=[\"M\"],d=b.split(\" \"),e=0;e<d.length;e++){for(var f=d[e].split(\",\"),g=0;g<f.length;g++){var h=parseFloat(f[g]);isNaN(h)||c.push(h)}0===e&&c.push(\"L\")}return c.push(\"Z\"),delete a.points,this.path(c)},Raphael.fn.polyline=function(a){for(var b=a.points,c=[\"M\"],d=b.split(\" \"),e=0;e<d.length;e++){for(var f=d[e].split(\",\"),g=0;g<f.length;g++){var h=parseFloat(f[g]);isNaN(h)||c.push(h)}0===e&&c.push(\"L\")}return delete a.points,this.path(c)};","////////////////\n// IntSharing //\n////////////////\n/**\n * Collection of sharing intents for Slate.com.\n * @type {Object}\n */\nvar TRACKING_URL = '/interactives/api/intSharing/track';\nvar cssNode = require('./intSharing.css');\nvar intSharing = {\n\t/**\n\t * Returns the URL of the current page, stripped of parameters.\n\t * @return {string}\n\t */\n\tgetURL: function() {\n    return location.protocol + '//' + location.host + location.pathname;\n\t},\n\t/**\n\t * Opens a window with a provided tweet so the user can tweet it.\n\t * @param  {object} conf - .share_text: Determines the text of the tweet. Required\n\t *                       - .url: The URL to tweet. Defaults to the URL of the current page if not provided.\n\t *                       - .hashtags: An array of hashtags to include (no numeric sign). These will appear\n\t *                       at the end of the tweet. Hashtags can also be included in the share_text.\n\t * @return {null}\n\t */\n\ttwitterShare: function(conf) {\n\t\tvar width = 575,\n\t\t\theight = 400,\n\t\t\tleft = ($(window).width() - width) / 2,\n\t\t\ttop = ($(window).height() - height) / 2,\n\t\t\topts = 'status=1' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + left;\n\t\tvar share_link_encoded = encodeURIComponent(conf.url ? (typeof conf.url === 'function' ? conf.url() : conf.url) : intSharing.getURL());\n\t\tvar URL = 'http://twitter.com/intent/tweet?text=' +\n\t\t\tencodeURIComponent(conf.share_text).replace(\"hashtag\",'%23') +\n\t\t\t'&url=' + share_link_encoded +\n\t\t\t(conf.hashtags?('&hashtags='+conf.hashtags.join(',')):'')+\n\t\t\t(conf.via===false?'':'&via=Slate');\n\t\twindow.open(URL, 'twitter', opts);\n    if(conf.track !== false){\n\t\t\tintSharing.track('t', conf.tracking_code);\n\t\t}\n\t},\n\t/**\n\t * Opens a window with a Facebook share prepared for the user.\n\t * To test this, insert this line in your HTML:\n\t * <div id=\"fb-root\"></div><script>window.fbAsyncInit = function(){FB.init({appId:'172274439518228',status:true,xfbml:true});};(function(d, s, id){var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = \"//connect.facebook.net/en_US/all.js\";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script>\n\t * @param  {object} conf - .img: The picture that will appear in the share.\n\t *                       - .link: The URL to which the share will link. Defaults to the URL of the current page if not provided.\n\t *                       - .head: The headline of the share.\n\t *                       - .desc: The text that appears under the headline and caption. This often describes what the page is about.\n\t * @return {null}\n\t */\n\tfacebookShare: function(conf) {\n\t\t//conf.head, conf.img, and conf.desc\n\t\tvar obj = {\n\t\t\tmethod: 'feed',\n\t\t\tlink: conf.url ? (typeof conf.url === 'function' ? conf.url() : conf.url) : intSharing.getURL(),\n\t\t\tpicture: conf.img || 'http://www.slate.com/features/2014/lib/intSharing/graphics/slate_logo.png',\n\t\t\tname: conf.head,\n\t\t\tcaption: 'Slate.com',\n\t\t\tdescription: conf.desc\n\t\t};\n\t\tFB.ui(obj);\n\t\tif(conf.track !== false){\n    \tintSharing.track('f', conf.tracking_code);\n\t\t}\n\t},\n\t/**\n\t * Opens the user's mail program with a new, pre-composed message\n\t * @param  {object} conf - subject: The subject of the email\n\t *                       - body: The text in the body of the eamil\n\t * @return {null}\n\t */\n\temailShare:function(conf){\n    var href = \"mailto:\" +\n      \"?subject=\"+escape(conf.subject) +\n      \"&body=\"+ (conf.body?escape(conf.body):'') + ' ' +\n      (conf.url ? (typeof conf.url === 'function' ? conf.url() : conf.url) : intSharing.getURL());\n\t\t  window.location.href = href;\n\t\t\tif(conf.track !== false){\n      \tintSharing.track('e', conf.tracking_code);\n\t\t\t}\n\t},\n  /**\n    Prints sharing buttons to a container. Returns the jQuery elements in a dictionary.\n    @param {object} container Object. The jQuery object of the container.\n    @param {object} conf\n      - fb: Object. Facebook method settings (see facebookShare)\n      - tw: Object. Twitter method settings (see twitterShare)\n      - email: Object. Email method settings (see emailShare)\n      - url: String or function. Sets the URL of all share methods in one spot.\n        Use a function if you need to construct the URL string when the user\n        presses the share button instead of when the buttons are printed.\n    @return {object} A dictionary of the button's jQuery elements, i.e. {fb:$(ele), tw:$(ele), email:$(ele)}\n  **/\n  appendShareBtns:function(container, conf){\n    var labels = {\n      fb: (conf && conf.fb && conf.fb.label) ? conf.fb.label : 'Share',\n      tw: (conf && conf.tw && conf.tw.label) ? conf.tw.label : 'Tweet',\n      email: (conf && conf.email && conf.email.label) ? conf.email.label : 'Email'\n    };\n\t\tif(conf.link){\n\t\t\tlabels.link = conf.link.label || 'Get Link';\n\t\t}\n    var getHtml = function(share_code){\n      return $('<button class=\"intSharing_btn_share intSharing_'+share_code+'_share\">'+\n        '<div class=\"share_icon\"></div>'+\n        '<div class=\"share_label\">'+labels[share_code]+'</div>'+\n      '</button>');\n    };\n    var btns = {\n      fb: getHtml('fb'),\n      tw: getHtml('tw'),\n      email: getHtml('email'),\n\t\t\tlink: conf.link ? getHtml('link') : null\n    };\n    if(conf){\n      conf.fb.url = conf.fb.url || conf.url || null;\n      conf.tw.url = conf.tw.url || conf.url || null;\n      conf.email.url = conf.email.url || conf.url || null;\n\t\t\tif(conf.link){\n\t\t\t\tconf.link.url = conf.link.url || conf.url || null;\n\t\t\t}\n    }\n\t\tif(conf.track){\n\t\t\tconf.fb.tracking_code = conf.track;\n\t\t\tconf.tw.tracking_code = conf.track;\n\t\t\tconf.email.tracking_code = conf.track;\n\t\t\tconf.link.tracking_code = conf.track;\n\t\t}\n    if(conf){\n      if(conf.fb){\n        btns.fb.click(function(){\n          intSharing.facebookShare(conf.fb);\n        })\n        .appendTo(container);\n      }\n      if(conf.tw){\n        btns.tw.click(function(){\n          intSharing.twitterShare(conf.tw);\n        })\n        .appendTo(container);\n      }\n      if(conf.email){\n        btns.email.click(function(){\n          intSharing.emailShare(conf.email);\n        })\n        .appendTo(container);\n      }\n\t\t\tif(conf.link){\n\t\t\t\tbtns.link.click(function(){\n\t\t\t\t\tintSharing.linkShare(conf.link);\n\t\t\t\t})\n\t\t\t\t.appendTo(container);\n\t\t\t}\n    }\n    return btns;\n  },\n\tlinkShare: function(conf){\n\t\tprompt(\"Copy this link:\", conf.url || intSharing.getURL());\n\t},\n  track: function(type, code){\n\t\tvar data = {\n\t\t\ttype: type,\n\t\t\turl: intSharing.getURL()\n\t\t};\n\t\tif(code){\n\t\t\tdata.code = code;\n\t\t}\n    $.ajax({\n      dataType: 'jsonp',\n      url: TRACKING_URL,\n      data: data\n    });\n  }\n};\nmodule.exports = intSharing;\n","// Browserify modifications by Brenton Partridge, released into the public domain\n\n// BEGIN BROWSERIFY MOD\nvar eve, Raphael = 'foo';\n// END BROWSERIFY MOD\n\n// ┌────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.1.0 - JavaScript Vector Library                          │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\n\n// ┌──────────────────────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Eve 0.3.4 - JavaScript Events Library                                                │ \\\\\n// ├──────────────────────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)          │ \\\\\n// │ Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. │ \\\\\n// └──────────────────────────────────────────────────────────────────────────────────────┘ \\\\\n\n(function (glob) {\n    var version = \"0.3.4\",\n        has = \"hasOwnProperty\",\n        separator = /[\\.\\/]/,\n        wildcard = \"*\",\n        fun = function () {},\n        numsort = function (a, b) {\n            return a - b;\n        },\n        current_event,\n        stop,\n        events = {n: {}};\n    \n    // BROWSERIFY MOD: make eve a top-level-scope variable instead of function-scope.\n    eve = function (name, scope) {\n            var e = events,\n                oldstop = stop,\n                args = Array.prototype.slice.call(arguments, 2),\n                listeners = eve.listeners(name),\n                z = 0,\n                f = false,\n                l,\n                indexed = [],\n                queue = {},\n                out = [],\n                ce = current_event,\n                errors = [];\n            current_event = name;\n            stop = 0;\n            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n                indexed.push(listeners[i].zIndex);\n                if (listeners[i].zIndex < 0) {\n                    queue[listeners[i].zIndex] = listeners[i];\n                }\n            }\n            indexed.sort(numsort);\n            while (indexed[z] < 0) {\n                l = queue[indexed[z++]];\n                out.push(l.apply(scope, args));\n                if (stop) {\n                    stop = oldstop;\n                    return out;\n                }\n            }\n            for (i = 0; i < ii; i++) {\n                l = listeners[i];\n                if (\"zIndex\" in l) {\n                    if (l.zIndex == indexed[z]) {\n                        out.push(l.apply(scope, args));\n                        if (stop) {\n                            break;\n                        }\n                        do {\n                            z++;\n                            l = queue[indexed[z]];\n                            l && out.push(l.apply(scope, args));\n                            if (stop) {\n                                break;\n                            }\n                        } while (l)\n                    } else {\n                        queue[l.zIndex] = l;\n                    }\n                } else {\n                    out.push(l.apply(scope, args));\n                    if (stop) {\n                        break;\n                    }\n                }\n            }\n            stop = oldstop;\n            current_event = ce;\n            return out.length ? out : null;\n        };\n    \n    eve.listeners = function (name) {\n        var names = name.split(separator),\n            e = events,\n            item,\n            items,\n            k,\n            i,\n            ii,\n            j,\n            jj,\n            nes,\n            es = [e],\n            out = [];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            nes = [];\n            for (j = 0, jj = es.length; j < jj; j++) {\n                e = es[j].n;\n                items = [e[names[i]], e[wildcard]];\n                k = 2;\n                while (k--) {\n                    item = items[k];\n                    if (item) {\n                        nes.push(item);\n                        out = out.concat(item.f || []);\n                    }\n                }\n            }\n            es = nes;\n        }\n        return out;\n    };\n    \n    \n    eve.on = function (name, f) {\n        var names = name.split(separator),\n            e = events;\n        for (var i = 0, ii = names.length; i < ii; i++) {\n            e = e.n;\n            !e[names[i]] && (e[names[i]] = {n: {}});\n            e = e[names[i]];\n        }\n        e.f = e.f || [];\n        for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n            return fun;\n        }\n        e.f.push(f);\n        return function (zIndex) {\n            if (+zIndex == +zIndex) {\n                f.zIndex = +zIndex;\n            }\n        };\n    };\n    \n    eve.stop = function () {\n        stop = 1;\n    };\n    \n    eve.nt = function (subname) {\n        if (subname) {\n            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(current_event);\n        }\n        return current_event;\n    };\n    \n    \n    eve.off = eve.unbind = function (name, f) {\n        var names = name.split(separator),\n            e,\n            key,\n            splice,\n            i, ii, j, jj,\n            cur = [events];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            for (j = 0; j < cur.length; j += splice.length - 2) {\n                splice = [j, 1];\n                e = cur[j].n;\n                if (names[i] != wildcard) {\n                    if (e[names[i]]) {\n                        splice.push(e[names[i]]);\n                    }\n                } else {\n                    for (key in e) if (e[has](key)) {\n                        splice.push(e[key]);\n                    }\n                }\n                cur.splice.apply(cur, splice);\n            }\n        }\n        for (i = 0, ii = cur.length; i < ii; i++) {\n            e = cur[i];\n            while (e.n) {\n                if (f) {\n                    if (e.f) {\n                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n                            e.f.splice(j, 1);\n                            break;\n                        }\n                        !e.f.length && delete e.f;\n                    }\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        var funcs = e.n[key].f;\n                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n                            funcs.splice(j, 1);\n                            break;\n                        }\n                        !funcs.length && delete e.n[key].f;\n                    }\n                } else {\n                    delete e.f;\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        delete e.n[key].f;\n                    }\n                }\n                e = e.n;\n            }\n        }\n    };\n    \n    eve.once = function (name, f) {\n        var f2 = function () {\n            var res = f.apply(this, arguments);\n            eve.unbind(name, f2);\n            return res;\n        };\n        return eve.on(name, f2);\n    };\n    \n    eve.version = version;\n    eve.toString = function () {\n        return \"You are running Eve \" + version;\n    };\n    // BROWSERIFY MOD: do not set module.exports = eve\n})(this);\n\n\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\n// │ \"Raphaël 2.1.0\" - JavaScript Vector Library                         │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\n// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\n(function () {\n    \n    function R(first) {\n        if (R.is(first, \"function\")) {\n            return loaded ? first() : eve.on(\"raphael.DOMload\", first);\n        } else if (R.is(first, array)) {\n            return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first);\n        } else {\n            var args = Array.prototype.slice.call(arguments, 0);\n            if (R.is(args[args.length - 1], \"function\")) {\n                var f = args.pop();\n                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on(\"raphael.DOMload\", function () {\n                    f.call(R._engine.create[apply](R, args));\n                });\n            } else {\n                return R._engine.create[apply](R, arguments);\n            }\n        }\n    }\n    R.version = \"2.1.0\";\n    R.eve = eve;\n    var loaded,\n        separator = /[, ]+/,\n        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},\n        formatrg = /\\{(\\d+)\\}/g,\n        proto = \"prototype\",\n        has = \"hasOwnProperty\",\n        g = (function() {\n            var _g = {};\n            if (typeof window !== 'undefined') {\n                _g.win = window;\n                _g.doc = document;\n            }\n            else if (typeof require !== 'undefined') {\n                // Keep browserify from including jsdom.\n                eval(\"_g.doc = require('jsdom').jsdom()\");\n                _g.win = _g.doc.createWindow();\n                _g.win.document = _g.doc;\n                _g.doc.implementation.addFeature(\n            \"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\")\n            }\n            return _g;\n        })(),\n        oldRaphael = {\n            was: Object.prototype[has].call(g.win, \"Raphael\"),\n            is: g.win.Raphael\n        },\n        Paper = function () {\n            \n            \n            this.ca = this.customAttributes = {};\n        },\n        paperproto,\n        appendChild = \"appendChild\",\n        apply = \"apply\",\n        concat = \"concat\",\n        supportsTouch = \"createTouch\" in g.doc,\n        E = \"\",\n        S = \" \",\n        Str = String,\n        split = \"split\",\n        events = \"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[split](S),\n        touchMap = {\n            mousedown: \"touchstart\",\n            mousemove: \"touchmove\",\n            mouseup: \"touchend\"\n        },\n        lowerCase = Str.prototype.toLowerCase,\n        math = Math,\n        mmax = math.max,\n        mmin = math.min,\n        abs = math.abs,\n        pow = math.pow,\n        PI = math.PI,\n        nu = \"number\",\n        string = \"string\",\n        array = \"array\",\n        toString = \"toString\",\n        fillString = \"fill\",\n        objectToString = Object.prototype.toString,\n        paper = {},\n        push = \"push\",\n        ISURL = R._ISURL = /^url\\(['\"]?([^\\)]+?)['\"]?\\)$/i,\n        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        isnan = {\"NaN\": 1, \"Infinity\": 1, \"-Infinity\": 1},\n        bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n        round = math.round,\n        setAttribute = \"setAttribute\",\n        toFloat = parseFloat,\n        toInt = parseInt,\n        upperCase = Str.prototype.toUpperCase,\n        availableAttrs = R._availableAttrs = {\n            \"arrow-end\": \"none\",\n            \"arrow-start\": \"none\",\n            blur: 0,\n            \"clip-rect\": \"0 0 1e9 1e9\",\n            cursor: \"default\",\n            cx: 0,\n            cy: 0,\n            fill: \"#fff\",\n            \"fill-opacity\": 1,\n            font: '10px \"Arial\"',\n            \"font-family\": '\"Arial\"',\n            \"font-size\": \"10\",\n            \"font-style\": \"normal\",\n            \"font-weight\": 400,\n            gradient: 0,\n            height: 0,\n            href: \"http://raphaeljs.com/\",\n            \"letter-spacing\": 0,\n            opacity: 1,\n            path: \"M0,0\",\n            r: 0,\n            rx: 0,\n            ry: 0,\n            src: \"\",\n            stroke: \"#000\",\n            \"stroke-dasharray\": \"\",\n            \"stroke-linecap\": \"butt\",\n            \"stroke-linejoin\": \"butt\",\n            \"stroke-miterlimit\": 0,\n            \"stroke-opacity\": 1,\n            \"stroke-width\": 1,\n            target: \"_blank\",\n            \"text-anchor\": \"middle\",\n            title: \"Raphael\",\n            transform: \"\",\n            width: 0,\n            x: 0,\n            y: 0\n        },\n        availableAnimAttrs = R._availableAnimAttrs = {\n            blur: nu,\n            \"clip-rect\": \"csv\",\n            cx: nu,\n            cy: nu,\n            fill: \"colour\",\n            \"fill-opacity\": nu,\n            \"font-size\": nu,\n            height: nu,\n            opacity: nu,\n            path: \"path\",\n            r: nu,\n            rx: nu,\n            ry: nu,\n            stroke: \"colour\",\n            \"stroke-opacity\": nu,\n            \"stroke-width\": nu,\n            transform: \"transform\",\n            width: nu,\n            x: nu,\n            y: nu\n        },\n        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        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        hsrg = {hs: 1, rg: 1},\n        p2s = /,?([achlmqrstvxz]),?/gi,\n        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        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        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        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        eldata = {},\n        sortByKey = function (a, b) {\n            return a.key - b.key;\n        },\n        sortByNumber = function (a, b) {\n            return toFloat(a) - toFloat(b);\n        },\n        fun = function () {},\n        pipe = function (x) {\n            return x;\n        },\n        rectPath = R._rectPath = function (x, y, w, h, r) {\n            if (r) {\n                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            }\n            return [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n        },\n        ellipsePath = function (x, y, rx, ry) {\n            if (ry == null) {\n                ry = rx;\n            }\n            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        },\n        getPath = R._getPath = {\n            path: function (el) {\n                return el.attr(\"path\");\n            },\n            circle: function (el) {\n                var a = el.attrs;\n                return ellipsePath(a.cx, a.cy, a.r);\n            },\n            ellipse: function (el) {\n                var a = el.attrs;\n                return ellipsePath(a.cx, a.cy, a.rx, a.ry);\n            },\n            rect: function (el) {\n                var a = el.attrs;\n                return rectPath(a.x, a.y, a.width, a.height, a.r);\n            },\n            image: function (el) {\n                var a = el.attrs;\n                return rectPath(a.x, a.y, a.width, a.height);\n            },\n            text: function (el) {\n                var bbox = el._getBBox();\n                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n            }\n        },\n        \n        mapPath = R.mapPath = function (path, matrix) {\n            if (!matrix) {\n                return path;\n            }\n            var x, y, i, j, ii, jj, pathi;\n            path = path2curve(path);\n            for (i = 0, ii = path.length; i < ii; i++) {\n                pathi = path[i];\n                for (j = 1, jj = pathi.length; j < jj; j += 2) {\n                    x = matrix.x(pathi[j], pathi[j + 1]);\n                    y = matrix.y(pathi[j], pathi[j + 1]);\n                    pathi[j] = x;\n                    pathi[j + 1] = y;\n                }\n            }\n            return path;\n        };\n\n    R._g = g;\n    \n    \n    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") ? \"SVG\" : \"VML\");\n    if (R.type == \"VML\") {\n        var d = g.doc.createElement(\"div\"),\n            b;\n        d.innerHTML = '<v:shape adj=\"1\"/>';\n        b = d.firstChild;\n        b.style.behavior = \"url(#default#VML)\";\n        if (!(b && typeof b.adj == \"object\")) {\n            return (R.type = E);\n        }\n        d = null;\n    }\n\n    \n    R.svg = !(R.vml = R.type == \"VML\");\n    R._Paper = Paper;\n    \n    R.fn = paperproto = Paper.prototype = R.prototype;\n    R._id = 0;\n    R._oid = 0;\n    \n    R.is = function (o, type) {\n        type = lowerCase.call(type);\n        if (type == \"finite\") {\n            return !isnan[has](+o);\n        }\n        if (type == \"array\") {\n            return o instanceof Array;\n        }\n        return  (type == \"null\" && o === null) ||\n                (type == typeof o && o !== null) ||\n                (type == \"object\" && o === Object(o)) ||\n                (type == \"array\" && Array.isArray && Array.isArray(o)) ||\n                objectToString.call(o).slice(8, -1).toLowerCase() == type;\n    };\n\n    function clone(obj) {\n        if (Object(obj) !== obj) {\n            return obj;\n        }\n        var res = new obj.constructor;\n        for (var key in obj) if (obj[has](key)) {\n            res[key] = clone(obj[key]);\n        }\n        return res;\n    }\n\n    \n    R.angle = function (x1, y1, x2, y2, x3, y3) {\n        if (x3 == null) {\n            var x = x1 - x2,\n                y = y1 - y2;\n            if (!x && !y) {\n                return 0;\n            }\n            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n        } else {\n            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);\n        }\n    };\n    \n    R.rad = function (deg) {\n        return deg % 360 * PI / 180;\n    };\n    \n    R.deg = function (rad) {\n        return rad * 180 / PI % 360;\n    };\n    \n    R.snapTo = function (values, value, tolerance) {\n        tolerance = R.is(tolerance, \"finite\") ? tolerance : 10;\n        if (R.is(values, array)) {\n            var i = values.length;\n            while (i--) if (abs(values[i] - value) <= tolerance) {\n                return values[i];\n            }\n        } else {\n            values = +values;\n            var rem = value % values;\n            if (rem < tolerance) {\n                return value - rem;\n            }\n            if (rem > values - tolerance) {\n                return value - rem + values;\n            }\n        }\n        return value;\n    };\n    \n    \n    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {\n        return function () {\n            return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(uuidRegEx, uuidReplacer).toUpperCase();\n        };\n    })(/[xy]/g, function (c) {\n        var r = math.random() * 16 | 0,\n            v = c == \"x\" ? r : (r & 3 | 8);\n        return v.toString(16);\n    });\n\n    \n    R.setWindow = function (newwin) {\n        eve(\"raphael.setWindow\", R, g.win, newwin);\n        g.win = newwin;\n        g.doc = g.win.document;\n        if (R._engine.initWin) {\n            R._engine.initWin(g.win);\n        }\n    };\n    var toHex = function (color) {\n        if (R.vml) {\n            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/\n            var trim = /^\\s+|\\s+$/g;\n            var bod;\n            try {\n                var docum = new ActiveXObject(\"htmlfile\");\n                docum.write(\"<body>\");\n                docum.close();\n                bod = docum.body;\n            } catch(e) {\n                bod = createPopup().document.body;\n            }\n            var range = bod.createTextRange();\n            toHex = cacher(function (color) {\n                try {\n                    bod.style.color = Str(color).replace(trim, E);\n                    var value = range.queryCommandValue(\"ForeColor\");\n                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);\n                    return \"#\" + (\"000000\" + value.toString(16)).slice(-6);\n                } catch(e) {\n                    return \"none\";\n                }\n            });\n        } else {\n            var i = g.doc.createElement(\"i\");\n            i.title = \"Rapha\\xebl Colour Picker\";\n            i.style.display = \"none\";\n            g.doc.body.appendChild(i);\n            toHex = cacher(function (color) {\n                i.style.color = color;\n                return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n            });\n        }\n        return toHex(color);\n    },\n    hsbtoString = function () {\n        return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n    },\n    hsltoString = function () {\n        return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n    },\n    rgbtoString = function () {\n        return this.hex;\n    },\n    prepareRGB = function (r, g, b) {\n        if (g == null && R.is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n            b = r.b;\n            g = r.g;\n            r = r.r;\n        }\n        if (g == null && R.is(r, string)) {\n            var clr = R.getRGB(r);\n            r = clr.r;\n            g = clr.g;\n            b = clr.b;\n        }\n        if (r > 1 || g > 1 || b > 1) {\n            r /= 255;\n            g /= 255;\n            b /= 255;\n        }\n        \n        return [r, g, b];\n    },\n    packageRGB = function (r, g, b, o) {\n        r *= 255;\n        g *= 255;\n        b *= 255;\n        var rgb = {\n            r: r,\n            g: g,\n            b: b,\n            hex: R.rgb(r, g, b),\n            toString: rgbtoString\n        };\n        R.is(o, \"finite\") && (rgb.opacity = o);\n        return rgb;\n    };\n    \n    \n    R.color = function (clr) {\n        var rgb;\n        if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n            rgb = R.hsb2rgb(clr);\n            clr.r = rgb.r;\n            clr.g = rgb.g;\n            clr.b = rgb.b;\n            clr.hex = rgb.hex;\n        } else if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n            rgb = R.hsl2rgb(clr);\n            clr.r = rgb.r;\n            clr.g = rgb.g;\n            clr.b = rgb.b;\n            clr.hex = rgb.hex;\n        } else {\n            if (R.is(clr, \"string\")) {\n                clr = R.getRGB(clr);\n            }\n            if (R.is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr) {\n                rgb = R.rgb2hsl(clr);\n                clr.h = rgb.h;\n                clr.s = rgb.s;\n                clr.l = rgb.l;\n                rgb = R.rgb2hsb(clr);\n                clr.v = rgb.b;\n            } else {\n                clr = {hex: \"none\"};\n                clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n            }\n        }\n        clr.toString = rgbtoString;\n        return clr;\n    };\n    \n    R.hsb2rgb = function (h, s, v, o) {\n        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n            v = h.b;\n            s = h.s;\n            h = h.h;\n            o = h.o;\n        }\n        h *= 360;\n        var R, G, B, X, C;\n        h = (h % 360) / 60;\n        C = v * s;\n        X = C * (1 - abs(h % 2 - 1));\n        R = G = B = v - C;\n\n        h = ~~h;\n        R += [C, X, 0, 0, X, C][h];\n        G += [X, C, C, X, 0, 0][h];\n        B += [0, 0, X, C, C, X][h];\n        return packageRGB(R, G, B, o);\n    };\n    \n    R.hsl2rgb = function (h, s, l, o) {\n        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n            l = h.l;\n            s = h.s;\n            h = h.h;\n        }\n        if (h > 1 || s > 1 || l > 1) {\n            h /= 360;\n            s /= 100;\n            l /= 100;\n        }\n        h *= 360;\n        var R, G, B, X, C;\n        h = (h % 360) / 60;\n        C = 2 * s * (l < .5 ? l : 1 - l);\n        X = C * (1 - abs(h % 2 - 1));\n        R = G = B = l - C / 2;\n\n        h = ~~h;\n        R += [C, X, 0, 0, X, C][h];\n        G += [X, C, C, X, 0, 0][h];\n        B += [0, 0, X, C, C, X][h];\n        return packageRGB(R, G, B, o);\n    };\n    \n    R.rgb2hsb = function (r, g, b) {\n        b = prepareRGB(r, g, b);\n        r = b[0];\n        g = b[1];\n        b = b[2];\n\n        var H, S, V, C;\n        V = mmax(r, g, b);\n        C = V - mmin(r, g, b);\n        H = (C == 0 ? null :\n             V == r ? (g - b) / C :\n             V == g ? (b - r) / C + 2 :\n                      (r - g) / C + 4\n            );\n        H = ((H + 360) % 6) * 60 / 360;\n        S = C == 0 ? 0 : C / V;\n        return {h: H, s: S, b: V, toString: hsbtoString};\n    };\n    \n    R.rgb2hsl = function (r, g, b) {\n        b = prepareRGB(r, g, b);\n        r = b[0];\n        g = b[1];\n        b = b[2];\n\n        var H, S, L, M, m, C;\n        M = mmax(r, g, b);\n        m = mmin(r, g, b);\n        C = M - m;\n        H = (C == 0 ? null :\n             M == r ? (g - b) / C :\n             M == g ? (b - r) / C + 2 :\n                      (r - g) / C + 4);\n        H = ((H + 360) % 6) * 60 / 360;\n        L = (M + m) / 2;\n        S = (C == 0 ? 0 :\n             L < .5 ? C / (2 * L) :\n                      C / (2 - 2 * L));\n        return {h: H, s: S, l: L, toString: hsltoString};\n    };\n    R._path2string = function () {\n        return this.join(\",\").replace(p2s, \"$1\");\n    };\n    function repush(array, item) {\n        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n            return array.push(array.splice(i, 1)[0]);\n        }\n    }\n    function cacher(f, scope, postprocessor) {\n        function newf() {\n            var arg = Array.prototype.slice.call(arguments, 0),\n                args = arg.join(\"\\u2400\"),\n                cache = newf.cache = newf.cache || {},\n                count = newf.count = newf.count || [];\n            if (cache[has](args)) {\n                repush(count, args);\n                return postprocessor ? postprocessor(cache[args]) : cache[args];\n            }\n            count.length >= 1e3 && delete cache[count.shift()];\n            count.push(args);\n            cache[args] = f[apply](scope, arg);\n            return postprocessor ? postprocessor(cache[args]) : cache[args];\n        }\n        return newf;\n    }\n\n    var preload = R._preload = function (src, f) {\n        var img = g.doc.createElement(\"img\");\n        img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n        img.onload = function () {\n            f.call(this);\n            this.onload = null;\n            g.doc.body.removeChild(this);\n        };\n        img.onerror = function () {\n            g.doc.body.removeChild(this);\n        };\n        g.doc.body.appendChild(img);\n        img.src = src;\n    };\n    \n    function clrToString() {\n        return this.hex;\n    }\n\n    \n    R.getRGB = cacher(function (colour) {\n        if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n            return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n        }\n        if (colour == \"none\") {\n            return {r: -1, g: -1, b: -1, hex: \"none\", toString: clrToString};\n        }\n        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n        var res,\n            red,\n            green,\n            blue,\n            opacity,\n            t,\n            values,\n            rgb = colour.match(colourRegExp);\n        if (rgb) {\n            if (rgb[2]) {\n                blue = toInt(rgb[2].substring(5), 16);\n                green = toInt(rgb[2].substring(3, 5), 16);\n                red = toInt(rgb[2].substring(1, 3), 16);\n            }\n            if (rgb[3]) {\n                blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n                green = toInt((t = rgb[3].charAt(2)) + t, 16);\n                red = toInt((t = rgb[3].charAt(1)) + t, 16);\n            }\n            if (rgb[4]) {\n                values = rgb[4][split](commaSpaces);\n                red = toFloat(values[0]);\n                values[0].slice(-1) == \"%\" && (red *= 2.55);\n                green = toFloat(values[1]);\n                values[1].slice(-1) == \"%\" && (green *= 2.55);\n                blue = toFloat(values[2]);\n                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n                rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n            }\n            if (rgb[5]) {\n                values = rgb[5][split](commaSpaces);\n                red = toFloat(values[0]);\n                values[0].slice(-1) == \"%\" && (red *= 2.55);\n                green = toFloat(values[1]);\n                values[1].slice(-1) == \"%\" && (green *= 2.55);\n                blue = toFloat(values[2]);\n                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n                rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n                return R.hsb2rgb(red, green, blue, opacity);\n            }\n            if (rgb[6]) {\n                values = rgb[6][split](commaSpaces);\n                red = toFloat(values[0]);\n                values[0].slice(-1) == \"%\" && (red *= 2.55);\n                green = toFloat(values[1]);\n                values[1].slice(-1) == \"%\" && (green *= 2.55);\n                blue = toFloat(values[2]);\n                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n                rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n                return R.hsl2rgb(red, green, blue, opacity);\n            }\n            rgb = {r: red, g: green, b: blue, toString: clrToString};\n            rgb.hex = \"#\" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);\n            R.is(opacity, \"finite\") && (rgb.opacity = opacity);\n            return rgb;\n        }\n        return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n    }, R);\n    \n    R.hsb = cacher(function (h, s, b) {\n        return R.hsb2rgb(h, s, b).hex;\n    });\n    \n    R.hsl = cacher(function (h, s, l) {\n        return R.hsl2rgb(h, s, l).hex;\n    });\n    \n    R.rgb = cacher(function (r, g, b) {\n        return \"#\" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);\n    });\n    \n    R.getColor = function (value) {\n        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},\n            rgb = this.hsb2rgb(start.h, start.s, start.b);\n        start.h += .075;\n        if (start.h > 1) {\n            start.h = 0;\n            start.s -= .2;\n            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});\n        }\n        return rgb.hex;\n    };\n    \n    R.getColor.reset = function () {\n        delete this.start;\n    };\n\n    // http://schepers.cc/getting-to-the-point\n    function catmullRom2bezier(crp, z) {\n        var d = [];\n        for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n            var p = [\n                        {x: +crp[i - 2], y: +crp[i - 1]},\n                        {x: +crp[i],     y: +crp[i + 1]},\n                        {x: +crp[i + 2], y: +crp[i + 3]},\n                        {x: +crp[i + 4], y: +crp[i + 5]}\n                    ];\n            if (z) {\n                if (!i) {\n                    p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n                } else if (iLen - 4 == i) {\n                    p[3] = {x: +crp[0], y: +crp[1]};\n                } else if (iLen - 2 == i) {\n                    p[2] = {x: +crp[0], y: +crp[1]};\n                    p[3] = {x: +crp[2], y: +crp[3]};\n                }\n            } else {\n                if (iLen - 4 == i) {\n                    p[3] = p[2];\n                } else if (!i) {\n                    p[0] = {x: +crp[i], y: +crp[i + 1]};\n                }\n            }\n            d.push([\"C\",\n                  (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n                  (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n                  (p[1].x + 6 * p[2].x - p[3].x) / 6,\n                  (p[1].y + 6*p[2].y - p[3].y) / 6,\n                  p[2].x,\n                  p[2].y\n            ]);\n        }\n\n        return d;\n    }\n    \n    R.parsePathString = function (pathString) {\n        if (!pathString) {\n            return null;\n        }\n        var pth = paths(pathString);\n        if (pth.arr) {\n            return pathClone(pth.arr);\n        }\n        \n        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            data = [];\n        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption\n            data = pathClone(pathString);\n        }\n        if (!data.length) {\n            Str(pathString).replace(pathCommand, function (a, b, c) {\n                var params = [],\n                    name = b.toLowerCase();\n                c.replace(pathValues, function (a, b) {\n                    b && params.push(+b);\n                });\n                if (name == \"m\" && params.length > 2) {\n                    data.push([b][concat](params.splice(0, 2)));\n                    name = \"l\";\n                    b = b == \"m\" ? \"l\" : \"L\";\n                }\n                if (name == \"r\") {\n                    data.push([b][concat](params));\n                } else while (params.length >= paramCounts[name]) {\n                    data.push([b][concat](params.splice(0, paramCounts[name])));\n                    if (!paramCounts[name]) {\n                        break;\n                    }\n                }\n            });\n        }\n        data.toString = R._path2string;\n        pth.arr = pathClone(data);\n        return data;\n    };\n    \n    R.parseTransformString = cacher(function (TString) {\n        if (!TString) {\n            return null;\n        }\n        var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n            data = [];\n        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption\n            data = pathClone(TString);\n        }\n        if (!data.length) {\n            Str(TString).replace(tCommand, function (a, b, c) {\n                var params = [],\n                    name = lowerCase.call(b);\n                c.replace(pathValues, function (a, b) {\n                    b && params.push(+b);\n                });\n                data.push([b][concat](params));\n            });\n        }\n        data.toString = R._path2string;\n        return data;\n    });\n    // PATHS\n    var paths = function (ps) {\n        var p = paths.ps = paths.ps || {};\n        if (p[ps]) {\n            p[ps].sleep = 100;\n        } else {\n            p[ps] = {\n                sleep: 100\n            };\n        }\n        setTimeout(function () {\n            for (var key in p) if (p[has](key) && key != ps) {\n                p[key].sleep--;\n                !p[key].sleep && delete p[key];\n            }\n        });\n        return p[ps];\n    };\n    \n    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n        var t1 = 1 - t,\n            t13 = pow(t1, 3),\n            t12 = pow(t1, 2),\n            t2 = t * t,\n            t3 = t2 * t,\n            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n            ax = t1 * p1x + t * c1x,\n            ay = t1 * p1y + t * c1y,\n            cx = t1 * c2x + t * p2x,\n            cy = t1 * c2y + t * p2y,\n            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);\n        (mx > nx || my < ny) && (alpha += 180);\n        return {\n            x: x,\n            y: y,\n            m: {x: mx, y: my},\n            n: {x: nx, y: ny},\n            start: {x: ax, y: ay},\n            end: {x: cx, y: cy},\n            alpha: alpha\n        };\n    };\n    \n    R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n        if (!R.is(p1x, \"array\")) {\n            p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n        }\n        var bbox = curveDim.apply(null, p1x);\n        return {\n            x: bbox.min.x,\n            y: bbox.min.y,\n            x2: bbox.max.x,\n            y2: bbox.max.y,\n            width: bbox.max.x - bbox.min.x,\n            height: bbox.max.y - bbox.min.y\n        };\n    };\n    \n    R.isPointInsideBBox = function (bbox, x, y) {\n        return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2;\n    };\n    \n    R.isBBoxIntersect = function (bbox1, bbox2) {\n        var i = R.isPointInsideBBox;\n        return i(bbox2, bbox1.x, bbox1.y)\n            || i(bbox2, bbox1.x2, bbox1.y)\n            || i(bbox2, bbox1.x, bbox1.y2)\n            || i(bbox2, bbox1.x2, bbox1.y2)\n            || i(bbox1, bbox2.x, bbox2.y)\n            || i(bbox1, bbox2.x2, bbox2.y)\n            || i(bbox1, bbox2.x, bbox2.y2)\n            || i(bbox1, bbox2.x2, bbox2.y2)\n            || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n            && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n    };\n    function base3(t, p1, p2, p3, p4) {\n        var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n            t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n        return t * t2 - 3 * p1 + 3 * p2;\n    }\n    function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n        if (z == null) {\n            z = 1;\n        }\n        z = z > 1 ? 1 : z < 0 ? 0 : z;\n        var z2 = z / 2,\n            n = 12,\n            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            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            sum = 0;\n        for (var i = 0; i < n; i++) {\n            var ct = z2 * Tvalues[i] + z2,\n                xbase = base3(ct, x1, x2, x3, x4),\n                ybase = base3(ct, y1, y2, y3, y4),\n                comb = xbase * xbase + ybase * ybase;\n            sum += Cvalues[i] * math.sqrt(comb);\n        }\n        return z2 * sum;\n    }\n    function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n        if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n            return;\n        }\n        var t = 1,\n            step = t / 2,\n            t2 = t - step,\n            l,\n            e = .01;\n        l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n        while (abs(l - ll) > e) {\n            step /= 2;\n            t2 += (l < ll ? 1 : -1) * step;\n            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n        }\n        return t2;\n    }\n    function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n        if (\n            mmax(x1, x2) < mmin(x3, x4) ||\n            mmin(x1, x2) > mmax(x3, x4) ||\n            mmax(y1, y2) < mmin(y3, y4) ||\n            mmin(y1, y2) > mmax(y3, y4)\n        ) {\n            return;\n        }\n        var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n            ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n            denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n        if (!denominator) {\n            return;\n        }\n        var px = nx / denominator,\n            py = ny / denominator,\n            px2 = +px.toFixed(2),\n            py2 = +py.toFixed(2);\n        if (\n            px2 < +mmin(x1, x2).toFixed(2) ||\n            px2 > +mmax(x1, x2).toFixed(2) ||\n            px2 < +mmin(x3, x4).toFixed(2) ||\n            px2 > +mmax(x3, x4).toFixed(2) ||\n            py2 < +mmin(y1, y2).toFixed(2) ||\n            py2 > +mmax(y1, y2).toFixed(2) ||\n            py2 < +mmin(y3, y4).toFixed(2) ||\n            py2 > +mmax(y3, y4).toFixed(2)\n        ) {\n            return;\n        }\n        return {x: px, y: py};\n    }\n    function inter(bez1, bez2) {\n        return interHelper(bez1, bez2);\n    }\n    function interCount(bez1, bez2) {\n        return interHelper(bez1, bez2, 1);\n    }\n    function interHelper(bez1, bez2, justCount) {\n        var bbox1 = R.bezierBBox(bez1),\n            bbox2 = R.bezierBBox(bez2);\n        if (!R.isBBoxIntersect(bbox1, bbox2)) {\n            return justCount ? 0 : [];\n        }\n        var l1 = bezlen.apply(0, bez1),\n            l2 = bezlen.apply(0, bez2),\n            n1 = ~~(l1 / 5),\n            n2 = ~~(l2 / 5),\n            dots1 = [],\n            dots2 = [],\n            xy = {},\n            res = justCount ? 0 : [];\n        for (var i = 0; i < n1 + 1; i++) {\n            var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1));\n            dots1.push({x: p.x, y: p.y, t: i / n1});\n        }\n        for (i = 0; i < n2 + 1; i++) {\n            p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2));\n            dots2.push({x: p.x, y: p.y, t: i / n2});\n        }\n        for (i = 0; i < n1; i++) {\n            for (var j = 0; j < n2; j++) {\n                var di = dots1[i],\n                    di1 = dots1[i + 1],\n                    dj = dots2[j],\n                    dj1 = dots2[j + 1],\n                    ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n                    cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n                    is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n                if (is) {\n                    if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n                        continue;\n                    }\n                    xy[is.x.toFixed(4)] = is.y.toFixed(4);\n                    var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n                        t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n                    if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n                        if (justCount) {\n                            res++;\n                        } else {\n                            res.push({\n                                x: is.x,\n                                y: is.y,\n                                t1: t1,\n                                t2: t2\n                            });\n                        }\n                    }\n                }\n            }\n        }\n        return res;\n    }\n    \n    R.pathIntersection = function (path1, path2) {\n        return interPathHelper(path1, path2);\n    };\n    R.pathIntersectionNumber = function (path1, path2) {\n        return interPathHelper(path1, path2, 1);\n    };\n    function interPathHelper(path1, path2, justCount) {\n        path1 = R._path2curve(path1);\n        path2 = R._path2curve(path2);\n        var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n            res = justCount ? 0 : [];\n        for (var i = 0, ii = path1.length; i < ii; i++) {\n            var pi = path1[i];\n            if (pi[0] == \"M\") {\n                x1 = x1m = pi[1];\n                y1 = y1m = pi[2];\n            } else {\n                if (pi[0] == \"C\") {\n                    bez1 = [x1, y1].concat(pi.slice(1));\n                    x1 = bez1[6];\n                    y1 = bez1[7];\n                } else {\n                    bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n                    x1 = x1m;\n                    y1 = y1m;\n                }\n                for (var j = 0, jj = path2.length; j < jj; j++) {\n                    var pj = path2[j];\n                    if (pj[0] == \"M\") {\n                        x2 = x2m = pj[1];\n                        y2 = y2m = pj[2];\n                    } else {\n                        if (pj[0] == \"C\") {\n                            bez2 = [x2, y2].concat(pj.slice(1));\n                            x2 = bez2[6];\n                            y2 = bez2[7];\n                        } else {\n                            bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n                            x2 = x2m;\n                            y2 = y2m;\n                        }\n                        var intr = interHelper(bez1, bez2, justCount);\n                        if (justCount) {\n                            res += intr;\n                        } else {\n                            for (var k = 0, kk = intr.length; k < kk; k++) {\n                                intr[k].segment1 = i;\n                                intr[k].segment2 = j;\n                                intr[k].bez1 = bez1;\n                                intr[k].bez2 = bez2;\n                            }\n                            res = res.concat(intr);\n                        }\n                    }\n                }\n            }\n        }\n        return res;\n    }\n    \n    R.isPointInsidePath = function (path, x, y) {\n        var bbox = R.pathBBox(path);\n        return R.isPointInsideBBox(bbox, x, y) &&\n               interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n    };\n    R._removedFactory = function (methodname) {\n        return function () {\n            eve(\"raphael.log\", null, \"Rapha\\xebl: you are calling to method \\u201c\" + methodname + \"\\u201d of removed object\", methodname);\n        };\n    };\n    \n    var pathDimensions = R.pathBBox = function (path) {\n        var pth = paths(path);\n        if (pth.bbox) {\n            return pth.bbox;\n        }\n        if (!path) {\n            return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};\n        }\n        path = path2curve(path);\n        var x = 0, \n            y = 0,\n            X = [],\n            Y = [],\n            p;\n        for (var i = 0, ii = path.length; i < ii; i++) {\n            p = path[i];\n            if (p[0] == \"M\") {\n                x = p[1];\n                y = p[2];\n                X.push(x);\n                Y.push(y);\n            } else {\n                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n                X = X[concat](dim.min.x, dim.max.x);\n                Y = Y[concat](dim.min.y, dim.max.y);\n                x = p[5];\n                y = p[6];\n            }\n        }\n        var xmin = mmin[apply](0, X),\n            ymin = mmin[apply](0, Y),\n            xmax = mmax[apply](0, X),\n            ymax = mmax[apply](0, Y),\n            bb = {\n                x: xmin,\n                y: ymin,\n                x2: xmax,\n                y2: ymax,\n                width: xmax - xmin,\n                height: ymax - ymin\n            };\n        pth.bbox = clone(bb);\n        return bb;\n    },\n        pathClone = function (pathArray) {\n            var res = clone(pathArray);\n            res.toString = R._path2string;\n            return res;\n        },\n        pathToRelative = R._pathToRelative = function (pathArray) {\n            var pth = paths(pathArray);\n            if (pth.rel) {\n                return pathClone(pth.rel);\n            }\n            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n                pathArray = R.parsePathString(pathArray);\n            }\n            var res = [],\n                x = 0,\n                y = 0,\n                mx = 0,\n                my = 0,\n                start = 0;\n            if (pathArray[0][0] == \"M\") {\n                x = pathArray[0][1];\n                y = pathArray[0][2];\n                mx = x;\n                my = y;\n                start++;\n                res.push([\"M\", x, y]);\n            }\n            for (var i = start, ii = pathArray.length; i < ii; i++) {\n                var r = res[i] = [],\n                    pa = pathArray[i];\n                if (pa[0] != lowerCase.call(pa[0])) {\n                    r[0] = lowerCase.call(pa[0]);\n                    switch (r[0]) {\n                        case \"a\":\n                            r[1] = pa[1];\n                            r[2] = pa[2];\n                            r[3] = pa[3];\n                            r[4] = pa[4];\n                            r[5] = pa[5];\n                            r[6] = +(pa[6] - x).toFixed(3);\n                            r[7] = +(pa[7] - y).toFixed(3);\n                            break;\n                        case \"v\":\n                            r[1] = +(pa[1] - y).toFixed(3);\n                            break;\n                        case \"m\":\n                            mx = pa[1];\n                            my = pa[2];\n                        default:\n                            for (var j = 1, jj = pa.length; j < jj; j++) {\n                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);\n                            }\n                    }\n                } else {\n                    r = res[i] = [];\n                    if (pa[0] == \"m\") {\n                        mx = pa[1] + x;\n                        my = pa[2] + y;\n                    }\n                    for (var k = 0, kk = pa.length; k < kk; k++) {\n                        res[i][k] = pa[k];\n                    }\n                }\n                var len = res[i].length;\n                switch (res[i][0]) {\n                    case \"z\":\n                        x = mx;\n                        y = my;\n                        break;\n                    case \"h\":\n                        x += +res[i][len - 1];\n                        break;\n                    case \"v\":\n                        y += +res[i][len - 1];\n                        break;\n                    default:\n                        x += +res[i][len - 2];\n                        y += +res[i][len - 1];\n                }\n            }\n            res.toString = R._path2string;\n            pth.rel = pathClone(res);\n            return res;\n        },\n        pathToAbsolute = R._pathToAbsolute = function (pathArray) {\n            var pth = paths(pathArray);\n            if (pth.abs) {\n                return pathClone(pth.abs);\n            }\n            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n                pathArray = R.parsePathString(pathArray);\n            }\n            if (!pathArray || !pathArray.length) {\n                return [[\"M\", 0, 0]];\n            }\n            var res = [],\n                x = 0,\n                y = 0,\n                mx = 0,\n                my = 0,\n                start = 0;\n            if (pathArray[0][0] == \"M\") {\n                x = +pathArray[0][1];\n                y = +pathArray[0][2];\n                mx = x;\n                my = y;\n                start++;\n                res[0] = [\"M\", x, y];\n            }\n            var crz = pathArray.length == 3 && pathArray[0][0] == \"M\" && pathArray[1][0].toUpperCase() == \"R\" && pathArray[2][0].toUpperCase() == \"Z\";\n            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n                res.push(r = []);\n                pa = pathArray[i];\n                if (pa[0] != upperCase.call(pa[0])) {\n                    r[0] = upperCase.call(pa[0]);\n                    switch (r[0]) {\n                        case \"A\":\n                            r[1] = pa[1];\n                            r[2] = pa[2];\n                            r[3] = pa[3];\n                            r[4] = pa[4];\n                            r[5] = pa[5];\n                            r[6] = +(pa[6] + x);\n                            r[7] = +(pa[7] + y);\n                            break;\n                        case \"V\":\n                            r[1] = +pa[1] + y;\n                            break;\n                        case \"H\":\n                            r[1] = +pa[1] + x;\n                            break;\n                        case \"R\":\n                            var dots = [x, y][concat](pa.slice(1));\n                            for (var j = 2, jj = dots.length; j < jj; j++) {\n                                dots[j] = +dots[j] + x;\n                                dots[++j] = +dots[j] + y;\n                            }\n                            res.pop();\n                            res = res[concat](catmullRom2bezier(dots, crz));\n                            break;\n                        case \"M\":\n                            mx = +pa[1] + x;\n                            my = +pa[2] + y;\n                        default:\n                            for (j = 1, jj = pa.length; j < jj; j++) {\n                                r[j] = +pa[j] + ((j % 2) ? x : y);\n                            }\n                    }\n                } else if (pa[0] == \"R\") {\n                    dots = [x, y][concat](pa.slice(1));\n                    res.pop();\n                    res = res[concat](catmullRom2bezier(dots, crz));\n                    r = [\"R\"][concat](pa.slice(-2));\n                } else {\n                    for (var k = 0, kk = pa.length; k < kk; k++) {\n                        r[k] = pa[k];\n                    }\n                }\n                switch (r[0]) {\n                    case \"Z\":\n                        x = mx;\n                        y = my;\n                        break;\n                    case \"H\":\n                        x = r[1];\n                        break;\n                    case \"V\":\n                        y = r[1];\n                        break;\n                    case \"M\":\n                        mx = r[r.length - 2];\n                        my = r[r.length - 1];\n                    default:\n                        x = r[r.length - 2];\n                        y = r[r.length - 1];\n                }\n            }\n            res.toString = R._path2string;\n            pth.abs = pathClone(res);\n            return res;\n        },\n        l2c = function (x1, y1, x2, y2) {\n            return [x1, y1, x2, y2, x2, y2];\n        },\n        q2c = function (x1, y1, ax, ay, x2, y2) {\n            var _13 = 1 / 3,\n                _23 = 2 / 3;\n            return [\n                    _13 * x1 + _23 * ax,\n                    _13 * y1 + _23 * ay,\n                    _13 * x2 + _23 * ax,\n                    _13 * y2 + _23 * ay,\n                    x2,\n                    y2\n                ];\n        },\n        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n            // for more information of where this math came from visit:\n            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n            var _120 = PI * 120 / 180,\n                rad = PI / 180 * (+angle || 0),\n                res = [],\n                xy,\n                rotate = cacher(function (x, y, rad) {\n                    var X = x * math.cos(rad) - y * math.sin(rad),\n                        Y = x * math.sin(rad) + y * math.cos(rad);\n                    return {x: X, y: Y};\n                });\n            if (!recursive) {\n                xy = rotate(x1, y1, -rad);\n                x1 = xy.x;\n                y1 = xy.y;\n                xy = rotate(x2, y2, -rad);\n                x2 = xy.x;\n                y2 = xy.y;\n                var cos = math.cos(PI / 180 * angle),\n                    sin = math.sin(PI / 180 * angle),\n                    x = (x1 - x2) / 2,\n                    y = (y1 - y2) / 2;\n                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n                if (h > 1) {\n                    h = math.sqrt(h);\n                    rx = h * rx;\n                    ry = h * ry;\n                }\n                var rx2 = rx * rx,\n                    ry2 = ry * ry,\n                    k = (large_arc_flag == sweep_flag ? -1 : 1) *\n                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n                    cx = k * rx * y / ry + (x1 + x2) / 2,\n                    cy = k * -ry * x / rx + (y1 + y2) / 2,\n                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n                f1 = x1 < cx ? PI - f1 : f1;\n                f2 = x2 < cx ? PI - f2 : f2;\n                f1 < 0 && (f1 = PI * 2 + f1);\n                f2 < 0 && (f2 = PI * 2 + f2);\n                if (sweep_flag && f1 > f2) {\n                    f1 = f1 - PI * 2;\n                }\n                if (!sweep_flag && f2 > f1) {\n                    f2 = f2 - PI * 2;\n                }\n            } else {\n                f1 = recursive[0];\n                f2 = recursive[1];\n                cx = recursive[2];\n                cy = recursive[3];\n            }\n            var df = f2 - f1;\n            if (abs(df) > _120) {\n                var f2old = f2,\n                    x2old = x2,\n                    y2old = y2;\n                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n                x2 = cx + rx * math.cos(f2);\n                y2 = cy + ry * math.sin(f2);\n                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n            }\n            df = f2 - f1;\n            var c1 = math.cos(f1),\n                s1 = math.sin(f1),\n                c2 = math.cos(f2),\n                s2 = math.sin(f2),\n                t = math.tan(df / 4),\n                hx = 4 / 3 * rx * t,\n                hy = 4 / 3 * ry * t,\n                m1 = [x1, y1],\n                m2 = [x1 + hx * s1, y1 - hy * c1],\n                m3 = [x2 + hx * s2, y2 - hy * c2],\n                m4 = [x2, y2];\n            m2[0] = 2 * m1[0] - m2[0];\n            m2[1] = 2 * m1[1] - m2[1];\n            if (recursive) {\n                return [m2, m3, m4][concat](res);\n            } else {\n                res = [m2, m3, m4][concat](res).join()[split](\",\");\n                var newres = [];\n                for (var i = 0, ii = res.length; i < ii; i++) {\n                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n                }\n                return newres;\n            }\n        },\n        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n            var t1 = 1 - t;\n            return {\n                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n            };\n        },\n        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),\n                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),\n                c = p1x - c1x,\n                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,\n                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,\n                y = [p1y, p2y],\n                x = [p1x, p2x],\n                dot;\n            abs(t1) > \"1e12\" && (t1 = .5);\n            abs(t2) > \"1e12\" && (t2 = .5);\n            if (t1 > 0 && t1 < 1) {\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n                x.push(dot.x);\n                y.push(dot.y);\n            }\n            if (t2 > 0 && t2 < 1) {\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n                x.push(dot.x);\n                y.push(dot.y);\n            }\n            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);\n            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);\n            c = p1y - c1y;\n            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;\n            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;\n            abs(t1) > \"1e12\" && (t1 = .5);\n            abs(t2) > \"1e12\" && (t2 = .5);\n            if (t1 > 0 && t1 < 1) {\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n                x.push(dot.x);\n                y.push(dot.y);\n            }\n            if (t2 > 0 && t2 < 1) {\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n                x.push(dot.x);\n                y.push(dot.y);\n            }\n            return {\n                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},\n                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}\n            };\n        }),\n        path2curve = R._path2curve = cacher(function (path, path2) {\n            var pth = !path2 && paths(path);\n            if (!path2 && pth.curve) {\n                return pathClone(pth.curve);\n            }\n            var p = pathToAbsolute(path),\n                p2 = path2 && pathToAbsolute(path2),\n                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n                processPath = function (path, d) {\n                    var nx, ny;\n                    if (!path) {\n                        return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n                    }\n                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);\n                    switch (path[0]) {\n                        case \"M\":\n                            d.X = path[1];\n                            d.Y = path[2];\n                            break;\n                        case \"A\":\n                            path = [\"C\"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));\n                            break;\n                        case \"S\":\n                            nx = d.x + (d.x - (d.bx || d.x));\n                            ny = d.y + (d.y - (d.by || d.y));\n                            path = [\"C\", nx, ny][concat](path.slice(1));\n                            break;\n                        case \"T\":\n                            d.qx = d.x + (d.x - (d.qx || d.x));\n                            d.qy = d.y + (d.y - (d.qy || d.y));\n                            path = [\"C\"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n                            break;\n                        case \"Q\":\n                            d.qx = path[1];\n                            d.qy = path[2];\n                            path = [\"C\"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n                            break;\n                        case \"L\":\n                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], path[2]));\n                            break;\n                        case \"H\":\n                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], d.y));\n                            break;\n                        case \"V\":\n                            path = [\"C\"][concat](l2c(d.x, d.y, d.x, path[1]));\n                            break;\n                        case \"Z\":\n                            path = [\"C\"][concat](l2c(d.x, d.y, d.X, d.Y));\n                            break;\n                    }\n                    return path;\n                },\n                fixArc = function (pp, i) {\n                    if (pp[i].length > 7) {\n                        pp[i].shift();\n                        var pi = pp[i];\n                        while (pi.length) {\n                            pp.splice(i++, 0, [\"C\"][concat](pi.splice(0, 6)));\n                        }\n                        pp.splice(i, 1);\n                        ii = mmax(p.length, p2 && p2.length || 0);\n                    }\n                },\n                fixM = function (path1, path2, a1, a2, i) {\n                    if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n                        path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n                        a1.bx = 0;\n                        a1.by = 0;\n                        a1.x = path1[i][1];\n                        a1.y = path1[i][2];\n                        ii = mmax(p.length, p2 && p2.length || 0);\n                    }\n                };\n            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n                p[i] = processPath(p[i], attrs);\n                fixArc(p, i);\n                p2 && (p2[i] = processPath(p2[i], attrs2));\n                p2 && fixArc(p2, i);\n                fixM(p, p2, attrs, attrs2, i);\n                fixM(p2, p, attrs2, attrs, i);\n                var seg = p[i],\n                    seg2 = p2 && p2[i],\n                    seglen = seg.length,\n                    seg2len = p2 && seg2.length;\n                attrs.x = seg[seglen - 2];\n                attrs.y = seg[seglen - 1];\n                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n                attrs2.x = p2 && seg2[seg2len - 2];\n                attrs2.y = p2 && seg2[seg2len - 1];\n            }\n            if (!p2) {\n                pth.curve = pathClone(p);\n            }\n            return p2 ? [p, p2] : p;\n        }, null, pathClone),\n        parseDots = R._parseDots = cacher(function (gradient) {\n            var dots = [];\n            for (var i = 0, ii = gradient.length; i < ii; i++) {\n                var dot = {},\n                    par = gradient[i].match(/^([^:]*):?([\\d\\.]*)/);\n                dot.color = R.getRGB(par[1]);\n                if (dot.color.error) {\n                    return null;\n                }\n                dot.color = dot.color.hex;\n                par[2] && (dot.offset = par[2] + \"%\");\n                dots.push(dot);\n            }\n            for (i = 1, ii = dots.length - 1; i < ii; i++) {\n                if (!dots[i].offset) {\n                    var start = toFloat(dots[i - 1].offset || 0),\n                        end = 0;\n                    for (var j = i + 1; j < ii; j++) {\n                        if (dots[j].offset) {\n                            end = dots[j].offset;\n                            break;\n                        }\n                    }\n                    if (!end) {\n                        end = 100;\n                        j = ii;\n                    }\n                    end = toFloat(end);\n                    var d = (end - start) / (j - i + 1);\n                    for (; i < j; i++) {\n                        start += d;\n                        dots[i].offset = start + \"%\";\n                    }\n                }\n            }\n            return dots;\n        }),\n        tear = R._tear = function (el, paper) {\n            el == paper.top && (paper.top = el.prev);\n            el == paper.bottom && (paper.bottom = el.next);\n            el.next && (el.next.prev = el.prev);\n            el.prev && (el.prev.next = el.next);\n        },\n        tofront = R._tofront = function (el, paper) {\n            if (paper.top === el) {\n                return;\n            }\n            tear(el, paper);\n            el.next = null;\n            el.prev = paper.top;\n            paper.top.next = el;\n            paper.top = el;\n        },\n        toback = R._toback = function (el, paper) {\n            if (paper.bottom === el) {\n                return;\n            }\n            tear(el, paper);\n            el.next = paper.bottom;\n            el.prev = null;\n            paper.bottom.prev = el;\n            paper.bottom = el;\n        },\n        insertafter = R._insertafter = function (el, el2, paper) {\n            tear(el, paper);\n            el2 == paper.top && (paper.top = el);\n            el2.next && (el2.next.prev = el);\n            el.next = el2.next;\n            el.prev = el2;\n            el2.next = el;\n        },\n        insertbefore = R._insertbefore = function (el, el2, paper) {\n            tear(el, paper);\n            el2 == paper.bottom && (paper.bottom = el);\n            el2.prev && (el2.prev.next = el);\n            el.prev = el2.prev;\n            el2.prev = el;\n            el.next = el2;\n        },\n        \n        toMatrix = R.toMatrix = function (path, transform) {\n            var bb = pathDimensions(path),\n                el = {\n                    _: {\n                        transform: E\n                    },\n                    getBBox: function () {\n                        return bb;\n                    }\n                };\n            extractTransform(el, transform);\n            return el.matrix;\n        },\n        \n        transformPath = R.transformPath = function (path, transform) {\n            return mapPath(path, toMatrix(path, transform));\n        },\n        extractTransform = R._extractTransform = function (el, tstr) {\n            if (tstr == null) {\n                return el._.transform;\n            }\n            tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || E);\n            var tdata = R.parseTransformString(tstr),\n                deg = 0,\n                dx = 0,\n                dy = 0,\n                sx = 1,\n                sy = 1,\n                _ = el._,\n                m = new Matrix;\n            _.transform = tdata || [];\n            if (tdata) {\n                for (var i = 0, ii = tdata.length; i < ii; i++) {\n                    var t = tdata[i],\n                        tlen = t.length,\n                        command = Str(t[0]).toLowerCase(),\n                        absolute = t[0] != command,\n                        inver = absolute ? m.invert() : 0,\n                        x1,\n                        y1,\n                        x2,\n                        y2,\n                        bb;\n                    if (command == \"t\" && tlen == 3) {\n                        if (absolute) {\n                            x1 = inver.x(0, 0);\n                            y1 = inver.y(0, 0);\n                            x2 = inver.x(t[1], t[2]);\n                            y2 = inver.y(t[1], t[2]);\n                            m.translate(x2 - x1, y2 - y1);\n                        } else {\n                            m.translate(t[1], t[2]);\n                        }\n                    } else if (command == \"r\") {\n                        if (tlen == 2) {\n                            bb = bb || el.getBBox(1);\n                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n                            deg += t[1];\n                        } else if (tlen == 4) {\n                            if (absolute) {\n                                x2 = inver.x(t[2], t[3]);\n                                y2 = inver.y(t[2], t[3]);\n                                m.rotate(t[1], x2, y2);\n                            } else {\n                                m.rotate(t[1], t[2], t[3]);\n                            }\n                            deg += t[1];\n                        }\n                    } else if (command == \"s\") {\n                        if (tlen == 2 || tlen == 3) {\n                            bb = bb || el.getBBox(1);\n                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n                            sx *= t[1];\n                            sy *= t[tlen - 1];\n                        } else if (tlen == 5) {\n                            if (absolute) {\n                                x2 = inver.x(t[3], t[4]);\n                                y2 = inver.y(t[3], t[4]);\n                                m.scale(t[1], t[2], x2, y2);\n                            } else {\n                                m.scale(t[1], t[2], t[3], t[4]);\n                            }\n                            sx *= t[1];\n                            sy *= t[2];\n                        }\n                    } else if (command == \"m\" && tlen == 7) {\n                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n                    }\n                    _.dirtyT = 1;\n                    el.matrix = m;\n                }\n            }\n\n            \n            el.matrix = m;\n\n            _.sx = sx;\n            _.sy = sy;\n            _.deg = deg;\n            _.dx = dx = m.e;\n            _.dy = dy = m.f;\n\n            if (sx == 1 && sy == 1 && !deg && _.bbox) {\n                _.bbox.x += +dx;\n                _.bbox.y += +dy;\n            } else {\n                _.dirtyT = 1;\n            }\n        },\n        getEmpty = function (item) {\n            var l = item[0];\n            switch (l.toLowerCase()) {\n                case \"t\": return [l, 0, 0];\n                case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n                case \"r\": if (item.length == 4) {\n                    return [l, 0, item[2], item[3]];\n                } else {\n                    return [l, 0];\n                }\n                case \"s\": if (item.length == 5) {\n                    return [l, 1, 1, item[3], item[4]];\n                } else if (item.length == 3) {\n                    return [l, 1, 1];\n                } else {\n                    return [l, 1];\n                }\n            }\n        },\n        equaliseTransform = R._equaliseTransform = function (t1, t2) {\n            t2 = Str(t2).replace(/\\.{3}|\\u2026/g, t1);\n            t1 = R.parseTransformString(t1) || [];\n            t2 = R.parseTransformString(t2) || [];\n            var maxlength = mmax(t1.length, t2.length),\n                from = [],\n                to = [],\n                i = 0, j, jj,\n                tt1, tt2;\n            for (; i < maxlength; i++) {\n                tt1 = t1[i] || getEmpty(t2[i]);\n                tt2 = t2[i] || getEmpty(tt1);\n                if ((tt1[0] != tt2[0]) ||\n                    (tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||\n                    (tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))\n                    ) {\n                    return;\n                }\n                from[i] = [];\n                to[i] = [];\n                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {\n                    j in tt1 && (from[i][j] = tt1[j]);\n                    j in tt2 && (to[i][j] = tt2[j]);\n                }\n            }\n            return {\n                from: from,\n                to: to\n            };\n        };\n    R._getContainer = function (x, y, w, h) {\n        var container;\n        container = h == null && !R.is(x, \"object\") ? g.doc.getElementById(x) : x;\n        if (container == null) {\n            return;\n        }\n        if (container.tagName) {\n            if (y == null) {\n                return {\n                    container: container,\n                    width: container.style.pixelWidth || container.offsetWidth,\n                    height: container.style.pixelHeight || container.offsetHeight\n                };\n            } else {\n                return {\n                    container: container,\n                    width: y,\n                    height: w\n                };\n            }\n        }\n        return {\n            container: 1,\n            x: x,\n            y: y,\n            width: w,\n            height: h\n        };\n    };\n    \n    R.pathToRelative = pathToRelative;\n    R._engine = {};\n    \n    R.path2curve = path2curve;\n    \n    R.matrix = function (a, b, c, d, e, f) {\n        return new Matrix(a, b, c, d, e, f);\n    };\n    function Matrix(a, b, c, d, e, f) {\n        if (a != null) {\n            this.a = +a;\n            this.b = +b;\n            this.c = +c;\n            this.d = +d;\n            this.e = +e;\n            this.f = +f;\n        } else {\n            this.a = 1;\n            this.b = 0;\n            this.c = 0;\n            this.d = 1;\n            this.e = 0;\n            this.f = 0;\n        }\n    }\n    (function (matrixproto) {\n        \n        matrixproto.add = function (a, b, c, d, e, f) {\n            var out = [[], [], []],\n                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],\n                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],\n                x, y, z, res;\n\n            if (a && a instanceof Matrix) {\n                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];\n            }\n\n            for (x = 0; x < 3; x++) {\n                for (y = 0; y < 3; y++) {\n                    res = 0;\n                    for (z = 0; z < 3; z++) {\n                        res += m[x][z] * matrix[z][y];\n                    }\n                    out[x][y] = res;\n                }\n            }\n            this.a = out[0][0];\n            this.b = out[1][0];\n            this.c = out[0][1];\n            this.d = out[1][1];\n            this.e = out[0][2];\n            this.f = out[1][2];\n        };\n        \n        matrixproto.invert = function () {\n            var me = this,\n                x = me.a * me.d - me.b * me.c;\n            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        };\n        \n        matrixproto.clone = function () {\n            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n        };\n        \n        matrixproto.translate = function (x, y) {\n            this.add(1, 0, 0, 1, x, y);\n        };\n        \n        matrixproto.scale = function (x, y, cx, cy) {\n            y == null && (y = x);\n            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);\n            this.add(x, 0, 0, y, 0, 0);\n            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);\n        };\n        \n        matrixproto.rotate = function (a, x, y) {\n            a = R.rad(a);\n            x = x || 0;\n            y = y || 0;\n            var cos = +math.cos(a).toFixed(9),\n                sin = +math.sin(a).toFixed(9);\n            this.add(cos, sin, -sin, cos, x, y);\n            this.add(1, 0, 0, 1, -x, -y);\n        };\n        \n        matrixproto.x = function (x, y) {\n            return x * this.a + y * this.c + this.e;\n        };\n        \n        matrixproto.y = function (x, y) {\n            return x * this.b + y * this.d + this.f;\n        };\n        matrixproto.get = function (i) {\n            return +this[Str.fromCharCode(97 + i)].toFixed(4);\n        };\n        matrixproto.toString = function () {\n            return R.svg ?\n                \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\" :\n                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();\n        };\n        matrixproto.toFilter = function () {\n            return \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + this.get(0) +\n                \", M12=\" + this.get(2) + \", M21=\" + this.get(1) + \", M22=\" + this.get(3) +\n                \", Dx=\" + this.get(4) + \", Dy=\" + this.get(5) + \", sizingmethod='auto expand')\";\n        };\n        matrixproto.offset = function () {\n            return [this.e.toFixed(4), this.f.toFixed(4)];\n        };\n        function norm(a) {\n            return a[0] * a[0] + a[1] * a[1];\n        }\n        function normalize(a) {\n            var mag = math.sqrt(norm(a));\n            a[0] && (a[0] /= mag);\n            a[1] && (a[1] /= mag);\n        }\n        \n        matrixproto.split = function () {\n            var out = {};\n            // translation\n            out.dx = this.e;\n            out.dy = this.f;\n\n            // scale and shear\n            var row = [[this.a, this.c], [this.b, this.d]];\n            out.scalex = math.sqrt(norm(row[0]));\n            normalize(row[0]);\n\n            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n            out.scaley = math.sqrt(norm(row[1]));\n            normalize(row[1]);\n            out.shear /= out.scaley;\n\n            // rotation\n            var sin = -row[0][1],\n                cos = row[1][1];\n            if (cos < 0) {\n                out.rotate = R.deg(math.acos(cos));\n                if (sin < 0) {\n                    out.rotate = 360 - out.rotate;\n                }\n            } else {\n                out.rotate = R.deg(math.asin(sin));\n            }\n\n            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n            return out;\n        };\n        \n        matrixproto.toTransformString = function (shorter) {\n            var s = shorter || this[split]();\n            if (s.isSimple) {\n                s.scalex = +s.scalex.toFixed(4);\n                s.scaley = +s.scaley.toFixed(4);\n                s.rotate = +s.rotate.toFixed(4);\n                return  (s.dx || s.dy ? \"t\" + [s.dx, s.dy] : E) + \n                        (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E) +\n                        (s.rotate ? \"r\" + [s.rotate, 0, 0] : E);\n            } else {\n                return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n            }\n        };\n    })(Matrix.prototype);\n\n    // WebKit rendering bug workaround method\n    // BROWSERIFY MOD: don't assume navigator exists\n    if (typeof navigator !== 'undefined') {\n        var version = navigator.userAgent.match(/Version\\/(.*?)\\s/) || navigator.userAgent.match(/Chrome\\/(\\d+)/);\n        if ((navigator.vendor == \"Apple Computer, Inc.\") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == \"iP\") ||\n            (navigator.vendor == \"Google Inc.\" && version && version[1] < 8)) {\n            \n            paperproto.safari = function () {\n                var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: \"none\"});\n                setTimeout(function () {rect.remove();});\n            };\n        } else {\n            paperproto.safari = fun;\n        }\n    } else {\n        paperproto.safari = fun;\n    }\n \n    var preventDefault = function () {\n        this.returnValue = false;\n    },\n    preventTouch = function () {\n        return this.originalEvent.preventDefault();\n    },\n    stopPropagation = function () {\n        this.cancelBubble = true;\n    },\n    stopTouch = function () {\n        return this.originalEvent.stopPropagation();\n    },\n    addEvent = (function () {\n        if (g.doc.addEventListener) {\n            return function (obj, type, fn, element) {\n                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type,\n                    f = function (e) {\n                        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n                            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n                            x = e.clientX + scrollX,\n                            y = e.clientY + scrollY;\n                    if (supportsTouch && touchMap[has](type)) {\n                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n                            if (e.targetTouches[i].target == obj) {\n                                var olde = e;\n                                e = e.targetTouches[i];\n                                e.originalEvent = olde;\n                                e.preventDefault = preventTouch;\n                                e.stopPropagation = stopTouch;\n                                break;\n                            }\n                        }\n                    }\n                    return fn.call(element, e, x, y);\n                };\n                obj.addEventListener(realName, f, false);\n                return function () {\n                    obj.removeEventListener(realName, f, false);\n                    return true;\n                };\n            };\n        } else if (g.doc.attachEvent) {\n            return function (obj, type, fn, element) {\n                var f = function (e) {\n                    e = e || g.win.event;\n                    var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n                        scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n                        x = e.clientX + scrollX,\n                        y = e.clientY + scrollY;\n                    e.preventDefault = e.preventDefault || preventDefault;\n                    e.stopPropagation = e.stopPropagation || stopPropagation;\n                    return fn.call(element, e, x, y);\n                };\n                obj.attachEvent(\"on\" + type, f);\n                var detacher = function () {\n                    obj.detachEvent(\"on\" + type, f);\n                    return true;\n                };\n                return detacher;\n            };\n        }\n    })(),\n    drag = [],\n    dragMove = function (e) {\n        var x = e.clientX,\n            y = e.clientY,\n            scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n            dragi,\n            j = drag.length;\n        while (j--) {\n            dragi = drag[j];\n            if (supportsTouch) {\n                var i = e.touches.length,\n                    touch;\n                while (i--) {\n                    touch = e.touches[i];\n                    if (touch.identifier == dragi.el._drag.id) {\n                        x = touch.clientX;\n                        y = touch.clientY;\n                        (e.originalEvent ? e.originalEvent : e).preventDefault();\n                        break;\n                    }\n                }\n            } else {\n                e.preventDefault();\n            }\n            var node = dragi.el.node,\n                o,\n                next = node.nextSibling,\n                parent = node.parentNode,\n                display = node.style.display;\n            g.win.opera && parent.removeChild(node);\n            node.style.display = \"none\";\n            o = dragi.el.paper.getElementByPoint(x, y);\n            node.style.display = display;\n            g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n            o && eve(\"raphael.drag.over.\" + dragi.el.id, dragi.el, o);\n            x += scrollX;\n            y += scrollY;\n            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        }\n    },\n    dragUp = function (e) {\n        R.unmousemove(dragMove).unmouseup(dragUp);\n        var i = drag.length,\n            dragi;\n        while (i--) {\n            dragi = drag[i];\n            dragi.el._drag = {};\n            eve(\"raphael.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n        }\n        drag = [];\n    },\n    \n    elproto = R.el = {};\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    for (var i = events.length; i--;) {\n        (function (eventName) {\n            R[eventName] = elproto[eventName] = function (fn, scope) {\n                if (R.is(fn, \"function\")) {\n                    this.events = this.events || [];\n                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});\n                }\n                return this;\n            };\n            R[\"un\" + eventName] = elproto[\"un\" + eventName] = function (fn) {\n                var events = this.events || [],\n                    l = events.length;\n                while (l--) if (events[l].name == eventName && events[l].f == fn) {\n                    events[l].unbind();\n                    events.splice(l, 1);\n                    !events.length && delete this.events;\n                    return this;\n                }\n                return this;\n            };\n        })(events[i]);\n    }\n    \n    \n    elproto.data = function (key, value) {\n        var data = eldata[this.id] = eldata[this.id] || {};\n        if (arguments.length == 1) {\n            if (R.is(key, \"object\")) {\n                for (var i in key) if (key[has](i)) {\n                    this.data(i, key[i]);\n                }\n                return this;\n            }\n            eve(\"raphael.data.get.\" + this.id, this, data[key], key);\n            return data[key];\n        }\n        data[key] = value;\n        eve(\"raphael.data.set.\" + this.id, this, value, key);\n        return this;\n    };\n    \n    elproto.removeData = function (key) {\n        if (key == null) {\n            eldata[this.id] = {};\n        } else {\n            eldata[this.id] && delete eldata[this.id][key];\n        }\n        return this;\n    };\n    \n    elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n    };\n    \n    elproto.unhover = function (f_in, f_out) {\n        return this.unmouseover(f_in).unmouseout(f_out);\n    };\n    var draggable = [];\n    \n    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n        function start(e) {\n            (e.originalEvent || e).preventDefault();\n            var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n            this._drag.x = e.clientX + scrollX;\n            this._drag.y = e.clientY + scrollY;\n            this._drag.id = e.identifier;\n            !drag.length && R.mousemove(dragMove).mouseup(dragUp);\n            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n            onstart && eve.on(\"raphael.drag.start.\" + this.id, onstart);\n            onmove && eve.on(\"raphael.drag.move.\" + this.id, onmove);\n            onend && eve.on(\"raphael.drag.end.\" + this.id, onend);\n            eve(\"raphael.drag.start.\" + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);\n        }\n        this._drag = {};\n        draggable.push({el: this, start: start});\n        this.mousedown(start);\n        return this;\n    };\n    \n    elproto.onDragOver = function (f) {\n        f ? eve.on(\"raphael.drag.over.\" + this.id, f) : eve.unbind(\"raphael.drag.over.\" + this.id);\n    };\n    \n    elproto.undrag = function () {\n        var i = draggable.length;\n        while (i--) if (draggable[i].el == this) {\n            this.unmousedown(draggable[i].start);\n            draggable.splice(i, 1);\n            eve.unbind(\"raphael.drag.*.\" + this.id);\n        }\n        !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp);\n    };\n    \n    paperproto.circle = function (x, y, r) {\n        var out = R._engine.circle(this, x || 0, y || 0, r || 0);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.rect = function (x, y, w, h, r) {\n        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.ellipse = function (x, y, rx, ry) {\n        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.path = function (pathString) {\n        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);\n        var out = R._engine.path(R.format[apply](R, arguments), this);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.image = function (src, x, y, w, h) {\n        var out = R._engine.image(this, src || \"about:blank\", x || 0, y || 0, w || 0, h || 0);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.text = function (x, y, text) {\n        var out = R._engine.text(this, x || 0, y || 0, Str(text));\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.set = function (itemsArray) {\n        !R.is(itemsArray, \"array\") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));\n        var out = new Set(itemsArray);\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    paperproto.setStart = function (set) {\n        this.__set__ = set || this.set();\n    };\n    \n    paperproto.setFinish = function (set) {\n        var out = this.__set__;\n        delete this.__set__;\n        return out;\n    };\n    \n    paperproto.setSize = function (width, height) {\n        return R._engine.setSize.call(this, width, height);\n    };\n    \n    paperproto.setViewBox = function (x, y, w, h, fit) {\n        return R._engine.setViewBox.call(this, x, y, w, h, fit);\n    };\n    \n    \n    paperproto.top = paperproto.bottom = null;\n    \n    paperproto.raphael = R;\n    var getOffset = function (elem) {\n        var box = elem.getBoundingClientRect(),\n            doc = elem.ownerDocument,\n            body = doc.body,\n            docElem = doc.documentElement,\n            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n        return {\n            y: top,\n            x: left\n        };\n    };\n    \n    paperproto.getElementByPoint = function (x, y) {\n        var paper = this,\n            svg = paper.canvas,\n            target = g.doc.elementFromPoint(x, y);\n        if (g.win.opera && target.tagName == \"svg\") {\n            var so = getOffset(svg),\n                sr = svg.createSVGRect();\n            sr.x = x - so.x;\n            sr.y = y - so.y;\n            sr.width = sr.height = 1;\n            var hits = svg.getIntersectionList(sr, null);\n            if (hits.length) {\n                target = hits[hits.length - 1];\n            }\n        }\n        if (!target) {\n            return null;\n        }\n        while (target.parentNode && target != svg.parentNode && !target.raphael) {\n            target = target.parentNode;\n        }\n        target == paper.canvas.parentNode && (target = svg);\n        target = target && target.raphael ? paper.getById(target.raphaelid) : null;\n        return target;\n    };\n    \n    paperproto.getById = function (id) {\n        var bot = this.bottom;\n        while (bot) {\n            if (bot.id == id) {\n                return bot;\n            }\n            bot = bot.next;\n        }\n        return null;\n    };\n    \n    paperproto.forEach = function (callback, thisArg) {\n        var bot = this.bottom;\n        while (bot) {\n            if (callback.call(thisArg, bot) === false) {\n                return this;\n            }\n            bot = bot.next;\n        }\n        return this;\n    };\n    \n    paperproto.getElementsByPoint = function (x, y) {\n        var set = this.set();\n        this.forEach(function (el) {\n            if (el.isPointInside(x, y)) {\n                set.push(el);\n            }\n        });\n        return set;\n    };\n    function x_y() {\n        return this.x + S + this.y;\n    }\n    function x_y_w_h() {\n        return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n    }\n    \n    elproto.isPointInside = function (x, y) {\n        var rp = this.realPath = this.realPath || getPath[this.type](this);\n        return R.isPointInsidePath(rp, x, y);\n    };\n    \n    elproto.getBBox = function (isWithoutTransform) {\n        if (this.removed) {\n            return {};\n        }\n        var _ = this._;\n        if (isWithoutTransform) {\n            if (_.dirty || !_.bboxwt) {\n                this.realPath = getPath[this.type](this);\n                _.bboxwt = pathDimensions(this.realPath);\n                _.bboxwt.toString = x_y_w_h;\n                _.dirty = 0;\n            }\n            return _.bboxwt;\n        }\n        if (_.dirty || _.dirtyT || !_.bbox) {\n            if (_.dirty || !this.realPath) {\n                _.bboxwt = 0;\n                this.realPath = getPath[this.type](this);\n            }\n            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));\n            _.bbox.toString = x_y_w_h;\n            _.dirty = _.dirtyT = 0;\n        }\n        return _.bbox;\n    };\n    \n    elproto.clone = function () {\n        if (this.removed) {\n            return null;\n        }\n        var out = this.paper[this.type]().attr(this.attr());\n        this.__set__ && this.__set__.push(out);\n        return out;\n    };\n    \n    elproto.glow = function (glow) {\n        if (this.type == \"text\") {\n            return null;\n        }\n        glow = glow || {};\n        var s = {\n            width: (glow.width || 10) + (+this.attr(\"stroke-width\") || 1),\n            fill: glow.fill || false,\n            opacity: glow.opacity || .5,\n            offsetx: glow.offsetx || 0,\n            offsety: glow.offsety || 0,\n            color: glow.color || \"#000\"\n        },\n            c = s.width / 2,\n            r = this.paper,\n            out = r.set(),\n            path = this.realPath || getPath[this.type](this);\n        path = this.matrix ? mapPath(path, this.matrix) : path;\n        for (var i = 1; i < c + 1; i++) {\n            out.push(r.path(path).attr({\n                stroke: s.color,\n                fill: s.fill ? s.color : \"none\",\n                \"stroke-linejoin\": \"round\",\n                \"stroke-linecap\": \"round\",\n                \"stroke-width\": +(s.width / c * i).toFixed(3),\n                opacity: +(s.opacity / c).toFixed(3)\n            }));\n        }\n        return out.insertBefore(this).translate(s.offsetx, s.offsety);\n    };\n    var curveslengths = {},\n    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n        if (length == null) {\n            return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n        } else {\n            return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n        }\n    },\n    getLengthFactory = function (istotal, subpath) {\n        return function (path, length, onlystart) {\n            path = path2curve(path);\n            var x, y, p, l, sp = \"\", subpaths = {}, point,\n                len = 0;\n            for (var i = 0, ii = path.length; i < ii; i++) {\n                p = path[i];\n                if (p[0] == \"M\") {\n                    x = +p[1];\n                    y = +p[2];\n                } else {\n                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n                    if (len + l > length) {\n                        if (subpath && !subpaths.start) {\n                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n                            sp += [\"C\" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];\n                            if (onlystart) {return sp;}\n                            subpaths.start = sp;\n                            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                            len += l;\n                            x = +p[5];\n                            y = +p[6];\n                            continue;\n                        }\n                        if (!istotal && !subpath) {\n                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n                            return {x: point.x, y: point.y, alpha: point.alpha};\n                        }\n                    }\n                    len += l;\n                    x = +p[5];\n                    y = +p[6];\n                }\n                sp += p.shift() + p;\n            }\n            subpaths.end = sp;\n            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});\n            return point;\n        };\n    };\n    var getTotalLength = getLengthFactory(1),\n        getPointAtLength = getLengthFactory(),\n        getSubpathsAtLength = getLengthFactory(0, 1);\n    \n    R.getTotalLength = getTotalLength;\n    \n    R.getPointAtLength = getPointAtLength;\n    \n    R.getSubpath = function (path, from, to) {\n        if (this.getTotalLength(path) - to < 1e-6) {\n            return getSubpathsAtLength(path, from).end;\n        }\n        var a = getSubpathsAtLength(path, to, 1);\n        return from ? getSubpathsAtLength(a, from).end : a;\n    };\n    \n    elproto.getTotalLength = function () {\n        if (this.type != \"path\") {return;}\n        if (this.node.getTotalLength) {\n            return this.node.getTotalLength();\n        }\n        return getTotalLength(this.attrs.path);\n    };\n    \n    elproto.getPointAtLength = function (length) {\n        if (this.type != \"path\") {return;}\n        return getPointAtLength(this.attrs.path, length);\n    };\n    \n    elproto.getSubpath = function (from, to) {\n        if (this.type != \"path\") {return;}\n        return R.getSubpath(this.attrs.path, from, to);\n    };\n    \n    var ef = R.easing_formulas = {\n        linear: function (n) {\n            return n;\n        },\n        \"<\": function (n) {\n            return pow(n, 1.7);\n        },\n        \">\": function (n) {\n            return pow(n, .48);\n        },\n        \"<>\": function (n) {\n            var q = .48 - n / 1.04,\n                Q = math.sqrt(.1734 + q * q),\n                x = Q - q,\n                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n                y = -Q - q,\n                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n                t = X + Y + .5;\n            return (1 - t) * 3 * t * t + t * t * t;\n        },\n        backIn: function (n) {\n            var s = 1.70158;\n            return n * n * ((s + 1) * n - s);\n        },\n        backOut: function (n) {\n            n = n - 1;\n            var s = 1.70158;\n            return n * n * ((s + 1) * n + s) + 1;\n        },\n        elastic: function (n) {\n            if (n == !!n) {\n                return n;\n            }\n            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;\n        },\n        bounce: function (n) {\n            var s = 7.5625,\n                p = 2.75,\n                l;\n            if (n < (1 / p)) {\n                l = s * n * n;\n            } else {\n                if (n < (2 / p)) {\n                    n -= (1.5 / p);\n                    l = s * n * n + .75;\n                } else {\n                    if (n < (2.5 / p)) {\n                        n -= (2.25 / p);\n                        l = s * n * n + .9375;\n                    } else {\n                        n -= (2.625 / p);\n                        l = s * n * n + .984375;\n                    }\n                }\n            }\n            return l;\n        }\n    };\n    ef.easeIn = ef[\"ease-in\"] = ef[\"<\"];\n    ef.easeOut = ef[\"ease-out\"] = ef[\">\"];\n    ef.easeInOut = ef[\"ease-in-out\"] = ef[\"<>\"];\n    ef[\"back-in\"] = ef.backIn;\n    ef[\"back-out\"] = ef.backOut;\n\n    // BROWSERIFY MOD: use R._g.win here instead of window\n    var animationElements = [],\n        requestAnimFrame = R._g.win.requestAnimationFrame       ||\n                           R._g.win.webkitRequestAnimationFrame ||\n                           R._g.win.mozRequestAnimationFrame    ||\n                           R._g.win.oRequestAnimationFrame      ||\n                           R._g.win.msRequestAnimationFrame     ||\n                           function (callback) {\n                               setTimeout(callback, 16);\n                           },\n        animation = function () {\n            var Now = +new Date,\n                l = 0;\n            for (; l < animationElements.length; l++) {\n                var e = animationElements[l];\n                if (e.el.removed || e.paused) {\n                    continue;\n                }\n                var time = Now - e.start,\n                    ms = e.ms,\n                    easing = e.easing,\n                    from = e.from,\n                    diff = e.diff,\n                    to = e.to,\n                    t = e.t,\n                    that = e.el,\n                    set = {},\n                    now,\n                    init = {},\n                    key;\n                if (e.initstatus) {\n                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;\n                    e.status = e.initstatus;\n                    delete e.initstatus;\n                    e.stop && animationElements.splice(l--, 1);\n                } else {\n                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;\n                }\n                if (time < 0) {\n                    continue;\n                }\n                if (time < ms) {\n                    var pos = easing(time / ms);\n                    for (var attr in from) if (from[has](attr)) {\n                        switch (availableAnimAttrs[attr]) {\n                            case nu:\n                                now = +from[attr] + pos * ms * diff[attr];\n                                break;\n                            case \"colour\":\n                                now = \"rgb(\" + [\n                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),\n                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),\n                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))\n                                ].join(\",\") + \")\";\n                                break;\n                            case \"path\":\n                                now = [];\n                                for (var i = 0, ii = from[attr].length; i < ii; i++) {\n                                    now[i] = [from[attr][i][0]];\n                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];\n                                    }\n                                    now[i] = now[i].join(S);\n                                }\n                                now = now.join(S);\n                                break;\n                            case \"transform\":\n                                if (diff[attr].real) {\n                                    now = [];\n                                    for (i = 0, ii = from[attr].length; i < ii; i++) {\n                                        now[i] = [from[attr][i][0]];\n                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];\n                                        }\n                                    }\n                                } else {\n                                    var get = function (i) {\n                                        return +from[attr][i] + pos * ms * diff[attr][i];\n                                    };\n                                    // now = [[\"r\", get(2), 0, 0], [\"t\", get(3), get(4)], [\"s\", get(0), get(1), 0, 0]];\n                                    now = [[\"m\", get(0), get(1), get(2), get(3), get(4), get(5)]];\n                                }\n                                break;\n                            case \"csv\":\n                                if (attr == \"clip-rect\") {\n                                    now = [];\n                                    i = 4;\n                                    while (i--) {\n                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];\n                                    }\n                                }\n                                break;\n                            default:\n                                var from2 = [][concat](from[attr]);\n                                now = [];\n                                i = that.paper.customAttributes[attr].length;\n                                while (i--) {\n                                    now[i] = +from2[i] + pos * ms * diff[attr][i];\n                                }\n                                break;\n                        }\n                        set[attr] = now;\n                    }\n                    that.attr(set);\n                    (function (id, that, anim) {\n                        setTimeout(function () {\n                            eve(\"raphael.anim.frame.\" + id, that, anim);\n                        });\n                    })(that.id, that, e.anim);\n                } else {\n                    (function(f, el, a) {\n                        setTimeout(function() {\n                            eve(\"raphael.anim.frame.\" + el.id, el, a);\n                            eve(\"raphael.anim.finish.\" + el.id, el, a);\n                            R.is(f, \"function\") && f.call(el);\n                        });\n                    })(e.callback, that, e.anim);\n                    that.attr(to);\n                    animationElements.splice(l--, 1);\n                    if (e.repeat > 1 && !e.next) {\n                        for (key in to) if (to[has](key)) {\n                            init[key] = e.totalOrigin[key];\n                        }\n                        e.el.attr(init);\n                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);\n                    }\n                    if (e.next && !e.stop) {\n                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);\n                    }\n                }\n            }\n            R.svg && that && that.paper && that.paper.safari();\n            animationElements.length && requestAnimFrame(animation);\n        },\n        upto255 = function (color) {\n            return color > 255 ? 255 : color < 0 ? 0 : color;\n        };\n    \n    elproto.animateWith = function (el, anim, params, ms, easing, callback) {\n        var element = this;\n        if (element.removed) {\n            callback && callback.call(element);\n            return element;\n        }\n        var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback),\n            x, y;\n        runAnimation(a, element, a.percents[0], null, element.attr());\n        for (var i = 0, ii = animationElements.length; i < ii; i++) {\n            if (animationElements[i].anim == anim && animationElements[i].el == el) {\n                animationElements[ii - 1].start = animationElements[i].start;\n                break;\n            }\n        }\n        return element;\n        // \n        // \n        // var a = params ? R.animation(params, ms, easing, callback) : anim,\n        //     status = element.status(anim);\n        // return this.animate(a).status(a, status * anim.ms / a.ms);\n    };\n    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n        var cx = 3 * p1x,\n            bx = 3 * (p2x - p1x) - cx,\n            ax = 1 - cx - bx,\n            cy = 3 * p1y,\n            by = 3 * (p2y - p1y) - cy,\n            ay = 1 - cy - by;\n        function sampleCurveX(t) {\n            return ((ax * t + bx) * t + cx) * t;\n        }\n        function solve(x, epsilon) {\n            var t = solveCurveX(x, epsilon);\n            return ((ay * t + by) * t + cy) * t;\n        }\n        function solveCurveX(x, epsilon) {\n            var t0, t1, t2, x2, d2, i;\n            for(t2 = x, i = 0; i < 8; i++) {\n                x2 = sampleCurveX(t2) - x;\n                if (abs(x2) < epsilon) {\n                    return t2;\n                }\n                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;\n                if (abs(d2) < 1e-6) {\n                    break;\n                }\n                t2 = t2 - x2 / d2;\n            }\n            t0 = 0;\n            t1 = 1;\n            t2 = x;\n            if (t2 < t0) {\n                return t0;\n            }\n            if (t2 > t1) {\n                return t1;\n            }\n            while (t0 < t1) {\n                x2 = sampleCurveX(t2);\n                if (abs(x2 - x) < epsilon) {\n                    return t2;\n                }\n                if (x > x2) {\n                    t0 = t2;\n                } else {\n                    t1 = t2;\n                }\n                t2 = (t1 - t0) / 2 + t0;\n            }\n            return t2;\n        }\n        return solve(t, 1 / (200 * duration));\n    }\n    elproto.onAnimation = function (f) {\n        f ? eve.on(\"raphael.anim.frame.\" + this.id, f) : eve.unbind(\"raphael.anim.frame.\" + this.id);\n        return this;\n    };\n    function Animation(anim, ms) {\n        var percents = [],\n            newAnim = {};\n        this.ms = ms;\n        this.times = 1;\n        if (anim) {\n            for (var attr in anim) if (anim[has](attr)) {\n                newAnim[toFloat(attr)] = anim[attr];\n                percents.push(toFloat(attr));\n            }\n            percents.sort(sortByNumber);\n        }\n        this.anim = newAnim;\n        this.top = percents[percents.length - 1];\n        this.percents = percents;\n    }\n    \n    Animation.prototype.delay = function (delay) {\n        var a = new Animation(this.anim, this.ms);\n        a.times = this.times;\n        a.del = +delay || 0;\n        return a;\n    };\n    \n    Animation.prototype.repeat = function (times) { \n        var a = new Animation(this.anim, this.ms);\n        a.del = this.del;\n        a.times = math.floor(mmax(times, 0)) || 1;\n        return a;\n    };\n    function runAnimation(anim, element, percent, status, totalOrigin, times) {\n        percent = toFloat(percent);\n        var params,\n            isInAnim,\n            isInAnimSet,\n            percents = [],\n            next,\n            prev,\n            timestamp,\n            ms = anim.ms,\n            from = {},\n            to = {},\n            diff = {};\n        if (status) {\n            for (i = 0, ii = animationElements.length; i < ii; i++) {\n                var e = animationElements[i];\n                if (e.el.id == element.id && e.anim == anim) {\n                    if (e.percent != percent) {\n                        animationElements.splice(i, 1);\n                        isInAnimSet = 1;\n                    } else {\n                        isInAnim = e;\n                    }\n                    element.attr(e.totalOrigin);\n                    break;\n                }\n            }\n        } else {\n            status = +to; // NaN\n        }\n        for (var i = 0, ii = anim.percents.length; i < ii; i++) {\n            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {\n                percent = anim.percents[i];\n                prev = anim.percents[i - 1] || 0;\n                ms = ms / anim.top * (percent - prev);\n                next = anim.percents[i + 1];\n                params = anim.anim[percent];\n                break;\n            } else if (status) {\n                element.attr(anim.anim[anim.percents[i]]);\n            }\n        }\n        if (!params) {\n            return;\n        }\n        if (!isInAnim) {\n            for (var attr in params) if (params[has](attr)) {\n                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {\n                    from[attr] = element.attr(attr);\n                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);\n                    to[attr] = params[attr];\n                    switch (availableAnimAttrs[attr]) {\n                        case nu:\n                            diff[attr] = (to[attr] - from[attr]) / ms;\n                            break;\n                        case \"colour\":\n                            from[attr] = R.getRGB(from[attr]);\n                            var toColour = R.getRGB(to[attr]);\n                            diff[attr] = {\n                                r: (toColour.r - from[attr].r) / ms,\n                                g: (toColour.g - from[attr].g) / ms,\n                                b: (toColour.b - from[attr].b) / ms\n                            };\n                            break;\n                        case \"path\":\n                            var pathes = path2curve(from[attr], to[attr]),\n                                toPath = pathes[1];\n                            from[attr] = pathes[0];\n                            diff[attr] = [];\n                            for (i = 0, ii = from[attr].length; i < ii; i++) {\n                                diff[attr][i] = [0];\n                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;\n                                }\n                            }\n                            break;\n                        case \"transform\":\n                            var _ = element._,\n                                eq = equaliseTransform(_[attr], to[attr]);\n                            if (eq) {\n                                from[attr] = eq.from;\n                                to[attr] = eq.to;\n                                diff[attr] = [];\n                                diff[attr].real = true;\n                                for (i = 0, ii = from[attr].length; i < ii; i++) {\n                                    diff[attr][i] = [from[attr][i][0]];\n                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;\n                                    }\n                                }\n                            } else {\n                                var m = (element.matrix || new Matrix),\n                                    to2 = {\n                                        _: {transform: _.transform},\n                                        getBBox: function () {\n                                            return element.getBBox(1);\n                                        }\n                                    };\n                                from[attr] = [\n                                    m.a,\n                                    m.b,\n                                    m.c,\n                                    m.d,\n                                    m.e,\n                                    m.f\n                                ];\n                                extractTransform(to2, to[attr]);\n                                to[attr] = to2._.transform;\n                                diff[attr] = [\n                                    (to2.matrix.a - m.a) / ms,\n                                    (to2.matrix.b - m.b) / ms,\n                                    (to2.matrix.c - m.c) / ms,\n                                    (to2.matrix.d - m.d) / ms,\n                                    (to2.matrix.e - m.e) / ms,\n                                    (to2.matrix.f - m.f) / ms\n                                ];\n                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];\n                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};\n                                // extractTransform(to2, to[attr]);\n                                // diff[attr] = [\n                                //     (to2._.sx - _.sx) / ms,\n                                //     (to2._.sy - _.sy) / ms,\n                                //     (to2._.deg - _.deg) / ms,\n                                //     (to2._.dx - _.dx) / ms,\n                                //     (to2._.dy - _.dy) / ms\n                                // ];\n                            }\n                            break;\n                        case \"csv\":\n                            var values = Str(params[attr])[split](separator),\n                                from2 = Str(from[attr])[split](separator);\n                            if (attr == \"clip-rect\") {\n                                from[attr] = from2;\n                                diff[attr] = [];\n                                i = from2.length;\n                                while (i--) {\n                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;\n                                }\n                            }\n                            to[attr] = values;\n                            break;\n                        default:\n                            values = [][concat](params[attr]);\n                            from2 = [][concat](from[attr]);\n                            diff[attr] = [];\n                            i = element.paper.customAttributes[attr].length;\n                            while (i--) {\n                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;\n                            }\n                            break;\n                    }\n                }\n            }\n            var easing = params.easing,\n                easyeasy = R.easing_formulas[easing];\n            if (!easyeasy) {\n                easyeasy = Str(easing).match(bezierrg);\n                if (easyeasy && easyeasy.length == 5) {\n                    var curve = easyeasy;\n                    easyeasy = function (t) {\n                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);\n                    };\n                } else {\n                    easyeasy = pipe;\n                }\n            }\n            timestamp = params.start || anim.start || +new Date;\n            e = {\n                anim: anim,\n                percent: percent,\n                timestamp: timestamp,\n                start: timestamp + (anim.del || 0),\n                status: 0,\n                initstatus: status || 0,\n                stop: false,\n                ms: ms,\n                easing: easyeasy,\n                from: from,\n                diff: diff,\n                to: to,\n                el: element,\n                callback: params.callback,\n                prev: prev,\n                next: next,\n                repeat: times || anim.times,\n                origin: element.attr(),\n                totalOrigin: totalOrigin\n            };\n            animationElements.push(e);\n            if (status && !isInAnim && !isInAnimSet) {\n                e.stop = true;\n                e.start = new Date - ms * status;\n                if (animationElements.length == 1) {\n                    return animation();\n                }\n            }\n            if (isInAnimSet) {\n                e.start = new Date - e.ms * status;\n            }\n            animationElements.length == 1 && requestAnimFrame(animation);\n        } else {\n            isInAnim.initstatus = status;\n            isInAnim.start = new Date - isInAnim.ms * status;\n        }\n        eve(\"raphael.anim.start.\" + element.id, element, anim);\n    }\n    \n    R.animation = function (params, ms, easing, callback) {\n        if (params instanceof Animation) {\n            return params;\n        }\n        if (R.is(easing, \"function\") || !easing) {\n            callback = callback || easing || null;\n            easing = null;\n        }\n        params = Object(params);\n        ms = +ms || 0;\n        var p = {},\n            json,\n            attr;\n        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + \"%\" != attr) {\n            json = true;\n            p[attr] = params[attr];\n        }\n        if (!json) {\n            return new Animation(params, ms);\n        } else {\n            easing && (p.easing = easing);\n            callback && (p.callback = callback);\n            return new Animation({100: p}, ms);\n        }\n    };\n    \n    elproto.animate = function (params, ms, easing, callback) {\n        var element = this;\n        if (element.removed) {\n            callback && callback.call(element);\n            return element;\n        }\n        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);\n        runAnimation(anim, element, anim.percents[0], null, element.attr());\n        return element;\n    };\n    \n    elproto.setTime = function (anim, value) {\n        if (anim && value != null) {\n            this.status(anim, mmin(value, anim.ms) / anim.ms);\n        }\n        return this;\n    };\n    \n    elproto.status = function (anim, value) {\n        var out = [],\n            i = 0,\n            len,\n            e;\n        if (value != null) {\n            runAnimation(anim, this, -1, mmin(value, 1));\n            return this;\n        } else {\n            len = animationElements.length;\n            for (; i < len; i++) {\n                e = animationElements[i];\n                if (e.el.id == this.id && (!anim || e.anim == anim)) {\n                    if (anim) {\n                        return e.status;\n                    }\n                    out.push({\n                        anim: e.anim,\n                        status: e.status\n                    });\n                }\n            }\n            if (anim) {\n                return 0;\n            }\n            return out;\n        }\n    };\n    \n    elproto.pause = function (anim) {\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n            if (eve(\"raphael.anim.pause.\" + this.id, this, animationElements[i].anim) !== false) {\n                animationElements[i].paused = true;\n            }\n        }\n        return this;\n    };\n    \n    elproto.resume = function (anim) {\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n            var e = animationElements[i];\n            if (eve(\"raphael.anim.resume.\" + this.id, this, e.anim) !== false) {\n                delete e.paused;\n                this.status(e.anim, e.status);\n            }\n        }\n        return this;\n    };\n    \n    elproto.stop = function (anim) {\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n            if (eve(\"raphael.anim.stop.\" + this.id, this, animationElements[i].anim) !== false) {\n                animationElements.splice(i--, 1);\n            }\n        }\n        return this;\n    };\n    function stopAnimation(paper) {\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) {\n            animationElements.splice(i--, 1);\n        }\n    }\n    eve.on(\"raphael.remove\", stopAnimation);\n    eve.on(\"raphael.clear\", stopAnimation);\n    elproto.toString = function () {\n        return \"Rapha\\xebl\\u2019s object\";\n    };\n\n    // Set\n    var Set = function (items) {\n        this.items = [];\n        this.length = 0;\n        this.type = \"set\";\n        if (items) {\n            for (var i = 0, ii = items.length; i < ii; i++) {\n                if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {\n                    this[this.items.length] = this.items[this.items.length] = items[i];\n                    this.length++;\n                }\n            }\n        }\n    },\n    setproto = Set.prototype;\n    \n    setproto.push = function () {\n        var item,\n            len;\n        for (var i = 0, ii = arguments.length; i < ii; i++) {\n            item = arguments[i];\n            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {\n                len = this.items.length;\n                this[len] = this.items[len] = item;\n                this.length++;\n            }\n        }\n        return this;\n    };\n    \n    setproto.pop = function () {\n        this.length && delete this[this.length--];\n        return this.items.pop();\n    };\n    \n    setproto.forEach = function (callback, thisArg) {\n        for (var i = 0, ii = this.items.length; i < ii; i++) {\n            if (callback.call(thisArg, this.items[i], i) === false) {\n                return this;\n            }\n        }\n        return this;\n    };\n    for (var method in elproto) if (elproto[has](method)) {\n        setproto[method] = (function (methodname) {\n            return function () {\n                var arg = arguments;\n                return this.forEach(function (el) {\n                    el[methodname][apply](el, arg);\n                });\n            };\n        })(method);\n    }\n    setproto.attr = function (name, value) {\n        if (name && R.is(name, array) && R.is(name[0], \"object\")) {\n            for (var j = 0, jj = name.length; j < jj; j++) {\n                this.items[j].attr(name[j]);\n            }\n        } else {\n            for (var i = 0, ii = this.items.length; i < ii; i++) {\n                this.items[i].attr(name, value);\n            }\n        }\n        return this;\n    };\n    \n    setproto.clear = function () {\n        while (this.length) {\n            this.pop();\n        }\n    };\n    \n    setproto.splice = function (index, count, insertion) {\n        index = index < 0 ? mmax(this.length + index, 0) : index;\n        count = mmax(0, mmin(this.length - index, count));\n        var tail = [],\n            todel = [],\n            args = [],\n            i;\n        for (i = 2; i < arguments.length; i++) {\n            args.push(arguments[i]);\n        }\n        for (i = 0; i < count; i++) {\n            todel.push(this[index + i]);\n        }\n        for (; i < this.length - index; i++) {\n            tail.push(this[index + i]);\n        }\n        var arglen = args.length;\n        for (i = 0; i < arglen + tail.length; i++) {\n            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n        }\n        i = this.items.length = this.length -= count - arglen;\n        while (this[i]) {\n            delete this[i++];\n        }\n        return new Set(todel);\n    };\n    \n    setproto.exclude = function (el) {\n        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n            this.splice(i, 1);\n            return true;\n        }\n    };\n    setproto.animate = function (params, ms, easing, callback) {\n        (R.is(easing, \"function\") || !easing) && (callback = easing || null);\n        var len = this.items.length,\n            i = len,\n            item,\n            set = this,\n            collector;\n        if (!len) {\n            return this;\n        }\n        callback && (collector = function () {\n            !--len && callback.call(set);\n        });\n        easing = R.is(easing, string) ? easing : collector;\n        var anim = R.animation(params, ms, easing, collector);\n        item = this.items[--i].animate(anim);\n        while (i--) {\n            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim);\n        }\n        return this;\n    };\n    setproto.insertAfter = function (el) {\n        var i = this.items.length;\n        while (i--) {\n            this.items[i].insertAfter(el);\n        }\n        return this;\n    };\n    setproto.getBBox = function () {\n        var x = [],\n            y = [],\n            x2 = [],\n            y2 = [];\n        for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n            var box = this.items[i].getBBox();\n            x.push(box.x);\n            y.push(box.y);\n            x2.push(box.x + box.width);\n            y2.push(box.y + box.height);\n        }\n        x = mmin[apply](0, x);\n        y = mmin[apply](0, y);\n        x2 = mmax[apply](0, x2);\n        y2 = mmax[apply](0, y2);\n        return {\n            x: x,\n            y: y,\n            x2: x2,\n            y2: y2,\n            width: x2 - x,\n            height: y2 - y\n        };\n    };\n    setproto.clone = function (s) {\n        s = new Set;\n        for (var i = 0, ii = this.items.length; i < ii; i++) {\n            s.push(this.items[i].clone());\n        }\n        return s;\n    };\n    setproto.toString = function () {\n        return \"Rapha\\xebl\\u2018s set\";\n    };\n\n    \n    R.registerFont = function (font) {\n        if (!font.face) {\n            return font;\n        }\n        this.fonts = this.fonts || {};\n        var fontcopy = {\n                w: font.w,\n                face: {},\n                glyphs: {}\n            },\n            family = font.face[\"font-family\"];\n        for (var prop in font.face) if (font.face[has](prop)) {\n            fontcopy.face[prop] = font.face[prop];\n        }\n        if (this.fonts[family]) {\n            this.fonts[family].push(fontcopy);\n        } else {\n            this.fonts[family] = [fontcopy];\n        }\n        if (!font.svg) {\n            fontcopy.face[\"units-per-em\"] = toInt(font.face[\"units-per-em\"], 10);\n            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {\n                var path = font.glyphs[glyph];\n                fontcopy.glyphs[glyph] = {\n                    w: path.w,\n                    k: {},\n                    d: path.d && \"M\" + path.d.replace(/[mlcxtrv]/g, function (command) {\n                            return {l: \"L\", c: \"C\", x: \"z\", t: \"m\", r: \"l\", v: \"c\"}[command] || \"M\";\n                        }) + \"z\"\n                };\n                if (path.k) {\n                    for (var k in path.k) if (path[has](k)) {\n                        fontcopy.glyphs[glyph].k[k] = path.k[k];\n                    }\n                }\n            }\n        }\n        return font;\n    };\n    \n    paperproto.getFont = function (family, weight, style, stretch) {\n        stretch = stretch || \"normal\";\n        style = style || \"normal\";\n        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;\n        if (!R.fonts) {\n            return;\n        }\n        var font = R.fonts[family];\n        if (!font) {\n            var name = new RegExp(\"(^|\\\\s)\" + family.replace(/[^\\w\\d\\s+!~.:_-]/g, E) + \"(\\\\s|$)\", \"i\");\n            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {\n                if (name.test(fontName)) {\n                    font = R.fonts[fontName];\n                    break;\n                }\n            }\n        }\n        var thefont;\n        if (font) {\n            for (var i = 0, ii = font.length; i < ii; i++) {\n                thefont = font[i];\n                if (thefont.face[\"font-weight\"] == weight && (thefont.face[\"font-style\"] == style || !thefont.face[\"font-style\"]) && thefont.face[\"font-stretch\"] == stretch) {\n                    break;\n                }\n            }\n        }\n        return thefont;\n    };\n    \n    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {\n        origin = origin || \"middle\"; // baseline|middle\n        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);\n        var letters = Str(string)[split](E),\n            shift = 0,\n            notfirst = 0,\n            path = E,\n            scale;\n        R.is(font, string) && (font = this.getFont(font));\n        if (font) {\n            scale = (size || 16) / font.face[\"units-per-em\"];\n            var bb = font.face.bbox[split](separator),\n                top = +bb[0],\n                lineHeight = bb[3] - bb[1],\n                shifty = 0,\n                height = +bb[1] + (origin == \"baseline\" ? lineHeight + (+font.face.descent) : lineHeight / 2);\n            for (var i = 0, ii = letters.length; i < ii; i++) {\n                if (letters[i] == \"\\n\") {\n                    shift = 0;\n                    curr = 0;\n                    notfirst = 0;\n                    shifty += lineHeight;\n                } else {\n                    var prev = notfirst && font.glyphs[letters[i - 1]] || {},\n                        curr = font.glyphs[letters[i]];\n                    shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;\n                    notfirst = 1;\n                }\n                if (curr && curr.d) {\n                    path += R.transformPath(curr.d, [\"t\", shift * scale, shifty * scale, \"s\", scale, scale, top, height, \"t\", (x - top) / scale, (y - height) / scale]);\n                }\n            }\n        }\n        return this.path(path).attr({\n            fill: \"#000\",\n            stroke: \"none\"\n        });\n    };\n\n    \n    paperproto.add = function (json) {\n        if (R.is(json, \"array\")) {\n            var res = this.set(),\n                i = 0,\n                ii = json.length,\n                j;\n            for (; i < ii; i++) {\n                j = json[i] || {};\n                elements[has](j.type) && res.push(this[j.type]().attr(j));\n            }\n        }\n        return res;\n    };\n\n    \n    R.format = function (token, params) {\n        var args = R.is(params, array) ? [0][concat](params) : arguments;\n        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {\n            return args[++i] == null ? E : args[i];\n        }));\n        return token || E;\n    };\n    \n    R.fullfill = (function () {\n        var tokenRegex = /\\{([^\\}]+)\\}/g,\n            objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n            replacer = function (all, key, obj) {\n                var res = obj;\n                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n                    name = name || quotedName;\n                    if (res) {\n                        if (name in res) {\n                            res = res[name];\n                        }\n                        typeof res == \"function\" && isFunc && (res = res());\n                    }\n                });\n                res = (res == null || res == obj ? all : res) + \"\";\n                return res;\n            };\n        return function (str, obj) {\n            return String(str).replace(tokenRegex, function (all, key) {\n                return replacer(all, key, obj);\n            });\n        };\n    })();\n    \n    R.ninja = function () {\n        oldRaphael.was ? (g.win.Raphael = oldRaphael.is) : delete Raphael;\n        return R;\n    };\n    \n    R.st = setproto;\n    // BROWSERIFY MOD: use R._g.doc instead of document\n    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n    (function (doc, loaded, f) {\n        if (doc.readyState == null && doc.addEventListener){\n            doc.addEventListener(loaded, f = function () {\n                doc.removeEventListener(loaded, f, false);\n                doc.readyState = \"complete\";\n            }, false);\n            doc.readyState = \"loading\";\n        }\n        function isLoaded() {\n            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve(\"raphael.DOMload\");\n        }\n        isLoaded();\n    })(R._g.doc, \"DOMContentLoaded\");\n\n    // BROWSERIFY MOD: always set file-scope Raphael = R\n    // oldRaphael.was ? (g.win.Raphael = R) : (Raphael = R);\n    // if (oldRaphael.was) g.win.Raphael = R;\n    Raphael = R;\n    \n    eve.on(\"raphael.DOMload\", function () {\n        loaded = true;\n    });\n})();\n\n// console.log(Raphael);\n\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël - JavaScript Vector Library                                 │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ SVG Module                                                          │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\n// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\n// BROWSERIFY MOD: use Raphael instead of window.raphael\nRaphael.svg && function (R) {\n    var has = \"hasOwnProperty\",\n        Str = String,\n        toFloat = parseFloat,\n        toInt = parseInt,\n        math = Math,\n        mmax = math.max,\n        abs = math.abs,\n        pow = math.pow,\n        separator = /[, ]+/,\n        eve = R.eve,\n        E = \"\",\n        S = \" \";\n    var xlink = \"http://www.w3.org/1999/xlink\",\n        markers = {\n            block: \"M5,0 0,2.5 5,5z\",\n            classic: \"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",\n            diamond: \"M2.5,0 5,2.5 2.5,5 0,2.5z\",\n            open: \"M6,1 1,3.5 6,6\",\n            oval: \"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"\n        },\n        markerCounter = {};\n    R.toString = function () {\n        return  \"Your browser supports SVG.\\nYou are running Rapha\\xebl \" + this.version;\n    };\n    var $ = function (el, attr) {\n        if (attr) {\n            if (typeof el == \"string\") {\n                el = $(el);\n            }\n            for (var key in attr) if (attr[has](key)) {\n                if (key.substring(0, 6) == \"xlink:\") {\n                    el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));\n                } else {\n                    el.setAttribute(key, Str(attr[key]));\n                }\n            }\n        } else {\n            el = R._g.doc.createElementNS(\"http://www.w3.org/2000/svg\", el);\n            el.style && (el.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\");\n        }\n        return el;\n    },\n    addGradientFill = function (element, gradient) {\n        var type = \"linear\",\n            id = element.id + gradient,\n            fx = .5, fy = .5,\n            o = element.node,\n            SVG = element.paper,\n            s = o.style,\n            el = R._g.doc.getElementById(id);\n        if (!el) {\n            gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {\n                type = \"radial\";\n                if (_fx && _fy) {\n                    fx = toFloat(_fx);\n                    fy = toFloat(_fy);\n                    var dir = ((fy > .5) * 2 - 1);\n                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&\n                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&\n                        fy != .5 &&\n                        (fy = fy.toFixed(5) - 1e-5 * dir);\n                }\n                return E;\n            });\n            gradient = gradient.split(/\\s*\\-\\s*/);\n            if (type == \"linear\") {\n                var angle = gradient.shift();\n                angle = -toFloat(angle);\n                if (isNaN(angle)) {\n                    return null;\n                }\n                var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],\n                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);\n                vector[2] *= max;\n                vector[3] *= max;\n                if (vector[2] < 0) {\n                    vector[0] = -vector[2];\n                    vector[2] = 0;\n                }\n                if (vector[3] < 0) {\n                    vector[1] = -vector[3];\n                    vector[3] = 0;\n                }\n            }\n            var dots = R._parseDots(gradient);\n            if (!dots) {\n                return null;\n            }\n            id = id.replace(/[\\(\\)\\s,\\xb0#]/g, \"_\");\n            \n            if (element.gradient && id != element.gradient.id) {\n                SVG.defs.removeChild(element.gradient);\n                delete element.gradient;\n            }\n\n            if (!element.gradient) {\n                el = $(type + \"Gradient\", {id: id});\n                element.gradient = el;\n                $(el, type == \"radial\" ? {\n                    fx: fx,\n                    fy: fy\n                } : {\n                    x1: vector[0],\n                    y1: vector[1],\n                    x2: vector[2],\n                    y2: vector[3],\n                    gradientTransform: element.matrix.invert()\n                });\n                SVG.defs.appendChild(el);\n                for (var i = 0, ii = dots.length; i < ii; i++) {\n                    el.appendChild($(\"stop\", {\n                        offset: dots[i].offset ? dots[i].offset : i ? \"100%\" : \"0%\",\n                        \"stop-color\": dots[i].color || \"#fff\"\n                    }));\n                }\n            }\n        }\n        $(o, {\n            fill: \"url(#\" + id + \")\",\n            opacity: 1,\n            \"fill-opacity\": 1\n        });\n        s.fill = E;\n        s.opacity = 1;\n        s.fillOpacity = 1;\n        return 1;\n    },\n    updatePosition = function (o) {\n        var bbox = o.getBBox(1);\n        $(o.pattern, {patternTransform: o.matrix.invert() + \" translate(\" + bbox.x + \",\" + bbox.y + \")\"});\n    },\n    addArrow = function (o, value, isEnd) {\n        if (o.type == \"path\") {\n            var values = Str(value).toLowerCase().split(\"-\"),\n                p = o.paper,\n                se = isEnd ? \"end\" : \"start\",\n                node = o.node,\n                attrs = o.attrs,\n                stroke = attrs[\"stroke-width\"],\n                i = values.length,\n                type = \"classic\",\n                from,\n                to,\n                dx,\n                refX,\n                attr,\n                w = 3,\n                h = 3,\n                t = 5;\n            while (i--) {\n                switch (values[i]) {\n                    case \"block\":\n                    case \"classic\":\n                    case \"oval\":\n                    case \"diamond\":\n                    case \"open\":\n                    case \"none\":\n                        type = values[i];\n                        break;\n                    case \"wide\": h = 5; break;\n                    case \"narrow\": h = 2; break;\n                    case \"long\": w = 5; break;\n                    case \"short\": w = 2; break;\n                }\n            }\n            if (type == \"open\") {\n                w += 2;\n                h += 2;\n                t += 2;\n                dx = 1;\n                refX = isEnd ? 4 : 1;\n                attr = {\n                    fill: \"none\",\n                    stroke: attrs.stroke\n                };\n            } else {\n                refX = dx = w / 2;\n                attr = {\n                    fill: attrs.stroke,\n                    stroke: \"none\"\n                };\n            }\n            if (o._.arrows) {\n                if (isEnd) {\n                    o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;\n                    o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;\n                } else {\n                    o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;\n                    o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;\n                }\n            } else {\n                o._.arrows = {};\n            }\n            if (type != \"none\") {\n                var pathId = \"raphael-marker-\" + type,\n                    markerId = \"raphael-marker-\" + se + type + w + h;\n                if (!R._g.doc.getElementById(pathId)) {\n                    p.defs.appendChild($($(\"path\"), {\n                        \"stroke-linecap\": \"round\",\n                        d: markers[type],\n                        id: pathId\n                    }));\n                    markerCounter[pathId] = 1;\n                } else {\n                    markerCounter[pathId]++;\n                }\n                var marker = R._g.doc.getElementById(markerId),\n                    use;\n                if (!marker) {\n                    marker = $($(\"marker\"), {\n                        id: markerId,\n                        markerHeight: h,\n                        markerWidth: w,\n                        orient: \"auto\",\n                        refX: refX,\n                        refY: h / 2\n                    });\n                    use = $($(\"use\"), {\n                        \"xlink:href\": \"#\" + pathId,\n                        transform: (isEnd ? \"rotate(180 \" + w / 2 + \" \" + h / 2 + \") \" : E) + \"scale(\" + w / t + \",\" + h / t + \")\",\n                        \"stroke-width\": (1 / ((w / t + h / t) / 2)).toFixed(4)\n                    });\n                    marker.appendChild(use);\n                    p.defs.appendChild(marker);\n                    markerCounter[markerId] = 1;\n                } else {\n                    markerCounter[markerId]++;\n                    use = marker.getElementsByTagName(\"use\")[0];\n                }\n                $(use, attr);\n                var delta = dx * (type != \"diamond\" && type != \"oval\");\n                if (isEnd) {\n                    from = o._.arrows.startdx * stroke || 0;\n                    to = R.getTotalLength(attrs.path) - delta * stroke;\n                } else {\n                    from = delta * stroke;\n                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n                }\n                attr = {};\n                attr[\"marker-\" + se] = \"url(#\" + markerId + \")\";\n                if (to || from) {\n                    attr.d = Raphael.getSubpath(attrs.path, from, to);\n                }\n                $(node, attr);\n                o._.arrows[se + \"Path\"] = pathId;\n                o._.arrows[se + \"Marker\"] = markerId;\n                o._.arrows[se + \"dx\"] = delta;\n                o._.arrows[se + \"Type\"] = type;\n                o._.arrows[se + \"String\"] = value;\n            } else {\n                if (isEnd) {\n                    from = o._.arrows.startdx * stroke || 0;\n                    to = R.getTotalLength(attrs.path) - from;\n                } else {\n                    from = 0;\n                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n                }\n                o._.arrows[se + \"Path\"] && $(node, {d: Raphael.getSubpath(attrs.path, from, to)});\n                delete o._.arrows[se + \"Path\"];\n                delete o._.arrows[se + \"Marker\"];\n                delete o._.arrows[se + \"dx\"];\n                delete o._.arrows[se + \"Type\"];\n                delete o._.arrows[se + \"String\"];\n            }\n            for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {\n                var item = R._g.doc.getElementById(attr);\n                item && item.parentNode.removeChild(item);\n            }\n        }\n    },\n    dasharray = {\n        \"\": [0],\n        \"none\": [0],\n        \"-\": [3, 1],\n        \".\": [1, 1],\n        \"-.\": [3, 1, 1, 1],\n        \"-..\": [3, 1, 1, 1, 1, 1],\n        \". \": [1, 3],\n        \"- \": [4, 3],\n        \"--\": [8, 3],\n        \"- .\": [4, 3, 1, 3],\n        \"--.\": [8, 3, 1, 3],\n        \"--..\": [8, 3, 1, 3, 1, 3]\n    },\n    addDashes = function (o, value, params) {\n        value = dasharray[Str(value).toLowerCase()];\n        if (value) {\n            var width = o.attrs[\"stroke-width\"] || \"1\",\n                butt = {round: width, square: width, butt: 0}[o.attrs[\"stroke-linecap\"] || params[\"stroke-linecap\"]] || 0,\n                dashes = [],\n                i = value.length;\n            while (i--) {\n                dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;\n            }\n            $(o.node, {\"stroke-dasharray\": dashes.join(\",\")});\n        }\n    },\n    setFillAndStroke = function (o, params) {\n        var node = o.node,\n            attrs = o.attrs,\n            vis = node.style.visibility;\n        node.style.visibility = \"hidden\";\n        for (var att in params) {\n            if (params[has](att)) {\n                if (!R._availableAttrs[has](att)) {\n                    continue;\n                }\n                var value = params[att];\n                attrs[att] = value;\n                switch (att) {\n                    case \"blur\":\n                        o.blur(value);\n                        break;\n                    case \"href\":\n                    case \"title\":\n                    case \"target\":\n                        var pn = node.parentNode;\n                        if (pn.tagName.toLowerCase() != \"a\") {\n                            var hl = $(\"a\");\n                            pn.insertBefore(hl, node);\n                            hl.appendChild(node);\n                            pn = hl;\n                        }\n                        if (att == \"target\") {\n                            pn.setAttributeNS(xlink, \"show\", value == \"blank\" ? \"new\" : value);\n                        } else {\n                            pn.setAttributeNS(xlink, att, value);\n                        }\n                        break;\n                    case \"cursor\":\n                        node.style.cursor = value;\n                        break;\n                    case \"transform\":\n                        o.transform(value);\n                        break;\n                    case \"arrow-start\":\n                        addArrow(o, value);\n                        break;\n                    case \"arrow-end\":\n                        addArrow(o, value, 1);\n                        break;\n                    case \"clip-rect\":\n                        var rect = Str(value).split(separator);\n                        if (rect.length == 4) {\n                            o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);\n                            var el = $(\"clipPath\"),\n                                rc = $(\"rect\");\n                            el.id = R.createUUID();\n                            $(rc, {\n                                x: rect[0],\n                                y: rect[1],\n                                width: rect[2],\n                                height: rect[3]\n                            });\n                            el.appendChild(rc);\n                            o.paper.defs.appendChild(el);\n                            $(node, {\"clip-path\": \"url(#\" + el.id + \")\"});\n                            o.clip = rc;\n                        }\n                        if (!value) {\n                            var path = node.getAttribute(\"clip-path\");\n                            if (path) {\n                                var clip = R._g.doc.getElementById(path.replace(/(^url\\(#|\\)$)/g, E));\n                                clip && clip.parentNode.removeChild(clip);\n                                $(node, {\"clip-path\": E});\n                                delete o.clip;\n                            }\n                        }\n                    break;\n                    case \"path\":\n                        if (o.type == \"path\") {\n                            $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : \"M0,0\"});\n                            o._.dirty = 1;\n                            if (o._.arrows) {\n                                \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n                                \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n                            }\n                        }\n                        break;\n                    case \"width\":\n                        node.setAttribute(att, value);\n                        o._.dirty = 1;\n                        if (attrs.fx) {\n                            att = \"x\";\n                            value = attrs.x;\n                        } else {\n                            break;\n                        }\n                    case \"x\":\n                        if (attrs.fx) {\n                            value = -attrs.x - (attrs.width || 0);\n                        }\n                    case \"rx\":\n                        if (att == \"rx\" && o.type == \"rect\") {\n                            break;\n                        }\n                    case \"cx\":\n                        node.setAttribute(att, value);\n                        o.pattern && updatePosition(o);\n                        o._.dirty = 1;\n                        break;\n                    case \"height\":\n                        node.setAttribute(att, value);\n                        o._.dirty = 1;\n                        if (attrs.fy) {\n                            att = \"y\";\n                            value = attrs.y;\n                        } else {\n                            break;\n                        }\n                    case \"y\":\n                        if (attrs.fy) {\n                            value = -attrs.y - (attrs.height || 0);\n                        }\n                    case \"ry\":\n                        if (att == \"ry\" && o.type == \"rect\") {\n                            break;\n                        }\n                    case \"cy\":\n                        node.setAttribute(att, value);\n                        o.pattern && updatePosition(o);\n                        o._.dirty = 1;\n                        break;\n                    case \"r\":\n                        if (o.type == \"rect\") {\n                            $(node, {rx: value, ry: value});\n                        } else {\n                            node.setAttribute(att, value);\n                        }\n                        o._.dirty = 1;\n                        break;\n                    case \"src\":\n                        if (o.type == \"image\") {\n                            node.setAttributeNS(xlink, \"href\", value);\n                        }\n                        break;\n                    case \"stroke-width\":\n                        if (o._.sx != 1 || o._.sy != 1) {\n                            value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;\n                        }\n                        if (o.paper._vbSize) {\n                            value *= o.paper._vbSize;\n                        }\n                        node.setAttribute(att, value);\n                        if (attrs[\"stroke-dasharray\"]) {\n                            addDashes(o, attrs[\"stroke-dasharray\"], params);\n                        }\n                        if (o._.arrows) {\n                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n                        }\n                        break;\n                    case \"stroke-dasharray\":\n                        addDashes(o, value, params);\n                        break;\n                    case \"fill\":\n                        var isURL = Str(value).match(R._ISURL);\n                        if (isURL) {\n                            el = $(\"pattern\");\n                            var ig = $(\"image\");\n                            el.id = R.createUUID();\n                            $(el, {x: 0, y: 0, patternUnits: \"userSpaceOnUse\", height: 1, width: 1});\n                            $(ig, {x: 0, y: 0, \"xlink:href\": isURL[1]});\n                            el.appendChild(ig);\n\n                            (function (el) {\n                                R._preload(isURL[1], function () {\n                                    var w = this.offsetWidth,\n                                        h = this.offsetHeight;\n                                    $(el, {width: w, height: h});\n                                    $(ig, {width: w, height: h});\n                                    o.paper.safari();\n                                });\n                            })(el);\n                            o.paper.defs.appendChild(el);\n                            $(node, {fill: \"url(#\" + el.id + \")\"});\n                            o.pattern = el;\n                            o.pattern && updatePosition(o);\n                            break;\n                        }\n                        var clr = R.getRGB(value);\n                        if (!clr.error) {\n                            delete params.gradient;\n                            delete attrs.gradient;\n                            !R.is(attrs.opacity, \"undefined\") &&\n                                R.is(params.opacity, \"undefined\") &&\n                                $(node, {opacity: attrs.opacity});\n                            !R.is(attrs[\"fill-opacity\"], \"undefined\") &&\n                                R.is(params[\"fill-opacity\"], \"undefined\") &&\n                                $(node, {\"fill-opacity\": attrs[\"fill-opacity\"]});\n                        } else if ((o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value)) {\n                            if (\"opacity\" in attrs || \"fill-opacity\" in attrs) {\n                                var gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n                                if (gradient) {\n                                    var stops = gradient.getElementsByTagName(\"stop\");\n                                    $(stops[stops.length - 1], {\"stop-opacity\": (\"opacity\" in attrs ? attrs.opacity : 1) * (\"fill-opacity\" in attrs ? attrs[\"fill-opacity\"] : 1)});\n                                }\n                            }\n                            attrs.gradient = value;\n                            attrs.fill = \"none\";\n                            break;\n                        }\n                        clr[has](\"opacity\") && $(node, {\"fill-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n                    case \"stroke\":\n                        clr = R.getRGB(value);\n                        node.setAttribute(att, clr.hex);\n                        att == \"stroke\" && clr[has](\"opacity\") && $(node, {\"stroke-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n                        if (att == \"stroke\" && o._.arrows) {\n                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n                        }\n                        break;\n                    case \"gradient\":\n                        (o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value);\n                        break;\n                    case \"opacity\":\n                        if (attrs.gradient && !attrs[has](\"stroke-opacity\")) {\n                            $(node, {\"stroke-opacity\": value > 1 ? value / 100 : value});\n                        }\n                        // fall\n                    case \"fill-opacity\":\n                        if (attrs.gradient) {\n                            gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n                            if (gradient) {\n                                stops = gradient.getElementsByTagName(\"stop\");\n                                $(stops[stops.length - 1], {\"stop-opacity\": value});\n                            }\n                            break;\n                        }\n                    default:\n                        att == \"font-size\" && (value = toInt(value, 10) + \"px\");\n                        var cssrule = att.replace(/(\\-.)/g, function (w) {\n                            return w.substring(1).toUpperCase();\n                        });\n                        node.style[cssrule] = value;\n                        o._.dirty = 1;\n                        node.setAttribute(att, value);\n                        break;\n                }\n            }\n        }\n\n        tuneText(o, params);\n        node.style.visibility = vis;\n    },\n    leading = 1.2,\n    tuneText = function (el, params) {\n        if (el.type != \"text\" || !(params[has](\"text\") || params[has](\"font\") || params[has](\"font-size\") || params[has](\"x\") || params[has](\"y\"))) {\n            return;\n        }\n        var a = el.attrs,\n            node = el.node,\n            fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue(\"font-size\"), 10) : 10;\n\n        if (params[has](\"text\")) {\n            a.text = params.text;\n            while (node.firstChild) {\n                node.removeChild(node.firstChild);\n            }\n            var texts = Str(params.text).split(\"\\n\"),\n                tspans = [],\n                tspan;\n            for (var i = 0, ii = texts.length; i < ii; i++) {\n                tspan = $(\"tspan\");\n                i && $(tspan, {dy: fontSize * leading, x: a.x});\n                tspan.appendChild(R._g.doc.createTextNode(texts[i]));\n                node.appendChild(tspan);\n                tspans[i] = tspan;\n            }\n        } else {\n            tspans = node.getElementsByTagName(\"tspan\");\n            for (i = 0, ii = tspans.length; i < ii; i++) if (i) {\n                $(tspans[i], {dy: fontSize * leading, x: a.x});\n            } else {\n                $(tspans[0], {dy: 0});\n            }\n        }\n        $(node, {x: a.x, y: a.y});\n        el._.dirty = 1;\n        var bb = el._getBBox(),\n            dif = a.y - (bb.y + bb.height / 2);\n        dif && R.is(dif, \"finite\") && $(tspans[0], {dy: dif});\n    },\n    Element = function (node, svg) {\n        var X = 0,\n            Y = 0;\n        \n        this[0] = this.node = node;\n        \n        node.raphael = true;\n        \n        this.id = R._oid++;\n        node.raphaelid = this.id;\n        this.matrix = R.matrix();\n        this.realPath = null;\n        \n        this.paper = svg;\n        this.attrs = this.attrs || {};\n        this._ = {\n            transform: [],\n            sx: 1,\n            sy: 1,\n            deg: 0,\n            dx: 0,\n            dy: 0,\n            dirty: 1\n        };\n        !svg.bottom && (svg.bottom = this);\n        \n        this.prev = svg.top;\n        svg.top && (svg.top.next = this);\n        svg.top = this;\n        \n        this.next = null;\n    },\n    elproto = R.el;\n\n    Element.prototype = elproto;\n    elproto.constructor = Element;\n\n    R._engine.path = function (pathString, SVG) {\n        var el = $(\"path\");\n        SVG.canvas && SVG.canvas.appendChild(el);\n        var p = new Element(el, SVG);\n        p.type = \"path\";\n        setFillAndStroke(p, {\n            fill: \"none\",\n            stroke: \"#000\",\n            path: pathString\n        });\n        return p;\n    };\n    \n    elproto.rotate = function (deg, cx, cy) {\n        if (this.removed) {\n            return this;\n        }\n        deg = Str(deg).split(separator);\n        if (deg.length - 1) {\n            cx = toFloat(deg[1]);\n            cy = toFloat(deg[2]);\n        }\n        deg = toFloat(deg[0]);\n        (cy == null) && (cx = cy);\n        if (cx == null || cy == null) {\n            var bbox = this.getBBox(1);\n            cx = bbox.x + bbox.width / 2;\n            cy = bbox.y + bbox.height / 2;\n        }\n        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n        return this;\n    };\n    \n    elproto.scale = function (sx, sy, cx, cy) {\n        if (this.removed) {\n            return this;\n        }\n        sx = Str(sx).split(separator);\n        if (sx.length - 1) {\n            sy = toFloat(sx[1]);\n            cx = toFloat(sx[2]);\n            cy = toFloat(sx[3]);\n        }\n        sx = toFloat(sx[0]);\n        (sy == null) && (sy = sx);\n        (cy == null) && (cx = cy);\n        if (cx == null || cy == null) {\n            var bbox = this.getBBox(1);\n        }\n        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n        return this;\n    };\n    \n    elproto.translate = function (dx, dy) {\n        if (this.removed) {\n            return this;\n        }\n        dx = Str(dx).split(separator);\n        if (dx.length - 1) {\n            dy = toFloat(dx[1]);\n        }\n        dx = toFloat(dx[0]) || 0;\n        dy = +dy || 0;\n        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n        return this;\n    };\n    \n    elproto.transform = function (tstr) {\n        var _ = this._;\n        if (tstr == null) {\n            return _.transform;\n        }\n        R._extractTransform(this, tstr);\n\n        this.clip && $(this.clip, {transform: this.matrix.invert()});\n        this.pattern && updatePosition(this);\n        this.node && $(this.node, {transform: this.matrix});\n    \n        if (_.sx != 1 || _.sy != 1) {\n            var sw = this.attrs[has](\"stroke-width\") ? this.attrs[\"stroke-width\"] : 1;\n            this.attr({\"stroke-width\": sw});\n        }\n\n        return this;\n    };\n    \n    elproto.hide = function () {\n        !this.removed && this.paper.safari(this.node.style.display = \"none\");\n        return this;\n    };\n    \n    elproto.show = function () {\n        !this.removed && this.paper.safari(this.node.style.display = \"\");\n        return this;\n    };\n    \n    elproto.remove = function () {\n        if (this.removed || !this.node.parentNode) {\n            return;\n        }\n        var paper = this.paper;\n        paper.__set__ && paper.__set__.exclude(this);\n        eve.unbind(\"raphael.*.*.\" + this.id);\n        if (this.gradient) {\n            paper.defs.removeChild(this.gradient);\n        }\n        R._tear(this, paper);\n        if (this.node.parentNode.tagName.toLowerCase() == \"a\") {\n            this.node.parentNode.parentNode.removeChild(this.node.parentNode);\n        } else {\n            this.node.parentNode.removeChild(this.node);\n        }\n        for (var i in this) {\n            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n        }\n        this.removed = true;\n    };\n    elproto._getBBox = function () {\n        if (this.node.style.display == \"none\") {\n            this.show();\n            var hide = true;\n        }\n        var bbox = {};\n        try {\n            bbox = this.node.getBBox();\n        } catch(e) {\n            // Firefox 3.0.x plays badly here\n        } finally {\n            bbox = bbox || {};\n        }\n        hide && this.hide();\n        return bbox;\n    };\n    \n    elproto.attr = function (name, value) {\n        if (this.removed) {\n            return this;\n        }\n        if (name == null) {\n            var res = {};\n            for (var a in this.attrs) if (this.attrs[has](a)) {\n                res[a] = this.attrs[a];\n            }\n            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n            res.transform = this._.transform;\n            return res;\n        }\n        if (value == null && R.is(name, \"string\")) {\n            if (name == \"fill\" && this.attrs.fill == \"none\" && this.attrs.gradient) {\n                return this.attrs.gradient;\n            }\n            if (name == \"transform\") {\n                return this._.transform;\n            }\n            var names = name.split(separator),\n                out = {};\n            for (var i = 0, ii = names.length; i < ii; i++) {\n                name = names[i];\n                if (name in this.attrs) {\n                    out[name] = this.attrs[name];\n                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n                    out[name] = this.paper.customAttributes[name].def;\n                } else {\n                    out[name] = R._availableAttrs[name];\n                }\n            }\n            return ii - 1 ? out : out[names[0]];\n        }\n        if (value == null && R.is(name, \"array\")) {\n            out = {};\n            for (i = 0, ii = name.length; i < ii; i++) {\n                out[name[i]] = this.attr(name[i]);\n            }\n            return out;\n        }\n        if (value != null) {\n            var params = {};\n            params[name] = value;\n        } else if (name != null && R.is(name, \"object\")) {\n            params = name;\n        }\n        for (var key in params) {\n            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n        }\n        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n            this.attrs[key] = params[key];\n            for (var subkey in par) if (par[has](subkey)) {\n                params[subkey] = par[subkey];\n            }\n        }\n        setFillAndStroke(this, params);\n        return this;\n    };\n    \n    elproto.toFront = function () {\n        if (this.removed) {\n            return this;\n        }\n        if (this.node.parentNode.tagName.toLowerCase() == \"a\") {\n            this.node.parentNode.parentNode.appendChild(this.node.parentNode);\n        } else {\n            this.node.parentNode.appendChild(this.node);\n        }\n        var svg = this.paper;\n        svg.top != this && R._tofront(this, svg);\n        return this;\n    };\n    \n    elproto.toBack = function () {\n        if (this.removed) {\n            return this;\n        }\n        var parent = this.node.parentNode;\n        if (parent.tagName.toLowerCase() == \"a\") {\n            parent.parentNode.insertBefore(this.node.parentNode, this.node.parentNode.parentNode.firstChild); \n        } else if (parent.firstChild != this.node) {\n            parent.insertBefore(this.node, this.node.parentNode.firstChild);\n        }\n        R._toback(this, this.paper);\n        var svg = this.paper;\n        return this;\n    };\n    \n    elproto.insertAfter = function (element) {\n        if (this.removed) {\n            return this;\n        }\n        var node = element.node || element[element.length - 1].node;\n        if (node.nextSibling) {\n            node.parentNode.insertBefore(this.node, node.nextSibling);\n        } else {\n            node.parentNode.appendChild(this.node);\n        }\n        R._insertafter(this, element, this.paper);\n        return this;\n    };\n    \n    elproto.insertBefore = function (element) {\n        if (this.removed) {\n            return this;\n        }\n        var node = element.node || element[0].node;\n        node.parentNode.insertBefore(this.node, node);\n        R._insertbefore(this, element, this.paper);\n        return this;\n    };\n    elproto.blur = function (size) {\n        // Experimental. No Safari support. Use it on your own risk.\n        var t = this;\n        if (+size !== 0) {\n            var fltr = $(\"filter\"),\n                blur = $(\"feGaussianBlur\");\n            t.attrs.blur = size;\n            fltr.id = R.createUUID();\n            $(blur, {stdDeviation: +size || 1.5});\n            fltr.appendChild(blur);\n            t.paper.defs.appendChild(fltr);\n            t._blur = fltr;\n            $(t.node, {filter: \"url(#\" + fltr.id + \")\"});\n        } else {\n            if (t._blur) {\n                t._blur.parentNode.removeChild(t._blur);\n                delete t._blur;\n                delete t.attrs.blur;\n            }\n            t.node.removeAttribute(\"filter\");\n        }\n    };\n    R._engine.circle = function (svg, x, y, r) {\n        var el = $(\"circle\");\n        svg.canvas && svg.canvas.appendChild(el);\n        var res = new Element(el, svg);\n        res.attrs = {cx: x, cy: y, r: r, fill: \"none\", stroke: \"#000\"};\n        res.type = \"circle\";\n        $(el, res.attrs);\n        return res;\n    };\n    R._engine.rect = function (svg, x, y, w, h, r) {\n        var el = $(\"rect\");\n        svg.canvas && svg.canvas.appendChild(el);\n        var res = new Element(el, svg);\n        res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: \"none\", stroke: \"#000\"};\n        res.type = \"rect\";\n        $(el, res.attrs);\n        return res;\n    };\n    R._engine.ellipse = function (svg, x, y, rx, ry) {\n        var el = $(\"ellipse\");\n        svg.canvas && svg.canvas.appendChild(el);\n        var res = new Element(el, svg);\n        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: \"none\", stroke: \"#000\"};\n        res.type = \"ellipse\";\n        $(el, res.attrs);\n        return res;\n    };\n    R._engine.image = function (svg, src, x, y, w, h) {\n        var el = $(\"image\");\n        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: \"none\"});\n        el.setAttributeNS(xlink, \"href\", src);\n        svg.canvas && svg.canvas.appendChild(el);\n        var res = new Element(el, svg);\n        res.attrs = {x: x, y: y, width: w, height: h, src: src};\n        res.type = \"image\";\n        return res;\n    };\n    R._engine.text = function (svg, x, y, text) {\n        var el = $(\"text\");\n        svg.canvas && svg.canvas.appendChild(el);\n        var res = new Element(el, svg);\n        res.attrs = {\n            x: x,\n            y: y,\n            \"text-anchor\": \"middle\",\n            text: text,\n            font: R._availableAttrs.font,\n            stroke: \"none\",\n            fill: \"#000\"\n        };\n        res.type = \"text\";\n        setFillAndStroke(res, res.attrs);\n        return res;\n    };\n    R._engine.setSize = function (width, height) {\n        this.width = width || this.width;\n        this.height = height || this.height;\n        this.canvas.setAttribute(\"width\", this.width);\n        this.canvas.setAttribute(\"height\", this.height);\n        if (this._viewBox) {\n            this.setViewBox.apply(this, this._viewBox);\n        }\n        return this;\n    };\n    R._engine.create = function () {\n        var con = R._getContainer.apply(0, arguments),\n            container = con && con.container,\n            x = con.x,\n            y = con.y,\n            width = con.width,\n            height = con.height;\n        if (!container) {\n            throw new Error(\"SVG container not found.\");\n        }\n        var cnvs = $(\"svg\"),\n            css = \"overflow:hidden;\",\n            isFloating;\n        x = x || 0;\n        y = y || 0;\n        width = width || 512;\n        height = height || 342;\n        $(cnvs, {\n            height: height,\n            version: 1.1,\n            width: width,\n            xmlns: \"http://www.w3.org/2000/svg\"\n        });\n        if (container == 1) {\n            cnvs.style.cssText = css + \"position:absolute;left:\" + x + \"px;top:\" + y + \"px\";\n            R._g.doc.body.appendChild(cnvs);\n            isFloating = 1;\n        } else {\n            cnvs.style.cssText = css + \"position:relative\";\n            if (container.firstChild) {\n                container.insertBefore(cnvs, container.firstChild);\n            } else {\n                container.appendChild(cnvs);\n            }\n        }\n        container = new R._Paper;\n        container.width = width;\n        container.height = height;\n        container.canvas = cnvs;\n        container.clear();\n        container._left = container._top = 0;\n        isFloating && (container.renderfix = function () {});\n        container.renderfix();\n        return container;\n    };\n    R._engine.setViewBox = function (x, y, w, h, fit) {\n        eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n        var size = mmax(w / this.width, h / this.height),\n            top = this.top,\n            aspectRatio = fit ? \"meet\" : \"xMinYMin\",\n            vb,\n            sw;\n        if (x == null) {\n            if (this._vbSize) {\n                size = 1;\n            }\n            delete this._vbSize;\n            vb = \"0 0 \" + this.width + S + this.height;\n        } else {\n            this._vbSize = size;\n            vb = x + S + y + S + w + S + h;\n        }\n        $(this.canvas, {\n            viewBox: vb,\n            preserveAspectRatio: aspectRatio\n        });\n        while (size && top) {\n            sw = \"stroke-width\" in top.attrs ? top.attrs[\"stroke-width\"] : 1;\n            top.attr({\"stroke-width\": sw});\n            top._.dirty = 1;\n            top._.dirtyT = 1;\n            top = top.prev;\n        }\n        this._viewBox = [x, y, w, h, !!fit];\n        return this;\n    };\n    \n    R.prototype.renderfix = function () {\n        var cnvs = this.canvas,\n            s = cnvs.style,\n            pos;\n        try {\n            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix();\n        } catch (e) {\n            // BROWSERIFY MOD: this will fail with jsdom since it's SVG 1.0,\n            // but in jsdom this whole function isn't needed anyways\n            try {\n                pos = cnvs.createSVGMatrix();\n            } catch (e) {\n                return;\n            }\n        }\n        var left = -pos.e % 1,\n            top = -pos.f % 1;\n        if (left || top) {\n            if (left) {\n                this._left = (this._left + left) % 1;\n                s.left = this._left + \"px\";\n            }\n            if (top) {\n                this._top = (this._top + top) % 1;\n                s.top = this._top + \"px\";\n            }\n        }\n    };\n    \n    R.prototype.clear = function () {\n        R.eve(\"raphael.clear\", this);\n        var c = this.canvas;\n        while (c.firstChild) {\n            c.removeChild(c.firstChild);\n        }\n        this.bottom = this.top = null;\n        (this.desc = $(\"desc\")).appendChild(R._g.doc.createTextNode(\"Created with Rapha\\xebl \" + R.version));\n        c.appendChild(this.desc);\n        c.appendChild(this.defs = $(\"defs\"));\n    };\n    \n    R.prototype.remove = function () {\n        eve(\"raphael.remove\", this);\n        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);\n        for (var i in this) {\n            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n        }\n    };\n    var setproto = R.st;\n    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n        setproto[method] = (function (methodname) {\n            return function () {\n                var arg = arguments;\n                return this.forEach(function (el) {\n                    el[methodname].apply(el, arg);\n                });\n            };\n        })(method);\n    }\n}(Raphael);\n\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël - JavaScript Vector Library                                 │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ VML Module                                                          │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\n// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\nRaphael.vml && function (R) {\n    var has = \"hasOwnProperty\",\n        Str = String,\n        toFloat = parseFloat,\n        math = Math,\n        round = math.round,\n        mmax = math.max,\n        mmin = math.min,\n        abs = math.abs,\n        fillString = \"fill\",\n        separator = /[, ]+/,\n        eve = R.eve,\n        ms = \" progid:DXImageTransform.Microsoft\",\n        S = \" \",\n        E = \"\",\n        map = {M: \"m\", L: \"l\", C: \"c\", Z: \"x\", m: \"t\", l: \"r\", c: \"v\", z: \"x\"},\n        bites = /([clmz]),?([^clmz]*)/gi,\n        blurregexp = / progid:\\S+Blur\\([^\\)]+\\)/g,\n        val = /-?[^,\\s-]+/g,\n        cssDot = \"position:absolute;left:0;top:0;width:1px;height:1px\",\n        zoom = 21600,\n        pathTypes = {path: 1, rect: 1, image: 1},\n        ovalTypes = {circle: 1, ellipse: 1},\n        path2vml = function (path) {\n            var total =  /[ahqstv]/ig,\n                command = R._pathToAbsolute;\n            Str(path).match(total) && (command = R._path2curve);\n            total = /[clmz]/g;\n            if (command == R._pathToAbsolute && !Str(path).match(total)) {\n                var res = Str(path).replace(bites, function (all, command, args) {\n                    var vals = [],\n                        isMove = command.toLowerCase() == \"m\",\n                        res = map[command];\n                    args.replace(val, function (value) {\n                        if (isMove && vals.length == 2) {\n                            res += vals + map[command == \"m\" ? \"l\" : \"L\"];\n                            vals = [];\n                        }\n                        vals.push(round(value * zoom));\n                    });\n                    return res + vals;\n                });\n                return res;\n            }\n            var pa = command(path), p, r;\n            res = [];\n            for (var i = 0, ii = pa.length; i < ii; i++) {\n                p = pa[i];\n                r = pa[i][0].toLowerCase();\n                r == \"z\" && (r = \"x\");\n                for (var j = 1, jj = p.length; j < jj; j++) {\n                    r += round(p[j] * zoom) + (j != jj - 1 ? \",\" : E);\n                }\n                res.push(r);\n            }\n            return res.join(S);\n        },\n        compensation = function (deg, dx, dy) {\n            var m = R.matrix();\n            m.rotate(-deg, .5, .5);\n            return {\n                dx: m.x(dx, dy),\n                dy: m.y(dx, dy)\n            };\n        },\n        setCoords = function (p, sx, sy, dx, dy, deg) {\n            var _ = p._,\n                m = p.matrix,\n                fillpos = _.fillpos,\n                o = p.node,\n                s = o.style,\n                y = 1,\n                flip = \"\",\n                dxdy,\n                kx = zoom / sx,\n                ky = zoom / sy;\n            s.visibility = \"hidden\";\n            if (!sx || !sy) {\n                return;\n            }\n            o.coordsize = abs(kx) + S + abs(ky);\n            s.rotation = deg * (sx * sy < 0 ? -1 : 1);\n            if (deg) {\n                var c = compensation(deg, dx, dy);\n                dx = c.dx;\n                dy = c.dy;\n            }\n            sx < 0 && (flip += \"x\");\n            sy < 0 && (flip += \" y\") && (y = -1);\n            s.flip = flip;\n            o.coordorigin = (dx * -kx) + S + (dy * -ky);\n            if (fillpos || _.fillsize) {\n                var fill = o.getElementsByTagName(fillString);\n                fill = fill && fill[0];\n                o.removeChild(fill);\n                if (fillpos) {\n                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));\n                    fill.position = c.dx * y + S + c.dy * y;\n                }\n                if (_.fillsize) {\n                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);\n                }\n                o.appendChild(fill);\n            }\n            s.visibility = \"visible\";\n        };\n    R.toString = function () {\n        return  \"Your browser doesn\\u2019t support SVG. Falling down to VML.\\nYou are running Rapha\\xebl \" + this.version;\n    };\n    var addArrow = function (o, value, isEnd) {\n        var values = Str(value).toLowerCase().split(\"-\"),\n            se = isEnd ? \"end\" : \"start\",\n            i = values.length,\n            type = \"classic\",\n            w = \"medium\",\n            h = \"medium\";\n        while (i--) {\n            switch (values[i]) {\n                case \"block\":\n                case \"classic\":\n                case \"oval\":\n                case \"diamond\":\n                case \"open\":\n                case \"none\":\n                    type = values[i];\n                    break;\n                case \"wide\":\n                case \"narrow\": h = values[i]; break;\n                case \"long\":\n                case \"short\": w = values[i]; break;\n            }\n        }\n        var stroke = o.node.getElementsByTagName(\"stroke\")[0];\n        stroke[se + \"arrow\"] = type;\n        stroke[se + \"arrowlength\"] = w;\n        stroke[se + \"arrowwidth\"] = h;\n    },\n    setFillAndStroke = function (o, params) {\n        // o.paper.canvas.style.display = \"none\";\n        o.attrs = o.attrs || {};\n        var node = o.node,\n            a = o.attrs,\n            s = node.style,\n            xy,\n            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            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            res = o;\n\n\n        for (var par in params) if (params[has](par)) {\n            a[par] = params[par];\n        }\n        if (newpath) {\n            a.path = R._getPath[o.type](o);\n            o._.dirty = 1;\n        }\n        params.href && (node.href = params.href);\n        params.title && (node.title = params.title);\n        params.target && (node.target = params.target);\n        params.cursor && (s.cursor = params.cursor);\n        \"blur\" in params && o.blur(params.blur);\n        if (params.path && o.type == \"path\" || newpath) {\n            node.path = path2vml(~Str(a.path).toLowerCase().indexOf(\"r\") ? R._pathToAbsolute(a.path) : a.path);\n            if (o.type == \"image\") {\n                o._.fillpos = [a.x, a.y];\n                o._.fillsize = [a.width, a.height];\n                setCoords(o, 1, 1, 0, 0, 0);\n            }\n        }\n        \"transform\" in params && o.transform(params.transform);\n        if (isOval) {\n            var cx = +a.cx,\n                cy = +a.cy,\n                rx = +a.rx || +a.r || 0,\n                ry = +a.ry || +a.r || 0;\n            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        }\n        if (\"clip-rect\" in params) {\n            var rect = Str(params[\"clip-rect\"]).split(separator);\n            if (rect.length == 4) {\n                rect[2] = +rect[2] + (+rect[0]);\n                rect[3] = +rect[3] + (+rect[1]);\n                var div = node.clipRect || R._g.doc.createElement(\"div\"),\n                    dstyle = div.style;\n                dstyle.clip = R.format(\"rect({1}px {2}px {3}px {0}px)\", rect);\n                if (!node.clipRect) {\n                    dstyle.position = \"absolute\";\n                    dstyle.top = 0;\n                    dstyle.left = 0;\n                    dstyle.width = o.paper.width + \"px\";\n                    dstyle.height = o.paper.height + \"px\";\n                    node.parentNode.insertBefore(div, node);\n                    div.appendChild(node);\n                    node.clipRect = div;\n                }\n            }\n            if (!params[\"clip-rect\"]) {\n                node.clipRect && (node.clipRect.style.clip = \"auto\");\n            }\n        }\n        if (o.textpath) {\n            var textpathStyle = o.textpath.style;\n            params.font && (textpathStyle.font = params.font);\n            params[\"font-family\"] && (textpathStyle.fontFamily = '\"' + params[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g, E) + '\"');\n            params[\"font-size\"] && (textpathStyle.fontSize = params[\"font-size\"]);\n            params[\"font-weight\"] && (textpathStyle.fontWeight = params[\"font-weight\"]);\n            params[\"font-style\"] && (textpathStyle.fontStyle = params[\"font-style\"]);\n        }\n        if (\"arrow-start\" in params) {\n            addArrow(res, params[\"arrow-start\"]);\n        }\n        if (\"arrow-end\" in params) {\n            addArrow(res, params[\"arrow-end\"], 1);\n        }\n        if (params.opacity != null || \n            params[\"stroke-width\"] != null ||\n            params.fill != null ||\n            params.src != null ||\n            params.stroke != null ||\n            params[\"stroke-width\"] != null ||\n            params[\"stroke-opacity\"] != null ||\n            params[\"fill-opacity\"] != null ||\n            params[\"stroke-dasharray\"] != null ||\n            params[\"stroke-miterlimit\"] != null ||\n            params[\"stroke-linejoin\"] != null ||\n            params[\"stroke-linecap\"] != null) {\n            var fill = node.getElementsByTagName(fillString),\n                newfill = false;\n            fill = fill && fill[0];\n            !fill && (newfill = fill = createNode(fillString));\n            if (o.type == \"image\" && params.src) {\n                fill.src = params.src;\n            }\n            params.fill && (fill.on = true);\n            if (fill.on == null || params.fill == \"none\" || params.fill === null) {\n                fill.on = false;\n            }\n            if (fill.on && params.fill) {\n                var isURL = Str(params.fill).match(R._ISURL);\n                if (isURL) {\n                    fill.parentNode == node && node.removeChild(fill);\n                    fill.rotate = true;\n                    fill.src = isURL[1];\n                    fill.type = \"tile\";\n                    var bbox = o.getBBox(1);\n                    fill.position = bbox.x + S + bbox.y;\n                    o._.fillpos = [bbox.x, bbox.y];\n\n                    R._preload(isURL[1], function () {\n                        o._.fillsize = [this.offsetWidth, this.offsetHeight];\n                    });\n                } else {\n                    fill.color = R.getRGB(params.fill).hex;\n                    fill.src = E;\n                    fill.type = \"solid\";\n                    if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != \"r\") && addGradientFill(res, params.fill, fill)) {\n                        a.fill = \"none\";\n                        a.gradient = params.fill;\n                        fill.rotate = false;\n                    }\n                }\n            }\n            if (\"fill-opacity\" in params || \"opacity\" in params) {\n                var opacity = ((+a[\"fill-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);\n                opacity = mmin(mmax(opacity, 0), 1);\n                fill.opacity = opacity;\n                if (fill.src) {\n                    fill.color = \"none\";\n                }\n            }\n            node.appendChild(fill);\n            var stroke = (node.getElementsByTagName(\"stroke\") && node.getElementsByTagName(\"stroke\")[0]),\n            newstroke = false;\n            !stroke && (newstroke = stroke = createNode(\"stroke\"));\n            if ((params.stroke && params.stroke != \"none\") ||\n                params[\"stroke-width\"] ||\n                params[\"stroke-opacity\"] != null ||\n                params[\"stroke-dasharray\"] ||\n                params[\"stroke-miterlimit\"] ||\n                params[\"stroke-linejoin\"] ||\n                params[\"stroke-linecap\"]) {\n                stroke.on = true;\n            }\n            (params.stroke == \"none\" || params.stroke === null || stroke.on == null || params.stroke == 0 || params[\"stroke-width\"] == 0) && (stroke.on = false);\n            var strokeColor = R.getRGB(params.stroke);\n            stroke.on && params.stroke && (stroke.color = strokeColor.hex);\n            opacity = ((+a[\"stroke-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);\n            var width = (toFloat(params[\"stroke-width\"]) || 1) * .75;\n            opacity = mmin(mmax(opacity, 0), 1);\n            params[\"stroke-width\"] == null && (width = a[\"stroke-width\"]);\n            params[\"stroke-width\"] && (stroke.weight = width);\n            width && width < 1 && (opacity *= width) && (stroke.weight = 1);\n            stroke.opacity = opacity;\n        \n            params[\"stroke-linejoin\"] && (stroke.joinstyle = params[\"stroke-linejoin\"] || \"miter\");\n            stroke.miterlimit = params[\"stroke-miterlimit\"] || 8;\n            params[\"stroke-linecap\"] && (stroke.endcap = params[\"stroke-linecap\"] == \"butt\" ? \"flat\" : params[\"stroke-linecap\"] == \"square\" ? \"square\" : \"round\");\n            if (params[\"stroke-dasharray\"]) {\n                var dasharray = {\n                    \"-\": \"shortdash\",\n                    \".\": \"shortdot\",\n                    \"-.\": \"shortdashdot\",\n                    \"-..\": \"shortdashdotdot\",\n                    \". \": \"dot\",\n                    \"- \": \"dash\",\n                    \"--\": \"longdash\",\n                    \"- .\": \"dashdot\",\n                    \"--.\": \"longdashdot\",\n                    \"--..\": \"longdashdotdot\"\n                };\n                stroke.dashstyle = dasharray[has](params[\"stroke-dasharray\"]) ? dasharray[params[\"stroke-dasharray\"]] : E;\n            }\n            newstroke && node.appendChild(stroke);\n        }\n        if (res.type == \"text\") {\n            res.paper.canvas.style.display = E;\n            var span = res.paper.span,\n                m = 100,\n                fontSize = a.font && a.font.match(/\\d+(?:\\.\\d*)?(?=px)/);\n            s = span.style;\n            a.font && (s.font = a.font);\n            a[\"font-family\"] && (s.fontFamily = a[\"font-family\"]);\n            a[\"font-weight\"] && (s.fontWeight = a[\"font-weight\"]);\n            a[\"font-style\"] && (s.fontStyle = a[\"font-style\"]);\n            fontSize = toFloat(a[\"font-size\"] || fontSize && fontSize[0]) || 10;\n            s.fontSize = fontSize * m + \"px\";\n            res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, \"&#60;\").replace(/&/g, \"&#38;\").replace(/\\n/g, \"<br>\"));\n            var brect = span.getBoundingClientRect();\n            res.W = a.w = (brect.right - brect.left) / m;\n            res.H = a.h = (brect.bottom - brect.top) / m;\n            // res.paper.canvas.style.display = \"none\";\n            res.X = a.x;\n            res.Y = a.y + res.H / 2;\n\n            (\"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            var dirtyattrs = [\"x\", \"y\", \"text\", \"font\", \"font-family\", \"font-weight\", \"font-style\", \"font-size\"];\n            for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {\n                res._.dirty = 1;\n                break;\n            }\n        \n            // text-anchor emulation\n            switch (a[\"text-anchor\"]) {\n                case \"start\":\n                    res.textpath.style[\"v-text-align\"] = \"left\";\n                    res.bbx = res.W / 2;\n                break;\n                case \"end\":\n                    res.textpath.style[\"v-text-align\"] = \"right\";\n                    res.bbx = -res.W / 2;\n                break;\n                default:\n                    res.textpath.style[\"v-text-align\"] = \"center\";\n                    res.bbx = 0;\n                break;\n            }\n            res.textpath.style[\"v-text-kern\"] = true;\n        }\n        // res.paper.canvas.style.display = E;\n    },\n    addGradientFill = function (o, gradient, fill) {\n        o.attrs = o.attrs || {};\n        var attrs = o.attrs,\n            pow = Math.pow,\n            opacity,\n            oindex,\n            type = \"linear\",\n            fxfy = \".5 .5\";\n        o.attrs.gradient = gradient;\n        gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {\n            type = \"radial\";\n            if (fx && fy) {\n                fx = toFloat(fx);\n                fy = toFloat(fy);\n                pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);\n                fxfy = fx + S + fy;\n            }\n            return E;\n        });\n        gradient = gradient.split(/\\s*\\-\\s*/);\n        if (type == \"linear\") {\n            var angle = gradient.shift();\n            angle = -toFloat(angle);\n            if (isNaN(angle)) {\n                return null;\n            }\n        }\n        var dots = R._parseDots(gradient);\n        if (!dots) {\n            return null;\n        }\n        o = o.shape || o.node;\n        if (dots.length) {\n            o.removeChild(fill);\n            fill.on = true;\n            fill.method = \"none\";\n            fill.color = dots[0].color;\n            fill.color2 = dots[dots.length - 1].color;\n            var clrs = [];\n            for (var i = 0, ii = dots.length; i < ii; i++) {\n                dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);\n            }\n            fill.colors = clrs.length ? clrs.join() : \"0% \" + fill.color;\n            if (type == \"radial\") {\n                fill.type = \"gradientTitle\";\n                fill.focus = \"100%\";\n                fill.focussize = \"0 0\";\n                fill.focusposition = fxfy;\n                fill.angle = 0;\n            } else {\n                // fill.rotate= true;\n                fill.type = \"gradient\";\n                fill.angle = (270 - angle) % 360;\n            }\n            o.appendChild(fill);\n        }\n        return 1;\n    },\n    Element = function (node, vml) {\n        this[0] = this.node = node;\n        node.raphael = true;\n        this.id = R._oid++;\n        node.raphaelid = this.id;\n        this.X = 0;\n        this.Y = 0;\n        this.attrs = {};\n        this.paper = vml;\n        this.matrix = R.matrix();\n        this._ = {\n            transform: [],\n            sx: 1,\n            sy: 1,\n            dx: 0,\n            dy: 0,\n            deg: 0,\n            dirty: 1,\n            dirtyT: 1\n        };\n        !vml.bottom && (vml.bottom = this);\n        this.prev = vml.top;\n        vml.top && (vml.top.next = this);\n        vml.top = this;\n        this.next = null;\n    };\n    var elproto = R.el;\n\n    Element.prototype = elproto;\n    elproto.constructor = Element;\n    elproto.transform = function (tstr) {\n        if (tstr == null) {\n            return this._.transform;\n        }\n        var vbs = this.paper._viewBoxShift,\n            vbt = vbs ? \"s\" + [vbs.scale, vbs.scale] + \"-1-1t\" + [vbs.dx, vbs.dy] : E,\n            oldt;\n        if (vbs) {\n            oldt = tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, this._.transform || E);\n        }\n        R._extractTransform(this, vbt + tstr);\n        var matrix = this.matrix.clone(),\n            skew = this.skew,\n            o = this.node,\n            split,\n            isGrad = ~Str(this.attrs.fill).indexOf(\"-\"),\n            isPatt = !Str(this.attrs.fill).indexOf(\"url(\");\n        matrix.translate(-.5, -.5);\n        if (isPatt || isGrad || this.type == \"image\") {\n            skew.matrix = \"1 0 0 1\";\n            skew.offset = \"0 0\";\n            split = matrix.split();\n            if ((isGrad && split.noRotation) || !split.isSimple) {\n                o.style.filter = matrix.toFilter();\n                var bb = this.getBBox(),\n                    bbt = this.getBBox(1),\n                    dx = bb.x - bbt.x,\n                    dy = bb.y - bbt.y;\n                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);\n                setCoords(this, 1, 1, dx, dy, 0);\n            } else {\n                o.style.filter = E;\n                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);\n            }\n        } else {\n            o.style.filter = E;\n            skew.matrix = Str(matrix);\n            skew.offset = matrix.offset();\n        }\n        oldt && (this._.transform = oldt);\n        return this;\n    };\n    elproto.rotate = function (deg, cx, cy) {\n        if (this.removed) {\n            return this;\n        }\n        if (deg == null) {\n            return;\n        }\n        deg = Str(deg).split(separator);\n        if (deg.length - 1) {\n            cx = toFloat(deg[1]);\n            cy = toFloat(deg[2]);\n        }\n        deg = toFloat(deg[0]);\n        (cy == null) && (cx = cy);\n        if (cx == null || cy == null) {\n            var bbox = this.getBBox(1);\n            cx = bbox.x + bbox.width / 2;\n            cy = bbox.y + bbox.height / 2;\n        }\n        this._.dirtyT = 1;\n        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n        return this;\n    };\n    elproto.translate = function (dx, dy) {\n        if (this.removed) {\n            return this;\n        }\n        dx = Str(dx).split(separator);\n        if (dx.length - 1) {\n            dy = toFloat(dx[1]);\n        }\n        dx = toFloat(dx[0]) || 0;\n        dy = +dy || 0;\n        if (this._.bbox) {\n            this._.bbox.x += dx;\n            this._.bbox.y += dy;\n        }\n        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n        return this;\n    };\n    elproto.scale = function (sx, sy, cx, cy) {\n        if (this.removed) {\n            return this;\n        }\n        sx = Str(sx).split(separator);\n        if (sx.length - 1) {\n            sy = toFloat(sx[1]);\n            cx = toFloat(sx[2]);\n            cy = toFloat(sx[3]);\n            isNaN(cx) && (cx = null);\n            isNaN(cy) && (cy = null);\n        }\n        sx = toFloat(sx[0]);\n        (sy == null) && (sy = sx);\n        (cy == null) && (cx = cy);\n        if (cx == null || cy == null) {\n            var bbox = this.getBBox(1);\n        }\n        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n    \n        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n        this._.dirtyT = 1;\n        return this;\n    };\n    elproto.hide = function () {\n        !this.removed && (this.node.style.display = \"none\");\n        return this;\n    };\n    elproto.show = function () {\n        !this.removed && (this.node.style.display = E);\n        return this;\n    };\n    elproto._getBBox = function () {\n        if (this.removed) {\n            return {};\n        }\n        return {\n            x: this.X + (this.bbx || 0) - this.W / 2,\n            y: this.Y - this.H,\n            width: this.W,\n            height: this.H\n        };\n    };\n    elproto.remove = function () {\n        if (this.removed || !this.node.parentNode) {\n            return;\n        }\n        this.paper.__set__ && this.paper.__set__.exclude(this);\n        R.eve.unbind(\"raphael.*.*.\" + this.id);\n        R._tear(this, this.paper);\n        this.node.parentNode.removeChild(this.node);\n        this.shape && this.shape.parentNode.removeChild(this.shape);\n        for (var i in this) {\n            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n        }\n        this.removed = true;\n    };\n    elproto.attr = function (name, value) {\n        if (this.removed) {\n            return this;\n        }\n        if (name == null) {\n            var res = {};\n            for (var a in this.attrs) if (this.attrs[has](a)) {\n                res[a] = this.attrs[a];\n            }\n            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n            res.transform = this._.transform;\n            return res;\n        }\n        if (value == null && R.is(name, \"string\")) {\n            if (name == fillString && this.attrs.fill == \"none\" && this.attrs.gradient) {\n                return this.attrs.gradient;\n            }\n            var names = name.split(separator),\n                out = {};\n            for (var i = 0, ii = names.length; i < ii; i++) {\n                name = names[i];\n                if (name in this.attrs) {\n                    out[name] = this.attrs[name];\n                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n                    out[name] = this.paper.customAttributes[name].def;\n                } else {\n                    out[name] = R._availableAttrs[name];\n                }\n            }\n            return ii - 1 ? out : out[names[0]];\n        }\n        if (this.attrs && value == null && R.is(name, \"array\")) {\n            out = {};\n            for (i = 0, ii = name.length; i < ii; i++) {\n                out[name[i]] = this.attr(name[i]);\n            }\n            return out;\n        }\n        var params;\n        if (value != null) {\n            params = {};\n            params[name] = value;\n        }\n        value == null && R.is(name, \"object\") && (params = name);\n        for (var key in params) {\n            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n        }\n        if (params) {\n            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n                this.attrs[key] = params[key];\n                for (var subkey in par) if (par[has](subkey)) {\n                    params[subkey] = par[subkey];\n                }\n            }\n            // this.paper.canvas.style.display = \"none\";\n            if (params.text && this.type == \"text\") {\n                this.textpath.string = params.text;\n            }\n            setFillAndStroke(this, params);\n            // this.paper.canvas.style.display = E;\n        }\n        return this;\n    };\n    elproto.toFront = function () {\n        !this.removed && this.node.parentNode.appendChild(this.node);\n        this.paper && this.paper.top != this && R._tofront(this, this.paper);\n        return this;\n    };\n    elproto.toBack = function () {\n        if (this.removed) {\n            return this;\n        }\n        if (this.node.parentNode.firstChild != this.node) {\n            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);\n            R._toback(this, this.paper);\n        }\n        return this;\n    };\n    elproto.insertAfter = function (element) {\n        if (this.removed) {\n            return this;\n        }\n        if (element.constructor == R.st.constructor) {\n            element = element[element.length - 1];\n        }\n        if (element.node.nextSibling) {\n            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);\n        } else {\n            element.node.parentNode.appendChild(this.node);\n        }\n        R._insertafter(this, element, this.paper);\n        return this;\n    };\n    elproto.insertBefore = function (element) {\n        if (this.removed) {\n            return this;\n        }\n        if (element.constructor == R.st.constructor) {\n            element = element[0];\n        }\n        element.node.parentNode.insertBefore(this.node, element.node);\n        R._insertbefore(this, element, this.paper);\n        return this;\n    };\n    elproto.blur = function (size) {\n        var s = this.node.runtimeStyle,\n            f = s.filter;\n        f = f.replace(blurregexp, E);\n        if (+size !== 0) {\n            this.attrs.blur = size;\n            s.filter = f + S + ms + \".Blur(pixelradius=\" + (+size || 1.5) + \")\";\n            s.margin = R.format(\"-{0}px 0 0 -{0}px\", round(+size || 1.5));\n        } else {\n            s.filter = f;\n            s.margin = 0;\n            delete this.attrs.blur;\n        }\n    };\n\n    R._engine.path = function (pathString, vml) {\n        var el = createNode(\"shape\");\n        el.style.cssText = cssDot;\n        el.coordsize = zoom + S + zoom;\n        el.coordorigin = vml.coordorigin;\n        var p = new Element(el, vml),\n            attr = {fill: \"none\", stroke: \"#000\"};\n        pathString && (attr.path = pathString);\n        p.type = \"path\";\n        p.path = [];\n        p.Path = E;\n        setFillAndStroke(p, attr);\n        vml.canvas.appendChild(el);\n        var skew = createNode(\"skew\");\n        skew.on = true;\n        el.appendChild(skew);\n        p.skew = skew;\n        p.transform(E);\n        return p;\n    };\n    R._engine.rect = function (vml, x, y, w, h, r) {\n        var path = R._rectPath(x, y, w, h, r),\n            res = vml.path(path),\n            a = res.attrs;\n        res.X = a.x = x;\n        res.Y = a.y = y;\n        res.W = a.width = w;\n        res.H = a.height = h;\n        a.r = r;\n        a.path = path;\n        res.type = \"rect\";\n        return res;\n    };\n    R._engine.ellipse = function (vml, x, y, rx, ry) {\n        var res = vml.path(),\n            a = res.attrs;\n        res.X = x - rx;\n        res.Y = y - ry;\n        res.W = rx * 2;\n        res.H = ry * 2;\n        res.type = \"ellipse\";\n        setFillAndStroke(res, {\n            cx: x,\n            cy: y,\n            rx: rx,\n            ry: ry\n        });\n        return res;\n    };\n    R._engine.circle = function (vml, x, y, r) {\n        var res = vml.path(),\n            a = res.attrs;\n        res.X = x - r;\n        res.Y = y - r;\n        res.W = res.H = r * 2;\n        res.type = \"circle\";\n        setFillAndStroke(res, {\n            cx: x,\n            cy: y,\n            r: r\n        });\n        return res;\n    };\n    R._engine.image = function (vml, src, x, y, w, h) {\n        var path = R._rectPath(x, y, w, h),\n            res = vml.path(path).attr({stroke: \"none\"}),\n            a = res.attrs,\n            node = res.node,\n            fill = node.getElementsByTagName(fillString)[0];\n        a.src = src;\n        res.X = a.x = x;\n        res.Y = a.y = y;\n        res.W = a.width = w;\n        res.H = a.height = h;\n        a.path = path;\n        res.type = \"image\";\n        fill.parentNode == node && node.removeChild(fill);\n        fill.rotate = true;\n        fill.src = src;\n        fill.type = \"tile\";\n        res._.fillpos = [x, y];\n        res._.fillsize = [w, h];\n        node.appendChild(fill);\n        setCoords(res, 1, 1, 0, 0, 0);\n        return res;\n    };\n    R._engine.text = function (vml, x, y, text) {\n        var el = createNode(\"shape\"),\n            path = createNode(\"path\"),\n            o = createNode(\"textpath\");\n        x = x || 0;\n        y = y || 0;\n        text = text || \"\";\n        path.v = R.format(\"m{0},{1}l{2},{1}\", round(x * zoom), round(y * zoom), round(x * zoom) + 1);\n        path.textpathok = true;\n        o.string = Str(text);\n        o.on = true;\n        el.style.cssText = cssDot;\n        el.coordsize = zoom + S + zoom;\n        el.coordorigin = \"0 0\";\n        var p = new Element(el, vml),\n            attr = {\n                fill: \"#000\",\n                stroke: \"none\",\n                font: R._availableAttrs.font,\n                text: text\n            };\n        p.shape = el;\n        p.path = path;\n        p.textpath = o;\n        p.type = \"text\";\n        p.attrs.text = Str(text);\n        p.attrs.x = x;\n        p.attrs.y = y;\n        p.attrs.w = 1;\n        p.attrs.h = 1;\n        setFillAndStroke(p, attr);\n        el.appendChild(o);\n        el.appendChild(path);\n        vml.canvas.appendChild(el);\n        var skew = createNode(\"skew\");\n        skew.on = true;\n        el.appendChild(skew);\n        p.skew = skew;\n        p.transform(E);\n        return p;\n    };\n    R._engine.setSize = function (width, height) {\n        var cs = this.canvas.style;\n        this.width = width;\n        this.height = height;\n        width == +width && (width += \"px\");\n        height == +height && (height += \"px\");\n        cs.width = width;\n        cs.height = height;\n        cs.clip = \"rect(0 \" + width + \" \" + height + \" 0)\";\n        if (this._viewBox) {\n            R._engine.setViewBox.apply(this, this._viewBox);\n        }\n        return this;\n    };\n    R._engine.setViewBox = function (x, y, w, h, fit) {\n        R.eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n        var width = this.width,\n            height = this.height,\n            size = 1 / mmax(w / width, h / height),\n            H, W;\n        if (fit) {\n            H = height / h;\n            W = width / w;\n            if (w * H < width) {\n                x -= (width - w * H) / 2 / H;\n            }\n            if (h * W < height) {\n                y -= (height - h * W) / 2 / W;\n            }\n        }\n        this._viewBox = [x, y, w, h, !!fit];\n        this._viewBoxShift = {\n            dx: -x,\n            dy: -y,\n            scale: size\n        };\n        this.forEach(function (el) {\n            el.transform(\"...\");\n        });\n        return this;\n    };\n    var createNode;\n    R._engine.initWin = function (win) {\n            var doc = win.document;\n            doc.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\");\n            try {\n                !doc.namespaces.rvml && doc.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\");\n                createNode = function (tagName) {\n                    return doc.createElement('<rvml:' + tagName + ' class=\"rvml\">');\n                };\n            } catch (e) {\n                createNode = function (tagName) {\n                    return doc.createElement('<' + tagName + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n                };\n            }\n        };\n    R._engine.initWin(R._g.win);\n    R._engine.create = function () {\n        var con = R._getContainer.apply(0, arguments),\n            container = con.container,\n            height = con.height,\n            s,\n            width = con.width,\n            x = con.x,\n            y = con.y;\n        if (!container) {\n            throw new Error(\"VML container not found.\");\n        }\n        var res = new R._Paper,\n            c = res.canvas = R._g.doc.createElement(\"div\"),\n            cs = c.style;\n        x = x || 0;\n        y = y || 0;\n        width = width || 512;\n        height = height || 342;\n        res.width = width;\n        res.height = height;\n        width == +width && (width += \"px\");\n        height == +height && (height += \"px\");\n        res.coordsize = zoom * 1e3 + S + zoom * 1e3;\n        res.coordorigin = \"0 0\";\n        res.span = R._g.doc.createElement(\"span\");\n        res.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\";\n        c.appendChild(res.span);\n        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        if (container == 1) {\n            R._g.doc.body.appendChild(c);\n            cs.left = x + \"px\";\n            cs.top = y + \"px\";\n            cs.position = \"absolute\";\n        } else {\n            if (container.firstChild) {\n                container.insertBefore(c, container.firstChild);\n            } else {\n                container.appendChild(c);\n            }\n        }\n        res.renderfix = function () {};\n        return res;\n    };\n    R.prototype.clear = function () {\n        R.eve(\"raphael.clear\", this);\n        this.canvas.innerHTML = E;\n        this.span = R._g.doc.createElement(\"span\");\n        this.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\";\n        this.canvas.appendChild(this.span);\n        this.bottom = this.top = null;\n    };\n    R.prototype.remove = function () {\n        R.eve(\"raphael.remove\", this);\n        this.canvas.parentNode.removeChild(this.canvas);\n        for (var i in this) {\n            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n        }\n        return true;\n    };\n\n    var setproto = R.st;\n    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n        setproto[method] = (function (methodname) {\n            return function () {\n                var arg = arguments;\n                return this.forEach(function (el) {\n                    el[methodname].apply(el, arg);\n                });\n            };\n        })(method);\n    }\n}(Raphael);\n\n// BROWSERIFY MOD: export Raphael\nif (typeof module !== 'undefined') {\n    module.exports = Raphael;\n}\n","//jshint esnext: true\n\nconst INT_PATH = '/features/2014/08/illustrated_map/';\nvar IntSharing = require('../dep/intSharing');\n\nfunction Tooltip(parent_container, show_at, html){\n  this.$c = $('<div>')\n    .addClass('int_tooltip')\n    .appendTo(parent_container);\n  this.inner = $('<div>')\n    .addClass('int_tooltip_inner')\n    .appendTo(this.$c);\n  this.triangle = $('<div>')\n    .addClass('triangle')\n    .appendTo(this.$c);\n  if(html){\n    this.loadHTML(html);\n  }\n}\nTooltip.prototype = {\n  loadHTML:function(html){\n    this.inner\n      .empty()\n      .html(html);\n    this.btn_ex = $('<div>')\n      .addClass('btn_ex')\n      .html('x')\n      .appendTo(this.inner)\n      .click(()=>{\n        this.close();\n      });\n    return this;\n  },\n  showAround:function(raphael_obj){ //coords are the coords of the raphael object clicked\n    var self = this;\n    var container = this.$c;\n    var bbox = raphael_obj.getBBox();\n    var canvas = $(raphael_obj.length ? raphael_obj[0].paper.canvas : raphael_obj.paper.canvas);\n    var TOOLTIP_OFFSET_X = 15;\n    var positioned_on_left = bbox.x < canvas.width()/2;\n    var xpos = (\n      positioned_on_left ?\n        bbox.x2 + TOOLTIP_OFFSET_X :\n        bbox.x-container.outerWidth() - TOOLTIP_OFFSET_X\n      ) + canvas.offset().left;\n\n    var raphael_obj_center_y = (bbox.y2-(bbox.y2-bbox.y)/2);\n    var ypos = Math.min(canvas.height()-container.outerHeight(),Math.max(0, raphael_obj_center_y-(container.outerHeight()/2)));\n    var triangle_ypos = raphael_obj_center_y - ypos - 15;\n    //position triangle\n    this.triangle.css({\n      top:triangle_ypos,\n      left:(positioned_on_left?0:'auto'),\n      right:(positioned_on_left?'auto':0)\n    });\n    if(positioned_on_left){\n      this.triangle.addClass('flipped');\n    }\n    else{\n      this.triangle.removeClass('flipped');\n    }\n\n    //show\n    container\n      .css({\n        left:xpos,\n        top:ypos\n      })\n      .fadeIn(200);\n    $(window)\n      .off('keydown.tooltip_escape')\n      .on('keydown.tooltip_escape', (e)=>{\n        if(e.keyCode === 27){ // escape key\n          this.close();\n        }\n    });\n    return this;\n  },\n  close:function(callback){\n    var container = this.$c;\n    container.fadeOut(200,function(){\n      container.remove();\n      if(callback){\n        callback();\n      }\n    });\n  },\n  appendShareBtns:function(share_conf, callback){\n    var share_wrapper = $('<div>')\n      .addClass('share_wrapper')\n      .appendTo(this.inner);\n    share_conf.int_path = INT_PATH;\n    IntSharing.appendShareBtns(share_wrapper, share_conf);\n    if(callback){\n      callback();\n    }\n  }\n};\n\nmodule.exports = Tooltip;\n","'use strict';\n// For more information about browser field, check out the browser field at https://github.com/substack/browserify-handbook#browser-field.\n\nmodule.exports = {\n    // Create a <link> tag with optional data attributes\n    createLink: function(href, attributes) {\n        var head = document.head || document.getElementsByTagName('head')[0];\n        var link = document.createElement('link');\n\n        link.href = href;\n        link.rel = 'stylesheet';\n\n        for (var key in attributes) {\n            if ( ! attributes.hasOwnProperty(key)) {\n                continue;\n            }\n            var value = attributes[key];\n            link.setAttribute('data-' + key, value);\n        }\n\n        head.appendChild(link);\n    },\n    // Create a <style> tag with optional data attributes\n    createStyle: function(cssText, attributes) {\n        var head = document.head || document.getElementsByTagName('head')[0],\n            style = document.createElement('style');\n\n        style.type = 'text/css';\n\n        for (var key in attributes) {\n            if ( ! attributes.hasOwnProperty(key)) {\n                continue;\n            }\n            var value = attributes[key];\n            style.setAttribute('data-' + key, value);\n        }\n        \n        if (style.sheet) { // for jsdom and IE9+\n            style.innerHTML = cssText;\n            style.sheet.cssText = cssText;\n            head.appendChild(style);\n        } else if (style.styleSheet) { // for IE8 and below\n            head.appendChild(style);\n            style.styleSheet.cssText = cssText;\n        } else { // for Chrome, Firefox, and Safari\n            style.appendChild(document.createTextNode(cssText));\n            head.appendChild(style);\n        }\n    }\n};\n"]}