{"version":3,"file":"a2c29f49.js","mappings":"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","sources":["webpack://audioeye-web/./node_modules/lottie-web/build/player/lottie_light.js"],"sourcesContent":["typeof 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 /* global locationHref:writable, animationManager, subframeEnabled:writable, defaultCurveSegments:writable, roundValues,\r\n expressionsPlugin:writable, PropertyFactory, ShapePropertyFactory, Matrix, idPrefix:writable, _useWebWorker:writable */\n\n /* exported locationHref, subframeEnabled, expressionsPlugin, idPrefix, _useWebWorker */\n 'use strict';\n /* exported svgNS, locationHref, initialDefaultFrame, _useWebWorker */\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var initialDefaultFrame = -999999;\n var _useWebWorker = false;\n /* global createSizedArray */\n\n /* exported subframeEnabled, expressionsPlugin, isSafari, cachedColors, bmPow, bmSqrt, bmFloor, bmMax, bmMin, ProjectInterface,\r\n defaultCurveSegments, degToRads, roundCorner, bmRnd, styleDiv, BMEnterFrameEvent, BMCompleteEvent, BMCompleteLoopEvent,\r\n BMSegmentStartEvent, BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, BMAnimationConfigErrorEvent, createElementID,\r\n addSaturationToRGB, addBrightnessToRGB, addHueToRGB, rgbToHex */\n\n var subframeEnabled = true;\n var idPrefix = '';\n var expressionsPlugin;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var cachedColors = {};\n var bmRnd;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\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 var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n if (flag) {\n bmRnd = Math.round;\n } else {\n bmRnd = function bmRnd(val) {\n return val;\n };\n }\n }\n\n roundValues(false);\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\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\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\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\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var 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\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n /* exported createTypedArray, createSizedArray */\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n /* global svgNS */\n\n /* exported createNS */\n\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n /* exported createTag */\n\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\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 var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n /* exported getBlendMode */\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 /* exported lineCapEnum, lineJoinEnum */\n\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n /* global createTypedArray */\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\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\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); // 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\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\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] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\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 /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\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\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function 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\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\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 var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var 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\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\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\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\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\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\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\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\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\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.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 /* eslint-disable */\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\n (function (pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng.double = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = typeof obj,\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n })([], // pool: entropy pool starts empty\n BMMath // math: package containing random, pow, and seedrandom\n );\n /* eslint-disable */\n\n\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n // eslint-disable-line no-plusplus\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) {\n window.requestAnimationFrame = function (callback) {\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 }\n\n if (!window.cancelAnimationFrame) {\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n }\n })();\n /* exported extendPrototype, getDescriptor, createProxyFunction */\n\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n /* global segmentsLengthPool, defaultCurveSegments, createSizedArray, bmPow, bmSqrt, bmFloor, createTypedArray, bezierLengthPool */\n\n /* exported bez */\n\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = defaultCurveSegments;\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.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 var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (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\n if (!storedData[bezierName]) {\n var curveSegments = defaultCurveSegments;\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\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 = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\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\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\n flag = false;\n }\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 u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var 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; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\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; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\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; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\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; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n /* global _useWebWorker */\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && _useWebWorker) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n /* exported dataManager */\n function dataFunctionManager() {\n // var tCanvasHelper = createTag('canvas').getContext('2d');\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function findCompLayers(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n if (!comps[i].layers.__used) {\n comps[i].layers.__used = true;\n return comps[i].layers;\n }\n\n return JSON.parse(JSON.stringify(comps[i].layers));\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n var j;\n var jLen;\n var pathData;\n var paths;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\n paths = animationData.chars[i].data.shapes[0].it;\n jLen = paths.length;\n\n for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n /* exported assetLoader */\n\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\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 try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n /* exported getFontProperties */\n\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n /* global createNS, createTag, getFontProperties */\n\n /* exported FontManager */\n\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: []\n };\n var combinedCharacters = []; // Hindi characters\n\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 var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\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\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\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); // Remember width with no applied web font\n\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\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else 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\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\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\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\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(def, fontData) {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n var fontProps = getFontProperties(fontData);\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\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\n def.appendChild(tHelper);\n var tCanvasHelper = createTag('canvas').getContext('2d');\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily; // tCanvasHelper.font = ' 100px '+ fontData.fFamily;\n\n return tHelper;\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\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\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\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\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\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\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\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\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\n fontArr[i].helper = createHelper(defs, fontArr[i]);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\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\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof char === 'string' && char.charCodeAt(0) !== 13 || !char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper; // Canvas version\n // fontData.cache[index] = tHelper.measureText(char).width / 100;\n // SVG version\n // console.log(tHelper.getBBox().width)\n\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\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(char) {\n return combinedCharacters.indexOf(char) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\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\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\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 /* global initialDefaultFrame, BezierFactory, degToRads, bez, createTypedArray */\n\n /* exported PropertyFactory */\n\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\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\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\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 (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__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.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\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\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\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\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\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\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\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\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\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\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\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 var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\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\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\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\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\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\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n 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\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\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\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n\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\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n /* global Matrix, degToRads, PropertyFactory, extendPrototype, DynamicPropertyContainer */\n\n /* exported TransformPropertyFactory */\n\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\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\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\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 var py = this.py;\n\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 v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\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\n this.frameId = this.elem.globalData.frameId;\n }\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\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\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\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\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\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\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(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\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\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\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\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\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\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); // 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\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\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\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\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n /* global createSizedArray, createSizedArray, pointPool */\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\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(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\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\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\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\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\n return newPath;\n };\n /* global extendPrototype, roundCorner, BezierFactory, shapePool, degToRads,\r\n shapeCollectionPool, PropertyFactory, bmMin, DynamicPropertyContainer */\n\n /* exported ShapePropertyFactory */\n\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\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\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\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\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\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 this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\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 = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\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.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.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\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(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 = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.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\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\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], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.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\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\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 = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\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\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 var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n 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 var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.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\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n /* global shapeCollectionPool, initialDefaultFrame, extendPrototype, DynamicPropertyContainer */\n\n /* exported ShapeModifiers */\n\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // 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: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\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\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n /* global extendPrototype, ShapeModifier, PropertyFactory, segmentsLengthPool, bez, shapePool, ShapeModifiers */\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\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\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\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\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n 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 var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\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\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\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\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\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\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // 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\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.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\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n /* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, roundCorner, ShapeModifiers */\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\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\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\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\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n /* global extendPrototype, ShapeModifier, PropertyFactory, shapePool, ShapeModifiers */\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\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\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\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 clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\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\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n /* global extendPrototype, ShapeModifier, TransformPropertyFactory, PropertyFactory, Matrix, ShapeModifiers */\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\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\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\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\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\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\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 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\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\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 pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\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._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\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 return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n /* global createSizedArray, shapePool */\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\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\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n /* global createSizedArray, createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\n\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 var len = data.length || 0;\n var prop;\n\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\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\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\n extendPrototype([DynamicPropertyContainer], DashProperty);\n /* global createTypedArray, PropertyFactory, extendPrototype, DynamicPropertyContainer */\n\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\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n /* exported buildShapeString */\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\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\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\n return shapeString;\n };\n /* global Howl */\n\n /* exported audioControllerFactory */\n\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\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\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 }\n\n if (Howl) {\n return new Howl({\n src: [assetPath]\n });\n }\n\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 setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\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 /* global createTag, createNS, isSafari, dataManager */\n\n /* exported ImagePreloader */\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\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\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\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\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\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\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n /* exported featureSupport */\n\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n /* global createNS */\n\n /* exported filtersFactory */\n\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\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 }\n\n return fil;\n }\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\n return ob;\n }();\n /* global createSizedArray, PropertyFactory, TextAnimatorDataProperty, bez, addHueToRGB,\r\n addSaturationToRGB, addBrightnessToRGB, LetterProps, Matrix, extendPrototype, DynamicPropertyContainer */\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\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\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\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\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: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\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 xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\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\n i = len;\n\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\n this._pathData.pi = pathInfo;\n }\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\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\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;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\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\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\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\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\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\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\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\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\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 if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (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\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\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\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\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\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\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\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] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\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\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\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\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else 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\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\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 default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n /* global PropertyFactory, degToRads, TextSelectorProp */\n\n /* exported TextAnimatorDataProperty */\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n /* global FontManager, initialDefaultFrame, getFontProperties */\n\n /* exported TextProperty */\n\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\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\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\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n\n i += 1;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\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\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\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\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\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\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\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\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\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\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\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\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\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\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\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\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\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 /* global extendPrototype, BezierFactory, PropertyFactory, DynamicPropertyContainer */\n\n /* exported TextSelectorProp */\n\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(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\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\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.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n } // var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\n\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\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\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\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\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\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\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\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\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\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n /* global createSizedArray, pooling */\n\n /* exported poolFactory */\n\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n /* global createSizedArray */\n\n /* exported pooling */\n\n\n var pooling = function () {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n double: double\n };\n }();\n /* global createTypedArray, poolFactory */\n\n /* exported pointPool */\n\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n /* global ShapePath, pointPool, poolFactory */\n\n /* exported shapePool */\n\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\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\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n /* global createSizedArray, ShapeCollection, shapePool, pooling */\n\n /* exported shapeCollectionPool */\n\n\n var shapeCollectionPool = 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\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n /* global poolFactory, bezierLengthPool */\n\n /* exported segmentsLengthPool */\n\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n /* global createTypedArray, defaultCurveSegments, poolFactory */\n\n /* exported bezierLengthPool */\n\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', defaultCurveSegments),\n lengths: createTypedArray('float32', defaultCurveSegments)\n };\n }\n\n return poolFactory(8, create);\n }();\n /* exported markerParser */\n\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i]\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n /* global AudioElement, FootageElement, FontManager */\n\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\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\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\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\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 /* global createElementID, extendPrototype, BaseRenderer, NullElement, SVGShapeElement, SVGTextLottieElement,\r\n IImageElement, SVGCompElement, ISolidElement, createNS, locationHref, createSizedArray, expressionsPlugin */\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\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\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\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\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 contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\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\n extendPrototype([BaseRenderer], SVGRenderer);\n\n SVGRenderer.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\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\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 this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\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\n SVGRenderer.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRenderer.prototype.updateContainerSize = function () {};\n\n SVGRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (expressionsPlugin) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRenderer.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\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 var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\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\n SVGRenderer.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n /* global createSizedArray, createElementID, PropertyFactory, ShapePropertyFactory, createNS, locationHref */\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 var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\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\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\n path = createNS('path');\n\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 } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.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 } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\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\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\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\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\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\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + 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[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + 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 } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n\n\n function HierarchyElement() {}\n\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 = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\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\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\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\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; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\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 var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\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 /* global TransformPropertyFactory, Matrix */\n\n function TransformElement() {}\n\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\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// 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\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\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\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 if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\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 }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n /* global extendPrototype, RenderableElement, createProxyFunction */\n\n function RenderableDOMElement() {}\n\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\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\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\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 /* exported ProcessedElement */\n\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n /* global createNS */\n\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\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\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; // 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\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n /* exported SVGTransformData */\n\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 /* global DashProperty, PropertyFactory, extendPrototype, DynamicPropertyContainer */\n\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\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n /* global PropertyFactory, extendPrototype, DynamicPropertyContainer */\n\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\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n /* global PropertyFactory, degToRads, GradientProperty, createElementID, createNS, locationHref,\r\n extendPrototype, DynamicPropertyContainer, lineCapEnum, lineJoinEnum */\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\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\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;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var 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\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\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n /* global PropertyFactory, DashProperty, extendPrototype, SVGGradientFillStyleData, DynamicPropertyContainer */\n\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\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n /* global createNS */\n\n /* exported ShapeGroupData */\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n /* global Matrix, buildShapeString, bmFloor */\n\n /* exported SVGElementsRenderer */\n\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n default:\n return null;\n }\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\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\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\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\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 -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\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\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\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\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\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\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\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\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\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\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\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\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\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\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n /* global Matrix */\n\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\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\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n\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\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n /* global LayerExpressionInterface, EffectsExpressionInterface, CompExpressionInterface, ShapeExpressionInterface,\r\n TextExpressionInterface, getBlendMode,createElementID, EffectsManager */\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(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(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\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 /* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement */\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\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n /* global filtersFactory, featureSupport, filtersFactory, createElementID, createNS, MaskElement, SVGEffects, locationHref */\n\n function SVGBaseElement() {}\n\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; // If this layer acts as a mask for the following layer\n\n var filId;\n var fil;\n var gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n // eslint-disable-line eqeqeq\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 // eslint-disable-line eqeqeq\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 // This solution doesn't work on Android when meta tag with viewport attribute is set\n\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\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\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\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\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\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\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\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\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\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\n this.matteElement.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\n }\n };\n /* global ProcessedElement */\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\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 var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\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 /* global TextProperty, TextAnimatorProperty, buildShapeString, LetterProps */\n\n function ITextElement() {}\n\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\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\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\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n /* global extendPrototype, BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement */\n\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\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\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\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\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\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\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n /* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, createNS */\n\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\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\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\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n /* global extendPrototype, IImageElement, createNS */\n\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n /* global PropertyFactory, extendPrototype, RenderableElement, BaseElement, FrameElement */\n\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\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\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\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\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\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this.audio.volume(volumeValue);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n /* global createSizedArray, PropertyFactory, extendPrototype, SVGRenderer, ICompElement, SVGBaseElement */\n\n\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) : []; // this.layerElement = createNS('g');\n\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\n extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\n /* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement,\r\n RenderableDOMElement, ITextElement, createSizedArray, createNS */\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\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\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\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 var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\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\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\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData;\n var charData;\n\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\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i] = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n 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\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\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\n while (i < this.textSpans.length) {\n this.textSpans[i].style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n /* global extendPrototype, BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement,\r\n FrameElement, RenderableDOMElement, Matrix, SVGStyleData, SVGStrokeStyleData, SVGFillStyleData,\r\n SVGGradientFillStyleData, SVGGradientStrokeStyleData, locationHref, getBlendMode, ShapeGroupData,\r\n TransformPropertyFactory, SVGTransformData, ShapePropertyFactory, SVGShapeData, SVGElementsRenderer, ShapeModifiers,\r\n lineCapEnum, lineJoinEnum */\n\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // 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\n this.prevViewData = []; // 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\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\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\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\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\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\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\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n 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\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\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\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\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\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); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n /* global createNS */\n\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\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\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 /* global createNS */\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\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 /* global createNS */\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\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; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n /* global createNS, createElementID, locationHref, bmFloor */\n\n\n function SVGStrokeEffect(elem, filterManager) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = 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\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\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 * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n /* global createNS */\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\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB); // var opacity = this.filterManager.effectElements[2].p.v/100;\n // this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\n }\n };\n /* global createNS */\n\n\n function SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n\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\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\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\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\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\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\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\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\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\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\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\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\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 /* global createNS, rgbToHex, degToRads */\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\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n /* if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n } */\n\n }\n };\n /* global createElementID, createNS */\n\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\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\n _svgMatteSymbols.push(mask);\n\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\n elem.setMatte(mask.layerId);\n };\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 var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n /* exported SVGEffects */\n\n\n function SVGEffects() {}\n /* global createTag, AnimationItem */\n\n /* exported animationManager */\n\n\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\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\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\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\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; // moduleOb.start = start;\n\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 /* global createElementID, subframeEnabled, ProjectInterface, ImagePreloader, audioControllerFactory, extendPrototype, BaseEvent,\r\n CanvasRenderer, SVGRenderer, HybridRenderer, dataManager, expressionsPlugin, BMEnterFrameEvent, BMCompleteLoopEvent,\r\n BMCompleteEvent, BMSegmentStartEvent, BMDestroyEvent, BMEnterFrameEvent, BMCompleteLoopEvent, BMCompleteEvent, BMSegmentStartEvent,\r\n BMDestroyEvent, BMRenderFrameErrorEvent, BMConfigErrorEvent, markerParser */\n\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.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 this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\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, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(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\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (typeof animationData !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? 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') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\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 dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\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\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\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\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\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.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // 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\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\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 // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\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\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\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\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (typeof arr[0] === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\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\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\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\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n case 'drawnFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n /* exported EffectsManager */\n\n\n function EffectsManager() {\n this.effectElements = [];\n }\n\n var lottie = {};\n\n function setLocationHref(href) {\n locationHref = href;\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n subframeEnabled = flag;\n }\n\n function setIDPrefix(prefix) {\n idPrefix = prefix;\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n defaultCurveSegments = 200;\n break;\n\n default:\n case 'medium':\n defaultCurveSegments = 50;\n break;\n\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n\n if (defaultCurveSegments >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n expressionsPlugin = plugin;\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\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; // lottie.start = start;\n\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\n lottie.useWebWorker = function (flag) {\n _useWebWorker = flag;\n };\n\n lottie.setIDPrefix = setIDPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.8.1';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n var queryString;\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src.replace(/^[^\\?]+\\??/, ''); // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100);\n return lottie;\n});"],"names":["window","expressionsPlugin","svgNS","locationHref","initialDefaultFrame","_useWebWorker","subframeEnabled","idPrefix","isSafari","test","navigator","userAgent","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMin","max","min","BMMath","ProjectInterface","i","propertyNames","len","length","random","abs","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","round","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","_count","createElementID","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","callbacks","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","createRegularArray","value","arr","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","blendModeEnums","getBlendMode","mode","lineCapEnum","lineJoinEnum","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","nodecrypto","global","width","chunks","digits","rngname","startdenom","significance","overflow","mask","seedrandom","seed","options","key","shortseed","mixkey","flatten","entropy","tostring","autoseed","arc4","ARC4","prng","int32","quick","double","S","pass","is_math_call","state","copy","keylen","me","count","slice","obj","depth","result","typ","smear","stringseed","charCodeAt","randomBytes","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","String","fromCharCode","BezierFactory","ob","getBezierEasing","beziers","nm","str","replace","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","_mSampleValues","_precomputed","get","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","extendPrototype","sources","destination","sourcePrototype","attr","Object","hasOwnProperty","call","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezierLengthPool","newElement","percents","lengths","getSegmentsLength","shapeData","segmentsLength","segmentsLengthPool","closed","pathV","pathO","pathI","_length","totalLength","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","createWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","updateTextLayer","textLayer","documentData","iterateLayers","animationData","assets","checkChars","chars","pathData","paths","__converted","checkPathProperties","checkColors","iterateShapes","checkShapes","completeClosingShapes","cl","completeData","__complete","singleShape","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","loadAsset","fullPath","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","error","send","load","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","style","weight","FontManager","maxWaitingTime","emptyChar","w","size","combinedCharacters","concat","surrogateModifiers","zeroWidthJoiner","trimFontOptions","font","familyArray","enabledFamilies","join","setUpNode","family","parentNode","setAttribute","fontFamily","node","innerText","position","left","top","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","parent","checkLoadedFonts","fonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","now","initTime","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","tHelper","fontProps","fFamily","textContent","fClass","getContext","addFonts","defs","isLoaded","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","querySelectorAll","href","rel","src","sc","helper","cache","addChars","found","ch","getCharData","char","console","warn","_warned","measureText","fontName","getFontByName","index","doubleSize","getComputedTextLength","singleSize","name","fName","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","isCombinedCharacter","setIsLoaded","Font","typekitLoaded","fontPrototype","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","constructor","undefined","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","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","applyToMatrix","mat","sk","sa","rz","ry","rx","or","px","py","pz","processKeys","forceRender","_isDirty","precalculateMatrix","frameRate","pre","appliedTransformations","autoOriented","v1","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","pointPool","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","shapesEqual","shape1","shape2","shapePool","releaseShapes","addShape","ShapeProperty","shapeCollectionPool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","getShapeProp","getConstructorFunction","getKeyframedConstructorFunction","ShapeModifiers","modifiers","registerModifier","factory","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","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","clonedPath","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","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","op","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","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","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","createImageData","setAttributeNS","_elementHelper","append","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","featureSupport","maskType","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","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","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","shouldCombine","charAt","substr","newLineFlag","charData","fontManager","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","poolFactory","initialLength","_create","_release","element","pooling","create","cloned","shapeCollection","markerParser","parsePayloadLines","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","contentVisibility","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","filterSize","pendingElements","destroyed","rendererType","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","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","createFootage","AudioElement","FootageElement","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","SVGTextLottieElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","wrapper","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","display","show","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","lc","lj","ml","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","styleData","itemData","pathStringTransformed","redraw","iterations","lLen","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","ShapeTransformManager","sequences","sequenceList","transform_key_count","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","_placeholder","supports3d","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","addTransformSequence","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","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","getElements","destroyElements","pr","volumeValue","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","textBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","kBlurrinessToSigma","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","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","params","setParams","setSpeed","setDirection","nowTime","elapsedTime","advanceTime","first","goToAndStop","isFrame","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","freeze","unfreeze","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","onSetupError","onSegmentComplete","animType","CanvasRenderer","rendererSettings","HybridRenderer","parseInt","autoloadSegments","initialSegment","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","getMarkerData","markerName","marker","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","getPath","getDuration","lottie","setLocationHref","setSubframeRendering","setIDPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","__getFactory","version","scripts","myScript","root"],"sourceRoot":""}