{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/drawing/kendo-drawing.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","954","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","$","window","kendo","kendoDrawing","drawing","kendoDrawingUtil","util","extendStatic","Class","kendoUtil","support","supportBrowser","browser","createPromise","promiseAll","HasObservers","Class$$1","this","arguments","prototype","Object","create","constructor","fn","init","observers","_observers","addObserver","element","push","removeObserver","index","indexOf","splice","trigger","methodName","event","_suspended","idx","length","observer","optionsChange","e","geometryChange","suspend","resume","Math","max","_observerField","field","value","append$1$1","first","second","literals","1","10","100","2","20","200","30","300","4","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","arabicToRoman","n","values","roman","shift","UNDEFINED","defined","defId","definitionId","DEG_TO_RAD","PI","MAX_NUM","Number","MAX_VALUE","MIN_NUM","deg","radians","fromCharCode","String","encodeUTF8","input","output","i","code","charCodeAt","hi","low","isNaN","KEY_STR","encodeBase64","utfInput","chr1","chr2","chr3","enc1","enc2","enc3","enc4","charAt","eventCoordinates","x","location","y","pageX","clientX","pageY","clientY","eventElement","touch","initialTouch","target","isTransparent","color","last","array","limitValue","min","mergeSort","a","cmp","slice","merge","b","r","ai","bi","sort","floor","left","right","now","Date","getTime","rad","degrees","pow","round","precision","power","valueOrDefault","defaultValue","bindEvents","events","eventName","eventNames","trim","split","addEventListener","elementOffset","box","getBoundingClientRect","documentElement","document","top","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","elementStyles","styles","result","style","getComputedStyle","stylesArray","Array","isArray","getPixels","elementSize","size","size$1","width","parseInt","height","unbindEvents","name","removeEventListener","elementPadding","ref","paddingLeft","paddingTop","parseFloat","Matrix","d","multiplyCopy","matrix","invert","g","h","det","clone","equals","other","toArray","toString","separator","join","translate","unit","rotate","angle","cos","sin","scale","scaleX","scaleY","IDENTITY","matrixRegexp","parseMatrix","matrixString","match","members","map","Function","bind","concat","transformMatrix","transform","elementScale","parent","parentElement","parentMatrix","append","toString$1","OptionsStore","HasObservers$$1","options","prefix","this$1","member","_wrap","get","parts","part","set","current","_set","composite","parentObj","fieldName","obj","_clear","object","type","wrapped","setAccessor","getAccessor","defineAccessors","fields","capitalized","toUpperCase","substring","withAccessors","TBase","names","toMatrix","transformation","Point","superclass","staticAccessors","ZERO","origin","originPoint","translateWith","point","move","scaleCopy","transformCopy","distanceTo","dx","dy","sqrt","digits","doRound","arg0","arg1","arguments$1","minX","minY","maxX","maxY","minPoint","maxPoint","defineProperties","Size","Rect","cornerRadius","setOrigin","setSize","setCornerRadius","getOrigin","radius","getCornerRadius","getSize","topLeft","bottomRight","topRight","bottomLeft","center","bbox","tl","tr","br","bl","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","union","intersect","rect1","bottom","rect2","Transformation","_matrix","_optionsChange","multiply","transform$1","Element$1","Element","_initOptions","prototypeAccessors","nodeType","clip","parentTransform","currentTransform","combinedMatrix","elementTransform","elementMatrix","visible","opacity","clippedBBox","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","fill","stroke","ellipseExtremeAngles","rx","ry","extremeX","extremeY","atan2","PI_DIV_2","Circle$2","Circle","setCenter","setRadius","getCenter","pointAt","_pointAt","extremeAngles","currentPointX","currentPointY","currentPoint","inCircle","pointDistance","GRADIENT","paintable","anonymous","newFill","IDENTITY_MATRIX_HASH","measurable","matrixHash","_bboxCache","_matrixHash","_bbox","strokeWidth","geometryAccessor","defineGeometryAccessors","withGeometry","DEFAULT_STROKE","geometry","rawBBox","_geometry","PRECISION","close$1","tolerance","abs","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","s","t","MAX_INTERVAL","pow$1","accessors","Arc$2","Arc","radiusX","radiusY","startAngle","endAngle","anticlockwise","xRotation","radian","curvePoints","dir","interval","_arcInterval","intervalAngle","subIntervalsCount","ceil","subIntervalAngle","currentAngle","nextAngle","points","_intervalCurvePoints","cp1","cp2","endPoint","currentAngleX","bboxStartAngle","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","distance","angleRad","pointRadius","startPoint","intersection","calculateAngle","inAngleRange","start","end","largeArc","swipe","rotation","arcParameters","normalizeArcParameters","x1","y1","x2","y2","cx","cy","parameters","cosine","sine","xT","yT","sign","xt2","yt2","rx2","ry2","delta","constT","cxT","cyT","uX","uY","vX","vY","acos","angleCosine","signEndAngle","pop","unshift","ElementsArray","_splice","elements","_change","_add","_remove","howMany","_clearObserver","_setObserver","GeometryElementsArray","ElementsArray$$1","isOutOfEndPoint","controlPoint","rotatedPoint","calculateCurveAt","t1","toCubicPolynomial","ComplexNumber","real","img","add","cNumber","addConstant","negate","multiplyConstant","nthRoot","rad$$1","nthR","isReal","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","y3","z1","z2","q","Q","b3a","hasRootsInRange","rootField","range","polynomial","roots","curveIntersectionsCount","rayIntersection","intersectsRay","count","lineIntersectionsCount","intersects","inRange","pointAccessor","definePointAccessors","withPoints","Segment","anchor","controlIn","controlOut","bboxTo","toSegment","rect","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","arrayLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","segment","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","arr","ShapeMap","l","path","position","isRelative","lineTo","curveTo","v","toLineParamaters","arcTo","lastControlIn","previousCommand","paths","segments","reflectionPoint","cubicControlPoints","quadraticToCubicControlPoints","lastSegment","isVertical","insertPosition","third","scaledPoint","SEGMENT_REGEX","SPLIT_REGEX","MOVE","CLOSE","parseParameters","str","replace","number","parsePath","pathInstance","params","closePath","command","toLowerCase","moveTo","close","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","elementsClippedBoundingBox","Path","lineJoin","parse","MultiPath","arc","_addArcSegments","closed","previous","pathWidth","segmentBox","fromRect","fromArc","prototypeAccessors$1","instance","DEFAULT_STROKE$1","toPath","DEFAULT_FONT","DEFAULT_FILL","Text","content","font","measure","metrics","measureText","pos","Image$1","Image","src","_rect","traversable","childrenField","traverse","callback","children","child","Group","childrenChange","action","items","_reparent","insert","insertAt","remove","removeAt","clear","newParent","translateToPoint","transofrm","alignStart","align","axis","sizeField","alignStartReverse","DEFAULT_OPTIONS","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","wrap","revers","forEach","forEachReverse","Layout","Group$$1","extend","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","reverse","justifyAlign","reflow","elementStart","group","groupBox","_initGroups","groups","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","arrangeElements","groupIdx","lineSize","bboxes","scaledStart","scaledSize","newStart","_newGroup","addGroup","_addToGroup","Rect$2","Rect$$1","alignElements","alignment","vAlign","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","stack","vStack","getStacks","maxSize","stacks","stackSize","addElementToStack","wrapElements","startElement","elementIdx","vWrap","fit","rectSize","StopsArray","optionsAccessor","defineOptionsAccessors","withOptions","GradientStop","offset","arg","stop","Gradient","stops","_createStops","_userSpace","userSpace","addStop","removeStop","points$1","LinearGradient","RadialGradient","_radius","_fallbackFill","fallbackFill","swing","linear","easeOutElastic","time","diff","asin","instance$1","easingFunctions","AnimationFactory","_items","register","Animation","_options","duration","easing","setup","step","play","delay","finish","abort","setTimeout","loop","_stopped","wallTime","easingPosition","animationFrame","destroy","PathParser","multiPath","BaseNode","srcElement","childNodes","observe","load","node","removeSelf","invalidate","Surface$2","Observable$$1","Surface","_kendoExportVisual","exportVisual","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","draw","unbind","eventTarget","domNode","_kendoNode","currentSize","_size","_resize","resize","force","suspendTracking","_suspendedTracking","resumeTracking","originalEvent","_elementOffset","padding","_surfacePoint","coord","inverseTransform","Observable","renderAttr","renderAllAttr","attrs","renderStyle","NODE_MAP","SVG_NS","NONE","renderSVG","container","svg","innerHTML","testFragment","testContainer","createElement","hasParser","DOMParser","firstChild","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","appendChild","renderSVG$1","TRANSFORM","DefinitionMap","isDefinition","baseUrl","base","getElementsByTagName","href","url","msie","hashIndex","Node","BaseNode$$1","definitions","clearDefinitions","childNode","createDefinitions","attachTo","root","domElement","render","insertBefore","setElement","nodes","childElement","parentNode","removeChild","template","renderChildren","css","updateDefinition","attr","removeAttr","setAttribute","allAttr","allCss","removeAttribute","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definition","definitionChange","refUrl","renderDefinitions","mapDefinitions","skipBaseHref","baseHref","GradientStopNode","Node$$1","renderOffset","GradientNode","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","LinearGradientNode","GradientNode$$1","RadialGradientNode","ClipNode","DefinitionNode","definitionMap","addDefinitions","removeDefinitions","createDefinition","item","addDefinition","mapItem","removeDefinition","RootNode","defs","firstElementChild","DASH_ARRAYS","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","SOLID","BUTT","ATTRIBUTE_MAP","SPACE","PathNode","renderData","mapFill","mapStroke","textContent","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","ArcNode","PathNode$$1","CircleNode","GroupNode","ImageNode","mapPosition","mapSource","renderPosition","encode","htmlEncode","renderSource","MultiPathNode","RectNode","ENTITY_REGEX","decodeEntities","text","test","_element","lastIndex","innerText","TextNode","setY","baseline","renderContent","normalizeText","renderTextAnchor","rtl","edge","RTL","alignToScreen","ctm","getScreenCTM","Surface$3","BaseSurface","_root","direction","_template","_rootElement","click","mouseover","mouseout","mousemove","viewBox","_offset","visual","NODE_MAP$2","renderPath","ctx","prevSeg","prevOut","bezierCurveTo","Node$2","initClip","clearClip","setClip","beginPath","setTransform","loadElements","cors","setOpacity","globalAlpha","opactity","GroupNode$2","renderTo","save","restore","FRAME_DELAY","RootNode$2","canvas","getContext","invalidateHandler","_invalidate","throttle","_rescale","_devicePixelRatio","devicePixelRatio","fixedScale","clearRect","QuadRoot","shapes","shape","_quadNode","pointShapes","QuadNode","QuadRoot$$1","inBounds","nodeRect","nodeBottomRight","inserted","_initChildren","halfWidth","halfHeight","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","zIndexComparer","zIndex","levelWeight","parents","_zIndex","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","SurfaceCursor","surface","addGradientStops","gradient","parseColor","addColorStop","toCssRgba","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","PathNode$2","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","ArcNode$2","CircleNode$2","ImageNode$2","onLoad","onError","loading","crossOrigin","complete","onload","onerror","state","drawImage","resolve","reject","MultiPathNode$2","RectNode$2","TextNode$2","textAlign","fillText","strokeText","instance$2","support$1","Surface$4","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","image","rootElement","loadingStates","promise","resolveDataURL","data","toDataURL","then","currentShape","_currentShape","hasDocument","supportsCanvas","supportsSVG","implementation","hasFeature","SurfaceFactory","preferred","logToConsole","navigator","exportGroup","rootGroup","exportRoot","svg$1","exportImage","defaults","surfaceOptions","display","body","exportSVG","raw","slice$1$1","thing","KENDO_PSEUDO_ELEMENT","IMAGE_CACHE","nodeInfo","inBrowser","microsoft","TextRect","Text$$1","_pdfRect","addClass","el","cls","classList","className","removeClass","reduce","word","setCSS","keys","key","matches","selector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","closest","cloneNodes","cloneNode","$el","$clone","tagName","checked","selected","nextSibling","dive","canvases","canvas$$1","orig","jQuery","getXY","drawDOM","pdf","defineFont","getFontFaces","ownerDocument","doOne","setTransform$1","_clipbox","_stackingContext","avoidLinks","_avoidLinks","renderElement","makeTemplate","div","handlePageBreaks","forceBreak","pageWidth","pageHeight","margin","doc","pages","copy","_destructive","adjust","doPageBreak","splitElement","page","makePage","pageNum","totalPages","cacheImages","keepTogether","offsetHeight","tag","getAttribute","tableLayout","getComputedStyle$1","bottomPadding","getPropertyValue","bottomBorder","saveAdjust","isFirst","breakAtElement","fall","fallsOnMargin","splitText","firstInParent","table","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","createRange","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","boxSizing","overflow","pageClassName","available","len","selectNodeContents","nextnode","findEOP","setEnd","endOffset","li","tfoot","ol","paddingRight","beforePageBreak","whenImagesAreActuallyLoaded","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","Boolean","multiPage","_ignoreMargin","progress","canceled","next","cancel","drawText","pushNodeInfo","renderText","_renderElement","popNodeInfo","parseBackgroundImage","tok_linear_gradient","tok_percent","tok_length","tok_keyword","tok_angle","tok_whitespace","tok_popen","tok_pclose","tok_comma","tok_url","tok_content","cache1","cache2","tok","hasOwnProperty","skip_ws","exec","substr","read","token","read_stop","percent","toRGB","read_linear_gradient","propName","to1","to2","parseAngle","to","read_url","splitProperty","cache","cacheKey","ret","last$$1","in_paren","in_string","looking_at","getFontURL","getFontHeight","styleSheets","doStylesheet","ss","rules","cssRules","ex","addRules","findFonts","rule","cssText","styleSheet","family","bold","italic","addRule","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","resetCounter","val","doCounters","updateCounters","counterReset","counterIncrement","parseColor$1","pending","images","urls","bg","alphaNumeral","decoration","createsStackingContext","updateClipbox","emptyClipbox","cb","prop","pseudoElt","defa","webkit","mozilla","opera","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","func","prev","getBorderRadius","sanitizeRadius","getContentBox","innerBox","wt","wr","wb","wl","getTransform","transform$$1","radiansToDegrees","num","setClipping","clipPath","addArcToPath","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","tmp","formatCounter","evalPseudoElementContent","displayCounter","getCssText","_renderWithPseudoElements","fake","pseudo","saveClass","kind","place","psel","backgroundColor","textOverflow","saveTextOverflow","backgroundImage","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","version","currentStyle","boxes","cells","innerbox","getClientRects","adjustBoxes","drawOneBox","_pdfLink","drawBullet","clipit","isFormField","maybeRenderWidget","renderContents","tableBorderLeft","tableBorderTop","tableBox","firstCell","rows","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","drawBackground","background","drawOneBackground","drawBackgroundImage","gradientRenderer","img_width","img_height","renderBG","aspect_ratio","orgBox","rewX","rewY","repeatX","listStyleType","listStylePosition","_drawBullet","bullet","fontSize","lineHeight","fontFamily","elementIndex","k","isLast","shouldDrawLeft","shouldDrawRight","inv","pxlen","scaledAngle","atan","tan","implicit","console","log","widget","widgetInstance","exportDOMVisual","wrap$$1","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","selectedIndex","renderCheckbox","renderFormField","option","whiteSpace","multiple","xml","XMLSerializer","serializeToString","dataURL","floats","positioned","floating","search","align$$1","isJustified","columnCount","textTransform","estimateLineLength","prevLineBottom","underline","lineThrough","overline","hasDecoration","doChunk","selectNode","decorate","actuallyGetRangeBoundingRect","chrome","rectangles","Infinity","done","origStart","setStart","found","findEOL","eol","startOffset","cc","indent","line","ypos","groupInStackingContext","main","_dom_zIndex","visibility","mmul","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","deepExtend","dataviz","objectKey","Color","955","956","957"],"mappings":"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","file":"js/chunk-vendors~b1844914.9c025c49.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(954);\n\tmodule.exports = __webpack_require__(954);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 954:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/***********************************************************************\n\t * WARNING: this file is auto-generated. If you change it directly,\n\t * your modifications will eventually be lost. The source code is in\n\t * `kendo-drawing` repository, you should make your changes there and\n\t * run `src-modules/sync.sh` in this repository.\n\t */\n\t(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(955), __webpack_require__(956), __webpack_require__(957) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($) {\n\n\t/* jshint eqnull:true */\n\t/* jshint -W058 */\n\t/* jshint -W069 */\n\t/* jshint latedef: nofunc */\n\t/* jshint shadow: true */\n\t/* jshint unused: false */\n\n\twindow.kendo = window.kendo || {};\n\tvar kendoDrawing = kendo.drawing;\n\tvar kendoDrawingUtil = kendoDrawing.util;\n\tvar extendStatic = kendoDrawingUtil.extendStatic;\n\tvar Class = kendo.Class;\n\tvar kendoUtil = kendo.util;\n\tvar support = kendo.support;\n\tvar supportBrowser = support.browser;\n\n\tvar createPromise = kendoDrawingUtil.createPromise;\n\tvar promiseAll = kendoDrawingUtil.promiseAll;\n\n\tvar HasObservers = (function (Class$$1) {\n\t function HasObservers () {\n\t Class$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(HasObservers, Class$$1);\n\t HasObservers.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t HasObservers.prototype.constructor = HasObservers;\n\t HasObservers.fn = HasObservers.prototype;\n\t HasObservers.fn.init = HasObservers.fn.constructor;\n\n\t HasObservers.prototype.observers = function observers () {\n\t this._observers = this._observers || [];\n\t return this._observers;\n\t };\n\n\t HasObservers.prototype.addObserver = function addObserver (element) {\n\t if (!this._observers) {\n\t this._observers = [ element ];\n\t } else {\n\t this._observers.push(element);\n\t }\n\t return this;\n\t };\n\n\t HasObservers.prototype.removeObserver = function removeObserver (element) {\n\t var observers = this.observers();\n\t var index = observers.indexOf(element);\n\t if (index !== -1) {\n\t observers.splice(index, 1);\n\t }\n\t return this;\n\t };\n\n\t HasObservers.prototype.trigger = function trigger (methodName, event) {\n\t var observers = this._observers;\n\n\t if (observers && !this._suspended) {\n\t for (var idx = 0; idx < observers.length; idx++) {\n\t var observer = observers[idx];\n\t if (observer[methodName]) {\n\t observer[methodName](event);\n\t }\n\t }\n\t }\n\t return this;\n\t };\n\n\t HasObservers.prototype.optionsChange = function optionsChange (e) {\n\t if (e === void 0) { e = {}; }\n\n\t e.element = this;\n\t this.trigger(\"optionsChange\", e);\n\t };\n\n\t HasObservers.prototype.geometryChange = function geometryChange () {\n\t this.trigger(\"geometryChange\", {\n\t element: this\n\t });\n\t };\n\n\t HasObservers.prototype.suspend = function suspend () {\n\t this._suspended = (this._suspended || 0) + 1;\n\t return this;\n\t };\n\n\t HasObservers.prototype.resume = function resume () {\n\t this._suspended = Math.max((this._suspended || 0) - 1, 0);\n\t return this;\n\t };\n\n\t HasObservers.prototype._observerField = function _observerField (field, value) {\n\t if (this[field]) {\n\t this[field].removeObserver(this);\n\t }\n\t this[field] = value;\n\t value.addObserver(this);\n\t };\n\n\t return HasObservers;\n\t}(Class));\n\n\tfunction append$1$1(first, second) {\n\t first.push.apply(first, second);\n\t return first;\n\t}\n\n\t/* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\n\tvar literals = {\n\t 1 : \"i\", 10 : \"x\", 100 : \"c\",\n\t 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n\t 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n\t 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n\t 5 : \"v\", 50 : \"l\", 500 : \"d\",\n\t 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n\t 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n\t 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n\t 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n\t 1000 : \"m\"\n\t};\n\n\tfunction arabicToRoman(n) {\n\t var values = [ 1000,\n\t 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n\t 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n\t 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\n\n\t var roman = \"\";\n\t while (n > 0) {\n\t if (n < values[0]) {\n\t values.shift();\n\t } else {\n\t roman += literals[values[0]];\n\t n -= values[0];\n\t }\n\t }\n\t return roman;\n\t}\n\n\tvar UNDEFINED = \"undefined\";\n\n\tfunction defined(value) {\n\t return typeof value !== UNDEFINED;\n\t}\n\n\tvar defId = 1;\n\n\tfunction definitionId() {\n\t return \"kdef\" + defId++;\n\t}\n\n\tvar DEG_TO_RAD = Math.PI / 180;\n\tvar MAX_NUM = Number.MAX_VALUE;\n\tvar MIN_NUM = -Number.MAX_VALUE;\n\n\tfunction deg(radians) {\n\t return radians / DEG_TO_RAD;\n\t}\n\n\tvar fromCharCode = String.fromCharCode;\n\n\t// Encodes a string as UTF-8\n\tfunction encodeUTF8(input) {\n\t var output = \"\";\n\n\t for (var i = 0; i < input.length; i++) {\n\t var code = input.charCodeAt(i);\n\n\t if (0xD800 <= code && code <= 0xDBFF) {\n\t var hi = code;\n\t var low = input.charCodeAt(++i);\n\n\t if (!isNaN(low)) {\n\t // Combine high and low surrogate\n\t // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n\t code = (hi - 0xD800) * 0x400 +\n\t (low - 0xDC00) + 0x10000;\n\t }\n\t }\n\n\t if (code < 0x80) {\n\t // One byte\n\t output += fromCharCode(code);\n\t } else if (code < 0x800) {\n\t // Two bytes\n\t output += fromCharCode(0xC0 | (code >>> 6));\n\t output += fromCharCode(0x80 | (code & 0x3f));\n\t } else if (code < 0x10000) {\n\t // Three bytes\n\t output += fromCharCode(0xE0 | (code >>> 12));\n\t output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n\t output += fromCharCode(0x80 | (code & 0x3f));\n\t } else if (code < 0x10FFFF) {\n\t // Four bytes\n\t output += fromCharCode(0xF0 | (code >>> 18));\n\t output += fromCharCode(0x80 | (code >>> 12 & 0x3f));\n\t output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n\t output += fromCharCode(0x80 | (code & 0x3f));\n\t }\n\t }\n\n\t return output;\n\t}\n\n\t// Encodes a string as UTF-16 big-endian\n\n\tvar KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\tfunction encodeBase64(input) {\n\t var output = \"\";\n\t var i = 0;\n\n\t var utfInput = encodeUTF8(input);\n\n\t while (i < utfInput.length) {\n\t var chr1 = utfInput.charCodeAt(i++);\n\t var chr2 = utfInput.charCodeAt(i++);\n\t var chr3 = utfInput.charCodeAt(i++);\n\n\t var enc1 = chr1 >> 2;\n\t var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n\t var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n\t var enc4 = chr3 & 63;\n\n\t if (isNaN(chr2)) {\n\t enc3 = enc4 = 64;\n\t } else if (isNaN(chr3)) {\n\t enc4 = 64;\n\t }\n\n\t output = output +\n\t KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n\t KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n\t }\n\n\t return output;\n\t}\n\n\tfunction eventCoordinates(e) {\n\t if (defined((e.x || {}).location)) {\n\t return {\n\t x: e.x.location,\n\t y: e.y.location\n\t };\n\t }\n\n\t return {\n\t x: e.pageX || e.clientX || 0,\n\t y: e.pageY || e.clientY || 0\n\t };\n\t}\n\n\tfunction eventElement(e) {\n\t if (e === void 0) { e = {}; }\n\n\t return e.touch ? e.touch.initialTouch : e.target;\n\t}\n\n\tfunction isTransparent(color) {\n\t return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n\t}\n\n\tfunction last(array) {\n\t if (array) {\n\t return array[array.length - 1];\n\t }\n\t}\n\n\tfunction limitValue(value, min, max) {\n\t return Math.max(Math.min(value, max), min);\n\t}\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\t// mergeSort is stable.\n\tfunction mergeSort(a, cmp) {\n\t if (a.length < 2) {\n\t return a.slice();\n\t }\n\t function merge(a, b) {\n\t var r = [], ai = 0, bi = 0, i = 0;\n\t while (ai < a.length && bi < b.length) {\n\t if (cmp(a[ai], b[bi]) <= 0) {\n\t r[i++] = a[ai++];\n\t } else {\n\t r[i++] = b[bi++];\n\t }\n\t }\n\t if (ai < a.length) {\n\t r.push.apply(r, a.slice(ai));\n\t }\n\t if (bi < b.length) {\n\t r.push.apply(r, b.slice(bi));\n\t }\n\t return r;\n\t }\n\t return (function sort(a) {\n\t if (a.length <= 1) {\n\t return a;\n\t }\n\t var m = Math.floor(a.length / 2);\n\t var left = a.slice(0, m);\n\t var right = a.slice(m);\n\t left = sort(left);\n\t right = sort(right);\n\t return merge(left, right);\n\t })(a);\n\t}\n\n\tvar now = Date.now || function() {\n\t return new Date().getTime();\n\t};\n\n\tfunction rad(degrees) {\n\t return degrees * DEG_TO_RAD;\n\t}\n\n\tfunction pow(p) {\n\t if (p) {\n\t return Math.pow(10, p);\n\t }\n\n\t return 1;\n\t}\n\n\tfunction round(value, precision) {\n\t var power = pow(precision);\n\t return Math.round(value * power) / power;\n\t}\n\n\tfunction valueOrDefault(value, defaultValue) {\n\t return defined(value) ? value : defaultValue;\n\t}\n\n\tfunction bindEvents(element, events) {\n\t for (var eventName in events) {\n\t var eventNames = eventName.trim().split(\" \");\n\t for (var idx = 0; idx < eventNames.length; idx++) {\n\t element.addEventListener(eventNames[idx], events[eventName], false);\n\t }\n\t }\n\t}\n\n\tfunction elementOffset(element) {\n\t var box = element.getBoundingClientRect();\n\n\t var documentElement = document.documentElement;\n\n\t return {\n\t top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n\t left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n\t };\n\t}\n\n\tfunction elementStyles(element, styles) {\n\t var result = {};\n\t var style = window.getComputedStyle(element) || {};\n\t var stylesArray = Array.isArray(styles) ? styles : [ styles ];\n\n\t for (var idx = 0; idx < stylesArray.length; idx++) {\n\t var field = stylesArray[idx];\n\t result[field] = style[field];\n\t }\n\n\t return result;\n\t}\n\n\tfunction getPixels(value) {\n\t if (isNaN(value)) {\n\t return value;\n\t }\n\t return value + \"px\";\n\t}\n\n\tfunction elementSize(element, size) {\n\t if (size) {\n\t var width = size.width;\n\t var height = size.height;\n\n\t if (defined(width)) {\n\t element.style.width = getPixels(width);\n\t }\n\n\t if (defined(height)) {\n\t element.style.height = getPixels(height);\n\t }\n\n\t } else {\n\t var size$1 = elementStyles(element, [ 'width', 'height' ]);\n\n\t return {\n\t width: parseInt(size$1.width, 10),\n\t height: parseInt(size$1.height, 10)\n\t };\n\t }\n\t}\n\n\tfunction unbindEvents(element, events) {\n\t if (events === void 0) { events = {}; }\n\n\t for (var name in events) {\n\t var eventNames = name.trim().split(\" \");\n\t for (var idx = 0; idx < eventNames.length; idx++) {\n\t element.removeEventListener(eventNames[idx], events[name], false);\n\t }\n\t }\n\t}\n\n\tfunction elementPadding(element) {\n\t var ref = elementStyles(element, [ \"paddingLeft\", \"paddingTop\" ]);\n\t var paddingLeft = ref.paddingLeft;\n\t var paddingTop = ref.paddingTop;\n\t return {\n\t top: parseFloat(paddingTop),\n\t left: parseFloat(paddingLeft)\n\t };\n\t}\n\n\tvar Matrix = (function (Class$$1) {\n\t function Matrix(a, b, c, d, e, f) {\n\t if (a === void 0) { a = 0; }\n\t if (b === void 0) { b = 0; }\n\t if (c === void 0) { c = 0; }\n\t if (d === void 0) { d = 0; }\n\t if (e === void 0) { e = 0; }\n\t if (f === void 0) { f = 0; }\n\n\t Class$$1.call(this);\n\n\t this.a = a;\n\t this.b = b;\n\t this.c = c;\n\t this.d = d;\n\t this.e = e;\n\t this.f = f;\n\t }\n\n\t extendStatic(Matrix, Class$$1);\n\t Matrix.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t Matrix.prototype.constructor = Matrix;\n\t Matrix.fn = Matrix.prototype;\n\t Matrix.fn.init = Matrix.fn.constructor;\n\n\t Matrix.prototype.multiplyCopy = function multiplyCopy (matrix) {\n\t return new Matrix(\n\t this.a * matrix.a + this.c * matrix.b,\n\t this.b * matrix.a + this.d * matrix.b,\n\t this.a * matrix.c + this.c * matrix.d,\n\t this.b * matrix.c + this.d * matrix.d,\n\t this.a * matrix.e + this.c * matrix.f + this.e,\n\t this.b * matrix.e + this.d * matrix.f + this.f\n\t );\n\t };\n\n\t Matrix.prototype.invert = function invert () {\n\t var ref = this;\n\t var a = ref.a;\n\t var b = ref.b;\n\t var d = ref.c;\n\t var e = ref.d;\n\t var g = ref.e;\n\t var h = ref.f;\n\t var det = a * e - b * d;\n\n\t if (det === 0) {\n\t return null;\n\t }\n\n\t return new Matrix(e / det, -b / det, -d / det, a / det,\n\t (d * h - e * g) / det, (b * g - a * h) / det);\n\t };\n\n\t Matrix.prototype.clone = function clone () {\n\t return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n\t };\n\n\t Matrix.prototype.equals = function equals (other) {\n\t if (!other) {\n\t return false;\n\t }\n\n\t return this.a === other.a && this.b === other.b &&\n\t this.c === other.c && this.d === other.d &&\n\t this.e === other.e && this.f === other.f;\n\t };\n\n\t Matrix.prototype.round = function round$1 (precision) {\n\t this.a = round(this.a, precision);\n\t this.b = round(this.b, precision);\n\t this.c = round(this.c, precision);\n\t this.d = round(this.d, precision);\n\t this.e = round(this.e, precision);\n\t this.f = round(this.f, precision);\n\n\t return this;\n\t };\n\n\t Matrix.prototype.toArray = function toArray (precision) {\n\t var result = [ this.a, this.b, this.c, this.d, this.e, this.f ];\n\n\t if (defined(precision)) {\n\t for (var i = 0; i < result.length; i++) {\n\t result[i] = round(result[i], precision);\n\t }\n\t }\n\n\t return result;\n\t };\n\n\t Matrix.prototype.toString = function toString (precision, separator) {\n\t if (separator === void 0) { separator = \",\"; }\n\n\t return this.toArray(precision).join(separator);\n\t };\n\n\t Matrix.translate = function translate (x, y) {\n\t return new Matrix(1, 0, 0, 1, x, y);\n\t };\n\n\t Matrix.unit = function unit () {\n\t return new Matrix(1, 0, 0, 1, 0, 0);\n\t };\n\n\t Matrix.rotate = function rotate (angle, x, y) {\n\t var matrix = new Matrix();\n\t matrix.a = Math.cos(rad(angle));\n\t matrix.b = Math.sin(rad(angle));\n\t matrix.c = -matrix.b;\n\t matrix.d = matrix.a;\n\t matrix.e = (x - x * matrix.a + y * matrix.b) || 0;\n\t matrix.f = (y - y * matrix.a - x * matrix.b) || 0;\n\n\t return matrix;\n\t };\n\n\t Matrix.scale = function scale (scaleX, scaleY) {\n\t return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n\t };\n\n\t return Matrix;\n\t}(Class));\n\n\tMatrix.IDENTITY = Matrix.unit();\n\n\tvar matrixRegexp = /matrix\\((.*)\\)/;\n\n\tfunction parseMatrix(matrixString) {\n\t var match = matrixString.match(matrixRegexp);\n\t if (match === null || match.length !== 2) {\n\t return Matrix.unit();\n\t }\n\n\t var members = match[1].split(',').map(function (x) { return parseFloat(x); });\n\t return new (Function.prototype.bind.apply( Matrix, [ null ].concat( members) ));\n\t}\n\n\tfunction transformMatrix(element) {\n\t var transform = getComputedStyle(element).transform;\n\n\t if (transform === 'none') {\n\t return Matrix.unit();\n\t }\n\n\t return parseMatrix(transform);\n\t}\n\n\tfunction elementScale(element) {\n\t if (!element) {\n\t return Matrix.unit();\n\t }\n\n\t var matrix = transformMatrix(element);\n\t var parent = element.parentElement;\n\t while (parent) {\n\t var parentMatrix = transformMatrix(parent);\n\t matrix = matrix.multiplyCopy(parentMatrix);\n\t parent = parent.parentElement;\n\t }\n\n\t matrix.b = matrix.c = matrix.e = matrix.f = 0;\n\t return matrix;\n\t}\n\n\tvar util = {\n\t\tappend: append$1$1,\n\t\tarabicToRoman: arabicToRoman,\n\t\tcreatePromise: createPromise,\n\t\tdefined: defined,\n\t\tdefinitionId: definitionId,\n\t\tdeg: deg,\n\t\tencodeBase64: encodeBase64,\n\t\teventCoordinates: eventCoordinates,\n\t\teventElement: eventElement,\n\t\tisTransparent: isTransparent,\n\t\tlast: last,\n\t\tlimitValue: limitValue,\n\t\tmergeSort: mergeSort,\n\t\tnow: now,\n\t\tpromiseAll: promiseAll,\n\t\trad: rad,\n\t\tround: round,\n\t\tvalueOrDefault: valueOrDefault,\n\t\tbindEvents: bindEvents,\n\t\telementOffset: elementOffset,\n\t\telementSize: elementSize,\n\t\telementStyles: elementStyles,\n\t\tunbindEvents: unbindEvents,\n\t\telementPadding: elementPadding,\n\t\telementScale: elementScale,\n\t\tDEG_TO_RAD: DEG_TO_RAD,\n\t\tMAX_NUM: MAX_NUM,\n\t\tMIN_NUM: MIN_NUM\n\t};\n\n\tvar toString$1 = {}.toString;\n\n\tvar OptionsStore = (function (HasObservers$$1) {\n\t function OptionsStore(options, prefix) {\n\t var this$1 = this;\n\t if (prefix === void 0) { prefix = \"\"; }\n\n\t HasObservers$$1.call(this);\n\n\t this.prefix = prefix;\n\n\t for (var field in options) {\n\t var member = options[field];\n\t member = this$1._wrap(member, field);\n\t this$1[field] = member;\n\t }\n\t }\n\n\t extendStatic(OptionsStore, HasObservers$$1);\n\t OptionsStore.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t OptionsStore.prototype.constructor = OptionsStore;\n\t OptionsStore.fn = OptionsStore.prototype;\n\t OptionsStore.fn.init = OptionsStore.fn.constructor;\n\n\t OptionsStore.prototype.get = function get (field) {\n\t var parts = field.split(\".\");\n\t var result = this;\n\n\t while (parts.length && result) {\n\t var part = parts.shift();\n\t result = result[part];\n\t }\n\n\t return result;\n\t };\n\n\t OptionsStore.prototype.set = function set (field, value) {\n\t var current = this.get(field);\n\n\t if (current !== value) {\n\t this._set(field, this._wrap(value, field));\n\t this.optionsChange({\n\t field: this.prefix + field,\n\t value: value\n\t });\n\t }\n\t };\n\n\t OptionsStore.prototype._set = function _set (field, value) {\n\t var this$1 = this;\n\n\t var composite = field.indexOf(\".\") >= 0;\n\t var parentObj = this;\n\t var fieldName = field;\n\n\t if (composite) {\n\t var parts = fieldName.split(\".\");\n\t var prefix = this.prefix;\n\n\t while (parts.length > 1) {\n\t fieldName = parts.shift();\n\t prefix += fieldName + \".\";\n\n\t var obj = parentObj[fieldName];\n\n\t if (!obj) {\n\t obj = new OptionsStore({}, prefix);\n\t obj.addObserver(this$1);\n\t parentObj[fieldName] = obj;\n\t }\n\t parentObj = obj;\n\t }\n\t fieldName = parts[0];\n\t }\n\n\t parentObj._clear(fieldName);\n\t parentObj[fieldName] = value;\n\t };\n\n\t OptionsStore.prototype._clear = function _clear (field) {\n\t var current = this[field];\n\t if (current && current.removeObserver) {\n\t current.removeObserver(this);\n\t }\n\t };\n\n\t OptionsStore.prototype._wrap = function _wrap (object, field) {\n\t var type = toString$1.call(object);\n\t var wrapped = object;\n\n\t if (wrapped !== null && defined(wrapped) && type === \"[object Object]\") {\n\t if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n\t wrapped = new OptionsStore(wrapped, this.prefix + field + \".\");\n\t }\n\n\t wrapped.addObserver(this);\n\t }\n\n\t return wrapped;\n\t };\n\n\t return OptionsStore;\n\t}(HasObservers));\n\n\tfunction setAccessor(field) {\n\t return function(value) {\n\t if (this[field] !== value) {\n\t this[field] = value;\n\t this.geometryChange();\n\t }\n\n\t return this;\n\t };\n\t}\n\n\tfunction getAccessor(field) {\n\t return function() {\n\t return this[field];\n\t };\n\t}\n\n\tfunction defineAccessors(fn, fields) {\n\t for (var i = 0; i < fields.length; i++) {\n\t var name = fields[i];\n\t var capitalized = name.charAt(0).toUpperCase() +\n\t name.substring(1, name.length);\n\n\t fn[\"set\" + capitalized] = setAccessor(name);\n\t fn[\"get\" + capitalized] = getAccessor(name);\n\t }\n\t}\n\n\tvar withAccessors = function (TBase, names) {\n\t var result = (function (TBase) {\n\t function result () {\n\t TBase.apply(this, arguments);\n\t }extendStatic(result, TBase);\n\t result.prototype = Object.create( TBase && TBase.prototype );\n\t result.prototype.constructor = result;\n\t result.fn = result.prototype;\n\t result.fn.init = result.fn.constructor;\n\n\t return result;\n\t }(TBase));\n\t defineAccessors(result.prototype, names);\n\n\t return result;\n\t};\n\n\tfunction toMatrix(transformation) {\n\t if (transformation && typeof transformation.matrix === \"function\") {\n\t return transformation.matrix();\n\t }\n\n\t return transformation;\n\t}\n\n\tvar Point = (function (superclass) {\n\t function Point(x, y) {\n\t superclass.call(this);\n\n\t this.x = x || 0;\n\t this.y = y || 0;\n\t }\n\n\t extendStatic(Point, superclass);\n\t Point.prototype = Object.create( superclass && superclass.prototype );\n\t Point.prototype.constructor = Point;\n\t Point.fn = Point.prototype;\n\t Point.fn.init = Point.fn.constructor;\n\n\t var staticAccessors = { ZERO: {} };\n\n\t Point.prototype.equals = function equals (other) {\n\t return other && other.x === this.x && other.y === this.y;\n\t };\n\n\t Point.prototype.clone = function clone () {\n\t return new Point(this.x, this.y);\n\t };\n\n\t Point.prototype.rotate = function rotate (angle, origin) {\n\t var originPoint = Point.create(origin) || Point.ZERO;\n\n\t return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\t };\n\n\t Point.prototype.translate = function translate (x, y) {\n\t this.x += x;\n\t this.y += y;\n\n\t this.geometryChange();\n\n\t return this;\n\t };\n\n\t Point.prototype.translateWith = function translateWith (point) {\n\t return this.translate(point.x, point.y);\n\t };\n\n\t Point.prototype.move = function move (x, y) {\n\t this.x = this.y = 0;\n\t return this.translate(x, y);\n\t };\n\n\t Point.prototype.scale = function scale (scaleX, scaleY) {\n\t if (scaleY === void 0) { scaleY = scaleX; }\n\n\t this.x *= scaleX;\n\t this.y *= scaleY;\n\n\t this.geometryChange();\n\n\t return this;\n\t };\n\n\t Point.prototype.scaleCopy = function scaleCopy (scaleX, scaleY) {\n\t return this.clone().scale(scaleX, scaleY);\n\t };\n\n\t Point.prototype.transform = function transform (transformation) {\n\t var matrix = toMatrix(transformation);\n\t var ref = this;\n\t var x = ref.x;\n\t var y = ref.y;\n\n\t this.x = matrix.a * x + matrix.c * y + matrix.e;\n\t this.y = matrix.b * x + matrix.d * y + matrix.f;\n\n\t this.geometryChange();\n\n\t return this;\n\t };\n\n\t Point.prototype.transformCopy = function transformCopy (transformation) {\n\t var point = this.clone();\n\n\t if (transformation) {\n\t point.transform(transformation);\n\t }\n\n\t return point;\n\t };\n\n\t Point.prototype.distanceTo = function distanceTo (point) {\n\t var dx = this.x - point.x;\n\t var dy = this.y - point.y;\n\n\t return Math.sqrt(dx * dx + dy * dy);\n\t };\n\n\t Point.prototype.round = function round$1 (digits) {\n\t this.x = round(this.x, digits);\n\t this.y = round(this.y, digits);\n\n\t this.geometryChange();\n\n\t return this;\n\t };\n\n\t Point.prototype.toArray = function toArray (digits) {\n\t var doRound = defined(digits);\n\t var x = doRound ? round(this.x, digits) : this.x;\n\t var y = doRound ? round(this.y, digits) : this.y;\n\n\t return [ x, y ];\n\t };\n\n\t Point.prototype.toString = function toString (digits, separator) {\n\t if (separator === void 0) { separator = \" \"; }\n\n\t var ref = this;\n\t var x = ref.x;\n\t var y = ref.y;\n\n\t if (defined(digits)) {\n\t x = round(x, digits);\n\t y = round(y, digits);\n\t }\n\n\t return x + separator + y;\n\t };\n\n\t Point.create = function create (arg0, arg1) {\n\t if (defined(arg0)) {\n\t if (arg0 instanceof Point) {\n\t return arg0;\n\t } else if (arguments.length === 1 && arg0.length === 2) {\n\t return new Point(arg0[0], arg0[1]);\n\t }\n\n\t return new Point(arg0, arg1);\n\t }\n\t };\n\n\t Point.min = function min () {\n\t var arguments$1 = arguments;\n\n\t var minX = MAX_NUM;\n\t var minY = MAX_NUM;\n\n\t for (var i = 0; i < arguments.length; i++) {\n\t var point = arguments$1[i];\n\t minX = Math.min(point.x, minX);\n\t minY = Math.min(point.y, minY);\n\t }\n\n\t return new Point(minX, minY);\n\t };\n\n\t Point.max = function max () {\n\t var arguments$1 = arguments;\n\n\t var maxX = MIN_NUM;\n\t var maxY = MIN_NUM;\n\n\t for (var i = 0; i < arguments.length; i++) {\n\t var point = arguments$1[i];\n\t maxX = Math.max(point.x, maxX);\n\t maxY = Math.max(point.y, maxY);\n\t }\n\n\t return new Point(maxX, maxY);\n\t };\n\n\t Point.minPoint = function minPoint () {\n\t return new Point(MIN_NUM, MIN_NUM);\n\t };\n\n\t Point.maxPoint = function maxPoint () {\n\t return new Point(MAX_NUM, MAX_NUM);\n\t };\n\n\t staticAccessors.ZERO.get = function () {\n\t return new Point(0, 0);\n\t };\n\n\t Object.defineProperties( Point, staticAccessors );\n\n\t return Point;\n\t}(withAccessors(HasObservers, [ \"x\", \"y\" ])));\n\n\tvar Size = (function (superclass) {\n\t function Size(width, height) {\n\t superclass.call(this);\n\n\t this.width = width || 0;\n\t this.height = height || 0;\n\t }\n\n\t extendStatic(Size, superclass);\n\t Size.prototype = Object.create( superclass && superclass.prototype );\n\t Size.prototype.constructor = Size;\n\t Size.fn = Size.prototype;\n\t Size.fn.init = Size.fn.constructor;\n\n\t var staticAccessors = { ZERO: {} };\n\n\t Size.prototype.equals = function equals (other) {\n\t return other && other.width === this.width && other.height === this.height;\n\t };\n\n\t Size.prototype.clone = function clone () {\n\t return new Size(this.width, this.height);\n\t };\n\n\t Size.prototype.toArray = function toArray (digits) {\n\t var doRound = defined(digits);\n\t var width = doRound ? round(this.width, digits) : this.width;\n\t var height = doRound ? round(this.height, digits) : this.height;\n\n\t return [ width, height ];\n\t };\n\n\t Size.create = function create (arg0, arg1) {\n\t if (defined(arg0)) {\n\t if (arg0 instanceof Size) {\n\t return arg0;\n\t } else if (arguments.length === 1 && arg0.length === 2) {\n\t return new Size(arg0[0], arg0[1]);\n\t }\n\n\t return new Size(arg0, arg1);\n\t }\n\t };\n\n\t staticAccessors.ZERO.get = function () {\n\t return new Size(0, 0);\n\t };\n\n\t Object.defineProperties( Size, staticAccessors );\n\n\t return Size;\n\t}(withAccessors(HasObservers, [ \"width\", \"height\" ])));\n\n\tvar Rect = (function (HasObservers$$1) {\n\t function Rect(origin, size, cornerRadius) {\n\t if (origin === void 0) { origin = new Point(); }\n\t if (size === void 0) { size = new Size(); }\n\t if (cornerRadius === void 0) { cornerRadius = 0; }\n\n\t HasObservers$$1.call(this);\n\n\t this.setOrigin(origin);\n\t this.setSize(size);\n\t this.setCornerRadius(cornerRadius);\n\t }\n\n\t extendStatic(Rect, HasObservers$$1);\n\t Rect.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t Rect.prototype.constructor = Rect;\n\t Rect.fn = Rect.prototype;\n\t Rect.fn.init = Rect.fn.constructor;\n\n\t Rect.prototype.clone = function clone () {\n\t return new Rect(\n\t this.origin.clone(),\n\t this.size.clone()\n\t );\n\t };\n\n\t Rect.prototype.equals = function equals (other) {\n\t return other &&\n\t other.origin.equals(this.origin) &&\n\t other.size.equals(this.size);\n\t };\n\n\t Rect.prototype.setOrigin = function setOrigin (value) {\n\t this._observerField(\"origin\", Point.create(value));\n\t this.geometryChange();\n\t return this;\n\t };\n\n\t Rect.prototype.getOrigin = function getOrigin () {\n\t return this.origin;\n\t };\n\n\t Rect.prototype.setCornerRadius = function setCornerRadius (radius) {\n\t this.cornerRadius = Array.isArray(radius) ? radius : [ radius, radius ];\n\n\t this.geometryChange();\n\t return this;\n\t };\n\n\t Rect.prototype.getCornerRadius = function getCornerRadius () {\n\t return this.cornerRadius;\n\t };\n\n\t Rect.prototype.setSize = function setSize (value) {\n\t this._observerField(\"size\", Size.create(value));\n\t this.geometryChange();\n\t return this;\n\t };\n\n\t Rect.prototype.getSize = function getSize () {\n\t return this.size;\n\t };\n\n\t Rect.prototype.width = function width () {\n\t return this.size.width;\n\t };\n\n\t Rect.prototype.height = function height () {\n\t return this.size.height;\n\t };\n\n\t Rect.prototype.topLeft = function topLeft () {\n\t return this.origin.clone();\n\t };\n\n\t Rect.prototype.bottomRight = function bottomRight () {\n\t return this.origin.clone().translate(this.width(), this.height());\n\t };\n\n\t Rect.prototype.topRight = function topRight () {\n\t return this.origin.clone().translate(this.width(), 0);\n\t };\n\n\t Rect.prototype.bottomLeft = function bottomLeft () {\n\t return this.origin.clone().translate(0, this.height());\n\t };\n\n\t Rect.prototype.center = function center () {\n\t return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n\t };\n\n\t Rect.prototype.bbox = function bbox (matrix) {\n\t var tl = this.topLeft().transformCopy(matrix);\n\t var tr = this.topRight().transformCopy(matrix);\n\t var br = this.bottomRight().transformCopy(matrix);\n\t var bl = this.bottomLeft().transformCopy(matrix);\n\n\t return Rect.fromPoints(tl, tr, br, bl);\n\t };\n\n\t Rect.prototype.transformCopy = function transformCopy (m) {\n\t return Rect.fromPoints(\n\t this.topLeft().transform(m),\n\t this.bottomRight().transform(m)\n\t );\n\t };\n\n\t Rect.prototype.expand = function expand (x, y) {\n\t if (y === void 0) { y = x; }\n\n\t this.size.width += 2 * x;\n\t this.size.height += 2 * y;\n\n\t this.origin.translate(-x, -y);\n\n\t return this;\n\t };\n\n\t Rect.prototype.expandCopy = function expandCopy (x, y) {\n\t return this.clone().expand(x, y);\n\t };\n\n\t Rect.prototype.containsPoint = function containsPoint (point) {\n\t var origin = this.origin;\n\t var bottomRight = this.bottomRight();\n\t return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n\t };\n\n\t Rect.prototype._isOnPath = function _isOnPath (point, width) {\n\t var rectOuter = this.expandCopy(width, width);\n\t var rectInner = this.expandCopy(-width, -width);\n\n\t return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n\t };\n\n\t Rect.fromPoints = function fromPoints () {\n\t var topLeft = Point.min.apply(null, arguments);\n\t var bottomRight = Point.max.apply(null, arguments);\n\t var size = new Size(\n\t bottomRight.x - topLeft.x,\n\t bottomRight.y - topLeft.y\n\t );\n\n\t return new Rect(topLeft, size);\n\t };\n\n\t Rect.union = function union (a, b) {\n\t return Rect.fromPoints(\n\t Point.min(a.topLeft(), b.topLeft()),\n\t Point.max(a.bottomRight(), b.bottomRight())\n\t );\n\t };\n\n\t Rect.intersect = function intersect (a, b) {\n\t var rect1 = {\n\t left: a.topLeft().x,\n\t top: a.topLeft().y,\n\t right: a.bottomRight().x,\n\t bottom: a.bottomRight().y\n\t };\n\n\t var rect2 = {\n\t left: b.topLeft().x,\n\t top: b.topLeft().y,\n\t right: b.bottomRight().x,\n\t bottom: b.bottomRight().y\n\t };\n\n\t if (rect1.left <= rect2.right &&\n\t rect2.left <= rect1.right &&\n\t rect1.top <= rect2.bottom &&\n\t rect2.top <= rect1.bottom) {\n\t return Rect.fromPoints(\n\t new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n\t new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n\t );\n\t }\n\t };\n\n\t return Rect;\n\t}(HasObservers));\n\n\tvar Transformation = (function (HasObservers$$1) {\n\t function Transformation(matrix) {\n\t if (matrix === void 0) { matrix = Matrix.unit(); }\n\n\t HasObservers$$1.call(this);\n\n\t this._matrix = matrix;\n\t }\n\n\t extendStatic(Transformation, HasObservers$$1);\n\t Transformation.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t Transformation.prototype.constructor = Transformation;\n\t Transformation.fn = Transformation.prototype;\n\t Transformation.fn.init = Transformation.fn.constructor;\n\n\t Transformation.prototype.clone = function clone () {\n\t return new Transformation(\n\t this._matrix.clone()\n\t );\n\t };\n\n\t Transformation.prototype.equals = function equals (other) {\n\t return other &&\n\t other._matrix.equals(this._matrix);\n\t };\n\n\t Transformation.prototype.translate = function translate (x, y) {\n\t this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n\t this._optionsChange();\n\t return this;\n\t };\n\n\t Transformation.prototype.scale = function scale (scaleX, scaleY, origin) {\n\t if (scaleY === void 0) { scaleY = scaleX; }\n\t if (origin === void 0) { origin = null; }\n\n\t var originPoint = origin;\n\n\t if (originPoint) {\n\t originPoint = Point.create(originPoint);\n\t this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n\t }\n\n\t this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n\t if (originPoint) {\n\t this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n\t }\n\n\t this._optionsChange();\n\t return this;\n\t };\n\n\t Transformation.prototype.rotate = function rotate (angle, origin) {\n\t var originPoint = Point.create(origin) || Point.ZERO;\n\n\t this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\n\t this._optionsChange();\n\t return this;\n\t };\n\n\t Transformation.prototype.multiply = function multiply (transformation) {\n\t var matrix = toMatrix(transformation);\n\n\t this._matrix = this._matrix.multiplyCopy(matrix);\n\n\t this._optionsChange();\n\t return this;\n\t };\n\n\t Transformation.prototype.matrix = function matrix (value) {\n\t if (value) {\n\t this._matrix = value;\n\t this._optionsChange();\n\t return this;\n\t }\n\n\t return this._matrix;\n\t };\n\n\t Transformation.prototype._optionsChange = function _optionsChange () {\n\t this.optionsChange({\n\t field: \"transform\",\n\t value: this\n\t });\n\t };\n\n\t return Transformation;\n\t}(HasObservers));\n\n\tfunction transform$1(matrix) {\n\t if (matrix === null) {\n\t return null;\n\t }\n\n\t if (matrix instanceof Transformation) {\n\t return matrix;\n\t }\n\n\t return new Transformation(matrix);\n\t}\n\n\tvar Element$1 = (function (HasObservers$$1) {\n\t function Element(options) {\n\t HasObservers$$1.call(this);\n\n\t this._initOptions(options);\n\t }\n\n\t extendStatic(Element, HasObservers$$1);\n\t Element.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t Element.prototype.constructor = Element;\n\t Element.fn = Element.prototype;\n\t Element.fn.init = Element.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Rect\";\n\t };\n\n\t Element.prototype._initOptions = function _initOptions (options) {\n\t if (options === void 0) { options = {}; }\n\n\t var clip = options.clip;\n\t var transform = options.transform;\n\n\t if (transform) {\n\t options.transform = transform$1(transform);\n\t }\n\n\t if (clip && !clip.id) {\n\t clip.id = definitionId();\n\t }\n\n\t this.options = new OptionsStore(options);\n\t this.options.addObserver(this);\n\t };\n\n\t Element.prototype.transform = function transform (value) {\n\t if (defined(value)) {\n\t this.options.set(\"transform\", transform$1(value));\n\t } else {\n\t return this.options.get(\"transform\");\n\t }\n\t };\n\n\t Element.prototype.parentTransform = function parentTransform () {\n\t var element = this;\n\t var parentMatrix;\n\n\t while (element.parent) {\n\t element = element.parent;\n\t var transformation = element.transform();\n\t if (transformation) {\n\t parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n\t }\n\t }\n\n\t if (parentMatrix) {\n\t return transform$1(parentMatrix);\n\t }\n\t };\n\n\t Element.prototype.currentTransform = function currentTransform (parentTransform) {\n\t if (parentTransform === void 0) { parentTransform = this.parentTransform(); }\n\n\t var elementTransform = this.transform();\n\t var elementMatrix = toMatrix(elementTransform);\n\n\t var parentMatrix = toMatrix(parentTransform);\n\t var combinedMatrix;\n\n\t if (elementMatrix && parentMatrix) {\n\t combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n\t } else {\n\t combinedMatrix = elementMatrix || parentMatrix;\n\t }\n\n\t if (combinedMatrix) {\n\t return transform$1(combinedMatrix);\n\t }\n\t };\n\n\t Element.prototype.visible = function visible (value) {\n\t if (defined(value)) {\n\t this.options.set(\"visible\", value);\n\t return this;\n\t }\n\n\t return this.options.get(\"visible\") !== false;\n\t };\n\n\t Element.prototype.clip = function clip (value) {\n\t var options = this.options;\n\t if (defined(value)) {\n\t if (value && !value.id) {\n\t value.id = definitionId();\n\t }\n\t options.set(\"clip\", value);\n\t return this;\n\t }\n\n\t return options.get(\"clip\");\n\t };\n\n\t Element.prototype.opacity = function opacity (value) {\n\t if (defined(value)) {\n\t this.options.set(\"opacity\", value);\n\t return this;\n\t }\n\n\t return valueOrDefault(this.options.get(\"opacity\"), 1);\n\t };\n\n\t Element.prototype.clippedBBox = function clippedBBox (transformation) {\n\t var bbox = this._clippedBBox(transformation);\n\t if (bbox) {\n\t var clip = this.clip();\n\t return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n\t }\n\t };\n\n\t Element.prototype.containsPoint = function containsPoint (point, parentTransform) {\n\t if (this.visible()) {\n\t var transform = this.currentTransform(parentTransform);\n\t var transformedPoint = point;\n\t if (transform) {\n\t transformedPoint = point.transformCopy(transform.matrix().invert());\n\t }\n\t return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n\t }\n\t return false;\n\t };\n\n\t Element.prototype._hasFill = function _hasFill () {\n\t var fill = this.options.fill;\n\t return fill && !isTransparent(fill.color);\n\t };\n\n\t Element.prototype._hasStroke = function _hasStroke () {\n\t var stroke = this.options.stroke;\n\t return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n\t };\n\n\t Element.prototype._clippedBBox = function _clippedBBox (transformation) {\n\t return this.bbox(transformation);\n\t };\n\n\t Object.defineProperties( Element.prototype, prototypeAccessors );\n\n\t return Element;\n\t}(HasObservers));\n\n\tfunction ellipseExtremeAngles(center, rx, ry, matrix) {\n\t var extremeX = 0;\n\t var extremeY = 0;\n\n\t if (matrix) {\n\t extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n\t if (matrix.b !== 0) {\n\t extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n\t }\n\t }\n\n\t return {\n\t x: extremeX,\n\t y: extremeY\n\t };\n\t}\n\n\tvar PI_DIV_2 = Math.PI / 2;\n\n\tvar Circle$2 = (function (superclass) {\n\t function Circle(center, radius) {\n\t if (center === void 0) { center = new Point(); }\n\t if (radius === void 0) { radius = 0; }\n\n\t superclass.call(this);\n\n\t this.setCenter(center);\n\t this.setRadius(radius);\n\t }\n\n\t extendStatic(Circle, superclass);\n\t Circle.prototype = Object.create( superclass && superclass.prototype );\n\t Circle.prototype.constructor = Circle;\n\t Circle.fn = Circle.prototype;\n\t Circle.fn.init = Circle.fn.constructor;\n\n\t Circle.prototype.setCenter = function setCenter (value) {\n\t this._observerField(\"center\", Point.create(value));\n\t this.geometryChange();\n\t return this;\n\t };\n\n\t Circle.prototype.getCenter = function getCenter () {\n\t return this.center;\n\t };\n\n\t Circle.prototype.equals = function equals (other) {\n\t return other &&\n\t other.center.equals(this.center) &&\n\t other.radius === this.radius;\n\t };\n\n\t Circle.prototype.clone = function clone () {\n\t return new Circle(this.center.clone(), this.radius);\n\t };\n\n\t Circle.prototype.pointAt = function pointAt (angle) {\n\t return this._pointAt(rad(angle));\n\t };\n\n\t Circle.prototype.bbox = function bbox (matrix) {\n\t var this$1 = this;\n\n\t var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n\t var minPoint = Point.maxPoint();\n\t var maxPoint = Point.minPoint();\n\n\t for (var i = 0; i < 4; i++) {\n\t var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n\t var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n\t var currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n\t minPoint = Point.min(minPoint, currentPoint);\n\t maxPoint = Point.max(maxPoint, currentPoint);\n\t }\n\n\t return Rect.fromPoints(minPoint, maxPoint);\n\t };\n\n\t Circle.prototype._pointAt = function _pointAt (angle) {\n\t var ref = this;\n\t var center = ref.center;\n\t var radius = ref.radius;\n\n\t return new Point(\n\t center.x + radius * Math.cos(angle),\n\t center.y + radius * Math.sin(angle)\n\t );\n\t };\n\n\t Circle.prototype.containsPoint = function containsPoint (point) {\n\t var ref = this;\n\t var center = ref.center;\n\t var radius = ref.radius;\n\t var inCircle = Math.pow(point.x - center.x, 2) +\n\t Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n\t return inCircle;\n\t };\n\n\t Circle.prototype._isOnPath = function _isOnPath (point, width) {\n\t var ref = this;\n\t var center = ref.center;\n\t var radius = ref.radius;\n\t var pointDistance = center.distanceTo(point);\n\n\t return radius - width <= pointDistance && pointDistance <= radius + width;\n\t };\n\n\t return Circle;\n\t}(withAccessors(HasObservers, [ \"radius\" ])));\n\n\tvar GRADIENT = \"Gradient\";\n\n\tvar paintable = function (TBase) { return (\n\t (function (TBase) {\n\t function anonymous () {\n\t TBase.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, TBase);\n\t anonymous.prototype = Object.create( TBase && TBase.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.fill = function fill (color, opacity) {\n\t var options = this.options;\n\n\t if (defined(color)) {\n\t if (color && color.nodeType !== GRADIENT) {\n\t var newFill = {\n\t color: color\n\t };\n\t if (defined(opacity)) {\n\t newFill.opacity = opacity;\n\t }\n\t options.set(\"fill\", newFill);\n\t } else {\n\t options.set(\"fill\", color);\n\t }\n\n\t return this;\n\t }\n\n\t return options.get(\"fill\");\n\t };\n\n\t anonymous.prototype.stroke = function stroke (color, width, opacity) {\n\t if (defined(color)) {\n\t this.options.set(\"stroke.color\", color);\n\n\t if (defined(width)) {\n\t this.options.set(\"stroke.width\", width);\n\t }\n\n\t if (defined(opacity)) {\n\t this.options.set(\"stroke.opacity\", opacity);\n\t }\n\n\t return this;\n\t }\n\n\t return this.options.get(\"stroke\");\n\t };\n\n\t return anonymous;\n\t }(TBase))\n\t); };\n\n\tvar IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n\n\tvar measurable = function (TBase) { return (\n\t (function (TBase) {\n\t function anonymous () {\n\t TBase.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, TBase);\n\t anonymous.prototype = Object.create( TBase && TBase.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.bbox = function bbox (transformation) {\n\t var combinedMatrix = toMatrix(this.currentTransform(transformation));\n\t var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n\t var bbox;\n\n\t if (this._bboxCache && this._matrixHash === matrixHash) {\n\t bbox = this._bboxCache.clone();\n\t } else {\n\t bbox = this._bbox(combinedMatrix);\n\t this._bboxCache = bbox ? bbox.clone() : null;\n\t this._matrixHash = matrixHash;\n\t }\n\n\t var strokeWidth = this.options.get(\"stroke.width\");\n\t if (strokeWidth && bbox) {\n\t bbox.expand(strokeWidth / 2);\n\t }\n\n\t return bbox;\n\t };\n\n\t anonymous.prototype.geometryChange = function geometryChange () {\n\t delete this._bboxCache;\n\t this.trigger(\"geometryChange\", {\n\t element: this\n\t });\n\t };\n\n\t return anonymous;\n\t }(TBase))\n\t); };\n\n\tfunction geometryAccessor(name) {\n\t var fieldName = \"_\" + name;\n\t return function(value) {\n\t if (defined(value)) {\n\t this._observerField(fieldName, value);\n\t this.geometryChange();\n\t return this;\n\t }\n\n\t return this[fieldName];\n\t };\n\t}\n\n\tfunction defineGeometryAccessors(fn, names) {\n\t for (var i = 0; i < names.length; i++) {\n\t fn[names[i]] = geometryAccessor(names[i]);\n\t }\n\t}\n\n\tvar withGeometry = function (TBase, names) {\n\t if (names === void 0) { names = [ \"geometry\" ]; }\n\n\t var result = (function (TBase) {\n\t function result () {\n\t TBase.apply(this, arguments);\n\t }extendStatic(result, TBase);\n\t result.prototype = Object.create( TBase && TBase.prototype );\n\t result.prototype.constructor = result;\n\t result.fn = result.prototype;\n\t result.fn.init = result.fn.constructor;\n\n\t return result;\n\t }(TBase));\n\t defineGeometryAccessors(result.prototype, names);\n\n\t return result;\n\t};\n\n\tvar DEFAULT_STROKE = \"#000\";\n\n\tvar Circle = (function (superclass) {\n\t function Circle(geometry, options) {\n\t if (geometry === void 0) { geometry = new Circle$2(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.geometry(geometry);\n\n\t if (!defined(this.options.stroke)) {\n\t this.stroke(DEFAULT_STROKE);\n\t }\n\t }\n\n\t extendStatic(Circle, superclass);\n\t Circle.prototype = Object.create( superclass && superclass.prototype );\n\t Circle.prototype.constructor = Circle;\n\t Circle.fn = Circle.prototype;\n\t Circle.fn.init = Circle.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Circle\";\n\t };\n\n\t Circle.prototype.rawBBox = function rawBBox () {\n\t return this._geometry.bbox();\n\t };\n\n\t Circle.prototype._bbox = function _bbox (matrix) {\n\t return this._geometry.bbox(matrix);\n\t };\n\n\t Circle.prototype._containsPoint = function _containsPoint (point) {\n\t return this.geometry().containsPoint(point);\n\t };\n\n\t Circle.prototype._isOnPath = function _isOnPath (point) {\n\t return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n\t };\n\n\t Object.defineProperties( Circle.prototype, prototypeAccessors );\n\n\t return Circle;\n\t}(paintable(measurable(withGeometry(Element$1)))));\n\n\tvar PRECISION = 10;\n\n\tfunction close$1(a, b, tolerance) {\n\t if (tolerance === void 0) { tolerance = PRECISION; }\n\n\t return round(Math.abs(a - b), tolerance) === 0;\n\t}\n\n\tfunction closeOrLess(a, b, tolerance) {\n\t return a < b || close$1(a, b, tolerance);\n\t}\n\n\tfunction lineIntersection(p0, p1, p2, p3) {\n\t var s1x = p1.x - p0.x;\n\t var s2x = p3.x - p2.x;\n\t var s1y = p1.y - p0.y;\n\t var s2y = p3.y - p2.y;\n\t var nx = p0.x - p2.x;\n\t var ny = p0.y - p2.y;\n\t var d = s1x * s2y - s2x * s1y;\n\t var s = (s1x * ny - s1y * nx) / d;\n\t var t = (s2x * ny - s2y * nx) / d;\n\n\t if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n\t return new Point(p0.x + t * s1x, p0.y + t * s1y);\n\t }\n\t}\n\n\tvar MAX_INTERVAL = 45;\n\tvar pow$1 = Math.pow;\n\tvar accessors = [ \"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\" ];\n\n\tvar Arc$2 = (function (superclass) {\n\t function Arc(center, options) {\n\t if (center === void 0) { center = new Point(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this);\n\n\t this.setCenter(center);\n\n\t this.radiusX = options.radiusX;\n\t this.radiusY = options.radiusY || options.radiusX;\n\t this.startAngle = options.startAngle;\n\t this.endAngle = options.endAngle;\n\t this.anticlockwise = options.anticlockwise || false;\n\t this.xRotation = options.xRotation;\n\t }\n\n\t extendStatic(Arc, superclass);\n\t Arc.prototype = Object.create( superclass && superclass.prototype );\n\t Arc.prototype.constructor = Arc;\n\t Arc.fn = Arc.prototype;\n\t Arc.fn.init = Arc.fn.constructor;\n\n\t Arc.prototype.clone = function clone () {\n\t return new Arc(this.center, {\n\t radiusX: this.radiusX,\n\t radiusY: this.radiusY,\n\t startAngle: this.startAngle,\n\t endAngle: this.endAngle,\n\t anticlockwise: this.anticlockwise\n\t });\n\t };\n\n\t Arc.prototype.setCenter = function setCenter (value) {\n\t this._observerField(\"center\", Point.create(value));\n\t this.geometryChange();\n\t return this;\n\t };\n\n\t Arc.prototype.getCenter = function getCenter () {\n\t return this.center;\n\t };\n\n\t Arc.prototype.pointAt = function pointAt (angle) {\n\t var center = this.center;\n\t var radian = rad(angle);\n\n\t return new Point(\n\t center.x + this.radiusX * Math.cos(radian),\n\t center.y + this.radiusY * Math.sin(radian)\n\t );\n\t };\n\n\t Arc.prototype.curvePoints = function curvePoints () {\n\t var this$1 = this;\n\n\t var startAngle = this.startAngle;\n\t var dir = this.anticlockwise ? -1 : 1;\n\t var curvePoints = [ this.pointAt(startAngle) ];\n\t var interval = this._arcInterval();\n\t var intervalAngle = interval.endAngle - interval.startAngle;\n\t var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n\t var subIntervalAngle = intervalAngle / subIntervalsCount;\n\t var currentAngle = startAngle;\n\t var transformation;\n\t if (this.xRotation) {\n\t transformation = transform$1().rotate(this.xRotation, this.center);\n\t }\n\n\t for (var i = 1; i <= subIntervalsCount; i++) {\n\t var nextAngle = currentAngle + dir * subIntervalAngle;\n\t var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n\n\t curvePoints.push(points.cp1, points.cp2, points.p2);\n\t currentAngle = nextAngle;\n\t }\n\n\t return curvePoints;\n\t };\n\n\t Arc.prototype.bbox = function bbox (matrix) {\n\t var this$1 = this;\n\n\t var interval = this._arcInterval();\n\t var startAngle = interval.startAngle;\n\t var endAngle = interval.endAngle;\n\t var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n\t var extremeX = deg(extremeAngles.x);\n\t var extremeY = deg(extremeAngles.y);\n\t var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n\t var currentAngleX = bboxStartAngle(extremeX, startAngle);\n\t var currentAngleY = bboxStartAngle(extremeY, startAngle);\n\t var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n\t var minPoint = Point.min(currentPoint, endPoint);\n\t var maxPoint = Point.max(currentPoint, endPoint);\n\n\t while (currentAngleX < endAngle || currentAngleY < endAngle) {\n\t var currentPointX = (void 0);\n\t if (currentAngleX < endAngle) {\n\t currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n\t currentAngleX += 90;\n\t }\n\n\t var currentPointY = (void 0);\n\t if (currentAngleY < endAngle) {\n\t currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n\t currentAngleY += 90;\n\t }\n\n\t currentPoint = new Point(currentPointX.x, currentPointY.y);\n\t minPoint = Point.min(minPoint, currentPoint);\n\t maxPoint = Point.max(maxPoint, currentPoint);\n\t }\n\n\t return Rect.fromPoints(minPoint, maxPoint);\n\t };\n\n\t Arc.prototype._arcInterval = function _arcInterval () {\n\t var ref = this;\n\t var startAngle = ref.startAngle;\n\t var endAngle = ref.endAngle;\n\t var anticlockwise = ref.anticlockwise;\n\n\t if (anticlockwise) {\n\t var oldStart = startAngle;\n\t startAngle = endAngle;\n\t endAngle = oldStart;\n\t }\n\n\t if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n\t endAngle += 360;\n\t }\n\n\t return {\n\t startAngle: startAngle,\n\t endAngle: endAngle\n\t };\n\t };\n\n\t Arc.prototype._intervalCurvePoints = function _intervalCurvePoints (startAngle, endAngle, transformation) {\n\t var p1 = this.pointAt(startAngle);\n\t var p2 = this.pointAt(endAngle);\n\t var p1Derivative = this._derivativeAt(startAngle);\n\t var p2Derivative = this._derivativeAt(endAngle);\n\t var t = (rad(endAngle) - rad(startAngle)) / 3;\n\t var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n\t var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n\t if (transformation) {\n\t p1.transform(transformation);\n\t p2.transform(transformation);\n\t cp1.transform(transformation);\n\t cp2.transform(transformation);\n\t }\n\n\t return {\n\t p1: p1,\n\t cp1: cp1,\n\t cp2: cp2,\n\t p2: p2\n\t };\n\t };\n\n\t Arc.prototype._derivativeAt = function _derivativeAt (angle) {\n\t var radian = rad(angle);\n\n\t return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n\t };\n\n\t Arc.prototype.containsPoint = function containsPoint (point) {\n\t var interval = this._arcInterval();\n\t var intervalAngle = interval.endAngle - interval.startAngle;\n\t var ref = this;\n\t var center = ref.center;\n\t var radiusX = ref.radiusX;\n\t var radiusY = ref.radiusY;\n\t var distance = center.distanceTo(point);\n\t var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n\t var pointRadius = (radiusX * radiusY) /\n\t Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n\t var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n\t var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n\t var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n\t var containsPoint;\n\n\t if (intervalAngle < 180) {\n\t containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n\t } else {\n\t var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n\t if (angle !== 360) {\n\t angle = (360 + angle) % 360;\n\t }\n\n\t var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\t containsPoint = (inAngleRange && closeOrLess(distance, pointRadius)) || (!inAngleRange && (!intersection || intersection.equals(point)));\n\t }\n\t return containsPoint;\n\t };\n\n\t Arc.prototype._isOnPath = function _isOnPath (point, width) {\n\t var interval = this._arcInterval();\n\t var center = this.center;\n\t var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n\t if (angle !== 360) {\n\t angle = (360 + angle) % 360;\n\t }\n\n\t var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\n\t return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n\t };\n\n\t Arc.fromPoints = function fromPoints (start, end, rx, ry, largeArc, swipe, rotation) {// eslint-disable-line max-params\n\t var arcParameters = normalizeArcParameters({\n\t x1: start.x,\n\t y1: start.y,\n\t x2: end.x,\n\t y2: end.y,\n\t rx: rx,\n\t ry: ry,\n\t largeArc: largeArc,\n\t swipe: swipe,\n\t rotation: rotation\n\t });\n\n\t return new Arc(arcParameters.center, {\n\t startAngle: arcParameters.startAngle,\n\t endAngle: arcParameters.endAngle,\n\t radiusX: arcParameters.radiusX,\n\t radiusY: arcParameters.radiusY,\n\t xRotation: arcParameters.xRotation,\n\t anticlockwise: swipe === 0\n\t });\n\t };\n\n\t return Arc;\n\t}(withAccessors(HasObservers, accessors)));\n\n\tfunction calculateAngle(cx, cy, rx, ry, x, y) {\n\t var cos = round((x - cx) / rx, 3);\n\t var sin = round((y - cy) / ry, 3);\n\n\t return round(deg(Math.atan2(sin, cos)));\n\t}\n\n\tfunction normalizeArcParameters(parameters) {\n\t var x1 = parameters.x1;\n\t var y1 = parameters.y1;\n\t var x2 = parameters.x2;\n\t var y2 = parameters.y2;\n\t var rx = parameters.rx;\n\t var ry = parameters.ry;\n\t var largeArc = parameters.largeArc;\n\t var swipe = parameters.swipe;\n\t var rotation = parameters.rotation; if (rotation === void 0) { rotation = 0; }\n\n\t var radians = rad(rotation);\n\t var cosine = Math.cos(radians);\n\t var sine = Math.sin(radians);\n\n\t var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n\t var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n\n\t var sign = largeArc !== swipe ? 1 : -1;\n\n\t var xt2 = Math.pow(xT, 2);\n\t var yt2 = Math.pow(yT, 2);\n\t var rx2 = Math.pow(rx, 2);\n\t var ry2 = Math.pow(ry, 2);\n\n\t var delta = xt2 / rx2 + yt2 / ry2;\n\n\t if (delta > 1) {\n\t delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n\t rx = delta * rx;\n\t rx2 = Math.pow(rx, 2);\n\n\t ry = delta * ry;\n\t ry2 = Math.pow(ry, 2);\n\t }\n\n\t var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n\t // due to rounding errors the value could become NaN even after radii correction\n\t if (isNaN(constT)) {\n\t constT = 0;\n\t }\n\n\t var cxT = constT * (rx * yT) / ry;\n\t var cyT = - constT * (ry * xT) / rx;\n\n\t var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n\t var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n\n\t var uX = (xT - cxT) / rx;\n\t var uY = (yT - cyT) / ry;\n\t var vX = -(xT + cxT) / rx;\n\t var vY = -(yT + cyT) / ry;\n\n\t var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n\n\t var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n\t var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n\n\t if (!swipe && angle > 0) {\n\t angle -= 360;\n\t }\n\n\t if (swipe && angle < 0) {\n\t angle += 360;\n\t }\n\t var endAngle = startAngle + angle;\n\t var signEndAngle = endAngle >= 0 ? 1 : -1;\n\t endAngle = (Math.abs(endAngle) % 360) * signEndAngle;\n\n\t return {\n\t center: new Point(cx, cy),\n\t startAngle: startAngle,\n\t endAngle: endAngle,\n\t radiusX: rx,\n\t radiusY: ry,\n\t xRotation: rotation\n\t };\n\t}\n\n\tfunction bboxStartAngle(angle, start) {\n\t var startAngle = angle;\n\n\t while (startAngle < start) {\n\t startAngle += 90;\n\t }\n\n\t return startAngle;\n\t}\n\n\tvar push = [].push;\n\tvar pop = [].pop;\n\tvar splice = [].splice;\n\tvar shift = [].shift;\n\tvar slice = [].slice;\n\tvar unshift = [].unshift;\n\n\tvar ElementsArray = (function (HasObservers$$1) {\n\t function ElementsArray(array) {\n\t if (array === void 0) { array = []; }\n\n\t HasObservers$$1.call(this);\n\n\t this.length = 0;\n\t this._splice(0, array.length, array);\n\t }\n\n\t extendStatic(ElementsArray, HasObservers$$1);\n\t ElementsArray.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t ElementsArray.prototype.constructor = ElementsArray;\n\t ElementsArray.fn = ElementsArray.prototype;\n\t ElementsArray.fn.init = ElementsArray.fn.constructor;\n\n\t ElementsArray.prototype.elements = function elements (value) {\n\t if (value) {\n\t this._splice(0, this.length, value);\n\n\t this._change();\n\t return this;\n\t }\n\n\t return this.slice(0);\n\t };\n\n\t ElementsArray.prototype.push = function push$1 () {\n\t var elements = arguments;\n\t var result = push.apply(this, elements);\n\n\t this._add(elements);\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype.slice = function slice$1 () {\n\t return slice.call(this);\n\t };\n\n\t ElementsArray.prototype.pop = function pop$1 () {\n\t var length = this.length;\n\t var result = pop.apply(this);\n\n\t if (length) {\n\t this._remove([ result ]);\n\t }\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype.splice = function splice$1 (index, howMany) {\n\t var elements = slice.call(arguments, 2);\n\t var result = this._splice(index, howMany, elements);\n\n\t this._change();\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype.shift = function shift$1 () {\n\t var length = this.length;\n\t var result = shift.apply(this);\n\n\t if (length) {\n\t this._remove([ result ]);\n\t }\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype.unshift = function unshift$1 () {\n\t var elements = arguments;\n\t var result = unshift.apply(this, elements);\n\n\t this._add(elements);\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype.indexOf = function indexOf (element) {\n\t var this$1 = this;\n\n\t var length = this.length;\n\n\t for (var idx = 0; idx < length; idx++) {\n\t if (this$1[idx] === element) {\n\t return idx;\n\t }\n\t }\n\t return -1;\n\t };\n\n\t ElementsArray.prototype._splice = function _splice (index, howMany, elements) {\n\t var result = splice.apply(this, [ index, howMany ].concat(elements));\n\n\t this._clearObserver(result);\n\t this._setObserver(elements);\n\n\t return result;\n\t };\n\n\t ElementsArray.prototype._add = function _add (elements) {\n\t this._setObserver(elements);\n\t this._change();\n\t };\n\n\t ElementsArray.prototype._remove = function _remove (elements) {\n\t this._clearObserver(elements);\n\t this._change();\n\t };\n\n\t ElementsArray.prototype._setObserver = function _setObserver (elements) {\n\t var this$1 = this;\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t elements[idx].addObserver(this$1);\n\t }\n\t };\n\n\t ElementsArray.prototype._clearObserver = function _clearObserver (elements) {\n\t var this$1 = this;\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t elements[idx].removeObserver(this$1);\n\t }\n\t };\n\n\t ElementsArray.prototype._change = function _change () {};\n\n\t return ElementsArray;\n\t}(HasObservers));\n\n\tvar GeometryElementsArray = (function (ElementsArray$$1) {\n\t function GeometryElementsArray () {\n\t ElementsArray$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(GeometryElementsArray, ElementsArray$$1);\n\t GeometryElementsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n\t GeometryElementsArray.prototype.constructor = GeometryElementsArray;\n\t GeometryElementsArray.fn = GeometryElementsArray.prototype;\n\t GeometryElementsArray.fn.init = GeometryElementsArray.fn.constructor;\n\n\t GeometryElementsArray.prototype._change = function _change () {\n\t this.geometryChange();\n\t };\n\n\t return GeometryElementsArray;\n\t}(ElementsArray));\n\n\tfunction isOutOfEndPoint(endPoint, controlPoint, point) {\n\t var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n\t var rotatedPoint = point.transformCopy(transform$1().rotate(-angle, endPoint));\n\n\t return rotatedPoint.x < endPoint.x;\n\t}\n\n\tfunction calculateCurveAt(t, field, points) {\n\t var t1 = 1 - t;\n\t return Math.pow(t1, 3) * points[0][field] +\n\t 3 * Math.pow(t1, 2) * t * points[1][field] +\n\t 3 * Math.pow(t, 2) * t1 * points[2][field] +\n\t Math.pow(t, 3) * points[3][field];\n\t}\n\n\tfunction toCubicPolynomial(points, field) {\n\t return [ -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n\t 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n\t 3 * (-points[0][field] + points[1][field]),\n\t points[0][field]\n\t ];\n\t}\n\n\tvar ComplexNumber = (function (Class$$1) {\n\t function ComplexNumber(real, img) {\n\t if (real === void 0) { real = 0; }\n\t if (img === void 0) { img = 0; }\n\n\t Class$$1.call(this);\n\n\t this.real = real;\n\t this.img = img;\n\t }\n\n\t extendStatic(ComplexNumber, Class$$1);\n\t ComplexNumber.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t ComplexNumber.prototype.constructor = ComplexNumber;\n\t ComplexNumber.fn = ComplexNumber.prototype;\n\t ComplexNumber.fn.init = ComplexNumber.fn.constructor;\n\n\t ComplexNumber.prototype.add = function add (cNumber) {\n\t return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n\t };\n\n\t ComplexNumber.prototype.addConstant = function addConstant (value) {\n\t return new ComplexNumber(this.real + value, this.img);\n\t };\n\n\t ComplexNumber.prototype.negate = function negate () {\n\t return new ComplexNumber(-this.real, -this.img);\n\t };\n\n\t ComplexNumber.prototype.multiply = function multiply (cNumber) {\n\t return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img,\n\t this.real * cNumber.img + this.img * cNumber.real);\n\t };\n\n\t ComplexNumber.prototype.multiplyConstant = function multiplyConstant (value) {\n\t return new ComplexNumber(this.real * value, this.img * value);\n\t };\n\n\t ComplexNumber.prototype.nthRoot = function nthRoot (n) {\n\t var rad$$1 = Math.atan2(this.img, this.real);\n\t var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n\t var nthR = Math.pow(r, 1 / n);\n\n\t return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n)); //Moivre's formula\n\t };\n\n\t ComplexNumber.prototype.equals = function equals (cNumber) {\n\t return this.real === cNumber.real && this.img === cNumber.img;\n\t };\n\n\t ComplexNumber.prototype.isReal = function isReal () {\n\t return this.img === 0;\n\t };\n\n\t return ComplexNumber;\n\t}(Class));\n\n\tfunction numberSign(x) {\n\t return x < 0 ? -1 : 1;\n\t}\n\n\tfunction solveQuadraticEquation(a, b, c) {\n\t var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n\t return [\n\t (-b + squareRoot) / (2 * a),\n\t (-b - squareRoot) / (2 * a)\n\t ];\n\t}\n\n\t//Cardano's formula\n\tfunction solveCubicEquation(a, b, c, d) {\n\t if (a === 0) {\n\t return solveQuadraticEquation(b, c, d);\n\t }\n\n\t var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n\t var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n\t var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n\t var i = new ComplexNumber(0,1);\n\t var b3a = -b / (3 * a);\n\t var x1, x2, y1, y2, y3, z1, z2;\n\n\t if (Q < 0) {\n\t x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n\t x2 = new ComplexNumber(-q / 2, - Math.sqrt(-Q)).nthRoot(3);\n\t } else {\n\t x1 = -q / 2 + Math.sqrt(Q);\n\t x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n\t x2 = -q / 2 - Math.sqrt(Q);\n\t x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n\t }\n\n\t y1 = x1.add(x2);\n\n\t z1 = x1.add(x2).multiplyConstant(-1 / 2);\n\t z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n\n\t y2 = z1.add(i.multiply(z2));\n\t y3 = z1.add(i.negate().multiply(z2));\n\n\t var result = [];\n\n\t if (y1.isReal()) {\n\t result.push(round(y1.real + b3a, PRECISION));\n\t }\n\t if (y2.isReal()) {\n\t result.push(round(y2.real + b3a, PRECISION));\n\t }\n\t if (y3.isReal()) {\n\t result.push(round(y3.real + b3a, PRECISION));\n\t }\n\n\t return result;\n\t}\n\n\tfunction hasRootsInRange(points, point, field, rootField, range) {\n\t var polynomial = toCubicPolynomial(points, rootField);\n\t var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n\t var intersection;\n\n\t for (var idx = 0; idx < roots.length; idx++) {\n\t if (0 <= roots[idx] && roots[idx] <= 1) {\n\t intersection = calculateCurveAt(roots[idx], field, points);\n\t if (Math.abs(intersection - point[field]) <= range) {\n\t return true;\n\t }\n\t }\n\t }\n\t}\n\n\tfunction curveIntersectionsCount(points, point, bbox) {\n\t var polynomial = toCubicPolynomial(points, \"x\");\n\t var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n\t var rayIntersection, intersectsRay;\n\t var count = 0;\n\t for (var i = 0; i < roots.length; i++) {\n\t rayIntersection = calculateCurveAt(roots[i], \"y\", points);\n\t intersectsRay = close$1(rayIntersection, point.y) || rayIntersection > point.y;\n\t if (intersectsRay && (((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x) || (0 < roots[i] && roots[i] < 1))) {\n\t count++;\n\t }\n\t }\n\n\t return count;\n\t}\n\n\tfunction lineIntersectionsCount(a, b, point) {\n\t var intersects;\n\t if (a.x !== b.x) {\n\t var minX = Math.min(a.x, b.x);\n\t var maxX = Math.max(a.x, b.x);\n\t var minY = Math.min(a.y, b.y);\n\t var maxY = Math.max(a.y, b.y);\n\t var inRange = minX <= point.x && point.x < maxX;\n\n\t if (minY === maxY) {\n\t intersects = point.y <= minY && inRange;\n\t } else {\n\t intersects = inRange && (((maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x)) / (maxX - minX) + minY - point.y) >= 0;\n\t }\n\t }\n\n\t return intersects ? 1 : 0;\n\t}\n\n\tfunction pointAccessor(name) {\n\t var fieldName = \"_\" + name;\n\t return function(value) {\n\t if (defined(value)) {\n\t this._observerField(fieldName, Point.create(value));\n\t this.geometryChange();\n\t return this;\n\t }\n\n\t return this[fieldName];\n\t };\n\t}\n\n\tfunction definePointAccessors(fn, names) {\n\t for (var i = 0; i < names.length; i++) {\n\t fn[names[i]] = pointAccessor(names[i]);\n\t }\n\t}\n\n\tvar withPoints = function (TBase, names) {\n\t var result = (function (TBase) {\n\t function result () {\n\t TBase.apply(this, arguments);\n\t }extendStatic(result, TBase);\n\t result.prototype = Object.create( TBase && TBase.prototype );\n\t result.prototype.constructor = result;\n\t result.fn = result.prototype;\n\t result.fn.init = result.fn.constructor;\n\n\t return result;\n\t }(TBase));\n\t definePointAccessors(result.prototype, names);\n\n\t return result;\n\t};\n\n\tvar points = [ \"anchor\", \"controlIn\", \"controlOut\" ];\n\n\tvar Segment = (function (superclass) {\n\t function Segment(anchor, controlIn, controlOut) {\n\t superclass.call(this);\n\n\t this.anchor(anchor || new Point());\n\t this.controlIn(controlIn);\n\t this.controlOut(controlOut);\n\t }\n\n\t extendStatic(Segment, superclass);\n\t Segment.prototype = Object.create( superclass && superclass.prototype );\n\t Segment.prototype.constructor = Segment;\n\t Segment.fn = Segment.prototype;\n\t Segment.fn.init = Segment.fn.constructor;\n\n\t Segment.prototype.bboxTo = function bboxTo (toSegment, matrix) {\n\t var segmentAnchor = this.anchor().transformCopy(matrix);\n\t var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n\t var rect;\n\n\t if (this.controlOut() && toSegment.controlIn()) {\n\t rect = this._curveBoundingBox(\n\t segmentAnchor, this.controlOut().transformCopy(matrix),\n\t toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n\t );\n\t } else {\n\t rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n\t }\n\n\t return rect;\n\t };\n\n\t Segment.prototype._lineBoundingBox = function _lineBoundingBox (p1, p2) {\n\t return Rect.fromPoints(p1, p2);\n\t };\n\n\t Segment.prototype._curveBoundingBox = function _curveBoundingBox (p1, cp1, cp2, p2) {\n\t var points = [ p1, cp1, cp2, p2 ];\n\t var extremesX = this._curveExtremesFor(points, \"x\");\n\t var extremesY = this._curveExtremesFor(points, \"y\");\n\t var xLimits = arrayLimits([ extremesX.min, extremesX.max, p1.x, p2.x ]);\n\t var yLimits = arrayLimits([ extremesY.min, extremesY.max, p1.y, p2.y ]);\n\n\t return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n\t };\n\n\t Segment.prototype._curveExtremesFor = function _curveExtremesFor (points, field) {\n\t var extremes = this._curveExtremes(\n\t points[0][field], points[1][field],\n\t points[2][field], points[3][field]\n\t );\n\n\t return {\n\t min: calculateCurveAt(extremes.min, field, points),\n\t max: calculateCurveAt(extremes.max, field, points)\n\t };\n\t };\n\n\t Segment.prototype._curveExtremes = function _curveExtremes (x1, x2, x3, x4) {\n\t var a = x1 - 3 * x2 + 3 * x3 - x4;\n\t var b = - 2 * (x1 - 2 * x2 + x3);\n\t var c = x1 - x2;\n\t var sqrt = Math.sqrt(b * b - 4 * a * c);\n\t var t1 = 0;\n\t var t2 = 1;\n\n\t if (a === 0) {\n\t if (b !== 0) {\n\t t1 = t2 = -c / b;\n\t }\n\t } else if (!isNaN(sqrt)) {\n\t t1 = (- b + sqrt) / (2 * a);\n\t t2 = (- b - sqrt) / (2 * a);\n\t }\n\n\t var min = Math.max(Math.min(t1, t2), 0);\n\t if (min < 0 || min > 1) {\n\t min = 0;\n\t }\n\n\t var max = Math.min(Math.max(t1, t2), 1);\n\t if (max > 1 || max < 0) {\n\t max = 1;\n\t }\n\n\t return {\n\t min: min,\n\t max: max\n\t };\n\t };\n\n\t Segment.prototype._intersectionsTo = function _intersectionsTo (segment, point) {\n\t var intersectionsCount;\n\t if (this.controlOut() && segment.controlIn()) {\n\t intersectionsCount = curveIntersectionsCount([ this.anchor(), this.controlOut(), segment.controlIn(), segment.anchor() ], point, this.bboxTo(segment));\n\t } else {\n\t intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n\t }\n\t return intersectionsCount;\n\t };\n\n\t Segment.prototype._isOnCurveTo = function _isOnCurveTo (segment, point, width, endSegment) {\n\t var bbox = this.bboxTo(segment).expand(width, width);\n\t if (bbox.containsPoint(point)) {\n\t var p1 = this.anchor();\n\t var p2 = this.controlOut();\n\t var p3 = segment.controlIn();\n\t var p4 = segment.anchor();\n\n\t if (endSegment === \"start\" && p1.distanceTo(point) <= width) {\n\t return !isOutOfEndPoint(p1, p2, point);\n\t } else if (endSegment === \"end\" && p4.distanceTo(point) <= width) {\n\t return !isOutOfEndPoint(p4, p3, point);\n\t }\n\n\t //the approach is not entirely correct but is close and the alternatives are solving a 6th degree polynomial or testing the segment points\n\t var points = [ p1, p2, p3, p4 ];\n\t if (hasRootsInRange(points, point, \"x\", \"y\", width) || hasRootsInRange(points, point, \"y\", \"x\", width)) {\n\t return true;\n\t }\n\t var rotation = transform$1().rotate(45, point);\n\t var rotatedPoints = [ p1.transformCopy(rotation), p2.transformCopy(rotation), p3.transformCopy(rotation), p4.transformCopy(rotation) ];\n\t return hasRootsInRange(rotatedPoints, point, \"x\", \"y\", width) || hasRootsInRange(rotatedPoints, point, \"y\", \"x\", width);\n\t }\n\t };\n\n\t Segment.prototype._isOnLineTo = function _isOnLineTo (segment, point, width) {\n\t var p1 = this.anchor();\n\t var p2 = segment.anchor();\n\t var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n\t var rect = new Rect([ p1.x, p1.y - width / 2 ], [ p1.distanceTo(p2), width ]);\n\t return rect.containsPoint(point.transformCopy(transform$1().rotate(-angle, p1)));\n\t };\n\n\t Segment.prototype._isOnPathTo = function _isOnPathTo (segment, point, width, endSegment) {\n\t var isOnPath;\n\t if (this.controlOut() && segment.controlIn()) {\n\t isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n\t } else {\n\t isOnPath = this._isOnLineTo(segment, point, width);\n\t }\n\t return isOnPath;\n\t };\n\n\t return Segment;\n\t}(withPoints(HasObservers, points)));\n\n\tfunction arrayLimits(arr) {\n\t var length = arr.length;\n\t var min = MAX_NUM;\n\t var max = MIN_NUM;\n\n\t for (var i = 0; i < length; i ++) {\n\t max = Math.max(max, arr[i]);\n\t min = Math.min(min, arr[i]);\n\t }\n\n\t return {\n\t min: min,\n\t max: max\n\t };\n\t}\n\n\tvar ShapeMap = {\n\t l: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\n\t for (var i = 0; i < parameters.length; i += 2) {\n\t var point = new Point(parameters[i], parameters[i + 1]);\n\n\t if (options.isRelative) {\n\t point.translateWith(position);\n\t }\n\n\t path.lineTo(point.x, point.y);\n\n\t position.x = point.x;\n\t position.y = point.y;\n\t }\n\t },\n\n\t c: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\n\t for (var i = 0; i < parameters.length; i += 6) {\n\t var controlOut = new Point(parameters[i], parameters[i + 1]);\n\t var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n\t var point = new Point(parameters[i + 4], parameters[i + 5]);\n\t if (options.isRelative) {\n\t controlIn.translateWith(position);\n\t controlOut.translateWith(position);\n\t point.translateWith(position);\n\t }\n\n\t path.curveTo(controlOut, controlIn, point);\n\n\t position.x = point.x;\n\t position.y = point.y;\n\t }\n\t },\n\n\t v: function(path, options) {\n\t var value = options.isRelative ? 0 : options.position.x;\n\n\t toLineParamaters(options.parameters, true, value);\n\t this.l(path, options);\n\t },\n\n\t h: function(path, options) {\n\t var value = options.isRelative ? 0 : options.position.y;\n\n\t toLineParamaters(options.parameters, false, value);\n\t this.l(path, options);\n\t },\n\n\t a: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\n\t for (var i = 0; i < parameters.length; i += 7) {\n\t var radiusX = parameters[i];\n\t var radiusY = parameters[i + 1];\n\t var rotation = parameters[i + 2];\n\t var largeArc = parameters[i + 3];\n\t var swipe = parameters[i + 4];\n\t var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n\n\t if (options.isRelative) {\n\t endPoint.translateWith(position);\n\t }\n\t if (position.x !== endPoint.x || position.y !== endPoint.y) {\n\t path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n\n\t position.x = endPoint.x;\n\t position.y = endPoint.y;\n\t }\n\t }\n\t },\n\n\t s: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\t var previousCommand = options.previousCommand;\n\t var lastControlIn;\n\n\t if (previousCommand === \"s\" || previousCommand === \"c\") {\n\t lastControlIn = last(last(path.paths).segments).controlIn();\n\t }\n\n\t for (var i = 0; i < parameters.length; i += 4) {\n\t var controlIn = new Point(parameters[i], parameters[i + 1]);\n\t var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n\t var controlOut = (void 0);\n\n\t if (options.isRelative) {\n\t controlIn.translateWith(position);\n\t endPoint.translateWith(position);\n\t }\n\n\t if (lastControlIn) {\n\t controlOut = reflectionPoint(lastControlIn, position);\n\t } else {\n\t controlOut = position.clone();\n\t }\n\n\t lastControlIn = controlIn;\n\n\t path.curveTo(controlOut, controlIn, endPoint);\n\n\t position.x = endPoint.x;\n\t position.y = endPoint.y;\n\t }\n\t },\n\n\t q: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\n\t for (var i = 0; i < parameters.length; i += 4) {\n\t var controlPoint = new Point(parameters[i], parameters[i + 1]);\n\t var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n\n\t if (options.isRelative) {\n\t controlPoint.translateWith(position);\n\t endPoint.translateWith(position);\n\t }\n\n\t var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n\t path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n\t position.x = endPoint.x;\n\t position.y = endPoint.y;\n\t }\n\t },\n\n\t t: function(path, options) {\n\t var parameters = options.parameters;\n\t var position = options.position;\n\t var previousCommand = options.previousCommand;\n\t var controlPoint;\n\n\t if (previousCommand === \"q\" || previousCommand === \"t\") {\n\t var lastSegment = last(last(path.paths).segments);\n\t controlPoint = lastSegment.controlIn().clone()\n\t .translateWith(position.scaleCopy(-1 / 3))\n\t .scale(3 / 2);\n\t }\n\n\t for (var i = 0; i < parameters.length; i += 2) {\n\t var endPoint = new Point(parameters[i], parameters[i + 1]);\n\t if (options.isRelative) {\n\t endPoint.translateWith(position);\n\t }\n\n\t if (controlPoint) {\n\t controlPoint = reflectionPoint(controlPoint, position);\n\t } else {\n\t controlPoint = position.clone();\n\t }\n\n\t var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n\t path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n\t position.x = endPoint.x;\n\t position.y = endPoint.y;\n\t }\n\t }\n\t};\n\n\tfunction toLineParamaters(parameters, isVertical, value) {\n\t var insertPosition = isVertical ? 0 : 1;\n\n\t for (var i = 0; i < parameters.length; i += 2) {\n\t parameters.splice(i + insertPosition, 0, value);\n\t }\n\t}\n\n\tfunction reflectionPoint(point, center) {\n\t if (point && center) {\n\t return center.scaleCopy(2).translate(-point.x, -point.y);\n\t }\n\t}\n\n\tvar third = 1 / 3;\n\n\tfunction quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n\t var scaledPoint = controlPoint.clone().scale(2 / 3);\n\t return {\n\t controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n\t controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n\t };\n\t}\n\n\tvar SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n\tvar SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n\tvar MOVE = \"m\";\n\tvar CLOSE = \"z\";\n\n\tfunction parseParameters(str) {\n\t var parameters = [];\n\t str.replace(SPLIT_REGEX, function(match, number) {\n\t parameters.push(parseFloat(number));\n\t });\n\t return parameters;\n\t}\n\n\tfunction parsePath(pathInstance, str) {\n\t var position = new Point();\n\t var previousCommand;\n\n\t str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n\t var command = element.toLowerCase();\n\t var isRelative = command === element;\n\t var parameters = parseParameters(params.trim());\n\n\t if (command === MOVE) {\n\t if (isRelative) {\n\t position.x += parameters[0];\n\t position.y += parameters[1];\n\t } else {\n\t position.x = parameters[0];\n\t position.y = parameters[1];\n\t }\n\n\t pathInstance.moveTo(position.x, position.y);\n\n\t if (parameters.length > 2) {\n\t command = \"l\";\n\t parameters.splice(0, 2);\n\t }\n\t }\n\n\t if (ShapeMap[command]) {\n\t ShapeMap[command](\n\t pathInstance, {\n\t parameters: parameters,\n\t position: position,\n\t isRelative: isRelative,\n\t previousCommand: previousCommand\n\t }\n\t );\n\n\t if (closePath && closePath.toLowerCase() === CLOSE) {\n\t pathInstance.close();\n\t }\n\t } else if (command !== MOVE) {\n\t throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n\t }\n\n\t previousCommand = command;\n\t });\n\n\t return pathInstance;\n\t}\n\n\tfunction elementsBoundingBox(elements, applyTransform, transformation) {\n\t var boundingBox;\n\n\t for (var i = 0; i < elements.length; i++) {\n\t var element = elements[i];\n\t if (element.visible()) {\n\t var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n\t if (elementBoundingBox) {\n\t if (boundingBox) {\n\t boundingBox = Rect.union(boundingBox, elementBoundingBox);\n\t } else {\n\t boundingBox = elementBoundingBox;\n\t }\n\t }\n\t }\n\t }\n\n\t return boundingBox;\n\t}\n\n\tfunction elementsClippedBoundingBox(elements, transformation) {\n\t var boundingBox;\n\n\t for (var i = 0; i < elements.length; i++) {\n\t var element = elements[i];\n\t if (element.visible()) {\n\t var elementBoundingBox = element.clippedBBox(transformation);\n\t if (elementBoundingBox) {\n\t if (boundingBox) {\n\t boundingBox = Rect.union(boundingBox, elementBoundingBox);\n\t } else {\n\t boundingBox = elementBoundingBox;\n\t }\n\t }\n\t }\n\t }\n\n\t return boundingBox;\n\t}\n\n\tvar Path = (function (superclass) {\n\t function Path(options) {\n\t superclass.call(this, options);\n\t this.segments = new GeometryElementsArray();\n\t this.segments.addObserver(this);\n\n\t if (!defined(this.options.stroke)) {\n\t this.stroke(\"#000\");\n\n\t if (!defined(this.options.stroke.lineJoin)) {\n\t this.options.set(\"stroke.lineJoin\", \"miter\");\n\t }\n\t }\n\t }\n\n\t extendStatic(Path, superclass);\n\t Path.prototype = Object.create( superclass && superclass.prototype );\n\t Path.prototype.constructor = Path;\n\t Path.fn = Path.prototype;\n\t Path.fn.init = Path.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t Path.parse = function parse (str, options) {\n\t return MultiPath.parse(str, options);\n\t };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Path\";\n\t };\n\n\t Path.prototype.moveTo = function moveTo (x, y) {\n\t this.suspend();\n\t this.segments.elements([]);\n\t this.resume();\n\n\t this.lineTo(x, y);\n\n\t return this;\n\t };\n\n\t Path.prototype.lineTo = function lineTo (x, y) {\n\t var point = defined(y) ? new Point(x, y) : x;\n\t var segment = new Segment(point);\n\n\t this.segments.push(segment);\n\n\t return this;\n\t };\n\n\t Path.prototype.curveTo = function curveTo (controlOut, controlIn, point) {\n\t if (this.segments.length > 0) {\n\t var lastSegment = last(this.segments);\n\t var segment = new Segment(point, controlIn);\n\t this.suspend();\n\t lastSegment.controlOut(controlOut);\n\t this.resume();\n\n\t this.segments.push(segment);\n\t }\n\n\t return this;\n\t };\n\n\t Path.prototype.arc = function arc (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n\t if (this.segments.length > 0) {\n\t var lastSegment = last(this.segments);\n\t var anchor = lastSegment.anchor();\n\t var start = rad(startAngle);\n\t var center = new Point(anchor.x - radiusX * Math.cos(start),\n\t anchor.y - radiusY * Math.sin(start));\n\t var arc = new Arc$2(center, {\n\t startAngle: startAngle,\n\t endAngle: endAngle,\n\t radiusX: radiusX,\n\t radiusY: radiusY,\n\t anticlockwise: anticlockwise\n\t });\n\n\t this._addArcSegments(arc);\n\t }\n\n\t return this;\n\t };\n\n\t Path.prototype.arcTo = function arcTo (end, rx, ry, largeArc, swipe, rotation) {\n\t if (this.segments.length > 0) {\n\t var lastSegment = last(this.segments);\n\t var anchor = lastSegment.anchor();\n\t var arc = Arc$2.fromPoints(anchor, Point.create(end), rx, ry, largeArc, swipe, rotation);\n\n\t this._addArcSegments(arc);\n\t }\n\t return this;\n\t };\n\n\t Path.prototype._addArcSegments = function _addArcSegments (arc) {\n\t var this$1 = this;\n\n\t this.suspend();\n\n\t var curvePoints = arc.curvePoints();\n\n\t for (var i = 1; i < curvePoints.length; i += 3) {\n\t this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n\t }\n\n\t this.resume();\n\t this.geometryChange();\n\t };\n\n\t Path.prototype.close = function close () {\n\t this.options.closed = true;\n\t this.geometryChange();\n\n\t return this;\n\t };\n\n\t Path.prototype.rawBBox = function rawBBox () {\n\t return this._bbox();\n\t };\n\n\t Path.prototype._containsPoint = function _containsPoint (point) {\n\t var segments = this.segments;\n\t var length = segments.length;\n\t var intersectionsCount = 0;\n\t var previous, current;\n\n\t for (var idx = 1; idx < length; idx++) {\n\t previous = segments[idx - 1];\n\t current = segments[idx];\n\t intersectionsCount += previous._intersectionsTo(current, point);\n\t }\n\n\t if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n\t intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n\t }\n\n\t return intersectionsCount % 2 !== 0;\n\t };\n\n\t Path.prototype._isOnPath = function _isOnPath (point, width) {\n\t var segments = this.segments;\n\t var length = segments.length;\n\t var pathWidth = width || this.options.stroke.width;\n\n\t if (length > 1) {\n\t if (segments[0]._isOnPathTo(segments[1], point, pathWidth, \"start\")) {\n\t return true;\n\t }\n\n\t for (var idx = 2; idx <= length - 2; idx++) {\n\t if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n\t return true;\n\t }\n\t }\n\n\t if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, \"end\")) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\n\t Path.prototype._bbox = function _bbox (matrix) {\n\t var segments = this.segments;\n\t var length = segments.length;\n\t var boundingBox;\n\n\t if (length === 1) {\n\t var anchor = segments[0].anchor().transformCopy(matrix);\n\t boundingBox = new Rect(anchor, Size.ZERO);\n\t } else if (length > 0) {\n\t for (var i = 1; i < length; i++) {\n\t var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n\t if (boundingBox) {\n\t boundingBox = Rect.union(boundingBox, segmentBox);\n\t } else {\n\t boundingBox = segmentBox;\n\t }\n\t }\n\t }\n\n\t return boundingBox;\n\t };\n\n\t Path.fromRect = function fromRect (rect, options) {\n\t var path = new Path(options);\n\t var ref = rect.cornerRadius;\n\t var rx = ref[0];\n\t var ry = ref[1];\n\n\t if (rx === 0 && ry === 0) {\n\t path.moveTo(rect.topLeft())\n\t .lineTo(rect.topRight())\n\t .lineTo(rect.bottomRight())\n\t .lineTo(rect.bottomLeft())\n\t .close();\n\t } else {\n\t var origin = rect.origin;\n\t var x = origin.x;\n\t var y = origin.y;\n\t var width = rect.width();\n\t var height = rect.height();\n\t rx = limitValue(rx, 0, width / 2);\n\t ry = limitValue(ry, 0, height / 2);\n\n\t path.moveTo(x + rx, y)\n\t .lineTo(x + width - rx, y)\n\t .arcTo([ x + width, y + ry ], rx, ry, false)\n\t .lineTo(x + width, y + height - ry)\n\t .arcTo([ x + width - rx, y + height ], rx, ry, false)\n\t .lineTo(x + rx, y + height)\n\t .arcTo([ x, y + height - ry ], rx, ry, false)\n\t .lineTo(x, y + ry)\n\t .arcTo([ x + rx, y ], rx, ry, false);\n\t }\n\n\t return path;\n\t };\n\n\t Path.fromPoints = function fromPoints (points, options) {\n\t if (points) {\n\t var path = new Path(options);\n\n\t for (var i = 0; i < points.length; i++) {\n\t var point = Point.create(points[i]);\n\t if (point) {\n\t if (i === 0) {\n\t path.moveTo(point);\n\t } else {\n\t path.lineTo(point);\n\t }\n\t }\n\t }\n\n\t return path;\n\t }\n\t };\n\n\t Path.fromArc = function fromArc (arc, options) {\n\t var path = new Path(options);\n\t var startAngle = arc.startAngle;\n\t var start = arc.pointAt(startAngle);\n\t path.moveTo(start.x, start.y);\n\t path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n\t return path;\n\t };\n\n\t Object.defineProperties( Path.prototype, prototypeAccessors );\n\n\t return Path;\n\t}(paintable(measurable(Element$1))));\n\n\tvar MultiPath = (function (superclass) {\n\t function MultiPath(options) {\n\t superclass.call(this, options);\n\t this.paths = new GeometryElementsArray();\n\t this.paths.addObserver(this);\n\n\t if (!defined(this.options.stroke)) {\n\t this.stroke(\"#000\");\n\t }\n\t }\n\n\t extendStatic(MultiPath, superclass);\n\t MultiPath.prototype = Object.create( superclass && superclass.prototype );\n\t MultiPath.prototype.constructor = MultiPath;\n\t MultiPath.fn = MultiPath.prototype;\n\t MultiPath.fn.init = MultiPath.fn.constructor;\n\n\t var prototypeAccessors$1 = { nodeType: {} };\n\n\t MultiPath.parse = function parse (str, options) {\n\t var instance = new MultiPath(options);\n\t return parsePath(instance, str);\n\t };\n\n\t prototypeAccessors$1.nodeType.get = function () {\n\t return \"MultiPath\";\n\t };\n\n\t MultiPath.prototype.moveTo = function moveTo (x, y) {\n\t var path = new Path();\n\t path.moveTo(x, y);\n\n\t this.paths.push(path);\n\n\t return this;\n\t };\n\n\t MultiPath.prototype.lineTo = function lineTo (x, y) {\n\t if (this.paths.length > 0) {\n\t last(this.paths).lineTo(x, y);\n\t }\n\n\t return this;\n\t };\n\n\t MultiPath.prototype.curveTo = function curveTo (controlOut, controlIn, point) {\n\t if (this.paths.length > 0) {\n\t last(this.paths).curveTo(controlOut, controlIn, point);\n\t }\n\n\t return this;\n\t };\n\n\t MultiPath.prototype.arc = function arc (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n\t if (this.paths.length > 0) {\n\t last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n\t }\n\n\t return this;\n\t };\n\n\t MultiPath.prototype.arcTo = function arcTo (end, rx, ry, largeArc, swipe, rotation) {\n\t if (this.paths.length > 0) {\n\t last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n\t }\n\n\t return this;\n\t };\n\n\t MultiPath.prototype.close = function close () {\n\t if (this.paths.length > 0) {\n\t last(this.paths).close();\n\t }\n\n\t return this;\n\t };\n\n\t MultiPath.prototype._bbox = function _bbox (matrix) {\n\t return elementsBoundingBox(this.paths, true, matrix);\n\t };\n\n\t MultiPath.prototype.rawBBox = function rawBBox () {\n\t return elementsBoundingBox(this.paths, false);\n\t };\n\n\t MultiPath.prototype._containsPoint = function _containsPoint (point) {\n\t var paths = this.paths;\n\n\t for (var idx = 0; idx < paths.length; idx++) {\n\t if (paths[idx]._containsPoint(point)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\n\t MultiPath.prototype._isOnPath = function _isOnPath (point) {\n\t var paths = this.paths;\n\t var width = this.options.stroke.width;\n\n\t for (var idx = 0; idx < paths.length; idx++) {\n\t if (paths[idx]._isOnPath(point, width)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\n\t MultiPath.prototype._clippedBBox = function _clippedBBox (transformation) {\n\t return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n\t };\n\n\t Object.defineProperties( MultiPath.prototype, prototypeAccessors$1 );\n\n\t return MultiPath;\n\t}(paintable(measurable(Element$1))));\n\n\tvar DEFAULT_STROKE$1 = \"#000\";\n\n\tvar Arc = (function (superclass) {\n\t function Arc(geometry, options) {\n\t if (geometry === void 0) { geometry = new Arc$2(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.geometry(geometry);\n\n\t if (!defined(this.options.stroke)) {\n\t this.stroke(DEFAULT_STROKE$1);\n\t }\n\t }\n\n\t extendStatic(Arc, superclass);\n\t Arc.prototype = Object.create( superclass && superclass.prototype );\n\t Arc.prototype.constructor = Arc;\n\t Arc.fn = Arc.prototype;\n\t Arc.fn.init = Arc.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Arc\";\n\t };\n\n\t Arc.prototype._bbox = function _bbox (matrix) {\n\t return this._geometry.bbox(matrix);\n\t };\n\n\t Arc.prototype.rawBBox = function rawBBox () {\n\t return this.geometry().bbox();\n\t };\n\n\t Arc.prototype.toPath = function toPath () {\n\t var path = new Path();\n\t var curvePoints = this.geometry().curvePoints();\n\n\t if (curvePoints.length > 0) {\n\t path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n\t for (var i = 1; i < curvePoints.length; i += 3) {\n\t path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n\t }\n\t }\n\n\t return path;\n\t };\n\n\t Arc.prototype._containsPoint = function _containsPoint (point) {\n\t return this.geometry().containsPoint(point);\n\t };\n\n\t Arc.prototype._isOnPath = function _isOnPath (point) {\n\t return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n\t };\n\n\t Object.defineProperties( Arc.prototype, prototypeAccessors );\n\n\t return Arc;\n\t}(paintable(measurable(withGeometry(Element$1)))));\n\n\tvar DEFAULT_FONT = \"12px sans-serif\";\n\tvar DEFAULT_FILL = \"#000\";\n\n\tvar Text = (function (superclass) {\n\t function Text(content, position, options) {\n\t if (position === void 0) { position = new Point(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.content(content);\n\t this.position(position);\n\n\t if (!this.options.font) {\n\t this.options.font = DEFAULT_FONT;\n\t }\n\n\t if (!defined(this.options.fill)) {\n\t this.fill(DEFAULT_FILL);\n\t }\n\t }\n\n\t extendStatic(Text, superclass);\n\t Text.prototype = Object.create( superclass && superclass.prototype );\n\t Text.prototype.constructor = Text;\n\t Text.fn = Text.prototype;\n\t Text.fn.init = Text.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Text\";\n\t };\n\n\t Text.prototype.content = function content (value) {\n\t if (defined(value)) {\n\t this.options.set(\"content\", value);\n\t return this;\n\t }\n\n\t return this.options.get(\"content\");\n\t };\n\n\t Text.prototype.measure = function measure () {\n\t var metrics = kendoUtil.measureText(this.content(), {\n\t font: this.options.get(\"font\")\n\t });\n\n\t return metrics;\n\t };\n\n\t Text.prototype.rect = function rect () {\n\t var size = this.measure();\n\t var pos = this.position().clone();\n\t return new Rect(pos, [ size.width, size.height ]);\n\t };\n\n\t Text.prototype.bbox = function bbox (transformation) {\n\t var combinedMatrix = toMatrix(this.currentTransform(transformation));\n\t return this.rect().bbox(combinedMatrix);\n\t };\n\n\t Text.prototype.rawBBox = function rawBBox () {\n\t return this.rect().bbox();\n\t };\n\n\t Text.prototype._containsPoint = function _containsPoint (point) {\n\t return this.rect().containsPoint(point);\n\t };\n\n\t Object.defineProperties( Text.prototype, prototypeAccessors );\n\n\t return Text;\n\t}(paintable(withPoints(Element$1, [ \"position\" ]))));\n\n\tvar Image$1 = (function (superclass) {\n\t function Image(src, rect, options) {\n\t if (rect === void 0) { rect = new Rect(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.src(src);\n\t this.rect(rect);\n\t }\n\n\t extendStatic(Image, superclass);\n\t Image.prototype = Object.create( superclass && superclass.prototype );\n\t Image.prototype.constructor = Image;\n\t Image.fn = Image.prototype;\n\t Image.fn.init = Image.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Image\";\n\t };\n\n\t Image.prototype.src = function src (value) {\n\t if (defined(value)) {\n\t this.options.set(\"src\", value);\n\t return this;\n\t }\n\n\t return this.options.get(\"src\");\n\t };\n\n\t Image.prototype.bbox = function bbox (transformation) {\n\t var combinedMatrix = toMatrix(this.currentTransform(transformation));\n\t return this._rect.bbox(combinedMatrix);\n\t };\n\n\t Image.prototype.rawBBox = function rawBBox () {\n\t return this._rect.bbox();\n\t };\n\n\t Image.prototype._containsPoint = function _containsPoint (point) {\n\t return this._rect.containsPoint(point);\n\t };\n\n\t Image.prototype._hasFill = function _hasFill () {\n\t return this.src();\n\t };\n\n\t Object.defineProperties( Image.prototype, prototypeAccessors );\n\n\t return Image;\n\t}(withGeometry(Element$1, [ \"rect\" ])));\n\n\tvar traversable = function (TBase, childrenField) { return (\n\t (function (TBase) {\n\t function anonymous () {\n\t TBase.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, TBase);\n\t anonymous.prototype = Object.create( TBase && TBase.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.traverse = function traverse (callback) {\n\t var children = this[childrenField];\n\n\t for (var i = 0; i < children.length; i++) {\n\t var child = children[i];\n\n\t if (child.traverse) {\n\t child.traverse(callback);\n\t } else {\n\t callback(child);\n\t }\n\t }\n\n\t return this;\n\t };\n\n\t return anonymous;\n\t }(TBase))\n\t); };\n\n\tvar Group = (function (superclass) {\n\t function Group(options) {\n\t superclass.call(this, options);\n\t this.children = [];\n\t }\n\n\t extendStatic(Group, superclass);\n\t Group.prototype = Object.create( superclass && superclass.prototype );\n\t Group.prototype.constructor = Group;\n\t Group.fn = Group.prototype;\n\t Group.fn.init = Group.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Group\";\n\t };\n\n\t Group.prototype.childrenChange = function childrenChange (action, items, index) {\n\t this.trigger(\"childrenChange\",{\n\t action: action,\n\t items: items,\n\t index: index\n\t });\n\t };\n\n\t Group.prototype.append = function append$1 () {\n\t append$1$1(this.children, arguments);\n\t this._reparent(arguments, this);\n\n\t this.childrenChange(\"add\", arguments);\n\n\t return this;\n\t };\n\n\t Group.prototype.insert = function insert (index, element) {\n\t this.children.splice(index, 0, element);\n\t element.parent = this;\n\n\t this.childrenChange(\"add\", [ element ], index);\n\n\t return this;\n\t };\n\n\t Group.prototype.insertAt = function insertAt (element, index) {\n\t return this.insert(index, element);\n\t };\n\n\t Group.prototype.remove = function remove (element) {\n\t var index = this.children.indexOf(element);\n\t if (index >= 0) {\n\t this.children.splice(index, 1);\n\t element.parent = null;\n\t this.childrenChange(\"remove\", [ element ], index);\n\t }\n\n\t return this;\n\t };\n\n\t Group.prototype.removeAt = function removeAt (index) {\n\t if (0 <= index && index < this.children.length) {\n\t var element = this.children[index];\n\t this.children.splice(index, 1);\n\t element.parent = null;\n\t this.childrenChange(\"remove\", [ element ], index);\n\t }\n\n\t return this;\n\t };\n\n\t Group.prototype.clear = function clear () {\n\t var items = this.children;\n\t this.children = [];\n\t this._reparent(items, null);\n\n\t this.childrenChange(\"remove\", items, 0);\n\n\t return this;\n\t };\n\n\t Group.prototype.bbox = function bbox (transformation) {\n\t return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n\t };\n\n\t Group.prototype.rawBBox = function rawBBox () {\n\t return elementsBoundingBox(this.children, false);\n\t };\n\n\t Group.prototype._clippedBBox = function _clippedBBox (transformation) {\n\t return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n\t };\n\n\t Group.prototype.currentTransform = function currentTransform (transformation) {\n\t return Element$1.prototype.currentTransform.call(this, transformation) || null;\n\t };\n\n\t Group.prototype.containsPoint = function containsPoint (point, parentTransform) {\n\t if (this.visible()) {\n\t var children = this.children;\n\t var transform = this.currentTransform(parentTransform);\n\t for (var idx = 0; idx < children.length; idx++) {\n\t if (children[idx].containsPoint(point, transform)) {\n\t return true;\n\t }\n\t }\n\t }\n\t return false;\n\t };\n\n\t Group.prototype._reparent = function _reparent (elements, newParent) {\n\t var this$1 = this;\n\n\t for (var i = 0; i < elements.length; i++) {\n\t var child = elements[i];\n\t var parent = child.parent;\n\t if (parent && parent !== this$1 && parent.remove) {\n\t parent.remove(child);\n\t }\n\n\t child.parent = newParent;\n\t }\n\t };\n\n\t Object.defineProperties( Group.prototype, prototypeAccessors );\n\n\t return Group;\n\t}(traversable(Element$1, \"children\")));\n\n\tfunction translateToPoint(point, bbox, element) {\n\t var transofrm = element.transform() || transform$1();\n\t var matrix = transofrm.matrix();\n\t matrix.e += point.x - bbox.origin.x;\n\t matrix.f += point.y - bbox.origin.y;\n\n\t transofrm.matrix(matrix);\n\t element.transform(transofrm);\n\t}\n\n\tfunction alignStart(size, rect, align, axis, sizeField) {\n\t var start;\n\t if (align === \"start\") {\n\t start = rect.origin[axis];\n\t } else if (align === \"end\") {\n\t start = rect.origin[axis] + rect.size[sizeField] - size;\n\t } else {\n\t start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n\t }\n\n\t return start;\n\t}\n\n\tfunction alignStartReverse(size, rect, align, axis, sizeField) {\n\t var start;\n\t if (align === \"start\") {\n\t start = rect.origin[axis] + rect.size[sizeField] - size;\n\t } else if (align === \"end\") {\n\t start = rect.origin[axis];\n\t } else {\n\t start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n\t }\n\n\t return start;\n\t}\n\n\tvar DEFAULT_OPTIONS = {\n\t alignContent: \"start\",\n\t justifyContent: \"start\",\n\t alignItems: \"start\",\n\t spacing: 0,\n\t orientation: \"horizontal\",\n\t lineSpacing: 0,\n\t wrap: true,\n\t revers: false\n\t};\n\n\tvar forEach = function (elements, callback) {\n\t elements.forEach(callback);\n\t};\n\n\tvar forEachReverse = function (elements, callback) {\n\t var length = elements.length;\n\n\t for (var idx = length - 1; idx >= 0; idx--) {\n\t callback(elements[idx], idx);\n\t }\n\t};\n\n\tvar Layout = (function (Group$$1) {\n\t function Layout(rect, options) {\n\t Group$$1.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n\t this._rect = rect;\n\t this._fieldMap = {};\n\t }\n\n\t extendStatic(Layout, Group$$1);\n\t Layout.prototype = Object.create( Group$$1 && Group$$1.prototype );\n\t Layout.prototype.constructor = Layout;\n\t Layout.fn = Layout.prototype;\n\t Layout.fn.init = Layout.fn.constructor;\n\n\t Layout.prototype.rect = function rect (value) {\n\t if (value) {\n\t this._rect = value;\n\t return this;\n\t }\n\n\t return this._rect;\n\t };\n\n\t Layout.prototype._initMap = function _initMap () {\n\t var options = this.options;\n\t var fieldMap = this._fieldMap;\n\t if (options.orientation === \"horizontal\") {\n\t fieldMap.sizeField = \"width\";\n\t fieldMap.groupsSizeField = \"height\";\n\t fieldMap.groupAxis = \"x\";\n\t fieldMap.groupsAxis = \"y\";\n\t } else {\n\t fieldMap.sizeField = \"height\";\n\t fieldMap.groupsSizeField = \"width\";\n\t fieldMap.groupAxis = \"y\";\n\t fieldMap.groupsAxis = \"x\";\n\t }\n\n\t if (options.reverse) {\n\t this.forEach = forEachReverse;\n\t this.justifyAlign = alignStartReverse;\n\t } else {\n\t this.forEach = forEach;\n\t this.justifyAlign = alignStart;\n\t }\n\t };\n\n\t Layout.prototype.reflow = function reflow () {\n\t var this$1 = this;\n\n\t if (!this._rect || this.children.length === 0) {\n\t return;\n\t }\n\t this._initMap();\n\n\t if (this.options.transform) {\n\t this.transform(null);\n\t }\n\n\t var options = this.options;\n\t var rect = this._rect;\n\t var ref = this._initGroups();\n\t var groups = ref.groups;\n\t var groupsSize = ref.groupsSize;\n\t var ref$1 = this._fieldMap;\n\t var sizeField = ref$1.sizeField;\n\t var groupsSizeField = ref$1.groupsSizeField;\n\t var groupAxis = ref$1.groupAxis;\n\t var groupsAxis = ref$1.groupsAxis;\n\t var groupOrigin = new Point();\n\t var elementOrigin = new Point();\n\t var size = new Size();\n\t var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n\t var elementStart, group, groupBox;\n\n\t var arrangeElements = function (bbox, idx) {\n\t var element = group.elements[idx];\n\n\t elementOrigin[groupAxis] = elementStart;\n\t elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n\t translateToPoint(elementOrigin, bbox, element);\n\t elementStart += bbox.size[sizeField] + options.spacing;\n\t };\n\n\t for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n\t group = groups[groupIdx];\n\t groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n\t groupOrigin[groupsAxis] = groupStart;\n\t size[sizeField] = group.size;\n\t size[groupsSizeField] = group.lineSize;\n\t groupBox = new Rect(groupOrigin, size);\n\t this$1.forEach(group.bboxes, arrangeElements);\n\n\t groupStart += group.lineSize + options.lineSpacing;\n\t }\n\n\t if (!options.wrap && group.size > rect.size[sizeField]) {\n\t var scale = rect.size[sizeField] / groupBox.size[sizeField];\n\t var scaledStart = groupBox.topLeft().scale(scale, scale);\n\t var scaledSize = groupBox.size[groupsSizeField] * scale;\n\t var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n\t var transform = transform$1();\n\t if (groupAxis === \"x\") {\n\t transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n\t } else {\n\t transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n\t }\n\t transform.scale(scale, scale);\n\n\t this.transform(transform);\n\t }\n\t };\n\n\t Layout.prototype._initGroups = function _initGroups () {\n\t var this$1 = this;\n\n\t var ref = this;\n\t var options = ref.options;\n\t var children = ref.children;\n\t var lineSpacing = options.lineSpacing;\n\t var wrap = options.wrap;\n\t var spacing = options.spacing;\n\t var sizeField = this._fieldMap.sizeField;\n\t var group = this._newGroup();\n\t var groups = [];\n\t var addGroup = function() {\n\t groups.push(group);\n\t groupsSize += group.lineSize + lineSpacing;\n\t };\n\t var groupsSize = -lineSpacing;\n\n\t for (var idx = 0; idx < children.length; idx++) {\n\t var element = children[idx];\n\t var bbox = children[idx].clippedBBox();\n\t if (element.visible() && bbox) {\n\t if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n\t if (group.bboxes.length === 0) {\n\t this$1._addToGroup(group, bbox, element);\n\t addGroup();\n\t group = this$1._newGroup();\n\t } else {\n\t addGroup();\n\t group = this$1._newGroup();\n\t this$1._addToGroup(group, bbox, element);\n\t }\n\t } else {\n\t this$1._addToGroup(group, bbox, element);\n\t }\n\t }\n\t }\n\n\t if (group.bboxes.length) {\n\t addGroup();\n\t }\n\n\t return {\n\t groups: groups,\n\t groupsSize: groupsSize\n\t };\n\t };\n\n\t Layout.prototype._addToGroup = function _addToGroup (group, bbox, element) {\n\t group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n\t group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n\t group.bboxes.push(bbox);\n\t group.elements.push(element);\n\t };\n\n\t Layout.prototype._newGroup = function _newGroup () {\n\t return {\n\t lineSize: 0,\n\t size: -this.options.spacing,\n\t bboxes: [],\n\t elements: []\n\t };\n\t };\n\n\t return Layout;\n\t}(Group));\n\n\tvar Rect$2 = (function (superclass) {\n\t function Rect$$1(geometry, options) {\n\t if (geometry === void 0) { geometry = new Rect(); }\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.geometry(geometry);\n\n\t if (!defined(this.options.stroke)) {\n\t this.stroke(\"#000\");\n\t }\n\t }\n\n\t extendStatic(Rect$$1, superclass);\n\t Rect$$1.prototype = Object.create( superclass && superclass.prototype );\n\t Rect$$1.prototype.constructor = Rect$$1;\n\t Rect$$1.fn = Rect$$1.prototype;\n\t Rect$$1.fn.init = Rect$$1.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Rect\";\n\t };\n\n\t Rect$$1.prototype._bbox = function _bbox (matrix) {\n\t return this._geometry.bbox(matrix);\n\t };\n\n\t Rect$$1.prototype.rawBBox = function rawBBox () {\n\t return this._geometry.bbox();\n\t };\n\n\t Rect$$1.prototype._containsPoint = function _containsPoint (point) {\n\t return this._geometry.containsPoint(point);\n\t };\n\n\t Rect$$1.prototype._isOnPath = function _isOnPath (point) {\n\t return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n\t };\n\n\t Object.defineProperties( Rect$$1.prototype, prototypeAccessors );\n\n\t return Rect$$1;\n\t}(paintable(measurable(withGeometry(Element$1)))));\n\n\tfunction alignElements(elements, rect, alignment, axis, sizeField) {\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t var bbox = elements[idx].clippedBBox();\n\t if (bbox) {\n\t var point = bbox.origin.clone();\n\t point[axis] = alignStart(bbox.size[sizeField], rect, alignment || \"start\", axis, sizeField);\n\t translateToPoint(point, bbox, elements[idx]);\n\t }\n\t }\n\t}\n\n\tfunction align(elements, rect, alignment) {\n\t alignElements(elements, rect, alignment, \"x\", \"width\");\n\t}\n\n\tfunction vAlign(elements, rect, alignment) {\n\t alignElements(elements, rect, alignment, \"y\", \"height\");\n\t}\n\n\tfunction stackElements(elements, stackAxis, otherAxis, sizeField) {\n\t if (elements.length > 1) {\n\t var origin = new Point();\n\t var previousBBox = elements[0].bbox;\n\n\t for (var idx = 1; idx < elements.length; idx++) {\n\t var element = elements[idx].element;\n\t var bbox = elements[idx].bbox;\n\t origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n\t origin[otherAxis] = bbox.origin[otherAxis];\n\t translateToPoint(origin, bbox, element);\n\t bbox.origin[stackAxis] = origin[stackAxis];\n\t previousBBox = bbox;\n\t }\n\t }\n\t}\n\n\tfunction createStackElements(elements) {\n\t var stackElements = [];\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t var element = elements[idx];\n\t var bbox = element.clippedBBox();\n\t if (bbox) {\n\t stackElements.push({\n\t element: element,\n\t bbox: bbox\n\t });\n\t }\n\t }\n\n\t return stackElements;\n\t}\n\n\tfunction stack(elements) {\n\t stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n\t}\n\n\tfunction vStack(elements) {\n\t stackElements(createStackElements(elements), \"y\", \"x\", \"height\");\n\t}\n\n\tfunction getStacks(elements, rect, sizeField) {\n\t var maxSize = rect.size[sizeField];\n\t var stacks = [];\n\t var stack = [];\n\t var stackSize = 0;\n\t var element, bbox;\n\n\t var addElementToStack = function() {\n\t stack.push({\n\t element: element,\n\t bbox: bbox\n\t });\n\t };\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t element = elements[idx];\n\n\t bbox = element.clippedBBox();\n\t if (bbox) {\n\t var size = bbox.size[sizeField];\n\t if (stackSize + size > maxSize) {\n\t if (stack.length) {\n\t stacks.push(stack);\n\t stack = [];\n\t addElementToStack();\n\t stackSize = size;\n\t } else {\n\t addElementToStack();\n\t stacks.push(stack);\n\t stack = [];\n\t stackSize = 0;\n\t }\n\t } else {\n\t addElementToStack();\n\t stackSize += size;\n\t }\n\t }\n\t }\n\n\t if (stack.length) {\n\t stacks.push(stack);\n\t }\n\n\t return stacks;\n\t}\n\n\tfunction wrapElements(elements, rect, axis, otherAxis, sizeField) {\n\t var stacks = getStacks(elements, rect, sizeField);\n\t var origin = rect.origin.clone();\n\t var result = [];\n\n\t for (var idx = 0; idx < stacks.length; idx++) {\n\t var stack = stacks[idx];\n\t var startElement = stack[0];\n\t origin[otherAxis] = startElement.bbox.origin[otherAxis];\n\t translateToPoint(origin, startElement.bbox, startElement.element);\n\t startElement.bbox.origin[axis] = origin[axis];\n\t stackElements(stack, axis, otherAxis, sizeField);\n\t result.push([]);\n\t for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n\t result[idx].push(stack[elementIdx].element);\n\t }\n\t }\n\t return result;\n\t}\n\n\tfunction wrap(elements, rect) {\n\t return wrapElements(elements, rect, \"x\", \"y\", \"width\");\n\t}\n\n\tfunction vWrap(elements, rect) {\n\t return wrapElements(elements, rect, \"y\", \"x\", \"height\");\n\t}\n\n\tfunction fit(element, rect) {\n\t var bbox = element.clippedBBox();\n\t if (bbox) {\n\t var elementSize = bbox.size;\n\t var rectSize = rect.size;\n\t if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n\t var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n\t var transform = element.transform() || transform$1();\n\t transform.scale(scale, scale);\n\t element.transform(transform);\n\t }\n\t }\n\t}\n\n\tvar StopsArray = (function (ElementsArray$$1) {\n\t function StopsArray () {\n\t ElementsArray$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(StopsArray, ElementsArray$$1);\n\t StopsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n\t StopsArray.prototype.constructor = StopsArray;\n\t StopsArray.fn = StopsArray.prototype;\n\t StopsArray.fn.init = StopsArray.fn.constructor;\n\n\t StopsArray.prototype._change = function _change () {\n\t this.optionsChange({\n\t field: \"stops\"\n\t });\n\t };\n\n\t return StopsArray;\n\t}(ElementsArray));\n\n\tfunction optionsAccessor(name) {\n\t return function(value) {\n\t if (defined(value)) {\n\t this.options.set(name, value);\n\t return this;\n\t }\n\n\t return this.options.get(name);\n\t };\n\t}\n\n\tfunction defineOptionsAccessors(fn, names) {\n\t for (var i = 0; i < names.length; i++) {\n\t fn[names[i]] = optionsAccessor(names[i]);\n\t }\n\t}\n\n\tvar withOptions = function (TBase, names) {\n\t var result = (function (TBase) {\n\t function result () {\n\t TBase.apply(this, arguments);\n\t }extendStatic(result, TBase);\n\t result.prototype = Object.create( TBase && TBase.prototype );\n\t result.prototype.constructor = result;\n\t result.fn = result.prototype;\n\t result.fn.init = result.fn.constructor;\n\n\t return result;\n\t }(TBase));\n\t defineOptionsAccessors(result.prototype, names);\n\n\t return result;\n\t};\n\n\tvar options = [ \"offset\", \"color\", \"opacity\" ];\n\n\tvar GradientStop = (function (superclass) {\n\t function GradientStop(offset, color, opacity) {\n\t superclass.call(this);\n\n\t this.options = new OptionsStore({\n\t offset: offset,\n\t color: color,\n\t opacity: defined(opacity) ? opacity : 1\n\t });\n\n\t this.options.addObserver(this);\n\t }\n\n\t extendStatic(GradientStop, superclass);\n\t GradientStop.prototype = Object.create( superclass && superclass.prototype );\n\t GradientStop.prototype.constructor = GradientStop;\n\t GradientStop.fn = GradientStop.prototype;\n\t GradientStop.fn.init = GradientStop.fn.constructor;\n\n\t GradientStop.create = function create (arg) {\n\t if (defined(arg)) {\n\t var stop;\n\t if (arg instanceof GradientStop) {\n\t stop = arg;\n\t } else if (arg.length > 1) {\n\t stop = new GradientStop(arg[0], arg[1], arg[2]);\n\t } else {\n\t stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n\t }\n\n\t return stop;\n\t }\n\t };\n\n\t return GradientStop;\n\t}(withOptions(HasObservers, options)));\n\n\tvar Gradient = (function (HasObservers$$1) {\n\t function Gradient(options) {\n\t if (options === void 0) { options = {}; }\n\n\t HasObservers$$1.call(this);\n\n\t this.stops = new StopsArray(this._createStops(options.stops));\n\t this.stops.addObserver(this);\n\t this._userSpace = options.userSpace;\n\t this.id = definitionId();\n\t }\n\n\t extendStatic(Gradient, HasObservers$$1);\n\t Gradient.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n\t Gradient.prototype.constructor = Gradient;\n\t Gradient.fn = Gradient.prototype;\n\t Gradient.fn.init = Gradient.fn.constructor;\n\n\t var prototypeAccessors = { nodeType: {} };\n\n\t prototypeAccessors.nodeType.get = function () {\n\t return \"Gradient\";\n\t };\n\n\t Gradient.prototype.userSpace = function userSpace (value) {\n\t if (defined(value)) {\n\t this._userSpace = value;\n\t this.optionsChange();\n\t return this;\n\t }\n\n\t return this._userSpace;\n\t };\n\n\t Gradient.prototype._createStops = function _createStops (stops) {\n\t if (stops === void 0) { stops = []; }\n\n\t var result = [];\n\t for (var idx = 0; idx < stops.length; idx++) {\n\t result.push(GradientStop.create(stops[idx]));\n\t }\n\n\t return result;\n\t };\n\n\t Gradient.prototype.addStop = function addStop (offset, color, opacity) {\n\t this.stops.push(new GradientStop(offset, color, opacity));\n\t };\n\n\t Gradient.prototype.removeStop = function removeStop (stop) {\n\t var index = this.stops.indexOf(stop);\n\t if (index >= 0) {\n\t this.stops.splice(index, 1);\n\t }\n\t };\n\n\t Gradient.prototype.optionsChange = function optionsChange (e) {\n\t this.trigger(\"optionsChange\", {\n\t field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n\t value: this\n\t });\n\t };\n\n\t Gradient.prototype.geometryChange = function geometryChange () {\n\t this.optionsChange();\n\t };\n\n\t Object.defineProperties( Gradient.prototype, prototypeAccessors );\n\n\t return Gradient;\n\t}(HasObservers));\n\n\tvar points$1 = [ \"start\", \"end\" ];\n\n\tvar LinearGradient = (function (superclass) {\n\t function LinearGradient(options) {\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.start(options.start || new Point());\n\t this.end(options.end || new Point(1, 0));\n\t }\n\n\t extendStatic(LinearGradient, superclass);\n\t LinearGradient.prototype = Object.create( superclass && superclass.prototype );\n\t LinearGradient.prototype.constructor = LinearGradient;\n\t LinearGradient.fn = LinearGradient.prototype;\n\t LinearGradient.fn.init = LinearGradient.fn.constructor;\n\n\t return LinearGradient;\n\t}(withPoints(Gradient, points$1)));\n\n\tvar RadialGradient = (function (superclass) {\n\t function RadialGradient(options) {\n\t if (options === void 0) { options = {}; }\n\n\t superclass.call(this, options);\n\n\t this.center(options.center || new Point());\n\t this._radius = defined(options.radius) ? options.radius : 1;\n\t this._fallbackFill = options.fallbackFill;\n\t }\n\n\t extendStatic(RadialGradient, superclass);\n\t RadialGradient.prototype = Object.create( superclass && superclass.prototype );\n\t RadialGradient.prototype.constructor = RadialGradient;\n\t RadialGradient.fn = RadialGradient.prototype;\n\t RadialGradient.fn.init = RadialGradient.fn.constructor;\n\n\t RadialGradient.prototype.radius = function radius (value) {\n\t if (defined(value)) {\n\t this._radius = value;\n\t this.geometryChange();\n\t return this;\n\t }\n\n\t return this._radius;\n\t };\n\n\t RadialGradient.prototype.fallbackFill = function fallbackFill (value) {\n\t if (defined(value)) {\n\t this._fallbackFill = value;\n\t this.optionsChange();\n\t return this;\n\t }\n\n\t return this._fallbackFill;\n\t };\n\n\t return RadialGradient;\n\t}(withPoints(Gradient, [ \"center\" ])));\n\n\tfunction swing(position) {\n\t return 0.5 - Math.cos(position * Math.PI) / 2;\n\t}\n\n\tfunction linear(position) {\n\t return position;\n\t}\n\n\tfunction easeOutElastic(position, time, start, diff) {\n\t var s = 1.70158,\n\t p = 0,\n\t a = diff;\n\n\t if (position === 0) {\n\t return start;\n\t }\n\n\t if (position === 1) {\n\t return start + diff;\n\t }\n\n\t if (!p) {\n\t p = 0.5;\n\t }\n\n\t if (a < Math.abs(diff)) {\n\t a = diff;\n\t s = p / 4;\n\t } else {\n\t s = p / (2 * Math.PI) * Math.asin(diff / a);\n\t }\n\n\t return a * Math.pow(2, -10 * position) *\n\t Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n\t}\n\n\tvar easingFunctions = {\n\t\tswing: swing,\n\t\tlinear: linear,\n\t\teaseOutElastic: easeOutElastic\n\t};\n\n\tvar instance;\n\n\tvar AnimationFactory = (function (Class$$1) {\n\t function AnimationFactory() {\n\t Class$$1.call(this);\n\n\t this._items = [];\n\t }\n\n\t extendStatic(AnimationFactory, Class$$1);\n\t AnimationFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t AnimationFactory.prototype.constructor = AnimationFactory;\n\t AnimationFactory.fn = AnimationFactory.prototype;\n\t AnimationFactory.fn.init = AnimationFactory.fn.constructor;\n\n\t var staticAccessors = { current: {} };\n\n\t staticAccessors.current.get = function () {\n\t if (!instance) {\n\t instance = new AnimationFactory();\n\t }\n\n\t return instance;\n\t };\n\n\t AnimationFactory.prototype.register = function register (name, type) {\n\t this._items.push({\n\t name: name,\n\t type: type\n\t });\n\t };\n\n\t AnimationFactory.prototype.create = function create (element, options) {\n\t var items = this._items;\n\t var match;\n\n\t if (options && options.type) {\n\t var type = options.type.toLowerCase();\n\t for (var i = 0; i < items.length; i++) {\n\t if (items[i].name.toLowerCase() === type) {\n\t match = items[i];\n\t break;\n\t }\n\t }\n\t }\n\n\t if (match) {\n\t return new match.type(element, options);\n\t }\n\t };\n\n\t Object.defineProperties( AnimationFactory, staticAccessors );\n\n\t return AnimationFactory;\n\t}(Class));\n\n\tvar Animation = (function (Class$$1) {\n\t function Animation(element, options) {\n\t Class$$1.call(this);\n\n\t this.options = $.extend({}, this.options, options);\n\t this.element = element;\n\t }\n\n\t extendStatic(Animation, Class$$1);\n\t Animation.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t Animation.prototype.constructor = Animation;\n\t Animation.fn = Animation.prototype;\n\t Animation.fn.init = Animation.fn.constructor;\n\n\t var prototypeAccessors = { options: {} };\n\n\t Animation.create = function create (type, element, options) {\n\t return AnimationFactory.current.create(type, element, options);\n\t };\n\n\t prototypeAccessors.options.get = function () {\n\t return this._options || {\n\t duration: 500,\n\t easing: \"swing\"\n\t };\n\t };\n\n\t prototypeAccessors.options.set = function (value) {\n\t this._options = value;\n\t };\n\n\t Animation.prototype.setup = function setup () {};\n\t Animation.prototype.step = function step () {};\n\n\t Animation.prototype.play = function play () {\n\t var this$1 = this;\n\n\t var options = this.options;\n\t var duration = options.duration;\n\t var delay = options.delay; if (delay === void 0) { delay = 0; }\n\t var easing = easingFunctions[options.easing];\n\t var start = now() + delay;\n\t var finish = start + duration;\n\n\t if (duration === 0) {\n\t this.step(1);\n\t this.abort();\n\t } else {\n\t setTimeout(function () {\n\t var loop = function () {\n\t if (this$1._stopped) {\n\t return;\n\t }\n\n\t var wallTime = now();\n\n\t var time = limitValue(wallTime - start, 0, duration);\n\t var position = time / duration;\n\t var easingPosition = easing(position, time, 0, 1, duration);\n\n\t this$1.step(easingPosition);\n\n\t if (wallTime < finish) {\n\t kendo.animationFrame(loop);\n\t } else {\n\t this$1.abort();\n\t }\n\t };\n\n\t loop();\n\t }, delay);\n\t }\n\t };\n\n\t Animation.prototype.abort = function abort () {\n\t this._stopped = true;\n\t };\n\n\t Animation.prototype.destroy = function destroy () {\n\t this.abort();\n\t };\n\n\t Object.defineProperties( Animation.prototype, prototypeAccessors );\n\n\t return Animation;\n\t}(Class));\n\n\tvar instance$1;\n\n\tvar PathParser = (function (Class$$1) {\n\t function PathParser () {\n\t Class$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(PathParser, Class$$1);\n\t PathParser.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t PathParser.prototype.constructor = PathParser;\n\t PathParser.fn = PathParser.prototype;\n\t PathParser.fn.init = PathParser.fn.constructor;\n\n\t var staticAccessors = { current: {} };\n\n\t staticAccessors.current.get = function () {\n\t if (!instance$1) {\n\t instance$1 = new PathParser();\n\t }\n\n\t return instance$1;\n\t };\n\n\t PathParser.prototype.parse = function parse (str, options) {\n\t var multiPath = new MultiPath(options);\n\t return parsePath(multiPath, str);\n\t };\n\n\t Object.defineProperties( PathParser, staticAccessors );\n\n\t return PathParser;\n\t}(Class));\n\n\tvar BaseNode = (function (Class$$1) {\n\t function BaseNode(srcElement) {\n\t Class$$1.call(this);\n\n\t this.childNodes = [];\n\t this.parent = null;\n\n\t if (srcElement) {\n\t this.srcElement = srcElement;\n\t this.observe();\n\t }\n\t }\n\n\t extendStatic(BaseNode, Class$$1);\n\t BaseNode.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t BaseNode.prototype.constructor = BaseNode;\n\t BaseNode.fn = BaseNode.prototype;\n\t BaseNode.fn.init = BaseNode.fn.constructor;\n\n\t BaseNode.prototype.destroy = function destroy () {\n\t var this$1 = this;\n\n\t if (this.srcElement) {\n\t this.srcElement.removeObserver(this);\n\t }\n\n\t var children = this.childNodes;\n\t for (var i = 0; i < children.length; i++) {\n\t this$1.childNodes[i].destroy();\n\t }\n\n\t this.parent = null;\n\t };\n\n\t BaseNode.prototype.load = function load () {};\n\n\t BaseNode.prototype.observe = function observe () {\n\t if (this.srcElement) {\n\t this.srcElement.addObserver(this);\n\t }\n\t };\n\n\t BaseNode.prototype.append = function append (node) {\n\t this.childNodes.push(node);\n\t node.parent = this;\n\t };\n\n\t BaseNode.prototype.insertAt = function insertAt (node, pos) {\n\t this.childNodes.splice(pos, 0, node);\n\t node.parent = this;\n\t };\n\n\t BaseNode.prototype.remove = function remove (index, count) {\n\t var this$1 = this;\n\n\t var end = index + count;\n\t for (var i = index; i < end; i++) {\n\t this$1.childNodes[i].removeSelf();\n\t }\n\t this.childNodes.splice(index, count);\n\t };\n\n\t BaseNode.prototype.removeSelf = function removeSelf () {\n\t this.clear();\n\t this.destroy();\n\t };\n\n\t BaseNode.prototype.clear = function clear () {\n\t this.remove(0, this.childNodes.length);\n\t };\n\n\t BaseNode.prototype.invalidate = function invalidate () {\n\t if (this.parent) {\n\t this.parent.invalidate();\n\t }\n\t };\n\n\t BaseNode.prototype.geometryChange = function geometryChange () {\n\t this.invalidate();\n\t };\n\n\t BaseNode.prototype.optionsChange = function optionsChange () {\n\t this.invalidate();\n\t };\n\n\t BaseNode.prototype.childrenChange = function childrenChange (e) {\n\t if (e.action === \"add\") {\n\t this.load(e.items, e.index);\n\t } else if (e.action === \"remove\") {\n\t this.remove(e.index, e.items.length);\n\t }\n\n\t this.invalidate();\n\t };\n\n\t return BaseNode;\n\t}(Class));\n\n\tvar events = [\n\t \"click\",\n\t \"mouseenter\",\n\t \"mouseleave\",\n\t \"mousemove\",\n\t \"resize\"\n\t];\n\n\tvar Surface$2 = (function (Observable$$1) {\n\t function Surface(element, options) {\n\t Observable$$1.call(this);\n\n\t this.options = $.extend({}, options);\n\t this.element = element;\n\t this.element._kendoExportVisual = this.exportVisual.bind(this);\n\n\t this._click = this._handler(\"click\");\n\t this._mouseenter = this._handler(\"mouseenter\");\n\t this._mouseleave = this._handler(\"mouseleave\");\n\t this._mousemove = this._handler(\"mousemove\");\n\n\t this._visual = new Group();\n\n\t elementSize(element, this.options);\n\n\t this.bind(events, this.options);\n\n\t this._enableTracking();\n\t }\n\n\t extendStatic(Surface, Observable$$1);\n\t Surface.prototype = Object.create( Observable$$1 && Observable$$1.prototype );\n\t Surface.prototype.constructor = Surface;\n\t Surface.fn = Surface.prototype;\n\t Surface.fn.init = Surface.fn.constructor;\n\n\t Surface.prototype.draw = function draw (element) {\n\t this._visual.children.push(element);\n\t };\n\n\t Surface.prototype.clear = function clear () {\n\t this._visual.children = [];\n\t };\n\n\t Surface.prototype.destroy = function destroy () {\n\t this._visual = null;\n\t this.element._kendoExportVisual = null;\n\t this.unbind();\n\t };\n\n\t Surface.prototype.eventTarget = function eventTarget (e) {\n\t var this$1 = this;\n\n\t var domNode = eventElement(e);\n\t var node;\n\n\t while (!node && domNode) {\n\t node = domNode._kendoNode;\n\t if (domNode === this$1.element) {\n\t break;\n\t }\n\n\t domNode = domNode.parentElement;\n\t }\n\n\t if (node) {\n\t return node.srcElement;\n\t }\n\t };\n\n\t Surface.prototype.exportVisual = function exportVisual () {\n\t return this._visual;\n\t };\n\n\t Surface.prototype.getSize = function getSize () {\n\t return elementSize(this.element);\n\t };\n\n\t Surface.prototype.currentSize = function currentSize (size) {\n\t if (size) {\n\t this._size = size;\n\t } else {\n\t return this._size;\n\t }\n\t };\n\n\t Surface.prototype.setSize = function setSize (size) {\n\t elementSize(this.element, size);\n\n\t this.currentSize(size);\n\t this._resize();\n\t };\n\n\t Surface.prototype.resize = function resize (force) {\n\t var size = this.getSize();\n\t var currentSize = this.currentSize();\n\n\t if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n\t this.currentSize(size);\n\t this._resize(size, force);\n\t this.trigger(\"resize\", size);\n\t }\n\t };\n\n\t Surface.prototype.size = function size (value) {\n\t if (!value) {\n\t return this.getSize();\n\t }\n\n\t this.setSize(value);\n\t };\n\n\t Surface.prototype.suspendTracking = function suspendTracking () {\n\t this._suspendedTracking = true;\n\t };\n\n\t Surface.prototype.resumeTracking = function resumeTracking () {\n\t this._suspendedTracking = false;\n\t };\n\n\t Surface.prototype._enableTracking = function _enableTracking () {};\n\n\t Surface.prototype._resize = function _resize () {};\n\n\t Surface.prototype._handler = function _handler (eventName) {\n\t var this$1 = this;\n\n\t return function (e) {\n\t var node = this$1.eventTarget(e);\n\t if (node && !this$1._suspendedTracking) {\n\t this$1.trigger(eventName, {\n\t element: node,\n\t originalEvent: e,\n\t type: eventName\n\t });\n\t }\n\t };\n\t };\n\n\t Surface.prototype._elementOffset = function _elementOffset () {\n\t var element = this.element;\n\t var padding = elementPadding(element);\n\t var ref = elementOffset(element);\n\t var left = ref.left;\n\t var top = ref.top;\n\n\t return {\n\t left: left + padding.left,\n\t top: top + padding.top\n\t };\n\t };\n\n\t Surface.prototype._surfacePoint = function _surfacePoint (e) {\n\t var offset = this._elementOffset();\n\t var coord = eventCoordinates(e);\n\t var x = coord.x - offset.left;\n\t var y = coord.y - offset.top;\n\n\t var inverseTransform = elementScale(this.element).invert();\n\t var point = new Point(\n\t x,\n\t y\n\t ).transform(inverseTransform);\n\n\t return point;\n\t };\n\n\t return Surface;\n\t}(kendo.Observable));\n\n\tfunction renderAttr(name, value) {\n\t return (defined(value) && value !== null) ? (\" \" + name + \"=\\\"\" + value + \"\\\" \") : \"\";\n\t}\n\n\tfunction renderAllAttr(attrs) {\n\t var output = \"\";\n\t for (var i = 0; i < attrs.length; i++) {\n\t output += renderAttr(attrs[i][0], attrs[i][1]);\n\t }\n\n\t return output;\n\t}\n\n\tfunction renderStyle(attrs) {\n\t var output = \"\";\n\t for (var i = 0; i < attrs.length; i++) {\n\t var value = attrs[i][1];\n\t if (defined(value)) {\n\t output += attrs[i][0] + \":\" + value + \";\";\n\t }\n\t }\n\n\t if (output !== \"\") {\n\t return output;\n\t }\n\t}\n\n\tvar NODE_MAP = {};\n\n\tvar SVG_NS = \"http://www.w3.org/2000/svg\";\n\tvar NONE = \"none\";\n\n\tvar renderSVG = function(container, svg) {\n\t container.innerHTML = svg;\n\t};\n\n\tif (typeof document !== \"undefined\") {\n\t var testFragment = \"\";\n\t var testContainer = document.createElement(\"div\");\n\t var hasParser = typeof DOMParser !== \"undefined\";\n\n\t testContainer.innerHTML = testFragment;\n\n\t if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n\t renderSVG = function(container, svg) {\n\t var parser = new DOMParser();\n\t var chartDoc = parser.parseFromString(svg, \"text/xml\");\n\t var importedDoc = document.adoptNode(chartDoc.documentElement);\n\n\t container.innerHTML = \"\";\n\t container.appendChild(importedDoc);\n\t };\n\t }\n\t}\n\n\tvar renderSVG$1 = renderSVG;\n\n\tvar TRANSFORM = \"transform\";\n\tvar DefinitionMap = {\n\t clip: \"clip-path\",\n\t fill: \"fill\"\n\t};\n\n\tfunction isDefinition(type, value) {\n\t return type === \"clip\" || (type === \"fill\" && (!value || value.nodeType === \"Gradient\"));\n\t}\n\n\tfunction baseUrl() {\n\t var base = document.getElementsByTagName(\"base\")[0];\n\t var href = document.location.href;\n\t var url = \"\";\n\n\t if (base && !(supportBrowser || {}).msie) {\n\t var hashIndex = href.indexOf(\"#\");\n\t if (hashIndex !== -1) {\n\t href = href.substring(0, hashIndex);\n\t }\n\n\t url = href;\n\t }\n\n\t return url;\n\t}\n\n\tvar Node = (function (BaseNode$$1) {\n\t function Node(srcElement, options) {\n\t BaseNode$$1.call(this, srcElement);\n\t this.definitions = {};\n\n\t this.options = options;\n\t }\n\n\t extendStatic(Node, BaseNode$$1);\n\t Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n\t Node.prototype.constructor = Node;\n\t Node.fn = Node.prototype;\n\t Node.fn.init = Node.fn.constructor;\n\n\t Node.prototype.destroy = function destroy () {\n\t if (this.element) {\n\t this.element._kendoNode = null;\n\t this.element = null;\n\t }\n\n\t this.clearDefinitions();\n\t BaseNode$$1.prototype.destroy.call(this);\n\t };\n\n\t Node.prototype.load = function load (elements, pos) {\n\t var this$1 = this;\n\n\t for (var i = 0; i < elements.length; i++) {\n\t var srcElement = elements[i];\n\t var children = srcElement.children;\n\n\t var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n\n\t if (defined(pos)) {\n\t this$1.insertAt(childNode, pos);\n\t } else {\n\t this$1.append(childNode);\n\t }\n\n\t childNode.createDefinitions();\n\n\t if (children && children.length > 0) {\n\t childNode.load(children);\n\t }\n\n\t var element = this$1.element;\n\t if (element) {\n\t childNode.attachTo(element, pos);\n\t }\n\t }\n\t };\n\n\t Node.prototype.root = function root () {\n\t var root = this;\n\n\t while (root.parent) {\n\t root = root.parent;\n\t }\n\n\t return root;\n\t };\n\n\t Node.prototype.attachTo = function attachTo (domElement, pos) {\n\t var container = document.createElement(\"div\");\n\t renderSVG$1(container,\n\t \"\" +\n\t this.render() +\n\t \"\"\n\t );\n\n\t var element = container.firstChild.firstChild;\n\t if (element) {\n\t if (defined(pos)) {\n\t domElement.insertBefore(element, domElement.childNodes[pos] || null);\n\t } else {\n\t domElement.appendChild(element);\n\t }\n\t this.setElement(element);\n\t }\n\t };\n\n\t Node.prototype.setElement = function setElement (element) {\n\t if (this.element) {\n\t this.element._kendoNode = null;\n\t }\n\n\t this.element = element;\n\t this.element._kendoNode = this;\n\n\t var nodes = this.childNodes;\n\t for (var i = 0; i < nodes.length; i++) {\n\t var childElement = element.childNodes[i];\n\t nodes[i].setElement(childElement);\n\t }\n\t };\n\n\t Node.prototype.clear = function clear () {\n\t this.clearDefinitions();\n\n\t if (this.element) {\n\t this.element.innerHTML = \"\";\n\t }\n\n\t var children = this.childNodes;\n\t for (var i = 0; i < children.length; i++) {\n\t children[i].destroy();\n\t }\n\n\t this.childNodes = [];\n\t };\n\n\t Node.prototype.removeSelf = function removeSelf () {\n\t if (this.element) {\n\t var parentNode = this.element.parentNode;\n\t if (parentNode) {\n\t parentNode.removeChild(this.element);\n\t }\n\t this.element = null;\n\t }\n\n\t BaseNode$$1.prototype.removeSelf.call(this);\n\t };\n\n\t Node.prototype.template = function template () {\n\t return this.renderChildren();\n\t };\n\n\t Node.prototype.render = function render () {\n\t return this.template();\n\t };\n\n\t Node.prototype.renderChildren = function renderChildren () {\n\t var nodes = this.childNodes;\n\t var output = \"\";\n\n\t for (var i = 0; i < nodes.length; i++) {\n\t output += nodes[i].render();\n\t }\n\n\t return output;\n\t };\n\n\t Node.prototype.optionsChange = function optionsChange (e) {\n\t var field = e.field;\n\t var value = e.value;\n\n\t if (field === \"visible\") {\n\t this.css(\"display\", value ? \"\" : NONE);\n\t } else if (DefinitionMap[field] && isDefinition(field, value)) {\n\t this.updateDefinition(field, value);\n\t } else if (field === \"opacity\") {\n\t this.attr(\"opacity\", value);\n\t } else if (field === \"cursor\") {\n\t this.css(\"cursor\", value);\n\t } else if (field === \"id\") {\n\t if (value) {\n\t this.attr(\"id\", value);\n\t } else {\n\t this.removeAttr(\"id\");\n\t }\n\t }\n\n\t BaseNode$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t Node.prototype.attr = function attr (name, value) {\n\t if (this.element) {\n\t this.element.setAttribute(name, value);\n\t }\n\t };\n\n\t Node.prototype.allAttr = function allAttr (attrs) {\n\t var this$1 = this;\n\n\t for (var i = 0; i < attrs.length; i++) {\n\t this$1.attr(attrs[i][0], attrs[i][1]);\n\t }\n\t };\n\n\t Node.prototype.css = function css (name, value) {\n\t if (this.element) {\n\t this.element.style[name] = value;\n\t }\n\t };\n\n\t Node.prototype.allCss = function allCss (styles) {\n\t var this$1 = this;\n\n\t for (var i = 0; i < styles.length; i++) {\n\t this$1.css(styles[i][0], styles[i][1]);\n\t }\n\t };\n\n\t Node.prototype.removeAttr = function removeAttr (name) {\n\t if (this.element) {\n\t this.element.removeAttribute(name);\n\t }\n\t };\n\n\t Node.prototype.mapTransform = function mapTransform (transform) {\n\t var attrs = [];\n\t if (transform) {\n\t attrs.push([\n\t TRANSFORM,\n\t \"matrix(\" + transform.matrix().toString(6) + \")\"\n\t ]);\n\t }\n\n\t return attrs;\n\t };\n\n\t Node.prototype.renderTransform = function renderTransform () {\n\t return renderAllAttr(\n\t this.mapTransform(this.srcElement.transform())\n\t );\n\t };\n\n\t Node.prototype.transformChange = function transformChange (value) {\n\t if (value) {\n\t this.allAttr(this.mapTransform(value));\n\t } else {\n\t this.removeAttr(TRANSFORM);\n\t }\n\t };\n\n\t Node.prototype.mapStyle = function mapStyle () {\n\t var options = this.srcElement.options;\n\t var style = [ [ \"cursor\", options.cursor ] ];\n\n\t if (options.visible === false) {\n\t style.push([ \"display\", NONE ]);\n\t }\n\n\t return style;\n\t };\n\n\t Node.prototype.renderStyle = function renderStyle$1 () {\n\t return renderAttr(\"style\", renderStyle(this.mapStyle(true)));\n\t };\n\n\t Node.prototype.renderOpacity = function renderOpacity () {\n\t return renderAttr(\"opacity\", this.srcElement.options.opacity);\n\t };\n\n\t Node.prototype.renderId = function renderId () {\n\t return renderAttr(\"id\", this.srcElement.options.id);\n\t };\n\n\t Node.prototype.createDefinitions = function createDefinitions () {\n\t var srcElement = this.srcElement;\n\t var definitions = this.definitions;\n\t if (srcElement) {\n\t var options = srcElement.options;\n\t var hasDefinitions;\n\n\t for (var field in DefinitionMap) {\n\t var definition = options.get(field);\n\t if (definition && isDefinition(field, definition)) {\n\t definitions[field] = definition;\n\t hasDefinitions = true;\n\t }\n\t }\n\t if (hasDefinitions) {\n\t this.definitionChange({\n\t action: \"add\",\n\t definitions: definitions\n\t });\n\t }\n\t }\n\t };\n\n\t Node.prototype.definitionChange = function definitionChange (e) {\n\t if (this.parent) {\n\t this.parent.definitionChange(e);\n\t }\n\t };\n\n\t Node.prototype.updateDefinition = function updateDefinition (type, value) {\n\t var definitions = this.definitions;\n\t var current = definitions[type];\n\t var attr = DefinitionMap[type];\n\t var definition = {};\n\t if (current) {\n\t definition[type] = current;\n\t this.definitionChange({\n\t action: \"remove\",\n\t definitions: definition\n\t });\n\t delete definitions[type];\n\t }\n\n\t if (!value) {\n\t if (current) {\n\t this.removeAttr(attr);\n\t }\n\t } else {\n\t definition[type] = value;\n\t this.definitionChange({\n\t action: \"add\",\n\t definitions: definition\n\t });\n\t definitions[type] = value;\n\t this.attr(attr, this.refUrl(value.id));\n\t }\n\t };\n\n\t Node.prototype.clearDefinitions = function clearDefinitions () {\n\t var definitions = this.definitions;\n\n\t this.definitionChange({\n\t action: \"remove\",\n\t definitions: definitions\n\t });\n\t this.definitions = {};\n\t };\n\n\t Node.prototype.renderDefinitions = function renderDefinitions () {\n\t return renderAllAttr(this.mapDefinitions());\n\t };\n\n\t Node.prototype.mapDefinitions = function mapDefinitions () {\n\t var this$1 = this;\n\n\t var definitions = this.definitions;\n\t var attrs = [];\n\n\t for (var field in definitions) {\n\t attrs.push([ DefinitionMap[field], this$1.refUrl(definitions[field].id) ]);\n\t }\n\n\t return attrs;\n\t };\n\n\t Node.prototype.refUrl = function refUrl (id) {\n\t var skipBaseHref = (this.options || {}).skipBaseHref;\n\t var baseHref = this.baseUrl().replace(/'/g, \"\\\\'\");\n\t var base = skipBaseHref ? '' : baseHref;\n\t return (\"url(\" + base + \"#\" + id + \")\");\n\t };\n\n\t Node.prototype.baseUrl = function baseUrl$1 () {\n\t return baseUrl();\n\t };\n\n\t return Node;\n\t}(BaseNode));\n\n\tvar GradientStopNode = (function (Node$$1) {\n\t function GradientStopNode () {\n\t Node$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(GradientStopNode, Node$$1);\n\t GradientStopNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t GradientStopNode.prototype.constructor = GradientStopNode;\n\t GradientStopNode.fn = GradientStopNode.prototype;\n\t GradientStopNode.fn.init = GradientStopNode.fn.constructor;\n\n\t GradientStopNode.prototype.template = function template () {\n\t return (\"\");\n\t };\n\n\t GradientStopNode.prototype.renderOffset = function renderOffset () {\n\t return renderAttr(\"offset\", this.srcElement.offset());\n\t };\n\n\t GradientStopNode.prototype.mapStyle = function mapStyle () {\n\t var srcElement = this.srcElement;\n\t return [\n\t [ \"stop-color\", srcElement.color() ],\n\t [ \"stop-opacity\", srcElement.opacity() ]\n\t ];\n\t };\n\n\t GradientStopNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"offset\") {\n\t this.attr(e.field, e.value);\n\t } else if (e.field === \"color\" || e.field === \"opacity\") {\n\t this.css(\"stop-\" + e.field, e.value);\n\t }\n\t };\n\n\t return GradientStopNode;\n\t}(Node));\n\n\tvar GradientNode = (function (Node$$1) {\n\t function GradientNode(srcElement) {\n\t Node$$1.call(this, srcElement);\n\n\t this.id = srcElement.id;\n\n\t this.loadStops();\n\t }\n\n\t extendStatic(GradientNode, Node$$1);\n\t GradientNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t GradientNode.prototype.constructor = GradientNode;\n\t GradientNode.fn = GradientNode.prototype;\n\t GradientNode.fn.init = GradientNode.fn.constructor;\n\n\t GradientNode.prototype.loadStops = function loadStops () {\n\t var this$1 = this;\n\n\t var stops = this.srcElement.stops;\n\t var element = this.element;\n\n\t for (var idx = 0; idx < stops.length; idx++) {\n\t var stopNode = new GradientStopNode(stops[idx]);\n\t this$1.append(stopNode);\n\t if (element) {\n\t stopNode.attachTo(element);\n\t }\n\t }\n\t };\n\n\t GradientNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"gradient.stops\") {\n\t BaseNode.prototype.clear.call(this);\n\t this.loadStops();\n\t } else if (e.field === \"gradient\") {\n\t this.allAttr(this.mapCoordinates());\n\t }\n\t };\n\n\t GradientNode.prototype.renderCoordinates = function renderCoordinates () {\n\t return renderAllAttr(this.mapCoordinates());\n\t };\n\n\t GradientNode.prototype.mapSpace = function mapSpace () {\n\t return [ \"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\" ];\n\t };\n\n\t return GradientNode;\n\t}(Node));\n\n\tvar LinearGradientNode = (function (GradientNode$$1) {\n\t function LinearGradientNode () {\n\t GradientNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(LinearGradientNode, GradientNode$$1);\n\t LinearGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n\t LinearGradientNode.prototype.constructor = LinearGradientNode;\n\t LinearGradientNode.fn = LinearGradientNode.prototype;\n\t LinearGradientNode.fn.init = LinearGradientNode.fn.constructor;\n\n\t LinearGradientNode.prototype.template = function template () {\n\t return (\"\" + (this.renderChildren()) + \"\");\n\t };\n\n\t LinearGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n\t var srcElement = this.srcElement;\n\t var start = srcElement.start();\n\t var end = srcElement.end();\n\t var attrs = [\n\t [ \"x1\", start.x ],\n\t [ \"y1\", start.y ],\n\t [ \"x2\", end.x ],\n\t [ \"y2\", end.y ],\n\t this.mapSpace()\n\t ];\n\n\t return attrs;\n\t };\n\n\t return LinearGradientNode;\n\t}(GradientNode));\n\n\tvar RadialGradientNode = (function (GradientNode$$1) {\n\t function RadialGradientNode () {\n\t GradientNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(RadialGradientNode, GradientNode$$1);\n\t RadialGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n\t RadialGradientNode.prototype.constructor = RadialGradientNode;\n\t RadialGradientNode.fn = RadialGradientNode.prototype;\n\t RadialGradientNode.fn.init = RadialGradientNode.fn.constructor;\n\n\t RadialGradientNode.prototype.template = function template () {\n\t return (\"\" + (this.renderChildren()) + \"\");\n\t };\n\n\t RadialGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n\t var srcElement = this.srcElement;\n\t var center = srcElement.center();\n\t var radius = srcElement.radius();\n\t var attrs = [\n\t [ \"cx\", center.x ],\n\t [ \"cy\", center.y ],\n\t [ \"r\", radius ],\n\t this.mapSpace()\n\t ];\n\t return attrs;\n\t };\n\n\t return RadialGradientNode;\n\t}(GradientNode));\n\n\tvar ClipNode = (function (Node$$1) {\n\t function ClipNode(srcElement) {\n\t Node$$1.call(this);\n\n\t this.srcElement = srcElement;\n\t this.id = srcElement.id;\n\n\t this.load([ srcElement ]);\n\t }\n\n\t extendStatic(ClipNode, Node$$1);\n\t ClipNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t ClipNode.prototype.constructor = ClipNode;\n\t ClipNode.fn = ClipNode.prototype;\n\t ClipNode.fn.init = ClipNode.fn.constructor;\n\n\t ClipNode.prototype.template = function template () {\n\t return (\"\" + (this.renderChildren()) + \"\");\n\t };\n\n\t return ClipNode;\n\t}(Node));\n\n\tvar DefinitionNode = (function (Node$$1) {\n\t function DefinitionNode() {\n\t Node$$1.call(this);\n\t this.definitionMap = {};\n\t }\n\n\t extendStatic(DefinitionNode, Node$$1);\n\t DefinitionNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t DefinitionNode.prototype.constructor = DefinitionNode;\n\t DefinitionNode.fn = DefinitionNode.prototype;\n\t DefinitionNode.fn.init = DefinitionNode.fn.constructor;\n\n\t DefinitionNode.prototype.attachTo = function attachTo (domElement) {\n\t this.element = domElement;\n\t };\n\n\t DefinitionNode.prototype.template = function template () {\n\t return (\"\" + (this.renderChildren()) + \"\");\n\t };\n\n\t DefinitionNode.prototype.definitionChange = function definitionChange (e) {\n\t var definitions = e.definitions;\n\t var action = e.action;\n\n\t if (action === \"add\") {\n\t this.addDefinitions(definitions);\n\t } else if (action === \"remove\") {\n\t this.removeDefinitions(definitions);\n\t }\n\t };\n\n\t DefinitionNode.prototype.createDefinition = function createDefinition (type, item) {\n\t var nodeType;\n\t if (type === \"clip\") {\n\t nodeType = ClipNode;\n\t } else if (type === \"fill\") {\n\t if (item instanceof LinearGradient) {\n\t nodeType = LinearGradientNode;\n\t } else if (item instanceof RadialGradient) {\n\t nodeType = RadialGradientNode;\n\t }\n\t }\n\t return new nodeType(item);\n\t };\n\n\t DefinitionNode.prototype.addDefinitions = function addDefinitions (definitions) {\n\t var this$1 = this;\n\n\t for (var field in definitions) {\n\t this$1.addDefinition(field, definitions[field]);\n\t }\n\t };\n\n\t DefinitionNode.prototype.addDefinition = function addDefinition (type, srcElement) {\n\t var ref = this;\n\t var element = ref.element;\n\t var definitionMap = ref.definitionMap;\n\t var id = srcElement.id;\n\t var mapItem = definitionMap[id];\n\t if (!mapItem) {\n\t var node = this.createDefinition(type, srcElement);\n\t definitionMap[id] = {\n\t element: node,\n\t count: 1\n\t };\n\t this.append(node);\n\t if (element) {\n\t node.attachTo(this.element);\n\t }\n\t } else {\n\t mapItem.count++;\n\t }\n\t };\n\n\t DefinitionNode.prototype.removeDefinitions = function removeDefinitions (definitions) {\n\t var this$1 = this;\n\n\t for (var field in definitions) {\n\t this$1.removeDefinition(definitions[field]);\n\t }\n\t };\n\n\t DefinitionNode.prototype.removeDefinition = function removeDefinition (srcElement) {\n\t var definitionMap = this.definitionMap;\n\t var id = srcElement.id;\n\t var mapItem = definitionMap[id];\n\n\t if (mapItem) {\n\t mapItem.count--;\n\t if (mapItem.count === 0) {\n\t this.remove(this.childNodes.indexOf(mapItem.element), 1);\n\t delete definitionMap[id];\n\t }\n\t }\n\t };\n\n\t return DefinitionNode;\n\t}(Node));\n\n\tvar RootNode = (function (Node$$1) {\n\t function RootNode(options) {\n\t Node$$1.call(this);\n\t this.options = options;\n\t this.defs = new DefinitionNode();\n\t }\n\n\t extendStatic(RootNode, Node$$1);\n\t RootNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t RootNode.prototype.constructor = RootNode;\n\t RootNode.fn = RootNode.prototype;\n\t RootNode.fn.init = RootNode.fn.constructor;\n\n\t RootNode.prototype.attachTo = function attachTo (domElement) {\n\t this.element = domElement;\n\t this.defs.attachTo(domElement.firstElementChild);\n\t };\n\n\t RootNode.prototype.clear = function clear () {\n\t BaseNode.prototype.clear.call(this);\n\t };\n\n\t RootNode.prototype.template = function template () {\n\t return this.defs.render() + this.renderChildren();\n\t };\n\n\t RootNode.prototype.definitionChange = function definitionChange (e) {\n\t this.defs.definitionChange(e);\n\t };\n\n\t return RootNode;\n\t}(Node));\n\n\tvar DASH_ARRAYS = {\n\t dot: [ 1.5, 3.5 ],\n\t dash: [ 4, 3.5 ],\n\t longdash: [ 8, 3.5 ],\n\t dashdot: [ 3.5, 3.5, 1.5, 3.5 ],\n\t longdashdot: [ 8, 3.5, 1.5, 3.5 ],\n\t longdashdotdot: [ 8, 3.5, 1.5, 3.5, 1.5, 3.5 ]\n\t};\n\n\tvar SOLID = \"solid\";\n\tvar BUTT = \"butt\";\n\n\tvar ATTRIBUTE_MAP = {\n\t \"fill.opacity\": \"fill-opacity\",\n\t \"stroke.color\": \"stroke\",\n\t \"stroke.width\": \"stroke-width\",\n\t \"stroke.opacity\": \"stroke-opacity\"\n\t};\n\tvar SPACE = \" \";\n\n\tvar PathNode = (function (Node$$1) {\n\t function PathNode () {\n\t Node$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(PathNode, Node$$1);\n\t PathNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t PathNode.prototype.constructor = PathNode;\n\t PathNode.fn = PathNode.prototype;\n\t PathNode.fn.init = PathNode.fn.constructor;\n\n\t PathNode.prototype.geometryChange = function geometryChange () {\n\t this.attr(\"d\", this.renderData());\n\t this.invalidate();\n\t };\n\n\t PathNode.prototype.optionsChange = function optionsChange (e) {\n\t switch (e.field) {\n\t case \"fill\":\n\t if (e.value) {\n\t this.allAttr(this.mapFill(e.value));\n\t } else {\n\t this.removeAttr(\"fill\");\n\t }\n\t break;\n\n\t case \"fill.color\":\n\t this.allAttr(this.mapFill({ color: e.value }));\n\t break;\n\n\t case \"stroke\":\n\t if (e.value) {\n\t this.allAttr(this.mapStroke(e.value));\n\t } else {\n\t this.removeAttr(\"stroke\");\n\t }\n\t break;\n\n\t case \"transform\":\n\t this.transformChange(e.value);\n\t break;\n\n\t default:\n\t var name = ATTRIBUTE_MAP[e.field];\n\t if (name) {\n\t this.attr(name, e.value);\n\t }\n\t break;\n\t }\n\n\t Node$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t PathNode.prototype.content = function content () {\n\t if (this.element) {\n\t this.element.textContent = this.srcElement.content();\n\t }\n\t };\n\n\t PathNode.prototype.renderData = function renderData () {\n\t return this.printPath(this.srcElement);\n\t };\n\n\t PathNode.prototype.printPath = function printPath (path) {\n\t var this$1 = this;\n\n\t var segments = path.segments;\n\t var length = segments.length;\n\t if (length > 0) {\n\t var parts = [];\n\t var output, currentType;\n\n\t for (var i = 1; i < length; i++) {\n\t var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n\t if (segmentType !== currentType) {\n\t currentType = segmentType;\n\t parts.push(segmentType);\n\t }\n\n\t if (segmentType === \"L\") {\n\t parts.push(this$1.printPoints(segments[i].anchor()));\n\t } else {\n\t parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n\t }\n\t }\n\n\t output = \"M\" + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n\t if (path.options.closed) {\n\t output += \"Z\";\n\t }\n\n\t return output;\n\t }\n\t };\n\n\t PathNode.prototype.printPoints = function printPoints () {\n\t var points = arguments;\n\t var length = points.length;\n\t var result = [];\n\n\t for (var i = 0; i < length; i++) {\n\t result.push(points[i].toString(3));\n\t }\n\n\t return result.join(\" \");\n\t };\n\n\t PathNode.prototype.segmentType = function segmentType (segmentStart, segmentEnd) {\n\t return segmentStart.controlOut() && segmentEnd.controlIn() ? \"C\" : \"L\";\n\t };\n\n\t PathNode.prototype.mapStroke = function mapStroke (stroke) {\n\t var attrs = [];\n\n\t if (stroke && !isTransparent(stroke.color)) {\n\t attrs.push([ \"stroke\", stroke.color ]);\n\t attrs.push([ \"stroke-width\", stroke.width ]);\n\t attrs.push([ \"stroke-linecap\", this.renderLinecap(stroke) ]);\n\t attrs.push([ \"stroke-linejoin\", stroke.lineJoin ]);\n\n\t if (defined(stroke.opacity)) {\n\t attrs.push([ \"stroke-opacity\", stroke.opacity ]);\n\t }\n\n\t if (defined(stroke.dashType)) {\n\t attrs.push([ \"stroke-dasharray\", this.renderDashType(stroke) ]);\n\t }\n\t } else {\n\t attrs.push([ \"stroke\", NONE ]);\n\t }\n\n\t return attrs;\n\t };\n\n\t PathNode.prototype.renderStroke = function renderStroke () {\n\t return renderAllAttr(\n\t this.mapStroke(this.srcElement.options.stroke)\n\t );\n\t };\n\n\t PathNode.prototype.renderDashType = function renderDashType (stroke) {\n\t var dashType = stroke.dashType;\n\t var width = stroke.width; if (width === void 0) { width = 1; }\n\n\t if (dashType && dashType !== SOLID) {\n\t var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n\t var result = [];\n\n\t for (var i = 0; i < dashArray.length; i++) {\n\t result.push(dashArray[i] * width);\n\t }\n\n\t return result.join(\" \");\n\t }\n\t };\n\n\t PathNode.prototype.renderLinecap = function renderLinecap (stroke) {\n\t var dashType = stroke.dashType;\n\t var lineCap = stroke.lineCap;\n\n\t return (dashType && dashType !== \"solid\") ? BUTT : lineCap;\n\t };\n\n\t PathNode.prototype.mapFill = function mapFill (fill) {\n\t var attrs = [];\n\t if (!(fill && fill.nodeType === \"Gradient\")) {\n\t if (fill && !isTransparent(fill.color)) {\n\t attrs.push([ \"fill\", fill.color ]);\n\n\t if (defined(fill.opacity)) {\n\t attrs.push([ \"fill-opacity\", fill.opacity ]);\n\t }\n\t } else {\n\t attrs.push([ \"fill\", NONE ]);\n\t }\n\t }\n\n\t return attrs;\n\t };\n\n\t PathNode.prototype.renderFill = function renderFill () {\n\t return renderAllAttr(\n\t this.mapFill(this.srcElement.options.fill)\n\t );\n\t };\n\n\t PathNode.prototype.template = function template () {\n\t return \"\";\n\t };\n\n\t return PathNode;\n\t}(Node));\n\n\tvar ArcNode = (function (PathNode$$1) {\n\t function ArcNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(ArcNode, PathNode$$1);\n\t ArcNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t ArcNode.prototype.constructor = ArcNode;\n\t ArcNode.fn = ArcNode.prototype;\n\t ArcNode.fn.init = ArcNode.fn.constructor;\n\n\t ArcNode.prototype.renderData = function renderData () {\n\t return this.printPath(this.srcElement.toPath());\n\t };\n\n\t return ArcNode;\n\t}(PathNode));\n\n\tvar CircleNode = (function (PathNode$$1) {\n\t function CircleNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(CircleNode, PathNode$$1);\n\t CircleNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t CircleNode.prototype.constructor = CircleNode;\n\t CircleNode.fn = CircleNode.prototype;\n\t CircleNode.fn.init = CircleNode.fn.constructor;\n\n\t CircleNode.prototype.geometryChange = function geometryChange () {\n\t var center = this.center();\n\t this.attr(\"cx\", center.x);\n\t this.attr(\"cy\", center.y);\n\t this.attr(\"r\", this.radius());\n\t this.invalidate();\n\t };\n\n\t CircleNode.prototype.center = function center () {\n\t return this.srcElement.geometry().center;\n\t };\n\n\t CircleNode.prototype.radius = function radius () {\n\t return this.srcElement.geometry().radius;\n\t };\n\n\t CircleNode.prototype.template = function template () {\n\t return \"\";\n\t };\n\n\t return CircleNode;\n\t}(PathNode));\n\n\tvar GroupNode = (function (Node$$1) {\n\t function GroupNode () {\n\t Node$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(GroupNode, Node$$1);\n\t GroupNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n\t GroupNode.prototype.constructor = GroupNode;\n\t GroupNode.fn = GroupNode.prototype;\n\t GroupNode.fn.init = GroupNode.fn.constructor;\n\n\t GroupNode.prototype.template = function template () {\n\t return (\"\" + (this.renderChildren()) + \"\");\n\t };\n\n\t GroupNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"transform\") {\n\t this.transformChange(e.value);\n\t }\n\n\t Node$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t return GroupNode;\n\t}(Node));\n\n\tvar ImageNode = (function (PathNode$$1) {\n\t function ImageNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(ImageNode, PathNode$$1);\n\t ImageNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t ImageNode.prototype.constructor = ImageNode;\n\t ImageNode.fn = ImageNode.prototype;\n\t ImageNode.fn.init = ImageNode.fn.constructor;\n\n\t ImageNode.prototype.geometryChange = function geometryChange () {\n\t this.allAttr(this.mapPosition());\n\t this.invalidate();\n\t };\n\n\t ImageNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"src\") {\n\t this.allAttr(this.mapSource());\n\t }\n\n\t PathNode$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t ImageNode.prototype.mapPosition = function mapPosition () {\n\t var rect = this.srcElement.rect();\n\t var tl = rect.topLeft();\n\n\t return [\n\t [ \"x\", tl.x ],\n\t [ \"y\", tl.y ],\n\t [ \"width\", rect.width() + \"px\" ],\n\t [ \"height\", rect.height() + \"px\" ]\n\t ];\n\t };\n\n\t ImageNode.prototype.renderPosition = function renderPosition () {\n\t return renderAllAttr(this.mapPosition());\n\t };\n\n\t ImageNode.prototype.mapSource = function mapSource (encode) {\n\t var src = this.srcElement.src();\n\n\t if (encode) {\n\t src = kendo.htmlEncode(src);\n\t }\n\n\t return [ [ \"xlink:href\", src ] ];\n\t };\n\n\t ImageNode.prototype.renderSource = function renderSource () {\n\t return renderAllAttr(this.mapSource(true));\n\t };\n\n\t ImageNode.prototype.template = function template () {\n\t return \"\" +\n\t \"\";\n\t };\n\n\t return ImageNode;\n\t}(PathNode));\n\n\tvar MultiPathNode = (function (PathNode$$1) {\n\t function MultiPathNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(MultiPathNode, PathNode$$1);\n\t MultiPathNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t MultiPathNode.prototype.constructor = MultiPathNode;\n\t MultiPathNode.fn = MultiPathNode.prototype;\n\t MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n\t MultiPathNode.prototype.renderData = function renderData () {\n\t var this$1 = this;\n\n\t var paths = this.srcElement.paths;\n\n\t if (paths.length > 0) {\n\t var result = [];\n\n\t for (var i = 0; i < paths.length; i++) {\n\t result.push(this$1.printPath(paths[i]));\n\t }\n\n\t return result.join(\" \");\n\t }\n\t };\n\n\t return MultiPathNode;\n\t}(PathNode));\n\n\tvar RectNode = (function (PathNode$$1) {\n\t function RectNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(RectNode, PathNode$$1);\n\t RectNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t RectNode.prototype.constructor = RectNode;\n\t RectNode.fn = RectNode.prototype;\n\t RectNode.fn.init = RectNode.fn.constructor;\n\n\t RectNode.prototype.geometryChange = function geometryChange () {\n\t var geometry = this.srcElement.geometry();\n\t this.attr(\"x\", geometry.origin.x);\n\t this.attr(\"y\", geometry.origin.y);\n\t this.attr(\"width\", geometry.size.width);\n\t this.attr(\"height\", geometry.size.height);\n\t this.attr(\"rx\", geometry.cornerRadius[0]);\n\t this.attr(\"ry\", geometry.cornerRadius[1]);\n\t this.invalidate();\n\t };\n\n\t RectNode.prototype.size = function size () {\n\t return this.srcElement.geometry().size;\n\t };\n\n\t RectNode.prototype.origin = function origin () {\n\t return this.srcElement.geometry().origin;\n\t };\n\n\t RectNode.prototype.rx = function rx () {\n\t return this.srcElement.geometry().cornerRadius[0];\n\t };\n\n\t RectNode.prototype.ry = function ry () {\n\t return this.srcElement.geometry().cornerRadius[1];\n\t };\n\n\t RectNode.prototype.template = function template () {\n\t return \"\";\n\t };\n\n\t return RectNode;\n\t}(PathNode));\n\n\tvar ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n\n\tfunction decodeEntities(text) {\n\t if (!text || typeof text !== \"string\" || !ENTITY_REGEX.test(text)) {\n\t return text;\n\t }\n\n\t var element = decodeEntities._element;\n\t ENTITY_REGEX.lastIndex = 0;\n\n\t return text.replace(ENTITY_REGEX, function (match) {\n\t element.innerHTML = match;\n\n\t return element.textContent || element.innerText;\n\t });\n\t}\n\n\tif (typeof document !== \"undefined\") {\n\t decodeEntities._element = document.createElement(\"span\");\n\t}\n\n\tvar TextNode = (function (PathNode$$1) {\n\t function TextNode () {\n\t PathNode$$1.apply(this, arguments);\n\t }\n\n\t extendStatic(TextNode, PathNode$$1);\n\t TextNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n\t TextNode.prototype.constructor = TextNode;\n\t TextNode.fn = TextNode.prototype;\n\t TextNode.fn.init = TextNode.fn.constructor;\n\n\t TextNode.prototype.geometryChange = function geometryChange () {\n\t var pos = this.pos();\n\t this.attr(\"x\", pos.x);\n\t this.attr(\"y\", pos.y);\n\t this.invalidate();\n\t };\n\n\t TextNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"font\") {\n\t this.attr(\"style\", renderStyle(this.mapStyle()));\n\t this.geometryChange();\n\t } else if (e.field === \"content\") {\n\t PathNode$$1.prototype.content.call(this, this.srcElement.content());\n\t }\n\n\t PathNode$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t TextNode.prototype.mapStyle = function mapStyle (encode) {\n\t var style = PathNode$$1.prototype.mapStyle.call(this, encode);\n\t var font = this.srcElement.options.font;\n\n\t if (encode) {\n\t font = kendo.htmlEncode(font);\n\t }\n\n\t style.push([ \"font\", font ], [ \"white-space\", \"pre\" ]);\n\n\t return style;\n\t };\n\n\t TextNode.prototype.pos = function pos () {\n\t var pos = this.srcElement.position();\n\t var size = this.srcElement.measure();\n\t return pos.clone().setY(pos.y + size.baseline);\n\t };\n\n\t TextNode.prototype.renderContent = function renderContent () {\n\t var content = this.srcElement.content();\n\t content = decodeEntities(content);\n\t content = kendo.htmlEncode(content);\n\n\t return kendoUtil.normalizeText(content);\n\t };\n\n\t TextNode.prototype.renderTextAnchor = function renderTextAnchor () {\n\t var anchor;\n\n\t if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n\t anchor = 'end';\n\t }\n\n\t return renderAttr(\"text-anchor\", anchor);\n\t };\n\n\t TextNode.prototype.template = function template () {\n\t return \"\" + (this.renderContent()) + \"\";\n\t };\n\n\t return TextNode;\n\t}(PathNode));\n\n\tNODE_MAP.Arc = ArcNode;\n\tNODE_MAP.Circle = CircleNode;\n\tNODE_MAP.Group = GroupNode;\n\tNODE_MAP.Image = ImageNode;\n\tNODE_MAP.MultiPath = MultiPathNode;\n\tNODE_MAP.Path = PathNode;\n\tNODE_MAP.Rect = RectNode;\n\tNODE_MAP.Text = TextNode;\n\n\tvar RTL = 'rtl';\n\n\tfunction alignToScreen(element) {\n\t var ctm;\n\n\t try {\n\t ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n\t } catch (e) { } // eslint-disable-line no-empty\n\n\t if (ctm) {\n\t var left = - ctm.e % 1;\n\t var top = - ctm.f % 1;\n\t var style = element.style;\n\n\t if (left !== 0 || top !== 0) {\n\t style.left = left + \"px\";\n\t style.top = top + \"px\";\n\t }\n\t }\n\t}\n\n\tvar Surface$3 = (function (BaseSurface) {\n\t function Surface(element, options) {\n\t BaseSurface.call(this, element, options);\n\n\t this._root = new RootNode($.extend({\n\t rtl: elementStyles(element, 'direction').direction === RTL\n\t }, this.options));\n\n\t renderSVG$1(this.element, this._template());\n\n\t this._rootElement = this.element.firstElementChild;\n\n\t alignToScreen(this._rootElement);\n\n\t this._root.attachTo(this._rootElement);\n\n\t bindEvents(this.element, {\n\t click: this._click,\n\t mouseover: this._mouseenter,\n\t mouseout: this._mouseleave,\n\t mousemove: this._mousemove\n\t });\n\n\t this.resize();\n\t }\n\n\t extendStatic(Surface, BaseSurface);\n\t Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n\t Surface.prototype.constructor = Surface;\n\t Surface.fn = Surface.prototype;\n\t Surface.fn.init = Surface.fn.constructor;\n\n\t var prototypeAccessors = { type: {} };\n\n\t prototypeAccessors.type.get = function () {\n\t return \"svg\";\n\t };\n\n\t Surface.prototype.destroy = function destroy () {\n\t if (this._root) {\n\t this._root.destroy();\n\t this._root = null;\n\t this._rootElement = null;\n\t unbindEvents(this.element, {\n\t click: this._click,\n\t mouseover: this._mouseenter,\n\t mouseout: this._mouseleave,\n\t mousemove: this._mousemove\n\t });\n\t }\n\n\t BaseSurface.prototype.destroy.call(this);\n\t };\n\n\t Surface.prototype.translate = function translate (offset) {\n\t var viewBox = (Math.round(offset.x)) + \" \" + (Math.round(offset.y)) + \" \" + (this._size.width) + \" \" + (this._size.height);\n\n\t this._offset = offset;\n\t this._rootElement.setAttribute(\"viewBox\", viewBox);\n\t };\n\n\t Surface.prototype.draw = function draw (element) {\n\t BaseSurface.prototype.draw.call(this, element);\n\t this._root.load([ element ]);\n\t };\n\n\t Surface.prototype.clear = function clear () {\n\t BaseSurface.prototype.clear.call(this);\n\t this._root.clear();\n\t };\n\n\t Surface.prototype.svg = function svg () {\n\t return \"\" + this._template();\n\t };\n\n\t Surface.prototype.exportVisual = function exportVisual () {\n\t var ref = this;\n\t var visual = ref._visual;\n\t var offset = ref._offset;\n\n\t if (offset) {\n\t var wrap = new Group();\n\t wrap.children.push(visual);\n\n\t wrap.transform(\n\t transform$1().translate(-offset.x, -offset.y)\n\t );\n\n\t visual = wrap;\n\t }\n\n\t return visual;\n\t };\n\n\t Surface.prototype._resize = function _resize () {\n\t if (this._offset) {\n\t this.translate(this._offset);\n\t }\n\t };\n\n\t Surface.prototype._template = function _template () {\n\t return (\"\" + (this._root.render()) + \"\");\n\t };\n\n\t Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n\t return Surface;\n\t}(Surface$2));\n\n\tvar NODE_MAP$2 = {};\n\n\tfunction renderPath(ctx, path) {\n\t var segments = path.segments;\n\n\t if (segments.length === 0) {\n\t return;\n\t }\n\n\t var segment = segments[0];\n\t var anchor = segment.anchor();\n\t ctx.moveTo(anchor.x, anchor.y);\n\n\t for (var i = 1; i < segments.length; i++) {\n\t segment = segments[i];\n\t anchor = segment.anchor();\n\n\t var prevSeg = segments[i - 1];\n\t var prevOut = prevSeg.controlOut();\n\t var controlIn = segment.controlIn();\n\n\t if (prevOut && controlIn) {\n\t ctx.bezierCurveTo(prevOut.x, prevOut.y,\n\t controlIn.x, controlIn.y,\n\t anchor.x, anchor.y);\n\t } else {\n\t ctx.lineTo(anchor.x, anchor.y);\n\t }\n\t }\n\n\t if (path.options.closed) {\n\t ctx.closePath();\n\t }\n\t}\n\n\tvar Node$2 = (function (BaseNode$$1) {\n\t function Node(srcElement) {\n\t BaseNode$$1.call(this, srcElement);\n\t if (srcElement) {\n\t this.initClip();\n\t }\n\t }\n\n\t extendStatic(Node, BaseNode$$1);\n\t Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n\t Node.prototype.constructor = Node;\n\t Node.fn = Node.prototype;\n\t Node.fn.init = Node.fn.constructor;\n\n\t Node.prototype.initClip = function initClip () {\n\t var clip = this.srcElement.clip();\n\t if (clip) {\n\t this.clip = clip;\n\t clip.addObserver(this);\n\t }\n\t };\n\n\t Node.prototype.clear = function clear () {\n\t if (this.srcElement) {\n\t this.srcElement.removeObserver(this);\n\t }\n\n\t this.clearClip();\n\n\t BaseNode$$1.prototype.clear.call(this);\n\t };\n\n\t Node.prototype.clearClip = function clearClip () {\n\t if (this.clip) {\n\t this.clip.removeObserver(this);\n\t delete this.clip;\n\t }\n\t };\n\n\t Node.prototype.setClip = function setClip (ctx) {\n\t if (this.clip) {\n\t ctx.beginPath();\n\t renderPath(ctx, this.clip);\n\t ctx.clip();\n\t }\n\t };\n\n\t Node.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"clip\") {\n\t this.clearClip();\n\t this.initClip();\n\t }\n\n\t BaseNode$$1.prototype.optionsChange.call(this, e);\n\t };\n\n\t Node.prototype.setTransform = function setTransform (ctx) {\n\t if (this.srcElement) {\n\t var transform = this.srcElement.transform();\n\t if (transform) {\n\t ctx.transform.apply(ctx, transform.matrix().toArray(6));\n\t }\n\t }\n\t };\n\n\t Node.prototype.loadElements = function loadElements (elements, pos, cors) {\n\t var this$1 = this;\n\n\t for (var i = 0; i < elements.length; i++) {\n\t var srcElement = elements[i];\n\t var children = srcElement.children;\n\n\t var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n\n\t if (children && children.length > 0) {\n\t childNode.load(children, pos, cors);\n\t }\n\n\t if (defined(pos)) {\n\t this$1.insertAt(childNode, pos);\n\t } else {\n\t this$1.append(childNode);\n\t }\n\t }\n\t };\n\n\t Node.prototype.load = function load (elements, pos, cors) {\n\t this.loadElements(elements, pos, cors);\n\n\t this.invalidate();\n\t };\n\n\t Node.prototype.setOpacity = function setOpacity (ctx) {\n\t if (this.srcElement) {\n\t var opacity = this.srcElement.opacity();\n\t if (defined(opacity)) {\n\t this.globalAlpha(ctx, opacity);\n\t }\n\t }\n\t };\n\n\t Node.prototype.globalAlpha = function globalAlpha (ctx, value) {\n\t var opactity = value;\n\t if (opactity && ctx.globalAlpha) {\n\t opactity *= ctx.globalAlpha;\n\t }\n\t ctx.globalAlpha = opactity;\n\t };\n\n\t Node.prototype.visible = function visible () {\n\t var src = this.srcElement;\n\t return !src || (src && src.options.visible !== false);\n\t };\n\n\t return Node;\n\t}(BaseNode));\n\n\tvar GroupNode$2 = (function (superclass) {\n\t function GroupNode () {\n\t superclass.apply(this, arguments);\n\t }\n\n\t extendStatic(GroupNode, superclass);\n\t GroupNode.prototype = Object.create( superclass && superclass.prototype );\n\t GroupNode.prototype.constructor = GroupNode;\n\t GroupNode.fn = GroupNode.prototype;\n\t GroupNode.fn.init = GroupNode.fn.constructor;\n\n\t GroupNode.prototype.renderTo = function renderTo (ctx) {\n\t if (!this.visible()) {\n\t return;\n\t }\n\n\t ctx.save();\n\n\t this.setTransform(ctx);\n\t this.setClip(ctx);\n\t this.setOpacity(ctx);\n\n\t var childNodes = this.childNodes;\n\t for (var i = 0; i < childNodes.length; i++) {\n\t var child = childNodes[i];\n\t if (child.visible()) {\n\t child.renderTo(ctx);\n\t }\n\t }\n\n\t ctx.restore();\n\t };\n\n\t return GroupNode;\n\t}(traversable(Node$2, \"childNodes\")));\n\n\tvar FRAME_DELAY = 1000 / 60;\n\n\tvar RootNode$2 = (function (superclass) {\n\t function RootNode(canvas, size) {\n\t superclass.call(this);\n\n\t this.canvas = canvas;\n\t this.size = size;\n\t this.ctx = canvas.getContext(\"2d\");\n\n\t var invalidateHandler = this._invalidate.bind(this);\n\t this.invalidate = kendo.throttle(function () {\n\t kendo.animationFrame(invalidateHandler);\n\t }, FRAME_DELAY);\n\t }\n\n\t extendStatic(RootNode, superclass);\n\t RootNode.prototype = Object.create( superclass && superclass.prototype );\n\t RootNode.prototype.constructor = RootNode;\n\t RootNode.fn = RootNode.prototype;\n\t RootNode.fn.init = RootNode.fn.constructor;\n\n\t RootNode.prototype.destroy = function destroy () {\n\t superclass.prototype.destroy.call(this);\n\t this.canvas = null;\n\t this.ctx = null;\n\t };\n\n\t RootNode.prototype.load = function load (elements, pos, cors) {\n\t this.loadElements(elements, pos, cors);\n\t this._invalidate();\n\t };\n\n\t RootNode.prototype._rescale = function _rescale (scale) {\n\t var ref = this;\n\t var canvas = ref.canvas;\n\t var size = ref.size;\n\t canvas.width = size.width * scale;\n\t canvas.height = size.height * scale;\n\t this.ctx.scale(scale, scale);\n\t };\n\n\t RootNode.prototype._devicePixelRatio = function _devicePixelRatio () {\n\t if (typeof window.devicePixelRatio === 'number') {\n\t return window.devicePixelRatio;\n\t }\n\n\t return 1;\n\t };\n\n\t RootNode.prototype._invalidate = function _invalidate (options) {\n\t if (!this.ctx) {\n\t return;\n\t }\n\n\t var fixedScale = options && options.fixedScale;\n\t var scale = fixedScale ? 1 : this._devicePixelRatio();\n\t this._rescale(scale);\n\n\t this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\t this.renderTo(this.ctx);\n\t };\n\n\t return RootNode;\n\t}(traversable(GroupNode$2, \"childNodes\")));\n\n\tvar QuadRoot = (function (Class$$1) {\n\t function QuadRoot() {\n\t Class$$1.call(this);\n\n\t this.shapes = [];\n\t }\n\n\t extendStatic(QuadRoot, Class$$1);\n\t QuadRoot.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t QuadRoot.prototype.constructor = QuadRoot;\n\t QuadRoot.fn = QuadRoot.prototype;\n\t QuadRoot.fn.init = QuadRoot.fn.constructor;\n\n\t QuadRoot.prototype._add = function _add (shape, bbox) {\n\t this.shapes.push({\n\t bbox: bbox,\n\t shape: shape\n\t });\n\t shape._quadNode = this;\n\t };\n\n\t QuadRoot.prototype.pointShapes = function pointShapes (point) {\n\t var shapes = this.shapes;\n\t var length = shapes.length;\n\t var result = [];\n\t for (var idx = 0; idx < length; idx++) {\n\t if (shapes[idx].bbox.containsPoint(point)) {\n\t result.push(shapes[idx].shape);\n\t }\n\t }\n\t return result;\n\t };\n\n\t QuadRoot.prototype.insert = function insert (shape, bbox) {\n\t this._add(shape, bbox);\n\t };\n\n\t QuadRoot.prototype.remove = function remove (shape) {\n\t var shapes = this.shapes;\n\t var length = shapes.length;\n\n\t for (var idx = 0; idx < length; idx++) {\n\t if (shapes[idx].shape === shape) {\n\t shapes.splice(idx, 1);\n\t break;\n\t }\n\t }\n\t };\n\n\t return QuadRoot;\n\t}(Class));\n\n\tvar geometry = {\n\t\tCircle: Circle$2,\n\t\tArc: Arc$2,\n\t\tRect: Rect,\n\t\tPoint: Point,\n\t\tSegment: Segment,\n\t\tMatrix: Matrix,\n\t\tSize: Size,\n\t\ttoMatrix: toMatrix,\n\t\tTransformation: Transformation,\n\t\ttransform: transform$1\n\t};\n\n\tvar QuadNode = (function (QuadRoot$$1) {\n\t function QuadNode(rect) {\n\t QuadRoot$$1.call(this);\n\t this.children = [];\n\t this.rect = rect;\n\t }\n\n\t extendStatic(QuadNode, QuadRoot$$1);\n\t QuadNode.prototype = Object.create( QuadRoot$$1 && QuadRoot$$1.prototype );\n\t QuadNode.prototype.constructor = QuadNode;\n\t QuadNode.fn = QuadNode.prototype;\n\t QuadNode.fn.init = QuadNode.fn.constructor;\n\n\t QuadNode.prototype.inBounds = function inBounds (rect) {\n\t var nodeRect = this.rect;\n\t var nodeBottomRight = nodeRect.bottomRight();\n\t var bottomRight = rect.bottomRight();\n\t var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x &&\n\t bottomRight.y <= nodeBottomRight.y;\n\t return inBounds;\n\t };\n\n\t QuadNode.prototype.pointShapes = function pointShapes (point) {\n\t var children = this.children;\n\t var length = children.length;\n\t var result = QuadRoot$$1.prototype.pointShapes.call(this, point);\n\t for (var idx = 0; idx < length; idx++) {\n\t append$1$1(result, children[idx].pointShapes(point));\n\t }\n\t return result;\n\t };\n\n\t QuadNode.prototype.insert = function insert (shape, bbox) {\n\t var children = this.children;\n\t var inserted = false;\n\n\t if (this.inBounds(bbox)) {\n\t if (this.shapes.length < 4) {\n\t this._add(shape, bbox);\n\t } else {\n\t if (!children.length) {\n\t this._initChildren();\n\t }\n\n\t for (var idx = 0; idx < children.length; idx++) {\n\t if (children[idx].insert(shape, bbox)) {\n\t inserted = true;\n\t break;\n\t }\n\t }\n\n\t if (!inserted) {\n\t this._add(shape, bbox);\n\t }\n\t }\n\t inserted = true;\n\t }\n\n\t return inserted;\n\t };\n\n\t QuadNode.prototype._initChildren = function _initChildren () {\n\t var ref = this;\n\t var rect = ref.rect;\n\t var children = ref.children;\n\t var center = rect.center();\n\t var halfWidth = rect.width() / 2;\n\t var halfHeight = rect.height() / 2;\n\n\t children.push(\n\t new QuadNode(new Rect([ rect.origin.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n\t new QuadNode(new Rect([ center.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n\t new QuadNode(new Rect([ rect.origin.x, center.y ], [ halfWidth, halfHeight ])),\n\t new QuadNode(new Rect([ center.x, center.y ], [ halfWidth, halfHeight ]))\n\t );\n\t };\n\n\t return QuadNode;\n\t}(QuadRoot));\n\n\tvar ROOT_SIZE = 3000;\n\tvar LEVEL_STEP = 10000;\n\tvar MAX_LEVEL = 75;\n\n\tvar ShapesQuadTree = (function (Class$$1) {\n\t function ShapesQuadTree() {\n\t Class$$1.call(this);\n\n\t this.initRoots();\n\t }\n\n\t extendStatic(ShapesQuadTree, Class$$1);\n\t ShapesQuadTree.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t ShapesQuadTree.prototype.constructor = ShapesQuadTree;\n\t ShapesQuadTree.fn = ShapesQuadTree.prototype;\n\t ShapesQuadTree.fn.init = ShapesQuadTree.fn.constructor;\n\n\t ShapesQuadTree.prototype.initRoots = function initRoots () {\n\t this.rootMap = {};\n\t this.root = new QuadRoot();\n\t this.rootElements = [];\n\t };\n\n\t ShapesQuadTree.prototype.clear = function clear () {\n\t var this$1 = this;\n\n\t var rootElements = this.rootElements;\n\t for (var idx = 0; idx < rootElements.length; idx++) {\n\t this$1.remove(rootElements[idx]);\n\t }\n\t this.initRoots();\n\t };\n\n\t ShapesQuadTree.prototype.pointShape = function pointShape (point) {\n\t var sectorRoot = ( this.rootMap[ Math.floor( point.x / ROOT_SIZE ) ] || {} )[ Math.floor( point.y / ROOT_SIZE ) ];\n\t var result = this.root.pointShapes(point);\n\n\t if (sectorRoot) {\n\t result = result.concat(sectorRoot.pointShapes(point));\n\t }\n\n\t this.assignZindex(result);\n\n\t result.sort(zIndexComparer);\n\t for (var idx = 0; idx < result.length; idx++) {\n\t if (result[idx].containsPoint(point)) {\n\t return result[idx];\n\t }\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.assignZindex = function assignZindex (elements) {\n\t var this$1 = this;\n\n\t for (var idx = 0; idx < elements.length; idx++) {\n\t var element = elements[idx];\n\t var zIndex = 0;\n\t var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n\t var parents = [];\n\n\t while (element) {\n\t parents.push(element);\n\t element = element.parent;\n\t }\n\n\t while (parents.length) {\n\t element = parents.pop();\n\t zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n\t levelWeight /= LEVEL_STEP;\n\t }\n\n\t elements[idx]._zIndex = zIndex;\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"transform\" || e.field === \"stroke.width\") {\n\t this.bboxChange(e.element);\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.geometryChange = function geometryChange (e) {\n\t this.bboxChange(e.element);\n\t };\n\n\t ShapesQuadTree.prototype.bboxChange = function bboxChange (element) {\n\t var this$1 = this;\n\n\t if (element.nodeType === \"Group\") {\n\t for (var idx = 0; idx < element.children.length; idx++) {\n\t this$1.bboxChange(element.children[idx]);\n\t }\n\t } else {\n\t if (element._quadNode) {\n\t element._quadNode.remove(element);\n\t }\n\t this._insertShape(element);\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.add = function add (elements) {\n\t var elementsArray = Array.isArray(elements) ? elements.slice(0) : [ elements ];\n\n\t append$1$1(this.rootElements, elementsArray);\n\t this._insert(elementsArray);\n\t };\n\n\t ShapesQuadTree.prototype.childrenChange = function childrenChange (e) {\n\t var this$1 = this;\n\n\t if (e.action === \"remove\") {\n\t for (var idx = 0; idx < e.items.length; idx++) {\n\t this$1.remove(e.items[idx]);\n\t }\n\t } else {\n\t this._insert(Array.prototype.slice.call(e.items, 0));\n\t }\n\t };\n\n\t ShapesQuadTree.prototype._insert = function _insert (elements) {\n\t var this$1 = this;\n\n\t var element;\n\n\t while (elements.length > 0) {\n\t element = elements.pop();\n\t element.addObserver(this$1);\n\t if (element.nodeType === \"Group\") {\n\t append$1$1(elements, element.children);\n\t } else {\n\t this$1._insertShape(element);\n\t }\n\t }\n\t };\n\n\t ShapesQuadTree.prototype._insertShape = function _insertShape (shape) {\n\t var bbox = shape.bbox();\n\t if (bbox) {\n\t var sectors = this.getSectors(bbox);\n\t var x = sectors[0][0];\n\t var y = sectors[1][0];\n\n\t if (this.inRoot(sectors)) {\n\t this.root.insert(shape, bbox);\n\t } else {\n\t var rootMap = this.rootMap;\n\t if (!rootMap[x]) {\n\t rootMap[x] = {};\n\t }\n\n\t if (!rootMap[x][y]) {\n\t rootMap[x][y] = new QuadNode(\n\t new Rect([ x * ROOT_SIZE, y * ROOT_SIZE ], [ ROOT_SIZE, ROOT_SIZE ])\n\t );\n\t }\n\n\t rootMap[x][y].insert(shape, bbox);\n\t }\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.remove = function remove (element) {\n\t var this$1 = this;\n\n\t element.removeObserver(this);\n\n\t if (element.nodeType === \"Group\") {\n\t var children = element.children;\n\t for (var idx = 0; idx < children.length; idx++) {\n\t this$1.remove(children[idx]);\n\t }\n\t } else if (element._quadNode) {\n\t element._quadNode.remove(element);\n\t delete element._quadNode;\n\t }\n\t };\n\n\t ShapesQuadTree.prototype.inRoot = function inRoot (sectors) {\n\t return sectors[0].length > 1 || sectors[1].length > 1;\n\t };\n\n\t ShapesQuadTree.prototype.getSectors = function getSectors (rect) {\n\t var bottomRight = rect.bottomRight();\n\t var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n\t var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n\t var sectors = [ [], [] ];\n\t for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n\t sectors[0].push(x);\n\t }\n\t for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n\t sectors[1].push(y);\n\t }\n\t return sectors;\n\t };\n\n\t return ShapesQuadTree;\n\t}(Class));\n\n\tfunction zIndexComparer(x1, x2) {\n\t if (x1._zIndex < x2._zIndex) {\n\t return 1;\n\t }\n\t if (x1._zIndex > x2._zIndex) {\n\t return -1;\n\t }\n\n\t return 0;\n\t}\n\n\tvar SurfaceCursor = function SurfaceCursor(surface) {\n\t surface.bind(\"mouseenter\", this._mouseenter.bind(this));\n\t surface.bind(\"mouseleave\", this._mouseleave.bind(this));\n\n\t this.element = surface.element;\n\t};\n\n\tSurfaceCursor.prototype.clear = function clear () {\n\t this._resetCursor();\n\t};\n\n\tSurfaceCursor.prototype.destroy = function destroy () {\n\t this._resetCursor();\n\t delete this.element;\n\t};\n\n\tSurfaceCursor.prototype._mouseenter = function _mouseenter (e) {\n\t var cursor = this._shapeCursor(e);\n\n\t if (!cursor) {\n\t this._resetCursor();\n\t } else {\n\t if (!this._current) {\n\t this._defaultCursor = this._getCursor();\n\t }\n\n\t this._setCursor(cursor);\n\t }\n\t};\n\n\tSurfaceCursor.prototype._mouseleave = function _mouseleave () {\n\t this._resetCursor();\n\t};\n\n\tSurfaceCursor.prototype._shapeCursor = function _shapeCursor (e) {\n\t var shape = e.element;\n\n\t while (shape && !defined(shape.options.cursor)) {\n\t shape = shape.parent;\n\t }\n\n\t if (shape) {\n\t return shape.options.cursor;\n\t }\n\t};\n\n\tSurfaceCursor.prototype._getCursor = function _getCursor () {\n\t if (this.element) {\n\t return this.element.style.cursor;\n\t }\n\t};\n\n\tSurfaceCursor.prototype._setCursor = function _setCursor (cursor) {\n\t if (this.element) {\n\t this.element.style.cursor = cursor;\n\t this._current = cursor;\n\t }\n\t};\n\n\tSurfaceCursor.prototype._resetCursor = function _resetCursor () {\n\t if (this._current) {\n\t this._setCursor(this._defaultCursor || \"\");\n\t delete this._current;\n\t }\n\t};\n\n\tfunction addGradientStops(gradient, stops) {\n\t for (var idx = 0; idx < stops.length; idx++) {\n\t var stop = stops[idx];\n\t var color = kendo.parseColor(stop.color());\n\n\t color.a *= stop.opacity();\n\n\t gradient.addColorStop(stop.offset(), color.toCssRgba());\n\t }\n\t}\n\n\tvar PathNode$2 = (function (Node) {\n\t function PathNode () {\n\t Node.apply(this, arguments);\n\t }\n\n\t extendStatic(PathNode, Node);\n\t PathNode.prototype = Object.create( Node && Node.prototype );\n\t PathNode.prototype.constructor = PathNode;\n\t PathNode.fn = PathNode.prototype;\n\t PathNode.fn.init = PathNode.fn.constructor;\n\n\t PathNode.prototype.renderTo = function renderTo (ctx) {\n\t ctx.save();\n\n\t this.setTransform(ctx);\n\t this.setClip(ctx);\n\t this.setOpacity(ctx);\n\n\t ctx.beginPath();\n\n\t this.renderPoints(ctx, this.srcElement);\n\n\t this.setLineDash(ctx);\n\t this.setLineCap(ctx);\n\t this.setLineJoin(ctx);\n\n\t this.setFill(ctx);\n\t this.setStroke(ctx);\n\n\t ctx.restore();\n\t };\n\n\t PathNode.prototype.setFill = function setFill (ctx) {\n\t var fill = this.srcElement.options.fill;\n\t var hasFill = false;\n\n\t if (fill) {\n\t if (fill.nodeType === \"Gradient\") {\n\t this.setGradientFill(ctx, fill);\n\t hasFill = true;\n\t } else if (!isTransparent(fill.color)) {\n\t ctx.fillStyle = fill.color;\n\n\t ctx.save();\n\t this.globalAlpha(ctx, fill.opacity);\n\t ctx.fill();\n\t ctx.restore();\n\n\t hasFill = true;\n\t }\n\t }\n\n\t return hasFill;\n\t };\n\n\t PathNode.prototype.setGradientFill = function setGradientFill (ctx, fill) {\n\t var bbox = this.srcElement.rawBBox();\n\t var gradient;\n\n\t if (fill instanceof LinearGradient) {\n\t var start = fill.start();\n\t var end = fill.end();\n\t gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n\t } else if (fill instanceof RadialGradient) {\n\t var center = fill.center();\n\t gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n\t }\n\n\t addGradientStops(gradient, fill.stops);\n\n\t ctx.save();\n\n\t if (!fill.userSpace()) {\n\t ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n\t }\n\t ctx.fillStyle = gradient;\n\t ctx.fill();\n\n\t ctx.restore();\n\t };\n\n\t PathNode.prototype.setStroke = function setStroke (ctx) {\n\t var stroke = this.srcElement.options.stroke;\n\t if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n\t ctx.strokeStyle = stroke.color;\n\t ctx.lineWidth = valueOrDefault(stroke.width, 1);\n\n\t ctx.save();\n\t this.globalAlpha(ctx, stroke.opacity);\n\t ctx.stroke();\n\t ctx.restore();\n\n\t return true;\n\t }\n\t };\n\n\t PathNode.prototype.dashType = function dashType () {\n\t var stroke = this.srcElement.options.stroke;\n\t if (stroke && stroke.dashType) {\n\t return stroke.dashType.toLowerCase();\n\t }\n\t };\n\n\t PathNode.prototype.setLineDash = function setLineDash (ctx) {\n\t var dashType = this.dashType();\n\t if (dashType && dashType !== SOLID) {\n\t var dashArray = DASH_ARRAYS[dashType];\n\t if (ctx.setLineDash) {\n\t ctx.setLineDash(dashArray);\n\t } else {\n\t ctx.mozDash = dashArray;\n\t ctx.webkitLineDash = dashArray;\n\t }\n\t }\n\t };\n\n\t PathNode.prototype.setLineCap = function setLineCap (ctx) {\n\t var dashType = this.dashType();\n\t var stroke = this.srcElement.options.stroke;\n\t if (dashType && dashType !== SOLID) {\n\t ctx.lineCap = BUTT;\n\t } else if (stroke && stroke.lineCap) {\n\t ctx.lineCap = stroke.lineCap;\n\t }\n\t };\n\n\t PathNode.prototype.setLineJoin = function setLineJoin (ctx) {\n\t var stroke = this.srcElement.options.stroke;\n\t if (stroke && stroke.lineJoin) {\n\t ctx.lineJoin = stroke.lineJoin;\n\t }\n\t };\n\n\t PathNode.prototype.renderPoints = function renderPoints (ctx, path) {\n\t renderPath(ctx, path);\n\t };\n\n\t return PathNode;\n\t}(Node$2));\n\n\tvar ArcNode$2 = (function (PathNode) {\n\t function ArcNode () {\n\t PathNode.apply(this, arguments);\n\t }\n\n\t extendStatic(ArcNode, PathNode);\n\t ArcNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t ArcNode.prototype.constructor = ArcNode;\n\t ArcNode.fn = ArcNode.prototype;\n\t ArcNode.fn.init = ArcNode.fn.constructor;\n\n\t ArcNode.prototype.renderPoints = function renderPoints (ctx) {\n\t var path = this.srcElement.toPath();\n\t renderPath(ctx, path);\n\t };\n\n\t return ArcNode;\n\t}(PathNode$2));\n\n\tvar CircleNode$2 = (function (PathNode) {\n\t function CircleNode () {\n\t PathNode.apply(this, arguments);\n\t }\n\n\t extendStatic(CircleNode, PathNode);\n\t CircleNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t CircleNode.prototype.constructor = CircleNode;\n\t CircleNode.fn = CircleNode.prototype;\n\t CircleNode.fn.init = CircleNode.fn.constructor;\n\n\t CircleNode.prototype.renderPoints = function renderPoints (ctx) {\n\t var ref = this.srcElement.geometry();\n\t var center = ref.center;\n\t var radius = ref.radius;\n\n\t ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n\t };\n\n\t return CircleNode;\n\t}(PathNode$2));\n\n\tvar ImageNode$2 = (function (PathNode) {\n\t function ImageNode(srcElement, cors) {\n\t PathNode.call(this, srcElement);\n\n\t this.onLoad = this.onLoad.bind(this);\n\t this.onError = this.onError.bind(this);\n\n\t this.loading = createPromise();\n\n\t var img = this.img = new Image();\n\n\t if (cors && !(/^data:/i.test(srcElement.src()))) {\n\t img.crossOrigin = cors;\n\t }\n\n\t img.src = srcElement.src();\n\n\t if (img.complete) {\n\t this.onLoad();\n\t } else {\n\t img.onload = this.onLoad;\n\t img.onerror = this.onError;\n\t }\n\t }\n\n\t extendStatic(ImageNode, PathNode);\n\t ImageNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t ImageNode.prototype.constructor = ImageNode;\n\t ImageNode.fn = ImageNode.prototype;\n\t ImageNode.fn.init = ImageNode.fn.constructor;\n\n\t ImageNode.prototype.renderTo = function renderTo (ctx) {\n\t if (this.loading.state() === \"resolved\") {\n\t ctx.save();\n\n\t this.setTransform(ctx);\n\t this.setClip(ctx);\n\n\t this.drawImage(ctx);\n\n\t ctx.restore();\n\t }\n\t };\n\n\t ImageNode.prototype.optionsChange = function optionsChange (e) {\n\t if (e.field === \"src\") {\n\t this.loading = createPromise();\n\t this.img.src = this.srcElement.src();\n\t } else {\n\t PathNode.prototype.optionsChange.call(this, e);\n\t }\n\t };\n\n\t ImageNode.prototype.onLoad = function onLoad () {\n\t this.loading.resolve();\n\t this.invalidate();\n\t };\n\n\t ImageNode.prototype.onError = function onError () {\n\t this.loading.reject(new Error(\n\t \"Unable to load image '\" + this.img.src +\n\t \"'. Check for connectivity and verify CORS headers.\"\n\t ));\n\t };\n\n\t ImageNode.prototype.drawImage = function drawImage (ctx) {\n\t var rect = this.srcElement.rect();\n\t var topLeft = rect.topLeft();\n\n\t ctx.drawImage(\n\t this.img, topLeft.x, topLeft.y, rect.width(), rect.height()\n\t );\n\t };\n\n\t return ImageNode;\n\t}(PathNode$2));\n\n\tvar MultiPathNode$2 = (function (PathNode) {\n\t function MultiPathNode () {\n\t PathNode.apply(this, arguments);\n\t }\n\n\t extendStatic(MultiPathNode, PathNode);\n\t MultiPathNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t MultiPathNode.prototype.constructor = MultiPathNode;\n\t MultiPathNode.fn = MultiPathNode.prototype;\n\t MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n\t MultiPathNode.prototype.renderPoints = function renderPoints (ctx) {\n\t var paths = this.srcElement.paths;\n\t for (var i = 0; i < paths.length; i++) {\n\t renderPath(ctx, paths[i]);\n\t }\n\t };\n\n\t return MultiPathNode;\n\t}(PathNode$2));\n\n\tvar RectNode$2 = (function (PathNode) {\n\t function RectNode () {\n\t PathNode.apply(this, arguments);\n\t }\n\n\t extendStatic(RectNode, PathNode);\n\t RectNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t RectNode.prototype.constructor = RectNode;\n\t RectNode.fn = RectNode.prototype;\n\t RectNode.fn.init = RectNode.fn.constructor;\n\n\t RectNode.prototype.renderPoints = function renderPoints (ctx) {\n\t var geometry = this.srcElement.geometry();\n\t var ref = geometry.cornerRadius;\n\t var rx = ref[0];\n\t var ry = ref[1];\n\n\t if (rx === 0 && ry === 0) {\n\t var origin = geometry.origin;\n\t var size = geometry.size;\n\t ctx.rect(origin.x, origin.y, size.width, size.height);\n\t } else {\n\t PathNode.prototype.renderPoints.call(this, ctx, Path.fromRect(geometry));\n\t }\n\t };\n\n\t return RectNode;\n\t}(PathNode$2));\n\n\tvar TextNode$2 = (function (PathNode) {\n\t function TextNode () {\n\t PathNode.apply(this, arguments);\n\t }\n\n\t extendStatic(TextNode, PathNode);\n\t TextNode.prototype = Object.create( PathNode && PathNode.prototype );\n\t TextNode.prototype.constructor = TextNode;\n\t TextNode.fn = TextNode.prototype;\n\t TextNode.fn.init = TextNode.fn.constructor;\n\n\t TextNode.prototype.renderTo = function renderTo (ctx) {\n\t var text = this.srcElement;\n\t var pos = text.position();\n\t var size = text.measure();\n\n\t ctx.save();\n\n\t this.setTransform(ctx);\n\t this.setClip(ctx);\n\t this.setOpacity(ctx);\n\n\t ctx.beginPath();\n\n\t ctx.font = text.options.font;\n\t ctx.textAlign = 'left';\n\n\t if (this.setFill(ctx)) {\n\t ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n\t }\n\n\t if (this.setStroke(ctx)) {\n\t this.setLineDash(ctx);\n\t ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n\t }\n\n\t ctx.restore();\n\t };\n\n\t return TextNode;\n\t}(PathNode$2));\n\n\tNODE_MAP$2.Arc = ArcNode$2;\n\tNODE_MAP$2.Circle = CircleNode$2;\n\tNODE_MAP$2.Group = GroupNode$2;\n\tNODE_MAP$2.Image = ImageNode$2;\n\tNODE_MAP$2.MultiPath = MultiPathNode$2;\n\tNODE_MAP$2.Path = PathNode$2;\n\tNODE_MAP$2.Rect = RectNode$2;\n\tNODE_MAP$2.Text = TextNode$2;\n\n\tvar Surface$4 = (function (BaseSurface) {\n\t function Surface(element, options) {\n\t BaseSurface.call(this, element, options);\n\n\t this.element.innerHTML = this._template(this);\n\n\t var canvas = this.element.firstElementChild;\n\t var size = elementSize(element);\n\n\t canvas.width = size.width;\n\t canvas.height = size.height;\n\n\t this._rootElement = canvas;\n\n\t this._root = new RootNode$2(canvas, size);\n\n\t this._mouseTrackHandler = this._trackMouse.bind(this);\n\n\t bindEvents(this.element, {\n\t click: this._mouseTrackHandler,\n\t mousemove: this._mouseTrackHandler\n\t });\n\t }\n\n\t extendStatic(Surface, BaseSurface);\n\t Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n\t Surface.prototype.constructor = Surface;\n\t Surface.fn = Surface.prototype;\n\t Surface.fn.init = Surface.fn.constructor;\n\n\t var prototypeAccessors = { type: {} };\n\n\t prototypeAccessors.type.get = function () {\n\t return \"canvas\";\n\t };\n\n\t Surface.prototype.destroy = function destroy () {\n\t BaseSurface.prototype.destroy.call(this);\n\n\t if (this._root) {\n\t this._root.destroy();\n\t this._root = null;\n\t }\n\n\t if (this._searchTree) {\n\t this._searchTree.clear();\n\t delete this._searchTree;\n\t }\n\n\t if (this._cursor) {\n\t this._cursor.destroy();\n\t delete this._cursor;\n\t }\n\n\t unbindEvents(this.element, {\n\t click: this._mouseTrackHandler,\n\t mousemove: this._mouseTrackHandler\n\t });\n\t };\n\n\t Surface.prototype.draw = function draw (element) {\n\t BaseSurface.prototype.draw.call(this, element);\n\t this._root.load([ element ], undefined, this.options.cors);\n\n\t if (this._searchTree) {\n\t this._searchTree.add([ element ]);\n\t }\n\t };\n\n\t Surface.prototype.clear = function clear () {\n\t BaseSurface.prototype.clear.call(this);\n\t this._root.clear();\n\n\t if (this._searchTree) {\n\t this._searchTree.clear();\n\t }\n\n\t if (this._cursor) {\n\t this._cursor.clear();\n\t }\n\t };\n\n\t Surface.prototype.eventTarget = function eventTarget (e) {\n\t if (this._searchTree) {\n\t var point = this._surfacePoint(e);\n\t var shape = this._searchTree.pointShape(point);\n\t return shape;\n\t }\n\t };\n\n\t Surface.prototype.image = function image () {\n\t var ref = this;\n\t var root = ref._root;\n\t var rootElement = ref._rootElement;\n\t var loadingStates = [];\n\n\t root.traverse(function (childNode) {\n\t if (childNode.loading) {\n\t loadingStates.push(childNode.loading);\n\t }\n\t });\n\n\t var promise = createPromise();\n\t var resolveDataURL = function () {\n\t root._invalidate({ fixedScale: true });\n\n\t try {\n\t var data = rootElement.toDataURL();\n\t promise.resolve(data);\n\t } catch (e) {\n\t promise.reject(e);\n\t }\n\t };\n\n\t promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n\n\t return promise;\n\t };\n\n\t Surface.prototype.suspendTracking = function suspendTracking () {\n\t BaseSurface.prototype.suspendTracking.call(this);\n\t if (this._searchTree) {\n\t this._searchTree.clear();\n\t delete this._searchTree;\n\t }\n\t };\n\n\t Surface.prototype.resumeTracking = function resumeTracking () {\n\t BaseSurface.prototype.resumeTracking.call(this);\n\t if (!this._searchTree) {\n\t this._searchTree = new ShapesQuadTree();\n\n\t var childNodes = this._root.childNodes;\n\t var rootElements = [];\n\t for (var idx = 0; idx < childNodes.length; idx++) {\n\t rootElements.push(childNodes[idx].srcElement);\n\t }\n\t this._searchTree.add(rootElements);\n\t }\n\t };\n\n\t Surface.prototype._resize = function _resize () {\n\t this._rootElement.width = this._size.width;\n\t this._rootElement.height = this._size.height;\n\n\t this._root.size = this._size;\n\t this._root.invalidate();\n\t };\n\n\t Surface.prototype._template = function _template () {\n\t return \"\";\n\t };\n\n\t Surface.prototype._enableTracking = function _enableTracking () {\n\t this._searchTree = new ShapesQuadTree();\n\t this._cursor = new SurfaceCursor(this);\n\n\t BaseSurface.prototype._enableTracking.call(this);\n\t };\n\n\t Surface.prototype._trackMouse = function _trackMouse (e) {\n\t if (this._suspendedTracking) {\n\t return;\n\t }\n\n\t var shape = this.eventTarget(e);\n\n\t if (e.type !== \"click\") {\n\t var currentShape = this._currentShape;\n\t if (currentShape && currentShape !== shape) {\n\t this.trigger(\"mouseleave\", {\n\t element: currentShape,\n\t originalEvent: e,\n\t type: \"mouseleave\"\n\t });\n\t }\n\n\t if (shape && currentShape !== shape) {\n\t this.trigger(\"mouseenter\", {\n\t element: shape,\n\t originalEvent: e,\n\t type: \"mouseenter\"\n\t });\n\t }\n\n\t this.trigger(\"mousemove\", {\n\t element: shape,\n\t originalEvent: e,\n\t type: \"mousemove\"\n\t });\n\n\t this._currentShape = shape;\n\t } else if (shape) {\n\t this.trigger(\"click\", {\n\t element: shape,\n\t originalEvent: e,\n\t type: \"click\"\n\t });\n\t }\n\t };\n\n\t Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n\t return Surface;\n\t}(Surface$2));\n\n\tvar instance$2;\n\tvar support$1;\n\n\tvar hasDocument = function () { return typeof document !== \"undefined\"; };\n\n\tvar supportsCanvas = function () { return hasDocument() &&\n\t document.createElement(\"canvas\").getContext; };\n\n\tvar supportsSVG = function () { return hasDocument() &&\n\t document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"); };\n\n\tvar SurfaceFactory = (function (Class$$1) {\n\t function SurfaceFactory() {\n\t Class$$1.call(this);\n\n\t this._items = [ {\n\t name: \"svg\",\n\t type: Surface$3\n\t }, {\n\t name: \"canvas\",\n\t type: Surface$4\n\t } ];\n\t }\n\n\t extendStatic(SurfaceFactory, Class$$1);\n\t SurfaceFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n\t SurfaceFactory.prototype.constructor = SurfaceFactory;\n\t SurfaceFactory.fn = SurfaceFactory.prototype;\n\t SurfaceFactory.fn.init = SurfaceFactory.fn.constructor;\n\n\t var staticAccessors = { support: {},current: {} };\n\n\t staticAccessors.support.get = function () {\n\t if (!support$1) {\n\t support$1 = {\n\t canvas: supportsCanvas(),\n\t svg: supportsSVG()\n\t };\n\t }\n\n\t return support$1;\n\t };\n\n\t staticAccessors.current.get = function () {\n\t if (!instance$2) {\n\t instance$2 = new SurfaceFactory();\n\t }\n\n\t return instance$2;\n\t };\n\n\t SurfaceFactory.prototype.create = function create (element, options) {\n\t var items = this._items;\n\t var match = items[0];\n\n\t if (options && options.type) {\n\t var preferred = options.type.toLowerCase();\n\t for (var i = 0; i < items.length; i++) {\n\t if (items[i].name === preferred) {\n\t match = items[i];\n\t break;\n\t }\n\t }\n\t }\n\n\t if (match) {\n\t return new match.type(element, options);\n\t }\n\n\t kendo.logToConsole(\n\t \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n\t \"- The browser does not support SVG and Canvas. User agent: \" + (navigator.userAgent));\n\t };\n\n\t Object.defineProperties( SurfaceFactory, staticAccessors );\n\n\t return SurfaceFactory;\n\t}(Class));\n\n\tvar Surface = (function (BaseSurface) {\n\t function Surface () {\n\t BaseSurface.apply(this, arguments);\n\t }\n\n\t extendStatic(Surface, BaseSurface);\n\t Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n\t Surface.prototype.constructor = Surface;\n\t Surface.fn = Surface.prototype;\n\t Surface.fn.init = Surface.fn.constructor;\n\n\t var staticAccessors = { support: {} };\n\n\t staticAccessors.support.get = function () {\n\t return SurfaceFactory.support;\n\t };\n\n\t Surface.create = function create (element, options) {\n\t return SurfaceFactory.current.create(element, options);\n\t };\n\n\t Object.defineProperties( Surface, staticAccessors );\n\n\t return Surface;\n\t}(Surface$2));\n\n\tfunction exportGroup(group) {\n\t var root = new RootNode({\n\t skipBaseHref: true\n\t });\n\t var bbox = group.clippedBBox();\n\t var rootGroup = group;\n\n\t if (bbox) {\n\t var origin = bbox.getOrigin();\n\t var exportRoot = new Group();\n\t exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n\t exportRoot.children.push(group);\n\t rootGroup = exportRoot;\n\t }\n\n\t root.load([ rootGroup ]);\n\n\t var svg = \"\" + (root.render()) + \"\";\n\n\t root.destroy();\n\n\t return svg;\n\t}\n\n\tvar svg$1 = {\n\t\tSurface: Surface$3,\n\t\tRootNode: RootNode,\n\t\tNode: Node,\n\t\tGroupNode: GroupNode,\n\t\tArcNode: ArcNode,\n\t\tCircleNode: CircleNode,\n\t\tRectNode: RectNode,\n\t\tImageNode: ImageNode,\n\t\tTextNode: TextNode,\n\t\tPathNode: PathNode,\n\t\tMultiPathNode: MultiPathNode,\n\t\tDefinitionNode: DefinitionNode,\n\t\tClipNode: ClipNode,\n\t\tGradientStopNode: GradientStopNode,\n\t\tLinearGradientNode: LinearGradientNode,\n\t\tRadialGradientNode: RadialGradientNode,\n\t\texportGroup: exportGroup\n\t};\n\n\tvar canvas = {\n\t\tSurface: Surface$4,\n\t\tRootNode: RootNode$2,\n\t\tNode: Node$2,\n\t\tGroupNode: GroupNode$2,\n\t\tArcNode: ArcNode$2,\n\t\tCircleNode: CircleNode$2,\n\t\tRectNode: RectNode$2,\n\t\tImageNode: ImageNode$2,\n\t\tTextNode: TextNode$2,\n\t\tPathNode: PathNode$2,\n\t\tMultiPathNode: MultiPathNode$2\n\t};\n\n\tfunction exportImage(group, options) {\n\t var defaults = {\n\t width: \"800px\", height: \"600px\",\n\t cors: \"Anonymous\"\n\t };\n\n\t var exportRoot = group;\n\t var bbox = group.clippedBBox();\n\n\t if (bbox) {\n\t var origin = bbox.getOrigin();\n\t exportRoot = new Group();\n\t exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n\t exportRoot.children.push(group);\n\n\t var size = bbox.getSize();\n\t defaults.width = size.width + \"px\";\n\t defaults.height = size.height + \"px\";\n\t }\n\n\t var surfaceOptions = $.extend(defaults, options);\n\n\t var container = document.createElement(\"div\");\n\t var style = container.style;\n\n\t style.display = \"none\";\n\t style.width = surfaceOptions.width;\n\t style.height = surfaceOptions.height;\n\t document.body.appendChild(container);\n\n\t var surface = new Surface$4(container, surfaceOptions);\n\t surface.suspendTracking();\n\t surface.draw(exportRoot);\n\n\t var promise = surface.image();\n\t var destroy = function () {\n\t surface.destroy();\n\t document.body.removeChild(container);\n\t };\n\t promise.then(destroy, destroy);\n\n\t return promise;\n\t}\n\n\tfunction exportSVG(group, options) {\n\t var svg = exportGroup(group);\n\n\t if (!options || !options.raw) {\n\t svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n\t }\n\n\t return createPromise().resolve(svg);\n\t}\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty, yoda */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\tvar browser = supportBrowser || {};\n\t/*\n\n\t XXX: to test:\n\n\t - cloneNodes function:\n\t - drawing document containing canvas with page breaking\n\t - drawing document with named radio -s (should not clear selection)\n\t - IE9/IE10 don't support el.dataset; do they copy user data?\n\n\t - repeating table headers/footers on page breaking\n\n\t - forceBreak, keepTogether\n\n\t - avoidLinks\n\n\t */\n\n\t/* -----[ local vars ]----- */\n\n\tfunction slice$1$1(thing) {\n\t return Array.prototype.slice.call(thing);\n\t}\n\n\tvar KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n\n\tvar IMAGE_CACHE = {};\n\n\tvar nodeInfo = {};\n\tnodeInfo._root = nodeInfo;\n\n\t/* -----[ Custom Text node to speed up rendering in kendo.pdf ]----- */\n\n\tvar inBrowser = typeof window !== 'undefined';\n\tvar microsoft = inBrowser ? browser.msie || browser.edge : false;\n\n\tvar TextRect = (function (Text$$1) {\n\t function TextRect(str, rect, options) {\n\t Text$$1.call(this, str, rect.getOrigin(), options);\n\t this._pdfRect = rect;\n\t }\n\n\t extendStatic(TextRect, Text$$1);\n\t TextRect.prototype = Object.create( Text$$1 && Text$$1.prototype );\n\t TextRect.prototype.constructor = TextRect;\n\t TextRect.fn = TextRect.prototype;\n\t TextRect.fn.init = TextRect.fn.constructor;\n\t TextRect.prototype.rect = function rect () {\n\t // this is the crux of it: we can avoid a call to\n\t // measure(), which is what the base class does, since we\n\t // already know the rect. measure() is s-l-o-w.\n\t return this._pdfRect;\n\t };\n\t TextRect.prototype.rawBBox = function rawBBox () {\n\t // also let's avoid creating a new rectangle.\n\t return this._pdfRect;\n\t };\n\n\t return TextRect;\n\t}(Text));\n\n\tfunction addClass(el, cls) {\n\t if (el.classList) {\n\t el.classList.add(cls);\n\t } else {\n\t el.className += \" \" + cls;\n\t }\n\t}\n\n\tfunction removeClass(el, cls) {\n\t if (el.classList) {\n\t el.classList.remove(cls);\n\t } else {\n\t el.className = el.className.split(/\\s+/).reduce(function(a, word){\n\t if (word != cls) {\n\t a.push(word);\n\t }\n\t return a;\n\t }, []).join(\" \");\n\t }\n\t}\n\n\tfunction setCSS(el, styles) {\n\t Object.keys(styles).forEach(function(key){\n\t el.style[key] = styles[key];\n\t });\n\t}\n\n\tvar matches = typeof Element !== \"undefined\" && Element.prototype && (function(p){\n\t if (p.matches) {\n\t return function(el, selector) { return el.matches(selector); };\n\t }\n\t if (p.webkitMatchesSelector) {\n\t return function(el, selector) { return el.webkitMatchesSelector(selector); };\n\t }\n\t if (p.mozMatchesSelector) {\n\t return function(el, selector) { return el.mozMatchesSelector(selector); };\n\t }\n\t if (p.msMatchesSelector) {\n\t return function(el, selector) { return el.msMatchesSelector(selector); };\n\t }\n\t return function(s) {\n\t\treturn [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n\t };\n\t})(Element.prototype);\n\n\tfunction closest(el, selector) {\n\t if (el.closest) {\n\t return el.closest(selector);\n\t }\n\t // IE: stringifying rather than simply comparing with `document`,\n\t // which is not iframe-proof and fails in editor export —\n\t // https://github.com/telerik/kendo/issues/6721\n\t while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n\t if (el.nodeType == 1 /* Element */ && matches(el, selector)) {\n\t return el;\n\t }\n\t el = el.parentNode;\n\t }\n\t}\n\n\t// clone nodes ourselves, so that we redraw (DOM or\n\t// jQuery clone will not)\n\tvar cloneNodes = (function($){\n\t if ($) {\n\t // if we have Kendo and jQuery, use this version as it will\n\t // maintain proper links between cloned element and Kendo\n\t // widgets (i.e. it clones jQuery data(), which isn't the same\n\t // as element's data attributes).\n\t // https://github.com/telerik/kendo-ui-core/issues/2750\n\t return function cloneNodes(el) {\n\t var clone = el.cloneNode(false);\n\t if (el.nodeType == 1 /* Element */) {\n\t var $el = $(el), $clone = $(clone), i;\n\t var data = $el.data();\n\t for (i in data) {\n\t $clone.data(i, data[i]);\n\t }\n\t if (/^canvas$/i.test(el.tagName)) {\n\t clone.getContext(\"2d\").drawImage(el, 0, 0);\n\t } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n\t // drop the name attributes so that we don't affect the selection of the\n\t // original nodes (i.e. checked status of radio buttons) when we insert our copy\n\t // into the DOM. https://github.com/telerik/kendo/issues/5409\n\t clone.removeAttribute(\"id\");\n\t clone.removeAttribute(\"name\");\n\t if (!/^textarea$/i.test(el.tagName)) {\n\t clone.value = el.value;\n\t }\n\t clone.checked = el.checked;\n\t clone.selected = el.selected;\n\t }\n\t for (i = el.firstChild; i; i = i.nextSibling) {\n\t clone.appendChild(cloneNodes(i));\n\t }\n\t }\n\t return clone;\n\t };\n\t } else {\n\t // the no-jQuery version\n\t return function cloneNodes(el) {\n\t var clone = (function dive(node){\n\t var clone = node.cloneNode(false);\n\t if (node._kendoExportVisual) {\n\t clone._kendoExportVisual = node._kendoExportVisual;\n\t }\n\t for (var i = node.firstChild; i; i = i.nextSibling) {\n\t clone.appendChild(dive(i));\n\t }\n\t return clone;\n\t })(el);\n\n\t // re-draw canvases - https://github.com/telerik/kendo/issues/4872\n\t var canvases = el.querySelectorAll(\"canvas\");\n\t if (canvases.length) {\n\t slice$1$1(clone.querySelectorAll(\"canvas\")).forEach(function (canvas$$1, i) {\n\t canvas$$1.getContext(\"2d\").drawImage(canvases[i], 0, 0);\n\t });\n\t }\n\n\t // remove \"name\" attributes from elements -\n\t // https://github.com/telerik/kendo/issues/5409\n\t var orig = el.querySelectorAll(\"input, select, textarea, option\");\n\t slice$1$1(clone.querySelectorAll(\"input, select, textarea, option\")).forEach(function (el, i) {\n\t el.removeAttribute(\"id\");\n\t el.removeAttribute(\"name\");\n\t if (!/^textarea$/i.test(el.tagName)) {\n\t el.value = orig[i].value;\n\t }\n\t el.checked = orig[i].checked;\n\t el.selected = orig[i].selected;\n\t });\n\n\t return clone;\n\t };\n\t }\n\t})(typeof window !== \"undefined\" && window.kendo && window.kendo.jQuery);\n\n\tfunction getXY(thing) {\n\t if (typeof thing == \"number\") {\n\t return { x: thing, y: thing };\n\t }\n\t if (Array.isArray(thing)) {\n\t return { x: thing[0], y: thing[1] };\n\t }\n\t return { x: thing.x, y: thing.y };\n\t}\n\n\tfunction drawDOM(element, options) {\n\t if (!options) {\n\t options = {};\n\t }\n\t var promise = createPromise();\n\n\t if (!element) {\n\t return promise.reject(\"No element to export\");\n\t }\n\n\t if (typeof window.getComputedStyle != \"function\") {\n\t throw new Error(\"window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");\n\t }\n\n\t kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n\n\t var scale = getXY(options.scale || 1);\n\n\t function doOne(element) {\n\t var group = new Group();\n\n\t // translate to start of page\n\t var pos = element.getBoundingClientRect();\n\t setTransform$1(group, [\n\t scale.x,\n\t 0,\n\t 0,\n\t scale.y,\n\t (-pos.left * scale.x),\n\t (-pos.top * scale.y)\n\t ]);\n\n\t nodeInfo._clipbox = false;\n\t nodeInfo._matrix = Matrix.unit();\n\t nodeInfo._stackingContext = {\n\t element: element,\n\t group: group\n\t };\n\n\t if (options.avoidLinks === true) {\n\t nodeInfo._avoidLinks = \"a\";\n\t } else {\n\t nodeInfo._avoidLinks = options.avoidLinks;\n\t }\n\n\t addClass(element, \"k-pdf-export\");\n\t renderElement(element, group);\n\t removeClass(element, \"k-pdf-export\");\n\n\t return group;\n\t }\n\n\t cacheImages([ element ], function(){\n\t var forceBreak = options && options.forcePageBreak;\n\t var hasPaperSize = options && options.paperSize && options.paperSize != \"auto\";\n\t var paperOptions = kendo.pdf.getPaperOptions(function(key, def){\n\t if (key == \"paperSize\") {\n\t // PDF.getPaperOptions croaks on \"auto\", just pass dummy A4 as we might\n\t // still be interested in margins.\n\t return hasPaperSize ? options[key] : \"A4\";\n\t }\n\t return key in options ? options[key] : def;\n\t });\n\t var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n\t var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n\t var margin = options.margin && paperOptions.margin;\n\t var hasMargin = Boolean(margin);\n\t if (forceBreak || pageHeight) {\n\t if (!margin) {\n\t margin = { left: 0, top: 0, right: 0, bottom: 0 };\n\t }\n\n\t // we want paper size and margin to be unaffected by\n\t // scaling in the output, so we have to reverse-scale\n\t // before our calculations begin.\n\t if (pageWidth) { pageWidth /= scale.x; }\n\t if (pageHeight) { pageHeight /= scale.y; }\n\t margin.left /= scale.x;\n\t margin.right /= scale.x;\n\t margin.top /= scale.y;\n\t margin.bottom /= scale.y;\n\n\t var group = new Group({\n\t pdf: {\n\t multiPage : true,\n\t paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\",\n\t _ignoreMargin : hasMargin // HACK! see exportPDF in pdf/drawing.js\n\t }\n\t });\n\t handlePageBreaks(\n\t function(x) {\n\t if (options.progress) {\n\t var canceled = false, pageNum = 0;\n\t (function next(){\n\t if (pageNum < x.pages.length) {\n\t var page = doOne(x.pages[pageNum]);\n\t group.append(page);\n\t options.progress({\n\t page: page,\n\t pageNum: ++pageNum,\n\t totalPages: x.pages.length,\n\t cancel: function() {\n\t canceled = true;\n\t }\n\t });\n\t if (!canceled) {\n\t setTimeout(next);\n\t } else {\n\t // XXX: should we also fail() the deferred object?\n\t x.container.parentNode.removeChild(x.container);\n\t }\n\t } else {\n\t x.container.parentNode.removeChild(x.container);\n\t promise.resolve(group);\n\t }\n\t })();\n\t } else {\n\t x.pages.forEach(function(page){\n\t group.append(doOne(page));\n\t });\n\t x.container.parentNode.removeChild(x.container);\n\t promise.resolve(group);\n\t }\n\t },\n\t element,\n\t forceBreak,\n\t pageWidth ? pageWidth - margin.left - margin.right : null,\n\t pageHeight ? pageHeight - margin.top - margin.bottom : null,\n\t margin,\n\t options\n\t );\n\t } else {\n\t promise.resolve(doOne(element));\n\t }\n\t });\n\n\t function makeTemplate(template) {\n\t if (template != null) {\n\t if (typeof template == \"string\") {\n\t template = kendo.template(template.replace(/^\\s+|\\s+$/g, \"\"));\n\t }\n\t if (typeof template == \"function\") {\n\t return function(data) {\n\t var el = template(data);\n\t if (el && typeof el == \"string\") {\n\t var div = document.createElement(\"div\");\n\t div.innerHTML = el;\n\t el = div.firstElementChild;\n\t }\n\t return el;\n\t };\n\t }\n\t // assumed DOM element\n\t return function() {\n\t return template.cloneNode(true);\n\t };\n\t }\n\t }\n\n\t function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n\t var template = makeTemplate(options.template);\n\t var doc = element.ownerDocument;\n\t var pages = [];\n\t var copy = options._destructive ? element : cloneNodes(element);\n\t var container = doc.createElement(\"KENDO-PDF-DOCUMENT\");\n\t var adjust = 0;\n\n\t // make sure elements are at the end (Grid widget\n\t // places TFOOT before TBODY, tricking our algorithm to\n\t // insert a page break right after the header).\n\t // https://github.com/telerik/kendo/issues/4699\n\t slice$1$1(copy.querySelectorAll(\"tfoot\")).forEach(function(tfoot){\n\t tfoot.parentNode.appendChild(tfoot);\n\t });\n\n\t // remember the index of each LI from an ordered list.\n\t // we'll use it to reconstruct the proper numbering.\n\t slice$1$1(copy.querySelectorAll(\"ol\")).forEach(function(ol){\n\t slice$1$1(ol.children).forEach(function(li, index){\n\t li.setAttribute(\"kendo-split-index\", index);\n\t });\n\t });\n\n\t setCSS(container, {\n\t display : \"block\",\n\t position : \"absolute\",\n\t boxSizing : \"content-box\",\n\t left : \"-10000px\",\n\t top : \"-10000px\"\n\t });\n\n\t if (pageWidth) {\n\t // subtle: if we don't set the width *and* margins here, the layout in this\n\t // container will be different from the one in our final page elements, and we'll\n\t // split at the wrong places.\n\t setCSS(container, {\n\t width : pageWidth + \"px\",\n\t paddingLeft : margin.left + \"px\",\n\t paddingRight : margin.right + \"px\"\n\t });\n\n\t // when the first element has a margin-top (i.e. a

) the page will be\n\t // inadvertently enlarged by that number (the browser will report the container's\n\t // bounding box top to start at the element's top, rather than including its\n\t // margin). Adding overflow: hidden seems to fix it.\n\t //\n\t // to understand the difference, try the following snippets in your browser:\n\t //\n\t // 1.
\n\t //

Foo

\n\t //
\n\t //\n\t // 2.
\n\t //

Foo

\n\t //
\n\t //\n\t // this detail is not important when automatic page breaking is not requested, hence\n\t // doing it only if pageWidth is defined.\n\t setCSS(copy, { overflow: \"hidden\" });\n\t }\n\n\t element.parentNode.insertBefore(container, element);\n\t container.appendChild(copy);\n\n\t // With cache disabled, images will still have height zero until their `complete` attribute\n\t // is true. `whenImagesAreActuallyLoaded` will wait for it.\n\t if (options.beforePageBreak) {\n\t whenImagesAreActuallyLoaded([ container ], function() {\n\t options.beforePageBreak(container, doPageBreak);\n\t });\n\t } else {\n\t whenImagesAreActuallyLoaded([ container ], doPageBreak);\n\t }\n\n\t function doPageBreak() {\n\t if (forceBreak != \"-\" || pageHeight) {\n\t splitElement(copy);\n\t }\n\n\t {\n\t var page = makePage();\n\t copy.parentNode.insertBefore(page, copy);\n\t page.appendChild(copy);\n\t }\n\n\t if (template) {\n\t pages.forEach(function(page, i){\n\t var el = template({\n\t element : page,\n\t pageNum : i + 1,\n\t totalPages : pages.length\n\t });\n\t if (el) {\n\t page.appendChild(el);\n\t }\n\t });\n\t }\n\n\t cacheImages(pages, callback.bind(null, { pages: pages, container: container }));\n\t }\n\n\t function keepTogether(el) {\n\t if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n\t return true;\n\t }\n\n\t var tag = el.tagName;\n\t if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n\t return false;\n\t }\n\n\t return (el.getAttribute(\"data-kendo-chart\") ||\n\t /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName));\n\t }\n\n\t function splitElement(element) {\n\t if (element.tagName == \"TABLE\") {\n\t setCSS(element, { tableLayout: \"fixed\" });\n\t }\n\t if (keepTogether(element)) {\n\t return;\n\t }\n\t var style = getComputedStyle$1(element);\n\t var bottomPadding = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n\t var bottomBorder = parseFloat(getPropertyValue(style, \"border-bottom-width\"));\n\t var saveAdjust = adjust;\n\t adjust += bottomPadding + bottomBorder;\n\t var isFirst = true;\n\t for (var el = element.firstChild; el; el = el.nextSibling) {\n\t if (el.nodeType == 1 /* Element */) {\n\t isFirst = false;\n\t if (matches(el, forceBreak)) {\n\t breakAtElement(el);\n\t continue;\n\t }\n\t if (!pageHeight) {\n\t // we're in \"manual breaks mode\"\n\t splitElement(el);\n\t continue;\n\t }\n\t if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle$1(el), \"position\"))) {\n\t continue;\n\t }\n\t var fall = fallsOnMargin(el);\n\t if (fall == 1) {\n\t // element starts on next page, break before anyway.\n\t breakAtElement(el);\n\t }\n\t else if (fall) {\n\t // elements ends up on next page, or possibly doesn't fit on a page at\n\t // all. break before it anyway if it's an or , otherwise\n\t // attempt to split.\n\t if (keepTogether(el)) {\n\t breakAtElement(el);\n\t } else {\n\t splitElement(el);\n\t }\n\t }\n\t else {\n\t splitElement(el);\n\t }\n\t }\n\t else if (el.nodeType == 3 /* Text */ && pageHeight) {\n\t splitText(el, isFirst);\n\t isFirst = false;\n\t }\n\t }\n\t adjust = saveAdjust;\n\t }\n\n\t function firstInParent(el) {\n\t var p = el.parentNode, first = p.firstChild;\n\t if (el === first) {\n\t return true;\n\t }\n\t if (el === p.children[0]) {\n\t if (first.nodeType == 7 /* comment */ ||\n\t first.nodeType == 8 /* processing instruction */) {\n\t return true;\n\t }\n\t if (first.nodeType == 3 /* text */) {\n\t // if whitespace only we can probably consider it's first\n\t return !/\\S/.test(first.data);\n\t }\n\t }\n\t return false;\n\t }\n\n\t function breakAtElement(el) {\n\t if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n\t return breakAtElement(el.parentNode);\n\t }\n\t var table, colgroup, thead, grid, gridHead;\n\t table = closest(el, \"table\");\n\t colgroup = table && table.querySelector(\"colgroup\");\n\t if (options.repeatHeaders) {\n\t thead = table && table.querySelector(\"thead\");\n\n\t // If we break page in a Kendo Grid, repeat its header. This ugly hack is\n\t // necessary because a scrollable grid will keep the header in a separate\n\t // element from its content.\n\t //\n\t // XXX: This is likely to break as soon as the widget HTML is modified.\n\t grid = closest(el, \".k-grid.k-widget\");\n\t if (grid && grid.querySelector(\".k-auto-scrollable\")) {\n\t gridHead = grid.querySelector(\".k-grid-header\");\n\t }\n\t }\n\t var page = makePage();\n\t var range = doc.createRange();\n\t range.setStartBefore(copy);\n\t range.setEndBefore(el);\n\t page.appendChild(range.extractContents());\n\t copy.parentNode.insertBefore(page, copy);\n\t preventBulletOnListItem(el.parentNode);\n\t if (table) {\n\t table = closest(el, \"table\"); // that's the
on next page!\n\t if (options.repeatHeaders && thead) {\n\t table.insertBefore(thead.cloneNode(true), table.firstChild);\n\t }\n\t if (colgroup) {\n\t table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n\t }\n\t }\n\t if (options.repeatHeaders && gridHead) {\n\t grid = closest(el, \".k-grid.k-widget\");\n\t grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n\t }\n\t }\n\n\t function makePage() {\n\t var page = doc.createElement(\"KENDO-PDF-PAGE\");\n\t setCSS(page, {\n\t display : \"block\",\n\t boxSizing: \"content-box\",\n\t width : pageWidth ? (pageWidth + \"px\") : \"auto\",\n\t padding : (margin.top + \"px \" +\n\t margin.right + \"px \" +\n\t margin.bottom + \"px \" +\n\t margin.left + \"px\"),\n\n\t // allow absolutely positioned elements to be relative to current page\n\t position : \"relative\",\n\n\t // without the following we might affect layout of subsequent pages\n\t height : pageHeight ? (pageHeight + \"px\") : \"auto\",\n\t overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\n\t clear : \"both\"\n\t });\n\n\t // debug\n\t // $(\"
\").css({\n\t // position : \"absolute\",\n\t // left : margin.left,\n\t // top : margin.top,\n\t // width : pageWidth,\n\t // height : pageHeight,\n\t // boxSizing : \"border-box\",\n\t // background: \"rgba(255, 255, 0, 0.5)\"\n\t // //border : \"1px solid red\"\n\t // }).appendTo(page);\n\n\t if (options && options.pageClassName) {\n\t page.className = options.pageClassName;\n\t }\n\t pages.push(page);\n\t return page;\n\t }\n\n\t function fallsOnMargin(thing) {\n\t var box = thing.getBoundingClientRect();\n\t if (box.width === 0 || box.height === 0) {\n\t // I'd say an element with dimensions zero fits on current page.\n\t return 0;\n\t }\n\t var top = copy.getBoundingClientRect().top;\n\t var available = pageHeight - adjust;\n\t return (box.height > available) ? 3\n\t : (box.top - top > available) ? 1\n\t : (box.bottom - top > available) ? 2\n\t : 0;\n\t }\n\n\t function splitText(node, isFirst) {\n\t if (!/\\S/.test(node.data)) {\n\t return;\n\t }\n\n\t var len = node.data.length;\n\t var range = doc.createRange();\n\t range.selectNodeContents(node);\n\t var fall = fallsOnMargin(range);\n\t if (!fall) {\n\t return; // the whole text fits on current page\n\t }\n\n\t var nextnode = node;\n\t if (fall == 1) {\n\t // starts on next page, break before anyway.\n\t if (isFirst) {\n\t // avoid leaving an empty

,

  • , etc. on previous page.\n\t breakAtElement(node.parentNode);\n\t } else {\n\t breakAtElement(node);\n\t }\n\t }\n\t else {\n\t (function findEOP(min, pos, max) {\n\t range.setEnd(node, pos);\n\t if (min == pos || pos == max) {\n\t return pos;\n\t }\n\t if (fallsOnMargin(range)) {\n\t return findEOP(min, (min + pos) >> 1, pos);\n\t } else {\n\t return findEOP(pos, (pos + max) >> 1, max);\n\t }\n\t })(0, len >> 1, len);\n\n\t if (!/\\S/.test(range.toString()) && isFirst) {\n\t // avoid leaving an empty

    ,

  • , etc. on previous page.\n\t breakAtElement(node.parentNode);\n\t } else {\n\t // This is only needed for IE, but it feels cleaner to do it anyway. Without\n\t // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\n\t nextnode = node.splitText(range.endOffset);\n\n\t var page = makePage();\n\t range.setStartBefore(copy);\n\t page.appendChild(range.extractContents());\n\t copy.parentNode.insertBefore(page, copy);\n\t preventBulletOnListItem(nextnode.parentNode);\n\t }\n\t }\n\n\t splitText(nextnode);\n\t }\n\n\t function preventBulletOnListItem(el) {\n\t // set a hint on continued LI elements, to tell the\n\t // renderer not to draw the bullet again.\n\t // https://github.com/telerik/kendo-ui-core/issues/2732\n\t var li = closest(el, \"li\");\n\t if (li) {\n\t li.setAttribute(\"kendo-no-bullet\", \"1\");\n\t preventBulletOnListItem(li.parentNode);\n\t }\n\t }\n\t }\n\n\t return promise;\n\t}\n\n\t// This is needed for the Spreadsheet print functionality. Since\n\t// there we only need to draw text, this cuts through the ceremony\n\t// of drawDOM/renderElement and renders the text node directly.\n\tfunction drawText(element) {\n\t var group = new Group();\n\t nodeInfo._clipbox = false;\n\t nodeInfo._matrix = Matrix.unit();\n\t nodeInfo._stackingContext = {\n\t element: element,\n\t group: group\n\t };\n\t pushNodeInfo(element, getComputedStyle$1(element), group);\n\t if (element.firstChild.nodeType == 3 /* Text */) {\n\t // avoid the penalty of renderElement\n\t renderText(element, element.firstChild, group);\n\t } else {\n\t _renderElement(element, group);\n\t }\n\t popNodeInfo();\n\t return group;\n\t}\n\n\tvar parseBackgroundImage = (function(){\n\t var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n\t //var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\n\t var tok_percent = /^([-0-9.]+%)/;\n\t var tok_length = /^([-0-9.]+px)/;\n\t var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n\t var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n\t var tok_whitespace = /^(\\s+)/;\n\t var tok_popen = /^(\\()/;\n\t var tok_pclose = /^(\\))/;\n\t var tok_comma = /^(,)/;\n\t var tok_url = /^(url)\\(/;\n\t var tok_content = /^(.*?)\\)/;\n\n\t var cache1 = {}, cache2 = {};\n\n\t function parse(input) {\n\t var orig = input;\n\t if (hasOwnProperty(cache1, orig)) {\n\t return cache1[orig];\n\t }\n\t function skip_ws() {\n\t var m = tok_whitespace.exec(input);\n\t if (m) {\n\t input = input.substr(m[1].length);\n\t }\n\t }\n\t function read(token) {\n\t skip_ws();\n\t var m = token.exec(input);\n\t if (m) {\n\t input = input.substr(m[1].length);\n\t return m[1];\n\t }\n\t }\n\n\t function read_stop() {\n\t var color = kendo.parseColor(input, true);\n\t var length, percent;\n\t if (color) {\n\t var match =\n\t /^#[0-9a-f]+/i.exec(input) ||\n\t /^rgba?\\(.*?\\)/i.exec(input) ||\n\t /^..*?\\b/.exec(input); // maybe named color\n\t input = input.substr(match[0].length);\n\t color = color.toRGB();\n\t if (!(length = read(tok_length))) {\n\t percent = read(tok_percent);\n\t }\n\t return { color: color, length: length, percent: percent };\n\t }\n\t }\n\n\t function read_linear_gradient(propName) {\n\t var angle;\n\t var to1, to2;\n\t var stops = [];\n\t var reverse = false;\n\n\t if (read(tok_popen)) {\n\t // 1. [ || to , ]?\n\t angle = read(tok_angle);\n\t if (angle == \"0\") {\n\t angle = \"0deg\"; // Edge\n\t }\n\t if (angle) {\n\t angle = parseAngle(angle);\n\t read(tok_comma);\n\t }\n\t else {\n\t to1 = read(tok_keyword);\n\t if (to1 == \"to\") {\n\t to1 = read(tok_keyword);\n\t } else if (to1 && /^-/.test(propName)) {\n\t reverse = true;\n\t }\n\t to2 = read(tok_keyword);\n\t read(tok_comma);\n\t }\n\n\t if (/-moz-/.test(propName) && angle == null && to1 == null) {\n\t var x = read(tok_percent), y = read(tok_percent);\n\t reverse = true;\n\t if (x == \"0%\") {\n\t to1 = \"left\";\n\t } else if (x == \"100%\") {\n\t to1 = \"right\";\n\t }\n\t if (y == \"0%\") {\n\t to2 = \"top\";\n\t } else if (y == \"100%\") {\n\t to2 = \"bottom\";\n\t }\n\t read(tok_comma);\n\t }\n\n\t // 2. color stops\n\t while (input && !read(tok_pclose)) {\n\t var stop = read_stop();\n\t if (!stop) {\n\t break;\n\t }\n\t stops.push(stop);\n\t read(tok_comma);\n\t }\n\n\t return {\n\t type : \"linear\",\n\t angle : angle,\n\t to : to1 && to2 ? to1 + \" \" + to2 : to1 ? to1 : to2 ? to2 : null,\n\t stops : stops,\n\t reverse : reverse\n\t };\n\t }\n\t }\n\n\t function read_url() {\n\t if (read(tok_popen)) {\n\t var url = read(tok_content);\n\t url = url.replace(/^['\"]+|[\"']+$/g, \"\");\n\t read(tok_pclose);\n\t return { type: \"url\", url: url };\n\t }\n\t }\n\n\t var tok;\n\n\t if ((tok = read(tok_linear_gradient))) {\n\t tok = read_linear_gradient(tok);\n\t }\n\t else if ((tok = read(tok_url))) {\n\t tok = read_url();\n\t }\n\n\t return (cache1[orig] = tok || { type: \"none\" });\n\t }\n\n\t return function(input) {\n\t if (hasOwnProperty(cache2, input)) {\n\t return cache2[input];\n\t }\n\t return (cache2[input] = splitProperty(input).map(parse));\n\t };\n\t})();\n\n\tvar splitProperty = (function(){\n\t var cache = {};\n\t return function(input, separator) {\n\t if (!separator) {\n\t separator = /^\\s*,\\s*/;\n\t }\n\n\t var cacheKey = input + separator;\n\n\t if (hasOwnProperty(cache, cacheKey)) {\n\t return cache[cacheKey];\n\t }\n\n\t var ret = [];\n\t var last$$1 = 0, pos = 0;\n\t var in_paren = 0;\n\t var in_string = false;\n\t var m;\n\n\t function looking_at(rx) {\n\t return (m = rx.exec(input.substr(pos)));\n\t }\n\n\t function trim(str) {\n\t return str.replace(/^\\s+|\\s+$/g, \"\");\n\t }\n\n\t while (pos < input.length) {\n\t if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n\t in_paren++;\n\t pos++;\n\t }\n\t else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n\t in_paren--;\n\t pos++;\n\t }\n\t else if (!in_string && looking_at(/^[\\\"\\']/)) {\n\t in_string = m[0];\n\t pos++;\n\t }\n\t else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n\t pos += 2;\n\t }\n\t else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n\t pos += 2;\n\t }\n\t else if (in_string == \"'\" && looking_at(/^\\'/)) {\n\t in_string = false;\n\t pos++;\n\t }\n\t else if (in_string == '\"' && looking_at(/^\\\"/)) {\n\t in_string = false;\n\t pos++;\n\t }\n\t else if (looking_at(separator)) {\n\t if (!in_string && !in_paren && pos > last$$1) {\n\t ret.push(trim(input.substring(last$$1, pos)));\n\t last$$1 = pos + m[0].length;\n\t }\n\t pos += m[0].length;\n\t }\n\t else {\n\t pos++;\n\t }\n\t }\n\t if (last$$1 < pos) {\n\t ret.push(trim(input.substring(last$$1, pos)));\n\t }\n\t return (cache[cacheKey] = ret);\n\t };\n\t})();\n\n\tvar getFontURL = (function(cache){\n\t return function(el){\n\t // XXX: for IE we get here the whole cssText of the rule,\n\t // because the computedStyle.src is empty. Next time we need\n\t // to fix these regexps we better write a CSS parser. :-\\\n\t var url = cache[el];\n\t if (!url) {\n\t var m;\n\t if ((m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el))) {\n\t url = cache[el] = m[2];\n\t } else if ((m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el))) {\n\t url = cache[el] = m[2];\n\t }\n\t }\n\t return url;\n\t };\n\t})(Object.create ? Object.create(null) : {});\n\n\tvar getFontHeight = (function(cache){\n\t return function(font) {\n\t var height = cache[font];\n\t if (height == null) {\n\t height = cache[font] = kendoUtil.measureText(\"Mapq\", { font: font }).height;\n\t }\n\t return height;\n\t };\n\t})(Object.create ? Object.create(null) : {});\n\n\tfunction getFontFaces(doc) {\n\t if (doc == null) {\n\t doc = document;\n\t }\n\t var result = {};\n\t for (var i = 0; i < doc.styleSheets.length; ++i) {\n\t doStylesheet(doc.styleSheets[i]);\n\t }\n\t return result;\n\t function doStylesheet(ss) {\n\t if (ss) {\n\t var rules = null;\n\t try {\n\t rules = ss.cssRules;\n\t } catch (ex) {}\n\t if (rules) {\n\t addRules(ss, rules);\n\t }\n\t }\n\t }\n\t function findFonts(rule) {\n\t var src = getPropertyValue(rule.style, \"src\");\n\t if (src) {\n\t return splitProperty(src).reduce(function(a, el){\n\t var font = getFontURL(el);\n\t if (font) {\n\t a.push(font);\n\t }\n\t return a;\n\t }, []);\n\t } else {\n\t // Internet Explorer\n\t // XXX: this is gross. should work though for valid CSS.\n\t var font = getFontURL(rule.cssText);\n\t return font ? [ font ] : [];\n\t }\n\t }\n\t function addRules(styleSheet, rules) {\n\t for (var i = 0; i < rules.length; ++i) {\n\t var r = rules[i];\n\t switch (r.type) {\n\t case 3: // CSSImportRule\n\t doStylesheet(r.styleSheet);\n\t break;\n\t case 5: // CSSFontFaceRule\n\t var style = r.style;\n\t var family = splitProperty(getPropertyValue(style, \"font-family\"));\n\t var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, \"font-weight\"));\n\t var italic = \"italic\" == getPropertyValue(style, \"font-style\");\n\t var src = findFonts(r);\n\t if (src.length > 0) {\n\t addRule(styleSheet, family, bold, italic, src[0]);\n\t }\n\t }\n\t }\n\t }\n\t function addRule(styleSheet, names, bold, italic, url) {\n\t // We get full resolved absolute URLs in Chrome, but sadly\n\t // not in Firefox.\n\t if (!(/^data:/i.test(url))) {\n\t if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n\t url = String(styleSheet.href).replace(/[^\\/]*$/, \"\") + url;\n\t }\n\t }\n\t names.forEach(function(name){\n\t name = name.replace(/^(['\"]?)(.*?)\\1$/, \"$2\"); // it's quoted\n\t if (bold) {\n\t name += \"|bold\";\n\t }\n\t if (italic) {\n\t name += \"|italic\";\n\t }\n\t result[name] = url;\n\t });\n\t }\n\t}\n\n\tfunction hasOwnProperty(obj, key) {\n\t return Object.prototype.hasOwnProperty.call(obj, key);\n\t}\n\n\tfunction getCounter(name) {\n\t name = \"_counter_\" + name;\n\t return nodeInfo[name];\n\t}\n\n\tfunction getAllCounters(name) {\n\t var values = [], p = nodeInfo;\n\t name = \"_counter_\" + name;\n\t while (p) {\n\t if (hasOwnProperty(p, name)) {\n\t values.push(p[name]);\n\t }\n\t p = Object.getPrototypeOf(p);\n\t }\n\t return values.reverse();\n\t}\n\n\tfunction incCounter(name, inc) {\n\t var p = nodeInfo;\n\t name = \"_counter_\" + name;\n\t while (p && !hasOwnProperty(p, name)) {\n\t p = Object.getPrototypeOf(p);\n\t }\n\t if (!p) {\n\t p = nodeInfo._root;\n\t }\n\t p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n\t}\n\n\tfunction resetCounter(name, val) {\n\t name = \"_counter_\" + name;\n\t nodeInfo[name] = val == null ? 0 : val;\n\t}\n\n\tfunction doCounters(a, f, def) {\n\t for (var i = 0; i < a.length;) {\n\t var name = a[i++];\n\t var val = parseFloat(a[i]);\n\t if (isNaN(val)) {\n\t f(name, def);\n\t } else {\n\t f(name, val);\n\t ++i;\n\t }\n\t }\n\t}\n\n\tfunction updateCounters(style) {\n\t var counterReset = getPropertyValue(style, \"counter-reset\");\n\t if (counterReset) {\n\t doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n\t }\n\t var counterIncrement = getPropertyValue(style, \"counter-increment\");\n\t if (counterIncrement) {\n\t doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n\t }\n\t}\n\n\tfunction parseColor$1(str, css) {\n\t var color = kendo.parseColor(str, true);\n\t if (color) {\n\t color = color.toRGB();\n\t if (css) {\n\t color = color.toCssRgba();\n\t } else if (color.a === 0) {\n\t color = null;\n\t }\n\t }\n\t return color;\n\t}\n\n\tfunction whenImagesAreActuallyLoaded(elements, callback) {\n\t var pending = 0;\n\t elements.forEach(function(el){\n\t var images = el.querySelectorAll(\"img\");\n\t for (var i = 0; i < images.length; ++i) {\n\t var img = images[i];\n\t if (!img.complete) {\n\t pending++;\n\t img.onload = img.onerror = next;\n\t }\n\t }\n\t });\n\t if (!pending) {\n\t next();\n\t }\n\t function next() {\n\t if (--pending <= 0) {\n\t callback();\n\t }\n\t }\n\t}\n\n\tfunction cacheImages(elements, callback) {\n\t var urls = [];\n\t function add(url) {\n\t if (!IMAGE_CACHE[url]) {\n\t IMAGE_CACHE[url] = true;\n\t urls.push(url);\n\t }\n\t }\n\n\t elements.forEach(function dive(element){\n\t if (/^img$/i.test(element.tagName)) {\n\t add(element.src);\n\t }\n\t parseBackgroundImage(\n\t getPropertyValue(\n\t getComputedStyle$1(element), \"background-image\"\n\t )\n\t ).forEach(function(bg){\n\t if (bg.type == \"url\") {\n\t add(bg.url);\n\t }\n\t });\n\n\t if (element.children) {\n\t slice$1$1(element.children).forEach(dive);\n\t }\n\t });\n\n\t var count = urls.length;\n\t function next() {\n\t if (--count <= 0) {\n\t // Even though we cached them, they simply won't be available immediately in the newly\n\t // created DOM. Previously we'd allow a 10ms timeout, but that's arbitrary and clearly\n\t // not working in all cases (https://github.com/telerik/kendo/issues/5399), so this\n\t // function will wait for their .complete attribute.\n\t whenImagesAreActuallyLoaded(elements, callback);\n\t }\n\t }\n\t if (count === 0) {\n\t next();\n\t }\n\t urls.forEach(function(url){\n\t var img = IMAGE_CACHE[url] = new window.Image();\n\t if (!(/^data:/i.test(url))) {\n\t img.crossOrigin = \"Anonymous\";\n\t }\n\t img.src = url;\n\t if (img.complete) {\n\t next();\n\t } else {\n\t img.onload = next;\n\t img.onerror = function() {\n\t IMAGE_CACHE[url] = null;\n\t next();\n\t };\n\t }\n\t });\n\t}\n\n\tfunction alphaNumeral(n) {\n\t var result = \"\";\n\t do {\n\t var r = n % 26;\n\t result = String.fromCharCode(97 + r) + result;\n\t n = Math.floor(n / 26);\n\t } while (n > 0);\n\t return result;\n\t}\n\n\tfunction pushNodeInfo(element, style, group) {\n\t nodeInfo = Object.create(nodeInfo);\n\t nodeInfo[element.tagName.toLowerCase()] = {\n\t element: element,\n\t style: style\n\t };\n\t var decoration = getPropertyValue(style, \"text-decoration\");\n\t if (decoration && decoration != \"none\") {\n\t var color = getPropertyValue(style, \"color\");\n\t decoration.split(/\\s+/g).forEach(function(name){\n\t if (!nodeInfo[name]) {\n\t nodeInfo[name] = color;\n\t }\n\t });\n\t }\n\n\t if (createsStackingContext(style)) {\n\t nodeInfo._stackingContext = {\n\t element: element,\n\t group: group\n\t };\n\t }\n\t}\n\n\tfunction popNodeInfo() {\n\t nodeInfo = Object.getPrototypeOf(nodeInfo);\n\t}\n\n\tfunction updateClipbox(path) {\n\t if (nodeInfo._clipbox != null) {\n\t var box = path.bbox(nodeInfo._matrix);\n\t if (nodeInfo._clipbox) {\n\t nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n\t } else {\n\t nodeInfo._clipbox = box;\n\t }\n\t }\n\t}\n\n\tfunction emptyClipbox() {\n\t var cb = nodeInfo._clipbox;\n\t if (cb == null) {\n\t return true;\n\t }\n\t if (cb) {\n\t return cb.width() === 0 || cb.height() === 0;\n\t }\n\t}\n\n\tfunction createsStackingContext(style) {\n\t function prop(name) { return getPropertyValue(style, name); }\n\t if (prop(\"transform\") != \"none\" ||\n\t prop(\"position\") != \"static\" ||\n\t prop(\"z-index\") != \"auto\" ||\n\t prop(\"opacity\") < 1) {\n\t return true;\n\t }\n\t}\n\n\tfunction getComputedStyle$1(element, pseudoElt) {\n\t return window.getComputedStyle(element, pseudoElt || null);\n\t}\n\n\tfunction getPropertyValue(style, prop, defa) {\n\t var val = style.getPropertyValue(prop);\n\t if (val == null || val === \"\") {\n\t if (browser.webkit) {\n\t val = style.getPropertyValue(\"-webkit-\" + prop );\n\t } else if (browser.mozilla) {\n\t val = style.getPropertyValue(\"-moz-\" + prop );\n\t } else if (browser.opera) {\n\t val = style.getPropertyValue(\"-o-\" + prop);\n\t } else if (microsoft) {\n\t val = style.getPropertyValue(\"-ms-\" + prop);\n\t }\n\t }\n\t if (arguments.length > 2 && (val == null || val === \"\")) {\n\t return defa;\n\t } else {\n\t return val;\n\t }\n\t}\n\n\tfunction pleaseSetPropertyValue(style, prop, value, important) {\n\t style.setProperty(prop, value, important);\n\t if (browser.webkit) {\n\t style.setProperty(\"-webkit-\" + prop, value, important);\n\t } else if (browser.mozilla) {\n\t style.setProperty(\"-moz-\" + prop, value, important);\n\t } else if (browser.opera) {\n\t style.setProperty(\"-o-\" + prop, value, important);\n\t } else if (microsoft) {\n\t style.setProperty(\"-ms-\" + prop, value, important);\n\t prop = \"ms\" + prop.replace(/(^|-)([a-z])/g, function(s, p1, p2){\n\t return p1 + p2.toUpperCase();\n\t });\n\t style[prop] = value;\n\t }\n\t}\n\n\tfunction getBorder(style, side) {\n\t side = \"border-\" + side;\n\t return {\n\t width: parseFloat(getPropertyValue(style, side + \"-width\")),\n\t style: getPropertyValue(style, side + \"-style\"),\n\t color: parseColor$1(getPropertyValue(style, side + \"-color\"), true)\n\t };\n\t}\n\n\tfunction saveStyle(element, func) {\n\t var prev = element.style.cssText;\n\t var result = func();\n\t element.style.cssText = prev;\n\t return result;\n\t}\n\n\tfunction getBorderRadius(style, side) {\n\t var r = getPropertyValue(style, \"border-\" + side + \"-radius\").split(/\\s+/g).map(parseFloat);\n\t if (r.length == 1) {\n\t r.push(r[0]);\n\t }\n\t return sanitizeRadius({ x: r[0], y: r[1] });\n\t}\n\n\tfunction getContentBox(element) {\n\t var box = element.getBoundingClientRect();\n\t box = innerBox(box, \"border-*-width\", element);\n\t box = innerBox(box, \"padding-*\", element);\n\t return box;\n\t}\n\n\tfunction innerBox(box, prop, element) {\n\t var style, wt, wr, wb, wl;\n\t if (typeof prop == \"string\") {\n\t style = getComputedStyle$1(element);\n\t wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\n\t wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\n\t wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\n\t wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\n\t }\n\t else if (typeof prop == \"number\") {\n\t wt = wr = wb = wl = prop;\n\t }\n\t return {\n\t top : box.top + wt,\n\t right : box.right - wr,\n\t bottom : box.bottom - wb,\n\t left : box.left + wl,\n\t width : box.right - box.left - wr - wl,\n\t height : box.bottom - box.top - wb - wt\n\t };\n\t}\n\n\tfunction getTransform(style) {\n\t var transform$$1 = getPropertyValue(style, \"transform\");\n\t if (transform$$1 == \"none\") {\n\t return null;\n\t }\n\t var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n\t if (matrix) {\n\t var origin = getPropertyValue(style, \"transform-origin\");\n\t matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n\t origin = origin.split(/\\s+/g).map(parseFloat);\n\t return {\n\t matrix: matrix,\n\t origin: origin\n\t };\n\t }\n\t}\n\n\tfunction radiansToDegrees(radians) {\n\t return ((180 * radians) / Math.PI) % 360;\n\t}\n\n\tfunction parseAngle(angle) {\n\t var num = parseFloat(angle);\n\t if (/grad$/.test(angle)) {\n\t return Math.PI * num / 200;\n\t }\n\t else if (/rad$/.test(angle)) {\n\t return num;\n\t }\n\t else if (/turn$/.test(angle)) {\n\t return Math.PI * num * 2;\n\t }\n\t else if (/deg$/.test(angle)) {\n\t return Math.PI * num / 180;\n\t }\n\t}\n\n\tfunction setTransform$1(shape, m) {\n\t m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n\t shape.transform(m);\n\t return m;\n\t}\n\n\tfunction setClipping(shape, clipPath) {\n\t shape.clip(clipPath);\n\t}\n\n\tfunction addArcToPath(path, x, y, options) {\n\t var points = new Arc$2([ x, y ], options).curvePoints(), i = 1;\n\t while (i < points.length) {\n\t path.curveTo(points[i++], points[i++], points[i++]);\n\t }\n\t}\n\n\tfunction sanitizeRadius(r) {\n\t if (r.x <= 0 || r.y <= 0) {\n\t r.x = r.y = 0;\n\t }\n\t return r;\n\t}\n\n\tfunction adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n\t // adjust border radiuses such that the sum of adjacent\n\t // radiuses is not bigger than the length of the side.\n\t // seems the correct algorithm is variant (3) from here:\n\t // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\n\t var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n\t var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n\t var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n\t var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n\n\t var f = Math.min(\n\t box.width / (tl_x + tr_x),\n\t box.height / (tr_y + br_y),\n\t box.width / (br_x + bl_x),\n\t box.height / (bl_y + tl_y)\n\t );\n\n\t if (f < 1) {\n\t tl_x *= f; tl_y *= f;\n\t tr_x *= f; tr_y *= f;\n\t br_x *= f; br_y *= f;\n\t bl_x *= f; bl_y *= f;\n\t }\n\n\t return {\n\t tl: { x: tl_x, y: tl_y },\n\t tr: { x: tr_x, y: tr_y },\n\t br: { x: br_x, y: br_y },\n\t bl: { x: bl_x, y: bl_y }\n\t };\n\t}\n\n\tfunction elementRoundBox(element, box, type) {\n\t var style = getComputedStyle$1(element);\n\n\t var rTL = getBorderRadius(style, \"top-left\");\n\t var rTR = getBorderRadius(style, \"top-right\");\n\t var rBL = getBorderRadius(style, \"bottom-left\");\n\t var rBR = getBorderRadius(style, \"bottom-right\");\n\n\t if (type == \"padding\" || type == \"content\") {\n\t var bt = getBorder(style, \"top\");\n\t var br = getBorder(style, \"right\");\n\t var bb = getBorder(style, \"bottom\");\n\t var bl = getBorder(style, \"left\");\n\t rTL.x -= bl.width; rTL.y -= bt.width;\n\t rTR.x -= br.width; rTR.y -= bt.width;\n\t rBR.x -= br.width; rBR.y -= bb.width;\n\t rBL.x -= bl.width; rBL.y -= bb.width;\n\t if (type == \"content\") {\n\t var pt = parseFloat(getPropertyValue(style, \"padding-top\"));\n\t var pr = parseFloat(getPropertyValue(style, \"padding-right\"));\n\t var pb = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n\t var pl = parseFloat(getPropertyValue(style, \"padding-left\"));\n\t rTL.x -= pl; rTL.y -= pt;\n\t rTR.x -= pr; rTR.y -= pt;\n\t rBR.x -= pr; rBR.y -= pb;\n\t rBL.x -= pl; rBL.y -= pb;\n\t }\n\t }\n\n\t if (typeof type == \"number\") {\n\t rTL.x -= type; rTL.y -= type;\n\t rTR.x -= type; rTR.y -= type;\n\t rBR.x -= type; rBR.y -= type;\n\t rBL.x -= type; rBL.y -= type;\n\t }\n\n\t return roundBox(box, rTL, rTR, rBR, rBL);\n\t}\n\n\t// Create a drawing.Path for a rounded rectangle. Receives the\n\t// bounding box and the border-radiuses in CSS order (top-left,\n\t// top-right, bottom-right, bottom-left). The radiuses must be\n\t// objects containing x (horiz. radius) and y (vertical radius).\n\tfunction roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n\t var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n\t var rTL = tmp.tl;\n\t var rTR = tmp.tr;\n\t var rBR = tmp.br;\n\t var rBL = tmp.bl;\n\t var path = new Path({ fill: null, stroke: null });\n\t path.moveTo(box.left, box.top + rTL.y);\n\t if (rTL.x) {\n\t addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n\t startAngle: -180,\n\t endAngle: -90,\n\t radiusX: rTL.x,\n\t radiusY: rTL.y\n\t });\n\t }\n\t path.lineTo(box.right - rTR.x, box.top);\n\t if (rTR.x) {\n\t addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n\t startAngle: -90,\n\t endAngle: 0,\n\t radiusX: rTR.x,\n\t radiusY: rTR.y\n\t });\n\t }\n\t path.lineTo(box.right, box.bottom - rBR.y);\n\t if (rBR.x) {\n\t addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n\t startAngle: 0,\n\t endAngle: 90,\n\t radiusX: rBR.x,\n\t radiusY: rBR.y\n\t });\n\t }\n\t path.lineTo(box.left + rBL.x, box.bottom);\n\t if (rBL.x) {\n\t addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n\t startAngle: 90,\n\t endAngle: 180,\n\t radiusX: rBL.x,\n\t radiusY: rBL.y\n\t });\n\t }\n\t return path.close();\n\t}\n\n\tfunction formatCounter(val, style) {\n\t var str = String(parseFloat(val));\n\t switch (style) {\n\t case \"decimal-leading-zero\":\n\t if (str.length < 2) {\n\t str = \"0\" + str;\n\t }\n\t return str;\n\t case \"lower-roman\":\n\t return arabicToRoman(val).toLowerCase();\n\t case \"upper-roman\":\n\t return arabicToRoman(val).toUpperCase();\n\t case \"lower-latin\":\n\t case \"lower-alpha\":\n\t return alphaNumeral(val - 1);\n\t case \"upper-latin\":\n\t case \"upper-alpha\":\n\t return alphaNumeral(val - 1).toUpperCase();\n\t default:\n\t return str;\n\t }\n\t}\n\n\tfunction evalPseudoElementContent(element, content) {\n\t function displayCounter(name, style, separator) {\n\t if (!separator) {\n\t return formatCounter(getCounter(name) || 0, style);\n\t }\n\t separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, \"$2\");\n\t return getAllCounters(name).map(function(val){\n\t return formatCounter(val, style);\n\t }).join(separator);\n\t }\n\t var a = splitProperty(content, /^\\s+/);\n\t var result = [], m;\n\t a.forEach(function(el){\n\t var tmp;\n\t if ((m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el))) {\n\t result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function(s, p){\n\t return String.fromCharCode(parseInt(p, 16));\n\t }));\n\t }\n\t else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n\t tmp = splitProperty(m[1]);\n\t result.push(displayCounter(tmp[0], tmp[1]));\n\t }\n\t else if ((m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el))) {\n\t tmp = splitProperty(m[1]);\n\t result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n\t }\n\t else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n\t result.push(element.getAttribute(m[1]) || \"\");\n\t }\n\t else {\n\t result.push(el);\n\t }\n\t });\n\t return result.join(\"\");\n\t}\n\n\tfunction getCssText(style) {\n\t if (style.cssText) {\n\t return style.cssText;\n\t }\n\t // Status: NEW. Report year: 2002. Current year: 2014.\n\t // Nice played, Mozillians.\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\n\t var result = [];\n\t for (var i = 0; i < style.length; ++i) {\n\t result.push(style[i] + \": \" + getPropertyValue(style, style[i]));\n\t }\n\t return result.join(\";\\n\");\n\t}\n\n\tfunction _renderWithPseudoElements(element, group) {\n\t if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n\t _renderElement(element, group);\n\t return;\n\t }\n\t var fake = [];\n\t function pseudo(kind, place) {\n\t var style = getComputedStyle$1(element, kind), content = style.content;\n\t updateCounters(style);\n\t if (content && content != \"normal\" && content != \"none\" && style.width != \"0px\") {\n\t var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n\t psel.style.cssText = getCssText(style);\n\t psel.textContent = evalPseudoElementContent(element, content);\n\t element.insertBefore(psel, place);\n\t fake.push(psel);\n\t }\n\t }\n\t pseudo(\":before\", element.firstChild);\n\t pseudo(\":after\", null);\n\t if (fake.length > 0) {\n\t var saveClass = element.className;\n\t element.className += \" kendo-pdf-hide-pseudo-elements\";\n\t _renderElement(element, group);\n\t element.className = saveClass;\n\t fake.forEach(function(el){ element.removeChild(el); });\n\t } else {\n\t _renderElement(element, group);\n\t }\n\t}\n\n\tfunction _renderElement(element, group) {\n\t var style = getComputedStyle$1(element);\n\n\t var top = getBorder(style, \"top\");\n\t var right = getBorder(style, \"right\");\n\t var bottom = getBorder(style, \"bottom\");\n\t var left = getBorder(style, \"left\");\n\n\t var rTL0 = getBorderRadius(style, \"top-left\");\n\t var rTR0 = getBorderRadius(style, \"top-right\");\n\t var rBL0 = getBorderRadius(style, \"bottom-left\");\n\t var rBR0 = getBorderRadius(style, \"bottom-right\");\n\n\t var dir = getPropertyValue(style, \"direction\");\n\n\t var backgroundColor = getPropertyValue(style, \"background-color\");\n\t backgroundColor = parseColor$1(backgroundColor);\n\n\t var backgroundImage = parseBackgroundImage( getPropertyValue(style, \"background-image\") );\n\t var backgroundRepeat = splitProperty( getPropertyValue(style, \"background-repeat\") );\n\t var backgroundPosition = splitProperty( getPropertyValue(style, \"background-position\") );\n\t var backgroundOrigin = splitProperty( getPropertyValue(style, \"background-origin\") );\n\t var backgroundSize = splitProperty( getPropertyValue(style, \"background-size\") );\n\n\t // IE shrinks the text with text-overflow: ellipsis,\n\t // apparently because the returned bounding box for the range\n\t // is limited to the visible area minus space for the dots,\n\t // instead of being the full width of the text.\n\t //\n\t // https://github.com/telerik/kendo/issues/5232\n\t // https://github.com/telerik/kendo-ui-core/issues/1868\n\t //\n\t // We have to test it here rather than in renderText because\n\t // text-overflow: ellipsis could be set on a parent element (not\n\t // necessarily the one containing the text); in this case,\n\t // getComputedStyle(elementWithTheText) will return \"clip\", not\n\t // \"ellipsis\" (which is probably a bug, but oh well...)\n\t var textOverflow, saveTextOverflow;\n\t if (microsoft) {\n\t textOverflow = style.textOverflow; // computed style\n\t if (textOverflow == \"ellipsis\") {\n\t saveTextOverflow = element.style.textOverflow; // own style.\n\t element.style.textOverflow = \"clip\";\n\t }\n\t }\n\n\t if (browser.msie && browser.version < 10) {\n\t // IE9 hacks. getPropertyValue won't return the correct\n\t // value. Sucks that we have to do it here, I'd prefer to\n\t // move it in getPropertyValue, but we don't have the\n\t // element.\n\t backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n\t }\n\n\t var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n\t // CSS \"clip\" property - if present, replace the group with a\n\t // new one which is clipped. This must happen before drawing\n\t // the borders and background.\n\t (function(){\n\t var clip = getPropertyValue(style, \"clip\");\n\t var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n\t if (m) {\n\t var a = m[1].split(/[ ,]+/g);\n\t var top = a[0] == \"auto\" ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n\t var right = a[1] == \"auto\" ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n\t var bottom = a[2] == \"auto\" ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n\t var left = a[3] == \"auto\" ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n\t var tmp = new Group();\n\t var clipPath = new Path()\n\t .moveTo(left, top)\n\t .lineTo(right, top)\n\t .lineTo(right, bottom)\n\t .lineTo(left, bottom)\n\t .close();\n\t setClipping(tmp, clipPath);\n\t group.append(tmp);\n\t group = tmp;\n\t updateClipbox(clipPath);\n\t }\n\t })();\n\n\t var boxes, i, cells;\n\t var display = getPropertyValue(style, \"display\");\n\n\t if (display == \"table-row\") {\n\t // because of rowspan/colspan, we shouldn't draw background of table row elements on the\n\t // box given by its getBoundingClientRect, because if we do we risk overwritting a\n\t // previously rendered cell. https://github.com/telerik/kendo/issues/4881\n\t boxes = [];\n\t for (i = 0, cells = element.children; i < cells.length; ++i) {\n\t boxes.push(cells[i].getBoundingClientRect());\n\t }\n\t } else {\n\t boxes = element.getClientRects();\n\t if (boxes.length == 1) {\n\t // Workaround the missing borders in Chrome! getClientRects() boxes contains values\n\t // rounded to integer. getBoundingClientRect() appears to work fine. We still need\n\t // getClientRects() to support cases where there are more boxes (continued inline\n\t // elements that might have border/background).\n\t boxes = [ element.getBoundingClientRect() ];\n\t }\n\t }\n\n\t // This function workarounds another Chrome bug, where boxes returned for a table with\n\t // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\n\t // such case anyway, but with this is better than without it.\n\t boxes = adjustBoxes(boxes);\n\n\t for (i = 0; i < boxes.length; ++i) {\n\t drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n\t }\n\n\t // Render links as separate groups. We can't use boxes returned by element's getClientRects\n\t // because if display type is \"inline\" (default for ), boxes will not include the height of\n\t // images inside. https://github.com/telerik/kendo-ui-core/issues/3359\n\t if (element.tagName == \"A\" && element.href && !/^#?$/.test(element.getAttribute(\"href\"))) {\n\t if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n\t var r = document.createRange();\n\t r.selectNodeContents(element);\n\t slice$1$1(r.getClientRects()).forEach(function(box){\n\t var g = new Group();\n\t g._pdfLink = {\n\t url : element.href,\n\t top : box.top,\n\t right : box.right,\n\t bottom : box.bottom,\n\t left : box.left\n\t };\n\t group.append(g);\n\t });\n\t }\n\t }\n\n\t if (boxes.length > 0 && display == \"list-item\" && !element.getAttribute(\"kendo-no-bullet\")) {\n\t drawBullet(boxes[0]);\n\t }\n\n\t // overflow: hidden/auto - if present, replace the group with\n\t // a new one clipped by the inner box.\n\t (function(){\n\t function clipit() {\n\t var clipPath = elementRoundBox(element, innerbox, \"padding\");\n\t var tmp = new Group();\n\t setClipping(tmp, clipPath);\n\t group.append(tmp);\n\t group = tmp;\n\t updateClipbox(clipPath);\n\t }\n\t if (isFormField(element)) {\n\t clipit();\n\t } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow\"))) {\n\t clipit();\n\t } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-x\"))) {\n\t clipit();\n\t } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-y\"))) {\n\t clipit();\n\t }\n\t })();\n\n\t if (!maybeRenderWidget(element, group)) {\n\t renderContents(element, group);\n\t }\n\n\t if (microsoft && textOverflow == \"ellipsis\") {\n\t element.style.textOverflow = saveTextOverflow;\n\t }\n\n\t return group; // only utility functions after this line.\n\n\t function adjustBoxes(boxes) {\n\t if (/^td$/i.test(element.tagName)) {\n\t var table = nodeInfo.table;\n\t if (table && getPropertyValue(table.style, \"border-collapse\") == \"collapse\") {\n\t var tableBorderLeft = getBorder(table.style, \"left\").width;\n\t var tableBorderTop = getBorder(table.style, \"top\").width;\n\t // check if we need to adjust\n\t if (tableBorderLeft === 0 && tableBorderTop === 0) {\n\t return boxes; // nope\n\t }\n\t var tableBox = table.element.getBoundingClientRect();\n\t var firstCell = table.element.rows[0].cells[0];\n\t var firstCellBox = firstCell.getBoundingClientRect();\n\t if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n\t return slice$1$1(boxes).map(function(box){\n\t return {\n\t left : box.left + tableBorderLeft,\n\t top : box.top + tableBorderTop,\n\t right : box.right + tableBorderLeft,\n\t bottom : box.bottom + tableBorderTop,\n\t height : box.height,\n\t width : box.width\n\t };\n\t });\n\t }\n\t }\n\t }\n\t return boxes;\n\t }\n\n\t // this function will be called to draw each border. it\n\t // draws starting at origin and the resulted path must be\n\t // translated/rotated to be placed in the proper position.\n\t //\n\t // arguments are named as if it draws the top border:\n\t //\n\t // - `len` the length of the edge\n\t // - `Wtop` the width of the edge (i.e. border-top-width)\n\t // - `Wleft` the width of the left edge (border-left-width)\n\t // - `Wright` the width of the right edge\n\t // - `rl` and `rl` -- the border radius on the left and right\n\t // (objects containing x and y, for horiz/vertical radius)\n\t // - `transform` -- transformation to apply\n\t //\n\t function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n\t if (Wtop <= 0) {\n\t return;\n\t }\n\n\t var path, edge = new Group();\n\t setTransform$1(edge, transform$$1);\n\t group.append(edge);\n\n\t sanitizeRadius(rl);\n\t sanitizeRadius(rr);\n\n\t // draw main border. this is the area without the rounded corners\n\t path = new Path({\n\t fill: { color: color },\n\t stroke: null\n\t });\n\t edge.append(path);\n\t path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0)\n\t .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n\t .lineTo(len - Math.max(rr.x, Wright), Wtop)\n\t .lineTo(Math.max(rl.x, Wleft), Wtop)\n\t .close();\n\n\t if (rl.x) {\n\t drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n\t }\n\n\t if (rr.x) {\n\t drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n\t }\n\n\t // draws one round corner, starting at origin (needs to be\n\t // translated/rotated to be placed properly).\n\t function drawRoundCorner(Wright, r, transform$$1) {\n\t var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n\t // not sanitizing this one, because negative values\n\t // are useful to fill the box correctly.\n\t var ri = {\n\t x: r.x - Wright,\n\t y: r.y - Wtop\n\t };\n\n\t var path = new Path({\n\t fill: { color: color },\n\t stroke: null\n\t }).moveTo(0, 0);\n\n\t setTransform$1(path, transform$$1);\n\n\t addArcToPath(path, 0, r.y, {\n\t startAngle: -90,\n\t endAngle: -radiansToDegrees(angle),\n\t radiusX: r.x,\n\t radiusY: r.y\n\t });\n\n\t if (ri.x > 0 && ri.y > 0) {\n\t path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n\t addArcToPath(path, 0, r.y, {\n\t startAngle: -radiansToDegrees(angle),\n\t endAngle: -90,\n\t radiusX: ri.x,\n\t radiusY: ri.y,\n\t anticlockwise: true\n\t });\n\t }\n\t else if (ri.x > 0) {\n\t path.lineTo(ri.x, Wtop)\n\t .lineTo(0, Wtop);\n\t }\n\t else {\n\t path.lineTo(ri.x, Wtop)\n\t .lineTo(ri.x, 0);\n\t }\n\n\t edge.append(path.close());\n\t }\n\t }\n\n\t function drawBackground(box) {\n\t var background = new Group();\n\t setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n\t group.append(background);\n\n\t if (backgroundColor) {\n\t var path = new Path({\n\t fill: { color: backgroundColor.toCssRgba() },\n\t stroke: null\n\t });\n\t path.moveTo(box.left, box.top)\n\t .lineTo(box.right, box.top)\n\t .lineTo(box.right, box.bottom)\n\t .lineTo(box.left, box.bottom)\n\t .close();\n\t background.append(path);\n\t }\n\n\t for (var i = backgroundImage.length; --i >= 0;) {\n\t drawOneBackground(\n\t background, box,\n\t backgroundImage[i],\n\t backgroundRepeat[i % backgroundRepeat.length],\n\t backgroundPosition[i % backgroundPosition.length],\n\t backgroundOrigin[i % backgroundOrigin.length],\n\t backgroundSize[i % backgroundSize.length]\n\t );\n\t }\n\t }\n\n\t function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n\t if (!background || (background == \"none\")) {\n\t return;\n\t }\n\n\t if (background.type == \"url\") {\n\t var img = IMAGE_CACHE[background.url];\n\t if (img && img.width > 0 && img.height > 0) {\n\t drawBackgroundImage(group, box, img.width, img.height, function(group, rect){\n\t group.append(new Image$1(background.url, rect));\n\t });\n\t }\n\t } else if (background.type == \"linear\") {\n\t drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n\t } else {\n\t return;\n\t }\n\n\t function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n\t var aspect_ratio = img_width / img_height, f;\n\n\t // for background-origin: border-box the box is already appropriate\n\t var orgBox = box;\n\t if (backgroundOrigin == \"content-box\") {\n\t orgBox = innerBox(orgBox, \"border-*-width\", element);\n\t orgBox = innerBox(orgBox, \"padding-*\", element);\n\t } else if (backgroundOrigin == \"padding-box\") {\n\t orgBox = innerBox(orgBox, \"border-*-width\", element);\n\t }\n\n\t if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n\t if (backgroundSize == \"contain\") {\n\t f = Math.min(orgBox.width / img_width,\n\t orgBox.height / img_height);\n\t img_width *= f;\n\t img_height *= f;\n\t }\n\t else if (backgroundSize == \"cover\") {\n\t f = Math.max(orgBox.width / img_width,\n\t orgBox.height / img_height);\n\t img_width *= f;\n\t img_height *= f;\n\t }\n\t else {\n\t var size = backgroundSize.split(/\\s+/g);\n\t // compute width\n\t if (/%$/.test(size[0])) {\n\t img_width = orgBox.width * parseFloat(size[0]) / 100;\n\t } else {\n\t img_width = parseFloat(size[0]);\n\t }\n\t // compute height\n\t if (size.length == 1 || size[1] == \"auto\") {\n\t img_height = img_width / aspect_ratio;\n\t } else if (/%$/.test(size[1])) {\n\t img_height = orgBox.height * parseFloat(size[1]) / 100;\n\t } else {\n\t img_height = parseFloat(size[1]);\n\t }\n\t }\n\t }\n\n\t var pos = String(backgroundPosition);\n\n\t // IE sometimes reports single-word positions\n\t // https://github.com/telerik/kendo-ui-core/issues/2786\n\t //\n\t // it seems to switch to percentages when the horizontal\n\t // position is not \"center\", therefore we don't handle\n\t // multi-word cases here. All other browsers return\n\t // percentages or pixels instead of keywords. At least\n\t // for now...\n\t switch (pos) {\n\t case \"bottom\" : pos = \"50% 100%\"; break;\n\t case \"top\" : pos = \"50% 0\"; break;\n\t case \"left\" : pos = \"0 50%\"; break;\n\t case \"right\" : pos = \"100% 50%\"; break;\n\t case \"center\" : pos = \"50% 50%\"; break;\n\t }\n\n\t pos = pos.split(/\\s+/);\n\t if (pos.length == 1) {\n\t pos[1] = \"50%\";\n\t }\n\n\t if (/%$/.test(pos[0])) {\n\t pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n\t } else {\n\t pos[0] = parseFloat(pos[0]);\n\t }\n\t if (/%$/.test(pos[1])) {\n\t pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n\t } else {\n\t pos[1] = parseFloat(pos[1]);\n\t }\n\n\t var rect = new Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n\t // XXX: background-repeat could be implemented more\n\t // efficiently as a fill pattern (at least for PDF\n\t // output, probably SVG too).\n\n\t function rewX() {\n\t while (rect.origin.x > box.left) {\n\t rect.origin.x -= img_width;\n\t }\n\t }\n\n\t function rewY() {\n\t while (rect.origin.y > box.top) {\n\t rect.origin.y -= img_height;\n\t }\n\t }\n\n\t function repeatX() {\n\t while (rect.origin.x < box.right) {\n\t renderBG(group, rect.clone());\n\t rect.origin.x += img_width;\n\t }\n\t }\n\n\t if (backgroundRepeat == \"no-repeat\") {\n\t renderBG(group, rect);\n\t }\n\t else if (backgroundRepeat == \"repeat-x\") {\n\t rewX();\n\t repeatX();\n\t }\n\t else if (backgroundRepeat == \"repeat-y\") {\n\t rewY();\n\t while (rect.origin.y < box.bottom) {\n\t renderBG(group, rect.clone());\n\t rect.origin.y += img_height;\n\t }\n\t }\n\t else if (backgroundRepeat == \"repeat\") {\n\t rewX();\n\t rewY();\n\t var origin = rect.origin.clone();\n\t while (rect.origin.y < box.bottom) {\n\t rect.origin.x = origin.x;\n\t repeatX();\n\t rect.origin.y += img_height;\n\t }\n\t }\n\t }\n\t }\n\n\t function drawBullet() {\n\t var listStyleType = getPropertyValue(style, \"list-style-type\");\n\t if (listStyleType == \"none\") {\n\t return;\n\t }\n\t var listStylePosition = getPropertyValue(style, \"list-style-position\");\n\n\t function _drawBullet(f) {\n\t saveStyle(element, function(){\n\t element.style.position = \"relative\";\n\t var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n\t bullet.style.position = \"absolute\";\n\t bullet.style.boxSizing = \"border-box\";\n\t if (listStylePosition == \"outside\") {\n\t bullet.style.width = \"6em\";\n\t bullet.style.left = \"-6.8em\";\n\t bullet.style.textAlign = \"right\";\n\t } else {\n\t bullet.style.left = \"0px\";\n\t }\n\t f(bullet);\n\t element.insertBefore(bullet, element.firstChild);\n\t renderElement(bullet, group);\n\t element.removeChild(bullet);\n\t });\n\t }\n\n\t function elementIndex(f) {\n\t var a = element.parentNode.children;\n\t var k = element.getAttribute(\"kendo-split-index\");\n\t if (k != null) {\n\t return f(k|0, a.length);\n\t }\n\t for (var i = 0; i < a.length; ++i) {\n\t if (a[i] === element) {\n\t return f(i, a.length);\n\t }\n\t }\n\t }\n\n\t switch (listStyleType) {\n\t case \"circle\":\n\t case \"disc\":\n\t case \"square\":\n\t _drawBullet(function(bullet){\n\t // XXX: the science behind these values is called \"trial and error\".\n\t bullet.style.fontSize = \"60%\";\n\t bullet.style.lineHeight = \"200%\";\n\t bullet.style.paddingRight = \"0.5em\";\n\t bullet.style.fontFamily = \"DejaVu Serif\";\n\t bullet.innerHTML = {\n\t \"disc\" : \"\\u25cf\",\n\t \"circle\" : \"\\u25ef\",\n\t \"square\" : \"\\u25a0\"\n\t }[listStyleType];\n\t });\n\t break;\n\n\t case \"decimal\":\n\t case \"decimal-leading-zero\":\n\t _drawBullet(function(bullet){\n\t elementIndex(function(idx){\n\t ++idx;\n\t if (listStyleType == \"decimal-leading-zero\" && idx < 10) {\n\t idx = \"0\" + idx;\n\t }\n\t bullet.innerHTML = idx + \".\";\n\t });\n\t });\n\t break;\n\n\t case \"lower-roman\":\n\t case \"upper-roman\":\n\t _drawBullet(function(bullet){\n\t elementIndex(function(idx){\n\t idx = arabicToRoman(idx + 1);\n\t if (listStyleType == \"upper-roman\") {\n\t idx = idx.toUpperCase();\n\t }\n\t bullet.innerHTML = idx + \".\";\n\t });\n\t });\n\t break;\n\n\t case \"lower-latin\":\n\t case \"lower-alpha\":\n\t case \"upper-latin\":\n\t case \"upper-alpha\":\n\t _drawBullet(function(bullet){\n\t elementIndex(function(idx){\n\t idx = alphaNumeral(idx);\n\t if (/^upper/i.test(listStyleType)) {\n\t idx = idx.toUpperCase();\n\t }\n\t bullet.innerHTML = idx + \".\";\n\t });\n\t });\n\t break;\n\t }\n\t }\n\n\t // draws a single border box\n\t function drawOneBox(box, isFirst, isLast) {\n\t if (box.width === 0 || box.height === 0) {\n\t return;\n\t }\n\n\t drawBackground(box);\n\n\t var shouldDrawLeft = (left.width > 0 && ((isFirst && dir == \"ltr\") || (isLast && dir == \"rtl\")));\n\t var shouldDrawRight = (right.width > 0 && ((isLast && dir == \"ltr\") || (isFirst && dir == \"rtl\")));\n\n\t // The most general case is that the 4 borders have different widths and border\n\t // radiuses. The way that is handled is by drawing 3 Paths for each border: the\n\t // straight line, and two round corners which represent half of the entire rounded\n\t // corner. To simplify code those shapes are drawed at origin (by the drawEdge\n\t // function), then translated/rotated into the right position.\n\t //\n\t // However, this leads to poor results due to rounding in the simpler cases where\n\t // borders are straight lines. Therefore we handle a few such cases separately with\n\t // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\n\t // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n\t // web dev is still a ghetto.)\n\n\t // first, just in case there is no border...\n\t if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n\t return;\n\t }\n\n\t // START paint borders\n\t // if all borders have equal colors...\n\t if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n\t // if same widths too, we can draw the whole border by stroking a single path.\n\t if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n\t {\n\t if (shouldDrawLeft && shouldDrawRight) {\n\t // reduce box by half the border width, so we can draw it by stroking.\n\t box = innerBox(box, top.width/2);\n\n\t // adjust the border radiuses, again by top.width/2, and make the path element.\n\t var path = elementRoundBox(element, box, top.width/2);\n\t path.options.stroke = {\n\t color: top.color,\n\t width: top.width\n\t };\n\t group.append(path);\n\t return;\n\t }\n\t }\n\t }\n\n\t // if border radiuses are zero and widths are at most one pixel, we can again use simple\n\t // paths.\n\t if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n\t // alright, 1.9px will do as well. the difference in color blending should not be\n\t // noticeable.\n\t if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n\t // top border\n\t if (top.width > 0) {\n\t group.append(\n\t new Path({\n\t stroke: { width: top.width, color: top.color }\n\t })\n\t .moveTo(box.left, box.top + top.width/2)\n\t .lineTo(box.right, box.top + top.width/2)\n\t );\n\t }\n\n\t // bottom border\n\t if (bottom.width > 0) {\n\t group.append(\n\t new Path({\n\t stroke: { width: bottom.width, color: bottom.color }\n\t })\n\t .moveTo(box.left, box.bottom - bottom.width/2)\n\t .lineTo(box.right, box.bottom - bottom.width/2)\n\t );\n\t }\n\n\t // left border\n\t if (shouldDrawLeft) {\n\t group.append(\n\t new Path({\n\t stroke: { width: left.width, color: left.color }\n\t })\n\t .moveTo(box.left + left.width/2, box.top)\n\t .lineTo(box.left + left.width/2, box.bottom)\n\t );\n\t }\n\n\t // right border\n\t if (shouldDrawRight) {\n\t group.append(\n\t new Path({\n\t stroke: { width: right.width, color: right.color }\n\t })\n\t .moveTo(box.right - right.width/2, box.top)\n\t .lineTo(box.right - right.width/2, box.bottom)\n\t );\n\t }\n\n\t return;\n\t }\n\t }\n\t // END paint borders\n\n\t var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n\t var rTL = tmp.tl;\n\t var rTR = tmp.tr;\n\t var rBR = tmp.br;\n\t var rBL = tmp.bl;\n\n\t // top border\n\t drawEdge(top.color,\n\t box.width, top.width, left.width, right.width,\n\t rTL, rTR,\n\t [ 1, 0, 0, 1, box.left, box.top ]);\n\n\t // bottom border\n\t drawEdge(bottom.color,\n\t box.width, bottom.width, right.width, left.width,\n\t rBR, rBL,\n\t [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n\t // for left/right borders we need to invert the border-radiuses\n\t function inv(p) {\n\t return { x: p.y, y: p.x };\n\t }\n\n\t // left border\n\t drawEdge(left.color,\n\t box.height, left.width, bottom.width, top.width,\n\t inv(rBL), inv(rTL),\n\t [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n\t // right border\n\t drawEdge(right.color,\n\t box.height, right.width, top.width, bottom.width,\n\t inv(rTR), inv(rBR),\n\t [ 0, 1, -1, 0, box.right, box.top ]);\n\t }\n\t}\n\n\tfunction gradientRenderer(gradient) {\n\t return function(group, rect) {\n\t var width = rect.width(), height = rect.height();\n\n\t switch (gradient.type) {\n\t case \"linear\":\n\n\t // figure out the angle.\n\t var angle = gradient.angle != null ? gradient.angle : Math.PI;\n\t switch (gradient.to) {\n\t case \"top\":\n\t angle = 0;\n\t break;\n\t case \"left\":\n\t angle = -Math.PI / 2;\n\t break;\n\t case \"bottom\":\n\t angle = Math.PI;\n\t break;\n\t case \"right\":\n\t angle = Math.PI / 2;\n\t break;\n\t case \"top left\": case \"left top\":\n\t angle = -Math.atan2(height, width);\n\t break;\n\t case \"top right\": case \"right top\":\n\t angle = Math.atan2(height, width);\n\t break;\n\t case \"bottom left\": case \"left bottom\":\n\t angle = Math.PI + Math.atan2(height, width);\n\t break;\n\t case \"bottom right\": case \"right bottom\":\n\t angle = Math.PI - Math.atan2(height, width);\n\t break;\n\t }\n\n\t if (gradient.reverse) {\n\t angle -= Math.PI;\n\t }\n\n\t // limit the angle between 0..2PI\n\t angle %= 2 * Math.PI;\n\t if (angle < 0) {\n\t angle += 2 * Math.PI;\n\t }\n\n\t // compute gradient's start/end points. here len is the length of the gradient line\n\t // and x,y is the end point relative to the center of the rectangle in conventional\n\t // (math) axis direction.\n\n\t // this is the original (unscaled) length of the gradient line. needed to deal with\n\t // absolutely positioned color stops. formula from the CSS spec:\n\t // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n\t var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n\t // The math below is pretty simple, but it took a while to figure out. We compute x\n\t // and y, the *end* of the gradient line. However, we want to transform them into\n\t // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\n\t // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n\t // bottom edge.\n\t //\n\t // A naive approach would use the original angle for these calculations. Say we'd\n\t // like to draw a gradient angled at 45deg in a 100x400 box. When we use\n\t // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n\t // scale that to the desired dimensions. The 45deg angle will look more like 70deg\n\t // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n\t // the following:\n\t //\n\t // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n\t // identity matrix, the normal of the linear gradient is perpendicular to the\n\t // gradient vector in object bounding box space (i.e., the abstract coordinate\n\t // system where (0,0) is at the top/left of the object bounding box and (1,1) is\n\t // at the bottom/right of the object bounding box). When the object's bounding\n\t // box is not square, the gradient normal which is initially perpendicular to\n\t // the gradient vector within object bounding box space may render\n\t // non-perpendicular relative to the gradient vector in user space. If the\n\t // gradient vector is parallel to one of the axes of the bounding box, the\n\t // gradient normal will remain perpendicular. This transformation is due to\n\t // application of the non-uniform scaling transformation from bounding box space\n\t // to user space.\n\t //\n\t // which is an extremely long and confusing way to tell what I just said above.\n\t //\n\t // For this reason we need to apply the reverse scaling to the original angle, so\n\t // that when it'll finally be rendered it'll actually be at the desired slope. Now\n\t // I'll let you figure out the math yourself.\n\n\t var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n\t var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n\t var len = Math.abs(sin) + Math.abs(cos);\n\t var x = len/2 * sin;\n\t var y = len/2 * cos;\n\n\t // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n\t // losing the intended direction of the gradient. The following fixes it.\n\t if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n\t x = -x;\n\t y = -y;\n\t }\n\n\t // compute the color stops.\n\t var implicit = [], right = 0;\n\t var stops = gradient.stops.map(function(s, i){\n\t var offset = s.percent;\n\t if (offset) {\n\t offset = parseFloat(offset) / 100;\n\t } else if (s.length) {\n\t offset = parseFloat(s.length) / pxlen;\n\t } else if (i === 0) {\n\t offset = 0;\n\t } else if (i == gradient.stops.length - 1) {\n\t offset = 1;\n\t }\n\t var stop = {\n\t color: s.color.toCssRgba(),\n\t offset: offset\n\t };\n\t if (offset != null) {\n\t right = offset;\n\t // fix implicit offsets\n\t implicit.forEach(function(s, i){\n\t var stop = s.stop;\n\t stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n\t });\n\t implicit = [];\n\t } else {\n\t implicit.push({ left: right, stop: stop });\n\t }\n\t return stop;\n\t });\n\n\t var start = [ 0.5 - x, 0.5 + y ];\n\t var end = [ 0.5 + x, 0.5 - y ];\n\n\t // finally, draw it.\n\t group.append(\n\t Path.fromRect(rect)\n\t .stroke(null)\n\t .fill(new LinearGradient({\n\t start : start,\n\t end : end,\n\t stops : stops,\n\t userSpace : false\n\t }))\n\t );\n\t break;\n\t case \"radial\":\n\t // XXX:\n\t if (window.console && window.console.log) {\n\t window.console.log(\"Radial gradients are not yet supported in HTML renderer\");\n\t }\n\t break;\n\t }\n\t };\n\t}\n\n\tfunction maybeRenderWidget(element, group) {\n\t var visual;\n\n\t if (element._kendoExportVisual) {\n\t visual = element._kendoExportVisual();\n\t } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr(\"role\"))) {\n\t var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n\t if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n\t if (widget.exportDOMVisual) {\n\t visual = widget.exportDOMVisual();\n\t } else {\n\t visual = widget.exportVisual();\n\t }\n\t }\n\t }\n\n\t if (!visual) {\n\t return false;\n\t }\n\n\t var wrap$$1 = new Group();\n\t wrap$$1.children.push(visual);\n\n\t var bbox = element.getBoundingClientRect();\n\t wrap$$1.transform(transform$1().translate(bbox.left, bbox.top));\n\n\t group.append(wrap$$1);\n\n\t return true;\n\t}\n\n\tfunction renderImage(element, url, group) {\n\t var box = getContentBox(element);\n\t var rect = new Rect([ box.left, box.top ], [ box.width, box.height ]);\n\t var image = new Image$1(url, rect);\n\t setClipping(image, elementRoundBox(element, box, \"content\"));\n\t group.append(image);\n\t}\n\n\tfunction zIndexSort(a, b) {\n\t var sa = getComputedStyle$1(a);\n\t var sb = getComputedStyle$1(b);\n\t var za = parseFloat(getPropertyValue(sa, \"z-index\"));\n\t var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\n\t var pa = getPropertyValue(sa, \"position\");\n\t var pb = getPropertyValue(sb, \"position\");\n\t if (isNaN(za) && isNaN(zb)) {\n\t if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\n\t return 0;\n\t }\n\t if (pa == \"static\") {\n\t return -1;\n\t }\n\t if (pb == \"static\") {\n\t return 1;\n\t }\n\t return 0;\n\t }\n\t if (isNaN(za)) {\n\t return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n\t }\n\t if (isNaN(zb)) {\n\t return za === 0 ? 0 : za > 0 ? 1 : -1;\n\t }\n\t return parseFloat(za) - parseFloat(zb);\n\t}\n\n\tfunction isFormField(element) {\n\t return /^(?:textarea|select|input)$/i.test(element.tagName);\n\t}\n\n\tfunction getSelectedOption(element) {\n\t if (element.selectedOptions && element.selectedOptions.length > 0) {\n\t return element.selectedOptions[0];\n\t }\n\t return element.options[element.selectedIndex];\n\t}\n\n\tfunction renderCheckbox(element, group) {\n\t var style = getComputedStyle$1(element);\n\t var color = getPropertyValue(style, \"color\");\n\t var box = element.getBoundingClientRect();\n\t if (element.type == \"checkbox\") {\n\t group.append(\n\t Path.fromRect(\n\t new Rect([ box.left+1, box.top+1 ],\n\t [ box.width-2, box.height-2 ])\n\t ).stroke(color, 1)\n\t );\n\t if (element.checked) {\n\t // fill a rectangle inside? looks kinda ugly.\n\t // group.append(\n\t // Path.fromRect(\n\t // new geo.Rect([ box.left+4, box.top+4 ],\n\t // [ box.width-8, box.height-8])\n\t // ).fill(color).stroke(null)\n\t // );\n\n\t // let's draw a checkmark instead. artistic, eh?\n\t group.append(\n\t new Path()\n\t .stroke(color, 1.2)\n\t .moveTo(box.left + 0.22 * box.width,\n\t box.top + 0.55 * box.height)\n\t .lineTo(box.left + 0.45 * box.width,\n\t box.top + 0.75 * box.height)\n\t .lineTo(box.left + 0.78 * box.width,\n\t box.top + 0.22 * box.width)\n\t );\n\t }\n\t } else {\n\t group.append(\n\t new Circle(\n\t new Circle$2([\n\t (box.left + box.right) / 2,\n\t (box.top + box.bottom) / 2\n\t ], Math.min(box.width-2, box.height-2) / 2)\n\t ).stroke(color, 1)\n\t );\n\t if (element.checked) {\n\t group.append(\n\t new Circle(\n\t new Circle$2([\n\t (box.left + box.right) / 2,\n\t (box.top + box.bottom) / 2\n\t ], Math.min(box.width-8, box.height-8) / 2)\n\t ).fill(color).stroke(null)\n\t );\n\t }\n\t }\n\t}\n\n\tfunction renderFormField(element, group) {\n\t var tag = element.tagName.toLowerCase();\n\t if (tag == \"input\" && (element.type == \"checkbox\" || element.type == \"radio\")) {\n\t return renderCheckbox(element, group);\n\t }\n\t var p = element.parentNode;\n\t var doc = element.ownerDocument;\n\t var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n\t var option;\n\t el.style.cssText = getCssText(getComputedStyle$1(element));\n\t if (tag == \"input\") {\n\t el.style.whiteSpace = \"pre\";\n\t }\n\t if (tag == \"select\" || tag == \"textarea\") {\n\t el.style.overflow = \"auto\";\n\t }\n\t if (tag == \"select\") {\n\t if (element.multiple) {\n\t for (var i = 0; i < element.options.length; ++i) {\n\t option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n\t option.style.cssText = getCssText(getComputedStyle$1(element.options[i]));\n\t option.style.display = \"block\"; // IE9 messes up without this\n\t option.textContent = element.options[i].textContent;\n\t el.appendChild(option);\n\t }\n\t } else {\n\t option = getSelectedOption(element);\n\t if (option) {\n\t el.textContent = option.textContent;\n\t }\n\t }\n\t } else {\n\t el.textContent = element.value;\n\t }\n\t p.insertBefore(el, element);\n\t el.scrollLeft = element.scrollLeft;\n\t el.scrollTop = element.scrollTop;\n\n\t // must temporarily hide the original element, otherwise it\n\t // may affect layout of the fake element we want to render.\n\t element.style.display = \"none\";\n\n\t renderContents(el, group);\n\t element.style.display = \"\";\n\t p.removeChild(el);\n\t}\n\n\tfunction renderContents(element, group) {\n\t if (nodeInfo._stackingContext.element === element) {\n\t // the group that was set in pushNodeInfo might have\n\t // changed due to clipping/transforms, update it here.\n\t nodeInfo._stackingContext.group = group;\n\t }\n\t switch (element.tagName.toLowerCase()) {\n\t case \"img\":\n\t renderImage(element, element.src, group);\n\t break;\n\n\t case \"svg\":\n\t var xml = new window.XMLSerializer().serializeToString(element);\n\t var dataURL = \"data:image/svg+xml;base64,\" + (encodeBase64(xml));\n\t renderImage(element, dataURL, group);\n\t break;\n\n\t case \"canvas\":\n\t try {\n\t renderImage(element, element.toDataURL(\"image/png\"), group);\n\t } catch (ex) {\n\t // tainted; can't draw it, ignore.\n\t }\n\t break;\n\n\t case \"textarea\":\n\t case \"input\":\n\t case \"select\":\n\t renderFormField(element, group);\n\t break;\n\n\t default:\n\t var children = [], floats = [], positioned = [];\n\t for (var i = element.firstChild; i; i = i.nextSibling) {\n\t switch (i.nodeType) {\n\t case 3: // Text\n\t if (/\\S/.test(i.data)) {\n\t renderText(element, i, group);\n\t }\n\t break;\n\t case 1: // Element\n\t var style = getComputedStyle$1(i);\n\t var floating = getPropertyValue(style, \"float\");\n\t var position = getPropertyValue(style, \"position\");\n\t if (position != \"static\") {\n\t positioned.push(i);\n\t }\n\t else if (floating != \"none\") {\n\t floats.push(i);\n\t } else {\n\t children.push(i);\n\t }\n\t break;\n\t }\n\t }\n\n\t mergeSort(children, zIndexSort).forEach(function(el){ renderElement(el, group); });\n\t mergeSort(floats, zIndexSort).forEach(function(el){ renderElement(el, group); });\n\t mergeSort(positioned, zIndexSort).forEach(function(el){ renderElement(el, group); });\n\t }\n\t}\n\n\tfunction renderText(element, node, group) {\n\t if (emptyClipbox()) {\n\t return;\n\t }\n\t var style = getComputedStyle$1(element);\n\n\t if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n\t // assume it should not be displayed. the slider's\n\t // draggable handle displays a Drag text for some reason,\n\t // having text-indent: -3333px.\n\t return;\n\t }\n\n\t var text = node.data;\n\t var start = 0;\n\t var end = text.search(/\\S\\s*$/) + 1;\n\n\t if (!end) {\n\t return; // whitespace-only node\n\t }\n\n\t var fontSize = getPropertyValue(style, \"font-size\");\n\t var lineHeight = getPropertyValue(style, \"line-height\");\n\n\t // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n\t var font = [\n\t getPropertyValue(style, \"font-style\"),\n\t getPropertyValue(style, \"font-variant\"),\n\t getPropertyValue(style, \"font-weight\"),\n\t fontSize, // no need for line height here; it breaks layout in FF\n\t getPropertyValue(style, \"font-family\")\n\t ].join(\" \");\n\n\t fontSize = parseFloat(fontSize);\n\t lineHeight = parseFloat(lineHeight);\n\n\t if (fontSize === 0) {\n\t return;\n\t }\n\n\t var color = getPropertyValue(style, \"color\");\n\t var range = element.ownerDocument.createRange();\n\t var align$$1 = getPropertyValue(style, \"text-align\");\n\t var isJustified = align$$1 == \"justify\";\n\t var columnCount = getPropertyValue(style, \"column-count\", 1);\n\t var whiteSpace = getPropertyValue(style, \"white-space\");\n\t var textTransform = getPropertyValue(style, \"text-transform\");\n\n\t // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\n\t // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\n\t // seems to be a good option.\n\t var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n\t if (estimateLineLength === 0) {\n\t estimateLineLength = 500;\n\t }\n\n\t // we'll maintain this so we can workaround bugs in Chrome's Range.getClientRects\n\t // https://github.com/telerik/kendo/issues/5740\n\t var prevLineBottom = null;\n\n\t var underline = nodeInfo[\"underline\"];\n\t var lineThrough = nodeInfo[\"line-through\"];\n\t var overline = nodeInfo[\"overline\"];\n\t var hasDecoration = underline || lineThrough || overline;\n\n\t // doChunk returns true when all text has been rendered\n\t while (!doChunk()) {}\n\n\t if (hasDecoration) {\n\t range.selectNode(node);\n\t slice$1$1(range.getClientRects()).forEach(decorate);\n\t }\n\n\t return; // only function declarations after this line\n\n\t function actuallyGetRangeBoundingRect(range) {\n\t // XXX: to be revised when this Chrome bug is fixed:\n\t // https://bugs.chromium.org/p/chromium/issues/detail?id=612459\n\t if (microsoft || browser.chrome) {\n\t // Workaround browser bugs: IE and Chrome would sometimes\n\t // return 0 or 1-width rectangles before or after the main\n\t // one. https://github.com/telerik/kendo/issues/4674\n\n\t // Actually Chrome 50 got worse, since the rectangles can now have the width of a\n\t // full character, making it hard to tell whether it's a bogus rectangle or valid\n\t // selection location. The workaround is to ignore rectangles that fall on the\n\t // previous line. https://github.com/telerik/kendo/issues/5740\n\t var rectangles = range.getClientRects(), box = {\n\t top : Infinity,\n\t right : -Infinity,\n\t bottom : -Infinity,\n\t left : Infinity\n\t }, done = false;\n\t for (var i = 0; i < rectangles.length; ++i) {\n\t var b = rectangles[i];\n\t if (b.width <= 1 || b.bottom === prevLineBottom) {\n\t continue; // bogus rectangle\n\t }\n\t box.left = Math.min(b.left , box.left);\n\t box.top = Math.min(b.top , box.top);\n\t box.right = Math.max(b.right , box.right);\n\t box.bottom = Math.max(b.bottom , box.bottom);\n\t done = true;\n\t }\n\t if (!done) {\n\t return range.getBoundingClientRect();\n\t }\n\t box.width = box.right - box.left;\n\t box.height = box.bottom - box.top;\n\t return box;\n\t }\n\t return range.getBoundingClientRect();\n\t }\n\n\t // Render a chunk of text, typically one line (but for justified text we render each word as\n\t // a separate Text object, because spacing is variable). Returns true when it finished the\n\t // current node. After each chunk it updates `start` to just after the last rendered\n\t // character.\n\t function doChunk() {\n\t var origStart = start;\n\t var box, pos = text.substr(start).search(/\\S/);\n\t start += pos;\n\t if (pos < 0 || start >= end) {\n\t return true;\n\t }\n\n\t // Select a single character to determine the height of a line of text. The box.bottom\n\t // will be essential for us to figure out where the next line begins.\n\t range.setStart(node, start);\n\t range.setEnd(node, start + 1);\n\t box = actuallyGetRangeBoundingRect(range);\n\n\t // for justified text we must split at each space, because space has variable width.\n\t var found = false;\n\t if (isJustified || columnCount > 1) {\n\t pos = text.substr(start).search(/\\s/);\n\t if (pos >= 0) {\n\t // we can only split there if it's on the same line, otherwise we'll fall back\n\t // to the default mechanism (see findEOL below).\n\t range.setEnd(node, start + pos);\n\t var r = actuallyGetRangeBoundingRect(range);\n\t if (r.bottom == box.bottom) {\n\t box = r;\n\t found = true;\n\t start += pos;\n\t }\n\t }\n\t }\n\n\t if (!found) {\n\t // This code does three things: (1) it selects one line of text in `range`, (2) it\n\t // leaves the bounding rect of that line in `box` and (3) it returns the position\n\t // just after the EOL. We know where the line starts (`start`) but we don't know\n\t // where it ends. To figure this out, we select a piece of text and look at the\n\t // bottom of the bounding box. If it changes, we have more than one line selected\n\t // and should retry with a smaller selection.\n\t //\n\t // To speed things up, we first try to select all text in the node (`start` ->\n\t // `end`). If there's more than one line there, then select only half of it. And\n\t // so on. When we find a value for `end` that fits in one line, we try increasing\n\t // it (also in halves) until we get to the next line. The algorithm stops when the\n\t // right side of the bounding box does not change.\n\t //\n\t // One more thing to note is that everything happens in a single Text DOM node.\n\t // There's no other tags inside it, therefore the left/top coordinates of the\n\t // bounding box will not change.\n\t pos = (function findEOL(min, eol, max){\n\t range.setEnd(node, eol);\n\t var r = actuallyGetRangeBoundingRect(range);\n\t if (r.bottom != box.bottom && min < eol) {\n\t return findEOL(min, (min + eol) >> 1, eol);\n\t } else if (r.right != box.right) {\n\t box = r;\n\t if (eol < max) {\n\t return findEOL(eol, (eol + max) >> 1, max);\n\t } else {\n\t return eol;\n\t }\n\t } else {\n\t return eol;\n\t }\n\t })(start, Math.min(end, start + estimateLineLength), end);\n\n\t if (pos == start) {\n\t // if EOL is at the start, then no more text fits on this line. Skip the\n\t // remainder of this node entirely to avoid a stack overflow.\n\t return true;\n\t }\n\t start = pos;\n\n\t pos = range.toString().search(/\\s+$/);\n\t if (pos === 0) {\n\t return false; // whitespace only; we should not get here.\n\t }\n\t if (pos > 0) {\n\t // eliminate trailing whitespace\n\t range.setEnd(node, range.startOffset + pos);\n\t box = actuallyGetRangeBoundingRect(range);\n\t }\n\t }\n\n\t // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n\t // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\n\t // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\n\t if (microsoft) {\n\t box = range.getClientRects()[0];\n\t }\n\n\t var str = range.toString();\n\t if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n\t // node with non-significant space -- collapse whitespace.\n\t str = str.replace(/\\s+/g, \" \");\n\t }\n\t else if (/\\t/.test(str)) {\n\t // with significant whitespace we need to do something about literal TAB characters.\n\t // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\n\t // and the whole text will stretch to fill the original width. The core PDF lib\n\t // does not have sufficient context to deal with it.\n\n\t // calculate the starting column here, since we initially discarded any whitespace.\n\t var cc = 0;\n\t for (pos = origStart; pos < range.startOffset; ++pos) {\n\t var code = text.charCodeAt(pos);\n\t if (code == 9) {\n\t // when we meet a TAB we must round up to the next tab stop.\n\t // in all browsers TABs seem to be 8 characters.\n\t cc += 8 - cc % 8;\n\t } else if (code == 10 || code == 13) {\n\t // just in case we meet a newline we must restart.\n\t cc = 0;\n\t } else {\n\t // ordinary character --> advance one column\n\t cc++;\n\t }\n\t }\n\n\t // based on starting column, replace any TAB characters in the string we actually\n\t // have to display with spaces so that they align to columns multiple of 8.\n\t while ((pos = str.search(\"\\t\")) >= 0) {\n\t var indent = \" \".substr(0, 8 - (cc + pos) % 8);\n\t str = str.substr(0, pos) + indent + str.substr(pos + 1);\n\t }\n\t }\n\n\t if (!found) {\n\t prevLineBottom = box.bottom;\n\t }\n\t drawText(str, box);\n\t }\n\n\t function drawText(str, box) {\n\t // In IE the box height will be approximately lineHeight, while in\n\t // other browsers it'll (correctly) be the height of the bounding\n\t // box for the current text/font. Which is to say, IE sucks again.\n\t // The only good solution I can think of is to measure the text\n\t // ourselves and center the bounding box.\n\t if (microsoft && !isNaN(lineHeight)) {\n\t var height = getFontHeight(font);\n\t var top = (box.top + box.bottom - height) / 2;\n\t box = {\n\t top : top,\n\t right : box.right,\n\t bottom : top + height,\n\t left : box.left,\n\t height : height,\n\t width : box.right - box.left\n\t };\n\t }\n\n\t // var path = new Path({ stroke: { color: \"red\" }});\n\t // path.moveTo(box.left, box.top)\n\t // .lineTo(box.right, box.top)\n\t // .lineTo(box.right, box.bottom)\n\t // .lineTo(box.left, box.bottom)\n\t // .close();\n\t // group.append(path);\n\n\t switch (textTransform) {\n\t case \"uppercase\":\n\t str = str.toUpperCase();\n\t break;\n\t case \"lowercase\":\n\t str = str.toLowerCase();\n\t break;\n\t case \"capitalize\":\n\t str = str.replace(/(?:^|\\s)\\S/g, function (l) { return l.toUpperCase(); });\n\t break;\n\t }\n\n\t var text = new TextRect(\n\t str, new Rect([ box.left, box.top ],\n\t [ box.width, box.height ]),\n\t {\n\t font: font,\n\t fill: { color: color }\n\t }\n\t );\n\t group.append(text);\n\t }\n\n\t function decorate(box) {\n\t line(underline, box.bottom);\n\t line(lineThrough, box.bottom - box.height / 2.7);\n\t line(overline, box.top);\n\t function line(color, ypos) {\n\t if (color) {\n\t var width = fontSize / 12;\n\t var path = new Path({ stroke: {\n\t width: width,\n\t color: color\n\t }});\n\n\t ypos -= width;\n\t path.moveTo(box.left, ypos)\n\t .lineTo(box.right, ypos);\n\t group.append(path);\n\t }\n\t }\n\t }\n\t}\n\n\tfunction groupInStackingContext(element, group, zIndex) {\n\t var main;\n\t if (zIndex != \"auto\") {\n\t // use the current stacking context\n\t main = nodeInfo._stackingContext.group;\n\t zIndex = parseFloat(zIndex);\n\t } else {\n\t // normal flow — use given container. we still have to\n\t // figure out where should we insert this element with the\n\t // assumption that its z-index is zero, as the group might\n\t // already contain elements with higher z-index.\n\t main = group;\n\t zIndex = 0;\n\t }\n\t var a = main.children;\n\t for (var i = 0; i < a.length; ++i) {\n\t if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n\t break;\n\t }\n\t }\n\n\t var tmp = new Group();\n\t main.insert(i, tmp);\n\t tmp._dom_zIndex = zIndex;\n\n\t if (main !== group) {\n\t // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\n\t // console.log(a.slice(i+1));\n\n\t // if (nodeInfo._matrix) {\n\t // tmp.transform(nodeInfo._matrix);\n\t // }\n\t if (nodeInfo._clipbox) {\n\t var m = nodeInfo._matrix.invert();\n\t var r = nodeInfo._clipbox.transformCopy(m);\n\t setClipping(tmp, Path.fromRect(r));\n\t // console.log(r);\n\t // tmp.append(Path.fromRect(r));\n\t // tmp.append(new Text(element.className || element.id, r.topLeft()));\n\t }\n\t }\n\n\t return tmp;\n\t}\n\n\tfunction renderElement(element, container) {\n\t var style = getComputedStyle$1(element);\n\n\t updateCounters(style);\n\n\t if (/^(style|script|link|meta|iframe|col|colgroup)$/i.test(element.tagName)) {\n\t return;\n\t }\n\n\t if (nodeInfo._clipbox == null) {\n\t return;\n\t }\n\n\t var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n\t var visibility = getPropertyValue(style, \"visibility\");\n\t var display = getPropertyValue(style, \"display\");\n\n\t if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n\t return;\n\t }\n\n\t var tr = getTransform(style);\n\t var group;\n\n\t var zIndex = getPropertyValue(style, \"z-index\");\n\t if ((tr || opacity < 1) && zIndex == \"auto\") {\n\t zIndex = 0;\n\t }\n\t group = groupInStackingContext(element, container, zIndex);\n\n\t // XXX: remove at some point\n\t // group._pdfElement = element;\n\t // group.options._pdfDebug = \"\";\n\t // if (element.id) {\n\t // group.options._pdfDebug = \"#\" + element.id;\n\t // }\n\t // if (element.className) {\n\t // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\n\t // }\n\n\t if (opacity < 1) {\n\t group.opacity(opacity * group.opacity());\n\t }\n\n\t pushNodeInfo(element, style, group);\n\n\t if (!tr) {\n\t _renderWithPseudoElements(element, group);\n\t }\n\t else {\n\t saveStyle(element, function(){\n\t // must clear transform, so getBoundingClientRect returns correct values.\n\t pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n\t // must also clear transitions, so correct values are returned *immediately*\n\t pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n\t // the presence of any transform makes it behave like it had position: relative,\n\t // because why not.\n\t // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n\t if (getPropertyValue(style, \"position\") == \"static\") {\n\t // but only if it's not already positioned. :-/\n\t pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n\t }\n\n\t // must translate to origin before applying the CSS\n\t // transformation, then translate back.\n\t var bbox = element.getBoundingClientRect();\n\t var x = bbox.left + tr.origin[0];\n\t var y = bbox.top + tr.origin[1];\n\t var m = [ 1, 0, 0, 1, -x, -y ];\n\t m = mmul(m, tr.matrix);\n\t m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n\t m = setTransform$1(group, m);\n\n\t nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n\t _renderWithPseudoElements(element, group);\n\t });\n\t }\n\n\t popNodeInfo();\n\n\t //drawDebugBox(element.getBoundingClientRect(), container);\n\t}\n\n\t// function drawDebugBox(box, group, color) {\n\t// var path = Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n\t// if (color) {\n\t// path.stroke(color);\n\t// }\n\t// group.append(path);\n\t// }\n\n\t// function dumpTextNode(node) {\n\t// var txt = node.data.replace(/^\\s+/, \"\");\n\t// if (txt.length < 100) {\n\t// console.log(node.data.length + \": |\" + txt);\n\t// } else {\n\t// console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\n\t// }\n\t// }\n\n\tfunction mmul(a, b) {\n\t var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n\t var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n\t return [\n\t a1*a2 + b1*c2, a1*b2 + b1*d2,\n\t c1*a2 + d1*c2, c1*b2 + d1*d2,\n\t e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n\t ];\n\t}\n\n\tvar drawing = {\n\t\tsvg: svg$1,\n\t\tcanvas: canvas,\n\t\tutil: util,\n\t\tHasObservers: HasObservers,\n\t\tPathParser: PathParser,\n\t\tparsePath: parsePath,\n\t\tBaseNode: BaseNode,\n\t\tOptionsStore: OptionsStore,\n\t\tSurface: Surface,\n\t\tSurfaceFactory: SurfaceFactory,\n\t\texportImage: exportImage,\n\t\texportSVG: exportSVG,\n\t\tQuadNode: QuadNode,\n\t\tShapesQuadTree: ShapesQuadTree,\n\t\tElement: Element$1,\n\t\tCircle: Circle,\n\t\tArc: Arc,\n\t\tPath: Path,\n\t\tMultiPath: MultiPath,\n\t\tText: Text,\n\t\tImage: Image$1,\n\t\tGroup: Group,\n\t\tLayout: Layout,\n\t\tRect: Rect$2,\n\t\talign: align,\n\t\tvAlign: vAlign,\n\t\tstack: stack,\n\t\tvStack: vStack,\n\t\twrap: wrap,\n\t\tvWrap: vWrap,\n\t\tfit: fit,\n\t\tLinearGradient: LinearGradient,\n\t\tRadialGradient: RadialGradient,\n\t\tGradientStop: GradientStop,\n\t\tGradient: Gradient,\n\t\tAnimation: Animation,\n\t\tAnimationFactory: AnimationFactory,\n\t\tdrawDOM: drawDOM,\n\t\tdrawText: drawText,\n\t\tgetFontFaces: getFontFaces\n\t};\n\n\tkendo.deepExtend(kendo, {\n\t drawing: drawing,\n\t geometry: geometry\n\t});\n\n\tkendo.drawing.Segment = kendo.geometry.Segment;\n\tkendo.dataviz.drawing = kendo.drawing;\n\tkendo.dataviz.geometry = kendo.geometry;\n\tkendo.drawing.util.measureText = kendo.util.measureText;\n\tkendo.drawing.util.objectKey = kendo.util.objectKey;\n\tkendo.drawing.Color = kendo.Color;\n\tkendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n/***/ }),\n\n/***/ 955:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./util\");\n\n/***/ }),\n\n/***/ 956:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.color\");\n\n/***/ }),\n\n/***/ 957:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../util/text-metrics\");\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}