{"version":3,"sources":["webpack:///./node_modules/lottie-web/build/player/lottie.js"],"names":["navigator","root","factory","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","expressionsPlugin","isSafari","test","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","len","length","random","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","BaseEvent","prototype","triggerEvent","eventName","args","_cbs","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","Uint8ClampedArray","Float32Array","Int16Array","value","arr","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","Matrix","_cos","cos","_sin","sin","_tan","tan","_rnd","reset","props","rotate","angle","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","scale","sz","setTransform","a","c","e","j","k","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","equals","matr","clone","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","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","result","typ","entropy","nodecrypto","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","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","extendPrototype","sources","destination","sourcePrototype","attr","hasOwnProperty","getDescriptor","object","Object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezier_length_pool","newElement","percents","lengths","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezier_segment_points","getSegmentsLength","shapeData","segmentsLength","segments_length_pool","closed","pathV","pathO","pathI","_length","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","pathData","paths","data","__converted","checkColors","iterateShapes","checkShapes","cl","singleShape","moduleOb","__complete","dataManager","FontManager","emptyChar","w","size","combinedCharacters","setUpNode","font","family","parentNode","fontFamily","node","innerText","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","familyArray","enabledFamilies","join","trimFontOptions","parent","createHelper","def","fontData","tHelper","setAttribute","fFamily","fStyle","fWeight","textContent","fClass","getContext","concat","Font","fonts","typekitLoaded","isLoaded","_warned","initTime","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","getCombinedCharacterCodes","addChars","found","ch","addFonts","defs","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","origin","querySelectorAll","href","rel","src","sc","helper","cache","getCharData","char","console","warn","getFontByName","name","fName","measureText","fontName","index","doubleSize","getComputedTextLength","singleSize","loadedCount","removeChild","PropertyFactory","initFrame","math_abs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","slerp","createQuaternion","constructor","values","c3","s1","s2","s3","getValueAtCurrentTime","comp","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","processEffectsSequence","elem","globalData","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","arrLen","getProp","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","or","sk","sa","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v1","v2","frameRate","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","point_pool","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","init","cnt","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","shape_pool","releaseShapes","addShape","ShapeProperty","shapeCollection_pool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","convertEllToPath","s0","_cw","_v","StarShapeProperty","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","convertRectToPath","v0","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","shapePath","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","amount","centerPoint","pathLength","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","copies","ceil","group","reloadShapes","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","op","comparePoints","buildShapeString","pathNodes","_o","_i","shapeString","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","ImagePreloader","proxyImage","canvas","height","ctx","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","imagesLoadedCb","getAssetsPath","assetData","assetsPath","original_path","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","destroy","getImage","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","append","setCacheType","elementHelper","featureSupport","maskType","filtersFactory","createFilter","filId","fil","createAlphaToLuminanceFilter","feColorMatrix","assetLoader","formatResponse","xhr","response","responseText","load","errorCallback","XMLHttpRequest","open","responseType","err","send","onreadystatechange","readyState","status","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimator_animatables","sw","fc","fh","fs","fb","TextSelectorProp","getTextSelectorProp","LetterProps","TextProperty","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","of","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","searchProperties","maskManager","getMaskProperty","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","mask","animators","matrixHelper","mHelper","renderedLettersCount","letters","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","getMult","anIndexes","totalChars","line","extra","an","animatorOffset","add","rot","atan","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","text","charCode","charactersArray","charAt","substr","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","undefined","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","_currentTextLength","finalS","finalE","xe","ne","textProperty","easer","tot","newCharsFlag","divisor","pool_factory","initialLength","_create","_release","_clone","pooling","cloned","shapeCollection","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","filterSize","pendingElements","destroyed","rendererType","CanvasRenderer","clearCanvas","context","dpr","wrapper","devicePixelRatio","currentGlobalAlpha","contextData","CVContextData","transformMat","HybridRenderer","threeDElements","camera","supports3d","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","filterID","expan","lastPath","lastOperator","filterId","lastRadius","createLayerSolidPath","getShapeProp","invRect","drawPath","maskedElement","addRenderableComponent","HierarchyElement","FrameElement","TransformElement","RenderableElement","RenderableDOMElement","ProcessedElement","SVGStyleData","level","lvl","hd","pElem","msElem","SVGShapeData","transformers","caches","lStr","SVGTransformData","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","checkLayers","num","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","Error","AudioElement","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","searchExtraCompositions","xt","initExpressions","registerComposition","setupGlobalData","animData","fontsContainer","getAssetData","imageLoader","imagePreloader","audioController","fr","compSize","NullElement","SVGShapeElement","SVGTextElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","show","CVShapeElement","CVTextElement","CVImageElement","CVCompElement","CVSolidElement","ctxTransform","cProps","cTr","trProps","canvasContext","ctxOpacity","globalAlpha","cO","restore","save","actionFlag","cArrPos","duplicate","saved","savedOp","blendMode","popped","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","beginPath","closePath","clip","clearRect","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HShapeElement","HTextElement","HCameraElement","HImageElement","HCompElement","HSolidElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","setup","cWidth","cHeight","perspective","webkitPerspective","floatingContainer","isFirstFrame","finalMat","finalTransform","mProp","getMaskelement","pathString","pathShapeValue","initHierarchy","_isParent","prepareProperties","isVisible","initTransform","_matMdf","_opMdf","ao","renderTransform","globalToLocal","transforms","ptNew","initRenderable","isInRange","hidden","isTransparent","renderableComponents","component","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","initElement","initBaseData","initRendererElement","createContainerElements","createRenderableComponents","createContent","baseElement","renderElement","renderInnerContent","innerElem","destroyBaseElement","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","stop","gf","cst","opacityId","opFill","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","tm","_placeholder","textSpans","shapesData","stylesList","shapeModifiers","itemsData","processedElements","animatedContents","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGGaussianBlurEffect","feGaussianBlur","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feOffset","feFlood","feComposite","originalNodeAdded","sequence","processSequence","processSequences","getNewKey","checkMasks","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","content","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","sr","effectsManager","EffectsManager","getType","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","cp","clipId","cpGroup","renderableEffectsManager","SVGEffects","addShapeToModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","elems","getElements","destroyElements","pr","volumeValue","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","time","textBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","fn","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","sigma","dimensions","sigmaX","sigmaY","edgeMode","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","call","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","ef","filters","CVBaseElement","CVMaskElement","hasMasks","stroke","fill","currentRender","sWidth","fValue","CVEffects","HBaseElement","shapesContainer","currentBBox","textPaths","isMasked","pe","_prevMat","HEffects","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","newLength","currentSavedOp","set","createElements","globalCompositeOperation","hideElement","showElement","forceRealStack","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","drawImage","parentMatrix","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","preTransforms","co","wi","da","do","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","checkBlendMode","tg","addEffects","backgroundColor","_createBaseContainerElements","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","Image","imageElem","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","hasMatrixChanged","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","activate","nowTime","elapsedTime","advanceTime","first","loadAnimation","params","setParams","setSpeed","setDirection","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","freeze","unfreeze","getRegisteredAnimations","animations","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","animType","rendererSettings","parseInt","autoloadSegments","initialSegment","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","completeData","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","frameModifier","goToAndPlay","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","Number","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","sum","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","needsVelocity","_needsRandom","elemType","$bm_transform","effect","thisProperty","valueAtTime","defineProperty","frameDuration","displayStartTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","__expression_functions","scoped_bm_rt","xf","eval","expression_function","numKeys","active","wiggle","freq","amp","addedAmps","periods","loopInDuration","duration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","nearestKey","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","getSpeedAtTime","speed","_cachingAtTime","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","propertyIndex","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","propertyGetShapeProp","trims","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","ShapePathInterface","view","interfaceFunction","_propertyGroup","propertyGroupFactory","PropertyInterface","defineProperties","mn","parentPropertyGroup","propertyName","_name","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","interfaces","numProperties","transformInterface","transformInterfaceFactory","cix","contentsInterfaceFactory","np","ExpressionPropertyInterface","_dashPropertyGroup","dashOb","addPropertyToDashOb","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","_sourceText","_thisLayerFunction","sourceText","stringValue","_prevValue","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","anchorPointDescriptor","TransformExpressionInterface","anchor_point","startTime","source","MaskManagerInterface","effects","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_transformFactory","_pz","_px","_py","compositions","_thisProjectFunction","createGroupInterface","groupInterface","createValueInterface","enabled","en","expressionProperty","effectsData","MaskInterface","_mask","_data","_masksInterfaces","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TextExpressionSelectorProp","propertyGetTextProp","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","getValueProxy","total","eff","lottie","setLocationHref","setSubframeRendering","setQuality","isNaN","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript"],"mappings":"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","file":"ea88be26-35ef3588b36dd6a18494.js","sourcesContent":["require(\"core-js/modules/es.typed-array.set.js\");\nrequire(\"core-js/modules/es.typed-array.sort.js\");\ntypeof navigator !== \"undefined\" && 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.lottie = factory(root);\n root.bodymovin = root.lottie;\n }\n}(window || {}, function (window) {\n \"use strict\";\n\n var svgNS = \"http://www.w3.org/2000/svg\";\n var locationHref = '';\n var initialDefaultFrame = -999999;\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 (function () {\n var propertyNames = [\"abs\", \"acos\", \"acosh\", \"asin\", \"asinh\", \"atan\", \"atanh\", \"atan2\", \"ceil\", \"cbrt\", \"expm1\", \"clz32\", \"cos\", \"cosh\", \"exp\", \"floor\", \"fround\", \"hypot\", \"imul\", \"log\", \"log1p\", \"log2\", \"log10\", \"max\", \"min\", \"pow\", \"random\", \"round\", \"sign\", \"sin\", \"sinh\", \"sqrt\", \"tan\", \"tanh\", \"trunc\", \"E\", \"LN10\", \"LN2\", \"LOG10E\", \"LOG2E\", \"PI\", \"SQRT1_2\", \"SQRT2\"];\n var i,\n len = propertyNames.length;\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n function ProjectInterface() {\n return {};\n }\n BMMath.random = Math.random;\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i,\n len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n };\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\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 roundValues(false);\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 function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n return '__lottie_element_' + ++_count;\n };\n }();\n function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, t;\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 switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return [r, g, b];\n }\n function RGBtoHSV(r, g, b) {\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 switch (max) {\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n return [h, s, v];\n }\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\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 if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length == 1 ? '0' + hex : hex;\n }\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n function BaseEvent() {}\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var len = this._cbs[eventName].length;\n for (var i = 0; i < len; i++) {\n this._cbs[eventName][i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: 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 while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0,\n arr = [],\n value;\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArray(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } else if (type === 'int16') {\n return new Int16Array(len);\n } else if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArray;\n } else {\n return createRegularArray;\n }\n }();\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n function createNS(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n function createTag(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n function DynamicPropertyContainer() {}\n ;\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i,\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\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 var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\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 function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _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, _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);\n //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\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 function translate(tx, ty, tz) {\n tz = tz || 0;\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 return this;\n }\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\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 //NOTE: commenting this condition because TurboFan deoptimizes code when present\n //if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] = _p[15] * p2;\n //}\n this._identityCalculated = false;\n return this;\n }\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\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 return this._identity;\n }\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\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 function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\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 function getInverseMatrix() {\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 var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n function inversePoints(pts) {\n var i,\n len = pts.length,\n retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0],\n p1 = this.props[1],\n p4 = this.props[4],\n p5 = this.props[5],\n p12 = this.props[12],\n p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n return arr;\n }\n function applyToPointArray(x, y, z) {\n var arr;\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [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 return arr;\n }\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n function toCSS() {\n //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n return cssValue;\n }\n function roundMatrixProperty(val) {\n var v = 10000;\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n return val;\n }\n function to2dCSS() {\n //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return \"matrix(\" + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + \")\";\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.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\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 (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 //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {};\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // 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 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 while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\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 d /= 2; // right using integer math until\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 prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\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 }\n // Only provide the .state method if requested via options.state.\n prng.state = function () {\n return copy(arc4, {});\n };\n }\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 if (is_math_call) {\n math[rngname] = prng;\n return seed;\n }\n\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 math['seed' + rngname] = seedrandom;\n\n //\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 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 = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) {\n key = [keylen++];\n }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\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 }\n\n // The \"g\" method returns the next (count) outputs as one number.\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 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 me.i = i;\n me.j = j;\n return r;\n // 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 };\n }\n\n //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\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 function flatten(obj, depth) {\n var result = [],\n typ = typeof obj,\n prop;\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 return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n }\n\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 function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n return tostring(key);\n }\n\n //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\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\n //\n // tostring()\n // Converts an array of charcodes to a string\n //\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n\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 mixkey(math.random(), pool);\n\n //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n\n // End anonymous scope, and pass initial values.\n })([],\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\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\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 function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1) {\n return 3.0 * aA1;\n }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\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 function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\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 return currentT;\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 return aGuessT;\n }\n\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\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 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 if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n\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 for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\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 for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\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 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 (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\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 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 function extendPrototype(sources, destination) {\n var i,\n len = sources.length,\n sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (sourcePrototype.hasOwnProperty(attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n function bezFunction() {\n var easingFunctions = [];\n var math = Math;\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.001 && det1 < 0.001;\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 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 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 return diffDist > -0.0001 && diffDist < 0.0001;\n }\n var getBezierLength = function () {\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 = bezier_length_pool.newElement();\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\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 if (lastPoint[i] !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n function getSegmentsLength(shapeData) {\n var segmentsLength = segments_length_pool.newElement();\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 = segmentsLength.lengths;\n var totalLength = 0;\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 if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n if (!storedData[bezierName]) {\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 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 var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\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 if (lastPoint !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\n };\n }();\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bm_floor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n } else {\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n if (initPos < 0 || initPos >= len - 1) {\n //FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\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 function getSegmentArray() {}\n var bezier_segment_points = createTypedArray('float32', 8);\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\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;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3;\n var t0t0u0_3 = t0 * t0 * u0 * 3;\n var t0t0t0 = t0 * t0 * t0;\n //\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1;\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;\n var t0t0t1 = t0 * t0 * t1;\n //\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1;\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;\n var t0t1t1 = t0 * t1 * t1;\n //\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1;\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;\n var t1t1t1 = t1 * t1 * t1;\n for (i = 0; i < len; i += 1) {\n bezier_segment_points[i * 4] = Math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 1] = Math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 2] = Math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 3] = Math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000;\n }\n return bezier_segment_points;\n }\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n var bez = bezFunction();\n function dataFunctionManager() {\n //var tCanvasHelper = createTag('canvas').getContext('2d');\n\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 for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (!('ks' in layerData) || layerData.completed) {\n continue;\n }\n layerData.completed = true;\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n animArray = [];\n lastFrame = -1;\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\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 function findCompLayers(id, comps) {\n var i = 0,\n len = comps.length;\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 return JSON.parse(JSON.stringify(comps[i].layers));\n }\n i += 1;\n }\n }\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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 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 if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\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 function convertPathsToAbsoluteValues(path) {\n var i,\n len = path.i.length;\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 function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n } else if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n } else if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n } else if (animVersion[2] > minimum[2]) {\n return false;\n }\n }\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\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 function iterateLayers(layers) {\n var i,\n len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\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 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 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 for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\n }\n }\n }\n }\n };\n }();\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n function iterateShapes(shapes) {\n var i,\n len = shapes.length;\n var j, jLen;\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 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 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 function iterateLayers(layers) {\n var i,\n len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\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 var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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 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 if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n function iterateLayers(layers) {\n var layerData;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 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 if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\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 completeData(animationData, fontManager) {\n if (animationData.__complete) {\n return;\n }\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets, fontManager);\n animationData.__complete = true;\n //blitAnimation(animationData, animationData.assets, fontManager);\n }\n\n function completeText(data, fontManager) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n data.singleShape = true;\n }\n }\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n var dataManager = dataFunctionManager();\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: []\n };\n var combinedCharacters = [];\n //Hindi characters\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i,\n len = familyArray.length;\n var enabledFamilies = [];\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n return enabledFamilies.join(',');\n }\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n parentNode.style.fontFamily = family;\n var node = createTag('span');\n // Characters that vary significantly among different fonts\n node.innerText = 'giItT1WQy@!-/#';\n // Visible - so we can measure it - but not on the screen\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px';\n // Large font size makes even subtle changes obvious\n parentNode.style.fontSize = '300px';\n // Reset any font properties\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode);\n\n // Remember width with no applied web font\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n function checkLoadedFonts() {\n var i,\n len = this.fonts.length;\n var node, w;\n var loadedCount = len;\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n continue;\n }\n if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n function createHelper(def, fontData) {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px';\n //tHelper.style.fontFamily = fontData.fFamily;\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontData.fStyle);\n tHelper.setAttribute('font-weight', fontData.fWeight);\n tHelper.textContent = '1';\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n def.appendChild(tHelper);\n var tCanvasHelper = createTag('canvas').getContext('2d');\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily;\n //tCanvasHelper.font = ' 100px '+ fontData.fFamily;\n return tHelper;\n }\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n var fontArr = fontData.list;\n var i,\n len = fontArr.length;\n var _pendingFonts = len;\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = \"text/css\";\n s.innerText = \"@font-face {\" + \"font-family: \" + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n for (j = 0; j < loadedSelector.length; j++) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = \"text/css\";\n l.rel = \"stylesheet\";\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n for (j = 0; j < loadedSelector.length; j++) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n fontArr[i].helper = createHelper(defs, fontArr[i]);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n //On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n //Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i,\n len = chars.length;\n var j,\n jLen = this.chars.length,\n found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\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 j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n function getCharData(char, style, font) {\n var i = 0,\n len = this.chars.length;\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 i += 1;\n }\n if ((typeof char === 'string' && char.charCodeAt(0) !== 13 || !char) && console && console.warn && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', char, style, font);\n }\n return emptyChar;\n }\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n //Canvas version\n //fontData.cache[index] = tHelper.measureText(char).width / 100;\n //SVG version\n //console.log(tHelper.getBBox().width)\n if (char === ' ') {\n tHelper.textContent = '|' + char + '|';\n var doubleSize = tHelper.getComputedTextLength();\n tHelper.textContent = '||';\n var singleSize = tHelper.getComputedTextLength();\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n tHelper.textContent = char;\n fontData.cache[index + 1] = tHelper.getComputedTextLength() / 100;\n }\n }\n return fontData.cache[index + 1] * size;\n }\n function getFontByName(name) {\n var i = 0,\n len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n function getCombinedCharacterCodes() {\n return combinedCharacters;\n }\n function setIsLoaded() {\n this.isLoaded = true;\n }\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n //TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it. \n Font.getCombinedCharacterCodes = getCombinedCharacterCodes;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var math_abs = Math.abs;\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1,\n flag = true;\n var keyData, nextKeyData;\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n var k, kLen, perc, jLen, j, fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n if (keyData.to) {\n if (!keyData.bezierData) {\n keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n var bezierData = keyData.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n // caching._lastKeyframeIndex = -1;\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 perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\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 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 break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX, outY, inX, inY, keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyData.__fnct) {\n keyData.__fnct = [];\n }\n if (!keyData.__fnct[i]) {\n outX = typeof keyData.o.x[i] === 'undefined' ? keyData.o.x[0] : keyData.o.x[i];\n outY = typeof keyData.o.y[i] === 'undefined' ? keyData.o.y[0] : keyData.o.y[i];\n inX = typeof keyData.i.x[i] === 'undefined' ? keyData.i.x[0] : keyData.i.x[i];\n inY = typeof keyData.i.y[i] === 'undefined' ? keyData.i.y[0] : keyData.i.y[i];\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 perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n\n //based on @Toji's https://github.com/toji/gl-matrix/\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3],\n bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n function getValueAtCurrentTime() {\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 if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n if (math_abs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0,\n len = this.v.length;\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (math_abs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var multipliedValue;\n var i,\n len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i,\n len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n var arr = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i,\n len = data.k.length;\n var s, e, to, ti;\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\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 if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n function getProp(elem, data, type, mult, container) {\n var p;\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\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 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 function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n this.iterateDynamicProperties();\n if (this._mdf || forceRender) {\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\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 if (this.autoOriented) {\n var v1,\n v2,\n frameRate = this.elem.globalData.frameRate;\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\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) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / 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 / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px,\n py = this.py,\n frameRate;\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v1 = v2 = defaultVector;\n }\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n if (this.data.p && 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 this.frameId = this.elem.globalData.frameId;\n }\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n } else {\n return;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.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 this.appliedTransformations = 4;\n }\n }\n function autoOrient() {\n //\n //var prevP = this.getValueAtTime();\n }\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix();\n //Precalculated matrix with non animated properties\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n if (data.or.k[0].ti) {\n var i,\n len = data.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = data.or.k[i].ti = null;\n }\n }\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n //sh Indicates it needs to be capped between -180 and 180\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this);\n // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n while (i < len) {\n this.v[i] = point_pool.newElement();\n this.o[i] = point_pool.newElement();\n this.i[i] = point_pool.newElement();\n i += 1;\n }\n };\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\n };\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n case 'i':\n arr = this.i;\n break;\n case 'o':\n arr = this.o;\n break;\n }\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = point_pool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\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 ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v,\n outPoints = this.o,\n inPoints = this.i;\n var init = 0;\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n return newPath;\n };\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS, keyPropE, isHold, j, k, jLen, kLen, perc, vertexValue;\n var kf = this.keyframes;\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /*if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n }*/\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1,\n flag = true,\n keyData,\n nextKeyData;\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n isHold = keyData.h === 1;\n iterationIndex = i;\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 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 perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n function interpolateShapeCurrentTime() {\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 var lastFrame = this._caching.lastFrame;\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n ////\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching);\n ////\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i,\n len = shape1._length;\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 return true;\n }\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shape_pool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n } else if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k;\n var i,\n len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n ;\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = 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 this.effectsSequence = [];\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\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.newElement();\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 this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n function EllShapeProperty(elem, data) {\n /*this.v = {\r\n v: createSizedArray(4),\r\n i: createSizedArray(4),\r\n o: createSizedArray(4),\r\n c: true\r\n };*/\n this.v = shape_pool.newElement();\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.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n ;\n EllShapeProperty.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: 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 var _cw = this.d !== 3;\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapeProperty);\n return EllShapeProperty;\n }();\n var StarShapeProperty = function () {\n function StarShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\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.initDynamicPropertyContainer(elem);\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n ;\n StarShapeProperty.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: 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 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 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\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 longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\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 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 currentAng += angle * dir;\n }\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapeProperty);\n return StarShapeProperty;\n }();\n var RectShapeProperty = function () {\n function RectShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\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.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n ;\n RectShapeProperty.prototype = {\n convertRectToPath: 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 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 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 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 getValue: function getValue(frameNum) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapeProperty);\n return RectShapeProperty;\n }();\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n if (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 if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n function getConstructorFunction() {\n return ShapeProperty;\n }\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n return ob;\n }();\n function ShapeModifier() {}\n ShapeModifier.prototype.initModifierProperties = function () {};\n ShapeModifier.prototype.addShapeToModifier = function () {};\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollection_pool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n function TrimModifier() {}\n extendPrototype([ShapeModifier], TrimModifier);\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\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 var shapeSegments = [];\n var i,\n len = segments.length,\n segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {} else {\n var shapeS, shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n };\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i,\n len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segments_length_pool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n };\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s, e;\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n if (o < 0) {\n o += 1;\n }\n s = (this.s.v > 1 ? 1 : this.s.v < 0 ? 0 : this.s.v) + o;\n e = (this.e.v > 1 ? 1 : this.e.v < 0 ? 0 : this.e.v) + o;\n if (s === e) {}\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n var shapePaths;\n var i,\n len = this.shapes.length,\n j,\n jLen;\n var pathsData,\n pathData,\n totalShapeLength,\n totalModifierLength = 0;\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 if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [],\n shapeData,\n localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\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 shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s,\n shapeE = e,\n addedLength = 0,\n edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n //if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\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 var newShapesData = this.addShapes(shapeData, segments[0]);\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n if (lastShapeInCollection.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 this.addPaths(newShapesData, localShapeCollection);\n }\n }\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n //Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n //Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i,\n len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\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 if (!shapePath) {\n shapePath = shape_pool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\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 for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\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.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\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.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\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 addedLength += currentLengthData.addedLength;\n segmentCount += 1;\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 if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shape_pool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n };\n ShapeModifiers.registerModifier('tm', TrimModifier);\n function RoundCornersModifier() {}\n extendPrototype([ShapeModifier], RoundCornersModifier);\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var cloned_path = shape_pool.newElement();\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 for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\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 index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\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 if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\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 return cloned_path;\n };\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var rd = this.rd.v;\n if (rd !== 0) {\n var shapeData, newPaths, localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n function PuckerAndBloatModifier() {}\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length,\n i = 0;\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var vX, vY, oX, oY, iX, iY;\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n return cloned_path;\n };\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var amount = this.amount.v;\n if (amount !== 0) {\n var shapeData, newPaths, localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n function RepeaterModifier() {}\n extendPrototype([ShapeModifier], RepeaterModifier);\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n this._isAnimated = !!this.dynamicProperties.length;\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 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 RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\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.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n var cont = 0;\n while (pos > 0) {\n pos -= 1;\n //this._elements.unshift(arr.splice(pos,1)[0]);\n this._elements.unshift(arr[pos]);\n cont += 1;\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i,\n len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\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 RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i,\n len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items, itemsTransform, i, dir, cont;\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\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\": 1,\n \"ix\": 6,\n \"k\": [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\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 this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n }\n cont = 0;\n var renderFlag;\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 this._currentCopies = copies;\n ////\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 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 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 if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j, jLen;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\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 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 for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n };\n RepeaterModifier.prototype.addShape = function () {};\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shape_pool.release(this.shapes[i]);\n }\n this._length = 0;\n };\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i,\n len = data.length || 0,\n prop;\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n }\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0,\n len = this.dataProps.length;\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n != 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n extendPrototype([DynamicPropertyContainer], DashProperty);\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\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 = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0,\n len = this.o.length / 2,\n diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n };\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0,\n len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n };\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i,\n len = this.data.p * 4;\n var mult, val;\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 if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\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 if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n this._mdf = !forceRender;\n }\n };\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i,\n shapeString = \" M\" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n for (i = 1; i < length; i += 1) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[i][0], _i[i][1]) + \" \" + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n if (closed && length) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[0][0], _i[0][1]) + \" \" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n return shapeString;\n };\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i,\n len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i,\n len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i,\n len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n } else if (Howl) {\n return new Howl({\n src: [assetPath]\n });\n } else {\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n }\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n this._updateVolume();\n },\n getVolume: function getVolume(value) {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i,\n len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function getAssetsPath(assetData, assetsPath, original_path) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = original_path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n }\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this), 50);\n }\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n this._elementHelper.append(img);\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i,\n len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n }\n }\n }\n function setPath(path) {\n this.path = path || '';\n }\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n function getImage(assetData) {\n var i = 0,\n len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n }\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n function loaded() {\n return this.totalImages === this.loadedAssets;\n }\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n function ImagePreloader(type) {\n this._imageLoaded = imageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.loadedAssets = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n ;\n ImagePreloader.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loaded: loaded,\n destroy: destroy,\n getImage: getImage,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloader;\n }();\n var featureSupport = function () {\n var ob = {\n maskType: true\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 return ob;\n }();\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n function createFilter(filId) {\n var fil = createNS('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 function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('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 return ob;\n }();\n var assetLoader = function () {\n function formatResponse(xhr) {\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } else if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } else if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n }\n function loadAsset(path, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true);\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = \"json\";\n } catch (err) {}\n xhr.send();\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n if (xhr.status == 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n }\n return {\n load: loadAsset\n };\n }();\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i,\n len = this._textData.a.length,\n animatorProps;\n var getProp = PropertyFactory.getProp;\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\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),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\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 this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n this._isFirstFrame = 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 pathInfo,\n currentLength,\n currentPoint,\n segmentLength,\n flag,\n pointInd,\n segmentInd,\n prevPoint,\n points,\n segments,\n partialLength,\n totalLength,\n perc,\n tanAngle,\n mask;\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r) {\n paths = paths.reverse();\n }\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n i = len;\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n this._pathData.pi = pathInfo;\n }\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps, animatorSelector;\n var j, jLen;\n var letterValue;\n jLen = animators.length;\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 //\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n }\n //\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\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 if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\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 case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += alignment[0] * letters[i].an / 200;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 flag = true;\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 if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\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);\n\n // Grouping alignment\n matrixHelper.translate(-alignment[0] * letters[i].an / 200, -alignment[1] * yOff / 100, 0);\n }\n lineLength += letters[i].l / 2;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n //This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * 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 if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\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 if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 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 if (animatorProps.sk.propType) {\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 if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n if (animatorProps.o.propType) {\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 if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\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 if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\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 if (animatorProps.fh.propType) {\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 if (animatorProps.fs.propType) {\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 if (animatorProps.fb.propType) {\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 for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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 if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\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 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 if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff / 100 + yPos, 0);\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 if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an / 200;\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr / 1000 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\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 switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\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.finalSize;\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 letterO = elemOpacity;\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 TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimator_animatables = animatorProps.a;\n this.a = {\n r: textAnimator_animatables.r ? getProp(elem, textAnimator_animatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimator_animatables.rx ? getProp(elem, textAnimator_animatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimator_animatables.ry ? getProp(elem, textAnimator_animatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimator_animatables.sk ? getProp(elem, textAnimator_animatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimator_animatables.sa ? getProp(elem, textAnimator_animatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimator_animatables.s ? getProp(elem, textAnimator_animatables.s, 1, 0.01, container) : defaultData,\n a: textAnimator_animatables.a ? getProp(elem, textAnimator_animatables.a, 1, 0, container) : defaultData,\n o: textAnimator_animatables.o ? getProp(elem, textAnimator_animatables.o, 0, 0.01, container) : defaultData,\n p: textAnimator_animatables.p ? getProp(elem, textAnimator_animatables.p, 1, 0, container) : defaultData,\n sw: textAnimator_animatables.sw ? getProp(elem, textAnimator_animatables.sw, 0, 0, container) : defaultData,\n sc: textAnimator_animatables.sc ? getProp(elem, textAnimator_animatables.sc, 1, 0, container) : defaultData,\n fc: textAnimator_animatables.fc ? getProp(elem, textAnimator_animatables.fc, 1, 0, container) : defaultData,\n fh: textAnimator_animatables.fh ? getProp(elem, textAnimator_animatables.fh, 0, 0, container) : defaultData,\n fs: textAnimator_animatables.fs ? getProp(elem, textAnimator_animatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimator_animatables.fb ? getProp(elem, textAnimator_animatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimator_animatables.t ? getProp(elem, textAnimator_animatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\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 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 if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\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 return updated;\n };\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\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 sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (data.hasOwnProperty(s)) {\n obj[s] = data[s];\n }\n }\n return obj;\n };\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n };\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var multipliedValue;\n var i,\n len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n for (i = 0; i < len; i += 1) {\n //Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.pv = this.v = this.currentData;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k,\n textDocumentData;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0,\n len = textKeys.length;\n while (i <= len - 1) {\n textDocumentData = textKeys[i].s;\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\n };\n TextProperty.prototype.buildFinalText = function (text) {\n var combinedCharacters = FontManager.getCombinedCharacterCodes();\n var charactersArray = [];\n var i = 0,\n len = text.length;\n var charCode;\n while (i < len) {\n charCode = text.charCodeAt(i);\n if (combinedCharacters.indexOf(charCode) !== -1) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else {\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n charCode = text.charCodeAt(i + 1);\n if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\n charactersArray.push(text.substr(i, 2));\n ++i;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else {\n charactersArray.push(text.charAt(i));\n }\n }\n i += 1;\n }\n return charactersArray;\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 ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal',\n fStyle = 'normal';\n len = styles.length;\n var styleName;\n for (i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n case 'bold':\n fWeight = '700';\n break;\n case 'black':\n fWeight = '900';\n break;\n case 'medium':\n fWeight = '500';\n break;\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n }\n }\n documentData.fWeight = fontData.fWeight || fWeight;\n documentData.fStyle = fStyle;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight, finalText;\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n //tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, \"\\r\");\n //finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n if (charCode === 13 || charCode === 3) {\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 = currentChar;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n //var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n //tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n }\n\n //\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\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 animatorJustifyOffset: 0\n });\n if (anchorGrouping == 2) {\n currentSize += cLength;\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\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 index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n currentSize += cLength;\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\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 currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\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 for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1,\n newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\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 letterData.anIndexes[j] = newInd;\n }\n }\n }\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n function TextSelectorProp(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n TextSelectorProp.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\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 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 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 if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\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 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 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 }\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n mult = easer(mult);\n }\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.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 if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorProp);\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorProp(elem, data, arr);\n }\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n var pool_factory = function () {\n return function (initialLength, _create, _release, _clone) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\n }\n function clone() {\n var clonedElement = newElement();\n return _clone(clonedElement);\n }\n return ob;\n };\n }();\n var pooling = function () {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n return {\n double: double\n };\n }();\n var point_pool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n return pool_factory(8, create);\n }();\n var shape_pool = function () {\n function create() {\n return new ShapePath();\n }\n function release(shapePath) {\n var len = shapePath._length,\n i;\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 shapePath._length = 0;\n shapePath.c = false;\n }\n function clone(shape) {\n var cloned = factory.newElement();\n var i,\n len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n var pt;\n for (i = 0; i < len; i += 1) {\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 return cloned;\n }\n var factory = pool_factory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n var shapeCollection_pool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n function release(shapeCollection) {\n var i,\n len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shape_pool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n return ob;\n }();\n var segments_length_pool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n function release(element) {\n var i,\n len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezier_length_pool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n return pool_factory(8, create, release);\n }();\n var bezier_length_pool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', defaultCurveSegments),\n lengths: createTypedArray('float32', defaultCurveSegments)\n };\n }\n return pool_factory(8, create);\n }();\n function BaseRenderer() {}\n BaseRenderer.prototype.checkLayers = function (num) {\n var i,\n len = this.layers.length,\n data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i--) {\n if (!this.elements[i]) {\n data = this.layers[i];\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 this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n }\n return this.createNull(layer);\n };\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.buildAllItems = function () {\n var i,\n len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\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 for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id == newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n };\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0,\n len = layers.length;\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 {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n };\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n extendPrototype([BaseRenderer], SVGRenderer);\n SVGRenderer.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n SVGRenderer.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n //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 this.animationItem.wrapper.appendChild(this.svgElement);\n //Mask animation\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('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 = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute(\"clip-path\", \"url(\" + locationHref + \"#\" + maskId + \")\");\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n SVGRenderer.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i++) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n SVGRenderer.prototype.updateContainerSize = function () {};\n SVGRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n if (expressionsPlugin) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\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 SVGRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0,\n len = this.elements.length;\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n i += 1;\n }\n }\n }\n };\n SVGRenderer.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n // console.log('-------');\n // console.log('FRAME ',num);\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i,\n len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\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 if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\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 if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\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 i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\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 imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n extendPrototype([BaseRenderer], CanvasRenderer);\n CanvasRenderer.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n CanvasRenderer.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n CanvasRenderer.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n CanvasRenderer.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\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 if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]);\n //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 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 CanvasRenderer.prototype.ctxOpacity = function (op) {\n /*if(op === 1){\r\n return;\r\n }*/\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n this.contextData.cO *= op < 0 ? 0 : op;\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n CanvasRenderer.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n };\n CanvasRenderer.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n if (actionFlag) {\n this.canvasContext.save();\n }\n var props = this.contextData.cTr.props;\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n var i,\n arr = this.contextData.saved[this.contextData.cArrPos];\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n CanvasRenderer.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\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 for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\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 if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n CanvasRenderer.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n this.animationItem.container.style.width = '100%';\n this.animationItem.container.style.height = '100%';\n //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\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 if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n CanvasRenderer.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth, elementHeight;\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 var elementRel, animationRel;\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 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 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 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 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, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n CanvasRenderer.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num;\n\n // console.log('--------');\n // console.log('NEW: ',num);\n var i,\n len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\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 if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\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 if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n CanvasRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /*if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\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 CanvasRenderer.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n CanvasRenderer.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n extendPrototype([BaseRenderer], HybridRenderer);\n HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\n HybridRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n HybridRenderer.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n if (!newDOMElement) {\n return;\n }\n var layer = this.layers[pos];\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement, nextLayer, tmpDOMElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n i += 1;\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 }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n HybridRenderer.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n return new HShapeElement(data, this.globalData, this);\n };\n HybridRenderer.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextElement(data, this.globalData, this);\n }\n return new HTextElement(data, this.globalData, this);\n };\n HybridRenderer.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n HybridRenderer.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n return new HImageElement(data, this.globalData, this);\n };\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n return new HCompElement(data, this.globalData, this);\n };\n HybridRenderer.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n return new HSolidElement(data, this.globalData, this);\n };\n HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0,\n len = this.threeDElements.length;\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n i += 1;\n }\n };\n HybridRenderer.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n if (type === '3d') {\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 container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n }\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 type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n HybridRenderer.prototype.build3dContainers = function () {\n var i,\n len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n len = this.threeDElements.length;\n for (i = len - 1; i >= 0; i--) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0,\n len = this.threeDElements.length;\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n break;\n }\n i += 1;\n }\n };\n HybridRenderer.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('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 if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n wrapper.appendChild(resizerElem);\n resizerElem.style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData;\n //Mask animation\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n HybridRenderer.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i++) {\n this.elements[i].destroy();\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\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 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 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 HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n HybridRenderer.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n HybridRenderer.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n HybridRenderer.prototype.initItems = function () {\n this.buildAllItems();\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 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 HybridRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n var floatingContainer = createTag('div');\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 function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i,\n len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path,\n properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j, jLen;\n var layerId = createElementID();\n var rect, expansor, feMorph, x;\n var maskType = 'clipPath',\n maskRef = 'clip-path';\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 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n if ((properties[i].mode == 's' || properties[i].mode == 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n path = createNS('path');\n if (properties[i].mode == 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n continue;\n }\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\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.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n }\n\n // TODO move this to a factory or to a constructor\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 if (properties[i].mode == 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n var mask = createNS('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 if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, \"url(\" + locationHref + \"#\" + layerId + \")\");\n defs.appendChild(this.maskElement);\n }\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i,\n len = this.masksProperties.length;\n for (i = 0; i < len; i++) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\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 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 this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\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 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 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\" + 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 }\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 if (pathNodes.c && len > 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 //pathNodes.__renderedString = pathString;\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n viewData.lastPath = pathString;\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 /**\r\n * @file \r\n * Handles AE's layer parenting property.\r\n *\r\n */\n\n function HierarchyElement() {}\n HierarchyElement.prototype = {\n /**\r\n * @function \r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n //element's parent list\n this.hierarchy = [];\n //if element is parent of another layer _isParent will be true\n this._isParent = false;\n this.checkParenting();\n },\n /**\r\n * @function \r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\r\n * @function \r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n /**\r\n * @function \r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n /**\r\n * @file \r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n\n function FrameElement() {}\n FrameElement.prototype = {\n /**\r\n * @function \r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n //set to true when inpoint is rendered\n this._isFirstFrame = false;\n //list of animated properties\n this.dynamicProperties = [];\n // If layer has been modified in current tick this will be true\n this._mdf = false;\n },\n /**\r\n * @function \r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n * \r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i,\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n function TransformElement() {}\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n //TODO: check TYPE 11: Guided elements\n if (this.data.ty !== 11) {\n //this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0,\n len = this.hierarchy.length;\n //Checking if any of the transformation matrices in the hierarchy chain has changed.\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 i += 1;\n }\n }\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\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 }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i,\n len = transforms.length,\n ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n //ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n return pt;\n },\n mHelper: new Matrix()\n };\n function RenderableElement() {}\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n //layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false;\n //layer's display state\n this.hidden = false;\n // If layer's transparency equals 0, it can be hidden\n this.isTransparent = false;\n //list of animated components\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n /**\r\n * @function \r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * \r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else {\n if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n }\n },\n renderRenderable: function renderRenderable() {\n var i,\n len = this.renderableComponents.length;\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /*this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame);*/\n },\n\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\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 function RenderableDOMElement() {}\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n //If it is exported as hidden (data.hd === true) no need to render\n //If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level;\n //TODO find if there are some cases where _isAnimated can be false. \n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n this._isAnimated = !!shape.k;\n // TODO: commenting this for now since all shapes are animated\n var i = 0,\n len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\n }\n }\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\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 = data.g.p * 4;\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop, j, jLen;\n var mask = createNS(\"mask\");\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n var ob = {\n createRenderFunction: createRenderFunction\n };\n function createRenderFunction(data) {\n var ty = data.ty;\n switch (data.ty) {\n case 'fl':\n return renderFill;\n case 'gf':\n return renderGradient;\n case 'gs':\n return renderGradientStroke;\n case 'st':\n return renderStroke;\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n case 'tr':\n return renderContentTransform;\n }\n }\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n function renderPath(styleData, itemData, isFirstFrame) {\n var j,\n jLen,\n pathStringTransformed,\n redraw,\n pathNodes,\n l,\n lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths, mat, props, iterations, k;\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations--;\n k--;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (iterations > 0) {\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 } else {\n mat = _identityMatrix;\n }\n paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = '';\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n ;\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v,\n pt2 = itemData.e.v;\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n if (itemData.s._mdf || isFirstFrame) {\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 if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops, i, len, stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\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 if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\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 if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n }\n //gfill.setAttribute('fy','200');\n }\n }\n\n ;\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n ;\n return ob;\n }();\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i,\n len = transforms.length;\n var key = '_';\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n var sequence = this.sequences[key];\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0,\n len = sequence.transforms.length,\n _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.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 }\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i,\n len = this.sequenceList.length;\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n return '_' + this.transform_key_count++;\n }\n };\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\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 this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i,\n len = styles.length,\n styledShape;\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n function BaseElement() {}\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0,\n len = this.data.masksProperties.length;\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\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(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID();\n\n //Stretch factor for old animations missing this property.\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n // effects manager\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n NullElement.prototype.renderFrame = function () {};\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n NullElement.prototype.destroy = function () {};\n NullElement.prototype.sourceRectAtTime = function () {};\n NullElement.prototype.hide = function () {};\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n function SVGBaseElement() {}\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null;\n //If this layer acts as a mask for the following layer\n var filId, fil, gg;\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = createNS('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);\n // This is only for IE and Edge when mask if of type alpha\n if (!featureSupport.maskType && this.data.td == 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('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 = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n ////\n\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n /*var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix);*/\n ////\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc);\n ////\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('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 if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n //Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('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 = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\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 if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute(\"mask\", \"url(\" + locationHref + \"#\" + id + \")\");\n }\n };\n function IShapeElement() {}\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i,\n len = this.shapeModifiers.length;\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0,\n len = this.shapeModifiers.length;\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i,\n len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n len = this.shapeModifiers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n this.shapeModifiers[i].processShapes(this._isFirstFrame);\n }\n },\n lcEnum: {\n '1': 'butt',\n '2': 'round',\n '3': 'square'\n },\n ljEnum: {\n '1': 'miter',\n '2': 'round',\n '3': 'bevel'\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0,\n len = elements.length;\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n function ITextElement() {}\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\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 for (j = 0; j < jLen; j += 1) {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n return shapeStr;\n };\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\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 matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\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 ITextElement.prototype.emptyProp = new LetterProps();\n ITextElement.prototype.destroy = function () {};\n function ICompElement() {}\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n };\n\n /*ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n };*/\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i,\n len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n //This iteration needs to be backwards because of how expressions connect between each other\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n ICompElement.prototype.renderInnerContent = function () {\n var i,\n len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n ICompElement.prototype.destroyElements = function () {\n var i,\n len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + \"px\");\n this.innerElem.setAttribute('height', this.assetData.h + \"px\");\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([IImageElement], ISolidElement);\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect');\n ////rect.style.width = this.data.sw;\n ////rect.style.height = this.data.sh;\n ////rect.style.fill = this.data.sc;\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 };\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n };\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n AudioElement.prototype.show = function () {\n // this.audio.play()\n };\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n AudioElement.prototype.volume = function (volumeValue) {\n this.audio.volume(volumeValue);\n };\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n AudioElement.prototype.destroy = function () {};\n AudioElement.prototype.sourceRectAtTime = function () {};\n AudioElement.prototype.initExpressions = function () {};\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n //this.layerElement = createNS('g');\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\n function SVGTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextElement);\n SVGTextElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n SVGTextElement.prototype.buildTextContents = function (textArray) {\n var i = 0,\n len = textArray.length;\n var textContents = [],\n currentTextContent = '';\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\n };\n SVGTextElement.prototype.buildNewText = function () {\n var i, len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\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 if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\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 this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\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.finalSize;\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n case 2:\n justify = 'middle';\n break;\n }\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i] || createNS('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.finalLineHeight;\n }\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData, charData;\n for (i = 0; i < len; i += 1) {\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : 'text');\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 tSpan.style.display = 'inherit';\n }\n matrixHelper.reset();\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\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 this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n //xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n xPos += trackingOffset;\n }\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n if (!singleShape) {\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\n } else {\n shapeStr += this.createPathShape(matrixHelper, shapes);\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute(\"transform\", \"translate(\" + matrixHelper.props[12] + \",\" + matrixHelper.props[13] + \")\");\n }\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 && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].style.display = 'none';\n i += 1;\n }\n this._sizeChanged = true;\n };\n SVGTextElement.prototype.sourceRectAtTime = function (time) {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\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 return this.bbox;\n };\n SVGTextElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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 for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n };\n function SVGShapeElement(data, globalData, comp) {\n //List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n //List of styles that will be applied to shapes\n this.stylesList = [];\n //List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n //List of items in shape tree\n this.itemsData = [];\n //List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i,\n len = this.shapes.length,\n shape;\n var j,\n jLen = this.stylesList.length;\n var style,\n count = 0;\n var tempShapes = [];\n var areAnimated = false;\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i,\n len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n //TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var gradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new gradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');\n }\n }\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');\n pathElement.setAttribute('fill-opacity', '0');\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n return elementData;\n };\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\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 var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0,\n len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j,\n jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i,\n len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n };\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, 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 for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\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);\n } else {\n itemsData[i].style.closed = false;\n }\n if (arr[i]._render) {\n container.appendChild(itemsData[i].style.pElem);\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 for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\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], container);\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);\n }\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms' || arr[i].ty == 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\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);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i,\n len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n //Adding M0 0 fixes same mask bug on all browsers\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n SVGShapeElement.prototype.renderShape = function () {\n var i,\n len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n function SVGTintFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('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 = createNS('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 if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'f2');\n feMerge.appendChild(feMergeNode);\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 function SVGFillFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('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 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 function SVGGaussianBlurEffect(filter, filterManager) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;\n\n // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma;\n var sigmaY = dimensions == 2 ? 0 : sigma;\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + \" \" + sigmaY);\n\n // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate';\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n function SVGStrokeEffect(elem, filterManager) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path, groupPath, i, len;\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 groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\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 = createNS('g');\n g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\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 elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n var i,\n len = this.paths.length;\n var mask, path;\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m === -1) {\n continue;\n }\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\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 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 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 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 path.setAttribute('stroke-dasharray', dasharrayValue);\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 if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\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 function SVGTritoneFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('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 = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\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);\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 SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n var feFuncR, feFuncG, feFuncB;\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n }\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n }\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n }\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n feComponentTransfer = createNS('feComponentTransfer');\n }\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].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 SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\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 while (cnt <= 256) {\n perc = cnt / 256;\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 table[pos++] = colorValue;\n cnt += 256 / (segments - 1);\n }\n return table.join(' ');\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 if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n function SVGDropShadowEffect(filter, filterManager) {\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\n filter.setAttribute('x', filterSize.x);\n filter.setAttribute('y', filterSize.y);\n filter.setAttribute('width', filterSize.width);\n filter.setAttribute('height', filterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('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 = createNS('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 = createNS('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 = createNS('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 = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n this.feMergeNode = feMergeNode;\n this.feMerge = feMerge;\n this.originalNodeAdded = false;\n feMerge.appendChild(feMergeNode);\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 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 if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\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 var _svgMatteSymbols = [];\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 = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0,\n len = _svgMatteSymbols.length;\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n i += 1;\n }\n return null;\n };\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n if (!parentNode) {\n return;\n }\n var children = parentNode.children;\n var i = 0,\n len = children.length;\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n i += 1;\n }\n var nextChild;\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n _svgMatteSymbols.push(mask);\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n elem.setMatte(mask.layerId);\n };\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0,\n len = elements.length;\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n i += 1;\n }\n this.initialized = true;\n };\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n function SVGEffects(elem) {\n var i,\n len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId);\n var count = 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n if (elem.data.ef[i].ty === 20) {\n count += 1;\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 21) {\n count += 1;\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 22) {\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 23) {\n count += 1;\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 24) {\n count += 1;\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 25) {\n count += 1;\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 28) {\n //count += 1;\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\n } else if (elem.data.ef[i].ty === 29) {\n count += 1;\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i,\n len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i,\n len = 15;\n this.savedOp = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = len;\n }\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n this._length = newLength;\n };\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n function CVBaseElement() {}\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getImage(this.assetData);\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('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 var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\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 };\n CVImageElement.prototype.renderInnerContent = function (parentMatrix) {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([CanvasRenderer, ICompElement, CVBaseElement], CVCompElement);\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i,\n len = this.layers.length;\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 CVCompElement.prototype.destroy = function () {\n var i,\n len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\n };\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i,\n len = this.masksProperties.length,\n hasMasks = false;\n for (i = 0; i < len; i++) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i,\n len = this.masksProperties.length;\n var pt, pts, data;\n ctx.beginPath();\n for (i = 0; i < len; i++) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j,\n jLen = data._length;\n for (j = 1; j < jLen; j++) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n if (data.ty == 'fl' || data.ty == 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\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 } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty == 'st' || data.ty == 'gs') {\n styleElem.lc = this.lcEnum[data.lc] || 'round';\n styleElem.lj = this.ljEnum[data.lj] || 'round';\n if (data.lj == 1) {\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem.do = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n CVShapeElement.prototype.createGroupElement = function (data) {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i,\n len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i,\n len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i,\n len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i,\n len = styles.length,\n j,\n jLen;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i,\n len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n processedPos,\n modifier,\n currentTransform;\n var ownTransforms = [].concat(transforms);\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\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], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\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 for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty == 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\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]);\n }\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\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);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n var props, groupMatrix;\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n CVShapeElement.prototype.drawLayer = function () {\n var i,\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 currentStyle;\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n\n //Skipping style when\n //Stroke width equals 0\n //style should not be rendered (extra unused repeaters)\n //current opacity equals 0\n //global opacity equals 0\n if ((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0) {\n continue;\n }\n renderer.save();\n elems = currentStyle.elements;\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle.do;\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\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].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n renderer.restore();\n }\n };\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i,\n len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty == 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\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]);\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 == 'gf' || items[i].ty == 'gs') {\n this.renderGradientFill(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 this.drawLayer();\n }\n };\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i,\n len,\n j,\n jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n styledShape.trNodes = shapeNodes;\n }\n };\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i,\n len = itemData.styledShapes.length;\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var grd;\n var pt1 = itemData.s.v,\n pt2 = itemData.e.v;\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\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 var grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n var i,\n len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem.do = d.dashoffset[0];\n }\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\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.itemsData.length = 0;\n };\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CVTextElement(data, globalData, comp) {\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 this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\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 this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\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.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length;\n //this.tHelper.font = this.values.fValue;\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.finalSize;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen);\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 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 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 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 if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n cnt += 1;\n }\n };\n CVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n var finalMat = this.finalTransform.mat.props;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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 for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\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 commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\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 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 this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill();\n ///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 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 commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\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 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 this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke();\n ///ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n };\n function CVEffects() {}\n CVEffects.prototype.renderFrame = function () {};\n function HBaseElement(data, globalData, comp) {}\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = this.finalTransform.mat.toCSS();\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.style.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n //If it is exported as hidden (data.hd === true) no need to render\n //If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n if (this.matteElement) {\n this.matteElement = null;\n }\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n HSolidElement.prototype.createContent = function () {\n var rect;\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n this.layerElement.appendChild(rect);\n };\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([HybridRenderer, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements();\n //divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n function HShapeElement(data, globalData, comp) {\n //List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n //List of styles that will be applied to shapes\n this.stylesList = [];\n //List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n //List of items in shape tree\n this.itemsData = [];\n //List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp);\n //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\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 cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i,\n len = transformers.length;\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n return point;\n };\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i,\n len = shape._length,\n vPoint,\n oPoint,\n nextIPoint,\n nextVPoint,\n bounds;\n if (len <= 1) {\n return;\n }\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bm_min(bounds.left, boundingBox.x);\n boundingBox.xMax = bm_max(bounds.right, boundingBox.xMax);\n boundingBox.y = bm_min(bounds.top, boundingBox.y);\n boundingBox.yMax = bm_max(bounds.bottom, boundingBox.yMax);\n };\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b = b | 0;\n a = a | 0;\n c = c | 0;\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + bm_sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bm_sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n this.shapeBoundingBox.left = bm_min.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bm_min.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bm_max.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bm_max.apply(null, bounds[1]);\n };\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bm_pow(1 - t, 3) * p0[i] + 3 * bm_pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bm_pow(t, 2) * p2[i] + bm_pow(t, 3) * p3[i];\n };\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i,\n len = itemsData.length,\n path;\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n }\n }\n };\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y;\n //var tempBoundingBox = this.shapeCont.getBBox();\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n var changed = false;\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.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 function HTextElement(data, globalData, comp) {\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 this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n this.checkParenting();\n };\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\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 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 for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('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 if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('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 = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n }\n }\n //tSpan.setAttribute('visibility', 'hidden');\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n matrixHelper.reset();\n if (shapeData && shapeData.shapes) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n if (shapeData && shapeData.shapes) {\n //document.body.appendChild is needed to get exact measure of shape\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 } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n tParent.appendChild(tCont);\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 if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n //\n tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n } else {\n this.innerElem.appendChild(tSpan);\n }\n }\n //\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n HTextElement.prototype.renderInnerContent = function () {\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !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.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n }\n }\n }\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\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 for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n continue;\n }\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.transform = textSpan.style.webkitTransform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n }\n ////textSpan.setAttribute('opacity',renderedLetter.o);\n textSpan.style.opacity = renderedLetter.o;\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n var margin = 1;\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.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\n };\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n if (this.data.hasMask) {\n this.imageElem = createNS('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 this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\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 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 this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true;\n\n // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n this.finalTransform = {\n mProp: this\n };\n }\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n HCameraElement.prototype.setup = function () {\n var i,\n len = this.comp.threeDElements.length,\n comp;\n for (i = 0; i < len; i += 1) {\n //[perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n if (comp.type === '3d') {\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 HCameraElement.prototype.hide = function () {};\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i, len;\n if (this.hierarchy) {\n len = this.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n if (_mdf || this.pe._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 if (this.hierarchy) {\n var mat;\n len = this.hierarchy.length - 1;\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\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 if (this.a) {\n var diffVector;\n if (this.p) {\n 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 } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));\n //var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\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 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 var hasMatrixChanged = !this._prevMat.equals(this.mat);\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\n }\n if (this.pe._mdf) {\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n this.mat.clone(this._prevMat);\n }\n }\n this._isFirstFrame = false;\n };\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n HCameraElement.prototype.destroy = function () {};\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n function HEffects() {}\n HEffects.prototype.renderFrame = function () {};\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem == element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n function getRegisteredAnimations() {\n var i,\n len = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < len; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\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 function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n function destroy(animation) {\n var i;\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i,\n len = animElements.length;\n for (i = 0; i < len; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && len === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('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 function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n function freeze() {\n _isFrozen = true;\n }\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\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 moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\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.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = subframeEnabled;\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n };\n extendPrototype([BaseEvent], AnimationItem);\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop);\n }\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n if (params.animationData) {\n this.configAnimation(params.animationData);\n } else if (params.path) {\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 this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n assetLoader.load(params.path, this.configAnimation.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\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 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 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 if (prerender === 'false') {\n params.prerender = false;\n }\n this.setParams(params);\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 }\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 for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id == newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\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 if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.renderer.includeLayers(data.layers);\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n assetLoader.load(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\n }\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loaded() || this.renderer.rendererType !== 'canvas')) {\n this.isLoaded = true;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\n }\n }\n };\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame;\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n this.trigger('enterFrame');\n this.renderFrame();\n };\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false) {\n return;\n }\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n AnimationItem.prototype.play = function (name) {\n if (name && this.name != name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name != name) {\n return;\n }\n if (this.isPaused === false) {\n this.isPaused = true;\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name != name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name != name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name != name) {\n return;\n }\n if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n this.pause();\n };\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n this.goToAndStop(value, isFrame, name);\n this.play();\n };\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\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 this.timeCompleted = this.totalFrames = arr[0] - arr[1];\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\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 this.timeCompleted = this.totalFrames = arr[1] - arr[0];\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n this.trigger('segmentStart');\n };\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\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;\n }\n }\n this.firstFrame = init;\n this.timeCompleted = this.totalFrames = end - init;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (typeof arr[0] === 'object') {\n var i,\n len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n };\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n //this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n return false;\n };\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name != name || !this.renderer) {\n return;\n }\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\n this.renderer = null;\n };\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n };\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n };\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\n };\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n };\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0,\n len = this.assets.length;\n while (i < len) {\n if (id == this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n };\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\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.frameModifier));\n break;\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n function pushExpression() {\n stackCount += 1;\n }\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n function releaseInstances() {\n var i,\n len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\n }\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n return ob;\n }();\n expressionsPlugin = Expressions;\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n function $bm_neg(a) {\n var tOfA = typeof a;\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i,\n lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n }\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, .833, .833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, .667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, 'easeInOut').get;\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = a[0] + b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\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 i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a);\n }\n if (tOfB === 'string') {\n b = parseInt(b);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = a[0] - b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\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 i += 1;\n }\n return retArr;\n }\n return 0;\n }\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n var i, len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i, len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a);\n }\n if (typeof b === 'string') {\n b = parseInt(b);\n }\n return a % b;\n }\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math.min(Math.max(num, min), max);\n }\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\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 if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i,\n len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n return Math.sqrt(addedLength);\n }\n function normalize(vec) {\n return div(vec, length(vec));\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 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 switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return [h, s, l, val[3]];\n }\n 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 function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r, g, b;\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\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 return [r, g, b, val[3]];\n }\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n } else if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i,\n len = value1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\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 if (max.length) {\n var i,\n len = max.length;\n if (!min) {\n min = createTypedArray('float32', len);\n }\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === undefined) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n function createPath(points, inTangents, outTangents, closed) {\n var i,\n len = points.length;\n var path = shape_pool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0],\n inVertexPoint,\n outVertexPoint;\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n return path;\n }\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n var _needsRandom = val.indexOf('random') !== -1;\n var elemType = elem.data.ty;\n var transform, $bm_transform, content, effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\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 name = elem.data.nm;\n var loopIn, loop_in, loopOut, loop_out, smooth;\n var toWorld, fromWorld, fromComp, toComp, fromCompToSurface, position, rotation, anchorPoint, scale, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;\n var __expression_functions = [];\n if (data.xf) {\n var i,\n len = data.xf.length;\n for (i = 0; i < len; i += 1) {\n __expression_functions[i] = eval('(function(){ return ' + data.xf[i] + '}())');\n }\n }\n var scoped_bm_rt;\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}' + ']')[0];\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n var wiggle = function wiggle(freq, amp) {\n var i,\n j,\n len = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', len);\n freq = 5;\n var iterations = Math.floor(time * freq);\n i = 0;\n j = 0;\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();\n //addedAmps[j] += -amp + amp*2*rnd;\n }\n\n i += 1;\n }\n //var rnd2 = BMMath.random();\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', len);\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;\n //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 if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\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 function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n t = t > 1 ? 1 : t < 0 ? 0 : t;\n var mult = fn(t);\n if ($bm_isInstanceOfArray(val1)) {\n var i,\n len = val1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = (val2[i] - val1[i]) * mult + val1[i];\n }\n return arr;\n } else {\n return (val2 - val1) * mult + val1;\n }\n }\n function nearestKey(time) {\n var i,\n len = data.k.length,\n index,\n keyTime;\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 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 break;\n }\n }\n if (index === -1) {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n }\n }\n var ob = {};\n ob.index = index;\n ob.time = keyTime / elem.comp.globalData.frameRate;\n return ob;\n }\n function key(ind) {\n var ob, i, len;\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n ind -= 1;\n ob = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;\n len = arr.length;\n for (i = 0; i < len; i += 1) {\n ob[i] = arr[i];\n ob.value[i] = arr[i];\n }\n return ob;\n }\n function framesToTime(frames, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return frames / fps;\n }\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return t * fps;\n }\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n return value.substring(init, end);\n }\n return '';\n }\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n return value.substr(init, end);\n }\n return '';\n }\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n var time, velocity, value, text, 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 var globalData = elem.globalData;\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n if (_needsRandom) {\n seedRandom(randSeed);\n }\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n if (!thisLayer) {\n text = elem.layerInterface.text;\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 toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n if (!transform) {\n transform = elem.layerInterface(\"ADBE Transform Group\");\n $bm_transform = transform;\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /*position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale;*/\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer(\"ADBE Root Vectors Group\");\n }\n if (!effect) {\n effect = thisLayer(4);\n }\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n expression_function();\n this.frameExpressionId = elem.globalData.frameId;\n\n //TODO: Check if it's possible to return on ShapeInterface the .v value\n if (scoped_bm_rt.propType === \"shape\") {\n scoped_bm_rt = scoped_bm_rt.v;\n }\n // globalData.popExpression();\n return scoped_bm_rt;\n }\n return executeExpression;\n }\n ob.initiateExpression = initiateExpression;\n return ob;\n }();\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n var delta = -0.001;\n //frameNum += this.elem.data.st;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\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 return velocity;\n }\n function getStaticValueAtTime() {\n return this.pv;\n }\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n (function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\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 firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i, len, ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / 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 if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\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 if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\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 return ret;\n }\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n }\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\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 lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i, len, ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / 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 if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\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 if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return ret;\n }\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n }\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\n }\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0,\n j = 0;\n var value;\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n i += 1;\n }\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n return value;\n }\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n }\n ////\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n return matrix;\n ////\n }\n\n function getTransformStaticValueAtTime(time) {\n return this.v.clone(new Matrix());\n }\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n //prop.getVelocityAtTime = getVelocityAtTime;\n //prop.loopOut = loopOut;\n //prop.loopIn = loopIn;\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n return prop;\n };\n function getShapeValueAtTime(frameNum) {\n //For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shape_pool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n return this._cachingAtTime.shapeValue;\n }\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n function ShapeExpressions() {}\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n var i,\n len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\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 return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\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 pt;\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n 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 i += 1;\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 return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n //perc doesn't use triple equality because it can be a Number object as well as 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 if (magnitude === 0) {\n return [0, 0];\n }\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n };\n })();\n (function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n }\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n return currentValue;\n };\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n TextProperty.prototype.searchExpressions = searchExpressions;\n })();\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\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 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'path': {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n 'shape': {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n '_name': {\n value: shape.nm\n },\n 'ix': {\n value: shape.ix\n },\n 'propertyIndex': {\n value: shape.ix\n },\n 'mn': {\n value: shape.mn\n },\n 'propertyGroup': {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n } else {\n return parentPropertyGroup(val - 1);\n }\n };\n };\n }();\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n return _propertyGroup;\n };\n }();\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i,\n len = shapes ? shapes.length : 0;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty == 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tr') {\n //arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty == 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n return arr;\n }\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0,\n len = interfaces.length;\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 i += 1;\n }\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n function groupInterfaceFactory(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 //Not necessary for now. Keeping them here in case a new case appears\n //case 'ADBE Vector Transform Group':\n //case 3:\n default:\n return interfaceFunction.transform;\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(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 });\n //interfaceFunction.content = interfaceFunction;\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 function fillInterfaceFactory(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 Object.defineProperties(interfaceFunction, {\n 'color': {\n get: ExpressionPropertyInterface(view.c)\n },\n 'opacity': {\n get: ExpressionPropertyInterface(view.o)\n },\n '_name': {\n value: shape.nm\n },\n 'mn': {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n var i,\n len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\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 Object.defineProperties(interfaceFunction, {\n 'color': {\n get: ExpressionPropertyInterface(view.c)\n },\n 'opacity': {\n get: ExpressionPropertyInterface(view.o)\n },\n 'strokeWidth': {\n get: ExpressionPropertyInterface(view.w)\n },\n 'dash': {\n get: function get() {\n return dashOb;\n }\n },\n '_name': {\n value: shape.nm\n },\n 'mn': {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n 'start': {\n get: ExpressionPropertyInterface(view.s)\n },\n 'end': {\n get: ExpressionPropertyInterface(view.e)\n },\n 'offset': {\n get: ExpressionPropertyInterface(view.o)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'opacity': {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n 'position': {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n 'anchorPoint': {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n 'scale': {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n 'rotation': {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n 'skew': {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n 'skewAxis': {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'size': {\n get: ExpressionPropertyInterface(prop.s)\n },\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value) {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n Object.defineProperties(interfaceFunction, {\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n 'rotation': {\n get: ExpressionPropertyInterface(prop.r)\n },\n 'points': {\n get: ExpressionPropertyInterface(prop.pt)\n },\n 'outerRadius': {\n get: ExpressionPropertyInterface(prop.or)\n },\n 'outerRoundness': {\n get: ExpressionPropertyInterface(prop.os)\n },\n 'innerRadius': {\n get: ExpressionPropertyInterface(prop.ir)\n },\n 'innerRoundness': {\n get: ExpressionPropertyInterface(prop.is)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n 'roundness': {\n get: ExpressionPropertyInterface(prop.r)\n },\n 'size': {\n get: ExpressionPropertyInterface(prop.s)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || 'Round Corners 1' === value) {\n return interfaceFunction.radius;\n }\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'radius': {\n get: ExpressionPropertyInterface(prop.rd)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\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 var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'copies': {\n get: ExpressionPropertyInterface(prop.c)\n },\n 'offset': {\n get: ExpressionPropertyInterface(prop.o)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n return function (shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n } else {\n return interfaces[value - 1];\n }\n } else {\n var i = 0,\n len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n }\n }\n function parentGroupWrapper() {\n return propertyGroup;\n }\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue, _sourceText;\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Text Document\":\n return _thisLayerFunction.sourceText;\n }\n }\n Object.defineProperty(_thisLayerFunction, \"sourceText\", {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue);\n //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\n }\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\n }\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = toWorldMat.props[13] = toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = toWorldMat.props[13] = toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n return function (elem) {\n var transformInterface;\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\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 case 1:\n case 6:\n case \"Transform\":\n case \"transform\":\n case \"ADBE Transform Group\":\n return transformInterface;\n case 4:\n case \"ADBE Effect Parade\":\n case \"effects\":\n case \"Effects\":\n return _thisLayerFunction.effect;\n case \"ADBE Text Properties\":\n return _thisLayerFunction.textInterface;\n }\n }\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0,\n len = comp.layers.length;\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n //return {active:false};\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.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\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 case \"rotation\":\n case \"Rotation\":\n case \"ADBE Rotation\":\n case \"ADBE Rotate Z\":\n case 10:\n return _thisFunction.rotation;\n case \"ADBE Rotate X\":\n return _thisFunction.xRotation;\n case \"ADBE Rotate Y\":\n return _thisFunction.yRotation;\n case \"position\":\n case \"Position\":\n case \"ADBE Position\":\n case 2:\n return _thisFunction.position;\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n case \"anchorPoint\":\n case \"AnchorPoint\":\n case \"Anchor Point\":\n case \"ADBE AnchorPoint\":\n case 1:\n return _thisFunction.anchorPoint;\n case \"opacity\":\n case \"Opacity\":\n case 11:\n return _thisFunction.opacity;\n }\n }\n Object.defineProperty(_thisFunction, \"rotation\", {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, \"zRotation\", {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, \"xRotation\", {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, \"yRotation\", {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, \"scale\", {\n get: ExpressionPropertyInterface(transform.s)\n });\n if (transform.p) {\n var _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n var _px = ExpressionPropertyInterface(transform.px);\n var _py = ExpressionPropertyInterface(transform.py);\n var _pz;\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, \"position\", {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n } else {\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n }\n });\n Object.defineProperty(_thisFunction, \"xPosition\", {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, \"yPosition\", {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, \"zPosition\", {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, \"anchorPoint\", {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, \"opacity\", {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, \"skew\", {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, \"skewAxis\", {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, \"orientation\", {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n return function () {\n function _thisProjectFunction(name) {\n var i = 0,\n len = this.compositions.length;\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n return this.compositions[i].compInterface;\n }\n i += 1;\n }\n }\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i,\n len = elem.effectsManager.effectElements.length;\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n var effects = elem.data.ef || [];\n var groupInterface = function groupInterface(name) {\n i = 0, len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n };\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n }\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef,\n i = 0,\n len = effects.length;\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 i += 1;\n }\n throw new Error();\n }\n ;\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n var effectElements = [];\n var i,\n len = data.ef.length;\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 if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.active = groupInterface.enabled = data.en !== 0;\n return groupInterface;\n }\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n return interfaceFunction;\n }\n return ob;\n }();\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n return this._mask.op.v * 100;\n }\n });\n var MaskManager = function MaskManager(maskManager, elem) {\n var _maskManager = maskManager;\n var _elem = elem;\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i,\n len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n var maskFunction = function maskFunction(name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n };\n return maskFunction;\n };\n return MaskManager;\n }();\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n } else {\n var value = '';\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value);\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n }\n };\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n return expressionValue;\n };\n }\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n for (var i = 0; i < len; i += 1) {\n expressionValue[i] = arrValue[i] = property.v[i] * mult;\n }\n return expressionValue;\n };\n }\n\n //TODO: try to avoid using this getter\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n return function (property) {\n if (!property) {\n return defaultGetter;\n } else if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n } else {\n return MultidimensionalPropertyInterface(property);\n }\n };\n }();\n (function () {\n var TextExpressionSelectorProp = function () {\n function getValueProxy(index, total) {\n this.textIndex = index + 1;\n this.textTotal = total;\n this.v = this.getValue() * this.mult;\n return this.v;\n }\n return function TextExpressionSelectorProp(elem, data) {\n this.pv = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.mult = 0.01;\n this.propType = 'textSelector';\n this.textTotal = data.totalChars;\n this.selectorValue = 100;\n this.lastValue = [1, 1, 1];\n this.k = true;\n this.x = true;\n this.getValue = ExpressionManager.initiateExpression.bind(this)(elem, data, this);\n this.getMult = getValueProxy;\n this.getVelocityAtTime = expressionHelpers.getVelocityAtTime;\n if (this.kf) {\n this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this);\n } else {\n this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this);\n }\n this.setGroupProperty = expressionHelpers.setGroupProperty;\n };\n }();\n var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;\n TextSelectorProp.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 function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function NoValueEffect() {\n this.p = {};\n }\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i,\n len = effects.length;\n var effectItem;\n for (i = 0; i < len; i++) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i,\n len = this.data.ef.length;\n var eff,\n effects = this.data.ef;\n for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n //case 6:\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n var lottie = {};\n var _isFrozen = false;\n function setLocationHref(href) {\n locationHref = href;\n }\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n function setSubframeRendering(flag) {\n subframeEnabled = flag;\n }\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n return animationManager.loadAnimation(params);\n }\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n defaultCurveSegments = 200;\n break;\n case 'medium':\n defaultCurveSegments = 50;\n break;\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n if (defaultCurveSegments >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n expressionsPlugin = plugin;\n }\n }\n function getFactory(name) {\n switch (name) {\n case \"propertyFactory\":\n return PropertyFactory;\n case \"shapePropertyFactory\":\n return ShapePropertyFactory;\n case \"matrix\":\n return Matrix;\n }\n }\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocationHref;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize;\n //lottie.start = start;\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.__getFactory = getFactory;\n lottie.version = '5.7.5';\n function checkReady() {\n if (document.readyState === \"complete\") {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n }\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\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 var readyStateCheckInterval = setInterval(checkReady, 100);\n return lottie;\n});"],"sourceRoot":""}