no-shadow fix
diff --git a/.eslintrc.json b/.eslintrc.json
index 20bb36b..ef6d32e 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -40,7 +40,6 @@
         "no-use-before-define": "off",
         "strict": "off",
         "lines-around-directive": "off",
-        "no-shadow": "off",
         "no-restricted-globals": "off",
         "default-case": "off",
         "nonblock-statement-body-position": "off",
diff --git a/player/js/animation/AnimationManager.js b/player/js/animation/AnimationManager.js
index 4aa9055..c6d980c 100644
--- a/player/js/animation/AnimationManager.js
+++ b/player/js/animation/AnimationManager.js
@@ -41,9 +41,9 @@
   }
 
   function getRegisteredAnimations() {
-    var i, len = registeredAnimations.length;
+    var i, lenAnims = registeredAnimations.length;
     var animations = [];
-    for (i = 0; i < len; i += 1) {
+    for (i = 0; i < lenAnims; i += 1) {
       animations.push(registeredAnimations[i].animation);
     }
     return animations;
@@ -150,14 +150,14 @@
   function searchAnimations(animationData, standalone, renderer) {
     var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')),
       [].slice.call(document.getElementsByClassName('bodymovin')));
-    var i, len = animElements.length;
-    for (i = 0; i < len; i += 1) {
+    var i, lenAnims = animElements.length;
+    for (i = 0; i < lenAnims; i += 1) {
       if (renderer) {
         animElements[i].setAttribute('data-bm-type', renderer);
       }
       registerAnimation(animElements[i], animationData);
     }
-    if (standalone && len === 0) {
+    if (standalone && lenAnims === 0) {
       if (!renderer) {
         renderer = 'svg';
       }
diff --git a/player/js/animation/AnimationManagerWorkerOverride.js b/player/js/animation/AnimationManagerWorkerOverride.js
index a2c05ed..60c0260 100644
--- a/player/js/animation/AnimationManagerWorkerOverride.js
+++ b/player/js/animation/AnimationManagerWorkerOverride.js
@@ -41,9 +41,9 @@
   }
 
   function getRegisteredAnimations() {
-    var i, len = registeredAnimations.length;
+    var i, lenAnims = registeredAnimations.length;
     var animations = [];
-    for (i = 0; i < len; i += 1) {
+    for (i = 0; i < lenAnims; i += 1) {
       animations.push(registeredAnimations[i].animation);
     }
     return animations;
diff --git a/player/js/module_worker.js b/player/js/module_worker.js
index cb01edc..c186eba 100644
--- a/player/js/module_worker.js
+++ b/player/js/module_worker.js
@@ -1,7 +1,7 @@
 var lottiejs = (function (window) {
   'use strict';
   /* <%= contents %> */
-  var lottiejs = {};
+  var lottiejsLibrary = {};
 
   var _isFrozen = false;
 
@@ -32,28 +32,28 @@
     }
   }
 
-  lottiejs.play = animationManager.play;
-  lottiejs.pause = animationManager.pause;
-  lottiejs.togglePause = animationManager.togglePause;
-  lottiejs.setSpeed = animationManager.setSpeed;
-  lottiejs.setDirection = animationManager.setDirection;
-  lottiejs.stop = animationManager.stop;
-  lottiejs.registerAnimation = animationManager.registerAnimation;
-  lottiejs.loadAnimation = loadAnimation;
-  lottiejs.resize = animationManager.resize;
-  lottiejs.goToAndStop = animationManager.goToAndStop;
-  lottiejs.destroy = animationManager.destroy;
-  lottiejs.setQuality = setQuality;
-  lottiejs.freeze = animationManager.freeze;
-  lottiejs.unfreeze = animationManager.unfreeze;
+  lottiejsLibrary.play = animationManager.play;
+  lottiejsLibrary.pause = animationManager.pause;
+  lottiejsLibrary.togglePause = animationManager.togglePause;
+  lottiejsLibrary.setSpeed = animationManager.setSpeed;
+  lottiejsLibrary.setDirection = animationManager.setDirection;
+  lottiejsLibrary.stop = animationManager.stop;
+  lottiejsLibrary.registerAnimation = animationManager.registerAnimation;
+  lottiejsLibrary.loadAnimation = loadAnimation;
+  lottiejsLibrary.resize = animationManager.resize;
+  lottiejsLibrary.goToAndStop = animationManager.goToAndStop;
+  lottiejsLibrary.destroy = animationManager.destroy;
+  lottiejsLibrary.setQuality = setQuality;
+  lottiejsLibrary.freeze = animationManager.freeze;
+  lottiejsLibrary.unfreeze = animationManager.unfreeze;
   lottie.setVolume = animationManager.setVolume;
   lottie.mute = animationManager.mute;
   lottie.unmute = animationManager.unmute;
-  lottiejs.getRegisteredAnimations = animationManager.getRegisteredAnimations;
-  lottiejs.version = '[[BM_VERSION]]';
+  lottiejsLibrary.getRegisteredAnimations = animationManager.getRegisteredAnimations;
+  lottiejsLibrary.version = '[[BM_VERSION]]';
 
   var renderer = '';
-  return lottiejs;
+  return lottiejsLibrary;
 }({}));
 
 var animations = [];
diff --git a/player/js/utils/DataManager.js b/player/js/utils/DataManager.js
index ac14582..2f63cda 100644
--- a/player/js/utils/DataManager.js
+++ b/player/js/utils/DataManager.js
@@ -256,7 +256,7 @@
   var checkShapes = (function () {
     var minimumVersion = [4, 4, 18];
 
-    function completeShapes(arr) {
+    function completeClosingShapes(arr) {
       var i, len = arr.length;
       var j, jLen;
       var hasPaths = false;
@@ -277,7 +277,7 @@
           }
           hasPaths = true;
         } else if (arr[i].ty == 'gr') {
-          completeShapes(arr[i].it);
+          completeClosingShapes(arr[i].it);
         }
       }
     }
@@ -308,7 +308,7 @@
           }
         }
         if (layerData.ty === 4) {
-          completeShapes(layerData.shapes);
+          completeClosingShapes(layerData.shapes);
         }
       }
     }
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index b30dbb4..7c131d3 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -377,26 +377,26 @@
     var active = !this.data || this.data.hd !== true;
 
     var wiggle = function wiggle(freq, amp) {
-      var i, j, len = this.pv.length ? this.pv.length : 1;
-      var addedAmps = createTypedArray('float32', len);
+      var iWiggle, j, lenWiggle = this.pv.length ? this.pv.length : 1;
+      var addedAmps = createTypedArray('float32', lenWiggle);
       freq = 5;
       var iterations = Math.floor(time * freq);
-      i = 0;
+      iWiggle = 0;
       j = 0;
-      while (i < iterations) {
+      while (iWiggle < iterations) {
         // var rnd = BMMath.random();
-        for (j = 0; j < len; j += 1) {
+        for (j = 0; j < lenWiggle; j += 1) {
           addedAmps[j] += -amp + amp * 2 * BMMath.random();
           // addedAmps[j] += -amp + amp*2*rnd;
         }
-        i += 1;
+        iWiggle += 1;
       }
       // var rnd2 = BMMath.random();
       var periods = time * freq;
       var perc = periods - Math.floor(periods);
-      var arr = createTypedArray('float32', len);
-      if (len > 1) {
-        for (j = 0; j < len; j += 1) {
+      var arr = createTypedArray('float32', lenWiggle);
+      if (lenWiggle > 1) {
+        for (j = 0; j < lenWiggle; j += 1) {
           arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;
           // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;
           // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);
@@ -468,10 +468,10 @@
       t = t > 1 ? 1 : t < 0 ? 0 : t;
       var mult = fn(t);
       if ($bm_isInstanceOfArray(val1)) {
-        var i, len = val1.length;
-        var arr = createTypedArray('float32', len);
-        for (i = 0; i < len; i += 1) {
-          arr[i] = (val2[i] - val1[i]) * mult + val1[i];
+        var iKey, lenKey = val1.length;
+        var arr = createTypedArray('float32', lenKey);
+        for (iKey = 0; iKey < lenKey; iKey += 1) {
+          arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];
         }
         return arr;
       } else {
@@ -480,7 +480,7 @@
     }
 
     function nearestKey(time) {
-      var i, len = data.k.length, index, keyTime;
+      var iKey, lenKey = data.k.length, index, keyTime;
       if (!data.k.length || typeof (data.k[0]) === 'number') {
         index = 0;
         keyTime = 0;
@@ -491,52 +491,52 @@
           index = 1;
           keyTime = data.k[0].t;
         } else {
-          for (i = 0; i < len - 1; i += 1) {
-            if (time === data.k[i].t) {
-              index = i + 1;
-              keyTime = data.k[i].t;
+          for (iKey = 0; iKey < lenKey - 1; iKey += 1) {
+            if (time === data.k[iKey].t) {
+              index = iKey + 1;
+              keyTime = data.k[iKey].t;
               break;
-            } else if (time > data.k[i].t && time < data.k[i + 1].t) {
-              if (time - data.k[i].t > data.k[i + 1].t - time) {
-                index = i + 2;
-                keyTime = data.k[i + 1].t;
+            } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {
+              if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {
+                index = iKey + 2;
+                keyTime = data.k[iKey + 1].t;
               } else {
-                index = i + 1;
-                keyTime = data.k[i].t;
+                index = iKey + 1;
+                keyTime = data.k[iKey].t;
               }
               break;
             }
           }
           if (index === -1) {
-            index = i + 1;
-            keyTime = data.k[i].t;
+            index = iKey + 1;
+            keyTime = data.k[iKey].t;
           }
         }
       }
-      var ob = {};
-      ob.index = index;
-      ob.time = keyTime / elem.comp.globalData.frameRate;
-      return ob;
+      var obKey = {};
+      obKey.index = index;
+      obKey.time = keyTime / elem.comp.globalData.frameRate;
+      return obKey;
     }
 
     function key(ind) {
-      var ob, i, len;
+      var obKey, iKey, lenKey;
       if (!data.k.length || typeof (data.k[0]) === 'number') {
         throw new Error('The property has no keyframe at index ' + ind);
       }
       ind -= 1;
-      ob = {
+      obKey = {
         time: data.k[ind].t / elem.comp.globalData.frameRate,
         value: [],
       };
       var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;
 
-      len = arr.length;
-      for (i = 0; i < len; i += 1) {
-        ob[i] = arr[i];
-        ob.value[i] = arr[i];
+      lenKey = arr.length;
+      for (iKey = 0; iKey < lenKey; iKey += 1) {
+        obKey[iKey] = arr[iKey];
+        obKey.value[iKey] = arr[iKey];
       }
-      return ob;
+      return obKey;
     }
 
     function framesToTime(frames, fps) {
diff --git a/player/js/utils/expressions/TextSelectorPropertyDecorator.js b/player/js/utils/expressions/TextSelectorPropertyDecorator.js
index de9f4ef..952fe45 100644
--- a/player/js/utils/expressions/TextSelectorPropertyDecorator.js
+++ b/player/js/utils/expressions/TextSelectorPropertyDecorator.js
@@ -7,7 +7,7 @@
       return this.v;
     }
 
-    return function TextExpressionSelectorProp(elem, data) {
+    return function TextExpressionSelectorPropFactory(elem, data) {
       this.pv = 1;
       this.comp = elem.comp;
       this.elem = elem;
@@ -33,7 +33,7 @@
   var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;
   TextSelectorProp.getTextSelectorProp = function (elem, data, arr) {
     if (data.t === 1) {
-      return new TextExpressionSelectorProp(elem, data, arr);
+      return new TextExpressionSelectorPropFactory(elem, data, arr);
     } else {
       return propertyGetTextProp(elem, data, arr);
     }
diff --git a/player/js/utils/helpers/arrays.js b/player/js/utils/helpers/arrays.js
index 6efa9cd..108fee2 100644
--- a/player/js/utils/helpers/arrays.js
+++ b/player/js/utils/helpers/arrays.js
@@ -15,7 +15,7 @@
     }
     return arr;
   }
-  function createTypedArray(type, len) {
+  function createTypedArrayFactory(type, len) {
     if (type === 'float32') {
       return new Float32Array(len);
     } else if (type === 'int16') {
@@ -26,7 +26,7 @@
     return createRegularArray(type, len);
   }
   if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {
-    return createTypedArray;
+    return createTypedArrayFactory;
   } else {
     return createRegularArray;
   }
diff --git a/player/js/utils/imagePreloader.js b/player/js/utils/imagePreloader.js
index f2ef9b3..35ce2d1 100644
--- a/player/js/utils/imagePreloader.js
+++ b/player/js/utils/imagePreloader.js
@@ -134,7 +134,7 @@
     }
   }
 
-  function ImagePreloader(type) {
+  function ImagePreloaderFactory(type) {
     this._imageLoaded = imageLoaded.bind(this);
     this.testImageLoaded = testImageLoaded.bind(this);
     this.assetsPath = '';
@@ -145,7 +145,7 @@
     this.images = [];
   }
 
-  ImagePreloader.prototype = {
+  ImagePreloaderFactory.prototype = {
     loadAssets: loadAssets,
     setAssetsPath: setAssetsPath,
     setPath: setPath,
@@ -158,5 +158,5 @@
     setCacheType: setCacheType,
   };
 
-  return ImagePreloader;
+  return ImagePreloaderFactory;
 }());
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index 0f946dc..7e77ad0 100644
--- a/player/js/utils/shapes/ShapeProperty.js
+++ b/player/js/utils/shapes/ShapeProperty.js
@@ -198,7 +198,7 @@
   var EllShapeProperty = (function () {
     var cPoint = roundCorner;
 
-    function EllShapeProperty(elem, data) {
+    function EllShapePropertyFactory(elem, data) {
       /* this.v = {
                 v: createSizedArray(4),
                 i: createSizedArray(4),
@@ -225,7 +225,7 @@
       }
     }
 
-    EllShapeProperty.prototype = {
+    EllShapePropertyFactory.prototype = {
       reset: resetShape,
       getValue: function () {
         if (this.elem.globalData.frameId === this.frameId) {
@@ -269,13 +269,13 @@
       },
     };
 
-    extendPrototype([DynamicPropertyContainer], EllShapeProperty);
+    extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);
 
-    return EllShapeProperty;
+    return EllShapePropertyFactory;
   }());
 
   var StarShapeProperty = (function () {
-    function StarShapeProperty(elem, data) {
+    function StarShapePropertyFactory(elem, data) {
       this.v = shape_pool.newElement();
       this.v.setPathData(true, 0);
       this.elem = elem;
@@ -307,7 +307,7 @@
       }
     }
 
-    StarShapeProperty.prototype = {
+    StarShapePropertyFactory.prototype = {
       reset: resetShape,
       getValue: function () {
         if (this.elem.globalData.frameId === this.frameId) {
@@ -381,13 +381,13 @@
       },
 
     };
-    extendPrototype([DynamicPropertyContainer], StarShapeProperty);
+    extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);
 
-    return StarShapeProperty;
+    return StarShapePropertyFactory;
   }());
 
   var RectShapeProperty = (function () {
-    function RectShapeProperty(elem, data) {
+    function RectShapePropertyFactory(elem, data) {
       this.v = shape_pool.newElement();
       this.v.c = true;
       this.localShapeCollection = shapeCollection_pool.newShapeCollection();
@@ -409,7 +409,7 @@
       }
     }
 
-    RectShapeProperty.prototype = {
+    RectShapePropertyFactory.prototype = {
       convertRectToPath: function () {
         var p0 = this.p.v[0], p1 = this.p.v[1], v0 = this.s.v[0] / 2, v1 = this.s.v[1] / 2;
         var round = bm_min(v0, v1, this.r.v);
@@ -459,9 +459,9 @@
       },
       reset: resetShape,
     };
-    extendPrototype([DynamicPropertyContainer], RectShapeProperty);
+    extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);
 
-    return RectShapeProperty;
+    return RectShapePropertyFactory;
   }());
 
   function getShapeProp(elem, data, type) {
diff --git a/player/js/utils/text/TextSelectorProperty.js b/player/js/utils/text/TextSelectorProperty.js
index 23da845..b465143 100644
--- a/player/js/utils/text/TextSelectorProperty.js
+++ b/player/js/utils/text/TextSelectorProperty.js
@@ -3,7 +3,7 @@
   var min = Math.min;
   var floor = Math.floor;
 
-  function TextSelectorProp(elem, data) {
+  function TextSelectorPropFactory(elem, data) {
     this._currentTextLength = -1;
     this.k = false;
     this.data = data;
@@ -27,7 +27,7 @@
     }
   }
 
-  TextSelectorProp.prototype = {
+  TextSelectorPropFactory.prototype = {
     getMult: function (ind) {
       if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {
         this.getValue();
@@ -133,10 +133,10 @@
       this.finalE = e;
     },
   };
-  extendPrototype([DynamicPropertyContainer], TextSelectorProp);
+  extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);
 
   function getTextSelectorProp(elem, data, arr) {
-    return new TextSelectorProp(elem, data, arr);
+    return new TextSelectorPropFactory(elem, data, arr);
   }
 
   return {