{"version":3,"file":"web.mjs","sources":["../../node_modules/lottie-web/build/player/lottie_lottielab.js","../../src/common/renderer.ts","../../src/common/morphing.ts","../../src/common/event.ts","../../src/common/driven-renderer.ts","../../src/common/playback.ts","../../src/common/interactivity/definition.ts","../../src/common/expressions/parser.ts","../../src/common/expressions/evaluator.ts","../../src/common/interactivity/variables.ts","../../src/common/interactivity/driver.ts","../../src/common/interactivity/bezier.ts","../../src/common/interactivity/events.ts","../../src/common/interactivity/index.ts","../../src/common/player.ts","../../src/web/index.ts"],"sourcesContent":["(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\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        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n        default:\n          value = 1.1;\n          break;\n      }\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n      return arr;\n    }\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n      return createRegularArray(type, len);\n    }\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n    return createRegularArray;\n  }();\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; return _typeof$3 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$3(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\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  (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    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n  function ProjectInterface$1() {\n    return {};\n  }\n  BMMath.random = Math.random;\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$3(val);\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n      return absArr;\n    }\n    return Math.abs(val);\n  };\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n    return value;\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  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\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    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n      default:\n        break;\n    }\n    return [r, g, b];\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    switch (max) {\n      case min:\n        h = 0;\n        break;\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n      default:\n        break;\n    }\n    return [h, s, v];\n  }\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n      if (g < 0) {\n        g = 0;\n      }\n      if (b < 0) {\n        b = 0;\n      }\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; return _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$2(obj); }\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    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        });\n        // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n      workerFn = fn;\n      return workerProxy;\n    }\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\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              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);\n                    // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n                i += 1;\n              }\n              return null;\n            }\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n              return null;\n            }\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n              return null;\n            }\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\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                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {\n                // data.singleShape = true;\n              }\n            }\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\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                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n                if (xhr.response && _typeof$2(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n                return null;\n              }\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest();\n                // set responseType after calling open or IE will break.\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\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                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n                xhr.send();\n              }\n              return {\n                load: loadAsset\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              _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            _workerSelf.dataManager.completeData(animation);\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        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\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    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    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    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    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n    function imageLoaded() {\n      this.loadedAssets += 1;\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n      return path;\n    }\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n          clearInterval(intervalId);\n        }\n        _count += 1;\n      }.bind(this), 50);\n    }\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n    function 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        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\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    function setPath(path) {\n      this.path = path || '';\n    }\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n        i += 1;\n      }\n      return null;\n    }\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n    function 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    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\n  function BaseEvent() {}\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\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      this._cbs[eventName].push(callback);\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n            i -= 1;\n            len -= 1;\n          }\n          i += 1;\n        }\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\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      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n      if (keysCount === 0) {\n        throw new Error();\n      }\n      return keys;\n    }\n    return function (_markers) {\n      var markers = [];\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        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].cm\n            };\n          }\n        }\n        markers.push(markerData);\n      }\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n            return this.compositions[i].compInterface;\n          }\n          i += 1;\n        }\n        return null;\n      }\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n  function getRenderer(key) {\n    return renderers[key];\n  }\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    }\n    // Returns any renderer that is registered\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n    return '';\n  }\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$1(obj); }\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 = getSubframeEnabled();\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    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n  extendPrototype([BaseEvent], AnimationItem);\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n    var animType = 'svg';\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\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    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\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      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  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$1(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\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 : getRegisteredRenderer() || '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    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    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    if (prerender === 'false') {\n      params.prerender = false;\n    }\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\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    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    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n        i += 1;\n      }\n    }\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n    if (data.assets) {\n      len = data.assets.length;\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n    this.loadNextSegment();\n  };\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n    this.loadNextSegment();\n  };\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n    try {\n      this.animationData = animData;\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n      this.renderer.configAnimation(animData);\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n    var _height = typeof height === 'number' ? height : undefined;\n    this.renderer.updateContainerSize(_width, _height);\n  };\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n    return null;\n  };\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    var numValue = Number(value);\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\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    this.pause();\n  };\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    var numValue = Number(value);\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\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    this.play();\n  };\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false;\n    // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n      this.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      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n    this.trigger('segmentStart');\n  };\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n    if (_typeof$1(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n    return false;\n  };\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.setVolume(val);\n  };\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.mute();\n  };\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.unmute();\n  };\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n    return path;\n  };\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n      i += 1;\n    }\n    return null;\n  };\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {\n      // TODO: decide how to handle catch case\n    }\n  };\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n        default:\n          this.triggerEvent(name);\n      }\n    }\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n        i += 1;\n      }\n    }\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n      var i = 0;\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n        i += 1;\n      }\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n      return animations;\n    }\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n    function setSpeed(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n    function setDirection(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n    function play(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n      initTime = nowTime;\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n    function pause(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n    function stop(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n    function togglePause(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n    function destroy(animation) {\n      var i;\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n        registerAnimation(animElements[i], animationData);\n      }\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n    function resize() {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n    function freeze() {\n      _isFrozen = true;\n    }\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n    function setVolume(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n    function mute(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n    function unmute(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize;\n    // moduleOb.start = start;\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\n       * BezierEasing - use bezier curve for transition easing function\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n       *\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\n       * Usage:\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\n       *\n       */\n\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n      if (beziers[str]) {\n        return beziers[str];\n      }\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    }\n\n    // These values are established by empiricism with tests (tradeoff: performance VS precision)\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n    function C(aA1) {\n      return 3.0 * aA1;\n    }\n\n    // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    }\n\n    // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n        currentT,\n        i = 0;\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n      return currentT;\n    }\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n      return aGuessT;\n    }\n\n    /**\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\n       */\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n          mY1 = this._p[1],\n          mX2 = this._p[2],\n          mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n          mY1 = this._p[1],\n          mX2 = this._p[2],\n          mY2 = this._p[3];\n        this._precomputed = true;\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n          mX2 = this._p[2];\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n      /**\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n          mX2 = this._p[2],\n          mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n        --currentSample;\n\n        // Interpolate to provide an initial guess for t\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n    return {\n      \"double\": _double\n    };\n  }();\n\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      function newElement() {\n        var element;\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n        return element;\n      }\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n        if (_release) {\n          _release(element);\n        }\n        pool[_length] = element;\n        _length += 1;\n      }\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n      element.lengths.length = 0;\n    }\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\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        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n          for (i = 0; i < len; i += 1) {\n            ptCoord = 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            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n            lastPoint[i] = point[i];\n          }\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = 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      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\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          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n            for (i = 0; i < len; i += 1) {\n              ptCoord = 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              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n        return storedData[bezierName];\n      };\n    }();\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n          flag = false;\n        }\n      }\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n    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    var bezierSegmentPoints = createTypedArray('float32', 8);\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      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      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\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      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\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      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\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      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n      var t1t1t1 = t1 * t1 * t1;\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        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        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        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    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n  var bez = bezFunction();\n\n  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n  function _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n  function _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n  function addVectors(a, b) {\n    return a.map(function (v, i) {\n      return v + (b[i] || 0);\n    });\n  }\n  function subtractVectors(a, b) {\n    return a.map(function (v, i) {\n      return v - (b[i] || 0);\n    });\n  }\n  function normalizeVector(a) {\n    var length = Math.hypot.apply(Math, _toConsumableArray(a));\n    if (length > Number.EPSILON) {\n      return a.map(function (v) {\n        return v / length;\n      });\n    }\n    return a;\n  }\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c;\n    // Complex roots\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a);\n    // 1 root\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a);\n    // 2 roots\n    return [singleRoot - delta, singleRoot + delta];\n  }\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  /**\n   * Returns the _normalized_ direction vector of the tangent of the curve when approaching\n   * the point from negative infinity, pointing outwards at cusps.\n   */\n  function tangentDirection(p0, to, ti, p3, t) {\n    var controlPoints = [p0, addVectors(p0, to), addVectors(p3, ti), p3];\n    var firstSubdivision = deCasteljauSubdivision(controlPoints, t);\n    var secondSubdivision = deCasteljauSubdivision(firstSubdivision, t);\n    var tangent1 = subtractVectors(secondSubdivision[1], secondSubdivision[0]);\n    var length1 = Math.hypot.apply(Math, _toConsumableArray(tangent1));\n    if (length1 > Number.EPSILON) return tangent1.map(function (v) {\n      return v / length1;\n    });\n    var tangent2 = subtractVectors(firstSubdivision[2], firstSubdivision[0]);\n    var length2 = Math.hypot.apply(Math, _toConsumableArray(tangent2));\n    if (length2 > Number.EPSILON) return tangent2.map(function (v) {\n      return v / length2;\n    });\n\n    // Here we have to try both cases, as any two of the three points may coincide without the\n    // curve being degenerate\n    var tangent3 = subtractVectors(firstSubdivision[1], firstSubdivision[0]);\n    var length3 = Math.hypot.apply(Math, _toConsumableArray(tangent3));\n    if (length3 > Number.EPSILON) return tangent3.map(function (v) {\n      return v / length3;\n    });\n    return normalizeVector(subtractVectors(controlPoints[3], controlPoints[0]));\n  }\n  function deCasteljauSubdivision(points, t) {\n    var result = [];\n    for (var i = 0; i < points.length - 1; i += 1) {\n      result.push(lerpPoint(points[i], points[i + 1], t));\n    }\n    return result;\n  }\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    }\n    // Derivative roots to find min/max\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n    return {\n      min: min,\n      max: max\n    };\n  }\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n        iterationIndex = 0;\n        break;\n      }\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n    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    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n      var bezierData = keyframeMetadata.bezierData;\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        }\n        // caching._lastKeyframeIndex = -1;\n      } else {\n        if (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        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var startPoint = keyData.s;\n        var endPoint = nextKeyData.s || keyData.e;\n        if (perc > 1) {\n          var tangent = tangentDirection(keyData.s, keyData.to, keyData.ti, nextKeyData.s || keyData.e, 1);\n          var ratio = bezierData.segmentLength * (perc - 1);\n          for (var cnt = 0; cnt < endPoint.length; cnt += 1) {\n            newValue[cnt] = endPoint[cnt] + tangent[cnt] * ratio;\n          }\n        } else if (perc < 0) {\n          var _tangent = tangentDirection(keyData.s, keyData.to, keyData.ti, nextKeyData.s || keyData.e, 0);\n          var _ratio = bezierData.segmentLength * perc;\n          for (var _cnt = 0; _cnt < startPoint.length; _cnt += 1) {\n            newValue[_cnt] = startPoint[_cnt] + _tangent[_cnt] * _ratio;\n          }\n        } else {\n          var distanceInLine = bezierData.segmentLength * perc;\n          var segmentPerc;\n          var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n          j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n          flag = true;\n          jLen = bezierData.points.length;\n          while (flag) {\n            addedLength += bezierData.points[j].partialLength;\n            if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n              kLen = bezierData.points[j].point.length;\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k];\n              }\n              break;\n            } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n              segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n              kLen = bezierData.points[j].point.length;\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n              }\n              break;\n            }\n            if (j < jLen - 1) {\n              j += 1;\n            } else {\n              flag = false;\n            }\n          }\n          caching._lastPoint = j;\n          caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n          caching._lastKeyframeIndex = i;\n        }\n      }\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      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                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              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  }\n\n  // based on @Toji's https://github.com/toji/gl-matrix/\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    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    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n  function setVValue(val) {\n    var multipliedValue;\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n      if (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      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n        i += 1;\n      }\n    }\n  }\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.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  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    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.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    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n      var p;\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n          default:\n            break;\n        }\n      }\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n      return p;\n    }\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\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      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n    this._length = len;\n  };\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n      case 'i':\n        arr = this.i;\n        break;\n      case 'o':\n        arr = this.o;\n        break;\n      default:\n        arr = [];\n        break;\n    }\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n    return newPath;\n  };\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\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      shapePath._length = 0;\n      shapePath.c = false;\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      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n      return cloned;\n    }\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n    this._length = 0;\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    function newShapeCollection() {\n      var shapeCollection;\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n      return shapeCollection;\n    }\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n      shapeCollection._length = 0;\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\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      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){\n                  keyPropS = kf[kf.length - 1].s[0];\n              }else{\n                  keyPropS = kf[kf.length - 2].e[0];\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        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n            if (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            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n        keyPropS = keyData.s[0];\n      }\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching);\n        /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n      var i;\n      var len = shape1._length;\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = 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    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\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      var i;\n      var len = this.effectsSequence.length;\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n    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    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.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    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n      function EllShapePropertyFactory(elem, data) {\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        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n          var _cw = this.d !== 3;\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\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        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\n                  this.v.i.length = numPts;\n                  this.v.o.length = numPts; */\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          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          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n\n            /* this.v.v[i] = [x,y];\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n                      this.v._length = numPts; */\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          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          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\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        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\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          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n    function getShapeProp(elem, data, type) {\n      var prop;\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n      return prop;\n    }\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\n   Transformation Matrix v2.0\n   (c) Epistemex 2014-2015\n   www.epistemex.com\n   By Ken Fyrstenberg\n   Contributions by leeoniya.\n   License: MIT, header required.\n   */\n\n  /**\n   * 2D transformation matrix object initialized with identity matrix.\n   *\n   * The matrix can synchronize a canvas context by supplying the context\n   * as an argument, or later apply current absolute transform to an\n   * existing context.\n   *\n   * All values are handled as floating point values.\n   *\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n   * @prop {number} a - scale x\n   * @prop {number} b - shear y\n   * @prop {number} c - shear x\n   * @prop {number} d - scale y\n   * @prop {number} e - translate x\n   * @prop {number} f - translate y\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n   * @constructor\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n      // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n      return this;\n    }\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2;\n        // }\n        this._identityCalculated = false;\n        return this;\n      }\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n\n      /* matrix order (canvas compatible):\n           * ace\n           * bdf\n           * 001\n           */\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n      return this._identity;\n    }\n    function equals(matr) {\n      var i = 0;\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n        i += 1;\n      }\n      return true;\n    }\n    function clone(matr) {\n      var i;\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n      return matr;\n    }\n    function cloneFromProps(props) {\n      var i;\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\n           x: x * me.a + y * me.c + me.e,\n           y: x * me.b + y * me.d + me.f\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n      return retPts;\n    }\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        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      return arr;\n    }\n    function applyToPointArray(x, y, z) {\n      var arr;\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n      return arr;\n    }\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n      /* if(this.isIdentity()) {\n              return '';\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n      return cssValue;\n    }\n    function roundMatrixProperty(val) {\n      var v = 10000;\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n      return val;\n    }\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n      /* if(this.isIdentity()) {\n              return '';\n          } */\n      var props = this.props;\n      var _a = roundMatrixProperty(props[0]);\n      var _b = roundMatrixProperty(props[1]);\n      var _c = roundMatrixProperty(props[4]);\n      var _d = roundMatrixProperty(props[5]);\n      var _e = roundMatrixProperty(props[12]);\n      var _f = roundMatrixProperty(props[13]);\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n    return animationManager.loadAnimation(params);\n  }\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n      case 'matrix':\n        return Matrix;\n      default:\n        return null;\n    }\n  }\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize;\n  // lottie.start = start;\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n    return null;\n  }\n  var queryString = '';\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 ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n    renderer = getQueryVariable('renderer');\n  }\n  var readyStateCheckInterval = setInterval(checkReady, 100);\n\n  // this adds bodymovin to the window object for backwards compatibility\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {\n    //\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    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n        case 'bold':\n          fWeight = '700';\n          break;\n        case 'black':\n          fWeight = '900';\n          break;\n        case 'medium':\n          fWeight = '500';\n          break;\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n        default:\n          break;\n      }\n    }\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = [];\n    // Hindi characters\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n      return enabledFamilies.join(',');\n    }\n    function setUpNode(font, family) {\n      var parentNode = createTag('span');\n      // Node is invisible to screen readers.\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span');\n      // Characters that vary significantly among different fonts\n      node.innerText = 'giItT1WQy@!-/#';\n      // Visible - so we can measure it - but not on the screen\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px';\n      // Large font size makes even subtle changes obvious\n      parentNode.style.fontSize = '300px';\n      // Reset any font properties\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode);\n\n      // Remember width with no applied web font\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\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          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px';\n        // tHelper.style.fontFamily = fontData.fFamily;\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n        return helper.measureText(text).width;\n      }\n      return {\n        measureText: measure\n      };\n    }\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n      if (!this.chars) {\n        this.chars = [];\n      }\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n          j += 1;\n        }\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n        i += 1;\n      }\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // 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    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName);\n      // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n      var index = _char2;\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n      return fontData.cache[index] * size;\n    }\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n        i += 1;\n      }\n      return this.fonts[0];\n    }\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n      return codePoint;\n    }\n\n    // Skin tone modifiers\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    }\n\n    // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    }\n\n    // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n      return false;\n    }\n\n    // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    }\n\n    // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n      var count = 0;\n      index += 2;\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n        count += 1;\n        index += 2;\n      }\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\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\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n    return data;\n  };\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false;\n      // layer's display state\n      this.hidden = false;\n      // If layer's transparency equals 0, it can be hidden\n      this.isTransparent = false;\n      // list of animated components\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n    /**\n       * @function\n       * Initializes frame related properties.\n       *\n       * @param {number} num\n       * current frame number in Layer's time\n       *\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      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\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      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n      var i = 0;\n      var len = this.data.masksProperties.length;\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n        i += 1;\n      }\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n      if (!expressionsInterfaces) {\n        return;\n      }\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID();\n\n      // Stretch factor for old animations missing this property.\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      }\n      // effects manager\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\n   * @file\n   * Handles element's layer frame update.\n   * Checks layer in point and out point\n   *\n   */\n\n  function FrameElement() {}\n  FrameElement.prototype = {\n    /**\n       * @function\n       * Initializes frame related properties.\n       *\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false;\n      // list of animated properties\n      this.dynamicProperties = [];\n      // If layer has been modified in current tick this will be true\n      this._mdf = false;\n    },\n    /**\n       * @function\n       * Calculates all dynamic values\n       *\n       * @param {number} num\n       * current frame number in Layer's time\n       * @param {boolean} isVisible\n       * if layers is currently in range\n       *\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n  FootageElement.prototype.prepareFrame = function () {};\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  FootageElement.prototype.renderFrame = function () {};\n  FootageElement.prototype.destroy = function () {};\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n    if (!expressionsInterfaces) {\n      return;\n    }\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\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._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n  AudioElement.prototype.show = function () {\n    // this.audio.play()\n  };\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  AudioElement.prototype.destroy = function () {};\n  AudioElement.prototype.sourceRectAtTime = function () {};\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n    this.checkPendingElements();\n  };\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n      case 0:\n        return this.createComp(layer);\n      case 1:\n        return this.createSolid(layer);\n      case 3:\n        return this.createNull(layer);\n      case 4:\n        return this.createShape(layer);\n      case 5:\n        return this.createText(layer);\n      case 6:\n        return this.createAudio(layer);\n      case 13:\n        return this.createCamera(layer);\n      case 15:\n        return this.createFootage(layer);\n      default:\n        return this.createNull(layer);\n    }\n  };\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n    this.checkPendingElements();\n  };\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n        j += 1;\n      }\n    }\n  };\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\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          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n      i += 1;\n    }\n  };\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n    return null;\n  };\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n    if (path.length === 0) {\n      return element;\n    }\n    return element.getElementByPath(path);\n  };\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\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\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n      this.iterateDynamicProperties();\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\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          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n      this.frameId = this.elem.globalData.frameId;\n    }\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n    function autoOrient() {\n      //\n      // var prevP = this.getValueAtTime();\n    }\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix();\n      // Precalculated matrix with non animated properties\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\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        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n        // sh Indicates it needs to be capped between -180 and 180\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this);\n      // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n      this._isDirty = true;\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      }\n\n      // TODO: check TYPE 11: Guided elements\n      if (this.data.ty !== 11) {\n        // this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length;\n        // Checking if any of the transformation matrices in the hierarchy chain has changed.\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n            i += 1;\n          }\n        }\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n      if (!this.localTransforms || this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n            i += 1;\n          }\n        }\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n          localMat.multiply(this.finalTransform.mat);\n        }\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n      var i;\n      var len = transforms.length;\n      var ptNew;\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n        // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\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    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      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n      path = createNS('path');\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        }\n\n        // TODO move this to a factory or to a constructor\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        }\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\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      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    }\n    // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    }\n    // pathNodes.__renderedString = pathString;\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n      viewData.lastPath = pathString;\n    }\n  };\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\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      return fil;\n    }\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\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    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n    return ob;\n  }();\n\n  var registeredEffects = {};\n  var idPrefix = 'filter_result_';\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n        if (registeredEffects[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n    return effects;\n  };\n  function registerEffect(id, effect, countsAsEffect) {\n    registeredEffects[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null;\n      // If this layer acts as a mask for the following layer\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n      // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n          if (!featureSupport.maskType && matteType === 1) {\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId);\n          /// /\n          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(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\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            maskGrouper.appendChild(gg);\n          }\n          this.globalData.defs.appendChild(maskGroup);\n        }\n        this.matteMasks[matteType] = id;\n      }\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\n   * @file\n   * Handles AE's layer parenting property.\n   *\n   */\n\n  function HierarchyElement() {}\n  HierarchyElement.prototype = {\n    /**\n       * @function\n       * Initializes hierarchy properties\n       *\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = [];\n      // if element is parent of another layer _isParent will be true\n      this._isParent = false;\n      this.checkParenting();\n    },\n    /**\n       * @function\n       * Sets layer's hierarchy.\n       * @param {array} hierarch\n       * layer's parent list\n       *\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n    /**\n       * @function\n       * Sets layer as parent.\n       *\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n    /**\n       * @function\n       * Searches layer's parenting chain\n       *\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\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        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n      var i;\n      var len = this.shapes.length;\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n        // 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        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      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n        i += 1;\n      }\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n      while (i) {\n        i -= 1;\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n    return ob;\n  }();\n  function ShapeModifier() {}\n  ShapeModifier.prototype.initModifierProperties = function () {};\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\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\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level;\n    // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n    this._isAnimated = !!shape.k;\n    // TODO: commenting this for now since all shapes are animated\n    var i = 0;\n    var len = transformers.length;\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n      i += 1;\n    }\n  }\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\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    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n    if (!this.k) {\n      this.getValue(true);\n    }\n    this._isAnimated = this.k;\n  }\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\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  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n      if (diff > 0.01) {\n        return false;\n      }\n      i += 1;\n    }\n    return true;\n  };\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n    return true;\n  };\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n      if (this.o.length) {\n        len = this.prop.v.length;\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n      this._mdf = !forceRender;\n    }\n  };\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\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      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\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  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\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  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\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\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n    var _matrixHelper = new Matrix();\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n        case 'gf':\n          return renderGradient;\n        case 'gs':\n          return renderGradientStroke;\n        case 'st':\n          return renderStroke;\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n        case 'tr':\n          return renderContentTransform;\n        case 'no':\n          return renderNoop;\n        default:\n          return null;\n      }\n    }\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n    function renderNoop() {}\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 iterations;\n      var k;\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n        if (redraw) {\n          pathStringTransformed = '';\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n      var stops;\n      var i;\n      var len;\n      var stop;\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n        len = stops.length;\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n        if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\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          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        }\n        // gfill.setAttribute('fy','200');\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = [];\n    // Full shape data\n    this.shapesData = data.shapes;\n    // List of styles that will be applied to shapes\n    this.stylesList = [];\n    // List of modifiers that will be applied to shapes\n    this.shapeModifiers = [];\n    // List of items in shape tree\n    this.itemsData = [];\n    // List of items in previous shape tree\n    this.processedElements = [];\n    // List of animated components\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp);\n    // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n    this.prevViewData = [];\n    // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n\n  /*\n  This method searches for multiple shapes that affect a single element and one of them is animated\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    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\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      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n    return elementData;\n  };\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n      i += 1;\n    }\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n    for (j = 0; j < jLen; j += 1) {\n      if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n    this.renderModifiers();\n  };\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    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    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = arr[i].hd;\n        }\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\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          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n        if (arr[i]._render) {\n          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        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n        ownModifiers.push(modifier);\n      }\n      this.addProcessedElement(arr[i], i + 1);\n    }\n    len = ownStyles.length;\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n    len = ownModifiers.length;\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n    this.renderShape();\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n          // Adding M0 0 fixes same mask bug on all browsers\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n    return updated;\n  };\n\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    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n    return obj;\n  };\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n    return this.kf;\n  };\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n      i += 1;\n    }\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n    return this.data.d.k[this.keysIndex].s;\n  };\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true;\n        // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1);\n          // It's a surrogate pair (this is the Low surrogate)\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n      i += currentChars.length;\n    }\n    return charactersArray;\n  };\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\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    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      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n            // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      }\n\n      //\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n      ind = 0;\n      based = animatorData.s.b;\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n          ind += 1;\n        }\n      }\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\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      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.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      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // 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          mult = easer(mult);\n        }\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        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n          var threshold = 0.5 - smoothness * 0.5;\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n            if (mult > 1) {\n              mult = 1;\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        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\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 TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        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    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var 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    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        }\n        // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n        i = len;\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n        this._pathData.pi = pathInfo;\n      }\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\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    //\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n          isNewLine = false;\n        }\n      }\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    }\n    //\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n        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        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              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n              default:\n                break;\n            }\n            currentLine = letters[i].line;\n          }\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n          flag = true;\n          // Force alignment only works with a single line for now\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          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              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n\n          // Grouping alignment\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n            // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else 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        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\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            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\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          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n            default:\n              break;\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        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n        letterO = elemOpacity;\n      }\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n    return shapeStr;\n  };\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n    matrixHelper.translate(0, -documentData.ls, 0);\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n      default:\n        break;\n    }\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n  ITextElement.prototype.emptyProp = new LetterProps();\n  ITextElement.prototype.destroy = function () {};\n  ITextElement.prototype.validateText = function () {\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  var emptyShapeData = {\n    shapes: []\n  };\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n      i += 1;\n    }\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n    return data;\n  };\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var 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    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n        case 2:\n          justify = 'middle';\n          break;\n        default:\n          justify = 'start';\n          break;\n      }\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || 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        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n          tSpan.style.display = 'inherit';\n        }\n        matrixHelper.reset();\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0;\n          // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n          xPos += trackingOffset;\n        }\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement;\n          // t === 1 means the character has been replaced with an animated shaped\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n          // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        }\n        //\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n    this._sizeChanged = true;\n  };\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n    return this.bbox;\n  };\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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        var glyphElement;\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n  extendPrototype([IImageElement], ISolidElement);\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect');\n    /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n  NullElement.prototype.renderFrame = function () {};\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  NullElement.prototype.destroy = function () {};\n  NullElement.prototype.sourceRectAtTime = function () {};\n  NullElement.prototype.hide = function () {};\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n  extendPrototype([BaseRenderer], SVGRendererBase);\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n    // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n    this.animationItem.wrapper.appendChild(this.svgElement);\n    // Mask animation\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n      element.initExpressions();\n    }\n    this.appendElementInPos(element, pos);\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n      if (elementIndex === -1) {\n        return;\n      }\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n          i += 1;\n        }\n      }\n    }\n  };\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    }\n    // console.log('-------');\n    // console.log('FRAME ',num);\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n    if (!this.completeLayers) {\n      this.checkLayers(num);\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    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  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n    if (!newElement) {\n      return;\n    }\n    var i = 0;\n    var nextElement;\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n      i += 1;\n    }\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n    this.hide();\n  };\n\n  /* ICompElement.prototype.hide = function(){\n      if(!this.hidden){\n          this.hideElement();\n          var i,len = this.elements.length;\n          for( i = 0; i < len; i+=1 ){\n              if(this.elements[i]){\n                  this.elements[i].hide();\n              }\n          }\n      }\n  }; */\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n    var i;\n    var len = this.elements.length;\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    }\n    // This iteration needs to be backwards because of how expressions connect between each other\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      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      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n  extendPrototype([SVGRendererBase], SVGRenderer);\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function TrimModifier() {}\n  extendPrototype([ShapeModifier], TrimModifier);\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n    return shapeSegments;\n  };\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n    pathsData.length = 0;\n    return pathsData;\n  };\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n      if (o < 0) {\n        o += 1;\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      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      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n    var shapePaths;\n    var i;\n    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    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes();\n          // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n          jLen = edges.length;\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    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    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n    shapes.push(shapePath);\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false;\n            shapePath.c = false;\n          }\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n    return shapes;\n  };\n\n  function SVGComposableEffect() {}\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n      return feMerge;\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_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', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_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', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge);\n    //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\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    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;\n\n      // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\n\n      // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  // import SVGTransformEffect from '../elements/svgElements/effects/SVGTransformEffect';\n\n  // Registering renderers\n  registerRenderer('svg', SVGRenderer);\n\n  // Registering shape modifiers\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  // ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  // ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  // ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  // ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  // ShapeModifiers.registerModifier('op', OffsetPathModifier);\n\n  // Registering effects\n  // registerEffect(20, SVGTintFilter, true);\n  // registerEffect(21, SVGFillFilter, true);\n  // registerEffect(22, SVGStrokeEffect, false);\n  // registerEffect(23, SVGTritoneFilter, true);\n  // registerEffect(24, SVGProLevelsFilter, true);\n  registerEffect(25, SVGDropShadowEffect, true);\n  // registerEffect(28, SVGMatte3Effect, false);\n  registerEffect(29, SVGGaussianBlurEffect, true);\n\n  return lottie;\n\n}));\n","import lottie, { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport type { LottieJSON } from '..';\nimport { EventEmitter } from './event';\n\n/**\n * Value of the X-Lottie-Player header that is sent with requests to the server.\n * This can be useful for monitoring and logging the various library versions\n * that exist in the wild, to address compatibility issues, for example.\n */\nconst X_LOTTIE_PLAYER = '@lottielab/lottie-player 1.1.3';\n\n/**\n * List of allowed origins for which the X-Lottie-Player header, containing the\n * library version, is sent with the request.\n *\n * Ideally we would simply append this header to all requests, but if the server\n * doesn't respond with a matching Access-Control-Allow-Origin header, the request\n * will fail due to CORS. So we instead have a list of origins that are known to\n * allow this header via CORS.\n *\n * PRs to add more origins are welcome.\n */\nconst X_LOTTIE_PLAYER_ORIGIN_WHITELIST = [/^https?:\\/\\/(.*[^.]\\.)?lottielab\\.com$/];\n\nconst EMPTY_LOTTIE = {\n  v: '5.7.5',\n  fr: 100,\n  ip: 0,\n  op: 300,\n  w: 300,\n  h: 225,\n  nm: 'Comp 1',\n  ddd: 0,\n  assets: [],\n  layers: [],\n  markers: [],\n};\n\n/**\n * A base renderer for Lottie animations. Contains no logic for playback. After\n * being initialized with an animation, call render() to seek the animation to a\n * specific time and update the DOM to display the current frame.\n */\nexport class LottieRenderer {\n  protected _animation!: AnimationItem;\n  private loadingSrc?: string;\n  protected readonly root: Node & InnerHTML;\n\n  constructor(root: Node & InnerHTML, src?: string | LottieJSON, preserveAspectRatio?: string) {\n    this.root = root;\n    this.initialize(src, preserveAspectRatio);\n  }\n\n  private _initWithAnimation(\n    animationData: LottieJSON,\n    container: HTMLDivElement,\n    preserveAspectRatio?: string\n  ) {\n    this._animation = lottie.loadAnimation({\n      container,\n      renderer: 'svg',\n      autoplay: false,\n      animationData,\n      rendererSettings: {\n        preserveAspectRatio,\n      },\n    });\n  }\n\n  initialize(src: string | LottieJSON | undefined, preserveAspectRatio?: string): Promise<void> {\n    // Clear existing content\n    this.destroy();\n\n    const container = document.createElement('div');\n    container.style.width = '100%';\n    container.style.height = '100%';\n\n    if (typeof src === 'string') {\n      // Load from URL\n      if (this.loadingSrc === src) {\n        return Promise.resolve();\n      }\n\n      this.loadingSrc = src;\n      const xhr = new XMLHttpRequest();\n      xhr.open('GET', src, true);\n      try {\n        // Report the library version to the server for logging and monitoring\n        // purposes, but only if the origin is whitelisted. This is to avoid CORS\n        // issues - see X_LOTTIE_PLAYER_ORIGIN_WHITELIST above.\n        if (X_LOTTIE_PLAYER_ORIGIN_WHITELIST.some((re) => new URL(src).origin.match(re))) {\n          xhr.setRequestHeader('X-Lottie-Player', X_LOTTIE_PLAYER);\n        }\n      } catch (e) {\n        // Ignore, since it's a debug/monitoring feature\n      }\n\n      return new Promise((resolve, reject) => {\n        xhr.onload = () => {\n          if (this.loadingSrc !== src) {\n            // Another request has been made in the meantime\n            return resolve();\n          }\n\n          try {\n            if (xhr.status === 200) {\n              if (!xhr.response) {\n                return reject(new Error(`Failed to load Lottie file ${src}: Empty response`));\n              }\n\n              const lottie = JSON.parse(xhr.response);\n              this._initWithAnimation(lottie, container, preserveAspectRatio);\n              this.root.innerHTML = '';\n              this.root.appendChild(container);\n              return resolve();\n            } else {\n              let responseText = xhr.responseText;\n              if (responseText.length > 300) {\n                responseText = responseText.slice(0, 300) + '... (truncated)';\n              }\n              return reject(\n                new Error(\n                  `Failed to load Lottie file ${src}: HTTP ${xhr.status} ${xhr.statusText}\\nResponse:\\n${responseText}`\n                )\n              );\n            }\n          } catch (e: any) {\n            if (e.message) {\n              e.message = `Failed to load Lottie file ${src}: ${e.message}`;\n            }\n\n            return reject(e);\n          } finally {\n            this.loadingSrc = undefined;\n          }\n        };\n        xhr.onerror = () => {\n          this.loadingSrc = undefined;\n          reject(new Error(`Failed to load Lottie file ${src}: Network error`));\n        };\n        xhr.send();\n      });\n    } else {\n      this._initWithAnimation(src ?? EMPTY_LOTTIE, container, preserveAspectRatio);\n      this.root.innerHTML = '';\n      this.root.appendChild(container);\n      this.loadingSrc = undefined;\n      return Promise.resolve();\n    }\n  }\n\n  get frameRate(): number {\n    return this._animation ? this._animation.frameRate : 0;\n  }\n\n  get duration(): number {\n    return this._animation ? this._animation.getDuration(false) : 0;\n  }\n\n  get durationFrames(): number {\n    return this._animation ? this._animation.getDuration(true) : 0;\n  }\n\n  get animation(): AnimationItem {\n    return this._animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    const data = (this._animation as any)?.animationData;\n    if (data === EMPTY_LOTTIE) {\n      return undefined;\n    }\n    return data;\n  }\n\n  renderFrame(time: number) {\n    const clampedFrame = Math.max(0, Math.min(this.durationFrames - 1e-6, time * this.frameRate));\n    this._animation.goToAndStop(clampedFrame, true);\n  }\n\n  get currentTime(): number {\n    return this._animation.currentFrame / this.frameRate;\n  }\n\n  get currentFrame(): number {\n    return this._animation.currentFrame;\n  }\n\n  destroy() {\n    if (this._animation) {\n      this._animation.destroy();\n    }\n\n    this.root.innerHTML = '';\n  }\n}\n","import type { AnimationItem } from 'lottie-web';\n\n// lottie-web internal types\n\ninterface SvgRenderer {\n  elements: SvgRendererElement[];\n}\n\ntype ValueCallback = (val: Lerpable) => Lerpable;\n\ninterface DynamicProp {\n  addEffect(cb: ValueCallback): void;\n  effectsSequence: ValueCallback[];\n  _caching: unknown;\n  offsetTime: number;\n  interpolateValue?(frame: number, caching: unknown): Lerpable;\n  interpolateShape?(frame: number, prevValue: Lerpable, caching: unknown): Lerpable;\n}\n\ninterface NestedDynamicProp {\n  dynamicProperties: DynamicProp[];\n}\n\ninterface SvgRendererElement {\n  elements?: SvgRendererElement[];\n  dynamicProperties?: (DynamicProp | NestedDynamicProp)[];\n}\n\ntype ShapePath = {\n  closed: boolean;\n  i: number[];\n  o: number[];\n  v: number[];\n  length?: number;\n  _length?: number;\n};\n\ntype Lerpable = number | number[] | Float32Array | ShapePath;\n\n/**\n * A linear interpolation implementation which dynamically handles any type of\n * value that a lottie-web dynamic property (DynamicProp) might contain.\n */\nfunction universalLerp(a: Lerpable, b: Lerpable, t: number): Lerpable {\n  if (a == undefined) {\n    return b;\n  } else if (b == undefined) {\n    return a;\n  } else if (typeof a === 'number') {\n    // 1-d lerp\n\n    if (typeof b !== 'number') {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    return (1 - t) * a + t * b;\n  } else if (Array.isArray(a) || a instanceof Float32Array) {\n    // k-d lerp\n\n    if (!Array.isArray(b) && !(b instanceof Float32Array)) {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    // Recursively apply to elements\n    return a.map((xa, i) => universalLerp(xa, b[i] ?? xa, t) as number);\n  } else if ('i' in a && 'v' in a && 'o' in a) {\n    // Lerp between vector paths\n\n    if (typeof b !== 'object' || !('i' in b && 'v' in b && 'o' in b)) {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    return {\n      closed: a.closed && b.closed,\n      i: universalLerp(a.i, b.i, t) as number[],\n      o: universalLerp(a.o, b.o, t) as number[],\n      v: universalLerp(a.v, b.v, t) as number[],\n      length: Math.max(a.length ?? 0, b.length ?? 0),\n      _length: Math.max(a._length ?? 0, b._length ?? 0),\n    };\n  } else {\n    // Unknown type, fall back to step function\n    return t > 0.5 ? b : a;\n  }\n}\n\n/**\n * A single inter-frame morph operation. It instructs the morphing system to\n * combine the current state of each property with what its state would be at\n * another frame, interpolated with the provided strength.\n *\n * For example, if the animation is at time 2.0s and a morph operation of the\n * following form is applied:\n *\n * { time: 5.0, strength: 0.25 }\n *\n * This means that, for each animatable property, its state at frame 5.0s will be\n * combined with the state at frame 2.0s with 25% strength. Sliding the strength\n * from 0 to 1 will result in a smooth linar transition between the time 5.0s and\n * 2.0s.\n */\nexport type MorphOperation = {\n  time: number;\n  strength: number;\n};\n\n/** Maximum number of concurrent ops, for performance reasons. */\nexport const MAX_MORPHS = 8;\n\n/**\n * An inter-frame morphing implementation for lottie-web.\n *\n * This class attaches to an existing lottie-web instance and allows the user to\n * manipulate the displayed state of the Lottie so that it does not display only\n * one frame, but an arbitrary linear combination of multiple frames.\n *\n * To use, instantiate the Morphing class and pass it a lottie-web instance.\n * Then, set the ops property to an array of MorphOperation objects. The\n * operations will be performed in sequence, each blending the state left by\n * the previous with some other frame of the animation. @see MorphOperation\n */\nexport class Morphing {\n  public ops: MorphOperation[];\n  private lottie: AnimationItem;\n\n  constructor(lottie: AnimationItem) {\n    this.ops = [];\n    this.lottie = lottie;\n\n    const renderer = lottie.renderer as SvgRenderer;\n    const s = new WeakSet<object>();\n    (renderer?.elements ?? []).forEach((el) => this.attach(el, s));\n  }\n\n  private attachToProp(p: DynamicProp) {\n    const self = this;\n    const s = p as any;\n    if (!p.effectsSequence?.length) {\n      return;\n    }\n\n    const vrs: any[] = [];\n    for (let i = 0; i < MAX_MORPHS; i++) {\n      vrs[i] = {\n        _caching: structuredClone(p._caching),\n        propType: s.propType,\n        offsetTime: s.offsetTime,\n        keyframes: s.keyframes,\n        keyframesMetadata: s.keyframesMetadata,\n        sh: s.sh,\n        pv: structuredClone(s.pv),\n      };\n    }\n\n    p.addEffect(function (val: Lerpable) {\n      const activeMorphs = self.ops.slice(-MAX_MORPHS);\n\n      if (p.interpolateShape && val == undefined) {\n        val = structuredClone(s.pv);\n      }\n\n      for (let i = 0; i < activeMorphs.length; i++) {\n        const morph = activeMorphs[i];\n        const vr = vrs[i];\n\n        if (!vr._caching && p._caching) vr._caching = structuredClone(p._caching);\n        if (!vr.keyframes && s.keyframes) vr.keyframes = s.keyframes;\n        if (!vr.keyframesMetadata && s.keyframesMetadata)\n          vr.keyframesMetadata = s.keyframesMetadata;\n\n        const otherFrame = Math.min(\n          Math.max(Math.round(morph.time * self.lottie.frameRate), 0),\n          self.lottie.getDuration(true) - 1e-5\n        );\n\n        try {\n          vr.offsetTime = p.offsetTime;\n          let otherVal;\n          if (p.interpolateValue) {\n            if (vr._caching.lastFrame >= otherFrame) {\n              vr._caching._lastKeyframeIndex = -1;\n              vr._caching.lastIndex = 0;\n            }\n            otherVal = p.interpolateValue.call(vr, otherFrame, vr._caching);\n            vr.pv = otherVal;\n          } else if (p.interpolateShape) {\n            vr._caching.lastIndex = vr._caching.lastFrame < otherFrame ? vr._caching.lastIndex : 0;\n            p.interpolateShape.call(vr, otherFrame, vr.pv, vr._caching);\n            otherVal = vr.pv;\n          } else {\n            otherVal = 0;\n          }\n\n          // update caching\n          vr._caching.lastFrame = otherFrame;\n\n          val = universalLerp(val, otherVal, morph.strength);\n        } catch (e) {\n          console.warn(`[@lottielab/lottie-player:morph]`, e);\n        }\n      }\n\n      return val;\n    });\n  }\n\n  private attach(el: any, s = new WeakSet<object>()) {\n    if (s.has(el)) {\n      return;\n    }\n\n    if (typeof el === 'object' && el != null) {\n      s.add(el);\n    } else {\n      return;\n    }\n\n    if (el.interpolateShape || el.interpolateValue || el.addEffect || el.effectsSequence) {\n      this.attachToProp(el);\n      return;\n    }\n\n    for (const v of Object.values(el)) {\n      this.attach(v, s);\n    }\n  }\n\n  detach() {\n    // TODO\n  }\n}\n","export type Listener<E> = (event: E) => void;\n\nexport class EventEmitter<E = undefined> {\n  private listeners: Listener<E>[] = [];\n\n  addListener(listener: (event: E) => void) {\n    this.listeners.push(listener);\n  }\n\n  removeListener(listener: (event: E) => void) {\n    this.listeners = this.listeners.filter((l) => l !== listener);\n  }\n\n  hasListeners() {\n    return this.listeners.length > 0;\n  }\n\n  removeAllListeners() {\n    this.listeners = [];\n  }\n\n  emit(event: E) {\n    for (const listener of this.listeners) {\n      listener(event);\n    }\n  }\n}\n","import type { LottieDriver, LottieState } from './driver';\nimport { LottieRenderer } from './renderer';\nimport { Morphing } from './morphing';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport type { LottieJSON, TimeEvent } from '..';\nimport { EventEmitter } from './event';\n\nfunction getRealTime() {\n  return performance?.now() || new Date().getTime();\n}\n\n/**\n * A Lottie renderer based on LottieRenderer, which additionally accepts a\n * LottieDriver. This renderer will call its driver's `advance` method as\n * frames pass, and display the returned state. It additionally supports\n * displaying complex morphed states (@see Morphing)\n *\n * @see LottieRenderer\n * @see LottieDriver\n */\nexport class DrivenLottieRenderer<D extends LottieDriver = LottieDriver> {\n  private renderer: LottieRenderer;\n  private morphing?: Morphing;\n  private _state: LottieState;\n  private _driver?: D;\n  private animationFrame: number | undefined = undefined;\n  private prevTime?: DOMHighResTimeStamp;\n  private prevRealTime?: number;\n  private prevClock?: number;\n  private onFrameBound: FrameRequestCallback = this.onFrame.bind(this);\n\n  public timeMultiplier: number = 1;\n\n  public readonly timeEvent = new EventEmitter<TimeEvent>();\n\n  constructor(init: Node & InnerHTML, src: string | any, driver?: D, preserveAspectRatio?: string) {\n    this.renderer = new LottieRenderer(init, src, preserveAspectRatio);\n    this._state = {\n      time: 0,\n      lottie: this.renderer.animationData,\n    };\n\n    if (driver) {\n      this.animationFrame = requestAnimationFrame(this.onFrameBound);\n      this.driver = driver;\n    }\n  }\n\n  initialize(src: string | any, preserveAspectRatio?: string) {\n    return this.renderer\n      .initialize(src, preserveAspectRatio)\n      .then(() => {\n        if (this.animationFrame === undefined) {\n          this.animationFrame = requestAnimationFrame(this.onFrameBound);\n        }\n        this.advanceToNow();\n        this._state.lottie = this.renderer.animationData;\n        this.refresh();\n      })\n      .catch((e) => {\n        this._state.lottie = undefined;\n      });\n  }\n\n  get state(): LottieState {\n    return this._state;\n  }\n\n  refresh() {\n    this.morphing?.detach();\n    this.morphing = undefined;\n    this.setState(this.state);\n  }\n\n  private setState(newState: LottieState) {\n    const oldTime = this._state.time;\n    const timeChanged = oldTime !== newState.time;\n    this._state = newState;\n    if (timeChanged) {\n      this.renderer.renderFrame(newState.time);\n    }\n\n    if (newState.morphs) {\n      if (!this.morphing && this.renderer.animation) {\n        this.morphing = new Morphing(this.renderer.animation!);\n      }\n\n      if (this.morphing) {\n        const morphChanged =\n          this.morphing.ops.length !== newState.morphs.length ||\n          this.morphing.ops.some((m, i) => {\n            const nm = newState.morphs![i];\n            return !nm || m.time !== nm.time || m.strength !== nm.strength;\n          });\n\n        this.morphing.ops = newState.morphs;\n\n        if (morphChanged) {\n          // Force render\n          //\n          // This unfortunately needs to happen even if triggered earlier because\n          // of timeChanged, since we need to evaluate the morphs and take into\n          // account the new time\n          this.renderer.animation?.renderer?.renderFrame(null);\n        }\n      }\n    } else if (this.morphing && this.morphing.ops.length > 0) {\n      this.morphing.ops = [];\n      // Force render\n      this.renderer.animation?.renderer?.renderFrame(null);\n    }\n  }\n\n  set state(newState: LottieState) {\n    if (this.driver) {\n      throw new Error('Cannot set state directly when using a driver');\n    }\n\n    this.setState(newState);\n  }\n\n  get driver(): D | undefined {\n    return this._driver;\n  }\n\n  set driver(newDriver: D | undefined) {\n    this.prevClock = undefined;\n\n    if (this.animationFrame === undefined && newDriver) {\n      this.animationFrame = requestAnimationFrame(this.onFrameBound);\n    } else if (this.animationFrame !== undefined && !newDriver) {\n      cancelAnimationFrame(this.animationFrame);\n      this.animationFrame = undefined;\n    }\n\n    this._driver = newDriver;\n    if (newDriver?.advance) {\n      this.setState(newDriver.advance(this._state, 0));\n    }\n  }\n\n  /**\n   * Returns a precise clock that reflects real time that has passed since the\n   * first frame was rendered to the last call to the driver's advance() method.\n   *\n   * The clock uses seconds as the unit.\n   */\n  get clock() {\n    if (this.prevTime === undefined) {\n      return 0;\n    }\n\n    // Clock is synced to the DOMHighResTimeStamps provided to the animation\n    // frame callback, but it still allows inter-frame time to pass.\n    //\n    // We do this by tracking the real time elapsed since the previous frame and\n    // adding that time to the DOMHighResTimeStamp of the previous frame.\n    //\n    // When the animation frame callback is called, it will advance the clock\n    // for exactly the delta time between frames, minus any inter-frame\n    // adjustment made. In other words, since\n    //\n    // clock = prevFrameTs + interFrameAdvancesMs\n    //\n    // and an advancement is made for a delta time of\n    //\n    // dt = newClock - prevClock = (newFrameTs + 0) - (prevFrameTs + interFrameAdvancesMs)\n    // dt = (newFrameTs - prevFrameTs) - interFrameAdvancesMs\n\n    const base = this.prevTime;\n    const realNow = getRealTime();\n    const realBase = this.prevRealTime || realNow;\n    return (base + (realNow - realBase)) / 1000;\n  }\n\n  get duration(): number {\n    return this.renderer.duration;\n  }\n\n  get durationInFrames(): number {\n    return this.renderer.durationFrames;\n  }\n\n  get frameRate(): number {\n    return this.renderer.frameRate;\n  }\n\n  get animation(): AnimationItem {\n    return this.renderer.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this.renderer.animationData;\n  }\n\n  get currentTime(): number {\n    return this.renderer.currentTime;\n  }\n\n  get currentFrame(): number {\n    return this.renderer.currentFrame;\n  }\n\n  /**\n   * Advances the internal clock of the driver to the current moment in real time\n   * (as of the call to the method). This is used to inform the driver about the\n   * accurate passage of time between frames when necessary.\n   */\n  advanceToNow() {\n    const clock = this.clock;\n    const diff = this.prevClock !== undefined ? clock - this.prevClock : 0;\n    if (this.driver?.advance && diff > 0) {\n      this._state.lottie = this.renderer.animationData;\n      const elapsed = diff * this.timeMultiplier;\n      this.setState(this.driver.advance(this._state, diff * this.timeMultiplier));\n      this.timeEvent.emit({ playhead: this.currentTime, clock: this.clock, elapsed });\n      this.renderer.renderFrame(this._state.time);\n    }\n\n    this.prevClock = clock;\n  }\n\n  destroy() {\n    if (this.animationFrame) {\n      cancelAnimationFrame(this.animationFrame);\n      this.animationFrame = undefined;\n    }\n    this.morphing?.detach();\n    this.renderer.destroy();\n  }\n\n  private onFrame(time: DOMHighResTimeStamp) {\n    this.prevTime = time;\n    this.prevRealTime = performance?.now() || new Date().getTime();\n    this.advanceToNow();\n\n    this.animationFrame = requestAnimationFrame(this.onFrameBound);\n  }\n}\n","import type { ILottie, LottieJSON } from '..';\nimport type { LottieDriver, LottieState } from './driver';\nimport type { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport { EventEmitter } from './event';\n\nfunction lottieFrameRate(lottie: any) {\n  if (!lottie) return 100;\n  return lottie.fr;\n}\n\nfunction lottieDuration(lottie: any) {\n  if (!lottie) return 0;\n  return (lottie.op - lottie.ip) / lottieFrameRate(lottie);\n}\n\nexport type PlaybackEvent = {\n  type: 'loop' | 'finish';\n  relativeTime: number; // time from [0, elapsed] (see advanceWithEvents()) when the event happened\n};\n\nexport class PlaybackDriver implements LottieDriver, ILottie {\n  public playing: boolean = true;\n  public time: number = 0;\n  public speed: number = 1;\n  public direction: 1 | -1 = 1;\n  public segment?: [number, number];\n\n  private _fps?: number;\n  private _duration?: number;\n  private _loop: boolean | number = true;\n  private _loopsRemaining: number = Infinity;\n\n  public readonly loopEvent = new EventEmitter();\n  public readonly finishEvent = new EventEmitter();\n\n  private get effectiveSegment() {\n    if (this.segment) {\n      return this.segment;\n    } else {\n      return [0, this._duration ?? 0];\n    }\n  }\n\n  private globalTimeToSegmentTime(time: number) {\n    const [from, to] = this.effectiveSegment;\n    return Math.min(Math.max(time - from, 0), to - from);\n  }\n\n  private segmentTimeToGlobalTime(time: number) {\n    const [from] = this.effectiveSegment;\n    return from + time;\n  }\n\n  advance(ls: LottieState, elapsed: number, eventsOut?: PlaybackEvent[]): LottieState {\n    const { lottie } = ls;\n    this._fps = lottieFrameRate(lottie);\n    this._duration = lottieDuration(lottie);\n    if (!this.playing) {\n      return { time: this.time, lottie };\n    }\n\n    const segmentTime = this.globalTimeToSegmentTime(this.time);\n\n    let newTime;\n    newTime = segmentTime + elapsed * this.speed * this.direction;\n\n    const events: PlaybackEvent[] = [];\n    if (this.durationOfSegment > 0) {\n      const loops = Math.abs(Math.floor(newTime / this.durationOfSegment));\n\n      // TODO: Check if this is correct\n      const firstLoop = this.durationOfSegment - segmentTime;\n      for (let i = 0; i < loops; i++) {\n        this._loopsRemaining--;\n        const relativeTime = firstLoop + i * this.durationOfSegment;\n        if (this._loopsRemaining > 0) {\n          events.push({ type: 'loop', relativeTime });\n          if (newTime >= this.durationOfSegment) {\n            newTime -= this.durationOfSegment;\n          } else {\n            newTime += this.durationOfSegment;\n          }\n        } else {\n          events.push({ type: 'finish', relativeTime });\n          newTime = Math.max(0, Math.min(newTime, this.durationOfSegment));\n          this._loopsRemaining = 0;\n          this.playing = false;\n\n          break;\n        }\n      }\n    } else {\n      newTime = 0;\n      events.push({ type: 'loop', relativeTime: 0 });\n    }\n\n    const globalTime = this.segmentTimeToGlobalTime(newTime);\n    this.time = globalTime;\n\n    if (events.length > 0) {\n      if (eventsOut != undefined) {\n        eventsOut.push(...events);\n      }\n\n      for (const event of events) {\n        if (event.type === 'loop') {\n          this.loopEvent.emit(undefined);\n        } else if (event.type === 'finish') {\n          this.finishEvent.emit(undefined);\n        }\n      }\n    }\n\n    return { time: globalTime, lottie };\n  }\n\n  play() {\n    this.playing = true;\n  }\n\n  pause() {\n    this.playing = false;\n  }\n\n  stop() {\n    this.playing = false;\n    this.seek(0);\n    this.loop = this._loop; // reset loop count\n  }\n\n  seek(time: number) {\n    this.time = time;\n  }\n\n  seekToFrame(frame: number) {\n    this.time = frame / this.frameRate;\n  }\n\n  loopBetween(start: number, end: number) {\n    this.segment = [start, end];\n  }\n\n  loopBetweenFrames(start: number, end: number) {\n    this.segment = [start / this.frameRate, end / this.frameRate];\n  }\n\n  get loop() {\n    return this._loop;\n  }\n\n  set loop(newLoop: number | boolean) {\n    this._loop = newLoop;\n    if (typeof newLoop === 'number') {\n      this._loopsRemaining = newLoop;\n    } else {\n      if (newLoop) {\n        this._loopsRemaining = Infinity;\n      } else {\n        this._loopsRemaining = 1;\n      }\n    }\n  }\n\n  get currentTime() {\n    return this.time;\n  }\n\n  get currentFrame() {\n    return this.time * this.frameRate;\n  }\n\n  get timeInSegment() {\n    return this.globalTimeToSegmentTime(this.time);\n  }\n\n  set timeInSegment(time: number) {\n    this.time = this.segmentTimeToGlobalTime(time);\n  }\n\n  get frameInSegment() {\n    return this.timeInSegment * this.frameRate;\n  }\n\n  get frameRate() {\n    return this._fps ?? 100;\n  }\n\n  get duration() {\n    return this._duration ?? 0;\n  }\n\n  get durationFrames() {\n    return this.duration * this.frameRate;\n  }\n\n  get durationOfSegment() {\n    const [from, to] = this.effectiveSegment;\n    return to - from;\n  }\n\n  get animation(): AnimationItem {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  get animationData(): LottieJSON {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  toInteractive() {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  toPlayback() {}\n\n  on(event: string, listener: any) {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  off(event: string, listener: any) {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n}\n","export type InteractiveEventType =\n  | 'click'\n  | 'mouseDown'\n  | 'mouseUp'\n  | 'mouseEnter'\n  | 'mouseLeave'\n  | 'finish'\n  | 'custom';\n\nexport type InteractiveEvent = { event: InteractiveEventType } & (\n  | { event: 'click' | 'mouseDown' | 'mouseUp' | 'mouseEnter' | 'mouseLeave'; target?: string }\n  | { event: 'finish' }\n  | { event: 'custom'; name: string }\n);\n\n/**\n * A string representation of an interactive event. Can be one of the following:\n * - 'click', 'mouseDown', 'mouseUp', 'mouseEnter', 'mouseLeave': when the user interacts with the lottie\n * - 'finish': when the animation of this state finishes (after all the looping has completed, if any)\n * - 'custom:<event-name>': a custom, user-defined event with the name\n * '<event-name>', manually triggerable from code using\n * LottielabInteractivity.trigger.\n *\n * By appending a `:<class>` suffix, you can target specific layers for the mouse\n * events, where `<class>` is the CSS class of the layer in the Lottie JSON, see\n * the \"cl\" member of the Lottie JSON. For example, `click:myButton` will only\n * trigger the transition if the user clicks on a layer with the class (`cl`\n * property in the JSON) of `myButton`.\n */\nexport type InteractiveEventStr = InteractiveEventType | string;\n\nexport function eventToString(e: InteractiveEvent): InteractiveEventStr {\n  switch (e.event) {\n    case 'finish':\n      return 'finish';\n\n    case 'click':\n    case 'mouseDown':\n    case 'mouseUp':\n    case 'mouseEnter':\n    case 'mouseLeave':\n      if (e.target) {\n        return `${e.event}:${e.target}`;\n      } else {\n        return e.event;\n      }\n\n    case 'custom':\n      return 'custom:' + e.name;\n  }\n}\n\nexport type State = {\n  /**\n   * Which segment of the animation to play when this state is active. Accepts a\n   * [start, end] array of times, in seconds, from the beginning of the\n   * animation.\n   */\n  segment: [number, number];\n  /** Speed of the animation in this state. 1.0 (normal speed) is the default. */\n  speed?: number | Formula;\n  /**\n   * Direction of the animation in this state. Can be 'forward' or 'reverse'.\n   * 'forward' is the default.\n   */\n  direction?: 'forward' | 'reverse';\n  /**\n   * Whether to loop the animation when in this state, and/or how many times. If\n   * set to true, loops indefinitely. A value of false means the same as 1 (no\n   * looping).\n   */\n  loop?: boolean | number;\n  /**\n   * If set, the state will end after this many seconds, regardless of the\n   * looping or playback state, and a 'finish' event will be triggered. If this\n   * is not provided, the 'finish' event will trigger at the end of the segment\n   * if looping is disabled, or at the end of the last loop if looping is\n   * enabled. If no 'finish' transition is present, playback will pause.\n   */\n  duration?: number;\n\n  /**\n   * If set, activates morphing of this state with another state. Morphing means\n   * that there is another state running \"in parallel\", and the final animation\n   * can be smoothly morphed between this state and the other state. When\n   * morphing is active, you can map the \"morph strength\" value to some user\n   * input, like the mouse position, to achieve various effects.\n   */\n  morphing?: {\n    /** Name of the other state to morph with. */\n    otherState: string;\n    /**\n     * How to sync the playhead of this state to the playhead of the other state.\n     * Can be one of the following:\n     *\n     * - 'proportional': the playhead of the other state will be at the\n     *   same relative position (percentage) in the other as in this segment. For\n     *   example, if this state's segment is 0s-1s and the other state's segment is\n     *   1s-3s, and this state is at 0.5s (50%), the other state will be at 1.5s\n     *   (also 50%). In this case, states will always be in sync but the other\n     *   state might be playing at a different speed if the segment lengths differ.\n     * - 'wrap': means that the playheads of both states will start at the beginning\n     *   of their segments, but will be allowed to proceed independently and loop\n     *   around. In this case, both states will be playing at the same speed, but\n     *   they might go out of sync with each other if one's segment's length is not\n     *   an exact multiple of the other's.\n     * - 'clamp': means that the playheads of both states will start at the same\n     *   absolute time, but the second one will get clamped to the end of its segment.\n     *   The playheads will be in sync, but the second state will stop if its\n     *   segment is shorter than the first state's.\n     */\n    timeRemap?: 'proportional' | 'wrap' | 'clamp';\n\n    /**\n     * A formula describing the morph strength as a value between 0 and 1 where 0 means\n     * behave as if there is no morphing, 1 means display the other state fully, 0.5\n     * means to morph evenly between this and the other state, etc.\n     */\n    strength: number | Formula;\n  };\n\n  /**\n   * Defines the transitions to other states. The key is the name of the event,\n   * and the value is the details about the transition.\n   *\n   * Available events are:\n   * - 'click': when the user clicks on the lottie\n   * - 'mouseDown': when the user presses the mouse button\n   * - 'mouseUp': when the user releases the mouse button\n   * - 'mouseEnter': when the user's mouse enters the lottie\n   * - 'mouseLeave': when the user's mouse leaves the lottie\n   * - 'finish': when the animation of this state finishes (after all the\n   *   looping has completed, if any)\n   *\n   * Optionally, for all events except 'finish', the event can have a `:<target>`\n   * suffix which targets specific layers defined by a CSS class, see the `.cl`\n   * member of the Lottie JSON.\n   *\n   * For example, if the lottie JSON defines a layer with its `cl` property set\n   * to `myButton`, you can define a transition that should only happen when this\n   * layer is clicked by setting the event to `click:myButton`.\n   */\n  on?: Partial<Record<InteractiveEventStr, Transition>>;\n\n  /**\n   * Allows the playhead position in this state to be mapped to some user\n   * input, possibly via a formula. This is sometimes called \"playback control\".\n   * The result of the provided formula will be applied as a 0-1 progress within\n   * the segment of this state.\n   */\n  playhead?: Formula;\n};\n\nexport type TransitionProperties = {\n  /**\n   * Duration of the transition to the new state. If 0 or not provided, the\n   * transition is instant. Otherwise, the state will be smoothly morphed to the\n   * other state.\n   */\n  duration?: number;\n  /**\n   * Describes the initial playhead position in the new state after switching.\n   * Can be one of the following:\n   *\n   * - 'start': start from the beginning of the new state's segment\n   * - 'end': start at the end of the new state's segment\n   * - 'proportional': start at the same relative position of the playhead (by\n   *   percentage/progress) as the current time. For example, if the current state\n   *   is at 25% of its segment, the new state will start at 25% of its segment.\n   * - 'wrap': the new state will start at the same absolute time as the current\n   *   one, wrapped around. This means that if the current state is at 0.75s and\n   *   the new state has a 2 second long segment, it will also start at 0.75s.\n   *   However, if the new state has a 0.5s long segment, it will start at 0.25s\n   *   (wrapping around as if it looped).\n   * - 'clamp': the new state will start at the same absolute time as the current\n   *   one, but simply clamped to the new state's segment. This means that if the\n   *   new state has a segment 0.5s long, a 0.25s playhead will end up the same\n   *   (at 0.25s), but a 1.0s playhead will end up at 0.5s (clamped).\n   */\n  startAt?: 'start' | 'end' | 'proportional' | 'wrap' | 'clamp';\n  /**\n   * Easing function to use for the transition. Has an effect only if `duration`\n   * is set (otherwise, the transition is instant). If not provided, a linear\n   * easing function is used. Accepts a cubic Bezier easing in a similar format\n   * as Lottie (two control points).\n   */\n  easing?: BezierEasing;\n};\n\nexport type Transition = {\n  /** Name of the state to switch to. */\n  goTo: string;\n} & TransitionProperties;\n\n/** Lottie-like Bezier easing with 2 control points. */\nexport type BezierEasing = { i: { x: number; y: number }; o: { x: number; y: number } };\n\n/**\n * A simple number or an expression whose result will be used to control the provided\n * variable. The expression can use the standard mathematical functions and constants\n * from the JavaScript Math module (without the `Math.` prefix), and can use a few built-in\n * variables which are mapped to the current user input state, or custom\n * variables provided by the user.\n *\n * The formula can be as simple as a single variable to map the user input\n * directly, or a complex expression that remaps values and integrates multiple\n * inputs for a complex effect.\n *\n * The variables that can be used in the formula are:\n * - `time`: Time in seconds since this state started.\n * - `time.abs`: Time in seconds since the animation first started.\n * - `playhead`: The current playhead position in this state, in seconds.\n * - `playhead.progress`: The current playhead position in this state, as a\n *    value from 0 to 1 within the segment (0 = start, 1 = end).\n * - `playhead.abs`: Global position of the playhead in seconds.\n * - `mouse.x`, `mouse.y`: the current mouse position, relative to the top-left\n *   of the lottie, in pixels\n * - `mouse.progress.x`, `mouse.progress.y`: the current mouse position, as a\n *   value from 0 to 1 within the lottie's bounds (0 = left/top, 1 = right/bottom)\n * - `mouse.abs.x`, `mouse.abs.y`: the current mouse position, relative to the top-left\n *   of the whole viewport rather than the lottie itself\n * - `mouse.buttons.left`, `mouse.buttons.right`, `mouse.buttons.middle`: whether the left,\n *    right, or middle mouse buttons are currently pressed\n *\n * All other variable names are considered custom variables and can be freely\n * used in formulas, provided that `LottielabInteractivity.inputs.set()` is\n * called by the user to set their values.\n */\nexport type Formula = string;\n\n/**\n * A definition of states and transitions conforming to Lottielab Interactivity.\n *\n * This object is added to the lottie in `.metadata.lottielabInteractivity`.\n */\nexport type LottielabInteractivityDef = {\n  __version: 'v1';\n\n  /** List of states in the animation by their names. */\n  states: Record<string, State>;\n  /** Name of the state to start the animation in. */\n  initialState: string;\n};\n","export const enum NodeType {\n  NUMBER,\n  IDENTIFIER,\n  UNARY_OPERATOR,\n  BINARY_OPERATOR,\n  CONDITIONAL_OPERATOR,\n  FUNCTION_CALL,\n}\n\nexport type Node =\n  | {\n      type: NodeType.NUMBER;\n      value: number;\n    }\n  | {\n      type: NodeType.IDENTIFIER;\n      name: string;\n    }\n  | {\n      type: NodeType.UNARY_OPERATOR;\n      operator: '+' | '-' | '!';\n      operand: Node;\n    }\n  | {\n      type: NodeType.BINARY_OPERATOR;\n      operator: '+' | '-' | '*' | '/' | '^' | '<' | '<=' | '>' | '>=' | '==' | '&&' | '||';\n      left: Node;\n      right: Node;\n    }\n  | {\n      type: NodeType.CONDITIONAL_OPERATOR;\n      condition: Node;\n      thenBranch: Node;\n      elseBranch: Node;\n    }\n  | {\n      type: NodeType.FUNCTION_CALL;\n      name: string;\n      operands: Node[];\n    };\n\nconst enum Precedence {\n  MINIMUM,\n  SEPARATOR,\n  LITERAL,\n  CONDITIONAL,\n  LOGICAL_OR,\n  LOGICAL_AND,\n  COMPARISON,\n  ADDITIVE,\n  MULTIPLICATIVE,\n  POWER,\n  LOGICAL_NEGATION,\n  BRACKET,\n}\n\ninterface Parser {\n  peek: () => Token;\n  pop: () => Token;\n  parse: (minPrecedence: number) => Node;\n}\n\ntype TokenPrimitive = {\n  name: string;\n  lbp: number;\n  detect?: (s: string) => boolean;\n  nud?: (p: Parser, token: Token) => Node;\n  led?: (p: Parser, left: Node, token: Token) => Node;\n};\n\ntype Token = TokenPrimitive & { value: string; position: number };\n\nfunction parseError(token: Token): never {\n  throw new Error(`Unexpected ${token.name} at position ${token.position}.`);\n}\n\nconst TokenPrimitives = (() => {\n  const tokenPrimitives: TokenPrimitive[] = [\n    {\n      name: 'number',\n      lbp: Precedence.LITERAL,\n      detect: (s: string) => /^([1-9]\\d*|0)(\\.\\d*)?$/.test(s),\n      nud: (_: Parser, token: Token) => ({\n        type: NodeType.NUMBER,\n        value: parseFloat(token.value),\n      }),\n    },\n    {\n      name: 'identifier',\n      lbp: Precedence.LITERAL,\n      detect: (s: string) => /^[_a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z]+)*$/.test(s),\n      nud: (_: Parser, token: Token) => ({\n        type: NodeType.IDENTIFIER,\n        name: token.value,\n      }),\n    },\n    {\n      // right associative\n      name: '^',\n      lbp: Precedence.POWER,\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator: '^',\n        left,\n        right: p.parse(Precedence.POWER - 1),\n      }),\n    },\n    {\n      // unary only\n      name: '!',\n      lbp: Precedence.LOGICAL_NEGATION,\n      nud: (p: Parser) => ({\n        type: NodeType.UNARY_OPERATOR,\n        operator: '!',\n        operand: p.parse(Precedence.LOGICAL_NEGATION),\n      }),\n    },\n    {\n      name: 'conditional-operator',\n      detect: (s: string) => s == '?',\n      lbp: Precedence.CONDITIONAL,\n      led: (p: Parser, left: Node) => {\n        const thenBranch = p.parse(Precedence.CONDITIONAL - 1);\n        const nextToken = p.pop();\n        if (nextToken.name != ':') parseError(nextToken);\n        const elseBranch = p.parse(Precedence.CONDITIONAL - 1);\n        return {\n          type: NodeType.CONDITIONAL_OPERATOR,\n          condition: left,\n          thenBranch,\n          elseBranch,\n        };\n      },\n    },\n    {\n      name: '(',\n      lbp: Precedence.BRACKET,\n      nud: (p: Parser) => {\n        const expression = p.parse(Precedence.SEPARATOR);\n        const nextToken = p.pop();\n        if (nextToken.name != ')') parseError(nextToken);\n        return expression;\n      },\n      led: (p: Parser, left: Node, token: Token) => {\n        if (left.type != NodeType.IDENTIFIER) parseError(token);\n\n        const operands: Node[] = [];\n        if (p.peek().name == ')') {\n          p.pop();\n        } else {\n          while (true) {\n            operands.push(p.parse(Precedence.SEPARATOR));\n\n            const nextToken = p.pop();\n            if (nextToken.name == ')') break;\n            if (nextToken.name == ',') continue;\n            parseError(nextToken);\n          }\n        }\n\n        return { type: NodeType.FUNCTION_CALL, name: left.name, operands };\n      },\n    },\n    {\n      name: 'end of input',\n      lbp: Precedence.MINIMUM,\n    },\n  ];\n\n  for (const operator of ['+', '-'] as const) {\n    tokenPrimitives.push({\n      name: operator,\n      lbp: Precedence.ADDITIVE,\n      nud: (p: Parser) => ({\n        type: NodeType.UNARY_OPERATOR,\n        operator,\n        operand: p.parse(Precedence.ADDITIVE),\n      }),\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator,\n        left,\n        right: p.parse(Precedence.ADDITIVE),\n      }),\n    });\n  }\n\n  const binaryOperators = [\n    ['*', Precedence.MULTIPLICATIVE],\n    ['/', Precedence.MULTIPLICATIVE],\n    ['<', Precedence.COMPARISON],\n    ['<=', Precedence.COMPARISON],\n    ['>', Precedence.COMPARISON],\n    ['>=', Precedence.COMPARISON],\n    ['==', Precedence.COMPARISON],\n    ['&&', Precedence.LOGICAL_AND],\n    ['||', Precedence.LOGICAL_OR],\n  ] as const;\n  for (const [operator, precedence] of binaryOperators) {\n    tokenPrimitives.push({\n      name: operator,\n      lbp: precedence,\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator,\n        left,\n        right: p.parse(precedence),\n      }),\n    });\n  }\n\n  for (const separator of [',', ')', ':'] as const) {\n    tokenPrimitives.push({\n      name: separator,\n      lbp: Precedence.SEPARATOR,\n    });\n  }\n\n  return tokenPrimitives;\n})();\n\nfunction tokenize(input: string): Token[] {\n  const isWhitespace = /^\\s*$/;\n  const segments = input.split(/([+\\-*/^(),?:!]|<=|>=|==|>(?!=)|<(?!=)|\\|\\||&&|\\s+)/g);\n  segments.push('end of input');\n\n  let position = 0;\n  const tokens: Token[] = [];\n  for (const segment of segments) {\n    const detected = TokenPrimitives.some((tokenPrimitive) => {\n      const detect = tokenPrimitive.detect ?? ((s: string) => s == tokenPrimitive.name);\n      if (detect(segment)) {\n        tokens.push({ ...tokenPrimitive, value: segment, position });\n        return true;\n      }\n    });\n\n    if (!detected && !isWhitespace.test(segment)) {\n      throw new Error(`Invalid token ${segment} at position ${position}`);\n    }\n\n    position += segment.length;\n  }\n\n  return tokens;\n}\n\nexport function parse(input: string) {\n  const tokens = tokenize(input);\n\n  let tokenIndex = 0;\n\n  const parser: Parser = {\n    peek: () => tokens[tokenIndex],\n    pop: () => tokens[tokenIndex++],\n    parse: (minPrecedence) => {\n      let currentToken = parser.pop();\n\n      if (!currentToken.nud) parseError(currentToken);\n      let left = currentToken.nud(parser, currentToken);\n\n      while (parser.peek().lbp > minPrecedence) {\n        currentToken = parser.pop();\n\n        if (!currentToken.led) parseError(currentToken);\n        left = currentToken.led(parser, left, currentToken);\n      }\n\n      return left;\n    },\n  };\n\n  return parser.parse(Precedence.MINIMUM);\n}\n","import { Node, NodeType } from './parser';\n\nexport type SymbolMap = {\n  [name in string]: number | boolean | ((...args: any) => number | boolean);\n};\n\n// @ts-ignore For now only the members of Math are built-in symbols.\nconst BuiltinSymbols: SymbolMap = Math;\n\nfunction undefinedSymbol(name: string): never {\n  throw new Error(`Symbol ${name} is not defined and not a built in symbol.`);\n}\n\ntype UnaryOperator = (Node & { type: NodeType.UNARY_OPERATOR })['operator'];\ntype BinaryOperator = (Node & { type: NodeType.BINARY_OPERATOR })['operator'];\n\nfunction evaluateUnary(operator: UnaryOperator, operand: number | boolean): number | boolean {\n  switch (operator) {\n    case '+':\n      return +operand;\n    case '-':\n      return -operand;\n    case '!':\n      return !operand;\n  }\n}\n\nfunction evaluateBinary(\n  operator: BinaryOperator,\n  left: number | boolean,\n  right: number | boolean\n): number | boolean {\n  switch (operator) {\n    case '+':\n      // @ts-ignore\n      return left + right;\n    case '-':\n      // @ts-ignore\n      return left - right;\n    case '*':\n      // @ts-ignore\n      return left * right;\n    case '/':\n      // @ts-ignore\n      return left / right;\n    case '^':\n      // @ts-ignore\n      return Math.pow(left, right);\n    case '<':\n      return left < right;\n    case '<=':\n      return left <= right;\n    case '>':\n      return left > right;\n    case '>=':\n      return left >= right;\n    case '==':\n      return left == right;\n    case '&&':\n      return left && right;\n    case '||':\n      return left || right;\n  }\n}\n\nexport function evaluate(expression: Node, userDefinedSymbols: SymbolMap): number | boolean {\n  switch (expression.type) {\n    case NodeType.NUMBER: {\n      return expression.value;\n    }\n\n    case NodeType.IDENTIFIER: {\n      const name = expression.name;\n      const value = userDefinedSymbols[name] ?? BuiltinSymbols[name];\n      if (value == undefined) undefinedSymbol(name);\n\n      if (typeof value != 'boolean' && typeof value != 'number') {\n        throw new Error(`Symbol ${name} is a function and must be used in a function call.`);\n      }\n\n      return value;\n    }\n\n    case NodeType.UNARY_OPERATOR: {\n      const operand = evaluate(expression.operand, userDefinedSymbols);\n      return evaluateUnary(expression.operator, operand);\n    }\n\n    case NodeType.BINARY_OPERATOR: {\n      const left = evaluate(expression.left, userDefinedSymbols);\n      const right = evaluate(expression.right, userDefinedSymbols);\n      return evaluateBinary(expression.operator, left, right);\n    }\n\n    case NodeType.CONDITIONAL_OPERATOR: {\n      const condition = evaluate(expression.condition, userDefinedSymbols);\n      return condition\n        ? evaluate(expression.thenBranch, userDefinedSymbols)\n        : evaluate(expression.elseBranch, userDefinedSymbols);\n    }\n\n    case NodeType.FUNCTION_CALL: {\n      const name = expression.name;\n      const value = userDefinedSymbols[name] ?? BuiltinSymbols[name];\n      if (value == undefined) undefinedSymbol(name);\n\n      if (typeof value != 'function') {\n        throw new Error(`Symbol ${name} has value ${value} and is not callable.`);\n      }\n\n      if (value.length != expression.operands.length) {\n        throw new Error(\n          `Expected ${value.length} operands for ${name}, received ${expression.operands.length}`\n        );\n      }\n\n      const operands = expression.operands.map((operand) => evaluate(operand, userDefinedSymbols));\n\n      return value.apply(null, operands);\n    }\n  }\n}\n","export type Point = { x: number; y: number };\n\nexport type BuiltinVariables = {\n  // Time in seconds since the animation first started.\n  time: number;\n  // Time in seconds that passed between the previous and the current frames\n  'time.diff': number;\n  // The current playhead position in this state, in seconds.\n  playhead: number;\n  // The current playhead position in this state, as a value from 0 to 1\n  // within the segment (0 = start, 1 = end).\n  'playhead.progress': number;\n  // Global position of the playhead in seconds.\n  'playhead.abs': number;\n  // The current mouse position, relative to the top-left of the lottie, in pixels\n  'mouse.x': number;\n  'mouse.y': number;\n  // The current mouse position, as a value from 0 to 1 within the lottie's bounds\n  // (0 = left/top, 1 = right/bottom)\n  'mouse.progress.x': number;\n  'mouse.progress.y': number;\n  // The current mouse position, relative to the top-left of the whole viewport rather\n  // than the lottie itself\n  'mouse.abs.x': number;\n  'mouse.abs.y': number;\n  // Whether the left, right, or middle mouse buttons are currently pressed\n  'mouse.buttons.left': boolean;\n  'mouse.buttons.right': boolean;\n  'mouse.buttons.middle': boolean;\n};\n\nexport const defaultValues: BuiltinVariables = {\n  time: 0,\n  'time.diff': 0,\n  playhead: 0,\n  'playhead.progress': 0,\n  'playhead.abs': 0,\n  'mouse.x': 0,\n  'mouse.y': 0,\n  'mouse.progress.x': 0,\n  'mouse.progress.y': 0,\n  'mouse.abs.x': 0,\n  'mouse.abs.y': 0,\n  'mouse.buttons.left': false,\n  'mouse.buttons.right': false,\n  'mouse.buttons.middle': false,\n};\n\nexport type UserVariables = Record<string, number | boolean | Point>;\n\nexport type Variables = Record<string, number | boolean>;\n\nexport function isValidVariableName(name: string): boolean {\n  return /^[a-zA-Z_][a-zA-Z0-9_.]*$/.test(name);\n}\n\nexport function mergeVariables(builtin: BuiltinVariables, user: UserVariables): Variables {\n  const vars: Variables = { ...builtin };\n  for (const key in user) {\n    if (!isValidVariableName(key)) {\n      continue;\n    }\n\n    const val = user[key];\n    if (\n      typeof val === 'object' &&\n      'x' in val &&\n      'y' in val &&\n      typeof val.x === 'number' &&\n      typeof val.y === 'number'\n    ) {\n      vars[key + '.x'] = val.x;\n      vars[key + '.y'] = val.y;\n    } else if (typeof val === 'number' || typeof val === 'boolean') {\n      vars[key] = val;\n    } else {\n      vars[key] = 0;\n    }\n  }\n\n  return vars;\n}\n","import * as def from './definition';\nimport * as bezier from './bezier';\nimport type { LottieDriver, LottieState } from '../driver';\nimport { PlaybackDriver, PlaybackEvent } from '../playback';\nimport { parse, evaluate } from '../expressions';\nimport {\n  BuiltinVariables,\n  UserVariables,\n  Variables,\n  defaultValues,\n  mergeVariables,\n} from './variables';\nimport { MorphOperation, MAX_MORPHS } from '../morphing';\nimport type { InteractiveEventHandler } from './events';\nimport { EventEmitter } from '../event';\n\nexport type StateTransitionEvent = {\n  from: def.State;\n  to: def.State;\n  transition: def.TransitionProperties;\n};\n\nfunction easingToBezier(easing: def.BezierEasing): bezier.CubicBezier {\n  return {\n    start: { x: 0, y: 0 },\n    end: { x: 1, y: 1 },\n    controlPoint1: easing.o,\n    controlPoint2: easing.i,\n  };\n}\n\nexport function ease(easing: def.BezierEasing, t: number): number {\n  return bezier.evaluate(easingToBezier(easing), t).y;\n}\n\nexport type MorphingSetup = {\n  other: StateState;\n  strength: number | ((variables: Variables) => number);\n  timeRemap?: 'proportional' | 'wrap' | 'clamp';\n};\n\ntype StateState = {\n  type: 'state';\n  def: def.State;\n  playback: StatePlayback;\n  morphing?: MorphingSetup;\n  remainingDuration?: number;\n};\n\ntype TransitionState = {\n  type: 'transition';\n  def: def.TransitionProperties;\n  prev: StateState | TransitionState;\n  from: def.State;\n  next?: StateState;\n  progress: number;\n};\n\nfunction formulaToFunction(\n  formula: string,\n  defaultValue: number\n): (variables: Variables) => number {\n  try {\n    const parsedFormula = parse(formula);\n    return (variables: Variables) => {\n      try {\n        return +evaluate(parsedFormula, variables);\n      } catch (e) {\n        return defaultValue;\n      }\n    };\n  } catch (e) {\n    return () => defaultValue;\n  }\n}\n\ntype StatePlayback = {\n  driver: PlaybackDriver;\n  playheadControl?: (variables: Variables) => number;\n  speedControl?: (variables: Variables) => number;\n};\n\nfunction playbackFor(state: def.State): StatePlayback {\n  const driver = new PlaybackDriver();\n  driver.segment = state.segment;\n  driver.loop = state.loop ?? true;\n  if (state.direction) driver.direction = state.direction === 'forward' ? 1 : -1;\n\n  const pb: StatePlayback = { driver };\n  if (typeof state.speed === 'number') {\n    driver.speed = state.speed;\n  } else if (typeof state.speed == 'string') {\n    pb.speedControl = formulaToFunction(state.speed, 1);\n  }\n\n  if (state.playhead) {\n    pb.playheadControl = formulaToFunction(state.playhead, 0);\n  }\n\n  return pb;\n}\n\nfunction advanceStatePlayback(\n  state: StateState,\n  ls: LottieState,\n  elapsed: number,\n  clock: number,\n  variables: Variables,\n  eventsOut?: PlaybackEvent[]\n) {\n  const pb = state.playback;\n  const newVars = {\n    ...variables,\n    time: clock,\n    'time.diff': elapsed,\n    playhead: pb.driver.timeInSegment,\n    'playhead.progress':\n      pb.driver.durationOfSegment > 0 ? pb.driver.timeInSegment / pb.driver.durationOfSegment : 0,\n    'playhead.abs': pb.driver.currentTime,\n  };\n  if (pb.speedControl) {\n    pb.driver.speed = pb.speedControl(variables);\n  }\n\n  const newLs = pb.driver.advance(ls, elapsed, eventsOut);\n  if (pb.playheadControl) {\n    newLs.time =\n      pb.playheadControl(newVars) * pb.driver.durationOfSegment + (pb.driver.segment?.[0] ?? 0);\n  }\n\n  const morph = calculateMorphForState(state, newLs, variables);\n  if (morph) {\n    newLs.morphs = [morph];\n  }\n\n  return newLs;\n}\n\nfunction proportionalTimeRemap(\n  time: number,\n  from: [number, number],\n  onto: [number, number],\n  speed = 1\n) {\n  const fromDuration = from[1] - from[0];\n  const ontoDuration = onto[1] - onto[0];\n  let progress = fromDuration > 0 ? (time - from[0]) / fromDuration : 0;\n  progress = Math.min(1, Math.max(0, progress)) * speed;\n  return onto[0] + progress * ontoDuration;\n}\n\nfunction wrapTimeRemap(time: number, from: [number, number], onto: [number, number]) {\n  const duration = onto[1] - onto[0];\n  const t = time - from[0];\n  const val = onto[0] + (duration > 0 ? t % (onto[1] - onto[0]) : 0);\n  return Math.min(onto[1], Math.max(onto[0], val));\n}\n\nfunction clampTimeRemap(time: number, from: [number, number], onto: [number, number]) {\n  const val = time - from[0] + onto[0];\n  return Math.min(onto[1], Math.max(onto[0], val));\n}\n\nfunction calculateMorphForState(\n  state: StateState,\n  ls: LottieState,\n  variables: Variables\n): MorphOperation | undefined {\n  if (!state.morphing) return undefined;\n  const timeRemap = state.def.morphing?.timeRemap ?? 'proportional';\n  let newTime;\n  const currTime = ls.morphs ? ls.morphs[ls.morphs.length - 1].time : ls.time;\n  switch (timeRemap) {\n    case 'proportional':\n      newTime = proportionalTimeRemap(\n        currTime,\n        state.def.segment,\n        state.morphing.other.def.segment\n      );\n      break;\n    case 'wrap':\n      newTime = wrapTimeRemap(currTime, state.def.segment, state.morphing.other.def.segment);\n      break;\n    case 'clamp':\n      newTime = clampTimeRemap(currTime, state.def.segment, state.morphing.other.def.segment);\n      break;\n    default:\n      console.warn(`[@lottielab/lottie-player:interactive] Unknown timeRemap: ${timeRemap}`);\n      return undefined;\n  }\n\n  return {\n    time: newTime,\n    strength:\n      typeof state.morphing.strength === 'number'\n        ? state.morphing.strength\n        : state.morphing.strength(variables),\n  };\n}\n\nfunction applyTransition(\n  ls: LottieState,\n  transition: TransitionState,\n  elapsed: number,\n  clock: number,\n  variables: Variables,\n  advanceTransition: boolean = true,\n  remainingMorphs: number = MAX_MORPHS\n): LottieState {\n  let newLs = transition.next\n    ? advanceStatePlayback(transition.next, ls, elapsed, clock, variables)\n    : ls;\n  if (transition && transition.def.duration) {\n    let prevLs;\n    if (transition.prev.type === 'state') {\n      prevLs = advanceStatePlayback(transition.prev, ls, elapsed, clock, variables);\n    } else {\n      prevLs = applyTransition(\n        ls,\n        transition.prev,\n        elapsed,\n        clock,\n        variables,\n        false,\n        remainingMorphs - 1\n      );\n    }\n\n    if (advanceTransition) {\n      transition.progress += elapsed / transition.def.duration;\n    }\n    transition.progress = Math.min(1, transition.progress);\n\n    let alpha = transition.progress;\n    if (transition.def.easing) {\n      alpha = ease(transition.def.easing, alpha);\n    }\n\n    if (alpha === 1) {\n      newLs = { ...prevLs, morphs: ls.morphs, time: newLs.time };\n    } else {\n      if (remainingMorphs > 0) {\n        const newTime = newLs.time;\n        newLs = { ...prevLs };\n        newLs.morphs = (newLs.morphs ?? []).concat([{ time: newTime, strength: alpha }]);\n        if (ls.morphs && ls.morphs.length > 0) {\n          // This used to express (1-a)*prev+a*new, but now we need new=(1-b)*n1+b*n2\n          // This is not expressible in the general case as a composition of\n          // morphs\n          //\n          // In this case, we hack around it by just assuming that the initial\n          // time is the most \"important\"\n          //\n          // This can be solved in a much more elegant/general way by simply\n          // changing the representation that the morphing driver accepts to be a\n          // list of frames and coefficients rather than a composition of linear\n          // combinations\n          newLs.morphs = [\n            ...ls.morphs,\n            { time: newLs.time, strength: 1.0 - newLs.morphs[0].strength },\n          ];\n          newLs.time = ls.time;\n        }\n      } else {\n        // Don't create any new morphs, just flatten\n        newLs = { ...prevLs, time: alpha > 0.5 ? newLs.time : prevLs.time };\n      }\n    }\n  } else if (!transition.def.duration) {\n    console.warn(\n      '[@lottielab/lottie-player:interactive] Transition duration of 0/unset is not expected here'\n    );\n  }\n\n  return newLs;\n}\n\nexport class InteractiveDriver implements LottieDriver, InteractiveEventHandler {\n  private _definition: def.LottielabInteractivityDef;\n  private builtinVariables: BuiltinVariables = { ...defaultValues };\n  private userVariables: UserVariables = {};\n  private variables: Variables = {};\n  private clock: number = 0;\n\n  private state!: StateState;\n  private transition?: TransitionState;\n\n  public readonly transitionStartEvent = new EventEmitter<StateTransitionEvent>();\n  public readonly transitionEndEvent = new EventEmitter<StateTransitionEvent>();\n\n  constructor(definition: def.LottielabInteractivityDef) {\n    this._definition = definition;\n    const initialState = definition.states[definition.initialState];\n    if (!initialState) {\n      throw new Error(`Initial state ${definition.initialState} does not exist`);\n    }\n\n    this.enterState(initialState);\n  }\n\n  private setupMorphingForCurrentState(opts?: { force: boolean }) {\n    if (opts?.force) this.state.morphing = undefined;\n\n    const sd = this.state.def;\n    if (sd.morphing && !this.state.morphing) {\n      const otherState = this._definition.states[sd.morphing.otherState];\n      if (otherState) {\n        this.state.morphing = {\n          other: {\n            type: 'state',\n            def: otherState,\n            playback: playbackFor(otherState),\n          },\n          strength:\n            typeof sd.morphing.strength === 'number'\n              ? sd.morphing.strength\n              : formulaToFunction(sd.morphing.strength, 0),\n        };\n      } else {\n        console.warn(\n          `[@lottielab/lottie-player:interactivity] State '${sd.morphing.otherState}' to morph with does not exist`\n        );\n      }\n    } else if (!sd.morphing && this.state.morphing) {\n      this.state.morphing = undefined;\n    }\n  }\n\n  private enterState(state: def.State) {\n    const newPb = playbackFor(state);\n    this.state = {\n      type: 'state',\n      def: state,\n      playback: newPb,\n      remainingDuration: state.duration,\n    };\n\n    this.setupMorphingForCurrentState({ force: true });\n  }\n\n  getCurrentState() {\n    return this.state;\n  }\n\n  goToState(newState: def.State, transition?: def.TransitionProperties) {\n    const prevState = this.state;\n    const prevSegment = prevState.def.segment;\n\n    if (this.transition) {\n      this.transitionEndEvent.emit({\n        from: this.transition.from,\n        to: this.state.def,\n        transition: this.transition.def,\n      });\n    }\n\n    const currTime = this.state.playback.driver.time;\n    this.enterState(newState);\n    transition = transition ?? { startAt: 'start' };\n    this.transitionStartEvent.emit({\n      from: prevState.def,\n      to: newState,\n      transition,\n    });\n\n    const newSegment = newState.segment;\n    switch (transition?.startAt) {\n      case 'start':\n      case undefined:\n        this.state.playback.driver.time = newSegment[0];\n        break;\n      case 'end':\n        this.state.playback.driver.time = newSegment[1];\n        break;\n      case 'proportional':\n        this.state.playback.driver.time = proportionalTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      case 'wrap':\n        this.state.playback.driver.time = wrapTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      case 'clamp':\n        this.state.playback.driver.time = clampTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      default:\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Unknown startAt value in ttransition: ${transition.startAt}`\n        );\n    }\n\n    if (transition.duration) {\n      const prevStateOrTransition: StateState | TransitionState = this.transition\n        ? { ...this.transition, next: prevState }\n        : prevState;\n\n      this.transition = {\n        type: 'transition',\n        prev: prevStateOrTransition,\n        progress: 0,\n        def: transition,\n        from: prevState.def,\n      };\n    } else {\n      // Instant\n      this.transition = undefined;\n      this.transitionEndEvent.emit({\n        from: prevState.def,\n        to: newState,\n        transition,\n      });\n    }\n  }\n\n  get definition() {\n    return this._definition;\n  }\n\n  set definition(def: def.LottielabInteractivityDef) {\n    const thisStateName = Object.entries(this._definition.states).find(\n      ([_, v]) => v === this.state.def\n    )?.[0];\n    this._definition = def;\n\n    if (!thisStateName || !this._definition.states[thisStateName]) {\n      const initialState = def.states[def.initialState];\n      if (!initialState) {\n        this.enterState({\n          segment: [0, 0],\n          loop: false,\n          speed: 1,\n          direction: 'forward',\n        });\n\n        throw new Error(`Initial state ${def.initialState} does not exist`);\n      }\n\n      const oldTime = this.state.playback.driver.time;\n      this.enterState(def.states[def.initialState]);\n      this.state.playback.driver.time = oldTime;\n      this.transition = undefined;\n    } else {\n      this.enterState(def.states[thisStateName]);\n    }\n  }\n\n  updateVariables(update: Partial<BuiltinVariables>) {\n    this.builtinVariables = { ...this.builtinVariables, ...update };\n    this.variables = mergeVariables(this.builtinVariables, this.userVariables);\n  }\n\n  setUserVariables(vars: UserVariables) {\n    this.userVariables = vars;\n    this.variables = mergeVariables(this.builtinVariables, this.userVariables);\n  }\n\n  handle(event: def.InteractiveEvent) {\n    const transition = this.state.def.on?.[def.eventToString(event)];\n    if (!transition) {\n      return;\n    }\n\n    const newState = this._definition.states[transition.goTo];\n    if (!newState) {\n      console.warn(\n        `[@lottielab/lottie-player:interactive] State ${transition.goTo} does not exist`\n      );\n      return;\n    }\n\n    this.goToState(newState, transition);\n  }\n\n  private getEffectiveState(t: StateState | TransitionState): StateState | TransitionState {\n    if (t.type === 'state') {\n      return t;\n    }\n\n    if (t.progress < 1) {\n      return t;\n    }\n\n    if (t.next) {\n      return t.next;\n    } else {\n      return this.state;\n    }\n  }\n\n  private applyTransition(ls: LottieState, elapsed: number, clock: number): LottieState {\n    let newLs = ls;\n    if (this.transition) {\n      newLs = applyTransition(ls, this.transition, elapsed, clock, this.variables);\n\n      if (this.transition.progress >= 1) {\n        this.transitionEndEvent.emit({\n          from: this.transition.from,\n          to: this.state.def,\n          transition: this.transition.def,\n        });\n\n        this.transition = undefined;\n      } else {\n        this.transition.prev = this.getEffectiveState(this.transition.prev);\n      }\n    }\n\n    return newLs;\n  }\n\n  advance(ls: LottieState, elapsed: number): LottieState {\n    let newLs = { ...ls };\n    const clock = (this.clock += elapsed);\n\n    this.setupMorphingForCurrentState();\n\n    const pbEvents: PlaybackEvent[] = [];\n    if (this.state.remainingDuration === undefined) {\n      // No predefined duration just advance the playback and handle the finish\n      // events below\n      newLs = advanceStatePlayback(\n        this.state,\n        { ...ls, morphs: undefined },\n        elapsed,\n        clock,\n        this.variables,\n        pbEvents\n      );\n    } else {\n      const d = this.state.remainingDuration;\n      if (d > 0) {\n        const dt = Math.min(d, elapsed);\n        this.state.remainingDuration -= dt;\n        newLs = advanceStatePlayback(\n          this.state,\n          { ...ls, morphs: undefined },\n          dt,\n          clock,\n          this.variables,\n          pbEvents\n        );\n\n        // Have we finished the full duration?\n        // (This will also take into account predefined loops, see enterState())\n        if (this.state.remainingDuration <= 0) {\n          this.state.remainingDuration = 0;\n          this.handle({ event: 'finish' });\n        }\n      }\n    }\n\n    for (const e of pbEvents) {\n      if (e.type === 'finish') {\n        this.handle({ event: 'finish' });\n      }\n    }\n\n    newLs = this.applyTransition(newLs, elapsed, clock);\n    return newLs;\n  }\n\n  get currentTime() {\n    if (this.state.playback.playheadControl) {\n      return this.state.playback.playheadControl(this.variables);\n    } else {\n      return this.state.playback.driver.currentTime;\n    }\n  }\n\n  get currentFrame() {\n    return this.currentTime / this.state.playback.driver.frameRate;\n  }\n}\n","/** Minimalistic, small-footprint library for evaluating bezier curves. */\n\ntype Point = { x: number; y: number };\n\nexport type CubicBezier = {\n  start: Point;\n  end: Point;\n  controlPoint1: Point;\n  controlPoint2: Point;\n};\n\nfunction zipReduce(points: Point[], coeffs: number[]) {\n  return points.reduce(\n    (acc, point, index) => {\n      return {\n        x: acc.x + coeffs[index] * point.x,\n        y: acc.y + coeffs[index] * point.y,\n      };\n    },\n    { x: 0, y: 0 }\n  );\n}\n\nfunction points(curve: CubicBezier) {\n  return [curve.start, curve.controlPoint1, curve.controlPoint2, curve.end];\n}\n\nexport function evaluate(curve: CubicBezier, t: number) {\n  return zipReduce(points(curve), [\n    (1 - t) ** 3,\n    3 * (1 - t) ** 2 * t,\n    3 * (1 - t) * t ** 2,\n    t ** 3,\n  ]);\n}\n","import { InteractiveEvent, InteractiveEventType } from './definition';\nimport { BuiltinVariables } from './variables';\n\nconst ENCLOSING_RECT_CLASS = 'll-enclosing-rect';\n\nfunction clamp(x: number, min: number, max: number) {\n  return Math.min(Math.max(x, min), max);\n}\n\nexport interface InteractiveEventHandler {\n  updateVariables(variables: Partial<BuiltinVariables>): void;\n  handle(event: InteractiveEvent): void;\n}\n\n/**\n * Catches and dispatches interactive mouse events to handlers. Keeps track of\n * mouse-related variables, as defined in `FormulaVariables`.\n */\nexport class InteractiveEventDispatcher {\n  public handler?: InteractiveEventHandler;\n  private disposers: (() => void)[] = [];\n  private currentClickableClassNames: (string | 'full')[] = [];\n\n  private attachContinuousListeners(enclosingSvgRect: SVGRectElement) {\n    const globalMouseMove = (e: MouseEvent) => {\n      const rect = enclosingSvgRect.getBoundingClientRect();\n\n      this.handler?.updateVariables({\n        'mouse.x': e.clientX - rect.left,\n        'mouse.y': e.clientY - rect.top,\n        'mouse.abs.x': e.clientX,\n        'mouse.abs.y': e.clientY,\n        'mouse.progress.x': clamp((e.clientX - rect.left) / rect.width, 0, 1),\n        'mouse.progress.y': clamp((e.clientY - rect.top) / rect.height, 0, 1),\n      });\n    };\n\n    window.addEventListener('mousemove', globalMouseMove);\n    this.disposers.push(() => window.removeEventListener('mousemove', globalMouseMove));\n\n    const globalMouseDown = (e: MouseEvent) => {\n      this.handler?.updateVariables({\n        'mouse.buttons.left': (e.buttons & 1) != 0,\n        'mouse.buttons.right': (e.buttons & 2) != 0,\n        'mouse.buttons.middle': (e.buttons & 4) != 0,\n      });\n    };\n\n    window.addEventListener('mousedown', globalMouseDown);\n    this.disposers.push(() => window.removeEventListener('mousedown', globalMouseDown));\n\n    const globalMouseUp = () => {\n      this.handler?.updateVariables({\n        'mouse.buttons.left': false,\n        'mouse.buttons.right': false,\n        'mouse.buttons.middle': false,\n      });\n    };\n\n    window.addEventListener('mouseup', globalMouseUp);\n    this.disposers.push(() => window.removeEventListener('mouseup', globalMouseUp));\n  }\n\n  private attachListener(\n    element: SVGElement,\n    className: string | undefined,\n    event: InteractiveEventType\n  ) {\n    let eventName: 'click' | 'mouseenter' | 'mouseleave' | 'mousedown' | 'mouseup';\n    switch (event) {\n      case 'click':\n        eventName = 'click';\n        break;\n      case 'mouseEnter':\n        eventName = 'mouseenter';\n        break;\n      case 'mouseLeave':\n        eventName = 'mouseleave';\n        break;\n      case 'mouseDown':\n        eventName = 'mousedown';\n        break;\n      case 'mouseUp':\n        eventName = 'mouseup';\n        break;\n      default:\n        throw new Error('InteractiveEventDispatcher: not a DOM event: ' + event);\n    }\n\n    const listener = (e: MouseEvent) => {\n      if (className === ENCLOSING_RECT_CLASS) {\n        this.handler?.handle({ event });\n      } else {\n        this.handler?.handle({ event, target: className ?? undefined });\n      }\n    };\n\n    element.addEventListener(eventName, listener);\n\n    this.disposers.push(() => {\n      element.removeEventListener(eventName, listener);\n    });\n  }\n\n  constructor(\n    private container: HTMLElement,\n    observedClassNames: string[] = []\n  ) {\n    const svgElement = container.querySelector('svg');\n    const viewBox = svgElement\n      ?.getAttribute('viewBox')\n      ?.split(' ')\n      .map((x) => parseFloat(x)) ?? [1200, 900];\n\n    // Create an enclosing rect element\n    const rootG = svgElement?.querySelector('svg > g') as SVGElement;\n    const fullLottieRect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n    [\n      ['x', '0'],\n      ['y', '0'],\n      ['width', viewBox[2].toString()],\n      ['height', viewBox[3].toString()],\n      ['fill', 'transparent'],\n      ['pointer-events', 'bounding-box'],\n      ['class', ENCLOSING_RECT_CLASS],\n    ].forEach(([key, value]) => {\n      fullLottieRect.setAttribute(key, value);\n    });\n\n    rootG?.insertBefore(fullLottieRect, rootG.firstChild);\n    this.disposers.push(() => fullLottieRect.remove());\n\n    const seenClasses = new Set<string>();\n    for (const className of [ENCLOSING_RECT_CLASS].concat(observedClassNames)) {\n      if (seenClasses.has(className)) {\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Duplicate class name ${className} in reactivity event dispatcher`\n        );\n      }\n\n      seenClasses.add(className);\n\n      const element =\n        className === ENCLOSING_RECT_CLASS\n          ? rootG\n          : (this.container.querySelector(`.${className}`) as SVGElement);\n      if (!element) {\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Could not find element with class name ${className}`\n        );\n        continue;\n      }\n\n      for (const event of ['click', 'mouseDown', 'mouseUp', 'mouseEnter', 'mouseLeave'] as const) {\n        this.attachListener(element, className, event);\n      }\n    }\n\n    this.attachContinuousListeners(fullLottieRect);\n  }\n\n  setClickableClassNames(classNames: (string | 'full')[]) {\n    const setCursor = (className: string | 'full', cursor: string) => {\n      const element =\n        className === 'full'\n          ? this.container\n          : (this.container.querySelector(`.${className}`) as SVGElement | undefined);\n      if (element) element.style.cursor = cursor;\n    };\n\n    this.currentClickableClassNames.forEach((className) => setCursor(className, 'initial'));\n    this.currentClickableClassNames = classNames;\n    classNames.forEach((className) => setCursor(className, 'pointer'));\n  }\n\n  destroy() {\n    this.setClickableClassNames([]);\n    this.disposers.forEach((d) => d());\n  }\n}\n","import * as def from './definition';\nimport type { LottieJSON, TransitionEvent, NamedState, ILottielabInteractivity } from '../..';\nimport { InteractiveDriver, StateTransitionEvent as DriverTransitionEvent } from './driver';\nimport { InteractiveEventDispatcher } from './events';\nimport { EventEmitter, Listener } from '../event';\nimport { UserVariables, Point } from './variables';\n\n/** Lottielab-inspired easing presets. Useful for smooth state transitions. */\nexport namespace EasingPresets {\n  export const Linear: def.BezierEasing = { i: { x: 0.75, y: 0.75 }, o: { x: 0.25, y: 0.25 } };\n  export const Natural: def.BezierEasing = { o: { x: 0.4, y: 0 }, i: { x: 0.8, y: 1 } };\n  export const BounceIn: def.BezierEasing = { o: { x: 0.8, y: 0 }, i: { x: 0.5, y: 1.5 } };\n  export const BounceOut: def.BezierEasing = { o: { x: 0.5, y: -0.5 }, i: { x: 0.2, y: 1 } };\n  export const Accelerate: def.BezierEasing = { o: { x: 0.42, y: 0 }, i: { x: 1, y: 1 } };\n  export const SlowDown: def.BezierEasing = { o: { x: 0, y: 0 }, i: { x: 0.58, y: 1 } };\n}\n\nexport function isInteractive(lottie?: LottieJSON) {\n  return (\n    !!lottie?.metadata?.lottielabInteractivity &&\n    lottie?.metadata?.lottielabInteractivity.__version === 'v1'\n  );\n}\n\n/**\n * Custom variables that can be set and read by the Lottielab Interactivity\n * state machine. These variables, alongside builtin ones (@see BuiltinVariables)\n * can be used in formulas to, for example, directly drive the playhead or blend\n * between states.\n */\nexport class FormulaInputs {\n  private variables: UserVariables = {};\n\n  constructor(private onUpdate: (vars: UserVariables) => void) {}\n\n  set(name: string, value: number | boolean | Point) {\n    this.variables[name] = value;\n    this.onUpdate(this.variables);\n  }\n\n  get(name: string): number | boolean | Point | undefined {\n    return this.variables[name];\n  }\n\n  delete(name: string) {\n    delete this.variables[name];\n    this.onUpdate(this.variables);\n  }\n\n  clear() {\n    this.variables = {};\n    this.onUpdate(this.variables);\n  }\n}\n\n/**\n * Manages the Lottielab Interactivity state machine.\n *\n * By default, the interactivity state machine definition is extracted from the\n * Lottie JSON file (if the file is an Interactive Lottie). You can always\n * provide a custom definition by setting the `.definition` property.\n *\n * If an animation is not interactive, you can use `.toInteractive()` on a Lottie\n * player, and then manually create a definition or trigger states and state\n * transitions.\n *\n * With this class, you can inspect the state, trigger transitions to new states\n * programatically, provide inputs for the interactivity machinery and trigger\n * custom events that an Interactive Lottie can respond to.\n *\n * This class should not be constructed directly; rather, use the\n * `.interactivity` property of a player instance to gain access to it.\n */\nexport class LottielabInteractivity implements ILottielabInteractivity {\n  private _userProvidedDefinition:\n    | { set: true; value: def.LottielabInteractivityDef | undefined }\n    | { set: false };\n  private _rootElement: HTMLElement;\n  private _lottie: LottieJSON | undefined;\n  private _driver: InteractiveDriver;\n  private _dispatcher: InteractiveEventDispatcher;\n\n  private _transitionStartEvent = new EventEmitter<TransitionEvent>();\n  private _transitionEndEvent = new EventEmitter<TransitionEvent>();\n\n  public readonly inputs: FormulaInputs;\n\n  constructor(root: HTMLElement, lottie: LottieJSON | undefined) {\n    this._userProvidedDefinition = { set: false };\n    this._rootElement = root;\n    this._lottie = lottie;\n    const def = this.effectiveDefinition();\n    this._driver = new InteractiveDriver(def);\n    this._dispatcher = new InteractiveEventDispatcher(\n      this._rootElement,\n      this.getObservedClassNames(def)\n    );\n    this._dispatcher.setClickableClassNames(this.getClickableClassNames());\n    this._dispatcher.handler = this._driver;\n\n    const onTransitionStartEvent = (event: DriverTransitionEvent) => {\n      this._transitionStartEvent.emit(this.translateTransitionEvent(event));\n      this._dispatcher.setClickableClassNames(this.getClickableClassNames());\n    };\n    const onTransitionEndEvent = (event: DriverTransitionEvent) =>\n      this._transitionEndEvent.emit(this.translateTransitionEvent(event));\n\n    this._driver.transitionStartEvent.addListener(onTransitionStartEvent);\n    this._driver.transitionEndEvent.addListener(onTransitionEndEvent);\n\n    this.inputs = new FormulaInputs((vars) => this._driver.setUserVariables(vars));\n  }\n\n  /**\n   * Returns the current Lottielab Interactivity definition. The definition is a\n   * programmatic description of how a Lottie responds to events.\n   *\n   * By default, this definition is read from the Lottie itself in case it's an\n   * Interactive Lottie. If an ordinary Lottie is used, the definition will be\n   * empty, but a custom one can be provided by setting this property.\n   */\n  get definition(): def.LottielabInteractivityDef | undefined {\n    if (this._userProvidedDefinition.set) {\n      return this._userProvidedDefinition.value;\n    }\n    return this._lottie?.metadata?.lottielabInteractivity;\n  }\n\n  /**\n   * Overrides the Lottielab Interactivity definition used by this lottie. The\n   * definition is a programmatic description of how a Lottie responds to events.\n   *\n   * Setting this property will override any existing definition that has been\n   * set or read from the Lottie itself.\n   */\n  set definition(definition: def.LottielabInteractivityDef | undefined) {\n    this._userProvidedDefinition = { set: true, value: definition };\n    this.updateReactivity();\n  }\n\n  /**\n   * Returns the current state that the Lottie is in. A state encompasses the\n   * current time segment, playback behavior (speed, looping, etc.) and\n   * transitions to other states in response to events.\n   */\n  get state(): NamedState {\n    const stateDef = this._driver.getCurrentState().def;\n    const name = this.lookupStateName(stateDef);\n    return { ...stateDef, name: name ?? '<custom>' };\n  }\n\n  /**\n   * Switches the Lottie to another state. The state can either be given based on\n   * the name of a state defined in the interactivity definition, or a bespoke\n   * state configuration.\n   */\n  set state(state: string | def.State) {\n    this._driver.goToState(this.findState(state));\n  }\n\n  /**\n   * Switches the Lottie to another state. You can provide either the name of a\n   * state defined in the interactivity definition, or a bespoke state\n   * configuration.\n   *\n   * The `options` parameter can be used to specify details about the transition.\n   * Among other things, it allows a smooth blending transition to be applied\n   * instead of an instant switch, or the new state can be configured to start\n   * at a specific playhead position.\n   */\n  goToState(state: string | def.State, options?: def.TransitionProperties) {\n    this._driver.goToState(this.findState(state), options);\n  }\n\n  /** Whether a custom Lottielab Interactivity definiton was set by the user. */\n  hasUserProvidedDefinition() {\n    return this._userProvidedDefinition.set;\n  }\n\n  /**\n   * Clears any custom Lottielab Interactivity definition set by the user. After\n   * calling this method, the definition will be read from the Lottie itself. If\n   * the Lottie is not an Interactive Lottie, the definition will be empty.\n   */\n  resetDefinition() {\n    this._userProvidedDefinition = { set: false };\n    this.updateReactivity();\n  }\n\n  /**\n   * Subcribes to one of the two transition events.\n   *\n   * 'transitionstart' is fired when a transition from state A to state B\n   * starts.\n   * 'transitionend' is fired when a transition from state A to state B\n   * completes.\n   *\n   * Both events have a `TransitionEvent` object as their argument, which\n   * gives more information about the state transition. @see TransitionEvent\n   *\n   * If a transition has a duration of 0 (or not set), the 'transitionend'\n   * event will be fired immediately followed by the 'transitionstart' event.\n   */\n  on(event: 'transitionstart' | 'transitionend', listener: Listener<TransitionEvent>) {\n    switch (event) {\n      case 'transitionstart':\n        this._transitionStartEvent.addListener(listener);\n        break;\n      case 'transitionend':\n        this._transitionEndEvent.addListener(listener);\n        break;\n    }\n  }\n\n  /** Unsubscribes from an event. */\n  off(event: 'transitionstart' | 'transitionend', listener: Listener<TransitionEvent>) {\n    switch (event) {\n      case 'transitionstart':\n        this._transitionStartEvent.removeListener(listener);\n        break;\n      case 'transitionend':\n        this._transitionEndEvent.removeListener(listener);\n        break;\n    }\n  }\n\n  /**\n   * Triggers a custom, user-defined event that the state machine can respond to.\n   *\n   * The corresponding name of this event in the interactivity definition would\n   * be 'custom:<event-name>'. For example, if this function is called with the\n   * event name 'onboardingComplete', the transition\n   * `this.state.on['custom:onboardingComplete']` would run.\n   */\n  trigger(eventName: string) {\n    this._driver.handle({ event: 'custom', name: eventName });\n  }\n\n  _destroy() {\n    this._dispatcher?.destroy();\n  }\n\n  _getDriver() {\n    return this._driver;\n  }\n\n  private translateTransitionEvent(event: DriverTransitionEvent): TransitionEvent {\n    return {\n      from: { ...event.from, name: this.lookupStateName(event.from) ?? '<custom>' },\n      to: { ...event.to, name: this.lookupStateName(event.to) ?? '<custom>' },\n      transition: event.transition,\n    };\n  }\n\n  private effectiveDefinition(): def.LottielabInteractivityDef {\n    const duration = this._lottie ? this._lottie.op / this._lottie.fr : 0;\n    return (\n      this.definition ?? {\n        __version: 'v1',\n        initialState: 'default',\n        states: {\n          default: {\n            segment: [0, duration],\n          },\n        },\n      }\n    );\n  }\n\n  private lookupStateName(state: def.State): string | undefined {\n    return Object.entries(this.effectiveDefinition().states).find(([_name, s]) => s === state)?.[0];\n  }\n\n  private findState(state: string | def.State): def.State {\n    let newState;\n    if (typeof state === 'string') {\n      newState = this.effectiveDefinition().states[state];\n    } else {\n      newState = state;\n    }\n\n    if (!state) {\n      throw new Error(`State ${state} not found`);\n    }\n\n    return newState;\n  }\n\n  private getObservedClassNames(def: def.LottielabInteractivityDef | undefined): string[] {\n    if (!def) return [];\n\n    return [\n      ...new Set(\n        Object.values(def.states)\n          .flatMap((state) => Object.keys(state.on ?? {}))\n          .flatMap((eventName) => {\n            const [type, className] = eventName.split(':');\n            if (type === 'custom' || !className) return [];\n            return [className];\n          })\n      ),\n    ];\n  }\n\n  private getClickableClassNames(): (string | 'full')[] {\n    return [\n      ...new Set(\n        Object.keys(this.state.on ?? {}).flatMap((eventName) => {\n          const [type, className] = eventName.split(':');\n          if (!['click', 'mouseDown', 'mouseUp'].includes(type)) {\n            return [];\n          }\n\n          if (!className) {\n            return ['full'];\n          }\n\n          return [className];\n        })\n      ),\n    ];\n  }\n\n  private updateReactivity() {\n    const def = this.effectiveDefinition();\n    this._driver.definition = def;\n\n    // Recreate the dispatcher because the list of observed class names\n    // might've changed\n    this._dispatcher?.destroy();\n    this._dispatcher = new InteractiveEventDispatcher(\n      this._rootElement,\n      this.getObservedClassNames(def)\n    );\n    this._dispatcher.handler = this._driver;\n  }\n}\n","import type { ILottie, LottieJSON, TimeEvent } from '..';\nimport { DrivenLottieRenderer } from './driven-renderer';\nimport { PlaybackDriver } from './playback';\nimport { LottielabInteractivity, isInteractive } from './interactivity';\nimport { EventEmitter, Listener } from './event';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\n\ntype InteractivePlaybackState = {\n  direction: 1 | -1;\n  speed: number;\n  playing: boolean;\n};\n\ntype PlayerImpl =\n  | { type: 'playback'; driver: PlaybackDriver }\n  | {\n      type: 'interactive';\n      interactivity: LottielabInteractivity;\n      playback: InteractivePlaybackState;\n    };\n\n/**\n * A base renderer for Lottie animations based on lottie-web. Able to play\n * ordinary Lottie animations, as well as Lotties with Lottielab Interactivity.\n */\nexport class LottiePlayer implements ILottie {\n  protected readonly _renderer: DrivenLottieRenderer;\n  protected readonly root: Node & InnerHTML;\n\n  private _impl: PlayerImpl;\n\n  private readonly timeEvent = new EventEmitter<TimeEvent>();\n  private readonly timeEventListener = (e: TimeEvent) => {\n    if (this._impl.type === 'playback') {\n      this.timeEvent.emit(e);\n    } else {\n      this.timeEvent.emit({\n        ...e,\n        playhead: this.currentTime,\n      });\n    }\n  };\n\n  constructor(\n    root: Node & InnerHTML,\n    src?: string | any,\n    autoplay?: boolean,\n    preserveAspectRatio?: string\n  ) {\n    this.root = root;\n    this._renderer = new DrivenLottieRenderer(root, src, undefined, preserveAspectRatio);\n\n    const playback = new PlaybackDriver();\n    if (autoplay) {\n      playback.play();\n    } else {\n      playback.pause();\n    }\n    this._impl = { type: 'playback', driver: playback };\n    this._renderer.driver = playback;\n    this.initialize(src, autoplay, preserveAspectRatio);\n  }\n\n  initialize(src: string | any, autoplay?: boolean, preserveAspectRatio?: string) {\n    this._renderer.timeEvent.removeListener(this.timeEventListener);\n    return this._renderer.initialize(src, preserveAspectRatio).then(() => {\n      this._renderer.timeEvent.addListener(this.timeEventListener);\n\n      // Sync the impl with the current state of the lottie.\n      //\n      // If we previously had a user-provided interactivity definition, maintain\n      // it.\n      //\n      // Otherwise, if the lottie is interactive, create an interactive driver\n      // for it to enable interactivity.\n      //\n      // If none of the above apply, the Lottie should be an ordinary playback\n      // Lottie. In that case, destroy any existing interactivity (via\n      // .toPlayback()).\n      if (\n        this.interactivity?.hasUserProvidedDefinition() ||\n        isInteractive(this._renderer.animationData)\n      ) {\n        const hadUserProvidedDefinition = this.interactivity?.hasUserProvidedDefinition();\n        const oldDefinition = this.interactivity?.definition;\n        this.destroyImpl();\n        this.createInteractiveImpl();\n\n        if (hadUserProvidedDefinition) {\n          this.interactivity!.definition = oldDefinition!;\n        }\n      } else if (this.interactivity) {\n        this.toPlayback();\n      }\n\n      if (autoplay) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    });\n  }\n\n  private destroyImpl() {\n    if (this._impl.type === 'interactive') {\n      this._impl.interactivity._destroy();\n    }\n  }\n\n  private createPlaybackImpl() {\n    this._impl = { type: 'playback', driver: new PlaybackDriver() };\n    this._renderer.driver = this._impl.driver;\n    this._updateTimeMultiplier();\n  }\n\n  private createInteractiveImpl() {\n    this._impl = {\n      type: 'interactive',\n      interactivity: new LottielabInteractivity(\n        this.root as HTMLElement,\n        this._renderer.animationData\n      ),\n      playback: {\n        direction: 1,\n        speed: 1,\n        playing: true,\n      },\n    };\n    this._renderer.driver = this._impl.interactivity._getDriver();\n    this._updateTimeMultiplier();\n  }\n\n  toInteractive() {\n    if (this._impl.type === 'interactive') return;\n    this.destroyImpl();\n    this.createInteractiveImpl();\n  }\n\n  toPlayback() {\n    if (this._impl.type === 'playback') return;\n    this.destroyImpl();\n    this.createPlaybackImpl();\n  }\n\n  destroy() {\n    this.destroyImpl();\n    this._renderer.timeEvent.removeListener(this.timeEventListener);\n    this._renderer.destroy();\n    this.root.innerHTML = '';\n  }\n\n  get interactivity(): LottielabInteractivity | undefined {\n    return this._impl.type === 'interactive' ? this._impl.interactivity : undefined;\n  }\n\n  private _updateTimeMultiplier() {\n    if (this._impl.type === 'playback') {\n      this._renderer.timeMultiplier = 1.0;\n    } else {\n      if (this._impl.playback.playing) {\n        this._renderer.timeMultiplier = this._impl.playback.speed * this._impl.playback.direction;\n      } else {\n        this._renderer.timeMultiplier = 0;\n      }\n    }\n  }\n\n  // Methods\n  play() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.play();\n    } else {\n      this._impl.playback.playing = true;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  stop() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.stop();\n    } else {\n      this.pause();\n    }\n  }\n\n  pause() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.pause();\n    } else {\n      this._impl.playback.playing = false;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  seek(timeSeconds: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.seek(timeSeconds);\n      this._renderer.advanceToNow();\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot seek an interactive Lottie`);\n    }\n  }\n\n  seekToFrame(frame: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.seekToFrame(frame);\n      this._renderer.advanceToNow();\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot seek an interactive Lottie`);\n    }\n  }\n\n  loopBetween(timeSeconds1: number, timeSeconds2: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loopBetween(timeSeconds1, timeSeconds2);\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot loop an interactive Lottie`);\n    }\n  }\n\n  loopBetweenFrames(frame1: number, frame2: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loopBetweenFrames(frame1, frame2);\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot loop an interactive Lottie`);\n    }\n  }\n\n  /**\n   * Subcribes to one of the supported events.\n   *\n   * 'loop' fires when the animation loops around.\n   * 'finish' fires when the animation reaches the end.\n   * 'time' fires whenever a frame passes, and has a `TimeEvent` argument which\n   * gives information about the passage of time since the last time event.\n   *\n   * If the Lottie is interactive (`.interactivity` is defined), only the 'time'\n   * event works. In that case, use the `interactivity` object to listen to\n   * events pertaining to the interactive Lottie.\n   */\n  on(event: 'time', listener: Listener<TimeEvent>): void;\n  on(event: 'loop' | 'finish', listener: Listener<undefined>): void;\n  on(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'loop':\n        if (this._impl.type === 'interactive')\n          throw new Error(\"Cannot listen to 'loop' event on an interactive Lottie\");\n        this._impl.driver.loopEvent.addListener(listener);\n        break;\n      case 'finish':\n        if (this._impl.type === 'interactive')\n          throw new Error(\"Cannot listen to 'finish' event on an interactive Lottie\");\n        this._impl.driver.finishEvent.addListener(listener);\n      case 'time':\n        this.timeEvent.addListener(listener);\n        break;\n    }\n  }\n\n  /** Unsubscribes from an event. */\n  off(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'time':\n        this.timeEvent.removeListener(listener);\n        break;\n      case 'loop':\n        if (this._impl.type === 'interactive') return; // no listeners\n        this._impl.driver.loopEvent.removeListener(listener);\n        break;\n      case 'finish':\n        if (this._impl.type === 'interactive') return; // no listeners\n        this._impl.driver.finishEvent.removeListener(listener);\n        break;\n    }\n  }\n\n  // Getters/Setters\n\n  get playing(): boolean {\n    return this._impl.type === 'playback' ? this._impl.driver.playing : this._impl.playback.playing;\n  }\n\n  set playing(play: boolean) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.playing = play;\n    } else {\n      this._impl.playback.playing = play;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get loop(): boolean | number {\n    return this._impl.type === 'playback' ? this._impl.driver.loop : false;\n  }\n\n  set loop(loop: boolean | number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loop = loop;\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot set loop on an interactive Lottie`);\n    }\n  }\n\n  get currentTime(): number {\n    switch (this._impl.type) {\n      case 'playback':\n        return this._impl.driver.currentTime;\n      case 'interactive':\n        return this._impl.interactivity._getDriver().currentTime;\n    }\n  }\n\n  set currentTime(time: number) {\n    this.seek(time);\n  }\n\n  get currentFrame(): number {\n    switch (this._impl.type) {\n      case 'playback':\n        return this._impl.driver.currentFrame;\n      case 'interactive':\n        return this._impl.interactivity._getDriver().currentFrame;\n    }\n  }\n\n  set currentFrame(frame: number) {\n    this.seekToFrame(frame);\n  }\n\n  get frameRate(): number {\n    return this._renderer.frameRate;\n  }\n\n  get duration(): number {\n    return this._renderer.duration;\n  }\n\n  get durationFrames(): number {\n    return this._renderer.durationInFrames;\n  }\n\n  get direction(): 1 | -1 {\n    if (this._impl.type === 'playback') {\n      return this._impl.driver.direction;\n    } else {\n      return this._impl.playback.direction;\n    }\n  }\n\n  set direction(playDirection: 1 | -1) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.direction = playDirection;\n    } else {\n      this._impl.playback.direction = playDirection;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get speed(): number {\n    if (this._impl.type === 'playback') {\n      return this._impl.driver.speed;\n    } else {\n      return this._impl.playback.speed;\n    }\n  }\n\n  set speed(speed: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.speed = speed;\n    } else {\n      this._impl.playback.speed = speed;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get animation(): AnimationItem {\n    return this._renderer.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this._renderer.animationData;\n  }\n}\n\nexport default LottiePlayer;\n","import type { ILottie, LottieJSON } from '..';\nimport { LottiePlayer } from '../common/player';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport { LottielabInteractivity } from '../common/interactivity';\nimport { Listener } from '../common/event';\n\nfunction warn(e: any) {\n  // Create an error object if the input is a string so that the stack trace is preserved\n  console.warn(`[@lottielab/lottie-player/web]`, typeof e === 'string' ? new Error(e) : e);\n}\n\nclass LottieWeb extends HTMLElement implements ILottie {\n  private lottie: LottiePlayer;\n\n  // Load event\n  private loadEvent = new CustomEvent('load', {\n    bubbles: true,\n    cancelable: false,\n  });\n\n  static get observedAttributes() {\n    return ['src', 'loop', 'speed', 'direction', 'preserveAspectRatio'];\n  }\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n\n    const style = document.createElement('style');\n    const container = document.createElement('div');\n    container.style.width = '100%';\n    container.style.height = '100%';\n    this.shadowRoot!.appendChild(style);\n    this.shadowRoot!.appendChild(container);\n\n    this.lottie = new LottiePlayer(container);\n    this.updateStyles();\n  }\n\n  private updateStyles() {\n    const [w, h] = this.intrinsicSize;\n    this.shadowRoot!.querySelector('style')!.textContent = `\n      :host { display: inline-block; width: ${w}px; height: ${h}px; }\n    `;\n  }\n\n  private get intrinsicSize() {\n    if (this.lottie.animationData) {\n      return [this.lottie.animationData.w, this.lottie.animationData.h];\n    } else {\n      return [300, 225];\n    }\n  }\n\n  attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n    if (oldValue === newValue) {\n      return;\n    }\n\n    switch (name) {\n      case 'src':\n        try {\n          this.lottie\n            .initialize(\n              newValue,\n              !(this.getAttribute('autoplay') === 'false'),\n              this.getAttribute('preserveAspectRatio') ?? undefined\n            )\n            .then(() => this.dispatchEvent(this.loadEvent))\n            .catch((e) => {\n              warn(e);\n              this.dispatchEvent(\n                new CustomEvent('error', { bubbles: true, cancelable: false, detail: e })\n              );\n            })\n            .finally(() => this.updateStyles());\n        } catch (e) {\n          warn(e);\n          this.dispatchEvent(\n            new CustomEvent('error', { bubbles: true, cancelable: false, detail: e })\n          );\n        }\n        break;\n      case 'loop':\n        this.lottie.loop = this.convertLoopAttribute(newValue);\n        break;\n      case 'direction':\n        this.lottie.direction = this.convertDirectionAttribute(newValue);\n        break;\n      case 'speed':\n        const value = parseFloat(newValue);\n        if (!isNaN(value)) {\n          this.lottie.speed = parseFloat(newValue);\n        } else {\n          warn(`Invalid speed value: ${newValue}`);\n          this.lottie.speed = 1;\n        }\n\n        break;\n    }\n  }\n\n  /**\n   * Converts the loop attribute (which can either be null or a string) to either a boolean or a number.\n   * When `loop` is true/false it sets whether the animation should loop indefinitely or not.\n   * When `loop` is a number, this sets the number of loops the animation should run for.\n   * @param loopAttribute - parameter taken from the component's attributes (string | null)\n   * @returns boolean | number\n   */\n  private convertLoopAttribute(loopAttribute: string): boolean | number {\n    switch (loopAttribute) {\n      case 'true':\n      case '':\n        return true;\n      case 'false':\n        return false;\n      default:\n        const num = +loopAttribute;\n        if (isNaN(num)) {\n          warn(`Invalid loop value: ${loopAttribute}`);\n          return true;\n        }\n\n        if (num < 0) {\n          warn(`Invalid loop value (negative): ${loopAttribute}`);\n          return true;\n        }\n\n        if (Math.floor(num) !== num) {\n          warn(`Non-integer loop values are not supported: ${loopAttribute}`);\n        }\n\n        return Math.round(num);\n    }\n  }\n\n  /**\n   * Converts the direction attribute (which can either be null or a string) to a number.\n   * The direction dictates the play direction of the animation.\n   * A value of `1` represents an animation playing forwards (and is default).\n   * A value of `-1` represents an animation playing backwards.\n   */\n  private convertDirectionAttribute(directionAttribute: string): 1 | -1 {\n    if (['normal', 'forwards'].includes(directionAttribute)) {\n      return 1;\n    } else if (['reverse', 'backwards'].includes(directionAttribute)) {\n      return -1;\n    }\n\n    const num = +directionAttribute;\n    if (isNaN(num)) {\n      warn(`Invalid direction value: ${directionAttribute}`);\n      return 1;\n    }\n\n    if (num === 1 || num === -1) {\n      return num;\n    } else {\n      warn(`Invalid direction value: ${directionAttribute}`);\n      return 1;\n    }\n  }\n\n  disconnectedCallback() {\n    this.lottie.destroy();\n  }\n\n  // Methods\n  play() {\n    this.lottie.play();\n  }\n  stop() {\n    this.lottie.stop();\n  }\n  pause() {\n    this.lottie.pause();\n  }\n\n  seek(timeSeconds: number) {\n    this.lottie.seek(timeSeconds);\n  }\n  seekToFrame(frame: number) {\n    this.lottie.seekToFrame(frame);\n  }\n\n  loopBetween(timeSeconds1: number, timeSeconds2: number) {\n    this.lottie.loopBetween(timeSeconds1 * 1000, timeSeconds2 * 1000);\n  }\n  loopBetweenFrames(frame1: number, frame2: number) {\n    this.lottie.loopBetweenFrames(frame1, frame2);\n  }\n\n  toInteractive() {\n    this.lottie.toInteractive();\n  }\n\n  toPlayback() {\n    this.lottie.toPlayback();\n  }\n\n  /**\n   * Subcribes to one of the supported events.\n   *\n   * 'loop' fires when the animation loops around.\n   * 'finish' fires when the animation reaches the end.\n   * 'time' fires whenever a frame passes, and has a `TimeEvent` argument which\n   * gives information about the passage of time since the last time event.\n   *\n   * If the Lottie is interactive (`.interactivity` is defined), only the 'time'\n   * event works. In that case, use the `interactivity` object to listen to\n   * events pertaining to the interactive Lottie.\n   */\n  on(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'time':\n        this.lottie.on(event, listener);\n        break;\n\n      case 'loop':\n      case 'finish':\n        this.lottie.on(event, listener);\n    }\n  }\n\n  /** Unsubscribes from one of the supported events. */\n  off(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    this.lottie.off(event, listener);\n  }\n\n  // Getters/Setters\n\n  get playing(): boolean {\n    return this.lottie.playing;\n  }\n  set playing(play: boolean) {\n    this.lottie.playing = play;\n  }\n\n  get loop(): boolean | number {\n    return this.lottie.loop;\n  }\n  set loop(loop: boolean | number) {\n    this.lottie.loop = loop;\n  }\n\n  get currentTime(): number {\n    return this.lottie.currentTime;\n  }\n  set currentTime(time: number) {\n    this.lottie.currentTime = time;\n  }\n\n  get currentFrame(): number {\n    return this.lottie.currentFrame;\n  }\n  set currentFrame(frame: number) {\n    this.lottie.currentFrame = frame;\n  }\n\n  get frameRate(): number {\n    return this.lottie.frameRate;\n  }\n\n  get duration(): number {\n    return this.lottie.duration;\n  }\n  get durationFrames(): number {\n    return this.lottie.durationFrames;\n  }\n\n  get direction(): 1 | -1 {\n    return this.lottie.direction;\n  }\n  set direction(direction: 1 | -1) {\n    this.lottie.direction = direction;\n  }\n\n  get speed(): number {\n    return this.lottie.speed;\n  }\n  set speed(speed: number) {\n    this.lottie.speed = speed;\n  }\n\n  get animation(): AnimationItem {\n    return this.lottie.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this.lottie.animationData;\n  }\n\n  get interactivity(): LottielabInteractivity | undefined {\n    return this.lottie.interactivity;\n  }\n}\n\nif (typeof window !== 'undefined' && !window.customElements.get('lottie-player')) {\n  window.customElements.define('lottie-player', LottieWeb);\n}\n\nexport * from '../common-exports';\nexport default LottieWeb;\n"],"names":["navigator","exports","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","value","getLocationHref","createTag","type","document","createElement","extendPrototype","sources","destination","i","sourcePrototype","len","length","attr","prototype","Object","hasOwnProperty","call","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","this","audios","_volume","_isMuted","addAudio","audio","push","pause","resume","setRate","rateValue","createAudio","assetPath","window","Howl","src","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","createSizedArray","Array","apply","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","test","userAgent","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMin","min","defaultCurveSegments","degToRads","PI","roundCorner","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","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","max","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","createNS","createElementNS","_typeof$2","obj","Symbol","iterator","constructor","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","createWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","setupWorker","e","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","completeChars","chars","assets","findComp","id","comp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","loadAsset","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","load","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createImageData","addEventListener","ob","setAttributeNS","_elementHelper","append","appendChild","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","line","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","name","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","key","getRenderer","getRegisteredRenderer","_typeof$1","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","undefined","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","round","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","val","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","index","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","element","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","slice","getElementsByClassName","setAttribute","body","getElementsByTagName","innerText","div","style","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","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","abs","newtonRaphsonIterate","aGuessT","currentSlope","points","_p","_mSampleValues","_precomputed","get","x","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","pooling","_double","double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","create","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","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","bez","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","minLen","_arrayLikeToArray","n","from","iter","isArray","arr2","lerp","p0","p1","amount","lerpPoint","addVectors","map","subtractVectors","normalizeVector","hypot","EPSILON","tangentDirection","to","ti","p3","controlPoints","firstSubdivision","deCasteljauSubdivision","secondSubdivision","tangent1","length1","tangent2","length2","tangent3","length3","result","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","ind","__fnct","y","startPoint","endPoint","tangent","ratio","cnt","_tangent","_ratio","_cnt","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","prop","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","shapePool","shapePath","clone","shape","cloned","factory","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","getShapeProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","bodymovin","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","FontManager","maxWaitingTime","emptyChar","w","size","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","family","parentNode","fontFamily","node","position","left","top","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","parent","checkLoadedFonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","Date","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measure","text","getComputedTextLength","measureText","list","forEach","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","querySelectorAll","rel","sc","found","ch","getCharData","_char","charCodeAt","console","warn","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","count","setIsLoaded","Font","typekitLoaded","fontPrototype","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","blendModeEnums","getBlendMode","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","elements","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","processKeys","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","maskType","maskRef","inv","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","localTransforms","renderLocalTransform","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects","idPrefix","SVGEffects","filterManager","source","filters","Effect","effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","maskManager","createRenderableComponents","getMatte","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","display","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","processShapes","searchProcessedElement","processedElements","addProcessedElement","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","initModifierProperties","addShapeToModifier","setAsAnimated","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","mProps","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","lj","ml","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","iterations","lLen","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","SVGShapeElement","shapesData","stylesList","itemsData","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","tr","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","reloadShapes","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","_render","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","random","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getTextSelectorProp","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","_s","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","rot","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","TrimModifier","SVGComposableEffect","SVGDropShadowEffect","filter","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","feMerge","createMergeNode","SVGGaussianBlurEffect","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","String","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","pop","nextElement","insertBefore","setElements","elems","getElements","destroyElements","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","resultId","ins","feMergeNode","col","distance","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","X_LOTTIE_PLAYER_ORIGIN_WHITELIST","EMPTY_LOTTIE","ddd","LottieRenderer","root","initialize","_initWithAnimation","_animation","loadingSrc","Promise","resolve","some","re","match","setRequestHeader","reject","onload","innerHTML","statusText","message","onerror","durationFrames","_a","clampedFrame","universalLerp","xa","_b","_c","_d","Morphing","ops","WeakSet","el","attach","attachToProp","self","vrs","structuredClone","activeMorphs","morph","vr","otherFrame","otherVal","strength","has","detach","EventEmitter","listeners","addListener","listener","removeListener","hasListeners","removeAllListeners","emit","DrivenLottieRenderer","driver","animationFrame","onFrameBound","onFrame","timeMultiplier","timeEvent","_state","then","advanceToNow","refresh","catch","state","morphing","setState","newState","timeChanged","morphs","morphChanged","_driver","newDriver","prevClock","cancelAnimationFrame","advance","clock","prevTime","base","realNow","performance","getTime","prevRealTime","durationInFrames","diff","elapsed","playhead","lottieFrameRate","PlaybackDriver","speed","_loop","_loopsRemaining","Infinity","loopEvent","finishEvent","effectiveSegment","_duration","globalTimeToSegmentTime","segmentTimeToGlobalTime","eventsOut","_fps","lottieDuration","segmentTime","newTime","events","durationOfSegment","loops","firstLoop","relativeTime","globalTime","seekToFrame","frame","loopBetween","start","loopBetweenFrames","newLoop","timeInSegment","frameInSegment","toInteractive","toPlayback","on","off","eventToString","parseError","token","TokenPrimitives","tokenPrimitives","lbp","detect","nud","parseFloat","led","operator","right","operand","thenBranch","nextToken","condition","elseBranch","expression","operands","peek","binaryOperators","precedence","separator","input","tokens","isWhitespace","tokenPrimitive","tokenize","tokenIndex","parser","minPrecedence","currentToken","BuiltinSymbols","undefinedSymbol","evaluate","userDefinedSymbols","evaluateUnary","evaluateBinary","defaultValues","mergeVariables","builtin","user","ease","easing","curve","coeffs","reduce","acc","zipReduce","controlPoint1","controlPoint2","bezier.evaluate","easingToBezier","formulaToFunction","formula","defaultValue","parsedFormula","variables","playbackFor","pb","speedControl","playheadControl","advanceStatePlayback","playback","newVars","newLs","timeRemap","currTime","proportionalTimeRemap","other","wrapTimeRemap","clampTimeRemap","calculateMorphForState","onto","fromDuration","ontoDuration","progress","applyTransition","transition","advanceTransition","remainingMorphs","next","prevLs","prev","alpha","InteractiveDriver","definition","builtinVariables","userVariables","transitionStartEvent","transitionEndEvent","_definition","initialState","states","enterState","setupMorphingForCurrentState","opts","force","sd","otherState","newPb","remainingDuration","getCurrentState","goToState","prevState","prevSegment","startAt","newSegment","prevStateOrTransition","thisStateName","entries","find","oldTime","updateVariables","setUserVariables","handle","def.eventToString","goTo","getEffectiveState","pbEvents","dt","ENCLOSING_RECT_CLASS","clamp","InteractiveEventDispatcher","attachContinuousListeners","enclosingSvgRect","globalMouseMove","getBoundingClientRect","handler","clientX","clientY","disposers","globalMouseDown","buttons","globalMouseUp","attachListener","observedClassNames","currentClickableClassNames","querySelector","viewBox","getAttribute","rootG","fullLottieRect","firstChild","remove","seenClasses","Set","setClickableClassNames","classNames","setCursor","cursor","EasingPresets","Linear","Natural","BounceIn","BounceOut","Accelerate","SlowDown","FormulaInputs","onUpdate","set","clear","LottielabInteractivity","_transitionStartEvent","_transitionEndEvent","_userProvidedDefinition","_rootElement","_lottie","effectiveDefinition","_dispatcher","getObservedClassNames","getClickableClassNames","translateTransitionEvent","inputs","metadata","lottielabInteractivity","updateReactivity","stateDef","lookupStateName","findState","options","hasUserProvidedDefinition","resetDefinition","_destroy","_getDriver","__version","default","_name","flatMap","includes","LottiePlayer","timeEventListener","_impl","_renderer","interactivity","isInteractive","hadUserProvidedDefinition","oldDefinition","destroyImpl","createInteractiveImpl","createPlaybackImpl","_updateTimeMultiplier","timeSeconds","timeSeconds1","timeSeconds2","frame1","frame2","LottieWeb","HTMLElement","observedAttributes","super","loadEvent","CustomEvent","bubbles","cancelable","attachShadow","shadowRoot","updateStyles","intrinsicSize","attributeChangedCallback","oldValue","dispatchEvent","detail","finally","convertLoopAttribute","convertDirectionAttribute","loopAttribute","directionAttribute","disconnectedCallback","customElements","define"],"mappings":"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","x_google_ignoreList":[0]}