{"version":3,"sources":["webpack:///./node_modules/bodymovin/build/player/bodymovin.js"],"names":["root","factory","window","svgNS","locationHref","subframeEnabled","expressionsPlugin","isSafari","test","navigator","userAgent","cachedColors","bm_rounder","Math","round","bm_rnd","bm_pow","pow","bm_sqrt","sqrt","bm_abs","abs","bm_floor","floor","bm_max","max","bm_min","min","blitter","BMMath","ProjectInterface","i","propertyNames","Object","getOwnPropertyNames","len","length","random","val","absArr","Array","apply","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","roundTo2Decimals","roundTo3Decimals","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","styleUnselectableDiv","userSelect","MozUserSelect","webkitUserSelect","oUserSelect","BMEnterFrameEvent","n","c","t","d","this","type","currentTime","totalTime","direction","BMCompleteEvent","BMCompleteLoopEvent","currentLoop","totalLoops","BMSegmentStartEvent","f","firstFrame","totalFrames","BMDestroyEvent","target","_addEventListener","eventName","callback","_cbs","push","removeEventListener","bind","_removeEventListener","splice","_triggerEvent","args","randomString","chars","undefined","result","HSVtoRGB","h","s","v","r","g","b","p","q","arguments","RGBtoHSV","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","componentToHex","hex","toString","rgbToHex","colorMap","fillToRgba","alpha","exec","parseInt","fillColorToString","colorArr","join","RenderedFrame","tr","o","iterateDynamicProperties","num","dynamicProperties","getValue","reversePath","paths","newI","newO","newV","newPaths","init","cnt","Matrix","reset","props","rotate","angle","mCos","cos","mSin","sin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","tan","skewFromAxis","scale","sz","isNaN","setTransform","a","e","j","k","l","m","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","clone","matr","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","inversePoint","pt","determinant","inversePoints","pts","retPts","applyToPointArray","dimensions","arr","point_pool","newPoint","applyToPointStringified","toArray","toCSS","cssParts","to2dCSS","pool","math","global","startdenom","significance","overflow","ARC4","key","keylen","me","S","width","count","copy","slice","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","flatten","obj","depth","prop","typ","entropy","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","get","prototype","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","createElement","parent","child","params","instance","create","call","constructor","_parent","extendPrototype","source","destination","attr","hasOwnProperty","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","Segment","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","segments","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","keyData","to","ti","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","SegmentPoints","getSegmentsLength","shapeData","closed","pathV","pathO","pathI","_length","lengths","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","findCompLayers","comps","layers","__used","JSON","parse","stringify","completeShapes","jLen","ks","convertPathsToAbsoluteValues","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","pathData","data","shapes","__converted","checkColors","iterateShapes","checkShapes","layerData","kLen","hasMask","maskProps","masksProperties","cl","moduleOb","fontManager","__complete","completeLayers","completed","tt","td","refId","singleShape","dataManager","FontManager","setUpNode","font","family","parentNode","document","fontFamily","node","innerHTML","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","w","checkLoadedFonts","fonts","loadedCount","loaded","fOrigin","origin","Typekit","load","typekitLoaded","async","active","monoCase","sansCase","removeChild","now","initTime","createHelper","def","fontData","tHelper","createElementNS","fFamily","textContent","fClass","className","tCanvasHelper","getContext","Font","addChars","found","ch","addFonts","defs","list","fontArr","fPath","rel","href","sc","setAttribute","helper","getCharData","char","getFontByName","name","fName","measureText","fontName","size","PropertyFactory","interpolateValue","frameNum","iterationIndex","previousValue","caching","newValue","offsetTime","nextKeyData","fnc","keyframes","ind","_lastBezierData","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","initP","endP","value","getValueAtCurrentTime","elem","globalData","frameId","mdf","comp","renderedFrame","endTime","_caching","lastIndex","renderResult","pv","mult","lastPValue","getNoValue","ValueProperty","kf","vel","MultiDimensionalProperty","lastValue","map","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","TransformProperty","positionGetter","ExpressionValue","px","py","pz","xPositionGetter","yPositionGetter","anchorGetter","orientationGetter","or","rotationGetter","rz","scaleGetter","opacityGetter","skewGetter","sk","skewAxisGetter","sa","applyToMatrix","mat","ry","rx","processKeys","v1","v2","autoOriented","getValueAtTime","frameRate","atan2","setInverted","inverted","iv","autoOrient","getProp","defineProperty","getGradientProp","forceRender","cmdf","omdf","gradientProp","cLength","DashProperty","dataProps","renderer","dasharray","dashoffset","TextSelectorProp","updateRange","newCharsFlag","totalChars","textProperty","currentData","divisor","_s","finalS","finalE","getMult","easer","ne","xe","tot","getDashProp","getTextSelectorProp","ShapePath","_maxLength","setPathData","setLength","doubleArrayLength","concat","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","ShapePropertyFactory","interpolateShape","isCurrentRender","keyPropS","keyPropE","isHold","vertexValue","hasModified","resetShape","localShapeCollection","ShapeProperty","__shapeObject","shape_pool","shapeCollection_pool","newShapeCollection","addShape","KeyframedShapeProperty","_lastIndex","newShape","EllShapeProperty","cPoint","convertEllToPath","p0","s0","s1","StarShapeProperty","convertPolygonToPath","numPts","rad","roundness","os","perimSegment","currentAng","ox","oy","convertStarToPath","longFlag","longRad","shortRad","ir","longRound","shortRound","is","longPerimSegment","shortPerimSegment","convertToPath","RectShapeProperty","convertRectToPath","v0","dataProp","keys","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","RepeaterModifier","ShapeCollection","initModifierProperties","addShapeToModifier","shape","sValue","eValue","oValue","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","processShapes","shapePaths","pathsData","totalShapeLength","releaseShapes","edges","newShapesData","addShapes","lastShape","pop","addPaths","addSegment","shapePath","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","index","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","copies","ceil","group","reloadShapes","cont","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","itemsTransform","items","mProps","release","ImagePreloader","imagesLoadedCb","imageLoaded","loadedAssets","totalImages","getAssetsPath","assetData","assetsPath","imagePath","indexOf","u","loadImage","img","addEventListener","src","loadAssets","cb","totalAssets","setPath","setAssetsPath","featureSupport","maskType","filtersFactory","filId","fil","feColorMatrix","TextAnimatorProperty","textData","renderType","_firstFrame","_hasMaskedPath","_frameId","_dynamicProperties","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","LetterProps","sw","fc","TextProperty","keysIndex","ascent","boxWidth","fStyle","fWeight","justifyOffset","lh","lineWidths","ls","of","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","searchProperty","searchProperties","animatorData","animatorProps","fh","fs","fb","maskManager","getMaskProperty","getMeasures","xPos","yPos","animators","matrixHelper","mHelper","renderedLettersCount","letters","mask","pathInfo","tLength","pi","currentPoint","prevPoint","currentLength","segmentInd","pointInd","tanAngle","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","line","extra","an","animatorOffset","anIndexes","add","rot","atan","ps","update","updated","setCurrentData","textDocumentData","textKeys","completeTextData","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","lastSpaceIndex","charAt","substr","currentChar","uncollapsedSpaces","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","dData","pooling","cloned","releaseArray","shapePathsCollection","shapeCollection","originCollection","BaseRenderer","SVGRenderer","animationItem","config","renderConfig","preserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","pendingElements","destroyed","MaskElement","viewData","maskElement","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","mode","filterID","expan","lastPath","lastOperator","filterId","lastRadius","solidPath","createLayerSolidPath","op","getShapeProp","invRect","drawPath","maskedElement","BaseElement","SVGBaseElement","parentContainer","placeholder","matteElement","transformedElement","isTransparent","_sizeChanged","IShapeElement","shapesData","stylesList","itemsData","prevViewData","shapeModifiers","processedElements","checkLayers","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createShape","createText","createCamera","createBase","Error","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","_isParent","setHierarchy","addPendingElement","layerElement","SVGTextElement","IImageElement","ICompElement","ISolidElement","configAnimation","animData","height","wrapper","getAssetData","compSize","fr","maskId","destroy","updateContainerSize","registerComposition","initExpressions","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","newElement","getBaseElement","nextElement","insertBefore","hide","show","searchExtraCompositions","floatingContainer","xt","finalMat","finalTransform","mProp","getMaskelement","pathNodes","pathString","checkMasks","isVisible","elemMdf","sr","currentFrameNum","globalToLocal","transforms","ptNew","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","createShapeInterface","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","baseElement","ef","effects","EffectsManager","hidden","lastNum","matMdf","opMdf","opacity","ao","createElements","addMasks","getType","resetHierarchy","getHierarchy","getLayerSize","sourceRectAtTime","layerElementParent","masker","createFilter","createAlphaToLuminanceFilter","gg","maskGroup","maskGrouper","alphaRect","ln","cp","clipId","cpGroup","effectsManager","SVGEffects","parentTransform","hd","identityMatrix","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","buildExpressionInterface","searchShapes","setGradientData","pathElement","gfill","gradientId","stop","stops","gf","cst","setGradientOpacity","styleOb","opFill","opacityId","ost","msElem","createStyleElement","level","elementData","ld","lvl","lc","lj","ml","pElem","createGroupElement","gr","createTransformElement","createShapeElement","ownTransformers","caches","transformers","lStr","addShapeToModifiers","ITextElement","textSpans","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feGaussianBlur","feOffset","feFlood","feComposite","originalNodeAdded","SVGMatte3Effect","filterElem","filters","supports3d","tm","setElementStyles","renderModifiers","container","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","parentMatrix","renderShape","renderPath","renderFill","renderGradient","renderStroke","buildShapeString","shapeString","itemData","pathStringTransformed","redraw","lLen","iterations","styleData","styleElem","attr1","attr2","cValues","oValues","ang","dist","textAnimator","buildNewText","createPathShape","shapeStr","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","textContainer","usesGlyphs","tSpan","tElement","justify","cachedSpansLength","setAttributeNS","time","renderLetters","textBox","getBBox","bbox","renderedLetter","textSpan","colorBlack","colorWhite","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","feFunc","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","setElementAsMask","timeRemapped","renderParent","setElements","elems","getElements","assetPath","innerElem","animationManager","registeredAnimations","idled","playingAnimationsNum","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","first","resume","nowTime","elapsedTime","advanceTime","start","loadAnimation","setParams","setSpeed","setDirection","play","moveFrame","pause","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","isLoaded","currentRawFrame","frameMult","playSpeed","playDirection","playCount","prerenderFramesFlag","autoplay","loop","animationID","scaleMode","timeCompleted","segmentPos","pendingSegment","_idle","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","contextData","saved","savedOp","cArrPos","cTr","cO","transformMat","HybridRenderer","threeDElements","camera","CVBaseElement","canvasContext","CVCompElement","compGlobalData","compHeight","compWidth","parentGlobalData","cv","canvas","CVImageElement","CVMaskElement","CVShapeElement","CVSolidElement","CVTextElement","stroke","fill","currentRender","values","sWidth","fValue","HBaseElement","HSolidElement","HCompElement","HShapeElement","currentBBox","self","animType","rendererSettings","prerender","autoloadSegments","xhr","XMLHttpRequest","lastIndexOf","fileName","open","send","onreadystatechange","readyState","status","responseText","response","err","wrapperAttributes","attributes","getNamedItem","tf","completeData","loadNextSegment","trigger","shift","segmentPath","loadSegments","_this","imagePreloader","updaFrameModifier","waitForFontsLoaded","checkLoaded","checkFontsLoaded","elementLoaded","gotoFrame","setSubframe","setCurrentRawFrameValue","frameModifier","goToAndPlay","adjustSegment","updateAnimation","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","checkSegments","remove","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getAssets","triggerEvent","ctxTransform","trProps","ctxOpacity","globalAlpha","restore","save","actionFlag","popped","mozTransformOrigin","isDashed","transformCanvas","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","clearRect","beginPath","closePath","clip","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HTextElement","HCameraElement","HImageElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","resizerElem","threeDContainerData","build3dContainers","lastThreeDContainerData","svg","setup","cWidth","cHeight","perspective","webkitPerspective","checkBlendMode","blendMode","globalCompositeOperation","maxScale","drawImage","widthCrop","heightCrop","ctx","imgW","imgH","imgRel","canvasRel","imageFailed","failed","Image","hasMasks","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","co","wi","da","do","nodes","trNodes","hasStrokes","hasFills","fl","ownArrays","isMain","groupTransform","groupMatrix","mtArr","strokeStyle","lineCap","lineJoin","miterLimit","fillStyle","coOp","setLineDash","lineDashOffset","p3","groupTransformMat","fillRect","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","getDomElement","divElement","compSvg","textPaths","isMasked","pe","_renderShapeFrame","shapesContainer","shapeCont","boundingBox","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","imageElem","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","Expressions","getStaticValueAtTime","loopOut","duration","durationFlag","cycleDuration","firstKeyFrame","lastKeyFrame","ret","initV","endV","current","repeats","nextLastValue","loopIn","firstValue","nextFirstValue","_cachingAtTime","interpolationResult","getVelocityAtTime","velocity","setGroupProperty","propertyGroup","searchExpressions","getPreValue","ExpressionManager","initiateExpression","getTransformValueAtTime","console","log","getTransformStaticValueAtTime","TextExpressionSelectorProp","getValueProxy","total","textIndex","textTotal","selectorValue","propertyGetProp","numKeys","isAdded","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","vertices","inTangents","outTangents","isClosed","pointOnPath","_segmentsLength","segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","_shapeValueAtTime","_lastIndexAtTime","_lastTimeAtTime","propertyGetShapeProp","trims","propertyGetTextProp","getExpressionValue","calculateExpression","duplicatePropertyValue","Number","shapesEqual","shape1","shape2","$bm_neg","tOfA","lenA","retArr","sum","tOfB","lenB","sub","mul","mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hslToRgb","hue2rgb","linear","tMin","tMax","value1","value2","rnd","createPath","property","needsVelocity","_needsRandom","elemType","content","effect","thisComp","thisProperty","frameDuration","inPoint","outPoint","loop_in","loop_out","toWorld","fromWorld","fromComp","fromCompToSurface","anchorPoint","thisLayer","valueAtTime","velocityAtTime","fn","Function","eval","bindedFn","wiggle","freq","amp","addedAmps","periods","loopInDuration","loopOutDuration","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","nearestKey","keyTime","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","hasParent","executeExpression","frameExpressionId","lock","view","shapeInterfaceFactory","createGroupInterface","groupInterfaceFactory","createTrimInterface","trimInterfaceFactory","createStrokeInterface","strokeInterfaceFactory","createTransformInterface","transformInterfaceFactory","createEllipseInterface","ellipseInterfaceFactory","createStarInterface","starInterfaceFactory","createRectInterface","rectInterfaceFactory","createRoundedInterface","roundedInterfaceFactory","createRepatearInterface","repeaterInterfaceFactory","createPathInterface","pathInterfaceFactory","createFillInterface","fillInterfaceFactory","iterateElements","interfaces","_interfaceFunction","_name","contentsInterfaceFactory","interfaceFunction","mn","propertyIndex","numProperties","cix","transformInterface","np","_propertyGroup","_dashPropertyGroup","dashOb","addPropertyToDashOb","rotation","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_sourceText","_thisLayerFunction","stringValue","_prevValue","toWorldMat","TransformExpressionInterface","toComp","MaskManagerInterface","pixelAspect","_thisFunction","xPosition","yPosition","compositions","_thisProjectFunction","createValueInterface","groupInterface","en","effectsData","MaskInterface","_mask","_data","_masksInterfaces","elementProp","expressionValue","arrValue","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","eff","bodymovinjs","setLocationHref","setSubframeRendering","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","clearInterval","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","setInterval"],"mappings":"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","file":"f8516779-4ef686ef5ac80fb69445.js","sourcesContent":["require(\"core-js/modules/es.typed-array.set.js\");\n\nrequire(\"core-js/modules/es.typed-array.sort.js\");\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(function () {\n return factory(root);\n });\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory(root);\n } else {\n root.bodymovin = factory(root);\n }\n})(window || {}, function (window) {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var locationHref = '';\n var subframeEnabled = true;\n var expressionsPlugin;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var cachedColors = {};\n var bm_rounder = Math.round;\n var bm_rnd;\n var bm_pow = Math.pow;\n var bm_sqrt = Math.sqrt;\n var bm_abs = Math.abs;\n var bm_floor = Math.floor;\n var bm_max = Math.max;\n var bm_min = Math.min;\n var blitter = 10;\n var BMMath = {};\n\n (function () {\n var propertyNames = Object.getOwnPropertyNames(Math);\n var i,\n len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface() {\n return {};\n }\n\n ;\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n\n if (tOfVal === 'object' && val.length) {\n var absArr = Array.apply(null, {\n length: val.length\n });\n var i,\n len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n if (flag) {\n bm_rnd = Math.round;\n } else {\n bm_rnd = function bm_rnd(val) {\n return val;\n };\n }\n }\n\n roundValues(false);\n\n function roundTo2Decimals(val) {\n return Math.round(val * 10000) / 10000;\n }\n\n function roundTo3Decimals(val) {\n return Math.round(val * 100) / 100;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = element.style.webkitTransformStyle = element.style.mozTransformStyle = \"preserve-3d\";\n }\n\n function styleUnselectableDiv(element) {\n element.style.userSelect = 'none';\n element.style.MozUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.oUserSelect = 'none';\n }\n\n function BMEnterFrameEvent(n, c, t, d) {\n this.type = n;\n this.currentTime = c;\n this.totalTime = t;\n this.direction = d < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(n, d) {\n this.type = n;\n this.direction = d < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(n, c, t, d) {\n this.type = n;\n this.currentLoop = c;\n this.totalLoops = t;\n this.direction = d < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(n, f, t) {\n this.type = n;\n this.firstFrame = f;\n this.totalFrames = t;\n }\n\n function BMDestroyEvent(n, t) {\n this.type = n;\n this.target = t;\n }\n\n function _addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n }\n\n function _removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0,\n len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n\n function _triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var len = this._cbs[eventName].length;\n\n for (var i = 0; i < len; i++) {\n this._cbs[eventName][i](args);\n }\n }\n }\n\n function randomString(length, chars) {\n if (chars === undefined) {\n chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';\n }\n\n var i;\n var result = '';\n\n for (i = length; i > 0; --i) {\n result += chars[Math.round(Math.random() * (chars.length - 1))];\n }\n\n return result;\n }\n\n function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, t;\n\n if (arguments.length === 1) {\n s = h.s, v = h.v, h = h.h;\n }\n\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v, g = t, b = p;\n break;\n\n case 1:\n r = q, g = v, b = p;\n break;\n\n case 2:\n r = p, g = v, b = t;\n break;\n\n case 3:\n r = p, g = q, b = v;\n break;\n\n case 4:\n r = t, g = p, b = v;\n break;\n\n case 5:\n r = v, g = p, b = q;\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n if (arguments.length === 1) {\n g = r.g, b = r.b, r = r.r;\n }\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b),\n d = max - min,\n h,\n s = max === 0 ? 0 : d / max,\n v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length == 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n function fillToRgba(hex, alpha) {\n if (!cachedColors[hex]) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n cachedColors[hex] = parseInt(result[1], 16) + ',' + parseInt(result[2], 16) + ',' + parseInt(result[3], 16);\n }\n\n return 'rgba(' + cachedColors[hex] + ',' + alpha + ')';\n }\n\n var fillColorToString = function () {\n var colorMap = [];\n return function (colorArr, alpha) {\n if (alpha !== undefined) {\n colorArr[3] = alpha;\n }\n\n if (!colorMap[colorArr[0]]) {\n colorMap[colorArr[0]] = {};\n }\n\n if (!colorMap[colorArr[0]][colorArr[1]]) {\n colorMap[colorArr[0]][colorArr[1]] = {};\n }\n\n if (!colorMap[colorArr[0]][colorArr[1]][colorArr[2]]) {\n colorMap[colorArr[0]][colorArr[1]][colorArr[2]] = {};\n }\n\n if (!colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]]) {\n colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]] = 'rgba(' + colorArr.join(',') + ')';\n }\n\n return colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]];\n };\n }();\n\n function RenderedFrame(tr, o) {\n this.tr = tr;\n this.o = o;\n }\n\n function iterateDynamicProperties(num) {\n var i,\n len = this.dynamicProperties;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue(num);\n }\n }\n\n function reversePath(paths) {\n var newI = [],\n newO = [],\n newV = [];\n var i,\n len,\n newPaths = {};\n var init = 0;\n\n if (paths.c) {\n newI[0] = paths.o[0];\n newO[0] = paths.i[0];\n newV[0] = paths.v[0];\n init = 1;\n }\n\n len = paths.i.length;\n var cnt = len - 1;\n\n for (i = init; i < len; i += 1) {\n newI.push(paths.o[cnt]);\n newO.push(paths.i[cnt]);\n newV.push(paths.v[cnt]);\n cnt -= 1;\n }\n\n newPaths.i = newI;\n newPaths.o = newO;\n newPaths.v = newV;\n return newPaths;\n }\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n\n var Matrix = function () {\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = Math.cos(angle);\n var mSin = Math.sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = Math.cos(angle);\n var mSin = Math.sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = Math.cos(angle);\n var mSin = Math.sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = Math.cos(angle);\n var mSin = Math.sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(Math.tan(ax), Math.tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = Math.cos(angle);\n var mSin = Math.sin(angle);\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, Math.tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, Math.tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n sz = isNaN(sz) ? 1 : sz;\n\n if (sx == 1 && sy == 1 && sz == 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n if (m2 !== 0 || n2 !== 0 || o2 !== 0) {\n this.props[12] = this.props[12] * a2 + this.props[13] * e2 + this.props[14] * i2 + this.props[15] * m2;\n this.props[13] = this.props[12] * b2 + this.props[13] * f2 + this.props[14] * j2 + this.props[15] * n2;\n this.props[14] = this.props[12] * c2 + this.props[13] * g2 + this.props[14] * k2 + this.props[15] * o2;\n this.props[15] = this.props[12] * d2 + this.props[13] * h2 + this.props[14] * l2 + this.props[15] * p2;\n }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = this.props[0];\n var b1 = this.props[1];\n var c1 = this.props[2];\n var d1 = this.props[3];\n var e1 = this.props[4];\n var f1 = this.props[5];\n var g1 = this.props[6];\n var h1 = this.props[7];\n var i1 = this.props[8];\n var j1 = this.props[9];\n var k1 = this.props[10];\n var l1 = this.props[11];\n var m1 = this.props[12];\n var n1 = this.props[13];\n var o1 = this.props[14];\n var p1 = this.props[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n this.props[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n this.props[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n this.props[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n this.props[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n this.props[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n this.props[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n this.props[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n this.props[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n this.props[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n this.props[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n this.props[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n this.props[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n this.props[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n this.props[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n this.props[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n this.props[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /*return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n };*/\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function inversePoint(pt) {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n return [pt[0] * a + pt[1] * c + e, pt[0] * b + pt[1] * d + f, 0];\n }\n\n function inversePoints(pts) {\n var i,\n len = pts.length,\n retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToPointArray(x, y, z, dimensions) {\n if (dimensions && dimensions === 2) {\n var arr = point_pool.newPoint();\n arr[0] = x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n arr[1] = x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n return arr;\n }\n\n return [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n return bm_rnd(x * this.props[0] + y * this.props[4] + this.props[12]) + ',' + bm_rnd(x * this.props[1] + y * this.props[5] + this.props[13]);\n }\n\n function toArray() {\n return [this.props[0], this.props[1], this.props[2], this.props[3], this.props[4], this.props[5], this.props[6], this.props[7], this.props[8], this.props[9], this.props[10], this.props[11], this.props[12], this.props[13], this.props[14], this.props[15]];\n }\n\n function toCSS() {\n if (isSafari) {\n return \"matrix3d(\" + roundTo2Decimals(this.props[0]) + ',' + roundTo2Decimals(this.props[1]) + ',' + roundTo2Decimals(this.props[2]) + ',' + roundTo2Decimals(this.props[3]) + ',' + roundTo2Decimals(this.props[4]) + ',' + roundTo2Decimals(this.props[5]) + ',' + roundTo2Decimals(this.props[6]) + ',' + roundTo2Decimals(this.props[7]) + ',' + roundTo2Decimals(this.props[8]) + ',' + roundTo2Decimals(this.props[9]) + ',' + roundTo2Decimals(this.props[10]) + ',' + roundTo2Decimals(this.props[11]) + ',' + roundTo2Decimals(this.props[12]) + ',' + roundTo2Decimals(this.props[13]) + ',' + roundTo2Decimals(this.props[14]) + ',' + roundTo2Decimals(this.props[15]) + ')';\n } else {\n this.cssParts[1] = this.props.join(',');\n return this.cssParts.join('');\n }\n }\n\n function to2dCSS() {\n return \"matrix(\" + roundTo2Decimals(this.props[0]) + ',' + roundTo2Decimals(this.props[1]) + ',' + roundTo2Decimals(this.props[4]) + ',' + roundTo2Decimals(this.props[5]) + ',' + roundTo2Decimals(this.props[12]) + ',' + roundTo2Decimals(this.props[13]) + \")\";\n }\n\n function toString() {\n return \"\" + this.toArray();\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToPointStringified = applyToPointStringified;\n this.toArray = toArray;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.toString = toString;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n this.cssParts = ['matrix3d(', '', ')'];\n };\n }();\n\n function Matrix() {}\n /*\r\n Copyright 2014 David Bau.\r\n \r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n \r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n \r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n \r\n */\n\n\n (function (pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options == true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed == null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng.double = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n (me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n }\n\n ; //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n function flatten(obj, depth) {\n var result = [],\n typ = typeof obj,\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n })([], // pool: entropy pool starts empty\n BMMath // math: package containing random, pow, and seedrandom\n );\n\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === \"function\";\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues();\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n };\n return ob;\n }();\n\n (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n function createElement(parent, child, params) {\n if (child) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n child.prototype._parent = parent.prototype;\n } else {\n var instance = Object.create(parent.prototype, params);\n var getType = {};\n\n if (instance && getType.toString.call(instance.init) === '[object Function]') {\n instance.init();\n }\n\n return instance;\n }\n }\n\n function extendPrototype(source, destination) {\n for (var attr in source.prototype) {\n if (source.prototype.hasOwnProperty(attr)) destination.prototype[attr] = source.prototype[attr];\n }\n }\n\n function bezFunction() {\n var easingFunctions = [];\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.0001 && det1 < 0.0001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2) + Math.pow(z2 - z1, 2));\n var dist2 = Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2) + Math.pow(z3 - z1, 2));\n var dist3 = Math.sqrt(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2) + Math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n /*function getEasingCurve(aa,bb,cc,dd,encodedFuncName) {\r\n if(!encodedFuncName){\r\n encodedFuncName = ('bez_' + aa+'_'+bb+'_'+cc+'_'+dd).replace(/\\./g, 'p');\r\n }\r\n if(easingFunctions[encodedFuncName]){\r\n return easingFunctions[encodedFuncName];\r\n }\r\n var A0, B0, C0;\r\n var A1, B1, C1;\r\n easingFunctions[encodedFuncName] = function(tt) {\r\n var x = tt;\r\n var i = 0, z;\r\n while (++i < 20) {\r\n C0 = 3 * aa;\r\n B0 = 3 * (cc - aa) - C0;\r\n A0 = 1 - C0 - B0;\r\n z = (x * (C0 + x * (B0 + x * A0))) - tt;\r\n if (bm_abs(z) < 1e-3) break;\r\n x -= z / (C0 + x * (2 * B0 + 3 * A0 * x));\r\n }\r\n C1 = 3 * bb;\r\n B1 = 3 * (dd - bb) - C1;\r\n A1 = 1 - C1 - B1;\r\n var polyB = x * (C1 + x * (B1 + x * A1));\r\n //return c * polyB + b;\r\n return polyB;\r\n };\r\n return easingFunctions[encodedFuncName];\r\n }*/\n\n\n var getBezierLength = function () {\n function Segment(l, p) {\n this.l = l;\n this.p = p;\n }\n\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = defaultCurveSegments;\n var k;\n var i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point = [],\n lastPoint = [];\n var lengthData = {\n addedLength: 0,\n segments: []\n };\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bm_pow(perc, 2) * pt4[i] + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.segments.push(new Segment(addedLength, perc));\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i,\n len = shapeData._length;\n var lengths = [];\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n return {\n lengths: lengths,\n totalLength: totalLength\n };\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (keyData) {\n var pt1 = keyData.s;\n var pt2 = keyData.e;\n var pt3 = keyData.to;\n var pt4 = keyData.ti;\n var bezierName = (pt1.join('_') + '_' + pt2.join('_') + '_' + pt3.join('_') + '_' + pt4.join('_')).replace(/\\./g, 'p');\n\n if (storedData[bezierName]) {\n keyData.bezierData = storedData[bezierName];\n return;\n }\n\n var curveSegments = defaultCurveSegments;\n var k, i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point,\n lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = new Array(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bm_pow(perc, 2) * (pt2[i] + pt4[i]) + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n keyData.bezierData = bezierData;\n storedData[bezierName] = bezierData;\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var segments = bezierData.segments;\n var len = segments.length;\n var initPos = bm_floor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (lengthPos == segments[initPos].l) {\n return segments[initPos].p;\n } else {\n var dir = segments[initPos].l > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (segments[initPos].l <= lengthPos && segments[initPos + 1].l > lengthPos) {\n lPerc = (lengthPos - segments[initPos].l) / (segments[initPos + 1].l - segments[initPos].l);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n flag = false;\n }\n }\n\n return segments[initPos].p + (segments[initPos + 1].p - segments[initPos].p) * lPerc;\n }\n }\n\n function SegmentPoints() {\n this.pt1 = new Array(2);\n this.pt2 = new Array(2);\n this.pt3 = new Array(2);\n this.pt4 = new Array(2);\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u0 = 1;\n var u1 = 1 - t1;\n var ptX = Math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = Math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n var pts = new SegmentPoints();\n startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i,\n len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1; //Math.round(num * 100) / 100\n\n for (i = 0; i < len; i += 1) {\n pts.pt1[i] = Math.round((u0 * u0 * u0 * pt1[i] + (t0 * u0 * u0 + u0 * t0 * u0 + u0 * u0 * t0) * pt3[i] + (t0 * t0 * u0 + u0 * t0 * t0 + t0 * u0 * t0) * pt4[i] + t0 * t0 * t0 * pt2[i]) * 1000) / 1000;\n pts.pt3[i] = Math.round((u0 * u0 * u1 * pt1[i] + (t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1) * pt3[i] + (t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1) * pt4[i] + t0 * t0 * t1 * pt2[i]) * 1000) / 1000;\n pts.pt4[i] = Math.round((u0 * u1 * u1 * pt1[i] + (t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1) * pt3[i] + (t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1) * pt4[i] + t0 * t1 * t1 * pt2[i]) * 1000) / 1000;\n pts.pt2[i] = Math.round((u1 * u1 * u1 * pt1[i] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[i] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[i] + t1 * t1 * t1 * pt2[i]) * 1000) / 1000;\n }\n\n return pts;\n }\n\n return {\n //getEasingCurve : getEasingCurve,\n getBezierLength: getBezierLength,\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n function dataFunctionManager() {\n //var tCanvasHelper = document.createElement('canvas').getContext('2d');\n function completeLayers(layers, comps, fontManager) {\n var layerData;\n var animArray, lastFrame;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (!('ks' in layerData) || layerData.completed) {\n continue;\n }\n\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n animArray = [];\n lastFrame = -1;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps, fontManager);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty == 5) {\n completeText(layerData, fontManager);\n }\n }\n }\n\n function findCompLayers(id, comps) {\n var i = 0,\n len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n if (!comps[i].layers.__used) {\n comps[i].layers.__used = true;\n return comps[i].layers;\n }\n\n return JSON.parse(JSON.stringify(comps[i].layers));\n }\n\n i += 1;\n }\n }\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty == 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n /*if(hasPaths){\r\n //mx: distance\r\n //ss: sensitivity\r\n //dc: decay\r\n arr.splice(arr.length-1,0,{\r\n \"ty\": \"ms\",\r\n \"mx\":20,\r\n \"ss\":10,\r\n \"dc\":0.001,\r\n \"maxDist\":200\r\n });\r\n }*/\n\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i,\n len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n } else if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n } else if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n } else if (animVersion[2] > minimum[2]) {\n return false;\n }\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i,\n len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i,\n len = animationData.chars.length,\n j,\n jLen,\n k,\n kLen;\n var pathData, paths;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\n paths = animationData.chars[i].data.shapes[0].it;\n jLen = paths.length;\n\n for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i,\n len = shapes.length;\n var j, jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i,\n len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty == 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n /*function blitPaths(path){\r\n var i, len = path.i.length;\r\n for(i=0;i=0;i-=1){\r\n if(arr[i].ty == 'sh'){\r\n if(arr[i].ks.k.i){\r\n blitPaths(arr[i].ks.k);\r\n }else{\r\n jLen = arr[i].ks.k.length;\r\n for(j=0;j=0){\r\n val[i] /= blitter;\r\n i-=1;\r\n }\r\n }\r\n return val;\r\n }\r\n function blitProperty(data){\r\n if(!data.k.length){\r\n data.k = blitValue(data.k);\r\n }else if(typeof(data.k[0]) === 'number'){\r\n data.k = blitValue(data.k);\r\n } else {\r\n var i, len = data.k.length;\r\n for(i=0;i\n var l = document.createElement('link');\n l.type = \"text/css\";\n l.rel = \"stylesheet\";\n l.href = fontArr[i].fPath;\n defs.appendChild(l);\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n //\n var sc = document.createElement('script');\n sc.setAttribute('src', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n\n fontArr[i].helper = createHelper(defs, fontArr[i]);\n this.fonts.push(fontArr[i]);\n }\n\n checkLoadedFonts.bind(this)();\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i,\n len = chars.length;\n var j,\n jLen = this.chars.length,\n found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(char, style, font) {\n var i = 0,\n len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var tHelper = fontData.helper; //tHelper.textContent = char;\n\n return tHelper.measureText(char).width * size / 100; //return tHelper.getComputedTextLength()*size/100;\n }\n\n function getFontByName(name) {\n var i = 0,\n len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return 'sans-serif';\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.loaded = false;\n this.initTime = Date.now();\n };\n\n Font.prototype.addChars = addChars;\n Font.prototype.addFonts = addFonts;\n Font.prototype.getCharData = getCharData;\n Font.prototype.getFontByName = getFontByName;\n Font.prototype.measureText = measureText;\n return Font;\n }();\n\n var PropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateValue(frameNum, iterationIndex, previousValue, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (previousValue.constructor === Array) {\n newValue = Array.apply(null, {\n length: previousValue.length\n });\n }\n\n var i = iterationIndex;\n var len = this.keyframes.length - 1,\n flag = true;\n var keyData, nextKeyData;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i == len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n var k, kLen, perc, jLen, j, fnc;\n\n if (keyData.to) {\n if (!keyData.bezierData) {\n bez.buildBezierData(keyData);\n }\n\n var bezierData = keyData.bezierData;\n\n if (frameNum >= nextKeyData.t - offsetTime || frameNum < keyData.t - offsetTime) {\n var ind = frameNum >= nextKeyData.t - offsetTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n\n caching._lastBezierData = null;\n } else {\n if (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyData.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - offsetTime)) / (nextKeyData.t - offsetTime - (keyData.t - offsetTime)));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastBezierData === bezierData ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastBezierData === bezierData ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j == bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastBezierData = bezierData;\n }\n } else {\n var outX, outY, inX, inY, keyValue;\n len = keyData.s.length;\n\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyData.t - offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - offsetTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyData.__fnct) {\n keyData.__fnct = [];\n }\n\n if (!keyData.__fnct[i]) {\n outX = keyData.o.x[i] || keyData.o.x[0];\n outY = keyData.o.y[i] || keyData.o.y[0];\n inX = keyData.i.x[i] || keyData.i.x[0];\n inY = keyData.i.y[i] || keyData.i.y[0];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct[i] = fnc;\n } else {\n fnc = keyData.__fnct[i];\n }\n } else {\n if (!keyData.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct = fnc;\n } else {\n fnc = keyData.__fnct;\n }\n }\n\n perc = fnc((frameNum - (keyData.t - offsetTime)) / (nextKeyData.t - offsetTime - (keyData.t - offsetTime)));\n }\n }\n\n if (this.sh && keyData.h !== 1) {\n var initP = keyData.s[i];\n var endP = keyData.e[i];\n\n if (initP - endP < -180) {\n initP += 360;\n } else if (initP - endP > 180) {\n initP -= 360;\n }\n\n keyValue = initP + (endP - initP) * perc;\n } else {\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (keyData.e[i] - keyData.s[i]) * perc;\n }\n\n if (len === 1) {\n newValue = keyValue;\n } else {\n newValue[i] = keyValue;\n }\n }\n }\n\n return {\n value: newValue,\n iterationIndex: iterationIndex\n };\n }\n\n function getValueAtCurrentTime() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n var i = this._caching.lastFrame < frameNum ? this._caching.lastIndex : 0;\n var renderResult = this.interpolateValue(frameNum, i, this.pv, this._caching);\n this._caching.lastIndex = renderResult.iterationIndex;\n\n if (this.pv.constructor === Array) {\n i = 0;\n\n while (i < this.v.length) {\n this.pv[i] = renderResult.value[i];\n this.v[i] = this.mult ? this.pv[i] * this.mult : this.pv[i];\n\n if (this.lastPValue[i] !== this.pv[i]) {\n this.mdf = true;\n this.lastPValue[i] = this.pv[i];\n }\n\n i += 1;\n }\n } else {\n this.pv = renderResult.value;\n this.v = this.mult ? this.pv * this.mult : this.pv;\n\n if (this.lastPValue != this.pv) {\n this.mdf = true;\n this.lastPValue = this.pv;\n }\n }\n }\n\n this._caching.lastFrame = frameNum;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function getNoValue() {}\n\n function ValueProperty(elem, data, mult) {\n this.mult = mult;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this.mdf = false;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.getValue = getNoValue;\n }\n\n function MultiDimensionalProperty(elem, data, mult) {\n this.mult = mult;\n this.data = data;\n this.mdf = false;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n this.v = Array.apply(null, {\n length: data.k.length\n });\n this.pv = Array.apply(null, {\n length: data.k.length\n });\n this.lastValue = Array.apply(null, {\n length: data.k.length\n });\n var arr = Array.apply(null, {\n length: data.k.length\n });\n this.vel = arr.map(function () {\n return 0;\n });\n var i,\n len = data.k.length;\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = mult ? data.k[i] * mult : data.k[i];\n this.pv[i] = data.k[i];\n }\n\n this.getValue = getNoValue;\n }\n\n function KeyframedValueProperty(elem, data, mult) {\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.lastValue = -99999;\n this.lastPValue = -99999;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult;\n this.elem = elem;\n this.comp = elem.comp;\n this.v = mult ? data.k[0].s[0] * mult : data.k[0].s[0];\n this.pv = data.k[0].s[0];\n this.getValue = getValueAtCurrentTime;\n this.interpolateValue = interpolateValue;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult) {\n var i,\n len = data.k.length;\n var s, e, to, ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i].e) {\n s = data.k[i].s;\n e = data.k[i].e;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this.mult = mult;\n this.elem = elem;\n this.comp = elem.comp;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.getValue = getValueAtCurrentTime;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n this.v = Array.apply(null, {\n length: data.k[0].s.length\n });\n this.pv = Array.apply(null, {\n length: data.k[0].s.length\n });\n this.lastValue = Array.apply(null, {\n length: data.k[0].s.length\n });\n this.lastPValue = Array.apply(null, {\n length: data.k[0].s.length\n });\n }\n\n var TransformProperty = function () {\n function positionGetter() {\n if (this.p) {\n return ExpressionValue(this.p);\n } else {\n return [this.px.v, this.py.v, this.pz ? this.pz.v : 0];\n }\n }\n\n function xPositionGetter() {\n return ExpressionValue(this.px);\n }\n\n function yPositionGetter() {\n return ExpressionValue(this.py);\n }\n\n function zPositionGetter() {\n return ExpressionValue(this.pz);\n }\n\n function anchorGetter() {\n return ExpressionValue(this.a);\n }\n\n function orientationGetter() {\n return ExpressionValue(this.or);\n }\n\n function rotationGetter() {\n if (this.r) {\n return ExpressionValue(this.r, 1 / degToRads);\n } else {\n return ExpressionValue(this.rz, 1 / degToRads);\n }\n }\n\n function scaleGetter() {\n return ExpressionValue(this.s, 100);\n }\n\n function opacityGetter() {\n return ExpressionValue(this.o, 100);\n }\n\n function skewGetter() {\n return ExpressionValue(this.sk);\n }\n\n function skewAxisGetter() {\n return ExpressionValue(this.sa);\n }\n\n function applyToMatrix(mat) {\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.mdf) {\n this.v.reset();\n\n if (this.a) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n this.v.rotate(-this.r.v);\n } else {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented && this.p.keyframes && this.p.getValueAtTime) {\n var v1, v2;\n\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / this.elem.globalData.frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / this.elem.globalData.frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / this.elem.globalData.frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.01) / this.elem.globalData.frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / this.elem.globalData.frameRate, this.p.offsetTime);\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function setInverted() {\n this.inverted = true;\n this.iv = new Matrix();\n\n if (!this.k) {\n if (this.data.p.s) {\n this.iv.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.iv.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n\n if (this.r) {\n this.iv.rotate(-this.r.v);\n } else {\n this.iv.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n }\n\n if (this.s) {\n this.iv.scale(this.s.v[0], this.s.v[1], 1);\n }\n\n if (this.a) {\n this.iv.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n }\n }\n\n function autoOrient() {//\n //var prevP = this.getValueAtTime();\n }\n\n return function TransformProperty(elem, data, arr) {\n this.elem = elem;\n this.frameId = -1;\n this.type = 'transform';\n this.dynamicProperties = [];\n this.mdf = false;\n this.data = data;\n this.getValue = processKeys;\n this.applyToMatrix = applyToMatrix;\n this.setInverted = setInverted;\n this.autoOrient = autoOrient;\n this.v = new Matrix();\n\n if (data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this.dynamicProperties);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this.dynamicProperties);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this.dynamicProperties);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this.dynamicProperties);\n }\n\n if (data.r) {\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this.dynamicProperties);\n } else if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this.dynamicProperties);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this.dynamicProperties);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this.dynamicProperties);\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this.dynamicProperties); //sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this.dynamicProperties);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this.dynamicProperties);\n }\n\n if (data.a) {\n this.a = PropertyFactory.getProp(elem, data.a, 1, 0, this.dynamicProperties);\n }\n\n if (data.s) {\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0.01, this.dynamicProperties);\n }\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this.dynamicProperties);\n } else {\n this.o = {\n mdf: false,\n v: 1\n };\n }\n\n if (this.dynamicProperties.length) {\n arr.push(this);\n } else {\n if (this.a) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n this.v.rotate(-this.r.v);\n } else {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n Object.defineProperty(this, \"position\", {\n get: positionGetter\n });\n Object.defineProperty(this, \"xPosition\", {\n get: xPositionGetter\n });\n Object.defineProperty(this, \"yPosition\", {\n get: yPositionGetter\n });\n Object.defineProperty(this, \"orientation\", {\n get: orientationGetter\n });\n Object.defineProperty(this, \"anchorPoint\", {\n get: anchorGetter\n });\n Object.defineProperty(this, \"rotation\", {\n get: rotationGetter\n });\n Object.defineProperty(this, \"scale\", {\n get: scaleGetter\n });\n Object.defineProperty(this, \"opacity\", {\n get: opacityGetter\n });\n Object.defineProperty(this, \"skew\", {\n get: skewGetter\n });\n Object.defineProperty(this, \"skewAxis\", {\n get: skewAxisGetter\n });\n };\n }();\n\n function getProp(elem, data, type, mult, arr) {\n var p;\n\n if (type === 2) {\n p = new TransformProperty(elem, data, arr);\n } else if (data.a === 0) {\n if (type === 0) {\n p = new ValueProperty(elem, data, mult);\n } else {\n p = new MultiDimensionalProperty(elem, data, mult);\n }\n } else if (data.a === 1) {\n if (type === 0) {\n p = new KeyframedValueProperty(elem, data, mult);\n } else {\n p = new KeyframedMultidimensionalProperty(elem, data, mult);\n }\n } else if (!data.k.length) {\n p = new ValueProperty(elem, data, mult);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult);\n break;\n }\n }\n\n if (p.k) {\n arr.push(p);\n }\n\n return p;\n }\n\n var getGradientProp = function () {\n function getValue(forceRender) {\n this.prop.getValue();\n this.cmdf = false;\n this.omdf = false;\n\n if (this.prop.mdf || forceRender) {\n var i,\n len = this.data.p * 4;\n var mult, val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this.cmdf = true;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this.omdf = true;\n }\n }\n }\n }\n }\n\n function gradientProp(elem, data, arr) {\n this.prop = getProp(elem, data.k, 1, null, []);\n this.data = data;\n this.k = this.prop.k;\n this.c = Array.apply(null, {\n length: data.p * 4\n });\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = Array.apply(null, {\n length: cLength\n });\n this.cmdf = false;\n this.omdf = false;\n this.getValue = getValue;\n\n if (this.prop.k) {\n arr.push(this);\n }\n\n this.getValue(true);\n }\n\n return function getGradientProp(elem, data, arr) {\n return new gradientProp(elem, data, arr);\n };\n }();\n\n var DashProperty = function () {\n function processKeys(forceRender) {\n var i = 0,\n len = this.dataProps.length;\n\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.mdf = false;\n this.frameId = this.elem.globalData.frameId;\n\n while (i < len) {\n if (this.dataProps[i].p.mdf) {\n this.mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (this.mdf || forceRender) {\n if (this.renderer === 'svg') {\n this.dasharray = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n != 'o') {\n if (this.renderer === 'svg') {\n this.dasharray += ' ' + this.dataProps[i].p.v;\n } else {\n this.dasharray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset = this.dataProps[i].p.v;\n }\n }\n }\n }\n\n return function (elem, data, renderer, dynamicProperties) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = new Array(data.length);\n this.renderer = renderer;\n this.mdf = false;\n this.k = false;\n\n if (this.renderer === 'svg') {\n this.dasharray = '';\n } else {\n this.dasharray = new Array(data.length - 1);\n }\n\n this.dashoffset = 0;\n var i,\n len = data.length,\n prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, dynamicProperties);\n this.k = prop.k ? true : this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n this.getValue = processKeys;\n\n if (this.k) {\n dynamicProperties.push(this);\n } else {\n this.getValue(true);\n }\n };\n }();\n\n function getDashProp(elem, data, renderer, dynamicProperties) {\n return new DashProperty(elem, data, renderer, dynamicProperties);\n }\n\n ;\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function updateRange(newCharsFlag) {\n this.mdf = newCharsFlag || false;\n\n if (this.dynamicProperties.length) {\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n }\n\n var totalChars = this.elem.textProperty.currentData ? this.elem.textProperty.currentData.l.length : 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = totalChars;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n\n function getMult(ind) {\n //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\n var easer = BezierFactory.getBezierEasing(this.ne.v / 100, 0, 1 - this.xe.v / 100, 1).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type == 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type == 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type == 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < .5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type == 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /*ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind;*/\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type == 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2;\n /*\r\n ind = Math.min(Math.max(s,ind),e-1);\r\n mult = (1+(Math.cos((Math.PI+Math.PI*2*(ind-s)/(e-1-s)))))/2;\r\n mult = Math.max(mult,(1/(e-1-s))/(e-1-s));*/\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = 1 - (s - ind);\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n }\n\n return mult * this.a.v;\n }\n\n return function TextSelectorProp(elem, data, arr) {\n this.mdf = false;\n this.k = false;\n this.data = data;\n this.dynamicProperties = [];\n this.getValue = updateRange;\n this.getMult = getMult;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this.dynamicProperties);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this.dynamicProperties);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this.dynamicProperties);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this.dynamicProperties);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this.dynamicProperties);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this.dynamicProperties);\n\n if (this.dynamicProperties.length) {\n arr.push(this);\n } else {\n this.getValue();\n }\n };\n }();\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorProp(elem, data, arr);\n }\n\n ;\n var ob = {\n getProp: getProp,\n getDashProp: getDashProp,\n getTextSelectorProp: getTextSelectorProp,\n getGradientProp: getGradientProp\n };\n return ob;\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = Array.apply(null, {\n length: this._maxLength\n });\n this.o = Array.apply(null, {\n length: this._maxLength\n });\n this.i = Array.apply(null, {\n length: this._maxLength\n });\n }\n\n ;\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = point_pool.newPoint();\n this.o[i] = point_pool.newPoint();\n this.i[i] = point_pool.newPoint();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(Array.apply(null, {\n length: this._maxLength\n }));\n this.i = this.i.concat(Array.apply(null, {\n length: this._maxLength\n }));\n this.o = this.o.concat(Array.apply(null, {\n length: this._maxLength\n }));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = point_pool.newPoint();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, iterationIndex, previousValue, isCurrentRender) {\n var keyPropS, keyPropE, isHold;\n\n if (frameNum < this.keyframes[0].t - this.offsetTime) {\n keyPropS = this.keyframes[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= this.keyframes[this.keyframes.length - 1].t - this.offsetTime) {\n if (this.keyframes[this.keyframes.length - 2].h === 1) {\n keyPropS = this.keyframes[this.keyframes.length - 1].s[0];\n } else {\n keyPropS = this.keyframes[this.keyframes.length - 2].e[0];\n }\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = this.keyframes.length - 1,\n flag = true,\n keyData,\n nextKeyData,\n j,\n jLen,\n k,\n kLen;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n isHold = keyData.h === 1;\n iterationIndex = i;\n var perc;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyData.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n var hasModified = false;\n var vertexValue;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n if (isHold) {\n vertexValue = keyPropS.i[j][k];\n\n if (previousValue.i[j][k] !== vertexValue) {\n previousValue.i[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.i[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n\n vertexValue = keyPropS.o[j][k];\n\n if (previousValue.o[j][k] !== vertexValue) {\n previousValue.o[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.o[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n\n vertexValue = keyPropS.v[j][k];\n\n if (previousValue.v[j][k] !== vertexValue) {\n previousValue.v[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.v[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n } else {\n vertexValue = keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n\n if (previousValue.i[j][k] !== vertexValue) {\n previousValue.i[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.i[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n\n vertexValue = keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n\n if (previousValue.o[j][k] !== vertexValue) {\n previousValue.o[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.o[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n\n vertexValue = keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n\n if (previousValue.v[j][k] !== vertexValue) {\n previousValue.v[j][k] = vertexValue;\n\n if (isCurrentRender) {\n this.pv.v[j][k] = vertexValue;\n }\n\n hasModified = true;\n }\n }\n }\n }\n\n if (hasModified) {\n previousValue.c = keyPropS.c;\n }\n\n return {\n iterationIndex: iterationIndex,\n hasModified: hasModified\n };\n }\n\n function interpolateShapeCurrentTime() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(this.lastFrame !== initFrame && (this.lastFrame < initTime && frameNum < initTime || this.lastFrame > endTime && frameNum > endTime))) {\n ////\n var i = this.lastFrame < frameNum ? this._lastIndex : 0;\n var renderResult = this.interpolateShape(frameNum, i, this.v, true); ////\n\n this._lastIndex = renderResult.iterationIndex;\n this.mdf = renderResult.hasModified;\n\n if (renderResult.hasModified) {\n this.paths = this.localShapeCollection;\n }\n }\n\n this.lastFrame = frameNum;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function getShapeValue() {\n return this.v;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n\n if (!this.k) {\n this.mdf = false;\n }\n }\n\n function ShapeProperty(elem, data, type) {\n this.__shapeObject = 1;\n this.comp = elem.comp;\n this.k = false;\n this.mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shape_pool.clone(pathData);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = getShapeValue;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.__shapeObject = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.offsetTime = elem.data.st;\n this._lastIndex = 0;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.k = true;\n this.kf = true;\n var i,\n len = this.keyframes[0].s[0].i.length;\n var jLen = this.keyframes[0].s[0].i[0].length;\n this.v = shape_pool.newShape();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n }\n\n KeyframedShapeProperty.prototype.getValue = interpolateShapeCurrentTime;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function convertEllToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n s0 = this.s.v[0] / 2,\n s1 = this.s.v[1] / 2;\n\n if (this.d !== 3) {\n this.v.v[0][0] = p0;\n this.v.v[0][1] = p1 - s1;\n this.v.v[1][0] = p0 + s0;\n this.v.v[1][1] = p1;\n this.v.v[2][0] = p0;\n this.v.v[2][1] = p1 + s1;\n this.v.v[3][0] = p0 - s0;\n this.v.v[3][1] = p1;\n this.v.i[0][0] = p0 - s0 * cPoint;\n this.v.i[0][1] = p1 - s1;\n this.v.i[1][0] = p0 + s0;\n this.v.i[1][1] = p1 - s1 * cPoint;\n this.v.i[2][0] = p0 + s0 * cPoint;\n this.v.i[2][1] = p1 + s1;\n this.v.i[3][0] = p0 - s0;\n this.v.i[3][1] = p1 + s1 * cPoint;\n this.v.o[0][0] = p0 + s0 * cPoint;\n this.v.o[0][1] = p1 - s1;\n this.v.o[1][0] = p0 + s0;\n this.v.o[1][1] = p1 + s1 * cPoint;\n this.v.o[2][0] = p0 - s0 * cPoint;\n this.v.o[2][1] = p1 + s1;\n this.v.o[3][0] = p0 - s0;\n this.v.o[3][1] = p1 - s1 * cPoint;\n } else {\n this.v.v[0][0] = p0;\n this.v.v[0][1] = p1 - s1;\n this.v.v[1][0] = p0 - s0;\n this.v.v[1][1] = p1;\n this.v.v[2][0] = p0;\n this.v.v[2][1] = p1 + s1;\n this.v.v[3][0] = p0 + s0;\n this.v.v[3][1] = p1;\n this.v.i[0][0] = p0 + s0 * cPoint;\n this.v.i[0][1] = p1 - s1;\n this.v.i[1][0] = p0 - s0;\n this.v.i[1][1] = p1 - s1 * cPoint;\n this.v.i[2][0] = p0 - s0 * cPoint;\n this.v.i[2][1] = p1 + s1;\n this.v.i[3][0] = p0 + s0;\n this.v.i[3][1] = p1 + s1 * cPoint;\n this.v.o[0][0] = p0 - s0 * cPoint;\n this.v.o[0][1] = p1 - s1;\n this.v.o[1][0] = p0 - s0;\n this.v.o[1][1] = p1 + s1 * cPoint;\n this.v.o[2][0] = p0 + s0 * cPoint;\n this.v.o[2][1] = p1 + s1;\n this.v.o[3][0] = p0 + s0;\n this.v.o[3][1] = p1 - s1 * cPoint;\n }\n }\n\n function processKeys(frameNum) {\n var i,\n len = this.dynamicProperties.length;\n\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n this.frameId = this.elem.globalData.frameId;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue(frameNum);\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.mdf) {\n this.convertEllToPath();\n }\n }\n\n return function EllShapeProperty(elem, data) {\n /*this.v = {\r\n v: Array.apply(null,{length:4}),\r\n i: Array.apply(null,{length:4}),\r\n o: Array.apply(null,{length:4}),\r\n c: true\r\n };*/\n this.v = shape_pool.newShape();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.dynamicProperties = [];\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.mdf = false;\n this.getValue = processKeys;\n this.convertEllToPath = convertEllToPath;\n this.reset = resetShape;\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this.dynamicProperties);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this.dynamicProperties);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.convertEllToPath();\n }\n };\n }();\n\n var StarShapeProperty = function () {\n function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n /*this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts;*/\n\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i,\n currentAng = -Math.PI / 2;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /*this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];*/\n\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n\n function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /*this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts;*/\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i,\n rad,\n roundness,\n perimSegment,\n currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /*this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts;*/\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n }\n\n function processKeys() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n this.frameId = this.elem.globalData.frameId;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.mdf) {\n this.convertToPath();\n }\n }\n\n return function StarShapeProperty(elem, data) {\n /*this.v = {\r\n v: [],\r\n i: [],\r\n o: [],\r\n c: true\r\n };*/\n this.v = shape_pool.newShape();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.dynamicProperties = [];\n this.mdf = false;\n this.getValue = processKeys;\n this.reset = resetShape;\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this.dynamicProperties);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this.dynamicProperties);\n this.convertToPath = convertStarToPath;\n } else {\n this.convertToPath = convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this.dynamicProperties);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this.dynamicProperties);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this.dynamicProperties);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this.dynamicProperties);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this.dynamicProperties);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.convertToPath();\n }\n };\n }();\n\n var RectShapeProperty = function () {\n function processKeys(frameNum) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.mdf = false;\n this.frameId = this.elem.globalData.frameId;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue(frameNum);\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.mdf) {\n this.convertRectToPath();\n }\n }\n\n function convertRectToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n v0 = this.s.v[0] / 2,\n v1 = this.s.v[1] / 2;\n var round = bm_min(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n }\n\n return function RectShapeProperty(elem, data) {\n this.v = shape_pool.newShape();\n this.v.c = true;\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.dynamicProperties = [];\n this.mdf = false;\n this.getValue = processKeys;\n this.convertRectToPath = convertRectToPath;\n this.reset = resetShape;\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this.dynamicProperties);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this.dynamicProperties);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this.dynamicProperties);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.convertRectToPath();\n }\n };\n }();\n\n function getShapeProp(elem, data, type, arr) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (dataProp.a === 1 || keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n arr.push(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data, dynamicProperties) {\n return new modifiers[nm](elem, data, dynamicProperties);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n this.shapes.push({\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollection_pool.newShapeCollection()\n });\n this.addShapeToModifier(data.sh);\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data, dynamicProperties) {\n this.elem = elem;\n this.frameId = -1;\n this.shapes = [];\n this.dynamicProperties = [];\n this.mdf = false;\n this.closed = false;\n this.k = false;\n this.comp = elem.comp;\n this.initModifierProperties(elem, data);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n dynamicProperties.push(this);\n } else {\n this.getValue(true);\n }\n };\n\n function TrimModifier() {}\n\n ;\n extendPrototype(ShapeModifier, TrimModifier);\n\n TrimModifier.prototype.processKeys = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.mdf = forceRender ? true : false;\n this.frameId = this.elem.globalData.frameId;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n\n if (this.mdf || forceRender) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n var s = this.s.v + o;\n var e = this.e.v + o;\n\n if (s == e) {}\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.sValue = s;\n this.eValue = e;\n this.oValue = o;\n }\n };\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.sValue = 0;\n this.eValue = 0;\n this.oValue = 0;\n this.getValue = this.processKeys;\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this.dynamicProperties);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this.dynamicProperties);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this.dynamicProperties);\n this.m = data.m;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i,\n len = segments.length,\n segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {} else {\n var shapeS, shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.processShapes = function (firstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var s = this.sValue;\n var e = this.eValue;\n var pathsData,\n pathData,\n totalShapeLength,\n totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape.mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [],\n shapeData,\n localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n\n if (!shapeData.shape.mdf && !this.mdf && !firstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape.mdf && shapeData.pathsData) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = [];\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape.mdf = true;\n }\n }\n\n var shapeS = s,\n shapeE = e,\n addedLength = 0;\n var j, jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape.mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n\n if (this.m === 2 && len > 1) {\n var edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n var lastPos;\n\n if (segments.length > 1) {\n if (shapeData.shape.v.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this.mdf) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].shape.mdf = true;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this.mdf = false;\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i,\n len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n /*console.log(pt1, 'vertex: v, at: ', pos);\r\n console.log(pt2, 'vertex: o, at: ', pos);\r\n console.log(pt3, 'vertex: i, at: ', pos + 1);\r\n console.log(pt4, 'vertex: v, at: ', pos + 1);\r\n console.log('newShape: ', newShape);*/\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i,\n len = shapeData.shape.paths._length,\n j,\n jLen;\n var addedLength = 0;\n var currentLengthData, segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shape_pool.newShape();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shape_pool.newShape();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n\n function RoundCornersModifier() {}\n\n ;\n extendPrototype(ShapeModifier, RoundCornersModifier);\n\n RoundCornersModifier.prototype.processKeys = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.mdf = forceRender ? true : false;\n this.frameId = this.elem.globalData.frameId;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n };\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this.dynamicProperties);\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var cloned_path = shape_pool.newShape();\n cloned_path.c = path.c;\n var i,\n len = path._length;\n var currentV,\n currentI,\n currentO,\n closerV,\n newV,\n newO,\n newI,\n distance,\n newPosPerc,\n index = 0;\n var vX, vY, oX, oY, iX, iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n cloned_path.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /*cloned_path.v[index] = currentV;\r\n cloned_path.o[index] = currentO;\r\n cloned_path.i[index] = currentI;*/\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n vX = iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n vX = oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n cloned_path.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return cloned_path;\n };\n\n RoundCornersModifier.prototype.processShapes = function (firstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape.mdf && !this.mdf && !firstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape.mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this.mdf = false;\n }\n };\n\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n\n function RepeaterModifier() {}\n\n ;\n\n RepeaterModifier.prototype.processKeys = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.mdf = forceRender ? true : false;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.mdf = true;\n }\n }\n };\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this.dynamicProperties);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this.dynamicProperties);\n this.tr = PropertyFactory.getProp(elem, data.tr, 2, null, this.dynamicProperties);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData, dynamicProperties) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.dynamicProperties = [];\n this.frameId = -1;\n this.initModifierProperties(elem, arr[pos]);\n var cont = 0;\n\n while (pos > 0) {\n pos -= 1; //this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n\n cont += 1;\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n dynamicProperties.push(this);\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i,\n len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var i,\n len = elements.length;\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i,\n len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (firstFrame) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n\n if (!this.dynamicProperties.length && !firstFrame) {\n this.mdf = false;\n }\n\n if (this.mdf) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n \"a\": {\n \"a\": 0,\n \"ix\": 1,\n \"k\": [0, 0]\n },\n \"nm\": \"Transform\",\n \"o\": {\n \"a\": 0,\n \"ix\": 7,\n \"k\": 100\n },\n \"p\": {\n \"a\": 0,\n \"ix\": 2,\n \"k\": [0, 0]\n },\n \"r\": {\n \"a\": 0,\n \"ix\": 6,\n \"k\": 0\n },\n \"s\": {\n \"a\": 0,\n \"ix\": 3,\n \"k\": [100, 100]\n },\n \"sa\": {\n \"a\": 0,\n \"ix\": 5,\n \"k\": 0\n },\n \"sk\": {\n \"a\": 0,\n \"ix\": 4,\n \"k\": 0\n },\n \"ty\": \"tr\"\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n }\n\n var i,\n cont = 0,\n renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n cont += 1;\n }\n\n this._currentCopies = copies;\n this.elem.firstFrame = true; ////\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var k;\n var tMat = this.tr.v.props;\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n var dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n\n while (cont) {\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n var items = this.elemsData[i].it;\n var itemsTransform = items[items.length - 1].transform.mProps.v.props;\n var j,\n jLen = itemsTransform.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n var items = this.elemsData[i].it;\n var itemsTransform = items[items.length - 1].transform.mProps.v.props;\n var j,\n jLen = itemsTransform.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n }\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = Array.apply(null, {\n length: this._maxLength\n });\n }\n\n ;\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(Array.apply(null, {\n length: this._maxLength\n }));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shape_pool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var ImagePreloader = function () {\n var imagesLoadedCb;\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages) {\n if (imagesLoadedCb) {\n imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData) {\n var path = '';\n\n if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function loadImage(path) {\n var img = document.createElement('img');\n img.addEventListener('load', imageLoaded.bind(this), false);\n img.addEventListener('error', imageLoaded.bind(this), false);\n img.src = path;\n }\n\n function loadAssets(assets, cb) {\n imagesLoadedCb = cb;\n this.totalAssets = assets.length;\n var i;\n\n for (i = 0; i < this.totalAssets; i += 1) {\n if (!assets[i].layers) {\n loadImage.bind(this)(getAssetsPath.bind(this)(assets[i]));\n this.totalImages += 1;\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n return function ImagePreloader() {\n this.loadAssets = loadAssets;\n this.setAssetsPath = setAssetsPath;\n this.setPath = setPath;\n this.assetsPath = '';\n this.path = '';\n this.totalAssets = 0;\n this.totalImages = 0;\n this.loadedAssets = 0;\n };\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId) {\n var fil = document.createElementNS(svgNS, 'filter');\n fil.setAttribute('id', filId);\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this.mdf = false;\n this._firstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._dynamicProperties = [];\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = Array.apply(null, {\n length: this._textData.a.length\n });\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n }\n\n TextAnimatorProperty.prototype.searchProperties = function (dynamicProperties) {\n var i,\n len = this._textData.a.length,\n animatorData,\n animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n animatorData = {\n a: {},\n s: {}\n };\n\n if ('r' in animatorProps.a) {\n animatorData.a.r = getProp(this._elem, animatorProps.a.r, 0, degToRads, this._dynamicProperties);\n }\n\n if ('rx' in animatorProps.a) {\n animatorData.a.rx = getProp(this._elem, animatorProps.a.rx, 0, degToRads, this._dynamicProperties);\n }\n\n if ('ry' in animatorProps.a) {\n animatorData.a.ry = getProp(this._elem, animatorProps.a.ry, 0, degToRads, this._dynamicProperties);\n }\n\n if ('sk' in animatorProps.a) {\n animatorData.a.sk = getProp(this._elem, animatorProps.a.sk, 0, degToRads, this._dynamicProperties);\n }\n\n if ('sa' in animatorProps.a) {\n animatorData.a.sa = getProp(this._elem, animatorProps.a.sa, 0, degToRads, this._dynamicProperties);\n }\n\n if ('s' in animatorProps.a) {\n animatorData.a.s = getProp(this._elem, animatorProps.a.s, 1, 0.01, this._dynamicProperties);\n }\n\n if ('a' in animatorProps.a) {\n animatorData.a.a = getProp(this._elem, animatorProps.a.a, 1, 0, this._dynamicProperties);\n }\n\n if ('o' in animatorProps.a) {\n animatorData.a.o = getProp(this._elem, animatorProps.a.o, 0, 0.01, this._dynamicProperties);\n }\n\n if ('p' in animatorProps.a) {\n animatorData.a.p = getProp(this._elem, animatorProps.a.p, 1, 0, this._dynamicProperties);\n }\n\n if ('sw' in animatorProps.a) {\n animatorData.a.sw = getProp(this._elem, animatorProps.a.sw, 0, 0, this._dynamicProperties);\n }\n\n if ('sc' in animatorProps.a) {\n animatorData.a.sc = getProp(this._elem, animatorProps.a.sc, 1, 0, this._dynamicProperties);\n }\n\n if ('fc' in animatorProps.a) {\n animatorData.a.fc = getProp(this._elem, animatorProps.a.fc, 1, 0, this._dynamicProperties);\n }\n\n if ('fh' in animatorProps.a) {\n animatorData.a.fh = getProp(this._elem, animatorProps.a.fh, 0, 0, this._dynamicProperties);\n }\n\n if ('fs' in animatorProps.a) {\n animatorData.a.fs = getProp(this._elem, animatorProps.a.fs, 0, 0.01, this._dynamicProperties);\n }\n\n if ('fb' in animatorProps.a) {\n animatorData.a.fb = getProp(this._elem, animatorProps.a.fb, 0, 0.01, this._dynamicProperties);\n }\n\n if ('t' in animatorProps.a) {\n animatorData.a.t = getProp(this._elem, animatorProps.a.t, 0, 0, this._dynamicProperties);\n }\n\n animatorData.s = PropertyFactory.getTextSelectorProp(this._elem, animatorProps.s, this._dynamicProperties);\n animatorData.s.t = animatorProps.s.t;\n this._animatorsData[i] = animatorData;\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n f: getProp(this._elem, this._textData.p.f, 0, 0, this._dynamicProperties),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this._dynamicProperties),\n r: this._textData.p.r,\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this._dynamicProperties);\n\n if (this._dynamicProperties.length) {\n dynamicProperties.push(this);\n }\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this.mdf && !this._firstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m.mdf)) {\n return;\n }\n\n this._firstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var data = this.data;\n var xPos, yPos;\n var i, len;\n var letters = documentData.l;\n\n if (this._hasMaskedPath) {\n var mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData.mdf) {\n var paths = mask.v;\n\n if (this._pathData.r) {\n paths = reversePath(paths);\n }\n\n var pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var pathData;\n var totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n pathData = {\n s: paths.v[i],\n e: paths.v[i + 1],\n to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n ti: [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]\n };\n bez.buildBezierData(pathData);\n pathInfo.tLength += pathData.bezierData.segmentLength;\n pathInfo.segments.push(pathData);\n totalLength += pathData.bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n pathData = {\n s: paths.v[i],\n e: paths.v[0],\n to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n ti: [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]\n };\n bez.buildBezierData(pathData);\n pathInfo.tLength += pathData.bezierData.segmentLength;\n pathInfo.segments.push(pathData);\n totalLength += pathData.bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n var pathInfo = this._pathData.pi;\n var currentLength = this._pathData.f.v,\n segmentInd = 0,\n pointInd = 1,\n currentPoint,\n prevPoint,\n points;\n var segmentLength = 0,\n flag = true;\n var segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].bezierData.points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].bezierData.points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].bezierData.points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n var partialLength = currentPoint.partialLength;\n var perc, tanAngle;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.s * 1.2 * .714;\n var firstLine = true;\n var animatorProps, animatorSelector;\n var j, jLen;\n var letterValue;\n jLen = animators.length;\n\n if (lettersChangedFlag) {\n for (j = 0; j < jLen; j += 1) {\n animatorSelector = animators[j].s;\n animatorSelector.getValue(true);\n }\n }\n\n var lastLetter;\n var mult,\n ind = -1,\n offf,\n xPathPos,\n yPathPos;\n var initPathPos = currentLength,\n initSegmentInd = segmentInd,\n initPointInd = pointInd,\n currentLine = -1;\n var elemOpacity;\n var sc, sw, fc, k;\n var lineLength = 0;\n var letterSw,\n letterSc,\n letterFc,\n letterM = '',\n letterP = this.defaultPropsArray,\n letterO;\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n lineLength = 0;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].bezierData.points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterO = letterSw = letterFc = letterM = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an / 200;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if ('p' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if ('a' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true;\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an / 200, -(alignment[1] * yOff / 100));\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].bezierData.points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].bezierData.points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an / 200, -alignment[1] * yOff / 100, 0);\n }\n\n lineLength += letters[i].l / 2;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if ('t' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t * mult[0];\n } else {\n currentLength += animatorProps.t * mult;\n }\n } else {\n if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n lineLength += letters[i].l / 2;\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if ('a' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if ('s' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if ('sk' in animatorProps) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if ('r' in animatorProps) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if ('ry' in animatorProps) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if ('rx' in animatorProps) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if ('o' in animatorProps) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && 'sw' in animatorProps) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && 'sc' in animatorProps) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if ('fc' in animatorProps) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if ('fh' in animatorProps) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if ('fs' in animatorProps) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if ('fb' in animatorProps) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if ('p' in animatorProps) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else {\n if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff / 100 + yPos, 0);\n\n if (textData.p.p) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an / 200;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr / 1000 * documentData.s;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n //matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an / 200, alignment[1] * yOff / 100, 0);\n xPos += letters[i].l + documentData.tr / 1000 * documentData.s;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n var i,\n len = this._dynamicProperties.length;\n this.mdf = false;\n\n for (i = 0; i < len; i += 1) {\n this._dynamicProperties[i].getValue();\n\n this.mdf = this._dynamicProperties[i].mdf || this.mdf;\n }\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this.mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this.mdf.o = false;\n this.mdf.sw = false;\n this.mdf.sc = false;\n this.mdf.fc = false;\n this.mdf.m = false;\n this.mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this.mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this.mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this.mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this.mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this.mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this.mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data, dynamicProperties) {\n this._frameId = -99999;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this.firstFrame = true;\n this.mdf = true;\n this.data = data;\n this.elem = elem;\n this.keysIndex = -1;\n this.currentData = {\n ascent: 0,\n boxWidth: [0, 0],\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n __complete: false\n };\n\n if (this.searchProperty()) {\n dynamicProperties.push(this);\n } else {\n this.getValue(true);\n }\n }\n\n TextProperty.prototype.setCurrentData = function (data) {\n var currentData = this.currentData;\n currentData.ascent = data.ascent;\n currentData.boxWidth = data.boxWidth ? data.boxWidth : currentData.boxWidth;\n currentData.f = data.f;\n currentData.fStyle = data.fStyle;\n currentData.fWeight = data.fWeight;\n currentData.fc = data.fc;\n currentData.j = data.j;\n currentData.justifyOffset = data.justifyOffset;\n currentData.l = data.l;\n currentData.lh = data.lh;\n currentData.lineWidths = data.lineWidths;\n currentData.ls = data.ls;\n currentData.of = data.of;\n currentData.s = data.s;\n currentData.sc = data.sc;\n currentData.sw = data.sw;\n currentData.t = data.t;\n currentData.tr = data.tr;\n currentData.fillColorAnim = data.fillColorAnim || currentData.fillColorAnim;\n currentData.strokeColorAnim = data.strokeColorAnim || currentData.strokeColorAnim;\n currentData.strokeWidthAnim = data.strokeWidthAnim || currentData.strokeWidthAnim;\n currentData.yOffset = data.yOffset;\n currentData.__complete = false;\n };\n\n TextProperty.prototype.searchProperty = function () {\n this.kf = this.data.d.k.length > 1;\n return this.kf;\n };\n\n TextProperty.prototype.getValue = function () {\n this.mdf = false;\n var frameId = this.elem.globalData.frameId;\n\n if ((frameId === this._frameId || !this.kf) && !this.firstFrame) {\n return;\n }\n\n var textKeys = this.data.d.k,\n textDocumentData;\n var i = 0,\n len = textKeys.length;\n\n while (i <= len - 1) {\n textDocumentData = textKeys[i].s;\n\n if (i === len - 1 || textKeys[i + 1].t > frameId) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n if (!textDocumentData.__complete) {\n this.completeTextData(textDocumentData);\n }\n\n this.setCurrentData(textDocumentData);\n this.mdf = this.firstFrame ? false : true;\n this.pv = this.v = this.currentData.t;\n this.keysIndex = i;\n }\n\n this._frameId = frameId;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i, len;\n var newLineFlag,\n index = 0,\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0,\n currentPos = 0,\n currentLine = 0,\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j, jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData,\n cLength = 0;\n var styles = fontData.fStyle.split(' ');\n var fWeight = 'normal',\n fStyle = 'normal';\n len = styles.length;\n var styleName;\n\n for (i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n }\n }\n\n documentData.fWeight = fWeight;\n documentData.fStyle = fStyle;\n len = documentData.t.length;\n var trackingOffset = documentData.tr / 1000 * documentData.s;\n\n if (documentData.sz) {\n var boxWidth = documentData.sz[0];\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n\n if (documentData.t.charAt(i) === ' ') {\n lastSpaceIndex = i;\n } else if (documentData.t.charCodeAt(i) === 13) {\n lineWidth = 0;\n newLineFlag = true;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.s / 100;\n } else {\n //tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(documentData.t.charAt(i), documentData.f, documentData.s);\n }\n\n if (lineWidth + cLength > boxWidth && documentData.t.charAt(i) !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n documentData.t = documentData.t.substr(0, i) + \"\\r\" + documentData.t.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n len = documentData.t.length;\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.t.charAt(i);\n\n if (currentChar === ' ') {\n val = \"\\xA0\";\n } else if (currentChar.charCodeAt(0) === 13) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = documentData.t.charAt(i);\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.s / 100;\n } else {\n //var charWidth = fontManager.measureText(val, documentData.f, documentData.s);\n //tCanvasHelper.font = documentData.s + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.s);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine\n });\n\n if (anchorGrouping == 2) {\n currentSize += cLength;\n\n if (val == '' || val == \"\\xA0\" || i == len - 1) {\n if (val == '' || val == \"\\xA0\") {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n currentSize += cLength;\n\n if (val == '' || i == len - 1) {\n if (val == '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a,\n animatorData,\n letterData;\n jLen = animators.length;\n var based,\n ind,\n indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val != '' || based == 2 && letterData.val != '' && letterData.val != \"\\xA0\" || based == 3 && (letterData.n || letterData.val == \"\\xA0\" || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1,\n newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.lh || documentData.s * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.s / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n dData.t = newData.t;\n this.keysIndex = -1;\n this.firstFrame = true;\n this.getValue();\n };\n\n var pooling = function () {\n function double(arr) {\n return arr.concat(Array.apply(null, {\n length: arr.length\n }));\n }\n\n return {\n double: double\n };\n }();\n\n var point_pool = function () {\n var ob = {\n newPoint: newPoint,\n release: release\n };\n var _length = 0;\n var _maxLength = 8;\n var pool = Array.apply(null, {\n length: _maxLength\n });\n\n function newPoint() {\n var point;\n\n if (_length) {\n _length -= 1;\n point = pool[_length];\n } else {\n point = [0.1, 0.1];\n }\n\n return point;\n }\n\n function release(point) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = point;\n _length += 1;\n }\n\n return ob;\n }();\n\n var shape_pool = function () {\n var ob = {\n clone: clone,\n newShape: newShape,\n release: release,\n releaseArray: releaseArray\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = Array.apply(null, {\n length: _maxLength\n });\n\n function newShape() {\n var shapePath;\n\n if (_length) {\n _length -= 1;\n shapePath = pool[_length];\n } else {\n shapePath = new ShapePath();\n }\n\n return shapePath;\n }\n\n function release(shapePath) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n var len = shapePath._length,\n i;\n\n for (i = 0; i < len; i += 1) {\n point_pool.release(shapePath.v[i]);\n point_pool.release(shapePath.i[i]);\n point_pool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n pool[_length] = shapePath;\n _length += 1;\n }\n\n function releaseArray(shapePathsCollection, length) {\n while (length--) {\n release(shapePathsCollection[length]);\n }\n }\n\n function clone(shape, transform) {\n var i,\n len = shape._length === undefined ? shape.v.length : shape._length;\n var cloned = newShape();\n cloned.setLength(len);\n cloned.c = shape.c;\n var pt;\n\n for (i = 0; i < len; i += 1) {\n if (transform) {\n pt = transform.applyToPointArray(shape.v[i][0], shape.v[i][1], 0, 2);\n cloned.setXYAt(pt[0], pt[1], 'v', i);\n point_pool.release(pt);\n pt = transform.applyToPointArray(shape.o[i][0], shape.o[i][1], 0, 2);\n cloned.setXYAt(pt[0], pt[1], 'o', i);\n point_pool.release(pt);\n pt = transform.applyToPointArray(shape.i[i][0], shape.i[i][1], 0, 2);\n cloned.setXYAt(pt[0], pt[1], 'i', i);\n point_pool.release(pt);\n } else {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n }\n\n return cloned;\n }\n\n return ob;\n }();\n\n var shapeCollection_pool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release,\n clone: clone\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = Array.apply(null, {\n length: _maxLength\n });\n var cont = 0;\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i,\n len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shape_pool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n function clone(shapeCollection, originCollection) {\n release(shapeCollection);\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i,\n len = this.layers.length,\n data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i--) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 99:\n return null;\n }\n\n return this.createBase(layer);\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i,\n len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i,\n len = newLayers.length;\n var j,\n jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id == newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n hierarchy = hierarchy || [];\n var elements = this.elements;\n var layers = this.layers;\n var i = 0,\n len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else if (layers[i].parent !== undefined) {\n hierarchy.push(elements[i]);\n elements[i]._isParent = true;\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n hierarchy.push(elements[i]);\n elements[i]._isParent = true;\n element.setHierarchy(hierarchy);\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1\n };\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\n viewBoxOnly: config && config.viewBoxOnly || false,\n className: config && config.className || ''\n };\n this.globalData.renderConfig = this.renderConfig;\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n }\n\n extendPrototype(BaseRenderer, SVGRenderer);\n\n SVGRenderer.prototype.createBase = function (data) {\n return new SVGBaseElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.createShape = function (data) {\n return new IShapeElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.createComp = function (data) {\n return new ICompElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.layerElement, this.globalData, this);\n };\n\n SVGRenderer.prototype.configAnimation = function (animData) {\n this.layerElement = document.createElementNS(svgNS, 'svg');\n this.layerElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.layerElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n\n if (!this.renderConfig.viewBoxOnly) {\n this.layerElement.setAttribute('width', animData.w);\n this.layerElement.setAttribute('height', animData.h);\n this.layerElement.style.width = '100%';\n this.layerElement.style.height = '100%';\n }\n\n if (this.renderConfig.className) {\n this.layerElement.setAttribute('class', this.renderConfig.className);\n }\n\n this.layerElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); //this.layerElement.style.transform = 'translate3d(0,0,0)';\n //this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.layerElement); //Mask animation\n\n var defs = document.createElementNS(svgNS, 'defs');\n this.globalData.defs = defs;\n this.layerElement.appendChild(defs);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.frameId = 0;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n this.data = animData;\n this.globalData.frameRate = animData.fr;\n var maskElement = document.createElementNS(svgNS, 'clipPath');\n var rect = document.createElementNS(svgNS, 'rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = 'animationMask_' + randomString(10);\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n var maskedElement = document.createElementNS(svgNS, 'g');\n maskedElement.setAttribute(\"clip-path\", \"url(\" + locationHref + \"#\" + maskId + \")\");\n this.layerElement.appendChild(maskedElement);\n defs.appendChild(maskElement);\n this.layerElement = maskedElement;\n this.layers = animData.layers;\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, defs);\n this.elements = Array.apply(null, {\n length: animData.layers.length\n });\n };\n\n SVGRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerHTML = '';\n this.layerElement = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRenderer.prototype.updateContainerSize = function () {};\n\n SVGRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (expressionsPlugin) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0,\n len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRenderer.prototype.renderFrame = function (num) {\n if (this.renderedFrame == num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } //clearPoints();\n\n /*console.log('-------');\r\n console.log('FRAME ',num);*/\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n var i,\n len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i--) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n for (i = len - 1; i >= 0; i--) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n SVGRenderer.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n SVGRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n var floatingContainer = document.createElementNS(svgNS, 'g');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions(); //comp.compInterface = CompExpressionInterface(comp);\n //Expressions.addLayersInterface(comp.elements, this.globalData.projectInterface);\n\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function MaskElement(data, element, globalData) {\n this.dynamicProperties = [];\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties;\n this.viewData = Array.apply(null, {\n length: this.masksProperties.length\n });\n this.maskElement = null;\n this.firstFrame = true;\n var defs = this.globalData.defs;\n var i,\n len = this.masksProperties.length;\n var path,\n properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j, jLen;\n var layerId = randomString(10);\n var rect, expansor, feMorph, x;\n var maskType = 'clipPath',\n maskRef = 'clip-path';\n\n for (i = 0; i < len; i++) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode == 's' || properties[i].mode == 'i') && count == 0) {\n rect = document.createElementNS(svgNS, 'rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w);\n rect.setAttribute('height', this.element.comp.data.h);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = document.createElementNS(svgNS, 'path');\n\n if (properties[i].mode == 'n') {\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.dynamicProperties),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3, this.dynamicProperties, null),\n elem: path\n };\n defs.appendChild(path);\n continue;\n }\n\n count += 1;\n\n if (properties[i].mode == 's') {\n path.setAttribute('fill', '#000000');\n } else {\n path.setAttribute('fill', '#ffffff');\n }\n\n path.setAttribute('clip-rule', 'nonzero');\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.dynamicProperties);\n var filterID = 'fi_' + randomString(10);\n expansor = document.createElementNS(svgNS, 'filter');\n expansor.setAttribute('id', filterID);\n feMorph = document.createElementNS(svgNS, 'feMorphology');\n feMorph.setAttribute('operator', 'dilate');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n\n if (properties[i].mode == 's') {\n path.setAttribute('stroke', '#000000');\n } else {\n path.setAttribute('stroke', '#ffffff');\n }\n } else {\n feMorph = null;\n x = null;\n }\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode == 'i') {\n jLen = currentMasks.length;\n var g = document.createElementNS(svgNS, 'g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = document.createElementNS(svgNS, 'mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + locationHref + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.dynamicProperties),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3, this.dynamicProperties, null)\n };\n\n if (rect) {\n this.viewData[i].invRect = rect;\n }\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n\n this.maskElement = document.createElementNS(svgNS, maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n this.maskElement.setAttribute('id', layerId);\n\n if (count > 0) {\n this.element.maskedElement.setAttribute(maskRef, \"url(\" + locationHref + \"#\" + layerId + \")\");\n }\n\n defs.appendChild(this.maskElement);\n }\n\n ;\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.prepareFrame = function () {\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n };\n\n MaskElement.prototype.renderFrame = function (finalMat) {\n var i,\n len = this.masksProperties.length;\n\n for (i = 0; i < len; i++) {\n if (this.viewData[i].prop.mdf || this.firstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op.mdf || this.firstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp.mdf || this.firstFrame)) {\n this.viewData[i].invRect.setAttribute('x', -finalMat.props[12]);\n this.viewData[i].invRect.setAttribute('y', -finalMat.props[13]);\n }\n\n if (this.storedData[i].x && (this.storedData[i].x.mdf || this.firstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n\n this.firstFrame = false;\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = \" M\" + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i, len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += \" C\" + bm_rnd(pathNodes.o[i - 1][0]) + ',' + bm_rnd(pathNodes.o[i - 1][1]) + \" \" + bm_rnd(pathNodes.i[i][0]) + ',' + bm_rnd(pathNodes.i[i][1]) + \" \" + bm_rnd(pathNodes.v[i][0]) + ',' + bm_rnd(pathNodes.v[i][1]);\n } //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += \" C\" + bm_rnd(pathNodes.o[i - 1][0]) + ',' + bm_rnd(pathNodes.o[i - 1][1]) + \" \" + bm_rnd(pathNodes.i[0][0]) + ',' + bm_rnd(pathNodes.i[0][1]) + \" \" + bm_rnd(pathNodes.v[0][0]) + ',' + bm_rnd(pathNodes.v[0][1]);\n } //pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n if (viewData.elem) {\n if (!pathNodes.c) {\n viewData.elem.setAttribute('d', '');\n } else if (pathData.inv) {\n viewData.elem.setAttribute('d', this.solidPath + pathString);\n } else {\n viewData.elem.setAttribute('d', pathString);\n }\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n function BaseElement() {}\n\n ;\n\n BaseElement.prototype.checkMasks = function () {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0,\n len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n };\n\n BaseElement.prototype.checkParenting = function () {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent);\n }\n };\n\n BaseElement.prototype.prepareFrame = function (num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isVisible !== true) {\n this.elemMdf = true;\n this.globalData.mdf = true;\n this.isVisible = true;\n this.firstFrame = true;\n\n if (this.data.hasMask) {\n this.maskManager.firstFrame = true;\n }\n }\n } else {\n if (this.isVisible !== false) {\n this.elemMdf = true;\n this.globalData.mdf = true;\n this.isVisible = false;\n }\n }\n\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.isVisible || this._isParent && this.dynamicProperties[i].type === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i].mdf) {\n this.elemMdf = true;\n this.globalData.mdf = true;\n }\n }\n }\n\n if (this.data.hasMask && this.isVisible) {\n this.maskManager.prepareFrame(num * this.data.sr);\n }\n /* TODO check this\r\n if(this.data.sy){\r\n if(this.data.sy[0].renderedData[num]){\r\n if(this.data.sy[0].renderedData[num].c){\r\n this.feFlood.setAttribute('flood-color','rgb('+Math.round(this.data.sy[0].renderedData[num].c[0])+','+Math.round(this.data.sy[0].renderedData[num].c[1])+','+Math.round(this.data.sy[0].renderedData[num].c[2])+')');\r\n }\r\n if(this.data.sy[0].renderedData[num].s){\r\n this.feMorph.setAttribute('radius',this.data.sy[0].renderedData[num].s);\r\n }\r\n }\r\n }\r\n */\n\n\n this.currentFrameNum = num * this.data.sr;\n return this.isVisible;\n };\n\n BaseElement.prototype.globalToLocal = function (pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i,\n len = transforms.length,\n ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); //ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n };\n\n BaseElement.prototype.initExpressions = function () {\n this.layerInterface = LayerExpressionInterface(this); //layers[i].layerInterface = LayerExpressionInterface(layers[i]);\n //layers[i].layerInterface = LayerExpressionInterface(layers[i]);\n\n if (this.data.hasMask) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface.createShapeInterface(this.shapesData, this.itemsData, this.layerInterface);\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n }\n };\n\n BaseElement.prototype.setBlendMode = function () {\n var blendModeValue = '';\n\n switch (this.data.bm) {\n case 1:\n blendModeValue = 'multiply';\n break;\n\n case 2:\n blendModeValue = 'screen';\n break;\n\n case 3:\n blendModeValue = 'overlay';\n break;\n\n case 4:\n blendModeValue = 'darken';\n break;\n\n case 5:\n blendModeValue = 'lighten';\n break;\n\n case 6:\n blendModeValue = 'color-dodge';\n break;\n\n case 7:\n blendModeValue = 'color-burn';\n break;\n\n case 8:\n blendModeValue = 'hard-light';\n break;\n\n case 9:\n blendModeValue = 'soft-light';\n break;\n\n case 10:\n blendModeValue = 'difference';\n break;\n\n case 11:\n blendModeValue = 'exclusion';\n break;\n\n case 12:\n blendModeValue = 'hue';\n break;\n\n case 13:\n blendModeValue = 'saturation';\n break;\n\n case 14:\n blendModeValue = 'color';\n break;\n\n case 15:\n blendModeValue = 'luminosity';\n break;\n }\n\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n };\n\n BaseElement.prototype.init = function () {\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n\n this.dynamicProperties = this.dynamicProperties || [];\n\n if (this.data.ef) {\n this.effects = new EffectsManager(this.data, this, this.dynamicProperties); //this.effect = this.effectsManager.bind(this.effectsManager);\n } //this.elemInterface = buildLayerExpressionInterface(this);\n\n\n this.hidden = false;\n this.firstFrame = true;\n this.isVisible = false;\n this._isParent = false;\n this.currentFrameNum = -99999;\n this.lastNum = -99999;\n\n if (this.data.ks) {\n this.finalTransform = {\n mProp: PropertyFactory.getProp(this, this.data.ks, 2, null, this.dynamicProperties),\n matMdf: false,\n opMdf: false,\n mat: new Matrix(),\n opacity: 1\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n this.finalTransform.op = this.finalTransform.mProp.o;\n this.transform = this.finalTransform.mProp;\n\n if (this.data.ty !== 11) {\n this.createElements();\n }\n\n if (this.data.hasMask) {\n this.addMasks(this.data);\n }\n }\n\n this.elemMdf = false;\n };\n\n BaseElement.prototype.getType = function () {\n return this.type;\n };\n\n BaseElement.prototype.resetHierarchy = function () {\n if (!this.hierarchy) {\n this.hierarchy = [];\n } else {\n this.hierarchy.length = 0;\n }\n };\n\n BaseElement.prototype.getHierarchy = function () {\n if (!this.hierarchy) {\n this.hierarchy = [];\n }\n\n return this.hierarchy;\n };\n\n BaseElement.prototype.setHierarchy = function (hierarchy) {\n this.hierarchy = hierarchy;\n };\n\n BaseElement.prototype.getLayerSize = function () {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n } else {\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n BaseElement.prototype.hide = function () {};\n\n BaseElement.prototype.sourceRectAtTime = function () {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n };\n\n BaseElement.prototype.mHelper = new Matrix();\n\n function SVGBaseElement(data, parentContainer, globalData, comp, placeholder) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.matteElement = null;\n this.transformedElement = null;\n this.isTransparent = false;\n this.parentContainer = parentContainer;\n this.layerId = placeholder ? placeholder.layerId : 'ly_' + randomString(10);\n this.placeholder = placeholder;\n this._sizeChanged = false;\n this.init();\n }\n\n ;\n createElement(BaseElement, SVGBaseElement);\n\n SVGBaseElement.prototype.createElements = function () {\n this.layerElement = document.createElementNS(svgNS, 'g');\n this.transformedElement = this.layerElement;\n\n if (this.data.hasMask) {\n this.maskedElement = this.layerElement;\n }\n\n var layerElementParent = null;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = document.createElementNS(svgNS, 'mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha');\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); ////// This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n masker.setAttribute('mask-type', 'luminance');\n var filId = randomString(10);\n var fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n var gg = document.createElementNS(svgNS, 'g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n var maskGroup = document.createElementNS(svgNS, 'mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = document.createElementNS(svgNS, 'g');\n maskGroup.appendChild(maskGrouper);\n var filId = randomString(10);\n var fil = filtersFactory.createFilter(filId); ////\n\n var feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\n fil.appendChild(feColorMatrix); ////\n\n /*var feCTr = document.createElementNS(svgNS,'feComponentTransfer');\r\n feCTr.setAttribute('in','SourceGraphic');\r\n fil.appendChild(feCTr);\r\n var feFunc = document.createElementNS(svgNS,'feFuncA');\r\n feFunc.setAttribute('type','table');\r\n feFunc.setAttribute('tableValues','1.0 0.0');\r\n feCTr.appendChild(feFunc);*/\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = document.createElementNS(svgNS, 'rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n var gg = document.createElementNS(svgNS, 'g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.hasMask || this.data.tt) {\n if (this.data.tt) {\n this.matteElement = document.createElementNS(svgNS, 'g');\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n } else {\n this.baseElement = this.layerElement;\n }\n\n if ((this.data.ln || this.data.cl) && (this.data.ty === 4 || this.data.ty === 0)) {\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n }\n\n if (this.data.ty === 0) {\n var cp = document.createElementNS(svgNS, 'clipPath');\n var pt = document.createElementNS(svgNS, 'path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0' + ' L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = 'cp_' + randomString(8);\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = document.createElementNS(svgNS, 'g');\n cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n\n if (this.layerElement !== this.parentContainer) {\n this.placeholder = null;\n }\n /* Todo performance killer\r\n if(this.data.sy){\r\n var filterID = 'st_'+randomString(10);\r\n var c = this.data.sy[0].c.k;\r\n var r = this.data.sy[0].s.k;\r\n var expansor = document.createElementNS(svgNS,'filter');\r\n expansor.setAttribute('id',filterID);\r\n var feFlood = document.createElementNS(svgNS,'feFlood');\r\n this.feFlood = feFlood;\r\n if(!c[0].e){\r\n feFlood.setAttribute('flood-color','rgb('+c[0]+','+c[1]+','+c[2]+')');\r\n }\r\n feFlood.setAttribute('result','base');\r\n expansor.appendChild(feFlood);\r\n var feMorph = document.createElementNS(svgNS,'feMorphology');\r\n feMorph.setAttribute('operator','dilate');\r\n feMorph.setAttribute('in','SourceGraphic');\r\n feMorph.setAttribute('result','bigger');\r\n this.feMorph = feMorph;\r\n if(!r.length){\r\n feMorph.setAttribute('radius',this.data.sy[0].s.k);\r\n }\r\n expansor.appendChild(feMorph);\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('result','mask');\r\n feColorMatrix.setAttribute('in','bigger');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('values','0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0');\r\n expansor.appendChild(feColorMatrix);\r\n var feComposite = document.createElementNS(svgNS,'feComposite');\r\n feComposite.setAttribute('result','drop');\r\n feComposite.setAttribute('in','base');\r\n feComposite.setAttribute('in2','mask');\r\n feComposite.setAttribute('operator','in');\r\n expansor.appendChild(feComposite);\r\n var feBlend = document.createElementNS(svgNS,'feBlend');\r\n feBlend.setAttribute('in','SourceGraphic');\r\n feBlend.setAttribute('in2','drop');\r\n feBlend.setAttribute('mode','normal');\r\n expansor.appendChild(feBlend);\r\n this.globalData.defs.appendChild(expansor);\r\n var cont = document.createElementNS(svgNS,'g');\r\n if(this.layerElement === this.parentContainer){\r\n this.layerElement = cont;\r\n }else{\r\n cont.appendChild(this.layerElement);\r\n }\r\n cont.setAttribute('filter','url(#'+filterID+')');\r\n if(this.data.td){\r\n cont.setAttribute('data-td',this.data.td);\r\n }\r\n if(this.data.td == 3){\r\n this.globalData.defs.appendChild(cont);\r\n }else if(this.data.td == 2){\r\n maskGrouper.appendChild(cont);\r\n }else if(this.data.td == 1){\r\n masker.appendChild(cont);\r\n }else{\r\n if(this.data.hasMask && this.data.tt){\r\n this.matteElement.appendChild(cont);\r\n }else{\r\n this.appendNodeToParent(cont);\r\n }\r\n }\r\n }*/\n\n\n if (this.data.ef) {\n this.effectsManager = new SVGEffects(this);\n }\n\n this.checkParenting();\n };\n\n SVGBaseElement.prototype.setBlendMode = BaseElement.prototype.setBlendMode;\n\n SVGBaseElement.prototype.renderFrame = function (parentTransform) {\n if (this.data.ty === 3 || this.data.hd || !this.isVisible) {\n return false;\n }\n\n this.lastNum = this.currentFrameNum;\n this.finalTransform.opMdf = this.firstFrame || this.finalTransform.op.mdf;\n this.finalTransform.matMdf = this.firstFrame || this.finalTransform.mProp.mdf;\n this.finalTransform.opacity = this.finalTransform.op.v;\n var mat;\n var finalMat = this.finalTransform.mat;\n\n if (this.hierarchy) {\n var i = 0,\n len = this.hierarchy.length;\n\n if (!this.finalTransform.matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp.mdf) {\n this.finalTransform.matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform.matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n } else if (this.isVisible) {\n finalMat = this.finalTransform.mProp.v;\n }\n\n if (this.finalTransform.matMdf && this.layerElement) {\n this.transformedElement.setAttribute('transform', finalMat.to2dCSS());\n }\n\n if (this.finalTransform.opMdf && this.layerElement) {\n if (this.finalTransform.op.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.hidden && this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n\n this.transformedElement.setAttribute('opacity', this.finalTransform.op.v);\n }\n\n if (this.data.hasMask) {\n this.maskManager.renderFrame(finalMat);\n }\n\n if (this.effectsManager) {\n this.effectsManager.renderFrame(this.firstFrame);\n }\n\n return this.isVisible;\n };\n\n SVGBaseElement.prototype.destroy = function () {\n this.layerElement = null;\n this.parentContainer = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n }\n };\n\n SVGBaseElement.prototype.getBaseElement = function () {\n return this.baseElement;\n };\n\n SVGBaseElement.prototype.addMasks = function (data) {\n this.maskManager = new MaskElement(data, this, this.globalData);\n };\n\n SVGBaseElement.prototype.setMatte = function (id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute(\"mask\", \"url(\" + locationHref + \"#\" + id + \")\");\n };\n\n SVGBaseElement.prototype.hide = function () {\n if (!this.hidden) {\n this.layerElement.style.display = 'none';\n this.hidden = true;\n }\n };\n\n SVGBaseElement.prototype.show = function () {\n if (this.isVisible && !this.isTransparent) {\n this.hidden = false;\n this.layerElement.style.display = 'block';\n }\n };\n\n function IShapeElement(data, parentContainer, globalData, comp, placeholder) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(SVGBaseElement, IShapeElement);\n IShapeElement.prototype.identityMatrix = new Matrix();\n IShapeElement.prototype.lcEnum = {\n '1': 'butt',\n '2': 'round',\n '3': 'square'\n };\n IShapeElement.prototype.ljEnum = {\n '1': 'miter',\n '2': 'round',\n '3': 'butt'\n };\n\n IShapeElement.prototype.searchProcessedElement = function (elem) {\n var i = this.processedElements.length;\n\n while (i) {\n i -= 1;\n\n if (this.processedElements[i].elem === elem) {\n return this.processedElements[i].pos;\n }\n }\n\n return 0;\n };\n\n IShapeElement.prototype.addProcessedElement = function (elem, pos) {\n var i = this.processedElements.length;\n\n while (i) {\n i -= 1;\n\n if (this.processedElements[i].elem === elem) {\n this.processedElements[i].pos = pos;\n break;\n }\n }\n\n if (i === 0) {\n this.processedElements.push({\n elem: elem,\n pos: pos\n });\n }\n };\n\n IShapeElement.prototype.buildExpressionInterface = function () {};\n\n IShapeElement.prototype.createElements = function () {\n //TODO check if I can use symbol so i can set its viewBox\n this._parent.createElements.call(this);\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, this.dynamicProperties, 0, [], true);\n\n if (!this.data.hd || this.data.td) {\n styleUnselectableDiv(this.layerElement);\n }\n };\n\n IShapeElement.prototype.setGradientData = function (pathElement, arr, data) {\n var gradientId = 'gr_' + randomString(10);\n var gfill;\n\n if (arr.t === 1) {\n gfill = document.createElementNS(svgNS, 'linearGradient');\n } else {\n gfill = document.createElementNS(svgNS, 'radialGradient');\n }\n\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop, j, jLen;\n jLen = arr.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = document.createElementNS(svgNS, 'stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(arr.ty === 'gf' ? 'fill' : 'stroke', 'url(#' + gradientId + ')');\n this.globalData.defs.appendChild(gfill);\n data.gf = gfill;\n data.cst = stops;\n };\n\n IShapeElement.prototype.setGradientOpacity = function (arr, data, styleOb) {\n if (arr.g.k.k[0].s && arr.g.k.k[0].s.length > arr.g.p * 4 || arr.g.k.k.length > arr.g.p * 4) {\n var opFill;\n var stop, j, jLen;\n var mask = document.createElementNS(svgNS, \"mask\");\n var maskElement = document.createElementNS(svgNS, 'path');\n mask.appendChild(maskElement);\n var opacityId = 'op_' + randomString(10);\n var maskId = 'mk_' + randomString(10);\n mask.setAttribute('id', maskId);\n\n if (arr.t === 1) {\n opFill = document.createElementNS(svgNS, 'linearGradient');\n } else {\n opFill = document.createElementNS(svgNS, 'radialGradient');\n }\n\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = arr.g.k.k[0].s ? arr.g.k.k[0].s.length : arr.g.k.k.length;\n var stops = [];\n\n for (j = arr.g.p * 4; j < jLen; j += 2) {\n stop = document.createElementNS(svgNS, 'stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)'); //stop.setAttribute('offset',Math.round(arr.y[j][0]*100)+'%');\n //stop.setAttribute('style','stop-color:rgb(255,255,255);stop-opacity:'+arr.y[j][1]);\n\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(arr.ty === 'gf' ? 'fill' : 'stroke', 'url(#' + opacityId + ')');\n this.globalData.defs.appendChild(opFill);\n this.globalData.defs.appendChild(mask);\n data.of = opFill;\n data.ost = stops;\n styleOb.msElem = maskElement;\n return maskId;\n }\n };\n\n IShapeElement.prototype.createStyleElement = function (data, level, dynamicProperties) {\n var elementData = {};\n var styleOb = {\n data: data,\n type: data.ty,\n d: '',\n ld: '',\n lvl: level,\n mdf: false,\n closed: false\n };\n var pathElement = document.createElementNS(svgNS, \"path\");\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, dynamicProperties);\n\n if (data.ty == 'st' || data.ty == 'gs') {\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round'); ////pathElement.style.strokeLinecap = this.lcEnum[data.lc] || 'round';\n\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round'); ////pathElement.style.strokeLinejoin = this.ljEnum[data.lj] || 'round';\n\n pathElement.setAttribute('fill-opacity', '0'); ////pathElement.style.fillOpacity = 0;\n\n if (data.lj == 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml); ////pathElement.style.strokeMiterlimit = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, dynamicProperties);\n\n if (data.d) {\n var d = PropertyFactory.getDashProp(this, data.d, 'svg', dynamicProperties);\n\n if (!d.k) {\n pathElement.setAttribute('stroke-dasharray', d.dasharray); ////pathElement.style.strokeDasharray = d.dasharray;\n\n pathElement.setAttribute('stroke-dashoffset', d.dashoffset); ////pathElement.style.strokeDashoffset = d.dashoffset;\n }\n\n elementData.d = d;\n }\n }\n\n if (data.ty == 'fl' || data.ty == 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, dynamicProperties);\n } else {\n elementData.g = PropertyFactory.getGradientProp(this, data.g, dynamicProperties);\n\n if (data.t == 2) {\n elementData.h = PropertyFactory.getProp(this, data.h, 0, 0.01, dynamicProperties);\n elementData.a = PropertyFactory.getProp(this, data.a, 0, degToRads, dynamicProperties);\n }\n\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, dynamicProperties);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, dynamicProperties);\n this.setGradientData(pathElement, data, elementData, styleOb);\n var maskId = this.setGradientOpacity(data, elementData, styleOb);\n\n if (maskId) {\n pathElement.setAttribute('mask', 'url(#' + maskId + ')');\n }\n }\n\n elementData.elem = pathElement; //container.appendChild(pathElement);\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n styleOb.pElem = pathElement;\n this.stylesList.push(styleOb);\n elementData.style = styleOb;\n return elementData;\n };\n\n IShapeElement.prototype.createGroupElement = function (data) {\n var elementData = {\n it: [],\n prevViewData: []\n };\n var g = document.createElementNS(svgNS, 'g');\n elementData.gr = g;\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n return elementData;\n };\n\n IShapeElement.prototype.createTransformElement = function (data, dynamicProperties) {\n var elementData = {\n transform: {\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, dynamicProperties),\n mProps: PropertyFactory.getProp(this, data, 2, null, dynamicProperties)\n },\n elements: []\n };\n return elementData;\n };\n\n IShapeElement.prototype.createShapeElement = function (data, ownTransformers, level, dynamicProperties) {\n var elementData = {\n elements: [],\n caches: [],\n styles: [],\n transformers: ownTransformers,\n lStr: ''\n };\n var ty = 4;\n\n if (data.ty == 'rc') {\n ty = 5;\n } else if (data.ty == 'el') {\n ty = 6;\n } else if (data.ty == 'sr') {\n ty = 7;\n }\n\n elementData.sh = ShapePropertyFactory.getShapeProp(this, data, ty, dynamicProperties);\n elementData.lvl = level;\n this.shapes.push(elementData.sh);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n var cont = 0;\n\n IShapeElement.prototype.setElementStyles = function () {\n var j,\n jLen = this.stylesList.length;\n var arr = [];\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n\n return arr;\n };\n\n IShapeElement.prototype.reloadShapes = function () {\n this.firstFrame = true;\n var i,\n len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, this.dynamicProperties, 0, [], true);\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n IShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, dynamicProperties, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i,\n len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n styleOb,\n currentTransform,\n modifier,\n processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level, dynamicProperties);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n container.appendChild(itemsData[i].elem);\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty == 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, dynamicProperties, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n container.appendChild(itemsData[i].gr);\n }\n } else if (arr[i].ty == 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], dynamicProperties);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level, dynamicProperties);\n }\n\n itemsData[i].elements = this.setElementStyles();\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i], dynamicProperties);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty == 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData, dynamicProperties);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n IShapeElement.prototype.addShapeToModifiers = function (data) {\n var i,\n len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n };\n\n IShapeElement.prototype.renderModifiers = function () {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i,\n len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].reset();\n }\n\n len = this.shapeModifiers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.shapeModifiers[i].processShapes(this.firstFrame);\n }\n };\n\n IShapeElement.prototype.renderFrame = function (parentMatrix) {\n //this.reloadShapes();\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n if (this.hidden) {\n this.layerElement.style.display = 'block';\n this.hidden = false;\n }\n\n this.renderModifiers();\n var i,\n len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].d = '';\n this.stylesList[i].mdf = false;\n }\n\n this.renderShape(this.shapesData, this.itemsData, null);\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i].ld === '0') {\n this.stylesList[i].ld = '1';\n this.stylesList[i].pElem.style.display = 'block'; //this.stylesList[i].parent.appendChild(this.stylesList[i].pElem);\n }\n\n if (this.stylesList[i].mdf || this.firstFrame) {\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d);\n\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n }\n }\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n IShapeElement.prototype.hide = function () {\n if (!this.hidden) {\n this.layerElement.style.display = 'none';\n var i,\n len = this.stylesList.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.stylesList[i].ld !== '0') {\n this.stylesList[i].ld = '0';\n this.stylesList[i].pElem.style.display = 'none';\n\n if (this.stylesList[i].pElem.parentNode) {\n this.stylesList[i].parent = this.stylesList[i].pElem.parentNode; //this.stylesList[i].pElem.parentNode.removeChild(this.stylesList[i].pElem);\n }\n }\n }\n\n this.hidden = true;\n }\n };\n\n IShapeElement.prototype.renderShape = function (items, data, container) {\n var i,\n len = items.length - 1;\n var ty;\n\n for (i = len; i >= 0; i -= 1) {\n ty = items[i].ty;\n\n if (ty == 'tr') {\n if (this.firstFrame || data[i].transform.op.mdf && container) {\n container.setAttribute('opacity', data[i].transform.op.v);\n }\n\n if (this.firstFrame || data[i].transform.mProps.mdf && container) {\n container.setAttribute('transform', data[i].transform.mProps.v.to2dCSS());\n }\n } else if (ty == 'sh' || ty == 'el' || ty == 'rc' || ty == 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (ty == 'fl') {\n this.renderFill(items[i], data[i]);\n } else if (ty == 'gf') {\n this.renderGradient(items[i], data[i]);\n } else if (ty == 'gs') {\n this.renderGradient(items[i], data[i]);\n this.renderStroke(items[i], data[i]);\n } else if (ty == 'st') {\n this.renderStroke(items[i], data[i]);\n } else if (ty == 'gr') {\n this.renderShape(items[i].it, data[i].it, data[i].gr);\n } else if (ty == 'tm') {//\n }\n }\n };\n\n IShapeElement.prototype.buildShapeString = function (pathNodes, length, closed, mat) {\n var i,\n shapeString = '';\n\n for (i = 1; i < length; i += 1) {\n if (i === 1) {\n shapeString += \" M\" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\n }\n\n shapeString += \" C\" + mat.applyToPointStringified(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1]) + \" \" + mat.applyToPointStringified(pathNodes.i[i][0], pathNodes.i[i][1]) + \" \" + mat.applyToPointStringified(pathNodes.v[i][0], pathNodes.v[i][1]);\n }\n\n if (length === 1) {\n shapeString += \" M\" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\n }\n\n if (closed && length) {\n shapeString += \" C\" + mat.applyToPointStringified(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1]) + \" \" + mat.applyToPointStringified(pathNodes.i[0][0], pathNodes.i[0][1]) + \" \" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n IShapeElement.prototype.renderPath = function (pathData, itemData) {\n var len,\n i,\n j,\n jLen,\n pathStringTransformed,\n redraw,\n pathNodes,\n l,\n lLen = itemData.elements.length;\n var lvl = itemData.lvl;\n\n if (!pathData._render) {\n return;\n }\n\n for (l = 0; l < lLen; l += 1) {\n if (itemData.elements[l].data._render) {\n redraw = itemData.sh.mdf || this.firstFrame;\n pathStringTransformed = 'M0 0';\n var paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (itemData.elements[l].lvl < lvl) {\n var mat = this.mHelper.reset(),\n props;\n var iterations = lvl - itemData.elements[l].lvl;\n var k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n redraw = itemData.transformers[k].mProps.mdf || redraw;\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations--;\n k--;\n }\n\n if (redraw) {\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += this.buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n } else {\n if (redraw) {\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += this.buildShapeString(pathNodes, pathNodes._length, pathNodes.c, this.identityMatrix);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n }\n\n itemData.elements[l].d += pathStringTransformed;\n itemData.elements[l].mdf = redraw || itemData.elements[l].mdf;\n } else {\n itemData.elements[l].mdf = true;\n }\n }\n };\n\n IShapeElement.prototype.renderFill = function (styleData, itemData) {\n var styleElem = itemData.style;\n\n if (itemData.c.mdf || this.firstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')'); ////styleElem.pElem.style.fill = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\n }\n\n if (itemData.o.mdf || this.firstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n };\n\n IShapeElement.prototype.renderGradient = function (styleData, itemData) {\n var gfill = itemData.gf;\n var opFill = itemData.of;\n var pt1 = itemData.s.v,\n pt2 = itemData.e.v;\n\n if (itemData.o.mdf || this.firstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.elem.setAttribute(attr, itemData.o.v);\n } //clippedElement.setAttribute('transform','matrix(1,0,0,1,-100,0)');\n\n\n if (itemData.s.mdf || this.firstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (opFill) {\n opFill.setAttribute(attr1, pt1[0]);\n opFill.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops, i, len, stop;\n\n if (itemData.g.cmdf || this.firstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (opFill && (itemData.g.omdf || this.firstFrame)) {\n stops = itemData.ost;\n var oValues = itemData.g.o;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', oValues[i * 2] + '%');\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e.mdf || this.firstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (opFill) {\n opFill.setAttribute('x2', pt2[0]);\n opFill.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s.mdf || itemData.e.mdf || this.firstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (opFill) {\n opFill.setAttribute('r', rad);\n }\n }\n\n if (itemData.e.mdf || itemData.h.mdf || itemData.a.mdf || this.firstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (opFill) {\n opFill.setAttribute('fx', x);\n opFill.setAttribute('fy', y);\n }\n } //gfill.setAttribute('fy','200');\n\n }\n };\n\n IShapeElement.prototype.renderStroke = function (styleData, itemData) {\n var styleElem = itemData.style; //TODO fix dashes\n\n var d = itemData.d;\n var dasharray, dashoffset;\n\n if (d && d.k && (d.mdf || this.firstFrame)) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dasharray); ////styleElem.pElem.style.strokeDasharray = d.dasharray;\n\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset); ////styleElem.pElem.style.strokeDashoffset = d.dashoffset;\n }\n\n if (itemData.c && (itemData.c.mdf || this.firstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')'); ////styleElem.pElem.style.stroke = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\n }\n\n if (itemData.o.mdf || this.firstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w.mdf || this.firstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n } ////styleElem.pElem.style.strokeWidth = itemData.w.v;\n\n }\n };\n\n IShapeElement.prototype.destroy = function () {\n this._parent.destroy.call(this._parent);\n\n this.shapeData = null;\n this.itemsData = null;\n this.parentContainer = null;\n this.placeholder = null;\n };\n\n function ITextElement(data, animationItem, parentContainer, globalData) {}\n\n ITextElement.prototype.init = function () {\n this.lettersChangedFlag = true;\n this.dynamicProperties = this.dynamicProperties || [];\n this.textAnimator = new TextAnimatorProperty(this.data.t, this.renderType, this);\n this.textProperty = new TextProperty(this, this.data.t, this.dynamicProperties);\n\n this._parent.init.call(this);\n\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._parent.prepareFrame.call(this, num);\n\n if (this.textProperty.mdf || this.textProperty.firstFrame) {\n this.buildNewText();\n this.textProperty.firstFrame = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j,\n jLen = shapes.length;\n var k, kLen, pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = shapes[j].ks.k;\n shapeStr += this.buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.buildShapeString = IShapeElement.prototype.buildShapeString;\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {\n this._parent.destroy.call(this._parent);\n };\n\n function SVGTextElement(data, parentContainer, globalData, comp, placeholder) {\n this.textSpans = [];\n this.renderType = 'svg';\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(SVGBaseElement, SVGTextElement);\n extendPrototype(ITextElement, SVGTextElement);\n\n SVGTextElement.prototype.createElements = function () {\n this._parent.createElements.call(this);\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = document.createElementNS(svgNS, 'text');\n }\n };\n\n SVGTextElement.prototype.buildNewText = function () {\n var i, len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = Array.apply(null, {\n length: documentData ? documentData.l.length : 0\n });\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.s);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight,\n fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n var letters = documentData.l || [];\n var usesGlyphs = this.globalData.fontManager.chars;\n len = letters.length;\n\n if (!len) {\n return;\n }\n\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapes,\n shapeStr = '',\n singleShape = this.data.singleShape;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var trackingOffset = documentData.tr / 1000 * documentData.s;\n\n if (singleShape && !usesGlyphs) {\n var tElement = this.textContainer;\n var justify = '';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n case 2:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = documentData.t.split(String.fromCharCode(13));\n len = textContent.length;\n var yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i] || document.createElementNS(svgNS, 'tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n this.textSpans[i] = tSpan;\n yPos += documentData.lh;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData, charData;\n\n for (i = 0; i < len; i += 1) {\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i] : document.createElementNS(svgNS, usesGlyphs ? 'path' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i] = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (usesGlyphs) {\n matrixHelper.scale(documentData.s / 100, documentData.s / 100);\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; //xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n\n if (!singleShape) {\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\n } else {\n shapeStr += this.createPathShape(matrixHelper, shapes);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n } //\n\n }\n\n if (singleShape) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextElement.prototype.sourceRectAtTime = function (time) {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderLetters();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextElement.prototype.renderLetters = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i, len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\n\n if (renderedLetter.mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter.mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter.mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n };\n\n SVGTextElement.prototype.renderFrame = function (parentMatrix) {\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n if (this.hidden) {\n this.show();\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n\n this.renderLetters();\n };\n\n function SVGTintFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\n var feMerge = document.createElementNS(svgNS, 'feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = document.createElementNS(svgNS, 'feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n feMerge.appendChild(feMergeNode);\n feMergeNode = document.createElementNS(svgNS, 'feMergeNode');\n feMergeNode.setAttribute('in', 'f2');\n feMerge.appendChild(feMergeNode);\n }\n }\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager.mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager.mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(elem, filterManager) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path, groupPath, i, len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = document.createElementNS(svgNS, 'g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = document.createElementNS(svgNS, 'path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = document.createElementNS(svgNS, 'mask');\n var id = 'stms_' + randomString(10);\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = document.createElementNS(svgNS, 'g');\n g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\n\n if (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i,\n len = this.paths.length;\n var mask, path;\n\n for (i = 0; i < len; i += 1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager.mdf || mask.prop.mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p.mdf || this.filterManager.effectElements[4].p.mdf || this.filterManager.effectElements[7].p.mdf || this.filterManager.effectElements[8].p.mdf || mask.prop.mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p.mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p.mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p.mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bm_floor(color[0] * 255) + ',' + bm_floor(color[1] * 255) + ',' + bm_floor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = document.createElementNS(svgNS, 'feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f1');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = document.createElementNS(svgNS, 'feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = document.createElementNS(svgNS, 'feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = document.createElementNS(svgNS, 'feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = document.createElementNS(svgNS, 'feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager.mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB); //var opacity = this.filterManager.effectElements[2].p.v/100;\n //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = document.createElementNS(svgNS, 'feComponentTransfer');\n var feFuncR, feFuncG, feFuncB;\n\n if (effectElements[9].p.k || effectElements[9].p.v !== 0 || effectElements[10].p.k || effectElements[10].p.v !== 1 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 0 || effectElements[13].p.k || effectElements[13].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n }\n\n if (effectElements[16].p.k || effectElements[16].p.v !== 0 || effectElements[17].p.k || effectElements[17].p.v !== 1 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 0 || effectElements[20].p.k || effectElements[20].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n }\n\n if (effectElements[23].p.k || effectElements[23].p.v !== 0 || effectElements[24].p.k || effectElements[24].p.v !== 1 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 0 || effectElements[27].p.k || effectElements[27].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n\n if (effectElements[30].p.k || effectElements[30].p.v !== 0 || effectElements[31].p.k || effectElements[31].p.v !== 1 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 0 || effectElements[34].p.k || effectElements[34].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n }\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n feComponentTransfer = document.createElementNS(svgNS, 'feComponentTransfer');\n }\n\n if (effectElements[2].p.k || effectElements[2].p.v !== 0 || effectElements[3].p.k || effectElements[3].p.v !== 1 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 0 || effectElements[6].p.k || effectElements[6].p.v !== 1) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = document.createElementNS(svgNS, type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos++] = colorValue;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager.mdf) {\n var val, cnt, perc, bezier;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[2].p.mdf || effectElements[3].p.mdf || effectElements[4].p.mdf || effectElements[5].p.mdf || effectElements[6].p.mdf)) {\n val = this.getTableValue(effectElements[2].p.v, effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[9].p.mdf || effectElements[10].p.mdf || effectElements[11].p.mdf || effectElements[12].p.mdf || effectElements[13].p.mdf)) {\n val = this.getTableValue(effectElements[9].p.v, effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[16].p.mdf || effectElements[17].p.mdf || effectElements[18].p.mdf || effectElements[19].p.mdf || effectElements[20].p.mdf)) {\n val = this.getTableValue(effectElements[16].p.v, effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[23].p.mdf || effectElements[24].p.mdf || effectElements[25].p.mdf || effectElements[26].p.mdf || effectElements[27].p.mdf)) {\n val = this.getTableValue(effectElements[23].p.v, effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[30].p.mdf || effectElements[31].p.mdf || effectElements[32].p.mdf || effectElements[33].p.mdf || effectElements[34].p.mdf)) {\n val = this.getTableValue(effectElements[30].p.v, effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager) {\n /* \r\n \r\n \r\n \r\n \r\n */\n\n /**/\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '400%');\n filter.setAttribute('height', '400%');\n this.filterManager = filterManager;\n var feGaussianBlur = document.createElementNS(svgNS, 'feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', 'drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = document.createElementNS(svgNS, 'feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', 'drop_shadow_1');\n feOffset.setAttribute('result', 'drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = document.createElementNS(svgNS, 'feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', 'drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = document.createElementNS(svgNS, 'feComposite');\n feComposite.setAttribute('in', 'drop_shadow_3');\n feComposite.setAttribute('in2', 'drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', 'drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = document.createElementNS(svgNS, 'feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = document.createElementNS(svgNS, 'feMergeNode');\n feMerge.appendChild(feMergeNode);\n feMergeNode = document.createElementNS(svgNS, 'feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n this.feMergeNode = feMergeNode;\n this.feMerge = feMerge;\n this.originalNodeAdded = false;\n feMerge.appendChild(feMergeNode);\n }\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager.mdf) {\n if (forceRender || this.filterManager.effectElements[4].p.mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p.mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p.mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p.mdf || this.filterManager.effectElements[3].p.mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n /*if(forceRender || this.filterManager.effectElements[5].p.mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n }*/\n\n }\n };\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = document.createElementNS(svgNS, 'g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n var masker = document.createElementNS(svgNS, 'mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n masker.appendChild(mask.layerElement);\n elem.setMatte(mask.layerId);\n mask.data.hd = false;\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var i = 0,\n len = this.elem.comp.elements.length;\n\n while (i < len) {\n if (this.elem.comp.elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, this.elem.comp.elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGEffects(elem) {\n var i,\n len = elem.data.ef.length;\n var filId = randomString(10);\n var fil = filtersFactory.createFilter(filId);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n if (elem.data.ef[i].ty === 20) {\n count += 1;\n filterManager = new SVGTintFilter(fil, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 21) {\n count += 1;\n filterManager = new SVGFillFilter(fil, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 22) {\n filterManager = new SVGStrokeEffect(elem, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 23) {\n count += 1;\n filterManager = new SVGTritoneFilter(fil, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 24) {\n count += 1;\n filterManager = new SVGProLevelsFilter(fil, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 25) {\n count += 1;\n filterManager = new SVGDropShadowEffect(fil, elem.effects.effectElements[i]);\n this.filters.push(filterManager);\n } else if (elem.data.ef[i].ty === 28) {\n //count += 1;\n filterManager = new SVGMatte3Effect(fil, elem.effects.effectElements[i], elem);\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n }\n\n SVGEffects.prototype.renderFrame = function (firstFrame) {\n var i,\n len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(firstFrame);\n }\n };\n\n function ICompElement(data, parentContainer, globalData, comp, placeholder) {\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? Array.apply(null, {\n length: this.layers.length\n }) : [];\n\n if (this.data.tm) {\n this.tm = PropertyFactory.getProp(this, this.data.tm, 0, globalData.frameRate, this.dynamicProperties);\n }\n\n if (this.data.xt) {\n this.layerElement = document.createElementNS(svgNS, 'g');\n this.buildAllItems();\n } else if (!globalData.progressiveLoad) {\n this.buildAllItems();\n }\n }\n\n createElement(SVGBaseElement, ICompElement);\n\n ICompElement.prototype.hide = function () {\n if (!this.hidden) {\n this._parent.hide.call(this);\n\n var i,\n len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].hide();\n }\n }\n }\n };\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._parent.prepareFrame.call(this, num);\n\n if (this.isVisible === false && !this.data.xt) {\n return;\n }\n\n if (this.tm) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i,\n len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n }\n }\n };\n\n ICompElement.prototype.renderFrame = function (parentMatrix) {\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n var i,\n len = this.layers.length;\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n if (this.hidden) {\n this.show();\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroy = function () {\n this._parent.destroy.call(this._parent);\n\n var i,\n len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.checkLayers = SVGRenderer.prototype.checkLayers;\n ICompElement.prototype.buildItem = SVGRenderer.prototype.buildItem;\n ICompElement.prototype.buildAllItems = SVGRenderer.prototype.buildAllItems;\n ICompElement.prototype.buildElementParenting = SVGRenderer.prototype.buildElementParenting;\n ICompElement.prototype.createItem = SVGRenderer.prototype.createItem;\n ICompElement.prototype.createImage = SVGRenderer.prototype.createImage;\n ICompElement.prototype.createComp = SVGRenderer.prototype.createComp;\n ICompElement.prototype.createSolid = SVGRenderer.prototype.createSolid;\n ICompElement.prototype.createShape = SVGRenderer.prototype.createShape;\n ICompElement.prototype.createText = SVGRenderer.prototype.createText;\n ICompElement.prototype.createBase = SVGRenderer.prototype.createBase;\n ICompElement.prototype.appendElementInPos = SVGRenderer.prototype.appendElementInPos;\n ICompElement.prototype.checkPendingElements = SVGRenderer.prototype.checkPendingElements;\n ICompElement.prototype.addPendingElement = SVGRenderer.prototype.addPendingElement;\n\n function IImageElement(data, parentContainer, globalData, comp, placeholder) {\n this.assetData = globalData.getAssetData(data.refId);\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(SVGBaseElement, IImageElement);\n\n IImageElement.prototype.createElements = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n\n this._parent.createElements.call(this);\n\n this.innerElem = document.createElementNS(svgNS, 'image');\n this.innerElem.setAttribute('width', this.assetData.w + \"px\");\n this.innerElem.setAttribute('height', this.assetData.h + \"px\");\n this.innerElem.setAttribute('preserveAspectRatio', 'xMidYMid slice');\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.maskedElement = this.innerElem;\n this.layerElement.appendChild(this.innerElem);\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n };\n\n IImageElement.prototype.renderFrame = function (parentMatrix) {\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n if (this.hidden) {\n this.show();\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n IImageElement.prototype.destroy = function () {\n this._parent.destroy.call(this._parent);\n\n this.innerElem = null;\n };\n\n function ISolidElement(data, parentContainer, globalData, comp, placeholder) {\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(SVGBaseElement, ISolidElement);\n\n ISolidElement.prototype.createElements = function () {\n this._parent.createElements.call(this);\n\n var rect = document.createElementNS(svgNS, 'rect'); ////rect.style.width = this.data.sw;\n ////rect.style.height = this.data.sh;\n ////rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n this.innerElem = rect;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n };\n\n ISolidElement.prototype.renderFrame = IImageElement.prototype.renderFrame;\n ISolidElement.prototype.destroy = IImageElement.prototype.destroy;\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var idled = true;\n var playingAnimationsNum = 0;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem == element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n\n if (playingAnimationsNum === 0) {\n idled = true;\n }\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function moveFrame(value, animation) {\n initTime = Date.now();\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.moveFrame(value, animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (!idled) {\n window.requestAnimationFrame(resume);\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = document.getElementsByClassName('bodymovin');\n var i,\n len = animElements.length;\n\n for (i = 0; i < len; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && len === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerHTML = '';\n var div = document.createElement('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function start() {\n window.requestAnimationFrame(first);\n }\n\n function activate() {\n if (idled) {\n idled = false;\n window.requestAnimationFrame(first);\n }\n } //start();\n\n\n setTimeout(start, 0);\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.moveFrame = moveFrame;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize;\n moduleOb.start = start;\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n return moduleOb;\n }();\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.pendingElements = 0;\n this.playCount = 0;\n this.prerenderFramesFlag = true;\n this.animationData = {};\n this.layers = [];\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = randomString(10);\n this.scaleMode = 'fit';\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.subframeEnabled = subframeEnabled;\n this.segments = [];\n this.pendingSegment = false;\n this._idle = true;\n this.projectInterface = ProjectInterface();\n };\n\n AnimationItem.prototype.setParams = function (params) {\n var self = this;\n\n if (params.context) {\n this.context = params.context;\n }\n\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\n\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n\n case 'hybrid':\n case 'html':\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null) {} else if (params.loop === false) {\n this.loop = false;\n } else if (params.loop === true) {\n this.loop = true;\n } else {\n this.loop = parseInt(params.loop);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.prerenderFramesFlag = 'prerender' in params ? params.prerender : true;\n this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;\n\n if (params.animationData) {\n self.configAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.substr(-4) != 'json') {\n if (params.path.substr(-1, 1) != '/') {\n params.path += '/';\n }\n\n params.path += 'data.json';\n }\n\n var xhr = new XMLHttpRequest();\n\n if (params.path.lastIndexOf('\\\\') != -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.assetsPath = params.assetsPath;\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n xhr.open('GET', params.path, true);\n xhr.send();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n if (xhr.status == 200) {\n self.configAnimation(JSON.parse(xhr.responseText));\n } else {\n try {\n var response = JSON.parse(xhr.responseText);\n self.configAnimation(response);\n } catch (err) {}\n }\n }\n };\n }\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n var params = {\n wrapper: wrapper,\n animationData: animationData ? typeof animationData === \"object\" ? animationData : JSON.parse(animationData) : null\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === '') {} else if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else {\n params.loop = parseInt(loop);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== \"false\";\n params.name = wrapperAttributes.getNamedItem('data-name') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n this.animationData.tf = this.totalFrames;\n }\n\n var layers = this.animationData.layers;\n var i,\n len = layers.length;\n var newLayers = data.layers;\n var j,\n jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id == newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n } //this.totalFrames = 50;\n //this.animationData.tf = 50;\n\n\n this.animationData.__complete = false;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.renderer.includeLayers(data.layers);\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.renderFrame(null);\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.animationData.tf;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var xhr = new XMLHttpRequest();\n var self = this;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n xhr.open('GET', segmentPath, true);\n xhr.send();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n if (xhr.status == 200) {\n self.includeLayers(JSON.parse(xhr.responseText));\n } else {\n try {\n var response = JSON.parse(xhr.responseText);\n self.includeLayers(response);\n } catch (err) {}\n }\n }\n };\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.animationData.tf;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n var _this = this;\n\n if (this.renderer && this.renderer.destroyed) {\n return;\n } //console.log(JSON.parse(JSON.stringify(animData)));\n //animData.w = Math.round(animData.w/blitter);\n //animData.h = Math.round(animData.h/blitter);\n\n\n this.animationData = animData;\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.animationData.tf = this.totalFrames;\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n if (animData.comps) {\n animData.assets = animData.assets.concat(animData.comps);\n animData.comps = null;\n }\n\n this.renderer.searchExtraCompositions(animData.assets);\n this.layers = this.animationData.layers;\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.firstFrame = Math.round(this.animationData.ip);\n this.frameMult = this.animationData.fr / 1000;\n this.trigger('config_ready');\n this.imagePreloader = new ImagePreloader();\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(animData.assets, function (err) {\n if (!err) {\n _this.trigger('loaded_images');\n }\n });\n this.loadSegments();\n this.updaFrameModifier();\n\n if (this.renderer.globalData.fontManager) {\n this.waitForFontsLoaded();\n } else {\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.checkLoaded();\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n function checkFontsLoaded() {\n if (this.renderer.globalData.fontManager.loaded) {\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager); //this.renderer.buildItems(this.animationData.layers);\n\n this.checkLoaded();\n } else {\n setTimeout(checkFontsLoaded.bind(this), 20);\n }\n }\n\n return function () {\n checkFontsLoaded.bind(this)();\n };\n }();\n\n AnimationItem.prototype.addPendingElement = function () {\n this.pendingElements += 1;\n };\n\n AnimationItem.prototype.elementLoaded = function () {\n this.pendingElements--;\n this.checkLoaded();\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (this.pendingElements === 0) {\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.isLoaded = true;\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.subframeEnabled = flag ? true : false;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n if (this.subframeEnabled) {\n this.currentFrame = this.currentRawFrame;\n } else {\n this.currentFrame = Math.floor(this.currentRawFrame);\n }\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false) {\n return;\n } //console.log('this.currentFrame:',this.currentFrame + this.firstFrame);\n\n\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n\n if (!this.pendingSegment) {\n this._idle = true;\n this.trigger('_idle');\n }\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n this.pause();\n this.currentFrame = this.currentRawFrame = 0;\n this.playCount = 0;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name != name) {\n return;\n }\n\n if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n this.goToAndStop(value, isFrame, name);\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.pendingSegment) {\n this.pendingSegment = false;\n this.adjustSegment(this.segments.shift());\n\n if (this.isPaused) {\n this.play();\n }\n\n return;\n }\n\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n this.setCurrentRawFrameValue(this.currentRawFrame + value * this.frameModifier);\n };\n\n AnimationItem.prototype.updateAnimation = function (perc) {\n this.setCurrentRawFrameValue(this.totalFrames * perc);\n };\n\n AnimationItem.prototype.moveFrame = function (value, name) {\n if (name && this.name != name) {\n return;\n }\n\n this.setCurrentRawFrameValue(this.currentRawFrame + value);\n };\n\n AnimationItem.prototype.adjustSegment = function (arr) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.01);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init - 0.01;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (typeof arr[0] === 'object') {\n var i,\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (forceFlag) {\n this.adjustSegment(this.segments.shift());\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip * this.frameRate, Math.floor(this.animationData.op - this.animationData.ip + this.animationData.ip * this.frameRate)]);\n\n if (forceFlag) {\n this.adjustSegment(this.segments.shift());\n }\n };\n\n AnimationItem.prototype.checkSegments = function () {\n if (this.segments.length) {\n this.pendingSegment = true;\n }\n };\n\n AnimationItem.prototype.remove = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n this.renderer.destroy();\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name != name || this.renderer && this.renderer.destroyed) {\n return;\n }\n\n this.renderer.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value; //console.log(this.totalFrames);\n\n if (this.currentRawFrame >= this.totalFrames) {\n this.checkSegments();\n\n if (this.loop === false) {\n this.currentRawFrame = this.totalFrames - 0.01;\n this.gotoFrame();\n this.pause();\n this.trigger('complete');\n return;\n } else {\n this.trigger('loopComplete');\n this.playCount += 1;\n\n if (this.loop !== true && this.playCount == this.loop || this.pendingSegment) {\n this.currentRawFrame = this.totalFrames - 0.01;\n this.gotoFrame();\n this.pause();\n this.trigger('complete');\n return;\n } else {\n this.currentRawFrame = this.currentRawFrame % this.totalFrames;\n }\n }\n } else if (this.currentRawFrame < 0) {\n this.checkSegments();\n this.playCount -= 1;\n\n if (this.playCount < 0) {\n this.playCount = 0;\n }\n\n if (this.loop === false || this.pendingSegment) {\n this.currentRawFrame = 0;\n this.gotoFrame();\n this.pause();\n this.trigger('complete');\n return;\n } else {\n this.trigger('loopComplete');\n this.currentRawFrame = (this.totalFrames + this.currentRawFrame) % this.totalFrames;\n this.gotoFrame();\n return;\n }\n }\n\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0,\n len = this.assets.length;\n\n while (i < len) {\n if (id == this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getAssets = function () {\n return this.assets;\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.addEventListener = _addEventListener;\n AnimationItem.prototype.removeEventListener = _removeEventListener;\n AnimationItem.prototype.triggerEvent = _triggerEvent;\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n className: config && config.className || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1\n };\n this.contextData = {\n saved: Array.apply(null, {\n length: 15\n }),\n savedOp: Array.apply(null, {\n length: 15\n }),\n cArrPos: 0,\n cTr: new Matrix(),\n cO: 1\n };\n var i,\n len = 15;\n\n for (i = 0; i < len; i += 1) {\n this.contextData.saved[i] = Array.apply(null, {\n length: 16\n });\n }\n\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n }\n\n extendPrototype(BaseRenderer, CanvasRenderer);\n\n CanvasRenderer.prototype.createBase = function (data) {\n return new CVBaseElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.createShape = function (data) {\n return new CVShapeElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.createText = function (data) {\n return new CVTextElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.createImage = function (data) {\n return new CVImageElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this, this.globalData);\n };\n\n CanvasRenderer.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n this.transformMat.transform(this.contextData.cTr.props[0], this.contextData.cTr.props[1], this.contextData.cTr.props[2], this.contextData.cTr.props[3], this.contextData.cTr.props[4], this.contextData.cTr.props[5], this.contextData.cTr.props[6], this.contextData.cTr.props[7], this.contextData.cTr.props[8], this.contextData.cTr.props[9], this.contextData.cTr.props[10], this.contextData.cTr.props[11], this.contextData.cTr.props[12], this.contextData.cTr.props[13], this.contextData.cTr.props[14], this.contextData.cTr.props[15]); //this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRenderer.prototype.ctxOpacity = function (op) {\n if (op === 1) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n this.canvasContext.globalAlpha = this.contextData.cO;\n };\n\n CanvasRenderer.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.cArrPos = 0;\n this.contextData.cTr.reset();\n this.contextData.cO = 1;\n };\n\n CanvasRenderer.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData.saved[this.contextData.cArrPos] === null || this.contextData.saved[this.contextData.cArrPos] === undefined) {\n this.contextData.saved[this.contextData.cArrPos] = new Array(16);\n }\n\n var i,\n arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRenderer.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i,\n arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n this.canvasContext.globalAlpha = popped;\n };\n\n CanvasRenderer.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = document.createElement('canvas');\n this.animationItem.container.style.width = '100%';\n this.animationItem.container.style.height = '100%'; //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\n\n this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = \"0px 0px 0px\";\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.data = animData;\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.totalFrames = Math.floor(animData.tf);\n this.globalData.compWidth = animData.w;\n this.globalData.compHeight = animData.h;\n this.globalData.frameRate = animData.fr;\n this.globalData.frameId = 0;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.layers = animData.layers;\n this.transformCanvas = {};\n this.transformCanvas.w = animData.w;\n this.transformCanvas.h = animData.h;\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, document.body);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.elementLoaded = this.animationItem.elementLoaded.bind(this.animationItem);\n this.globalData.addPendingElement = this.animationItem.addPendingElement.bind(this.animationItem);\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = Array.apply(null, {\n length: animData.layers.length\n });\n this.updateContainerSize();\n };\n\n CanvasRenderer.prototype.updateContainerSize = function () {\n var elementWidth, elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel, animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio == 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n var i,\n len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].data.ty === 0) {\n this.elements[i].resize(this.globalData.transformCanvas);\n }\n }\n };\n\n CanvasRenderer.prototype.destroy = function () {\n if (this.renderConfig.clearCanvas) {\n this.animationItem.wrapper.innerHTML = '';\n }\n\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRenderer.prototype.renderFrame = function (num) {\n if (this.renderedFrame == num && this.renderConfig.clearCanvas === true || this.destroyed || num === null) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem.firstFrame;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n\n if (this.renderConfig.clearCanvas === true) {\n this.reset();\n this.canvasContext.save(); //this.canvasContext.canvas.width = this.canvasContext.canvas.width;\n\n this.canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n } else {\n this.save();\n }\n\n this.ctxTransform(this.transformCanvas.props);\n this.canvasContext.beginPath();\n this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n this.canvasContext.closePath();\n this.canvasContext.clip(); //console.log('--------');\n //console.log('NEW: ',num);\n\n var i,\n len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i++) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n } else {\n this.canvasContext.restore();\n }\n };\n\n CanvasRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n\n if (this.layers[pos].ty === 0) {\n element.resize(this.globalData.transformCanvas);\n }\n };\n\n CanvasRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRenderer.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRenderer.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n CanvasRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n var floatingContainer = document.createElementNS(svgNS, 'g');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], this.globalData.comp, this.globalData);\n comp.initExpressions(); //comp.compInterface = CompExpressionInterface(comp);\n //Expressions.addLayersInterface(comp.elements, this.globalData.projectInterface);\n\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1\n };\n this.renderConfig = {\n className: config && config.className || ''\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n }\n\n extendPrototype(BaseRenderer, HybridRenderer);\n HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRenderer.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n var i = 0;\n var nextDOMElement, nextLayer;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n nextDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRenderer.prototype.createBase = function (data) {\n return new SVGBaseElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new IShapeElement(data, this.layerElement, this.globalData, this);\n }\n\n return new HShapeElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextElement(data, this.layerElement, this.globalData, this);\n }\n\n return new HTextElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.layerElement, this.globalData, this);\n return this.camera;\n };\n\n HybridRenderer.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.layerElement, this.globalData, this);\n }\n\n return new HImageElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new ICompElement(data, this.layerElement, this.globalData, this);\n }\n\n return new HCompElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.layerElement, this.globalData, this);\n }\n\n return new HSolidElement(data, this.layerElement, this.globalData, this);\n };\n\n HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0,\n len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n };\n\n HybridRenderer.prototype.createThreeDContainer = function (pos) {\n var perspectiveElem = document.createElement('div');\n styleDiv(perspectiveElem);\n perspectiveElem.style.width = this.globalData.compSize.w + 'px';\n perspectiveElem.style.height = this.globalData.compSize.h + 'px';\n perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = \"50% 50%\";\n var container = document.createElement('div');\n styleDiv(container);\n container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveElem.appendChild(container);\n this.resizerElem.appendChild(perspectiveElem);\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRenderer.prototype.build3dContainers = function () {\n var i,\n len = this.layers.length;\n var lastThreeDContainerData;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd) {\n if (!lastThreeDContainerData) {\n lastThreeDContainerData = this.createThreeDContainer(i);\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n lastThreeDContainerData = null;\n }\n }\n };\n\n HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0,\n len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRenderer.prototype.configAnimation = function (animData) {\n var resizerElem = document.createElement('div');\n var wrapper = this.animationItem.wrapper;\n resizerElem.style.width = animData.w + 'px';\n resizerElem.style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = \"flat\";\n\n if (this.renderConfig.className) {\n wrapper.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n resizerElem.style.overflow = 'hidden';\n var svg = document.createElementNS(svgNS, 'svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = document.createElementNS(svgNS, 'defs');\n svg.appendChild(defs);\n this.globalData.defs = defs;\n this.data = animData; //Mask animation\n\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.elementLoaded = this.animationItem.elementLoaded.bind(this.animationItem);\n this.globalData.frameId = 0;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n this.globalData.frameRate = animData.fr;\n this.layers = animData.layers;\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, svg);\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerHTML = '';\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRenderer.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx, sy, tx, ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n };\n\n HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRenderer.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRenderer.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRenderer.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i,\n len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n }\n }\n };\n\n HybridRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n var floatingContainer = document.createElement('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function CVBaseElement(data, comp, globalData) {\n this.globalData = globalData;\n this.data = data;\n this.comp = comp;\n this.canvasContext = globalData.canvasContext;\n this.init();\n }\n\n createElement(BaseElement, CVBaseElement);\n\n CVBaseElement.prototype.createElements = function () {\n this.checkParenting();\n };\n\n CVBaseElement.prototype.checkBlendMode = function (globalData) {\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = '';\n\n switch (this.data.bm) {\n case 0:\n blendModeValue = 'normal';\n break;\n\n case 1:\n blendModeValue = 'multiply';\n break;\n\n case 2:\n blendModeValue = 'screen';\n break;\n\n case 3:\n blendModeValue = 'overlay';\n break;\n\n case 4:\n blendModeValue = 'darken';\n break;\n\n case 5:\n blendModeValue = 'lighten';\n break;\n\n case 6:\n blendModeValue = 'color-dodge';\n break;\n\n case 7:\n blendModeValue = 'color-burn';\n break;\n\n case 8:\n blendModeValue = 'hard-light';\n break;\n\n case 9:\n blendModeValue = 'soft-light';\n break;\n\n case 10:\n blendModeValue = 'difference';\n break;\n\n case 11:\n blendModeValue = 'exclusion';\n break;\n\n case 12:\n blendModeValue = 'hue';\n break;\n\n case 13:\n blendModeValue = 'saturation';\n break;\n\n case 14:\n blendModeValue = 'color';\n break;\n\n case 15:\n blendModeValue = 'luminosity';\n break;\n }\n\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n };\n\n CVBaseElement.prototype.renderFrame = function (parentTransform) {\n if (this.data.ty === 3) {\n return false;\n }\n\n this.checkBlendMode(this.data.ty === 0 ? this.parentGlobalData : this.globalData);\n\n if (!this.isVisible) {\n return this.isVisible;\n }\n\n this.finalTransform.opMdf = this.finalTransform.op.mdf;\n this.finalTransform.matMdf = this.finalTransform.mProp.mdf;\n this.finalTransform.opacity = this.finalTransform.op.v;\n var mat;\n var finalMat = this.finalTransform.mat;\n\n if (this.hierarchy) {\n var i,\n len = this.hierarchy.length;\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n this.finalTransform.matMdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : this.finalTransform.matMdf;\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n } else {\n if (!parentTransform) {\n finalMat.cloneFromProps(this.finalTransform.mProp.v.props);\n } else {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n }\n }\n\n if (parentTransform) {\n mat = parentTransform.mat.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n this.finalTransform.opacity *= parentTransform.opacity;\n this.finalTransform.opMdf = parentTransform.opMdf ? true : this.finalTransform.opMdf;\n this.finalTransform.matMdf = parentTransform.matMdf ? true : this.finalTransform.matMdf;\n }\n\n if (this.data.hasMask) {\n this.globalData.renderer.save(true);\n this.maskManager.renderFrame(this.data.ty === 0 ? null : finalMat);\n }\n\n if (this.data.hd) {\n this.isVisible = false;\n }\n\n return this.isVisible;\n };\n\n CVBaseElement.prototype.addMasks = function (data) {\n this.maskManager = new CVMaskElement(data, this, this.globalData);\n };\n\n CVBaseElement.prototype.destroy = function () {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n\n if (this.maskManager) {\n this.maskManager.destroy();\n }\n };\n\n CVBaseElement.prototype.mHelper = new Matrix();\n\n function CVCompElement(data, comp, globalData) {\n this._parent.constructor.call(this, data, comp, globalData);\n\n var compGlobalData = {};\n\n for (var s in globalData) {\n if (globalData.hasOwnProperty(s)) {\n compGlobalData[s] = globalData[s];\n }\n }\n\n compGlobalData.renderer = this;\n compGlobalData.compHeight = this.data.h;\n compGlobalData.compWidth = this.data.w;\n this.renderConfig = {\n clearCanvas: true\n };\n this.contextData = {\n saved: Array.apply(null, {\n length: 15\n }),\n savedOp: Array.apply(null, {\n length: 15\n }),\n cArrPos: 0,\n cTr: new Matrix(),\n cO: 1\n };\n this.completeLayers = false;\n var i,\n len = 15;\n\n for (i = 0; i < len; i += 1) {\n this.contextData.saved[i] = Array.apply(null, {\n length: 16\n });\n }\n\n this.transformMat = new Matrix();\n this.parentGlobalData = this.globalData;\n var cv = document.createElement('canvas'); //document.body.appendChild(cv);\n\n compGlobalData.canvasContext = cv.getContext('2d');\n this.canvasContext = compGlobalData.canvasContext;\n cv.width = this.data.w;\n cv.height = this.data.h;\n this.canvas = cv;\n this.globalData = compGlobalData;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = Array.apply(null, {\n length: this.layers.length\n });\n\n if (this.data.tm) {\n this.tm = PropertyFactory.getProp(this, this.data.tm, 0, globalData.frameRate, this.dynamicProperties);\n }\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n }\n\n createElement(CVBaseElement, CVCompElement);\n CVCompElement.prototype.ctxTransform = CanvasRenderer.prototype.ctxTransform;\n CVCompElement.prototype.ctxOpacity = CanvasRenderer.prototype.ctxOpacity;\n CVCompElement.prototype.save = CanvasRenderer.prototype.save;\n CVCompElement.prototype.restore = CanvasRenderer.prototype.restore;\n\n CVCompElement.prototype.reset = function () {\n this.contextData.cArrPos = 0;\n this.contextData.cTr.reset();\n this.contextData.cO = 1;\n };\n\n CVCompElement.prototype.resize = function (transformCanvas) {\n var maxScale = Math.max(transformCanvas.sx, transformCanvas.sy);\n this.canvas.width = this.data.w * maxScale;\n this.canvas.height = this.data.h * maxScale;\n this.transformCanvas = {\n sc: maxScale,\n w: this.data.w * maxScale,\n h: this.data.h * maxScale,\n props: [maxScale, 0, 0, 0, 0, maxScale, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]\n };\n var i,\n len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].data.ty === 0) {\n this.elements[i].resize(transformCanvas);\n }\n }\n };\n\n CVCompElement.prototype.prepareFrame = function (num) {\n this.globalData.frameId = this.parentGlobalData.frameId;\n this.globalData.mdf = false;\n\n this._parent.prepareFrame.call(this, num);\n\n if (this.isVisible === false && !this.data.xt) {\n return;\n }\n\n var timeRemapped = num;\n\n if (this.tm) {\n timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n }\n\n this.renderedFrame = timeRemapped / this.data.sr;\n var i,\n len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(timeRemapped / this.data.sr - this.layers[i].st);\n\n if (this.elements[i].data.ty === 0 && this.elements[i].globalData.mdf) {\n this.globalData.mdf = true;\n }\n }\n }\n\n if (this.globalData.mdf && !this.data.xt) {\n this.canvasContext.clearRect(0, 0, this.data.w, this.data.h);\n this.ctxTransform(this.transformCanvas.props);\n }\n };\n\n CVCompElement.prototype.renderFrame = function (parentMatrix) {\n if (this._parent.renderFrame.call(this, parentMatrix) === false) {\n return;\n }\n\n if (this.globalData.mdf) {\n var i,\n len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n\n if (this.data.hasMask) {\n this.globalData.renderer.restore(true);\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n\n this.parentGlobalData.renderer.save();\n this.parentGlobalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.parentGlobalData.renderer.ctxOpacity(this.finalTransform.opacity);\n this.parentGlobalData.renderer.canvasContext.drawImage(this.canvas, 0, 0, this.data.w, this.data.h);\n this.parentGlobalData.renderer.restore();\n\n if (this.globalData.mdf) {\n this.reset();\n }\n };\n\n CVCompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n CVCompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n CVCompElement.prototype.destroy = function () {\n var i,\n len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.elements[i].destroy();\n }\n\n this.layers = null;\n this.elements = null;\n\n this._parent.destroy.call(this._parent);\n };\n\n CVCompElement.prototype.checkLayers = CanvasRenderer.prototype.checkLayers;\n CVCompElement.prototype.buildItem = CanvasRenderer.prototype.buildItem;\n CVCompElement.prototype.checkPendingElements = CanvasRenderer.prototype.checkPendingElements;\n CVCompElement.prototype.addPendingElement = CanvasRenderer.prototype.addPendingElement;\n CVCompElement.prototype.buildAllItems = CanvasRenderer.prototype.buildAllItems;\n CVCompElement.prototype.createItem = CanvasRenderer.prototype.createItem;\n CVCompElement.prototype.createImage = CanvasRenderer.prototype.createImage;\n CVCompElement.prototype.createComp = CanvasRenderer.prototype.createComp;\n CVCompElement.prototype.createSolid = CanvasRenderer.prototype.createSolid;\n CVCompElement.prototype.createShape = CanvasRenderer.prototype.createShape;\n CVCompElement.prototype.createText = CanvasRenderer.prototype.createText;\n CVCompElement.prototype.createBase = CanvasRenderer.prototype.createBase;\n CVCompElement.prototype.buildElementParenting = CanvasRenderer.prototype.buildElementParenting;\n\n function CVImageElement(data, comp, globalData) {\n this.assetData = globalData.getAssetData(data.refId);\n\n this._parent.constructor.call(this, data, comp, globalData);\n\n this.globalData.addPendingElement();\n }\n\n createElement(CVBaseElement, CVImageElement);\n\n CVImageElement.prototype.createElements = function () {\n var imageLoaded = function () {\n this.globalData.elementLoaded();\n\n if (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height) {\n var canvas = document.createElement('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop, heightCrop;\n\n if (imgRel > canvasRel) {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n }.bind(this);\n\n var imageFailed = function () {\n this.failed = true;\n this.globalData.elementLoaded();\n }.bind(this);\n\n this.img = new Image();\n this.img.addEventListener('load', imageLoaded, false);\n this.img.addEventListener('error', imageFailed, false);\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.img.src = assetPath;\n\n this._parent.createElements.call(this);\n };\n\n CVImageElement.prototype.renderFrame = function (parentMatrix) {\n if (this.failed) {\n return;\n }\n\n if (this._parent.renderFrame.call(this, parentMatrix) === false) {\n return;\n }\n\n var ctx = this.canvasContext;\n this.globalData.renderer.save();\n var finalMat = this.finalTransform.mat.props;\n this.globalData.renderer.ctxTransform(finalMat);\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\n ctx.drawImage(this.img, 0, 0);\n this.globalData.renderer.restore(this.data.hasMask);\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n\n this._parent.destroy.call(this._parent);\n };\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.dynamicProperties = [];\n this.masksProperties = this.data.masksProperties;\n this.viewData = Array.apply(null, {\n length: this.masksProperties.length\n });\n var i,\n len = this.masksProperties.length;\n\n for (i = 0; i < len; i++) {\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3, this.dynamicProperties, null);\n }\n }\n\n CVMaskElement.prototype.prepareFrame = function (num) {\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue(num);\n\n if (this.dynamicProperties[i].mdf) {\n this.element.globalData.mdf = true;\n }\n }\n };\n\n CVMaskElement.prototype.renderFrame = function (transform) {\n var ctx = this.element.canvasContext;\n var i,\n len = this.data.masksProperties.length;\n var pt,\n pt2,\n pt3,\n data,\n hasMasks = false;\n\n for (i = 0; i < len; i++) {\n if (this.masksProperties[i].mode === 'n') {\n continue;\n }\n\n if (hasMasks === false) {\n ctx.beginPath();\n hasMasks = true;\n }\n\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compWidth, 0);\n ctx.lineTo(this.element.globalData.compWidth, this.element.globalData.compHeight);\n ctx.lineTo(0, this.element.globalData.compHeight);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform ? transform.applyToPointArray(data.v[0][0], data.v[0][1], 0) : data.v[0];\n ctx.moveTo(pt[0], pt[1]);\n var j,\n jLen = data._length;\n\n for (j = 1; j < jLen; j++) {\n pt = transform ? transform.applyToPointArray(data.o[j - 1][0], data.o[j - 1][1], 0) : data.o[j - 1];\n pt2 = transform ? transform.applyToPointArray(data.i[j][0], data.i[j][1], 0) : data.i[j];\n pt3 = transform ? transform.applyToPointArray(data.v[j][0], data.v[j][1], 0) : data.v[j];\n ctx.bezierCurveTo(pt[0], pt[1], pt2[0], pt2[1], pt3[0], pt3[1]);\n }\n\n pt = transform ? transform.applyToPointArray(data.o[j - 1][0], data.o[j - 1][1], 0) : data.o[j - 1];\n pt2 = transform ? transform.applyToPointArray(data.i[0][0], data.i[0][1], 0) : data.i[0];\n pt3 = transform ? transform.applyToPointArray(data.v[0][0], data.v[0][1], 0) : data.v[0];\n ctx.bezierCurveTo(pt[0], pt[1], pt2[0], pt2[1], pt3[0], pt3[1]);\n }\n\n if (hasMasks) {\n ctx.clip();\n }\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVShapeElement(data, comp, globalData) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n\n this._parent.constructor.call(this, data, comp, globalData);\n }\n\n createElement(CVBaseElement, CVShapeElement);\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n mat: new Matrix(),\n matMdf: false,\n opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createElements = function () {\n this._parent.createElements.call(this);\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.dynamicProperties, true);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, dynamicProperties) {\n var styleElem = {\n data: data,\n type: data.ty,\n elements: []\n };\n var elementData = {};\n\n if (data.ty == 'fl' || data.ty == 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, dynamicProperties);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bm_floor(elementData.c.v[0]) + ',' + bm_floor(elementData.c.v[1]) + ',' + bm_floor(elementData.c.v[2]) + ')';\n }\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, dynamicProperties);\n\n if (data.ty == 'st') {\n styleElem.lc = this.lcEnum[data.lc] || 'round';\n styleElem.lj = this.ljEnum[data.lj] || 'round';\n\n if (data.lj == 1) {\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, dynamicProperties);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = PropertyFactory.getDashProp(this, data.d, 'canvas', dynamicProperties);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dasharray;\n styleElem.do = elementData.d.dashoffset;\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function (data) {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data, dynamicProperties) {\n var elementData = {\n transform: {\n mat: new Matrix(),\n opacity: 1,\n matMdf: false,\n opMdf: false,\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, dynamicProperties),\n mProps: PropertyFactory.getProp(this, data, 2, null, dynamicProperties)\n },\n elements: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data, dynamicProperties) {\n var elementData = {\n nodes: [],\n trNodes: [],\n tr: [0, 0, 0, 0, 0, 0]\n };\n var ty = 4;\n\n if (data.ty == 'rc') {\n ty = 5;\n } else if (data.ty == 'el') {\n ty = 6;\n } else if (data.ty == 'sr') {\n ty = 7;\n }\n\n elementData.sh = ShapePropertyFactory.getShapeProp(this, data, ty, dynamicProperties);\n this.shapes.push(elementData.sh);\n this.addShapeToModifiers(elementData);\n jLen = this.stylesList.length;\n var hasStrokes = false,\n hasFills = false;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n this.stylesList[j].elements.push(elementData);\n\n if (this.stylesList[j].type === 'st') {\n hasStrokes = true;\n } else {\n hasFills = true;\n }\n }\n }\n\n elementData.st = hasStrokes;\n elementData.fl = hasFills;\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this.firstFrame = true;\n var i,\n len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.dynamicProperties, true);\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, dynamicProperties, render) {\n var i,\n len = arr.length - 1;\n var j, jLen;\n var ownArrays = [],\n ownModifiers = [],\n processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty == 'fl' || arr[i].ty == 'st') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], dynamicProperties);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownArrays.push(itemsData[i].style);\n } else if (arr[i].ty == 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, dynamicProperties, render);\n } else if (arr[i].ty == 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], dynamicProperties);\n }\n } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], dynamicProperties);\n }\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd') {\n if (!processedPos) {\n var modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i], dynamicProperties);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty == 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData, dynamicProperties);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownArrays.length;\n\n for (i = 0; i < len; i += 1) {\n ownArrays[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.addShapeToModifiers = IShapeElement.prototype.addShapeToModifiers;\n CVShapeElement.prototype.renderModifiers = IShapeElement.prototype.renderModifiers;\n CVShapeElement.prototype.lcEnum = IShapeElement.prototype.lcEnum;\n CVShapeElement.prototype.ljEnum = IShapeElement.prototype.ljEnum;\n CVShapeElement.prototype.searchProcessedElement = IShapeElement.prototype.searchProcessedElement;\n CVShapeElement.prototype.addProcessedElement = IShapeElement.prototype.addProcessedElement;\n\n CVShapeElement.prototype.renderFrame = function (parentMatrix) {\n if (this._parent.renderFrame.call(this, parentMatrix) === false) {\n return;\n }\n\n this.transformHelper.mat.reset();\n this.transformHelper.opacity = this.finalTransform.opacity;\n this.transformHelper.matMdf = false;\n this.transformHelper.opMdf = this.finalTransform.opMdf;\n this.renderModifiers();\n this.renderShape(this.transformHelper, null, null, true);\n\n if (this.data.hasMask) {\n this.globalData.renderer.restore(true);\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i, len;\n\n if (!items) {\n items = this.shapesData;\n len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].d = '';\n this.stylesList[i].mdf = false;\n }\n }\n\n if (!data) {\n data = this.itemsData;\n } ///\n ///\n\n\n len = items.length - 1;\n var groupTransform, groupMatrix;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty == 'tr') {\n groupTransform = data[i].transform;\n var mtArr = data[i].transform.mProps.v.props;\n groupTransform.matMdf = groupTransform.mProps.mdf;\n groupTransform.opMdf = groupTransform.op.mdf;\n groupMatrix = groupTransform.mat;\n groupMatrix.cloneFromProps(mtArr);\n\n if (parentTransform) {\n var props = parentTransform.mat.props;\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= data[i].transform.op.v;\n groupTransform.matMdf = parentTransform.matMdf ? true : groupTransform.matMdf;\n groupTransform.opMdf = parentTransform.opMdf ? true : groupTransform.opMdf;\n groupMatrix.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n } else {\n groupTransform.opacity = groupTransform.op.o;\n }\n } else if (items[i].ty == 'sh' || items[i].ty == 'el' || items[i].ty == 'rc' || items[i].ty == 'sr') {\n this.renderPath(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty == 'tm') {//\n }\n }\n\n if (!isMain) {\n return;\n }\n\n len = this.stylesList.length;\n var j,\n jLen,\n k,\n kLen,\n elems,\n nodes,\n renderer = this.globalData.renderer,\n ctx = this.globalData.canvasContext,\n type;\n renderer.save();\n renderer.ctxTransform(this.finalTransform.mat.props);\n\n for (i = 0; i < len; i += 1) {\n type = this.stylesList[i].type;\n\n if (type === 'st' && this.stylesList[i].wi === 0 || !this.stylesList[i].data._render) {\n continue;\n }\n\n renderer.save();\n elems = this.stylesList[i].elements;\n\n if (type === 'st') {\n ctx.strokeStyle = this.stylesList[i].co;\n ctx.lineWidth = this.stylesList[i].wi;\n ctx.lineCap = this.stylesList[i].lc;\n ctx.lineJoin = this.stylesList[i].lj;\n ctx.miterLimit = this.stylesList[i].ml || 0;\n } else {\n ctx.fillStyle = this.stylesList[i].co;\n }\n\n renderer.ctxOpacity(this.stylesList[i].coOp);\n\n if (type !== 'st') {\n ctx.beginPath();\n }\n\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st') {\n ctx.beginPath();\n\n if (this.stylesList[i].da) {\n ctx.setLineDash(this.stylesList[i].da);\n ctx.lineDashOffset = this.stylesList[i].do;\n this.globalData.isDashed = true;\n } else if (this.globalData.isDashed) {\n ctx.setLineDash(this.dashResetter);\n this.globalData.isDashed = false;\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t == 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t == 'c') {\n ctx.bezierCurveTo(nodes[k].p1[0], nodes[k].p1[1], nodes[k].p2[0], nodes[k].p2[1], nodes[k].p3[0], nodes[k].p3[1]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st') {\n ctx.stroke();\n }\n }\n\n if (type !== 'st') {\n ctx.fill(this.stylesList[i].r);\n }\n\n renderer.restore();\n }\n\n renderer.restore();\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData, groupTransform) {\n var len, i, j, jLen;\n var redraw = groupTransform.matMdf || itemData.sh.mdf || this.firstFrame;\n\n if (redraw) {\n var paths = itemData.sh.paths,\n groupTransformMat = groupTransform.mat;\n jLen = paths._length;\n var pathStringTransformed = itemData.trNodes;\n pathStringTransformed.length = 0;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i == 1) {\n pathStringTransformed.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n pathStringTransformed.push({\n t: 'c',\n p1: groupTransformMat.applyToPointArray(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1], 0),\n p2: groupTransformMat.applyToPointArray(pathNodes.i[i][0], pathNodes.i[i][1], 0),\n p3: groupTransformMat.applyToPointArray(pathNodes.v[i][0], pathNodes.v[i][1], 0)\n });\n }\n\n if (len == 1) {\n pathStringTransformed.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n pathStringTransformed.push({\n t: 'c',\n p1: groupTransformMat.applyToPointArray(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1], 0),\n p2: groupTransformMat.applyToPointArray(pathNodes.i[0][0], pathNodes.i[0][1], 0),\n p3: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n pathStringTransformed.push({\n t: 'z'\n });\n }\n\n itemData.lStr = pathStringTransformed;\n }\n }\n\n if (itemData.st) {\n for (i = 0; i < 16; i += 1) {\n itemData.tr[i] = groupTransform.mat.props[i];\n }\n }\n\n itemData.trNodes = pathStringTransformed;\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c.mdf || this.firstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o.mdf || groupTransform.opMdf || this.firstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style; //TODO fix dashes\n\n var d = itemData.d;\n var dasharray, dashoffset;\n\n if (d && (d.mdf || this.firstFrame)) {\n styleElem.da = d.dasharray;\n styleElem.do = d.dashoffset;\n }\n\n if (itemData.c.mdf || this.firstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o.mdf || groupTransform.opMdf || this.firstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w.mdf || this.firstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemData.length = 0;\n\n this._parent.destroy.call(this._parent);\n };\n\n function CVSolidElement(data, comp, globalData) {\n this._parent.constructor.call(this, data, comp, globalData);\n }\n\n createElement(CVBaseElement, CVSolidElement);\n\n CVSolidElement.prototype.renderFrame = function (parentMatrix) {\n if (this._parent.renderFrame.call(this, parentMatrix) === false) {\n return;\n }\n\n var ctx = this.canvasContext;\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n this.globalData.renderer.restore(this.data.hasMask);\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n function CVTextElement(data, comp, globalData) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n\n this._parent.constructor.call(this, data, comp, globalData);\n }\n\n createElement(CVBaseElement, CVTextElement);\n extendPrototype(ITextElement, CVTextElement);\n CVTextElement.prototype.tHelper = document.createElement('canvas').getContext('2d');\n\n CVTextElement.prototype.createElements = function () {\n this._parent.createElements.call(this); //console.log('this.data: ',this.data);\n\n };\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = Array.apply(null, {\n length: documentData.l ? documentData.l.length : 0\n });\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i, len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.s + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.t.length; //this.tHelper.font = this.values.fValue;\n\n var charData,\n shapeData,\n k,\n kLen,\n shapes,\n j,\n jLen,\n pathNodes,\n commands,\n pathArr,\n singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr / 1000 * documentData.s;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.s / 100, documentData.s / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = Array.apply(null, {\n length: jLen\n });\n\n for (j = 0; j < jLen; j += 1) {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k == 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[j] = pathArr;\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderFrame = function (parentMatrix) {\n if (this._parent.renderFrame.call(this, parentMatrix) === false) {\n return;\n }\n\n var ctx = this.canvasContext;\n var finalMat = this.finalTransform.mat.props;\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(finalMat);\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i, len, j, jLen, k, kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null,\n lastStroke = null,\n lastStrokeW = null,\n commands,\n pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill(); ///ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke(); ///ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n /*if(this.data.hasMask){\r\n this.globalData.renderer.restore(true);\r\n }*/\n\n\n this.globalData.renderer.restore(this.data.hasMask);\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n function HBaseElement(data, parentContainer, globalData, comp, placeholder) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.matteElement = null;\n this.parentContainer = parentContainer;\n this.layerId = placeholder ? placeholder.layerId : 'ly_' + randomString(10);\n this.placeholder = placeholder;\n this.init();\n }\n\n ;\n createElement(BaseElement, HBaseElement);\n\n HBaseElement.prototype.checkBlendMode = function () {};\n\n HBaseElement.prototype.setBlendMode = BaseElement.prototype.setBlendMode;\n /*HBaseElement.prototype.appendNodeToParent = function(node) {\r\n if(this.data.hd){\r\n return;\r\n }\r\n if(this.placeholder){\r\n var g = this.placeholder.phElement;\r\n g.parentNode.insertBefore(node, g);\r\n //g.parentNode.removeChild(g);\r\n }else{\r\n this.parentContainer.appendChild(node);\r\n }\r\n };*/\n\n HBaseElement.prototype.getBaseElement = function () {\n return this.baseElement;\n };\n\n HBaseElement.prototype.createElements = function () {\n if (this.data.hasMask) {\n this.layerElement = document.createElementNS(svgNS, 'svg');\n styleDiv(this.layerElement); //this.appendNodeToParent(this.layerElement);\n\n this.baseElement = this.layerElement;\n this.maskedElement = this.layerElement;\n } else {\n this.layerElement = this.parentContainer;\n }\n\n this.transformedElement = this.layerElement;\n\n if (this.data.ln && (this.data.ty === 4 || this.data.ty === 0)) {\n if (this.layerElement === this.parentContainer) {\n this.layerElement = document.createElementNS(svgNS, 'g'); //this.appendNodeToParent(this.layerElement);\n\n this.baseElement = this.layerElement;\n }\n\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n this.setBlendMode();\n\n if (this.layerElement !== this.parentContainer) {\n this.placeholder = null;\n }\n\n this.checkParenting();\n };\n\n HBaseElement.prototype.renderFrame = function (parentTransform) {\n if (this.data.ty === 3) {\n return false;\n }\n\n if (this.currentFrameNum === this.lastNum || !this.isVisible) {\n return this.isVisible;\n }\n\n this.lastNum = this.currentFrameNum;\n this.finalTransform.opMdf = this.finalTransform.op.mdf;\n this.finalTransform.matMdf = this.finalTransform.mProp.mdf;\n this.finalTransform.opacity = this.finalTransform.op.v;\n\n if (this.firstFrame) {\n this.finalTransform.opMdf = true;\n this.finalTransform.matMdf = true;\n }\n\n var mat;\n var finalMat = this.finalTransform.mat;\n\n if (this.hierarchy) {\n var i,\n len = this.hierarchy.length;\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n this.finalTransform.matMdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : this.finalTransform.matMdf;\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n } else {\n if (this.isVisible && this.finalTransform.matMdf) {\n if (!parentTransform) {\n finalMat.cloneFromProps(this.finalTransform.mProp.v.props);\n } else {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n }\n }\n }\n\n if (this.data.hasMask) {\n this.maskManager.renderFrame(finalMat);\n }\n\n if (parentTransform) {\n mat = parentTransform.mat.props;\n finalMat.cloneFromProps(mat);\n this.finalTransform.opacity *= parentTransform.opacity;\n this.finalTransform.opMdf = parentTransform.opMdf ? true : this.finalTransform.opMdf;\n this.finalTransform.matMdf = parentTransform.matMdf ? true : this.finalTransform.matMdf;\n }\n\n if (this.finalTransform.matMdf) {\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = finalMat.toCSS();\n this.finalMat = finalMat;\n }\n\n if (this.finalTransform.opMdf) {\n this.transformedElement.style.opacity = this.finalTransform.opacity;\n }\n\n return this.isVisible;\n };\n\n HBaseElement.prototype.destroy = function () {\n this.layerElement = null;\n this.transformedElement = null;\n this.parentContainer = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n };\n\n HBaseElement.prototype.getDomElement = function () {\n return this.layerElement;\n };\n\n HBaseElement.prototype.addMasks = function (data) {\n this.maskManager = new MaskElement(data, this, this.globalData);\n };\n\n HBaseElement.prototype.hide = function () {};\n\n HBaseElement.prototype.setMatte = function () {};\n\n HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, parentContainer, globalData, comp, placeholder) {\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(HBaseElement, HSolidElement);\n\n HSolidElement.prototype.createElements = function () {\n var parent = document.createElement('div');\n styleDiv(parent);\n var cont = document.createElementNS(svgNS, 'svg');\n styleDiv(cont);\n cont.setAttribute('width', this.data.sw);\n cont.setAttribute('height', this.data.sh);\n parent.appendChild(cont);\n this.layerElement = parent;\n this.transformedElement = parent; //this.appendNodeToParent(parent);\n\n this.baseElement = parent;\n this.innerElem = parent;\n\n if (this.data.ln) {\n this.innerElem.setAttribute('id', this.data.ln);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n\n var rect = document.createElementNS(svgNS, 'rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n cont.appendChild(rect);\n\n if (this.data.hasMask) {\n this.maskedElement = rect;\n }\n\n this.checkParenting();\n };\n\n HSolidElement.prototype.hide = SVGBaseElement.prototype.hide;\n HSolidElement.prototype.show = SVGBaseElement.prototype.show;\n HSolidElement.prototype.renderFrame = IImageElement.prototype.renderFrame;\n HSolidElement.prototype.destroy = IImageElement.prototype.destroy;\n\n function HCompElement(data, parentContainer, globalData, comp, placeholder) {\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = Array.apply(null, {\n length: this.layers.length\n });\n\n if (this.data.tm) {\n this.tm = PropertyFactory.getProp(this, this.data.tm, 0, globalData.frameRate, this.dynamicProperties);\n }\n\n if (this.data.hasMask) {\n this.supports3d = false;\n }\n\n if (this.data.xt) {\n this.layerElement = document.createElement('div');\n }\n\n this.buildAllItems();\n }\n\n createElement(HBaseElement, HCompElement);\n\n HCompElement.prototype.createElements = function () {\n var divElement = document.createElement('div');\n styleDiv(divElement);\n\n if (this.data.ln) {\n divElement.setAttribute('id', this.data.ln);\n }\n\n divElement.style.clip = 'rect(0px, ' + this.data.w + 'px, ' + this.data.h + 'px, 0px)';\n\n if (this.data.hasMask) {\n var compSvg = document.createElementNS(svgNS, 'svg');\n styleDiv(compSvg);\n compSvg.setAttribute('width', this.data.w);\n compSvg.setAttribute('height', this.data.h);\n var g = document.createElementNS(svgNS, 'g');\n compSvg.appendChild(g);\n divElement.appendChild(compSvg);\n this.maskedElement = g;\n this.baseElement = divElement;\n this.layerElement = g;\n this.transformedElement = divElement;\n } else {\n this.layerElement = divElement;\n this.baseElement = this.layerElement;\n this.transformedElement = divElement;\n } //this.appendNodeToParent(this.layerElement);\n\n\n this.checkParenting();\n };\n\n HCompElement.prototype.hide = ICompElement.prototype.hide;\n HCompElement.prototype.prepareFrame = ICompElement.prototype.prepareFrame;\n HCompElement.prototype.setElements = ICompElement.prototype.setElements;\n HCompElement.prototype.getElements = ICompElement.prototype.getElements;\n HCompElement.prototype.destroy = ICompElement.prototype.destroy;\n\n HCompElement.prototype.renderFrame = function (parentMatrix) {\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n var i,\n len = this.layers.length;\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n this.hidden = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n HCompElement.prototype.checkLayers = BaseRenderer.prototype.checkLayers;\n HCompElement.prototype.buildItem = HybridRenderer.prototype.buildItem;\n HCompElement.prototype.checkPendingElements = HybridRenderer.prototype.checkPendingElements;\n HCompElement.prototype.addPendingElement = HybridRenderer.prototype.addPendingElement;\n HCompElement.prototype.buildAllItems = BaseRenderer.prototype.buildAllItems;\n HCompElement.prototype.createItem = HybridRenderer.prototype.createItem;\n HCompElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\n HCompElement.prototype.createImage = HybridRenderer.prototype.createImage;\n HCompElement.prototype.createComp = HybridRenderer.prototype.createComp;\n HCompElement.prototype.createSolid = HybridRenderer.prototype.createSolid;\n HCompElement.prototype.createShape = HybridRenderer.prototype.createShape;\n HCompElement.prototype.createText = HybridRenderer.prototype.createText;\n HCompElement.prototype.createBase = HybridRenderer.prototype.createBase;\n HCompElement.prototype.appendElementInPos = HybridRenderer.prototype.appendElementInPos;\n\n function HShapeElement(data, parentContainer, globalData, comp, placeholder) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n createElement(HBaseElement, HShapeElement);\n var parent = HShapeElement.prototype._parent;\n extendPrototype(IShapeElement, HShapeElement);\n HShapeElement.prototype._parent = parent;\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderFrame;\n\n HShapeElement.prototype.createElements = function () {\n var parent = document.createElement('div');\n styleDiv(parent);\n var cont = document.createElementNS(svgNS, 'svg');\n styleDiv(cont);\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n\n if (this.data.hasMask) {\n var g = document.createElementNS(svgNS, 'g');\n parent.appendChild(cont);\n cont.appendChild(g);\n this.maskedElement = g;\n this.layerElement = g;\n this.shapesContainer = g;\n } else {\n parent.appendChild(cont);\n this.layerElement = cont;\n this.shapesContainer = document.createElementNS(svgNS, 'g');\n this.layerElement.appendChild(this.shapesContainer);\n }\n\n if (!this.data.hd) {\n //this.parentContainer.appendChild(parent);\n this.baseElement = parent;\n }\n\n this.innerElem = parent;\n\n if (this.data.ln) {\n this.innerElem.setAttribute('id', this.data.ln);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, this.dynamicProperties, 0, [], true);\n this.buildExpressionInterface();\n this.layerElement = parent;\n this.transformedElement = parent;\n this.shapeCont = cont;\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n\n this.checkParenting();\n };\n\n HShapeElement.prototype.renderFrame = function (parentMatrix) {\n var firstFrame = this.firstFrame;\n\n this._renderShapeFrame();\n\n if (this.isVisible && (this.elemMdf || firstFrame)) {\n var boundingBox = this.shapeCont.getBBox();\n var changed = false;\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.shapeCont.setAttribute('width', boundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.shapeCont.setAttribute('height', boundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== boundingBox.x || this.currentBBox.y !== boundingBox.y) {\n this.currentBBox.w = boundingBox.width;\n this.currentBBox.h = boundingBox.height;\n this.currentBBox.x = boundingBox.x;\n this.currentBBox.y = boundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\n };\n\n function HTextElement(data, parentContainer, globalData, comp, placeholder) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(HBaseElement, HTextElement);\n extendPrototype(ITextElement, HTextElement);\n\n HTextElement.prototype.createElements = function () {\n this.isMasked = this.checkMasks();\n var parent = document.createElement('div');\n styleDiv(parent);\n this.layerElement = parent;\n this.transformedElement = parent;\n\n if (this.isMasked) {\n this.renderType = 'svg';\n var cont = document.createElementNS(svgNS, 'svg');\n styleDiv(cont);\n this.cont = cont;\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n cont.setAttribute('width', this.compW);\n cont.setAttribute('height', this.compH);\n var g = document.createElementNS(svgNS, 'g');\n cont.appendChild(g);\n parent.appendChild(cont);\n this.maskedElement = g;\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = parent;\n }\n\n this.baseElement = parent;\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = Array.apply(null, {\n length: this.textProperty.currentData.l ? this.textProperty.currentData.l.length : 0\n });\n var innerElemStyle = this.innerElem.style;\n innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.s + 'px';\n innerElemStyle.lineHeight = documentData.s + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight,\n fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i, len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan, tParent, tCont;\n var matrixHelper = this.mHelper;\n var shapes,\n shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = document.createElementNS(svgNS, 'path');\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = document.createElement('div');\n tCont = document.createElementNS(svgNS, 'svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else {\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = document.createElement('span');\n styleDiv(tParent);\n tSpan = document.createElement('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : document.createElementNS(svgNS, 'text');\n }\n } //tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.s / 100, documentData.s / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n letters[i].yOffset = boundingBox.y - 1;\n tParent.appendChild(tCont);\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.s / 1.2 + 'px,0)';\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.hide = SVGTextElement.prototype.hide;\n\n HTextElement.prototype.renderFrame = function (parentMatrix) {\n var renderParent = this._parent.renderFrame.call(this, parentMatrix);\n\n if (renderParent === false) {\n this.hide();\n return;\n }\n\n if (this.hidden) {\n this.hidden = false;\n this.innerElem.style.display = 'block';\n this.layerElement.style.display = 'block';\n }\n\n if (this.data.singleShape) {\n if (!this.firstFrame && !this.lettersChangedFlag) {\n return;\n } else {\n // Todo Benchmark if using this is better than getBBox\n if (this.isMasked && this.finalTransform.matMdf) {\n this.cont.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n this.cont.style.transform = this.cont.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n }\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i,\n len,\n count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan, textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n continue;\n }\n\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (!this.isMasked) {\n textSpan.style.transform = textSpan.style.webkitTransform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n } ////textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n\n if (this.isVisible && (this.elemMdf || this.firstFrame)) {\n if (this.innerElem.getBBox) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.cont.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.cont.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.cont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n this.cont.style.transform = this.cont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\n }\n\n if (this.firstFrame) {\n this.firstFrame = false;\n }\n };\n\n function HImageElement(data, parentContainer, globalData, comp, placeholder) {\n this.assetData = globalData.getAssetData(data.refId);\n\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n }\n\n createElement(HBaseElement, HImageElement);\n\n HImageElement.prototype.createElements = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n var parent = document.createElement('div');\n styleDiv(parent);\n var cont = document.createElementNS(svgNS, 'svg');\n styleDiv(cont);\n cont.setAttribute('width', this.assetData.w);\n cont.setAttribute('height', this.assetData.h);\n parent.appendChild(cont);\n this.imageElem = document.createElementNS(svgNS, 'image');\n this.imageElem.setAttribute('width', this.assetData.w + \"px\");\n this.imageElem.setAttribute('height', this.assetData.h + \"px\");\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n cont.appendChild(this.imageElem);\n this.layerElement = parent;\n this.transformedElement = parent;\n this.baseElement = parent;\n this.innerElem = parent;\n this.maskedElement = this.imageElem;\n } else {\n styleDiv(img);\n this.layerElement = img;\n this.baseElement = img;\n this.innerElem = img;\n this.transformedElement = img;\n }\n\n img.src = assetPath;\n\n if (this.data.ln) {\n this.innerElem.setAttribute('id', this.data.ln);\n }\n\n this.checkParenting();\n };\n\n HImageElement.prototype.show = HSolidElement.prototype.show;\n HImageElement.prototype.hide = HSolidElement.prototype.hide;\n HImageElement.prototype.renderFrame = HSolidElement.prototype.renderFrame;\n HImageElement.prototype.destroy = HSolidElement.prototype.destroy;\n\n function HCameraElement(data, parentContainer, globalData, comp, placeholder) {\n this._parent.constructor.call(this, data, parentContainer, globalData, comp, placeholder);\n\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this.dynamicProperties);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this.dynamicProperties);\n this.py = getProp(this, data.ks.p.y, 1, 0, this.dynamicProperties);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this.dynamicProperties);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this.dynamicProperties);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this.dynamicProperties);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i,\n len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this.dynamicProperties);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this.dynamicProperties);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this.dynamicProperties);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this.dynamicProperties);\n this.mat = new Matrix();\n }\n\n createElement(HBaseElement, HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i,\n len = this.comp.threeDElements.length,\n comp;\n\n for (i = 0; i < len; i += 1) {\n //[perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = \"0px 0px 0px\";\n comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var mdf = this.firstFrame;\n var i, len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n mdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : mdf;\n }\n }\n\n if (mdf || this.p && this.p.mdf || this.px && (this.px.mdf || this.py.mdf || this.pz.mdf) || this.rx.mdf || this.ry.mdf || this.rz.mdf || this.or.mdf || this.a && this.a.mdf) {\n this.mat.reset();\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); //var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var m_rotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var m_rotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n\n if (this.hierarchy) {\n var mat;\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.iv.props;\n this.mat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], -mat[12], -mat[13], mat[14], mat[15]);\n }\n }\n\n len = this.comp.threeDElements.length;\n var comp;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\n }\n }\n\n this.firstFrame = false;\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n }\n\n return ob;\n }();\n\n expressionsPlugin = Expressions;\n\n (function addPropertyDecorator() {\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var offsetTime = this.offsetTime || 0;\n var i, len, ret;\n\n if (type.toLowerCase() === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame - offsetTime) / this.comp.globalData.frameRate, 0);\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005;\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame - offsetTime) / this.comp.globalData.frameRate, 0);\n }\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n var currentFrame = time * elem.comp.globalData.frameRate;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n var offsetTime = this.offsetTime || 0;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i, len, ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame - offsetTime) / this.comp.globalData.frameRate, 0);\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame - offsetTime) / this.comp.globalData.frameRate, 0);\n }\n }\n\n function getValueAtTime(frameNum) {\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n lastValue: -99999,\n lastIndex: 0\n };\n } //console.log('this._cachingAtTime', JSON.parse(JSON.stringify(this._cachingAtTime)))\n\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n var i = this._caching.lastFrame < frameNum ? this._caching.lastIndex : 0;\n var interpolationResult = this.interpolateValue(frameNum, i, this.pv, this._cachingAtTime);\n this._cachingAtTime.lastIndex = interpolationResult.iterationIndex;\n this._cachingAtTime.value = interpolationResult.value;\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.01; //frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = Array.apply(null, {\n length: v1.length\n });\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n //removing frameRate\n //if needed, don't add it here\n //velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n ;\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n\n if (prop.getValue) {\n prop.getPreValue = prop.getValue;\n }\n\n prop.getValue = ExpressionManager.initiateExpression.bind(prop)(elem, data, prop);\n }\n }\n\n function getTransformValueAtTime(time) {\n console.log('time:', time);\n }\n\n function getTransformStaticValueAtTime(time) {}\n\n var TextExpressionSelectorProp = function () {\n function getValueProxy(index, total) {\n this.textIndex = index + 1;\n this.textTotal = total;\n this.getValue();\n return this.v;\n }\n\n return function TextExpressionSelectorProp(elem, data) {\n this.pv = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.mult = .01;\n this.type = 'textSelector';\n this.textTotal = data.totalChars;\n this.selectorValue = 100;\n this.lastValue = [1, 1, 1];\n searchExpressions.bind(this)(elem, data, this);\n this.getMult = getValueProxy;\n this.getVelocityAtTime = getVelocityAtTime;\n\n if (this.kf) {\n this.getValueAtTime = getValueAtTime.bind(this);\n } else {\n this.getValueAtTime = getStaticValueAtTime.bind(this);\n }\n\n this.setGroupProperty = setGroupProperty;\n };\n }();\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, arr) {\n var prop = propertyGetProp(elem, data, type, mult, arr); //prop.getVelocityAtTime = getVelocityAtTime;\n //prop.loopOut = loopOut;\n //prop.loopIn = loopIn;\n\n if (type === 2) {\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n } else {\n if (prop.kf) {\n prop.getValueAtTime = getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getStaticValueAtTime.bind(prop);\n }\n }\n\n prop.setGroupProperty = setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.getVelocityAtTime = getVelocityAtTime;\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n var isAdded = prop.k;\n\n if (data.ix !== undefined) {\n Object.defineProperty(prop, 'propertyIndex', {\n get: function get() {\n return data.ix;\n }\n });\n }\n\n searchExpressions(elem, data, prop);\n\n if (!isAdded && prop.x) {\n arr.push(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n if (!this._shapeValueAtTime) {\n this._lastIndexAtTime = 0;\n this._lastTimeAtTime = -999999;\n this._shapeValueAtTime = shape_pool.clone(this.pv);\n }\n\n if (frameNum !== this._lastTimeAtTime) {\n this._lastTimeAtTime = frameNum;\n frameNum *= this.elem.globalData.frameRate;\n var interpolationResult = this.interpolateShape(frameNum, this._lastIndexAtTime, this._shapeValueAtTime, false);\n this._lastIndexAtTime = interpolationResult.iterationIndex;\n }\n\n return this._shapeValueAtTime;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n ShapePropertyConstructorFunction.prototype.vertices = function (prop, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i,\n len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n };\n\n ShapePropertyConstructorFunction.prototype.points = function (time) {\n return this.vertices('v', time);\n };\n\n ShapePropertyConstructorFunction.prototype.inTangents = function (time) {\n return this.vertices('i', time);\n };\n\n ShapePropertyConstructorFunction.prototype.outTangents = function (time) {\n return this.vertices('o', time);\n };\n\n ShapePropertyConstructorFunction.prototype.isClosed = function () {\n return this.v.c;\n };\n\n ShapePropertyConstructorFunction.prototype.pointOnPath = function (perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0,\n len = lengths.length;\n var j = 0,\n jLen;\n var accumulatedLength = 0;\n var segments;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n segments = lengths[i].segments;\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n var pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n };\n\n ShapePropertyConstructorFunction.prototype.vectorOnPath = function (perc, time, vectorType) {\n //perc doesn't use triple equality because can be a Number object, not a primitive.\n perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n };\n\n ShapePropertyConstructorFunction.prototype.tangentOnPath = function (perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n };\n\n ShapePropertyConstructorFunction.prototype.normalOnPath = function (perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n };\n\n ShapePropertyConstructorFunction.prototype.setGroupProperty = setGroupProperty;\n ShapePropertyConstructorFunction.prototype.getValueAtTime = getStaticValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.vertices = ShapePropertyConstructorFunction.prototype.vertices;\n KeyframedShapePropertyConstructorFunction.prototype.points = ShapePropertyConstructorFunction.prototype.points;\n KeyframedShapePropertyConstructorFunction.prototype.inTangents = ShapePropertyConstructorFunction.prototype.inTangents;\n KeyframedShapePropertyConstructorFunction.prototype.outTangents = ShapePropertyConstructorFunction.prototype.outTangents;\n KeyframedShapePropertyConstructorFunction.prototype.isClosed = ShapePropertyConstructorFunction.prototype.isClosed;\n KeyframedShapePropertyConstructorFunction.prototype.pointOnPath = ShapePropertyConstructorFunction.prototype.pointOnPath;\n KeyframedShapePropertyConstructorFunction.prototype.vectorOnPath = ShapePropertyConstructorFunction.prototype.vectorOnPath;\n KeyframedShapePropertyConstructorFunction.prototype.tangentOnPath = ShapePropertyConstructorFunction.prototype.tangentOnPath;\n KeyframedShapePropertyConstructorFunction.prototype.normalOnPath = ShapePropertyConstructorFunction.prototype.normalOnPath;\n KeyframedShapePropertyConstructorFunction.prototype.setGroupProperty = ShapePropertyConstructorFunction.prototype.setGroupProperty;\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n var isAdded = prop.k;\n\n if (data.ix !== undefined) {\n Object.defineProperty(prop, 'propertyIndex', {\n get: function get() {\n return data.ix;\n }\n });\n }\n\n if (type === 3) {\n searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n searchExpressions(elem, data.ks, prop);\n }\n\n if (!isAdded && prop.x) {\n arr.push(prop);\n }\n\n return prop;\n };\n\n var propertyGetTextProp = PropertyFactory.getTextSelectorProp;\n\n PropertyFactory.getTextSelectorProp = function (elem, data, arr) {\n if (data.t === 1) {\n return new TextExpressionSelectorProp(elem, data, arr);\n } else {\n return propertyGetTextProp(elem, data, arr);\n }\n };\n })();\n\n (function addTextPropertyDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.comp = this.elem.comp;\n\n if (this.getValue) {\n this.getPreValue = this.getValue;\n }\n\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.getValue = this.getExpressionValue;\n return true;\n }\n\n return false;\n }\n\n TextProperty.prototype.searchProperty = function () {\n this.kf = this.searchExpressions() || this.data.d.k.length > 1;\n return this.kf;\n };\n\n TextProperty.prototype.getExpressionValue = function (num) {\n this.calculateExpression();\n\n if (this.mdf) {\n this.currentData.t = this.v.toString();\n this.completeTextData(this.currentData);\n }\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n })();\n\n var ExpressionManager = function () {\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n\n function duplicatePropertyValue(value, mult) {\n mult = mult || 1;\n\n if (typeof value === 'number' || value instanceof Number) {\n return value * mult;\n } else if (value.i) {\n return JSON.parse(JSON.stringify(value));\n } else {\n var arr = Array.apply(null, {\n length: value.length\n });\n var i,\n len = value.length;\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value[i] * mult;\n }\n\n return arr;\n }\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i,\n len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function $bm_neg(a) {\n var tOfA = typeof a;\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if (a.constructor === Array) {\n var i,\n lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n }\n\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n return a + b;\n }\n\n if (a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n a[0] = a[0] + b;\n return a;\n }\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && b.constructor === Array) {\n b[0] = a + b[0];\n return b;\n }\n\n if (a.constructor === Array && b.constructor === Array) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] == undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n if (tOfA === 'string') {\n a = parseInt(a);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b);\n }\n\n return a - b;\n }\n\n if (a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n a[0] = a[0] - b;\n return a;\n }\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && b.constructor === Array) {\n b[0] = a - b[0];\n return b;\n }\n\n if (a.constructor === Array && b.constructor === Array) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && typeof (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] == undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n return a * b;\n }\n\n var i, len;\n\n if (a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n len = a.length;\n arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && b.constructor === Array) {\n len = b.length;\n arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n return a / b;\n }\n\n var i, len;\n\n if (a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\n len = a.length;\n arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if ((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && b.constructor === Array) {\n len = b.length;\n arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b);\n }\n\n return a % b;\n }\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i,\n len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r, g, b;\n\n if (s == 0) {\n r = g = b = l; // achromatic\n } else {\n var hue2rgb = function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n return linear(t, 0, 1, tMin, tMax);\n }\n\n if (t <= tMin) {\n return value1;\n } else if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i,\n len = value1.length;\n var arr = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i,\n len = max.length;\n\n if (!min) {\n min = Array.apply(null, {\n length: len\n });\n }\n\n var arr = Array.apply(null, {\n length: len\n });\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n inTangents = inTangents && inTangents.length ? inTangents : points;\n outTangents = outTangents && outTangents.length ? outTangents : points;\n var path = shape_pool.newShape();\n var len = points.length;\n path.setPathData(closed, len);\n\n for (i = 0; i < len; i += 1) {\n path.setTripleAt(points[i][0], points[i][1], outTangents[i][0] + points[i][0], outTangents[i][1] + points[i][1], inTangents[i][0] + points[i][0], inTangents[i][1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform, content, effect;\n var thisComp = elem.comp;\n var thisProperty = property;\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var loopIn, loop_in, loopOut, loop_out;\n var toWorld, fromWorld, fromComp, fromCompToSurface, anchorPoint, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;\n var fn = new Function(); //var fnStr = 'var fn = function(){'+val+';this.v = $bm_rt;}';\n //eval(fnStr);\n\n var fn = eval('[function(){' + val + ';if($bm_rt.__shapeObject){this.v=shape_pool.clone($bm_rt.v);}else{this.v=$bm_rt;}}' + ']')[0];\n var bindedFn = fn.bind(this);\n var numKeys = property.kf ? data.k.length : 0;\n\n var wiggle = function wiggle(freq, amp) {\n var i,\n j,\n len = this.pv.length ? this.pv.length : 1;\n var addedAmps = Array.apply(null, {\n len: len\n });\n\n for (j = 0; j < len; j += 1) {\n addedAmps[j] = 0;\n }\n\n freq = 5;\n var iterations = Math.floor(time * freq);\n i = 0;\n j = 0;\n\n while (i < iterations) {\n //var rnd = BMMath.random();\n for (j = 0; j < len; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); //addedAmps[j] += -amp + amp*2*rnd;\n }\n\n i += 1;\n } //var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = Array.apply({\n length: len\n });\n\n if (len > 1) {\n for (j = 0; j < len; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; //arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n //arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n } else {\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n var loopInDuration = function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }.bind(this);\n\n var loopOutDuration = function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }.bind(this);\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n ;\n\n function easeOut(t, val1, val2) {\n return -(val2 - val1) * t * (t - 2) + val1;\n }\n\n ;\n\n function nearestKey(time) {\n var i,\n len = data.k.length,\n index,\n keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (i = 0; i < len - 1; i += 1) {\n if (time === data.k[i].t) {\n index = i + 1;\n keyTime = data.k[i].t;\n break;\n } else if (time > data.k[i].t && time < data.k[i + 1].t) {\n if (time - data.k[i].t > data.k[i + 1].t - time) {\n index = i + 2;\n keyTime = data.k[i + 1].t;\n } else {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n }\n }\n\n var ob = {};\n ob.index = index;\n ob.time = keyTime / elem.comp.globalData.frameRate;\n return ob;\n }\n\n ;\n\n function key(ind) {\n var ob, i, len;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n ob = {\n time: data.k[ind].t / elem.comp.globalData.frameRate\n };\n var arr;\n\n if (ind === data.k.length - 1 && !data.k[ind].h) {\n arr = data.k[ind - 1].e;\n } else {\n arr = data.k[ind].s;\n }\n\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n ob[i] = arr[i];\n }\n\n return ob;\n }\n\n ;\n\n function framesToTime(frames, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return frames / fps;\n }\n\n ;\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n ;\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n ;\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n var time, velocity, value, textIndex, textTotal, selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n\n function executeExpression() {\n if (_needsRandom) {\n seedRandom(randSeed);\n }\n\n if (this.frameExpressionId === elem.globalData.frameId && this.type !== 'textSelector') {\n return;\n }\n\n if (this.lock) {\n this.v = duplicatePropertyValue(this.pv, this.mult);\n return true;\n }\n\n if (this.type === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface(\"ADBE Transform Group\");\n anchorPoint = transform.anchorPoint;\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer(\"ADBE Root Vectors Group\");\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n this.lock = true;\n\n if (this.getPreValue) {\n this.getPreValue();\n }\n\n value = this.pv;\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n bindedFn();\n this.frameExpressionId = elem.globalData.frameId;\n var i, len;\n\n if (this.mult) {\n if (typeof this.v === 'number' || this.v instanceof Number || this.v instanceof String || typeof this.v === 'string') {\n this.v *= this.mult;\n } else if (this.v.length === 1) {\n this.v = this.v[0] * this.mult;\n } else {\n len = this.v.length;\n\n if (value === this.v) {\n this.v = len === 2 ? [value[0], value[1]] : [value[0], value[1], value[2]];\n }\n\n for (i = 0; i < len; i += 1) {\n this.v[i] *= this.mult;\n }\n }\n }\n\n if (this.v.length === 1) {\n this.v = this.v[0];\n }\n\n if (typeof this.v === 'number' || this.v instanceof Number || this.v instanceof String || typeof this.v === 'string') {\n if (this.lastValue !== this.v) {\n this.lastValue = this.v;\n this.mdf = true;\n }\n } else if (this.v._length) {\n if (!shapesEqual(this.v, this.localShapeCollection.shapes[0])) {\n this.mdf = true;\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(shape_pool.clone(this.v));\n }\n } else {\n len = this.v.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.v[i] !== this.lastValue[i]) {\n this.lastValue[i] = this.v[i];\n this.mdf = true;\n }\n }\n }\n\n this.lock = false;\n }\n\n return executeExpression;\n }\n\n ;\n ob.initiateExpression = initiateExpression;\n return ob;\n }();\n\n var ShapeExpressionInterface = function () {\n var ob = {\n createShapeInterface: createShapeInterface,\n createGroupInterface: createGroupInterface,\n createTrimInterface: createTrimInterface,\n createStrokeInterface: createStrokeInterface,\n createTransformInterface: createTransformInterface,\n createEllipseInterface: createEllipseInterface,\n createStarInterface: createStarInterface,\n createRectInterface: createRectInterface,\n createRoundedInterface: createRoundedInterface,\n createRepatearInterface: createRepatearInterface,\n createPathInterface: createPathInterface,\n createFillInterface: createFillInterface\n };\n\n function createShapeInterface(shapes, view, propertyGroup) {\n return shapeInterfaceFactory(shapes, view, propertyGroup);\n }\n\n function createGroupInterface(shapes, view, propertyGroup) {\n return groupInterfaceFactory(shapes, view, propertyGroup);\n }\n\n function createFillInterface(shape, view, propertyGroup) {\n return fillInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createStrokeInterface(shape, view, propertyGroup) {\n return strokeInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createTrimInterface(shape, view, propertyGroup) {\n return trimInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createTransformInterface(shape, view, propertyGroup) {\n return transformInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createEllipseInterface(shape, view, propertyGroup) {\n return ellipseInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createStarInterface(shape, view, propertyGroup) {\n return starInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createRectInterface(shape, view, propertyGroup) {\n return rectInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createRoundedInterface(shape, view, propertyGroup) {\n return roundedInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createRepatearInterface(shape, view, propertyGroup) {\n return repeaterInterfaceFactory(shape, view, propertyGroup);\n }\n\n function createPathInterface(shape, view, propertyGroup) {\n return pathInterfaceFactory(shape, view, propertyGroup);\n }\n\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i,\n len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty == 'gr') {\n arr.push(ShapeExpressionInterface.createGroupInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'fl') {\n arr.push(ShapeExpressionInterface.createFillInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'st') {\n arr.push(ShapeExpressionInterface.createStrokeInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tm') {\n arr.push(ShapeExpressionInterface.createTrimInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tr') {//arr.push(ShapeExpressionInterface.createTransformInterface(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty == 'el') {\n arr.push(ShapeExpressionInterface.createEllipseInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sr') {\n arr.push(ShapeExpressionInterface.createStarInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sh') {\n arr.push(ShapeExpressionInterface.createPathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rc') {\n arr.push(ShapeExpressionInterface.createRectInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rd') {\n arr.push(ShapeExpressionInterface.createRoundedInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rp') {\n arr.push(ShapeExpressionInterface.createRepatearInterface(shapes[i], view[i], propertyGroup));\n } else {//console.log(shapes[i].ty);\n }\n }\n\n return arr;\n }\n\n var shapeInterfaceFactory = function () {\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n return interfaces[value - 1];\n } else {\n var i = 0,\n len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n }\n }\n\n _interfaceFunction.propertyGroup = propertyGroup;\n interfaces = iterateElements(shapes, view, _interfaceFunction);\n return _interfaceFunction;\n };\n }();\n\n var contentsInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0,\n len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n };\n\n interfaceFunction.propertyGroup = function (val) {\n if (val === 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(val - 1);\n }\n };\n\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n interfaceFunction.propertyIndex = shape.cix;\n return interfaceFunction;\n };\n }();\n\n var groupInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n\n case 'ADBE Vector Transform Group':\n case 3:\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = function (val) {\n if (val === 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(val - 1);\n }\n };\n\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = ShapeExpressionInterface.createTransformInterface(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); //interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var fillInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'color', {\n get: function get() {\n return ExpressionValue(view.c, 1 / view.c.mult, 'color');\n }\n });\n Object.defineProperty(interfaceFunction, 'opacity', {\n get: function get() {\n return ExpressionValue(view.o, 100);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n value: shape.nm\n });\n Object.defineProperty(interfaceFunction, 'mn', {\n value: shape.mn\n });\n view.c.setGroupProperty(propertyGroup);\n view.o.setGroupProperty(propertyGroup);\n return interfaceFunction;\n };\n }();\n\n var strokeInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val === 1) {\n return ob;\n } else {\n return propertyGroup(val - 1);\n }\n }\n\n ;\n\n function _dashPropertyGroup(val) {\n if (val === 1) {\n return dashOb;\n } else {\n return _propertyGroup(val - 1);\n }\n }\n\n ;\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: function get() {\n return ExpressionValue(view.d.dataProps[i].p);\n }\n });\n }\n\n var i,\n len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } else if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'color', {\n get: function get() {\n return ExpressionValue(view.c, 1 / view.c.mult, 'color');\n }\n });\n Object.defineProperty(interfaceFunction, 'opacity', {\n get: function get() {\n return ExpressionValue(view.o, 100);\n }\n });\n Object.defineProperty(interfaceFunction, 'strokeWidth', {\n get: function get() {\n return ExpressionValue(view.w);\n }\n });\n Object.defineProperty(interfaceFunction, 'dash', {\n get: function get() {\n return dashOb;\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n value: shape.nm\n });\n Object.defineProperty(interfaceFunction, 'mn', {\n value: shape.mn\n });\n view.c.setGroupProperty(_propertyGroup);\n view.o.setGroupProperty(_propertyGroup);\n view.w.setGroupProperty(_propertyGroup);\n return interfaceFunction;\n };\n }();\n\n var trimInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(_propertyGroup);\n view.e.setGroupProperty(_propertyGroup);\n view.o.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n }\n\n interfaceFunction.propertyIndex = shape.ix;\n Object.defineProperty(interfaceFunction, 'start', {\n get: function get() {\n return ExpressionValue(view.s, 1 / view.s.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'end', {\n get: function get() {\n return ExpressionValue(view.e, 1 / view.e.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'offset', {\n get: function get() {\n return ExpressionValue(view.o);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var transformInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n view.transform.mProps.o.setGroupProperty(_propertyGroup);\n view.transform.mProps.p.setGroupProperty(_propertyGroup);\n view.transform.mProps.a.setGroupProperty(_propertyGroup);\n view.transform.mProps.s.setGroupProperty(_propertyGroup);\n view.transform.mProps.r.setGroupProperty(_propertyGroup);\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(_propertyGroup);\n view.transform.mProps.sa.setGroupProperty(_propertyGroup);\n }\n\n view.transform.op.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.a.ix === value) {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value) {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value) {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value) {\n return interfaceFunction.skewAxis;\n }\n\n if (value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'opacity', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.o, 1 / view.transform.mProps.o.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'position', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.p);\n }\n });\n Object.defineProperty(interfaceFunction, 'anchorPoint', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.a);\n }\n });\n var scaleArray = [];\n Object.defineProperty(interfaceFunction, 'scale', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.s, 1 / view.transform.mProps.s.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'rotation', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.r, 1 / view.transform.mProps.r.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'skew', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.sk);\n }\n });\n Object.defineProperty(interfaceFunction, 'skewAxis', {\n get: function get() {\n return ExpressionValue(view.transform.mProps.sa);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var ellipseInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(_propertyGroup);\n prop.p.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'size', {\n get: function get() {\n return ExpressionValue(prop.s);\n }\n });\n Object.defineProperty(interfaceFunction, 'position', {\n get: function get() {\n return ExpressionValue(prop.p);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var starInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(_propertyGroup);\n prop.os.setGroupProperty(_propertyGroup);\n prop.pt.setGroupProperty(_propertyGroup);\n prop.p.setGroupProperty(_propertyGroup);\n prop.r.setGroupProperty(_propertyGroup);\n\n if (shape.ir) {\n prop.ir.setGroupProperty(_propertyGroup);\n prop.is.setGroupProperty(_propertyGroup);\n }\n\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value) {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'position', {\n get: function get() {\n return ExpressionValue(prop.p);\n }\n });\n Object.defineProperty(interfaceFunction, 'rotation', {\n get: function get() {\n return ExpressionValue(prop.r, 1 / prop.r.mult);\n }\n });\n Object.defineProperty(interfaceFunction, 'points', {\n get: function get() {\n return ExpressionValue(prop.pt);\n }\n });\n Object.defineProperty(interfaceFunction, 'outerRadius', {\n get: function get() {\n return ExpressionValue(prop.or);\n }\n });\n Object.defineProperty(interfaceFunction, 'outerRoundness', {\n get: function get() {\n return ExpressionValue(prop.os);\n }\n });\n Object.defineProperty(interfaceFunction, 'innerRadius', {\n get: function get() {\n if (!prop.ir) {\n return 0;\n }\n\n return ExpressionValue(prop.ir);\n }\n });\n Object.defineProperty(interfaceFunction, 'innerRoundness', {\n get: function get() {\n if (!prop.is) {\n return 0;\n }\n\n return ExpressionValue(prop.is, 1 / prop.is.mult);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var rectInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(_propertyGroup);\n prop.s.setGroupProperty(_propertyGroup);\n prop.r.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size') {\n return interfaceFunction.size;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'position', {\n get: function get() {\n return ExpressionValue(prop.p);\n }\n });\n Object.defineProperty(interfaceFunction, 'roundness', {\n get: function get() {\n return ExpressionValue(prop.r);\n }\n });\n Object.defineProperty(interfaceFunction, 'size', {\n get: function get() {\n return ExpressionValue(prop.s);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var roundedInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.r.ix === value || 'Round Corners 1' === value) {\n return interfaceFunction.radius;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'radius', {\n get: function get() {\n return ExpressionValue(prop.rd);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var repeaterInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(_propertyGroup);\n prop.o.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.c.ix === value || 'Copies' === value) {\n return interfaceFunction.copies;\n } else if (shape.o.ix === value || 'Offset' === value) {\n return interfaceFunction.offset;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'copies', {\n get: function get() {\n return ExpressionValue(prop.c);\n }\n });\n Object.defineProperty(interfaceFunction, 'offset', {\n get: function get() {\n return ExpressionValue(prop.o);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n };\n }();\n\n var pathInterfaceFactory = function () {\n return function (shape, view, propertyGroup) {\n var prop = view.sh;\n\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n prop.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n }\n\n Object.defineProperty(interfaceFunction, 'path', {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop; //return shape_pool.clone(prop.v);\n }\n });\n Object.defineProperty(interfaceFunction, 'shape', {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop; //return shape_pool.clone(prop.v);\n }\n });\n Object.defineProperty(interfaceFunction, '_name', {\n value: shape.nm\n });\n Object.defineProperty(interfaceFunction, 'ix', {\n value: shape.ix\n });\n Object.defineProperty(interfaceFunction, 'mn', {\n value: shape.mn\n });\n return interfaceFunction;\n };\n }();\n\n return ob;\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue, _sourceText;\n\n function _thisLayerFunction() {}\n\n Object.defineProperty(_thisLayerFunction, \"sourceText\", {\n get: function get() {\n var stringValue = elem.textProperty.currentData.t;\n\n if (elem.textProperty.currentData.t !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function toWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time) {\n //Todo implement value at time on transform properties\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n transformMat = this._elem.finalTransform.mProp;\n } else {\n transformMat = this._elem.finalTransform.mProp;\n }\n\n transformMat.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time) {\n //Todo implement value at time on transform properties\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n transformMat = this._elem.finalTransform.mProp;\n } else {\n transformMat = this._elem.finalTransform.mProp;\n }\n\n transformMat.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return function (elem) {\n var transformInterface = TransformExpressionInterface(elem.transform);\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Root Vectors Group\":\n case \"Contents\":\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case \"Transform\":\n case \"transform\":\n case \"ADBE Transform Group\":\n return transformInterface;\n\n case 4:\n case \"ADBE Effect Parade\":\n return _thisLayerFunction.effect;\n }\n }\n\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n Object.defineProperty(_thisLayerFunction, 'hasParent', {\n get: function get() {\n return !!elem.hierarchy;\n }\n });\n Object.defineProperty(_thisLayerFunction, 'parent', {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"rotation\", {\n get: function get() {\n return transformInterface.rotation;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"scale\", {\n get: function get() {\n return transformInterface.scale;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"position\", {\n get: function get() {\n return transformInterface.position;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"anchorPoint\", {\n get: function get() {\n return transformInterface.anchorPoint;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"transform\", {\n get: function get() {\n return transformInterface;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"width\", {\n get: function get() {\n if (elem.data.ty === 0) {\n return elem.data.w;\n }\n\n return 100;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"height\", {\n get: function get() {\n if (elem.data.ty === 0) {\n return elem.data.h;\n }\n\n return 100;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"source\", {\n get: function get() {\n return elem.data.refId;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"index\", {\n get: function get() {\n return elem.data.ind;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"_name\", {\n value: elem.data.nm\n });\n Object.defineProperty(_thisLayerFunction, \"content\", {\n get: function get() {\n return _thisLayerFunction.shapeInterface;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"active\", {\n get: function get() {\n return elem.isVisible;\n }\n });\n Object.defineProperty(_thisLayerFunction, \"text\", {\n get: function get() {\n return _thisLayerFunction.textInterface;\n }\n });\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0,\n len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return {\n active: false\n };\n }\n\n Object.defineProperty(_thisLayerFunction, \"_name\", {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n return _thisLayerFunction;\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case \"scale\":\n case \"Scale\":\n case \"ADBE Scale\":\n case 6:\n return _thisFunction.scale;\n\n case \"rotation\":\n case \"Rotation\":\n case \"ADBE Rotation\":\n case \"ADBE Rotate Z\":\n case 10:\n return _thisFunction.rotation;\n\n case \"position\":\n case \"Position\":\n case \"ADBE Position\":\n case 2:\n return transform.position;\n\n case \"anchorPoint\":\n case \"AnchorPoint\":\n case \"Anchor Point\":\n case \"ADBE AnchorPoint\":\n case 1:\n return _thisFunction.anchorPoint;\n\n case \"opacity\":\n case \"Opacity\":\n case 11:\n return _thisFunction.opacity;\n }\n }\n\n Object.defineProperty(_thisFunction, \"rotation\", {\n get: function get() {\n return transform.rotation;\n }\n });\n Object.defineProperty(_thisFunction, \"scale\", {\n get: function get() {\n return transform.scale;\n }\n });\n Object.defineProperty(_thisFunction, \"position\", {\n get: function get() {\n return transform.position;\n }\n });\n Object.defineProperty(_thisFunction, \"xPosition\", {\n get: function get() {\n return transform.xPosition;\n }\n });\n Object.defineProperty(_thisFunction, \"yPosition\", {\n get: function get() {\n return transform.yPosition;\n }\n });\n Object.defineProperty(_thisFunction, \"anchorPoint\", {\n get: function get() {\n return transform.anchorPoint;\n }\n });\n Object.defineProperty(_thisFunction, \"opacity\", {\n get: function get() {\n return transform.opacity;\n }\n });\n Object.defineProperty(_thisFunction, \"skew\", {\n get: function get() {\n return transform.skew;\n }\n });\n Object.defineProperty(_thisFunction, \"skewAxis\", {\n get: function get() {\n return transform.skewAxis;\n }\n });\n return _thisFunction;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0,\n len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effects) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i,\n len = elem.effects.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effects.effectElements[i], propertyGroup, elem));\n }\n\n return function (name) {\n var effects = elem.data.ef,\n i = 0,\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n };\n }\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n var effectElements = [];\n var i,\n len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n function _propertyGroup(val) {\n if (val === 1) {\n return groupInterface;\n } else {\n return propertyGroup(val - 1);\n }\n }\n\n var groupInterface = function groupInterface(name) {\n var effects = data.ef,\n i = 0,\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n } else {\n return effectElements[i]();\n }\n }\n\n i += 1;\n }\n\n return effectElements[0]();\n };\n\n groupInterface.propertyGroup = _propertyGroup;\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return data.np;\n }\n });\n groupInterface.active = data.en !== 0;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return ExpressionValue(element.p);\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(propertyGroup);\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n\n var MaskManager = function MaskManager(maskManager, elem) {\n var _maskManager = maskManager;\n var _elem = elem;\n\n var _masksInterfaces = Array.apply(null, {\n length: maskManager.viewData.length\n });\n\n var i,\n len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionValue = function () {\n return function (elementProp, mult, type) {\n var expressionValue, arrayValue;\n\n if (elementProp.k) {\n elementProp.getValue();\n }\n\n var i, len, arrValue;\n\n if (type) {\n if (type === 'color') {\n len = 4;\n expressionValue = Array.apply(null, {\n length: len\n });\n arrValue = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n expressionValue[i] = arrValue[i] = mult && i < 3 ? elementProp.v[i] * mult : 1;\n }\n\n expressionValue.value = arrValue;\n }\n } else if (typeof elementProp.v === 'number' || elementProp.v instanceof Number) {\n expressionValue = mult ? new Number(elementProp.v * mult) : new Number(elementProp.v);\n expressionValue.value = mult ? elementProp.v * mult : elementProp.v;\n } else {\n len = elementProp.v.length;\n expressionValue = Array.apply(null, {\n length: len\n });\n arrValue = Array.apply(null, {\n length: len\n });\n\n for (i = 0; i < len; i += 1) {\n expressionValue[i] = arrValue[i] = mult ? elementProp.v[i] * mult : elementProp.v[i];\n }\n\n expressionValue.value = arrValue;\n }\n\n expressionValue.numKeys = elementProp.keyframes ? elementProp.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n } else {\n return elementProp.keyframes[pos - 1].t;\n }\n };\n\n expressionValue.valueAtTime = elementProp.getValueAtTime;\n expressionValue.propertyGroup = elementProp.propertyGroup;\n return expressionValue;\n };\n }();\n\n function SliderEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, dynamicProperties);\n }\n\n function AngleEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, dynamicProperties);\n }\n\n function ColorEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, dynamicProperties);\n }\n\n function PointEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, dynamicProperties);\n }\n\n function LayerIndexEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, dynamicProperties);\n }\n\n function MaskIndexEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, dynamicProperties);\n }\n\n function CheckboxEffect(data, elem, dynamicProperties) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, dynamicProperties);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element, dynamicProperties) {\n var effects = data.ef;\n this.effectElements = [];\n var i,\n len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i++) {\n effectItem = new GroupEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element, dynamicProperties) {\n this.dynamicProperties = [];\n this.init(data, element, this.dynamicProperties);\n\n if (this.dynamicProperties.length) {\n dynamicProperties.push(this);\n }\n }\n\n GroupEffect.prototype.getValue = function () {\n this.mdf = false;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n this.mdf = this.dynamicProperties[i].mdf ? true : this.mdf;\n }\n };\n\n GroupEffect.prototype.init = function (data, element, dynamicProperties) {\n this.data = data;\n this.mdf = false;\n this.effectElements = [];\n var i,\n len = this.data.ef.length;\n var eff,\n effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n\n case 6:\n eff = new NoValueEffect(effects[i], element, dynamicProperties);\n this.effectElements.push(eff);\n break;\n }\n }\n };\n\n var bodymovinjs = {};\n\n function setLocationHref(href) {\n locationHref = href;\n }\n\n function play(animation) {\n animationManager.play(animation);\n }\n\n function pause(animation) {\n animationManager.pause(animation);\n }\n\n function togglePause(animation) {\n animationManager.togglePause(animation);\n }\n\n function setSpeed(value, animation) {\n animationManager.setSpeed(value, animation);\n }\n\n function setDirection(value, animation) {\n animationManager.setDirection(value, animation);\n }\n\n function stop(animation) {\n animationManager.stop(animation);\n }\n\n function moveFrame(value) {\n animationManager.moveFrame(value);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function registerAnimation(elem) {\n return animationManager.registerAnimation(elem);\n }\n\n function resize() {\n animationManager.resize();\n }\n\n function start() {\n animationManager.start();\n }\n\n function goToAndStop(val, isFrame, animation) {\n animationManager.goToAndStop(val, isFrame, animation);\n }\n\n function setSubframeRendering(flag) {\n subframeEnabled = flag;\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function destroy(animation) {\n return animationManager.destroy(animation);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n defaultCurveSegments = 200;\n break;\n\n case 'medium':\n defaultCurveSegments = 50;\n break;\n\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n\n if (defaultCurveSegments >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n expressionsPlugin = plugin;\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case \"propertyFactory\":\n return PropertyFactory;\n\n case \"shapePropertyFactory\":\n return ShapePropertyFactory;\n\n case \"matrix\":\n return Matrix;\n }\n }\n\n bodymovinjs.play = play;\n bodymovinjs.pause = pause;\n bodymovinjs.setLocationHref = setLocationHref;\n bodymovinjs.togglePause = togglePause;\n bodymovinjs.setSpeed = setSpeed;\n bodymovinjs.setDirection = setDirection;\n bodymovinjs.stop = stop;\n bodymovinjs.moveFrame = moveFrame;\n bodymovinjs.searchAnimations = searchAnimations;\n bodymovinjs.registerAnimation = registerAnimation;\n bodymovinjs.loadAnimation = loadAnimation;\n bodymovinjs.setSubframeRendering = setSubframeRendering;\n bodymovinjs.resize = resize;\n bodymovinjs.start = start;\n bodymovinjs.goToAndStop = goToAndStop;\n bodymovinjs.destroy = destroy;\n bodymovinjs.setQuality = setQuality;\n bodymovinjs.inBrowser = inBrowser;\n bodymovinjs.installPlugin = installPlugin;\n bodymovinjs.__getFactory = getFactory;\n bodymovinjs.version = '4.13.0';\n\n function checkReady() {\n if (document.readyState === \"complete\") {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n }\n\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n var queryString = myScript.src.replace(/^[^\\?]+\\??/, '');\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100);\n return bodymovinjs;\n});"],"sourceRoot":""}